2023-04-18 16:46:28 +00:00
|
|
|
import { NextProtectedApiHandler, createProtectedHandler } from "@saleor/app-sdk/handlers/next";
|
|
|
|
import { saleorApp } from "../../../saleor-app";
|
|
|
|
import type { NextApiRequest, NextApiResponse } from "next";
|
2023-05-05 06:15:47 +00:00
|
|
|
|
2023-04-18 16:46:28 +00:00
|
|
|
import { createSettingsManager } from "../../lib/metadata";
|
|
|
|
import { getProviderInstancesSettings } from "../../lib/cms/client/settings";
|
|
|
|
import { pingProviderInstance } from "../../lib/cms/client/clients-execution";
|
2023-06-19 13:59:27 +00:00
|
|
|
import { createGraphQLClient, createLogger } from "@saleor/apps-shared";
|
2023-04-18 16:46:28 +00:00
|
|
|
|
|
|
|
export interface ProviderInstancePingApiPayload {
|
|
|
|
providerInstanceId: string;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface ProviderInstancePingApiResponse {
|
|
|
|
success: boolean;
|
|
|
|
}
|
|
|
|
|
|
|
|
const handler: NextProtectedApiHandler = async (
|
|
|
|
req: NextApiRequest,
|
|
|
|
res: NextApiResponse<ProviderInstancePingApiResponse>,
|
|
|
|
context
|
|
|
|
) => {
|
|
|
|
const { authData } = context;
|
|
|
|
const { providerInstanceId } = req.body as ProviderInstancePingApiPayload;
|
|
|
|
|
2023-05-05 06:15:47 +00:00
|
|
|
const logger = createLogger({
|
2023-04-18 16:46:28 +00:00
|
|
|
endpoint: "ping-provider-instance",
|
|
|
|
});
|
2023-05-05 06:15:47 +00:00
|
|
|
|
2023-04-18 16:46:28 +00:00
|
|
|
logger.debug({ providerInstanceId }, "Called endpoint ping-provider-instance");
|
|
|
|
|
|
|
|
if (req.method !== "POST") {
|
|
|
|
return res.status(405).json({
|
|
|
|
success: false,
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!providerInstanceId) {
|
|
|
|
return res.status(400).json({
|
|
|
|
success: false,
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2023-06-19 13:59:27 +00:00
|
|
|
const client = createGraphQLClient({
|
|
|
|
saleorApiUrl: authData.saleorApiUrl,
|
2023-04-18 16:46:28 +00:00
|
|
|
token: authData.token,
|
2023-06-19 13:59:27 +00:00
|
|
|
});
|
|
|
|
|
2023-04-18 16:46:28 +00:00
|
|
|
const settingsManager = createSettingsManager(client);
|
|
|
|
const providerInstancesSettingsParsed = await getProviderInstancesSettings(settingsManager);
|
|
|
|
|
|
|
|
const providerInstanceSettings = providerInstancesSettingsParsed[providerInstanceId];
|
|
|
|
|
|
|
|
if (!providerInstanceSettings) {
|
2023-05-18 08:49:44 +00:00
|
|
|
logger.debug("Settings not found, returning 400");
|
2023-04-18 16:46:28 +00:00
|
|
|
return res.status(400).json({
|
|
|
|
success: false,
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2023-05-18 08:49:44 +00:00
|
|
|
try {
|
|
|
|
const pingResult = await pingProviderInstance(providerInstanceSettings);
|
|
|
|
|
|
|
|
if (pingResult.ok) {
|
|
|
|
return res.status(200).json({
|
|
|
|
success: true,
|
|
|
|
});
|
|
|
|
} else {
|
|
|
|
throw pingResult;
|
|
|
|
}
|
|
|
|
} catch (e) {
|
|
|
|
logger.debug(e, "Failed connecting to the CMS");
|
2023-04-18 16:46:28 +00:00
|
|
|
|
|
|
|
return res.status(400).json({
|
|
|
|
success: false,
|
|
|
|
});
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
export default createProtectedHandler(handler, saleorApp.apl, ["MANAGE_APPS"]);
|