@polar-sh/sdk 1.0.0-alpha.11 → 1.0.0-alpha.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. package/README.md +58 -2
  2. package/dist/2026-04/index.cjs +132 -0
  3. package/dist/2026-04/index.cjs.map +1 -1
  4. package/dist/2026-04/index.d.cts +836 -40
  5. package/dist/2026-04/index.d.cts.map +1 -1
  6. package/dist/2026-04/index.d.mts +836 -40
  7. package/dist/2026-04/index.d.mts.map +1 -1
  8. package/dist/2026-04/index.mjs +128 -2
  9. package/dist/2026-04/index.mjs.map +1 -1
  10. package/dist/2026-04/services/benefit_grants.cjs +3 -3
  11. package/dist/2026-04/services/benefit_grants.cjs.map +1 -1
  12. package/dist/2026-04/services/benefit_grants.d.cts +4 -4
  13. package/dist/2026-04/services/benefit_grants.d.mts +4 -4
  14. package/dist/2026-04/services/benefit_grants.mjs +3 -3
  15. package/dist/2026-04/services/benefit_grants.mjs.map +1 -1
  16. package/dist/2026-04/services/benefits.cjs +6 -6
  17. package/dist/2026-04/services/benefits.cjs.map +1 -1
  18. package/dist/2026-04/services/benefits.d.cts +6 -6
  19. package/dist/2026-04/services/benefits.d.mts +6 -6
  20. package/dist/2026-04/services/benefits.mjs +5 -5
  21. package/dist/2026-04/services/benefits.mjs.map +1 -1
  22. package/dist/2026-04/services/checkout_links.cjs +3 -3
  23. package/dist/2026-04/services/checkout_links.cjs.map +1 -1
  24. package/dist/2026-04/services/checkout_links.d.cts +4 -4
  25. package/dist/2026-04/services/checkout_links.d.mts +4 -4
  26. package/dist/2026-04/services/checkout_links.mjs +3 -3
  27. package/dist/2026-04/services/checkout_links.mjs.map +1 -1
  28. package/dist/2026-04/services/checkouts.cjs +3 -3
  29. package/dist/2026-04/services/checkouts.cjs.map +1 -1
  30. package/dist/2026-04/services/checkouts.d.cts +4 -4
  31. package/dist/2026-04/services/checkouts.d.mts +4 -4
  32. package/dist/2026-04/services/checkouts.mjs +3 -3
  33. package/dist/2026-04/services/checkouts.mjs.map +1 -1
  34. package/dist/2026-04/services/custom_fields.cjs +3 -3
  35. package/dist/2026-04/services/custom_fields.cjs.map +1 -1
  36. package/dist/2026-04/services/custom_fields.d.cts +4 -4
  37. package/dist/2026-04/services/custom_fields.d.mts +4 -4
  38. package/dist/2026-04/services/custom_fields.mjs +3 -3
  39. package/dist/2026-04/services/custom_fields.mjs.map +1 -1
  40. package/dist/2026-04/services/customer_meters.cjs +3 -3
  41. package/dist/2026-04/services/customer_meters.cjs.map +1 -1
  42. package/dist/2026-04/services/customer_meters.d.cts +4 -4
  43. package/dist/2026-04/services/customer_meters.d.mts +4 -4
  44. package/dist/2026-04/services/customer_meters.mjs +3 -3
  45. package/dist/2026-04/services/customer_meters.mjs.map +1 -1
  46. package/dist/2026-04/services/customer_portal/benefit_grants.cjs +3 -3
  47. package/dist/2026-04/services/customer_portal/benefit_grants.cjs.map +1 -1
  48. package/dist/2026-04/services/customer_portal/benefit_grants.d.cts +4 -4
  49. package/dist/2026-04/services/customer_portal/benefit_grants.d.mts +4 -4
  50. package/dist/2026-04/services/customer_portal/benefit_grants.mjs +3 -3
  51. package/dist/2026-04/services/customer_portal/benefit_grants.mjs.map +1 -1
  52. package/dist/2026-04/services/customer_portal/customer_meters.cjs +3 -3
  53. package/dist/2026-04/services/customer_portal/customer_meters.cjs.map +1 -1
  54. package/dist/2026-04/services/customer_portal/customer_meters.d.cts +4 -4
  55. package/dist/2026-04/services/customer_portal/customer_meters.d.mts +4 -4
  56. package/dist/2026-04/services/customer_portal/customer_meters.mjs +3 -3
  57. package/dist/2026-04/services/customer_portal/customer_meters.mjs.map +1 -1
  58. package/dist/2026-04/services/customer_portal/customer_session.d.cts +1 -1
  59. package/dist/2026-04/services/customer_portal/customer_session.d.mts +1 -1
  60. package/dist/2026-04/services/customer_portal/customers.cjs +3 -3
  61. package/dist/2026-04/services/customer_portal/customers.cjs.map +1 -1
  62. package/dist/2026-04/services/customer_portal/customers.d.cts +4 -4
  63. package/dist/2026-04/services/customer_portal/customers.d.mts +4 -4
  64. package/dist/2026-04/services/customer_portal/customers.mjs +3 -3
  65. package/dist/2026-04/services/customer_portal/customers.mjs.map +1 -1
  66. package/dist/2026-04/services/customer_portal/downloadables.cjs +3 -3
  67. package/dist/2026-04/services/customer_portal/downloadables.cjs.map +1 -1
  68. package/dist/2026-04/services/customer_portal/downloadables.d.cts +4 -4
  69. package/dist/2026-04/services/customer_portal/downloadables.d.mts +4 -4
  70. package/dist/2026-04/services/customer_portal/downloadables.mjs +3 -3
  71. package/dist/2026-04/services/customer_portal/downloadables.mjs.map +1 -1
  72. package/dist/2026-04/services/customer_portal/index.d.cts +11 -11
  73. package/dist/2026-04/services/customer_portal/index.d.mts +11 -11
  74. package/dist/2026-04/services/customer_portal/license_keys.cjs +3 -3
  75. package/dist/2026-04/services/customer_portal/license_keys.cjs.map +1 -1
  76. package/dist/2026-04/services/customer_portal/license_keys.d.cts +4 -4
  77. package/dist/2026-04/services/customer_portal/license_keys.d.mts +4 -4
  78. package/dist/2026-04/services/customer_portal/license_keys.mjs +3 -3
  79. package/dist/2026-04/services/customer_portal/license_keys.mjs.map +1 -1
  80. package/dist/2026-04/services/customer_portal/members.cjs +3 -3
  81. package/dist/2026-04/services/customer_portal/members.cjs.map +1 -1
  82. package/dist/2026-04/services/customer_portal/members.d.cts +4 -4
  83. package/dist/2026-04/services/customer_portal/members.d.mts +4 -4
  84. package/dist/2026-04/services/customer_portal/members.mjs +3 -3
  85. package/dist/2026-04/services/customer_portal/members.mjs.map +1 -1
  86. package/dist/2026-04/services/customer_portal/orders.cjs +3 -3
  87. package/dist/2026-04/services/customer_portal/orders.cjs.map +1 -1
  88. package/dist/2026-04/services/customer_portal/orders.d.cts +4 -4
  89. package/dist/2026-04/services/customer_portal/orders.d.mts +4 -4
  90. package/dist/2026-04/services/customer_portal/orders.mjs +3 -3
  91. package/dist/2026-04/services/customer_portal/orders.mjs.map +1 -1
  92. package/dist/2026-04/services/customer_portal/organizations.d.cts +1 -1
  93. package/dist/2026-04/services/customer_portal/organizations.d.mts +1 -1
  94. package/dist/2026-04/services/customer_portal/seats.cjs +3 -3
  95. package/dist/2026-04/services/customer_portal/seats.cjs.map +1 -1
  96. package/dist/2026-04/services/customer_portal/seats.d.cts +4 -4
  97. package/dist/2026-04/services/customer_portal/seats.d.mts +4 -4
  98. package/dist/2026-04/services/customer_portal/seats.mjs +3 -3
  99. package/dist/2026-04/services/customer_portal/seats.mjs.map +1 -1
  100. package/dist/2026-04/services/customer_portal/subscriptions.cjs +3 -3
  101. package/dist/2026-04/services/customer_portal/subscriptions.cjs.map +1 -1
  102. package/dist/2026-04/services/customer_portal/subscriptions.d.cts +4 -4
  103. package/dist/2026-04/services/customer_portal/subscriptions.d.mts +4 -4
  104. package/dist/2026-04/services/customer_portal/subscriptions.mjs +3 -3
  105. package/dist/2026-04/services/customer_portal/subscriptions.mjs.map +1 -1
  106. package/dist/2026-04/services/customer_portal/wallets.cjs +3 -3
  107. package/dist/2026-04/services/customer_portal/wallets.cjs.map +1 -1
  108. package/dist/2026-04/services/customer_portal/wallets.d.cts +4 -4
  109. package/dist/2026-04/services/customer_portal/wallets.d.mts +4 -4
  110. package/dist/2026-04/services/customer_portal/wallets.mjs +3 -3
  111. package/dist/2026-04/services/customer_portal/wallets.mjs.map +1 -1
  112. package/dist/2026-04/services/customer_seats.d.cts +1 -1
  113. package/dist/2026-04/services/customer_seats.d.mts +1 -1
  114. package/dist/2026-04/services/customer_sessions.d.cts +1 -1
  115. package/dist/2026-04/services/customer_sessions.d.mts +1 -1
  116. package/dist/2026-04/services/customers/index.cjs +9 -9
  117. package/dist/2026-04/services/customers/index.cjs.map +1 -1
  118. package/dist/2026-04/services/customers/index.d.cts +8 -8
  119. package/dist/2026-04/services/customers/index.d.mts +8 -8
  120. package/dist/2026-04/services/customers/index.mjs +7 -7
  121. package/dist/2026-04/services/customers/index.mjs.map +1 -1
  122. package/dist/2026-04/services/customers/members.d.cts +1 -1
  123. package/dist/2026-04/services/customers/members.d.mts +1 -1
  124. package/dist/2026-04/services/discounts.cjs +3 -3
  125. package/dist/2026-04/services/discounts.cjs.map +1 -1
  126. package/dist/2026-04/services/discounts.d.cts +4 -4
  127. package/dist/2026-04/services/discounts.d.mts +4 -4
  128. package/dist/2026-04/services/discounts.mjs +3 -3
  129. package/dist/2026-04/services/discounts.mjs.map +1 -1
  130. package/dist/2026-04/services/disputes.cjs +3 -3
  131. package/dist/2026-04/services/disputes.cjs.map +1 -1
  132. package/dist/2026-04/services/disputes.d.cts +4 -4
  133. package/dist/2026-04/services/disputes.d.mts +4 -4
  134. package/dist/2026-04/services/disputes.mjs +3 -3
  135. package/dist/2026-04/services/disputes.mjs.map +1 -1
  136. package/dist/2026-04/services/event_types.cjs +3 -3
  137. package/dist/2026-04/services/event_types.cjs.map +1 -1
  138. package/dist/2026-04/services/event_types.d.cts +4 -4
  139. package/dist/2026-04/services/event_types.d.mts +4 -4
  140. package/dist/2026-04/services/event_types.mjs +3 -3
  141. package/dist/2026-04/services/event_types.mjs.map +1 -1
  142. package/dist/2026-04/services/events.cjs +3 -3
  143. package/dist/2026-04/services/events.cjs.map +1 -1
  144. package/dist/2026-04/services/events.d.cts +4 -4
  145. package/dist/2026-04/services/events.d.mts +4 -4
  146. package/dist/2026-04/services/events.mjs +3 -3
  147. package/dist/2026-04/services/events.mjs.map +1 -1
  148. package/dist/2026-04/services/files.cjs +3 -3
  149. package/dist/2026-04/services/files.cjs.map +1 -1
  150. package/dist/2026-04/services/files.d.cts +4 -4
  151. package/dist/2026-04/services/files.d.mts +4 -4
  152. package/dist/2026-04/services/files.mjs +3 -3
  153. package/dist/2026-04/services/files.mjs.map +1 -1
  154. package/dist/2026-04/services/license_keys.cjs +3 -3
  155. package/dist/2026-04/services/license_keys.cjs.map +1 -1
  156. package/dist/2026-04/services/license_keys.d.cts +4 -4
  157. package/dist/2026-04/services/license_keys.d.mts +4 -4
  158. package/dist/2026-04/services/license_keys.mjs +3 -3
  159. package/dist/2026-04/services/license_keys.mjs.map +1 -1
  160. package/dist/2026-04/services/members.cjs +3 -3
  161. package/dist/2026-04/services/members.cjs.map +1 -1
  162. package/dist/2026-04/services/members.d.cts +4 -4
  163. package/dist/2026-04/services/members.d.mts +4 -4
  164. package/dist/2026-04/services/members.mjs +3 -3
  165. package/dist/2026-04/services/members.mjs.map +1 -1
  166. package/dist/2026-04/services/meters.cjs +3 -3
  167. package/dist/2026-04/services/meters.cjs.map +1 -1
  168. package/dist/2026-04/services/meters.d.cts +4 -4
  169. package/dist/2026-04/services/meters.d.mts +4 -4
  170. package/dist/2026-04/services/meters.mjs +3 -3
  171. package/dist/2026-04/services/meters.mjs.map +1 -1
  172. package/dist/2026-04/services/metrics.d.cts +1 -1
  173. package/dist/2026-04/services/metrics.d.mts +1 -1
  174. package/dist/2026-04/services/oauth2/clients/index.d.cts +2 -2
  175. package/dist/2026-04/services/oauth2/clients/index.d.mts +2 -2
  176. package/dist/2026-04/services/oauth2/clients/oauth2.cjs +2 -2
  177. package/dist/2026-04/services/oauth2/clients/oauth2.cjs.map +1 -1
  178. package/dist/2026-04/services/oauth2/clients/oauth2.d.cts +3 -3
  179. package/dist/2026-04/services/oauth2/clients/oauth2.d.mts +3 -3
  180. package/dist/2026-04/services/oauth2/clients/oauth2.mjs +2 -2
  181. package/dist/2026-04/services/oauth2/clients/oauth2.mjs.map +1 -1
  182. package/dist/2026-04/services/oauth2/index.d.cts +2 -2
  183. package/dist/2026-04/services/oauth2/index.d.mts +2 -2
  184. package/dist/2026-04/services/orders.cjs +3 -3
  185. package/dist/2026-04/services/orders.cjs.map +1 -1
  186. package/dist/2026-04/services/orders.d.cts +4 -4
  187. package/dist/2026-04/services/orders.d.mts +4 -4
  188. package/dist/2026-04/services/orders.mjs +3 -3
  189. package/dist/2026-04/services/orders.mjs.map +1 -1
  190. package/dist/2026-04/services/organizations.cjs +3 -3
  191. package/dist/2026-04/services/organizations.cjs.map +1 -1
  192. package/dist/2026-04/services/organizations.d.cts +4 -4
  193. package/dist/2026-04/services/organizations.d.mts +4 -4
  194. package/dist/2026-04/services/organizations.mjs +3 -3
  195. package/dist/2026-04/services/organizations.mjs.map +1 -1
  196. package/dist/2026-04/services/payments.cjs +3 -3
  197. package/dist/2026-04/services/payments.cjs.map +1 -1
  198. package/dist/2026-04/services/payments.d.cts +4 -4
  199. package/dist/2026-04/services/payments.d.mts +4 -4
  200. package/dist/2026-04/services/payments.mjs +3 -3
  201. package/dist/2026-04/services/payments.mjs.map +1 -1
  202. package/dist/2026-04/services/products.cjs +3 -3
  203. package/dist/2026-04/services/products.cjs.map +1 -1
  204. package/dist/2026-04/services/products.d.cts +4 -4
  205. package/dist/2026-04/services/products.d.mts +4 -4
  206. package/dist/2026-04/services/products.mjs +3 -3
  207. package/dist/2026-04/services/products.mjs.map +1 -1
  208. package/dist/2026-04/services/refunds.cjs +3 -3
  209. package/dist/2026-04/services/refunds.cjs.map +1 -1
  210. package/dist/2026-04/services/refunds.d.cts +4 -4
  211. package/dist/2026-04/services/refunds.d.mts +4 -4
  212. package/dist/2026-04/services/refunds.mjs +3 -3
  213. package/dist/2026-04/services/refunds.mjs.map +1 -1
  214. package/dist/2026-04/services/subscriptions.cjs +3 -3
  215. package/dist/2026-04/services/subscriptions.cjs.map +1 -1
  216. package/dist/2026-04/services/subscriptions.d.cts +4 -4
  217. package/dist/2026-04/services/subscriptions.d.mts +4 -4
  218. package/dist/2026-04/services/subscriptions.mjs +3 -3
  219. package/dist/2026-04/services/subscriptions.mjs.map +1 -1
  220. package/dist/2026-04/services/webhooks.cjs +6 -6
  221. package/dist/2026-04/services/webhooks.cjs.map +1 -1
  222. package/dist/2026-04/services/webhooks.d.cts +6 -6
  223. package/dist/2026-04/services/webhooks.d.mts +6 -6
  224. package/dist/2026-04/services/webhooks.mjs +5 -5
  225. package/dist/2026-04/services/webhooks.mjs.map +1 -1
  226. package/dist/{models-IotBovey.d.cts → models-DnY24W7g.d.mts} +671 -51
  227. package/dist/models-DnY24W7g.d.mts.map +1 -0
  228. package/dist/{models-pdZgmVG-.d.mts → models-i5yDo5sm.d.cts} +671 -51
  229. package/dist/models-i5yDo5sm.d.cts.map +1 -0
  230. package/package.json +4 -2
  231. package/dist/models-IotBovey.d.cts.map +0 -1
  232. package/dist/models-pdZgmVG-.d.mts.map +0 -1
