UNPKG

@saleor/app-sdk

Version:

SDK for building great Saleor Apps

144 lines (136 loc) 4.58 kB
import { GenericSaleorWebhook, ManifestActionHandler, ProtectedActionValidator, RegisterActionHandler } from "../../chunk-OXDAFSK7.mjs"; import "../../chunk-WR25JCBM.mjs"; import "../../chunk-NHGUNOYT.mjs"; import "../../chunk-FTAQRPFZ.mjs"; import "../../chunk-DMVVCVUO.mjs"; import "../../chunk-5KB46KET.mjs"; import "../../chunk-4FJHEINB.mjs"; import { createDebug } from "../../chunk-CPDLIPGD.mjs"; // src/handlers/platforms/next/platform-adapter.ts import getRawBody from "raw-body"; var NextJsAdapter = class { constructor(request, res) { this.request = request; this.res = res; this.type = "next"; } getHeader(name) { const header = this.request.headers[name]; return Array.isArray(header) ? header.join(", ") : header ?? null; } getBody() { return Promise.resolve(this.request.body); } async getRawBody() { return (await getRawBody(this.request, { length: this.request.headers["content-length"] })).toString(); } getBaseUrl() { const { host, "x-forwarded-proto": xForwardedProto = "http" } = this.request.headers; const xForwardedProtos = Array.isArray(xForwardedProto) ? xForwardedProto.join(",") : xForwardedProto; const protocols = xForwardedProtos.split(","); const protocol = protocols.find((el) => el === "https") || protocols.find((el) => el === "http") || protocols[0]; return `${protocol}://${host}`; } get method() { return this.request.method; } async send(result) { if (result.bodyType === "json") { this.res.status(result.status).json(result.body); } else { this.res.status(result.status).send(result.body); } } }; // src/handlers/platforms/next/create-app-register-handler.ts var createAppRegisterHandler = (config) => async (req, res) => { const adapter = new NextJsAdapter(req, res); const actionHandler = new RegisterActionHandler(adapter); const result = await actionHandler.handleAction(config); return adapter.send(result); }; // src/handlers/platforms/next/create-manifest-handler.ts var createManifestHandler = (options) => async (req, res) => { const adapter = new NextJsAdapter(req, res); const actionHandler = new ManifestActionHandler(adapter); const result = await actionHandler.handleAction(options); return adapter.send(result); }; // src/handlers/platforms/next/create-protected-handler.ts var createProtectedHandler = (handlerFn, apl, requiredPermissions) => async (req, res) => { const adapter = new NextJsAdapter(req, res); const actionValidator = new ProtectedActionValidator(adapter); const validationResult = await actionValidator.validateRequest({ apl, requiredPermissions }); if (validationResult.result === "failure") { return adapter.send(validationResult.value); } const context = validationResult.value; try { return handlerFn(req, res, context); } catch (err) { return res.status(500).end(); } }; // src/handlers/platforms/next/saleor-webhooks/saleor-webhook.ts var debug = createDebug("SaleorWebhook"); var SaleorWebhook = class extends GenericSaleorWebhook { /** * Wraps provided function, to ensure incoming request comes from registered Saleor instance. * Also provides additional `context` object containing typed payload and request properties. */ createHandler(handlerFn) { return async (req, res) => { const adapter = new NextJsAdapter(req, res); const prepareRequestResult = await super.prepareRequest(adapter); if (prepareRequestResult.result === "sendResponse") { return prepareRequestResult.response; } debug("Incoming request validated. Call handlerFn"); return handlerFn(req, res, { ...prepareRequestResult.context }); }; } }; // src/handlers/platforms/next/saleor-webhooks/saleor-async-webhook.ts var SaleorAsyncWebhook = class extends SaleorWebhook { constructor(configuration) { super(configuration); this.eventType = "async"; this.event = configuration.event; } createHandler(handlerFn) { return super.createHandler(handlerFn); } }; // src/handlers/platforms/next/saleor-webhooks/saleor-sync-webhook.ts var SaleorSyncWebhook = class extends SaleorWebhook { constructor(configuration) { super(configuration); this.eventType = "sync"; this.event = configuration.event; } createHandler(handlerFn) { return super.createHandler(handlerFn); } }; export { NextJsAdapter, SaleorAsyncWebhook, SaleorSyncWebhook, createAppRegisterHandler, createManifestHandler, createProtectedHandler };