saleor-apps-redis_apl/apps/klaviyo/pages/api/configuration.ts
Lukasz Ostrowski 4865d33d5d
Add Klaviyo (#112)
* Add Klaviyo

* Update schema

* Fix build

* Empty commit to trigger deploy
2023-02-09 10:41:54 +01:00

72 lines
2.1 KiB
TypeScript

import { createProtectedHandler, NextProtectedApiHandler } from "@saleor/app-sdk/handlers/next";
import { EncryptedMetadataManager } from "@saleor/app-sdk/settings-manager";
import { createClient } from "../../lib/graphql";
import { createSettingsManager } from "../../lib/metadata";
import { saleorApp } from "../../saleor-app";
type ConfigurationKeysType =
| "PUBLIC_TOKEN"
| "CUSTOMER_CREATED_METRIC"
| "FULFILLMENT_CREATED_METRIC"
| "ORDER_CREATED_METRIC"
| "ORDER_FULLY_PAID_METRIC";
interface PostRequestBody {
data: {
key: ConfigurationKeysType;
value: string;
}[];
}
const getAppSettings = async (settingsManager: EncryptedMetadataManager) => [
{
key: "CUSTOMER_CREATED_METRIC",
value: (await settingsManager.get("CUSTOMER_CREATED_METRIC")) ?? "CUSTOMER_CREATED_METRIC",
},
{
key: "FULFILLMENT_CREATED_METRIC",
value:
(await settingsManager.get("FULFILLMENT_CREATED_METRIC")) ?? "FULFILLMENT_CREATED_METRIC",
},
{
key: "ORDER_CREATED_METRIC",
value: (await settingsManager.get("ORDER_CREATED_METRIC")) ?? "ORDER_CREATED_METRIC",
},
{
key: "ORDER_FULLY_PAID_METRIC",
value: (await settingsManager.get("ORDER_FULLY_PAID_METRIC")) ?? "ORDER_FULLY_PAID_METRIC",
},
{ key: "PUBLIC_TOKEN", value: await settingsManager.get("PUBLIC_TOKEN") },
];
const handler: NextProtectedApiHandler = async (request, res, ctx) => {
console.debug("Configuration handler called");
const {
authData: { token, saleorApiUrl, appId },
} = ctx;
const client = createClient(saleorApiUrl, async () => Promise.resolve({ token }));
const settings = createSettingsManager(client, appId);
switch (request.method!) {
case "GET":
return res.json({
success: true,
data: await getAppSettings(settings),
});
case "POST": {
await settings.set((request.body as PostRequestBody).data);
return res.json({
success: true,
data: await getAppSettings(settings),
});
}
default:
return res.status(405).end();
}
};
export default createProtectedHandler(handler, saleorApp.apl, ["MANAGE_APPS"]);