saleor-apps-redis_apl/apps/cms/src/pages/api/channels.ts
Dawid a07f337992
Add CMS hub app (#262)
* Add CMS hub app

* Cleanup

* Refactor CMS product variants webhooks

* Test utils 1

* Remove legacy code

* Add .env example

* Update types

* Remove unused code

* Fix cms client opertions settings test

* Fix pnpm-lock file

* Bump typescript to 4.9, support satisfies expressions
2023-03-16 11:17:00 +01:00

80 lines
2.3 KiB
TypeScript

import { createProtectedHandler, NextProtectedApiHandler } from "@saleor/app-sdk/handlers/next";
import type { NextApiRequest, NextApiResponse } from "next";
import { saleorApp } from "../../../saleor-app";
import { CMSSchemaChannels, SingleChannelSchema } from "../../lib/cms/config";
import { createClient } from "../../lib/graphql";
import { createSettingsManager } from "../../lib/metadata";
export type SettingsUpdateApiRequest = SingleChannelSchema;
export interface ChannelsApiResponse {
success: boolean;
data?: CMSSchemaChannels;
}
// todo: implement
// const obfuscateSecret = (secret: string) => {
// return "*".repeat(secret.length - 4) + secret.substring(secret.length - 4);
// };
const handler: NextProtectedApiHandler = async (
req: NextApiRequest,
res: NextApiResponse<ChannelsApiResponse>,
context
) => {
const { authData } = context;
const client = createClient(authData.saleorApiUrl, async () => ({
token: authData.token,
}));
const settingsManager = createSettingsManager(client);
if (req.method === "GET") {
const settingsManagerValue = await settingsManager.get("channels");
return res.status(200).json({
success: true,
data: settingsManagerValue && JSON.parse(settingsManagerValue),
});
} else if (req.method === "POST") {
const channelSettings = req.body as SingleChannelSchema;
if (channelSettings) {
const currentSettings = await settingsManager.get("channels");
const currentSettingsParsed = currentSettings && JSON.parse(currentSettings);
const settings = [
{
key: "channels",
value: JSON.stringify({
...currentSettingsParsed,
[channelSettings.channelSlug]: channelSettings,
}),
},
];
try {
await settingsManager.set(settings);
return res.status(200).json({
success: true,
data: {
...currentSettingsParsed,
[channelSettings.channelSlug]: channelSettings,
},
});
} catch (error) {
return res.status(500).json({ success: false });
}
} else {
console.log("Missing Settings Values");
return res.status(400).json({ success: false });
}
}
return res.status(405).end();
};
export default createProtectedHandler(handler, saleorApp.apl, ["MANAGE_APPS"]);