@polar-sh/adapter-utils
Version:
Core package for Polar adapters
235 lines (231 loc) • 7.29 kB
JavaScript
"use strict";
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/index.ts
var index_exports = {};
__export(index_exports, {
EntitlementStrategy: () => EntitlementStrategy,
Entitlements: () => Entitlements,
handleWebhookPayload: () => handleWebhookPayload
});
module.exports = __toCommonJS(index_exports);
// src/webhooks/webhooks.ts
var handleWebhookPayload = async (payload, { webhookSecret, entitlements, onPayload, ...eventHandlers }) => {
const promises = [];
if (onPayload) {
promises.push(onPayload(payload));
}
switch (payload.type) {
case "checkout.created":
if (eventHandlers.onCheckoutCreated) {
promises.push(eventHandlers.onCheckoutCreated(payload));
}
break;
case "checkout.updated":
if (eventHandlers.onCheckoutUpdated) {
promises.push(eventHandlers.onCheckoutUpdated(payload));
}
break;
case "order.created":
if (eventHandlers.onOrderCreated) {
promises.push(eventHandlers.onOrderCreated(payload));
}
break;
case "order.updated":
if (eventHandlers.onOrderUpdated) {
promises.push(eventHandlers.onOrderUpdated(payload));
}
break;
case "order.paid":
if (eventHandlers.onOrderPaid) {
promises.push(eventHandlers.onOrderPaid(payload));
}
break;
case "subscription.created":
if (eventHandlers.onSubscriptionCreated) {
promises.push(eventHandlers.onSubscriptionCreated(payload));
}
break;
case "subscription.updated":
if (eventHandlers.onSubscriptionUpdated) {
promises.push(eventHandlers.onSubscriptionUpdated(payload));
}
break;
case "subscription.active":
if (eventHandlers.onSubscriptionActive) {
promises.push(eventHandlers.onSubscriptionActive(payload));
}
break;
case "subscription.canceled":
if (eventHandlers.onSubscriptionCanceled) {
promises.push(eventHandlers.onSubscriptionCanceled(payload));
}
break;
case "subscription.uncanceled":
if (eventHandlers.onSubscriptionUncanceled) {
promises.push(eventHandlers.onSubscriptionUncanceled(payload));
}
break;
case "subscription.revoked":
if (eventHandlers.onSubscriptionRevoked) {
promises.push(eventHandlers.onSubscriptionRevoked(payload));
}
break;
case "product.created":
if (eventHandlers.onProductCreated) {
promises.push(eventHandlers.onProductCreated(payload));
}
break;
case "product.updated":
if (eventHandlers.onProductUpdated) {
promises.push(eventHandlers.onProductUpdated(payload));
}
break;
case "organization.updated":
if (eventHandlers.onOrganizationUpdated) {
promises.push(eventHandlers.onOrganizationUpdated(payload));
}
break;
case "benefit.created":
if (eventHandlers.onBenefitCreated) {
promises.push(eventHandlers.onBenefitCreated(payload));
}
break;
case "benefit.updated":
if (eventHandlers.onBenefitUpdated) {
promises.push(eventHandlers.onBenefitUpdated(payload));
}
break;
case "benefit_grant.created":
if (eventHandlers.onBenefitGrantCreated) {
promises.push(eventHandlers.onBenefitGrantCreated(payload));
}
break;
case "benefit_grant.updated":
if (eventHandlers.onBenefitGrantUpdated) {
promises.push(eventHandlers.onBenefitGrantUpdated(payload));
}
break;
case "benefit_grant.revoked":
if (eventHandlers.onBenefitGrantRevoked) {
promises.push(eventHandlers.onBenefitGrantRevoked(payload));
}
break;
case "customer.created":
if (eventHandlers.onCustomerCreated) {
promises.push(eventHandlers.onCustomerCreated(payload));
}
break;
case "customer.updated":
if (eventHandlers.onCustomerUpdated) {
promises.push(eventHandlers.onCustomerUpdated(payload));
}
break;
case "customer.deleted":
if (eventHandlers.onCustomerDeleted) {
promises.push(eventHandlers.onCustomerDeleted(payload));
}
break;
case "customer.state_changed":
if (eventHandlers.onCustomerStateChanged) {
promises.push(eventHandlers.onCustomerStateChanged(payload));
}
break;
case "order.refunded":
if (eventHandlers.onOrderRefunded) {
promises.push(eventHandlers.onOrderRefunded(payload));
}
break;
case "refund.created":
if (eventHandlers.onRefundCreated) {
promises.push(eventHandlers.onRefundCreated(payload));
}
break;
case "refund.updated":
if (eventHandlers.onRefundUpdated) {
promises.push(eventHandlers.onRefundUpdated(payload));
}
break;
}
switch (payload.type) {
case "benefit_grant.created":
case "benefit_grant.revoked":
if (entitlements) {
for (const handler of entitlements.handlers) {
promises.push(handler(payload));
}
}
}
return Promise.all(promises);
};
// src/entitlement/entitlement.ts
var EntitlementStrategy = class {
grantCallbacks = [];
revokeCallbacks = [];
grant(callback) {
this.grantCallbacks.push(callback);
return this;
}
revoke(callback) {
this.revokeCallbacks.push(callback);
return this;
}
handler(slug) {
return async (payload) => {
if (payload.data.benefit.description === slug) {
switch (payload.type) {
case "benefit_grant.created":
await Promise.all(
this.grantCallbacks.map(
(callback) => callback({
customer: payload.data.customer,
properties: payload.data.properties,
payload
})
)
);
break;
case "benefit_grant.revoked":
await Promise.all(
this.revokeCallbacks.map(
(callback) => callback({
customer: payload.data.customer,
properties: payload.data.properties,
payload
})
)
);
break;
}
}
};
}
};
var Entitlements = class {
static handlers = [];
static use(slug, strategy) {
this.handlers.push(strategy.handler(slug));
return this;
}
};
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
EntitlementStrategy,
Entitlements,
handleWebhookPayload
});