UNPKG

@saleor/app-sdk

Version:

SDK for building great Saleor Apps

144 lines (123 loc) 5.15 kB
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } var _chunkSSRTOEHXjs = require('../../chunk-SSRTOEHX.js'); require('../../chunk-I3JXSADO.js'); require('../../chunk-EJ6YJ4BD.js'); require('../../chunk-ODMQWUGY.js'); require('../../chunk-GZLV5NDP.js'); require('../../chunk-IW44LNGX.js'); require('../../chunk-VTKKXRBQ.js'); var _chunkDE4A7PETjs = require('../../chunk-DE4A7PET.js'); // src/handlers/platforms/next/platform-adapter.ts var _rawbody = require('raw-body'); var _rawbody2 = _interopRequireDefault(_rawbody); 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(", ") : _nullishCoalesce(header, () => ( null)); } getBody() { return Promise.resolve(this.request.body); } async getRawBody() { return (await _rawbody2.default.call(void 0, 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 (0, _chunkSSRTOEHXjs.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 (0, _chunkSSRTOEHXjs.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 (0, _chunkSSRTOEHXjs.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 = _chunkDE4A7PETjs.createDebug.call(void 0, "SaleorWebhook"); var SaleorWebhook = class extends _chunkSSRTOEHXjs.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); } }; exports.NextJsAdapter = NextJsAdapter; exports.SaleorAsyncWebhook = SaleorAsyncWebhook; exports.SaleorSyncWebhook = SaleorSyncWebhook; exports.createAppRegisterHandler = createAppRegisterHandler; exports.createManifestHandler = createManifestHandler; exports.createProtectedHandler = createProtectedHandler;