
* 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
80 lines
2.3 KiB
TypeScript
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"]);
|