saleor-apps-redis_apl/apps/cms/src/pages/api/ping-provider-instance.ts
Krzysztof Wolski a1ad70e879
Unify urql version, use shared util to create client (#657)
* Add createGraphQLClient util to shared package

* Update urql version and use createGraphQLClient from shared package

* Update urql version and use createGraphQLClient from shared package - data importer

* Update urql version and use createGraphQLClient from shared package - cms

* Update CRM

* Update invoices

* Update klaviyo

* Update slack

* Update products feed

* Update search

* Remove unused urql next

* Update monitoring

* Update taxes

* Remove multipart since no longer used

* Update the lockfile

* Removed urql introspection since none of our apps used it

* Add changeset
2023-06-19 15:59:27 +02:00

80 lines
2.2 KiB
TypeScript

import { NextProtectedApiHandler, createProtectedHandler } from "@saleor/app-sdk/handlers/next";
import { saleorApp } from "../../../saleor-app";
import type { NextApiRequest, NextApiResponse } from "next";
import { createSettingsManager } from "../../lib/metadata";
import { getProviderInstancesSettings } from "../../lib/cms/client/settings";
import { pingProviderInstance } from "../../lib/cms/client/clients-execution";
import { createGraphQLClient, createLogger } from "@saleor/apps-shared";
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;
const logger = createLogger({
endpoint: "ping-provider-instance",
});
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,
});
}
const client = createGraphQLClient({
saleorApiUrl: authData.saleorApiUrl,
token: authData.token,
});
const settingsManager = createSettingsManager(client);
const providerInstancesSettingsParsed = await getProviderInstancesSettings(settingsManager);
const providerInstanceSettings = providerInstancesSettingsParsed[providerInstanceId];
if (!providerInstanceSettings) {
logger.debug("Settings not found, returning 400");
return res.status(400).json({
success: false,
});
}
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");
return res.status(400).json({
success: false,
});
}
};
export default createProtectedHandler(handler, saleorApp.apl, ["MANAGE_APPS"]);