package/README.md CHANGED
@@ -4,14 +4,16 @@ The official TypeScript client for the [Polar API](https://polar.sh/docs/api-ref
4
4
 
5
5
  ## Installation
6
6
 
7
+ The SDK is currently available under the `next` pre-release tag.
8
+
7
9
  ```bash
8
- pnpm add @polar-sh/sdk
10
+ pnpm add @polar-sh/sdk@next
9
11
  ```
10
12
 
11
13
  or, with `npm`:
12
14
 
13
15
  ```bash
14
- npm install @polar-sh/sdk
16
+ npm install @polar-sh/sdk@next
15
17
  ```
16
18
 
17
19
  ## Quick Start
@@ -52,3 +54,57 @@ const polar = createPolarCore({
52
54
  const customerState = await getStateExternalCustomers(polar)("customer_external_id");
53
55
  console.log(customerState);
54
56
  ```
57
+
58
+ ## Webhooks
59
+
60
+ Use `webhooks.validateEvent` to verify that a webhook was sent by Polar and parse it into a typed
61
+ payload for the selected API version. Pass the raw request body, the request headers, and your
62
+ webhook signing secret:
63
+
64
+ ```typescript
65
+ import express from "express";
66
+ import { webhooks } from "@polar-sh/sdk/2026-04";
67
+
68
+ const app = express();
69
+ const webhookSecret = process.env.POLAR_WEBHOOK_SECRET;
70
+
71
+ if (!webhookSecret) {
72
+ throw new Error("POLAR_WEBHOOK_SECRET is required");
73
+ }
74
+
75
+ const rawBody = express.raw({ type: "application/json" });
76
+ app.post("/webhooks/polar", rawBody, async (request, response) => {
77
+ try {
78
+ const event = await webhooks.validateEvent(
79
+ request.body,
80
+ {
81
+ "webhook-id": request.header("webhook-id") ?? "",
82
+ "webhook-timestamp": request.header("webhook-timestamp") ?? "",
83
+ "webhook-signature": request.header("webhook-signature") ?? "",
84
+ },
85
+ webhookSecret,
86
+ );
87
+
88
+ if (event.type === "order.created") {
89
+ console.log(event.data.id);
90
+ }
91
+
92
+ response.status(200).json({ received: true });
93
+ } catch (error) {
94
+ if (error instanceof webhooks.PolarWebhookVerificationError) {
95
+ response.status(403).json({ error: "Invalid webhook signature" });
96
+ return;
97
+ }
98
+ if (error instanceof webhooks.PolarWebhookError) {
99
+ response.status(400).json({ error: "Invalid webhook payload" });
100
+ return;
101
+ }
102
+ throw error;
103
+ }
104
+ });
105
+ ```
106
+
107
+ The `express.raw` middleware is required because the signature must be checked against the body
108
+ before it is parsed. `validateEvent` throws `PolarWebhookVerificationError` for invalid signatures
109
+ and `PolarWebhookUnknownTypeError` when the event is not supported by the selected API version.
110
+ Both inherit from `PolarWebhookError`.
@@ -76,6 +76,132 @@ function createPolar(options) {
76
76
  //#region src/2026-04/models.ts
77
77
  var models_exports = /* @__PURE__ */ require_errors.__exportAll({});
78
78
  //#endregion
79
+ //#region src/webhooks.ts
80
+ const webhookToleranceSeconds = 300;
81
+ var PolarWebhookError = class extends require_base.PolarError {
82
+ constructor(message, options) {
83
+ super(message, options);
84
+ this.name = "PolarWebhookError";
85
+ }
86
+ };
87
+ var PolarWebhookVerificationError = class extends PolarWebhookError {
88
+ constructor(message, options) {
89
+ super(message, options);
90
+ this.name = "PolarWebhookVerificationError";
91
+ }
92
+ };
93
+ var PolarWebhookUnknownTypeError = class extends PolarWebhookError {
94
+ eventType;
95
+ constructor(eventType) {
96
+ super(`Unknown webhook event type: ${JSON.stringify(eventType)}`);
97
+ this.eventType = eventType;
98
+ this.name = "PolarWebhookUnknownTypeError";
99
+ }
100
+ };
101
+ const validateWebhook = async (body, headers, secret, eventTypes) => {
102
+ const bodyText = typeof body === "string" ? body : new TextDecoder().decode(body);
103
+ await verifySignature(bodyText, headers, secret);
104
+ let parsed;
105
+ try {
106
+ parsed = JSON.parse(bodyText);
107
+ } catch (error) {
108
+ throw new PolarWebhookError("Failed to parse webhook payload", { cause: error });
109
+ }
110
+ const eventType = typeof parsed === "object" && parsed !== null && "type" in parsed && typeof parsed.type === "string" ? parsed.type : null;
111
+ if (eventType === null || !eventTypes.has(eventType)) throw new PolarWebhookUnknownTypeError(eventType);
112
+ return parsed;
113
+ };
114
+ const verifySignature = async (body, headers, secret) => {
115
+ if (secret.length === 0) throw new PolarWebhookVerificationError("Secret can't be empty");
116
+ const normalizedHeaders = Object.fromEntries(Object.entries(headers).map(([key, value]) => [key.toLowerCase(), value]));
117
+ const webhookId = normalizedHeaders["webhook-id"];
118
+ const webhookTimestamp = normalizedHeaders["webhook-timestamp"];
119
+ const webhookSignature = normalizedHeaders["webhook-signature"];
120
+ if (!webhookId || !webhookTimestamp || !webhookSignature) throw new PolarWebhookVerificationError("Missing required headers");
121
+ const timestamp = Number(webhookTimestamp);
122
+ if (!Number.isFinite(timestamp)) throw new PolarWebhookVerificationError("Invalid signature headers");
123
+ const now = Date.now() / 1e3;
124
+ if (timestamp < now - webhookToleranceSeconds) throw new PolarWebhookVerificationError("Message timestamp too old");
125
+ if (timestamp > now + webhookToleranceSeconds) throw new PolarWebhookVerificationError("Message timestamp too new");
126
+ const signedContent = `${webhookId}.${Math.floor(timestamp)}.${body}`;
127
+ const textEncoder = new TextEncoder();
128
+ const signedContentBytes = textEncoder.encode(signedContent);
129
+ const signingKey = await globalThis.crypto.subtle.importKey("raw", textEncoder.encode(secret), {
130
+ name: "HMAC",
131
+ hash: "SHA-256"
132
+ }, false, ["verify"]);
133
+ for (const versionedSignature of webhookSignature.split(" ")) {
134
+ const [version, signature] = versionedSignature.split(",", 2);
135
+ if (version !== "v1" || signature === void 0) continue;
136
+ const decodedSignature = decodeBase64(signature);
137
+ if (decodedSignature !== null && await globalThis.crypto.subtle.verify("HMAC", signingKey, decodedSignature, signedContentBytes)) return;
138
+ }
139
+ throw new PolarWebhookVerificationError("No matching signature found");
140
+ };
141
+ const decodeBase64 = (value) => {
142
+ try {
143
+ const decodedValue = globalThis.atob(value);
144
+ const bytes = new Uint8Array(new ArrayBuffer(decodedValue.length));
145
+ for (let index = 0; index < decodedValue.length; index++) bytes[index] = decodedValue.charCodeAt(index);
146
+ return bytes;
147
+ } catch {
148
+ return null;
149
+ }
150
+ };
151
+ //#endregion
152
+ //#region src/2026-04/webhooks.ts
153
+ var webhooks_exports = /* @__PURE__ */ require_errors.__exportAll({
154
+ PolarWebhookError: () => PolarWebhookError,
155
+ PolarWebhookUnknownTypeError: () => PolarWebhookUnknownTypeError,
156
+ PolarWebhookVerificationError: () => PolarWebhookVerificationError,
157
+ validateEvent: () => validateEvent
158
+ });
159
+ const knownEventTypes = /* @__PURE__ */ new Set([
160
+ "benefit.created",
161
+ "benefit.updated",
162
+ "benefit_grant.created",
163
+ "benefit_grant.cycled",
164
+ "benefit_grant.revoked",
165
+ "benefit_grant.updated",
166
+ "checkout.created",
167
+ "checkout.expired",
168
+ "checkout.updated",
169
+ "customer.created",
170
+ "customer.deleted",
171
+ "customer.state_changed",
172
+ "customer.updated",
173
+ "customer_seat.assigned",
174
+ "customer_seat.claimed",
175
+ "customer_seat.revoked",
176
+ "member.created",
177
+ "member.deleted",
178
+ "member.updated",
179
+ "order.created",
180
+ "order.paid",
181
+ "order.refunded",
182
+ "order.updated",
183
+ "organization.updated",
184
+ "product.created",
185
+ "product.updated",
186
+ "refund.created",
187
+ "refund.updated",
188
+ "subscription.active",
189
+ "subscription.canceled",
190
+ "subscription.created",
191
+ "subscription.past_due",
192
+ "subscription.paused",
193
+ "subscription.resumed",
194
+ "subscription.revoked",
195
+ "subscription.uncanceled",
196
+ "subscription.updated"
197
+ ]);
198
+ /**
199
+ * Verify a raw Polar webhook request and return its typed payload.
200
+ */
201
+ const validateEvent = (body, headers, secret) => {
202
+ return validateWebhook(body, headers, secret, knownEventTypes);
203
+ };
204
+ //#endregion
79
205
  exports.createPolar = createPolar;
80
206
  exports.createPolarCore = createPolarCore;
81
207
  Object.defineProperty(exports, "errors", {
@@ -90,5 +216,11 @@ Object.defineProperty(exports, "models", {
90
216
  return models_exports;
91
217
  }
92
218
  });
219
+ Object.defineProperty(exports, "webhooks", {
220
+ enumerable: true,
221
+ get: function() {
222
+ return webhooks_exports;
223
+ }
224
+ });
93
225
 
94
226
  //# sourceMappingURL=index.cjs.map