@saleor/app-sdk
Version:
SDK for building great Saleor Apps
144 lines (123 loc) • 5.15 kB
JavaScript
;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 _chunkQD7O4CVVjs = require('../../chunk-QD7O4CVV.js');
require('../../chunk-I3JXSADO.js');
require('../../chunk-EJ6YJ4BD.js');
require('../../chunk-ODMQWUGY.js');
require('../../chunk-GZLV5NDP.js');
require('../../chunk-VEHOYPBT.js');
require('../../chunk-KM2345JL.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, _chunkQD7O4CVVjs.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, _chunkQD7O4CVVjs.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, _chunkQD7O4CVVjs.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 _chunkQD7O4CVVjs.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;