@polar-sh/sdk 1.0.0 → 1.0.1
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.
- package/.agents/skills/polar-typescript-sdk/SKILL.md +1 -1
- package/README.md +16 -0
- package/dist/2026-04/index.cjs +3 -3
- package/dist/2026-04/index.cjs.map +1 -1
- package/dist/2026-04/index.d.cts +3 -3
- package/dist/2026-04/index.d.mts +3 -3
- package/dist/2026-04/index.mjs +3 -3
- package/dist/2026-04/index.mjs.map +1 -1
- package/dist/2026-04/services/benefit_grants.cjs +1 -1
- package/dist/2026-04/services/benefit_grants.d.cts +2 -2
- package/dist/2026-04/services/benefit_grants.d.mts +2 -2
- package/dist/2026-04/services/benefit_grants.mjs +1 -1
- package/dist/2026-04/services/benefits.cjs +1 -1
- package/dist/2026-04/services/benefits.d.cts +2 -2
- package/dist/2026-04/services/benefits.d.mts +2 -2
- package/dist/2026-04/services/benefits.mjs +1 -1
- package/dist/2026-04/services/checkout_links.cjs +1 -1
- package/dist/2026-04/services/checkout_links.d.cts +2 -2
- package/dist/2026-04/services/checkout_links.d.mts +2 -2
- package/dist/2026-04/services/checkout_links.mjs +1 -1
- package/dist/2026-04/services/checkouts.cjs +1 -1
- package/dist/2026-04/services/checkouts.d.cts +2 -2
- package/dist/2026-04/services/checkouts.d.mts +2 -2
- package/dist/2026-04/services/checkouts.mjs +1 -1
- package/dist/2026-04/services/custom_fields.cjs +1 -1
- package/dist/2026-04/services/custom_fields.d.cts +2 -2
- package/dist/2026-04/services/custom_fields.d.mts +2 -2
- package/dist/2026-04/services/custom_fields.mjs +1 -1
- package/dist/2026-04/services/customer_meters.cjs +1 -1
- package/dist/2026-04/services/customer_meters.d.cts +2 -2
- package/dist/2026-04/services/customer_meters.d.mts +2 -2
- package/dist/2026-04/services/customer_meters.mjs +1 -1
- package/dist/2026-04/services/customer_portal/benefit_grants.cjs +1 -1
- package/dist/2026-04/services/customer_portal/benefit_grants.d.cts +2 -2
- package/dist/2026-04/services/customer_portal/benefit_grants.d.mts +2 -2
- package/dist/2026-04/services/customer_portal/benefit_grants.mjs +1 -1
- package/dist/2026-04/services/customer_portal/customer_meters.cjs +1 -1
- package/dist/2026-04/services/customer_portal/customer_meters.d.cts +2 -2
- package/dist/2026-04/services/customer_portal/customer_meters.d.mts +2 -2
- package/dist/2026-04/services/customer_portal/customer_meters.mjs +1 -1
- package/dist/2026-04/services/customer_portal/customer_session.d.cts +2 -2
- package/dist/2026-04/services/customer_portal/customer_session.d.mts +2 -2
- package/dist/2026-04/services/customer_portal/customers.cjs +1 -1
- package/dist/2026-04/services/customer_portal/customers.d.cts +2 -2
- package/dist/2026-04/services/customer_portal/customers.d.mts +2 -2
- package/dist/2026-04/services/customer_portal/customers.mjs +1 -1
- package/dist/2026-04/services/customer_portal/downloadables.cjs +1 -1
- package/dist/2026-04/services/customer_portal/downloadables.d.cts +2 -2
- package/dist/2026-04/services/customer_portal/downloadables.d.mts +2 -2
- package/dist/2026-04/services/customer_portal/downloadables.mjs +1 -1
- package/dist/2026-04/services/customer_portal/index.d.cts +2 -2
- package/dist/2026-04/services/customer_portal/index.d.mts +2 -2
- package/dist/2026-04/services/customer_portal/license_keys.cjs +1 -1
- package/dist/2026-04/services/customer_portal/license_keys.d.cts +2 -2
- package/dist/2026-04/services/customer_portal/license_keys.d.mts +2 -2
- package/dist/2026-04/services/customer_portal/license_keys.mjs +1 -1
- package/dist/2026-04/services/customer_portal/members.cjs +1 -1
- package/dist/2026-04/services/customer_portal/members.d.cts +2 -2
- package/dist/2026-04/services/customer_portal/members.d.mts +2 -2
- package/dist/2026-04/services/customer_portal/members.mjs +1 -1
- package/dist/2026-04/services/customer_portal/orders.cjs +1 -1
- package/dist/2026-04/services/customer_portal/orders.d.cts +2 -2
- package/dist/2026-04/services/customer_portal/orders.d.mts +2 -2
- package/dist/2026-04/services/customer_portal/orders.mjs +1 -1
- package/dist/2026-04/services/customer_portal/organizations.cjs +1 -1
- package/dist/2026-04/services/customer_portal/organizations.d.cts +2 -2
- package/dist/2026-04/services/customer_portal/organizations.d.mts +2 -2
- package/dist/2026-04/services/customer_portal/organizations.mjs +1 -1
- package/dist/2026-04/services/customer_portal/seats.cjs +1 -1
- package/dist/2026-04/services/customer_portal/seats.d.cts +2 -2
- package/dist/2026-04/services/customer_portal/seats.d.mts +2 -2
- package/dist/2026-04/services/customer_portal/seats.mjs +1 -1
- package/dist/2026-04/services/customer_portal/subscriptions.cjs +1 -1
- package/dist/2026-04/services/customer_portal/subscriptions.d.cts +2 -2
- package/dist/2026-04/services/customer_portal/subscriptions.d.mts +2 -2
- package/dist/2026-04/services/customer_portal/subscriptions.mjs +1 -1
- package/dist/2026-04/services/customer_portal/wallets.cjs +1 -1
- package/dist/2026-04/services/customer_portal/wallets.d.cts +2 -2
- package/dist/2026-04/services/customer_portal/wallets.d.mts +2 -2
- package/dist/2026-04/services/customer_portal/wallets.mjs +1 -1
- package/dist/2026-04/services/customer_seats.cjs +1 -1
- package/dist/2026-04/services/customer_seats.d.cts +2 -2
- package/dist/2026-04/services/customer_seats.d.mts +2 -2
- package/dist/2026-04/services/customer_seats.mjs +1 -1
- package/dist/2026-04/services/customer_sessions.cjs +1 -1
- package/dist/2026-04/services/customer_sessions.d.cts +2 -2
- package/dist/2026-04/services/customer_sessions.d.mts +2 -2
- package/dist/2026-04/services/customer_sessions.mjs +1 -1
- package/dist/2026-04/services/customers/index.cjs +1 -1
- package/dist/2026-04/services/customers/index.d.cts +2 -2
- package/dist/2026-04/services/customers/index.d.mts +2 -2
- package/dist/2026-04/services/customers/index.mjs +1 -1
- package/dist/2026-04/services/customers/members.cjs +1 -1
- package/dist/2026-04/services/customers/members.d.cts +2 -2
- package/dist/2026-04/services/customers/members.d.mts +2 -2
- package/dist/2026-04/services/customers/members.mjs +1 -1
- package/dist/2026-04/services/discounts.cjs +1 -1
- package/dist/2026-04/services/discounts.d.cts +2 -2
- package/dist/2026-04/services/discounts.d.mts +2 -2
- package/dist/2026-04/services/discounts.mjs +1 -1
- package/dist/2026-04/services/disputes.cjs +1 -1
- package/dist/2026-04/services/disputes.d.cts +2 -2
- package/dist/2026-04/services/disputes.d.mts +2 -2
- package/dist/2026-04/services/disputes.mjs +1 -1
- package/dist/2026-04/services/event_types.cjs +1 -1
- package/dist/2026-04/services/event_types.d.cts +2 -2
- package/dist/2026-04/services/event_types.d.mts +2 -2
- package/dist/2026-04/services/event_types.mjs +1 -1
- package/dist/2026-04/services/events.cjs +1 -1
- package/dist/2026-04/services/events.d.cts +2 -2
- package/dist/2026-04/services/events.d.mts +2 -2
- package/dist/2026-04/services/events.mjs +1 -1
- package/dist/2026-04/services/files.cjs +1 -1
- package/dist/2026-04/services/files.d.cts +2 -2
- package/dist/2026-04/services/files.d.mts +2 -2
- package/dist/2026-04/services/files.mjs +1 -1
- package/dist/2026-04/services/license_keys.cjs +1 -1
- package/dist/2026-04/services/license_keys.d.cts +2 -2
- package/dist/2026-04/services/license_keys.d.mts +2 -2
- package/dist/2026-04/services/license_keys.mjs +1 -1
- package/dist/2026-04/services/meters.cjs +1 -1
- package/dist/2026-04/services/meters.d.cts +2 -2
- package/dist/2026-04/services/meters.d.mts +2 -2
- package/dist/2026-04/services/meters.mjs +1 -1
- package/dist/2026-04/services/metrics.cjs +1 -1
- package/dist/2026-04/services/metrics.d.cts +2 -2
- package/dist/2026-04/services/metrics.d.mts +2 -2
- package/dist/2026-04/services/metrics.mjs +1 -1
- package/dist/2026-04/services/oauth2/clients/index.d.cts +2 -2
- package/dist/2026-04/services/oauth2/clients/index.d.mts +2 -2
- package/dist/2026-04/services/oauth2/clients/oauth2.cjs +1 -1
- package/dist/2026-04/services/oauth2/clients/oauth2.d.cts +2 -2
- package/dist/2026-04/services/oauth2/clients/oauth2.d.mts +2 -2
- package/dist/2026-04/services/oauth2/clients/oauth2.mjs +1 -1
- package/dist/2026-04/services/oauth2/index.d.cts +2 -2
- package/dist/2026-04/services/oauth2/index.d.mts +2 -2
- package/dist/2026-04/services/orders.cjs +1 -1
- package/dist/2026-04/services/orders.d.cts +2 -2
- package/dist/2026-04/services/orders.d.mts +2 -2
- package/dist/2026-04/services/orders.mjs +1 -1
- package/dist/2026-04/services/organizations.cjs +1 -1
- package/dist/2026-04/services/organizations.d.cts +2 -2
- package/dist/2026-04/services/organizations.d.mts +2 -2
- package/dist/2026-04/services/organizations.mjs +1 -1
- package/dist/2026-04/services/payments.cjs +1 -1
- package/dist/2026-04/services/payments.d.cts +2 -2
- package/dist/2026-04/services/payments.d.mts +2 -2
- package/dist/2026-04/services/payments.mjs +1 -1
- package/dist/2026-04/services/products.cjs +1 -1
- package/dist/2026-04/services/products.d.cts +2 -2
- package/dist/2026-04/services/products.d.mts +2 -2
- package/dist/2026-04/services/products.mjs +1 -1
- package/dist/2026-04/services/refunds.cjs +1 -1
- package/dist/2026-04/services/refunds.d.cts +2 -2
- package/dist/2026-04/services/refunds.d.mts +2 -2
- package/dist/2026-04/services/refunds.mjs +1 -1
- package/dist/2026-04/services/subscriptions.cjs +1 -1
- package/dist/2026-04/services/subscriptions.d.cts +2 -2
- package/dist/2026-04/services/subscriptions.d.mts +2 -2
- package/dist/2026-04/services/subscriptions.mjs +1 -1
- package/dist/2026-04/services/webhooks.cjs +1 -1
- package/dist/2026-04/services/webhooks.d.cts +2 -2
- package/dist/2026-04/services/webhooks.d.mts +2 -2
- package/dist/2026-04/services/webhooks.mjs +1 -1
- package/dist/2026-10/index.cjs +3 -3
- package/dist/2026-10/index.cjs.map +1 -1
- package/dist/2026-10/index.d.cts +3 -3
- package/dist/2026-10/index.d.mts +3 -3
- package/dist/2026-10/index.mjs +3 -3
- package/dist/2026-10/index.mjs.map +1 -1
- package/dist/2026-10/services/benefit_grants.cjs +1 -1
- package/dist/2026-10/services/benefit_grants.d.cts +2 -2
- package/dist/2026-10/services/benefit_grants.d.mts +2 -2
- package/dist/2026-10/services/benefit_grants.mjs +1 -1
- package/dist/2026-10/services/benefits.cjs +1 -1
- package/dist/2026-10/services/benefits.d.cts +2 -2
- package/dist/2026-10/services/benefits.d.mts +2 -2
- package/dist/2026-10/services/benefits.mjs +1 -1
- package/dist/2026-10/services/checkout_links.cjs +1 -1
- package/dist/2026-10/services/checkout_links.d.cts +2 -2
- package/dist/2026-10/services/checkout_links.d.mts +2 -2
- package/dist/2026-10/services/checkout_links.mjs +1 -1
- package/dist/2026-10/services/checkouts.cjs +1 -1
- package/dist/2026-10/services/checkouts.d.cts +2 -2
- package/dist/2026-10/services/checkouts.d.mts +2 -2
- package/dist/2026-10/services/checkouts.mjs +1 -1
- package/dist/2026-10/services/custom_fields.cjs +1 -1
- package/dist/2026-10/services/custom_fields.d.cts +2 -2
- package/dist/2026-10/services/custom_fields.d.mts +2 -2
- package/dist/2026-10/services/custom_fields.mjs +1 -1
- package/dist/2026-10/services/customer_meters.cjs +1 -1
- package/dist/2026-10/services/customer_meters.d.cts +2 -2
- package/dist/2026-10/services/customer_meters.d.mts +2 -2
- package/dist/2026-10/services/customer_meters.mjs +1 -1
- package/dist/2026-10/services/customer_portal/benefit_grants.cjs +1 -1
- package/dist/2026-10/services/customer_portal/benefit_grants.d.cts +2 -2
- package/dist/2026-10/services/customer_portal/benefit_grants.d.mts +2 -2
- package/dist/2026-10/services/customer_portal/benefit_grants.mjs +1 -1
- package/dist/2026-10/services/customer_portal/customer_meters.cjs +1 -1
- package/dist/2026-10/services/customer_portal/customer_meters.d.cts +2 -2
- package/dist/2026-10/services/customer_portal/customer_meters.d.mts +2 -2
- package/dist/2026-10/services/customer_portal/customer_meters.mjs +1 -1
- package/dist/2026-10/services/customer_portal/customer_session.d.cts +2 -2
- package/dist/2026-10/services/customer_portal/customer_session.d.mts +2 -2
- package/dist/2026-10/services/customer_portal/customers.cjs +1 -1
- package/dist/2026-10/services/customer_portal/customers.d.cts +2 -2
- package/dist/2026-10/services/customer_portal/customers.d.mts +2 -2
- package/dist/2026-10/services/customer_portal/customers.mjs +1 -1
- package/dist/2026-10/services/customer_portal/downloadables.cjs +1 -1
- package/dist/2026-10/services/customer_portal/downloadables.d.cts +2 -2
- package/dist/2026-10/services/customer_portal/downloadables.d.mts +2 -2
- package/dist/2026-10/services/customer_portal/downloadables.mjs +1 -1
- package/dist/2026-10/services/customer_portal/index.d.cts +2 -2
- package/dist/2026-10/services/customer_portal/index.d.mts +2 -2
- package/dist/2026-10/services/customer_portal/license_keys.cjs +1 -1
- package/dist/2026-10/services/customer_portal/license_keys.d.cts +2 -2
- package/dist/2026-10/services/customer_portal/license_keys.d.mts +2 -2
- package/dist/2026-10/services/customer_portal/license_keys.mjs +1 -1
- package/dist/2026-10/services/customer_portal/members.cjs +1 -1
- package/dist/2026-10/services/customer_portal/members.d.cts +2 -2
- package/dist/2026-10/services/customer_portal/members.d.mts +2 -2
- package/dist/2026-10/services/customer_portal/members.mjs +1 -1
- package/dist/2026-10/services/customer_portal/orders.cjs +1 -1
- package/dist/2026-10/services/customer_portal/orders.d.cts +2 -2
- package/dist/2026-10/services/customer_portal/orders.d.mts +2 -2
- package/dist/2026-10/services/customer_portal/orders.mjs +1 -1
- package/dist/2026-10/services/customer_portal/organizations.cjs +1 -1
- package/dist/2026-10/services/customer_portal/organizations.d.cts +2 -2
- package/dist/2026-10/services/customer_portal/organizations.d.mts +2 -2
- package/dist/2026-10/services/customer_portal/organizations.mjs +1 -1
- package/dist/2026-10/services/customer_portal/seats.cjs +1 -1
- package/dist/2026-10/services/customer_portal/seats.d.cts +2 -2
- package/dist/2026-10/services/customer_portal/seats.d.mts +2 -2
- package/dist/2026-10/services/customer_portal/seats.mjs +1 -1
- package/dist/2026-10/services/customer_portal/subscriptions.cjs +1 -1
- package/dist/2026-10/services/customer_portal/subscriptions.d.cts +2 -2
- package/dist/2026-10/services/customer_portal/subscriptions.d.mts +2 -2
- package/dist/2026-10/services/customer_portal/subscriptions.mjs +1 -1
- package/dist/2026-10/services/customer_portal/wallets.cjs +1 -1
- package/dist/2026-10/services/customer_portal/wallets.d.cts +2 -2
- package/dist/2026-10/services/customer_portal/wallets.d.mts +2 -2
- package/dist/2026-10/services/customer_portal/wallets.mjs +1 -1
- package/dist/2026-10/services/customer_seats.cjs +1 -1
- package/dist/2026-10/services/customer_seats.d.cts +2 -2
- package/dist/2026-10/services/customer_seats.d.mts +2 -2
- package/dist/2026-10/services/customer_seats.mjs +1 -1
- package/dist/2026-10/services/customer_sessions.cjs +1 -1
- package/dist/2026-10/services/customer_sessions.d.cts +2 -2
- package/dist/2026-10/services/customer_sessions.d.mts +2 -2
- package/dist/2026-10/services/customer_sessions.mjs +1 -1
- package/dist/2026-10/services/customers/index.cjs +1 -1
- package/dist/2026-10/services/customers/index.d.cts +2 -2
- package/dist/2026-10/services/customers/index.d.mts +2 -2
- package/dist/2026-10/services/customers/index.mjs +1 -1
- package/dist/2026-10/services/customers/members.cjs +1 -1
- package/dist/2026-10/services/customers/members.d.cts +2 -2
- package/dist/2026-10/services/customers/members.d.mts +2 -2
- package/dist/2026-10/services/customers/members.mjs +1 -1
- package/dist/2026-10/services/discounts.cjs +1 -1
- package/dist/2026-10/services/discounts.d.cts +2 -2
- package/dist/2026-10/services/discounts.d.mts +2 -2
- package/dist/2026-10/services/discounts.mjs +1 -1
- package/dist/2026-10/services/disputes.cjs +1 -1
- package/dist/2026-10/services/disputes.d.cts +2 -2
- package/dist/2026-10/services/disputes.d.mts +2 -2
- package/dist/2026-10/services/disputes.mjs +1 -1
- package/dist/2026-10/services/event_types.cjs +1 -1
- package/dist/2026-10/services/event_types.d.cts +2 -2
- package/dist/2026-10/services/event_types.d.mts +2 -2
- package/dist/2026-10/services/event_types.mjs +1 -1
- package/dist/2026-10/services/events.cjs +1 -1
- package/dist/2026-10/services/events.d.cts +2 -2
- package/dist/2026-10/services/events.d.mts +2 -2
- package/dist/2026-10/services/events.mjs +1 -1
- package/dist/2026-10/services/files.cjs +1 -1
- package/dist/2026-10/services/files.d.cts +2 -2
- package/dist/2026-10/services/files.d.mts +2 -2
- package/dist/2026-10/services/files.mjs +1 -1
- package/dist/2026-10/services/license_keys.cjs +1 -1
- package/dist/2026-10/services/license_keys.d.cts +2 -2
- package/dist/2026-10/services/license_keys.d.mts +2 -2
- package/dist/2026-10/services/license_keys.mjs +1 -1
- package/dist/2026-10/services/meters.cjs +1 -1
- package/dist/2026-10/services/meters.d.cts +2 -2
- package/dist/2026-10/services/meters.d.mts +2 -2
- package/dist/2026-10/services/meters.mjs +1 -1
- package/dist/2026-10/services/metrics.cjs +1 -1
- package/dist/2026-10/services/metrics.d.cts +2 -2
- package/dist/2026-10/services/metrics.d.mts +2 -2
- package/dist/2026-10/services/metrics.mjs +1 -1
- package/dist/2026-10/services/oauth2/clients/index.d.cts +2 -2
- package/dist/2026-10/services/oauth2/clients/index.d.mts +2 -2
- package/dist/2026-10/services/oauth2/clients/oauth2.cjs +1 -1
- package/dist/2026-10/services/oauth2/clients/oauth2.d.cts +2 -2
- package/dist/2026-10/services/oauth2/clients/oauth2.d.mts +2 -2
- package/dist/2026-10/services/oauth2/clients/oauth2.mjs +1 -1
- package/dist/2026-10/services/oauth2/index.d.cts +2 -2
- package/dist/2026-10/services/oauth2/index.d.mts +2 -2
- package/dist/2026-10/services/orders.cjs +1 -1
- package/dist/2026-10/services/orders.d.cts +2 -2
- package/dist/2026-10/services/orders.d.mts +2 -2
- package/dist/2026-10/services/orders.mjs +1 -1
- package/dist/2026-10/services/organizations.cjs +1 -1
- package/dist/2026-10/services/organizations.d.cts +2 -2
- package/dist/2026-10/services/organizations.d.mts +2 -2
- package/dist/2026-10/services/organizations.mjs +1 -1
- package/dist/2026-10/services/payments.cjs +1 -1
- package/dist/2026-10/services/payments.d.cts +2 -2
- package/dist/2026-10/services/payments.d.mts +2 -2
- package/dist/2026-10/services/payments.mjs +1 -1
- package/dist/2026-10/services/products.cjs +1 -1
- package/dist/2026-10/services/products.d.cts +2 -2
- package/dist/2026-10/services/products.d.mts +2 -2
- package/dist/2026-10/services/products.mjs +1 -1
- package/dist/2026-10/services/refunds.cjs +1 -1
- package/dist/2026-10/services/refunds.d.cts +2 -2
- package/dist/2026-10/services/refunds.d.mts +2 -2
- package/dist/2026-10/services/refunds.mjs +1 -1
- package/dist/2026-10/services/subscriptions.cjs +1 -1
- package/dist/2026-10/services/subscriptions.d.cts +2 -2
- package/dist/2026-10/services/subscriptions.d.mts +2 -2
- package/dist/2026-10/services/subscriptions.mjs +1 -1
- package/dist/2026-10/services/webhooks.cjs +1 -1
- package/dist/2026-10/services/webhooks.d.cts +2 -2
- package/dist/2026-10/services/webhooks.d.mts +2 -2
- package/dist/2026-10/services/webhooks.mjs +1 -1
- package/dist/2027-01/index.cjs +3 -3
- package/dist/2027-01/index.cjs.map +1 -1
- package/dist/2027-01/index.d.cts +3 -3
- package/dist/2027-01/index.d.mts +3 -3
- package/dist/2027-01/index.mjs +3 -3
- package/dist/2027-01/index.mjs.map +1 -1
- package/dist/2027-01/services/benefit_grants.cjs +1 -1
- package/dist/2027-01/services/benefit_grants.d.cts +2 -2
- package/dist/2027-01/services/benefit_grants.d.mts +2 -2
- package/dist/2027-01/services/benefit_grants.mjs +1 -1
- package/dist/2027-01/services/benefits.cjs +1 -1
- package/dist/2027-01/services/benefits.d.cts +2 -2
- package/dist/2027-01/services/benefits.d.mts +2 -2
- package/dist/2027-01/services/benefits.mjs +1 -1
- package/dist/2027-01/services/checkout_links.cjs +1 -1
- package/dist/2027-01/services/checkout_links.d.cts +2 -2
- package/dist/2027-01/services/checkout_links.d.mts +2 -2
- package/dist/2027-01/services/checkout_links.mjs +1 -1
- package/dist/2027-01/services/checkouts.cjs +1 -1
- package/dist/2027-01/services/checkouts.d.cts +2 -2
- package/dist/2027-01/services/checkouts.d.mts +2 -2
- package/dist/2027-01/services/checkouts.mjs +1 -1
- package/dist/2027-01/services/custom_fields.cjs +1 -1
- package/dist/2027-01/services/custom_fields.d.cts +2 -2
- package/dist/2027-01/services/custom_fields.d.mts +2 -2
- package/dist/2027-01/services/custom_fields.mjs +1 -1
- package/dist/2027-01/services/customer_meters.cjs +1 -1
- package/dist/2027-01/services/customer_meters.d.cts +2 -2
- package/dist/2027-01/services/customer_meters.d.mts +2 -2
- package/dist/2027-01/services/customer_meters.mjs +1 -1
- package/dist/2027-01/services/customer_portal/benefit_grants.cjs +1 -1
- package/dist/2027-01/services/customer_portal/benefit_grants.d.cts +2 -2
- package/dist/2027-01/services/customer_portal/benefit_grants.d.mts +2 -2
- package/dist/2027-01/services/customer_portal/benefit_grants.mjs +1 -1
- package/dist/2027-01/services/customer_portal/customer_meters.cjs +1 -1
- package/dist/2027-01/services/customer_portal/customer_meters.d.cts +2 -2
- package/dist/2027-01/services/customer_portal/customer_meters.d.mts +2 -2
- package/dist/2027-01/services/customer_portal/customer_meters.mjs +1 -1
- package/dist/2027-01/services/customer_portal/customer_session.d.cts +2 -2
- package/dist/2027-01/services/customer_portal/customer_session.d.mts +2 -2
- package/dist/2027-01/services/customer_portal/customers.cjs +1 -1
- package/dist/2027-01/services/customer_portal/customers.d.cts +2 -2
- package/dist/2027-01/services/customer_portal/customers.d.mts +2 -2
- package/dist/2027-01/services/customer_portal/customers.mjs +1 -1
- package/dist/2027-01/services/customer_portal/downloadables.cjs +1 -1
- package/dist/2027-01/services/customer_portal/downloadables.d.cts +2 -2
- package/dist/2027-01/services/customer_portal/downloadables.d.mts +2 -2
- package/dist/2027-01/services/customer_portal/downloadables.mjs +1 -1
- package/dist/2027-01/services/customer_portal/index.d.cts +2 -2
- package/dist/2027-01/services/customer_portal/index.d.mts +2 -2
- package/dist/2027-01/services/customer_portal/license_keys.cjs +1 -1
- package/dist/2027-01/services/customer_portal/license_keys.d.cts +2 -2
- package/dist/2027-01/services/customer_portal/license_keys.d.mts +2 -2
- package/dist/2027-01/services/customer_portal/license_keys.mjs +1 -1
- package/dist/2027-01/services/customer_portal/members.cjs +1 -1
- package/dist/2027-01/services/customer_portal/members.d.cts +2 -2
- package/dist/2027-01/services/customer_portal/members.d.mts +2 -2
- package/dist/2027-01/services/customer_portal/members.mjs +1 -1
- package/dist/2027-01/services/customer_portal/orders.cjs +1 -1
- package/dist/2027-01/services/customer_portal/orders.d.cts +2 -2
- package/dist/2027-01/services/customer_portal/orders.d.mts +2 -2
- package/dist/2027-01/services/customer_portal/orders.mjs +1 -1
- package/dist/2027-01/services/customer_portal/organizations.cjs +1 -1
- package/dist/2027-01/services/customer_portal/organizations.d.cts +2 -2
- package/dist/2027-01/services/customer_portal/organizations.d.mts +2 -2
- package/dist/2027-01/services/customer_portal/organizations.mjs +1 -1
- package/dist/2027-01/services/customer_portal/seats.cjs +1 -1
- package/dist/2027-01/services/customer_portal/seats.d.cts +2 -2
- package/dist/2027-01/services/customer_portal/seats.d.mts +2 -2
- package/dist/2027-01/services/customer_portal/seats.mjs +1 -1
- package/dist/2027-01/services/customer_portal/subscriptions.cjs +1 -1
- package/dist/2027-01/services/customer_portal/subscriptions.d.cts +2 -2
- package/dist/2027-01/services/customer_portal/subscriptions.d.mts +2 -2
- package/dist/2027-01/services/customer_portal/subscriptions.mjs +1 -1
- package/dist/2027-01/services/customer_portal/wallets.cjs +1 -1
- package/dist/2027-01/services/customer_portal/wallets.d.cts +2 -2
- package/dist/2027-01/services/customer_portal/wallets.d.mts +2 -2
- package/dist/2027-01/services/customer_portal/wallets.mjs +1 -1
- package/dist/2027-01/services/customer_seats.cjs +1 -1
- package/dist/2027-01/services/customer_seats.d.cts +2 -2
- package/dist/2027-01/services/customer_seats.d.mts +2 -2
- package/dist/2027-01/services/customer_seats.mjs +1 -1
- package/dist/2027-01/services/customer_sessions.cjs +1 -1
- package/dist/2027-01/services/customer_sessions.d.cts +2 -2
- package/dist/2027-01/services/customer_sessions.d.mts +2 -2
- package/dist/2027-01/services/customer_sessions.mjs +1 -1
- package/dist/2027-01/services/customers/index.cjs +1 -1
- package/dist/2027-01/services/customers/index.d.cts +2 -2
- package/dist/2027-01/services/customers/index.d.mts +2 -2
- package/dist/2027-01/services/customers/index.mjs +1 -1
- package/dist/2027-01/services/customers/members.cjs +1 -1
- package/dist/2027-01/services/customers/members.d.cts +2 -2
- package/dist/2027-01/services/customers/members.d.mts +2 -2
- package/dist/2027-01/services/customers/members.mjs +1 -1
- package/dist/2027-01/services/discounts.cjs +1 -1
- package/dist/2027-01/services/discounts.d.cts +2 -2
- package/dist/2027-01/services/discounts.d.mts +2 -2
- package/dist/2027-01/services/discounts.mjs +1 -1
- package/dist/2027-01/services/disputes.cjs +1 -1
- package/dist/2027-01/services/disputes.d.cts +2 -2
- package/dist/2027-01/services/disputes.d.mts +2 -2
- package/dist/2027-01/services/disputes.mjs +1 -1
- package/dist/2027-01/services/event_types.cjs +1 -1
- package/dist/2027-01/services/event_types.d.cts +2 -2
- package/dist/2027-01/services/event_types.d.mts +2 -2
- package/dist/2027-01/services/event_types.mjs +1 -1
- package/dist/2027-01/services/events.cjs +1 -1
- package/dist/2027-01/services/events.d.cts +2 -2
- package/dist/2027-01/services/events.d.mts +2 -2
- package/dist/2027-01/services/events.mjs +1 -1
- package/dist/2027-01/services/files.cjs +1 -1
- package/dist/2027-01/services/files.d.cts +2 -2
- package/dist/2027-01/services/files.d.mts +2 -2
- package/dist/2027-01/services/files.mjs +1 -1
- package/dist/2027-01/services/license_keys.cjs +1 -1
- package/dist/2027-01/services/license_keys.d.cts +2 -2
- package/dist/2027-01/services/license_keys.d.mts +2 -2
- package/dist/2027-01/services/license_keys.mjs +1 -1
- package/dist/2027-01/services/meters.cjs +1 -1
- package/dist/2027-01/services/meters.d.cts +2 -2
- package/dist/2027-01/services/meters.d.mts +2 -2
- package/dist/2027-01/services/meters.mjs +1 -1
- package/dist/2027-01/services/metrics.cjs +1 -1
- package/dist/2027-01/services/metrics.d.cts +2 -2
- package/dist/2027-01/services/metrics.d.mts +2 -2
- package/dist/2027-01/services/metrics.mjs +1 -1
- package/dist/2027-01/services/oauth2/clients/index.d.cts +2 -2
- package/dist/2027-01/services/oauth2/clients/index.d.mts +2 -2
- package/dist/2027-01/services/oauth2/clients/oauth2.cjs +1 -1
- package/dist/2027-01/services/oauth2/clients/oauth2.d.cts +2 -2
- package/dist/2027-01/services/oauth2/clients/oauth2.d.mts +2 -2
- package/dist/2027-01/services/oauth2/clients/oauth2.mjs +1 -1
- package/dist/2027-01/services/oauth2/index.d.cts +2 -2
- package/dist/2027-01/services/oauth2/index.d.mts +2 -2
- package/dist/2027-01/services/orders.cjs +1 -1
- package/dist/2027-01/services/orders.d.cts +2 -2
- package/dist/2027-01/services/orders.d.mts +2 -2
- package/dist/2027-01/services/orders.mjs +1 -1
- package/dist/2027-01/services/organizations.cjs +1 -1
- package/dist/2027-01/services/organizations.d.cts +2 -2
- package/dist/2027-01/services/organizations.d.mts +2 -2
- package/dist/2027-01/services/organizations.mjs +1 -1
- package/dist/2027-01/services/payments.cjs +1 -1
- package/dist/2027-01/services/payments.d.cts +2 -2
- package/dist/2027-01/services/payments.d.mts +2 -2
- package/dist/2027-01/services/payments.mjs +1 -1
- package/dist/2027-01/services/products.cjs +1 -1
- package/dist/2027-01/services/products.d.cts +2 -2
- package/dist/2027-01/services/products.d.mts +2 -2
- package/dist/2027-01/services/products.mjs +1 -1
- package/dist/2027-01/services/refunds.cjs +1 -1
- package/dist/2027-01/services/refunds.d.cts +2 -2
- package/dist/2027-01/services/refunds.d.mts +2 -2
- package/dist/2027-01/services/refunds.mjs +1 -1
- package/dist/2027-01/services/subscriptions.cjs +1 -1
- package/dist/2027-01/services/subscriptions.d.cts +2 -2
- package/dist/2027-01/services/subscriptions.d.mts +2 -2
- package/dist/2027-01/services/subscriptions.mjs +1 -1
- package/dist/2027-01/services/webhooks.cjs +1 -1
- package/dist/2027-01/services/webhooks.d.cts +2 -2
- package/dist/2027-01/services/webhooks.d.mts +2 -2
- package/dist/2027-01/services/webhooks.mjs +1 -1
- package/dist/{base-CpxoQZCZ.mjs → base-BUt6nZzk.mjs} +10 -7
- package/dist/base-BUt6nZzk.mjs.map +1 -0
- package/dist/{base-D83CMR-Q.cjs → base-Cg2wDLWs.cjs} +10 -7
- package/dist/base-Cg2wDLWs.cjs.map +1 -0
- package/dist/{base-C5EE71lz.d.cts → base-CpfZ-knN.d.cts} +3 -1
- package/dist/base-CpfZ-knN.d.cts.map +1 -0
- package/dist/{base-C5EE71lz.d.mts → base-CpfZ-knN.d.mts} +3 -1
- package/dist/base-CpfZ-knN.d.mts.map +1 -0
- package/dist/{errors-B2qXHz99.mjs → errors-4m1zzDNv.mjs} +2 -2
- package/dist/{errors-B2qXHz99.mjs.map → errors-4m1zzDNv.mjs.map} +1 -1
- package/dist/{errors-BG3e1vcX.cjs → errors-CmYJfQ1c.cjs} +2 -2
- package/dist/{errors-BG3e1vcX.cjs.map → errors-CmYJfQ1c.cjs.map} +1 -1
- package/dist/{errors-D_tOnoPP.mjs → errors-dHVoRfxX.mjs} +2 -2
- package/dist/{errors-D_tOnoPP.mjs.map → errors-dHVoRfxX.mjs.map} +1 -1
- package/dist/{errors-h8gRquR8.cjs → errors-o_AM61cd.cjs} +2 -2
- package/dist/{errors-h8gRquR8.cjs.map → errors-o_AM61cd.cjs.map} +1 -1
- package/dist/{errors-B1xadCgl.mjs → errors-yvjiVcrn.mjs} +2 -2
- package/dist/{errors-B1xadCgl.mjs.map → errors-yvjiVcrn.mjs.map} +1 -1
- package/dist/{errors-DDydmY6t.cjs → errors-zDhzqvA4.cjs} +2 -2
- package/dist/{errors-DDydmY6t.cjs.map → errors-zDhzqvA4.cjs.map} +1 -1
- package/dist/{index-CCkgYIo1.d.mts → index-3FVEKx0W.d.mts} +4 -4
- package/dist/{index-CCkgYIo1.d.mts.map → index-3FVEKx0W.d.mts.map} +1 -1
- package/dist/{index-YSnA4bj_.d.cts → index-B55JAK0b.d.mts} +4 -4
- package/dist/{index-YSnA4bj_.d.cts.map → index-B55JAK0b.d.mts.map} +1 -1
- package/dist/{index-CASi3-c8.d.mts → index-BMjPRZtD.d.cts} +4 -4
- package/dist/{index-CASi3-c8.d.mts.map → index-BMjPRZtD.d.cts.map} +1 -1
- package/dist/{index-RFIyzWM8.d.mts → index-C8c-dYJD.d.cts} +4 -4
- package/dist/{index-RFIyzWM8.d.mts.map → index-C8c-dYJD.d.cts.map} +1 -1
- package/dist/{index-Uq9Eca4W.d.cts → index-DnHIyHi7.d.mts} +4 -4
- package/dist/{index-Uq9Eca4W.d.cts.map → index-DnHIyHi7.d.mts.map} +1 -1
- package/dist/{index-Cu_Exrh7.d.cts → index-jG5MmDUr.d.cts} +4 -4
- package/dist/{index-Cu_Exrh7.d.cts.map → index-jG5MmDUr.d.cts.map} +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.mjs +1 -1
- package/dist/{models-CygFKqFa.d.cts → models-772bIFO1.d.cts} +2 -2
- package/dist/{models-CygFKqFa.d.cts.map → models-772bIFO1.d.cts.map} +1 -1
- package/dist/{models-CygFKqFa.d.mts → models-772bIFO1.d.mts} +2 -2
- package/dist/{models-CygFKqFa.d.mts.map → models-772bIFO1.d.mts.map} +1 -1
- package/dist/{models-COhG3nD4.d.cts → models-B0yaXFSN.d.cts} +95 -13
- package/dist/{models-COhG3nD4.d.mts.map → models-B0yaXFSN.d.cts.map} +1 -1
- package/dist/{models-COhG3nD4.d.mts → models-B0yaXFSN.d.mts} +95 -13
- package/dist/{models-COhG3nD4.d.cts.map → models-B0yaXFSN.d.mts.map} +1 -1
- package/dist/{models-DjSYF7EH.d.cts → models-DHD3CJOb.d.cts} +12 -12
- package/dist/{models-DjSYF7EH.d.cts.map → models-DHD3CJOb.d.cts.map} +1 -1
- package/dist/{models-DjSYF7EH.d.mts → models-DHD3CJOb.d.mts} +12 -12
- package/dist/{models-DjSYF7EH.d.mts.map → models-DHD3CJOb.d.mts.map} +1 -1
- package/dist/{webhooks-BIIRAEZ9.d.mts → webhooks-BVH79cBZ.d.mts} +2 -2
- package/dist/{webhooks-BIIRAEZ9.d.mts.map → webhooks-BVH79cBZ.d.mts.map} +1 -1
- package/dist/{webhooks-CJ5fgGEO.cjs → webhooks-CoBpD12U.cjs} +2 -2
- package/dist/{webhooks-CJ5fgGEO.cjs.map → webhooks-CoBpD12U.cjs.map} +1 -1
- package/dist/{webhooks-lgh0ADeT.mjs → webhooks-gpChtkEO.mjs} +2 -2
- package/dist/{webhooks-lgh0ADeT.mjs.map → webhooks-gpChtkEO.mjs.map} +1 -1
- package/dist/{webhooks-DfOgc4VC.d.cts → webhooks-vHNvi6WA.d.cts} +2 -2
- package/dist/{webhooks-DfOgc4VC.d.cts.map → webhooks-vHNvi6WA.d.cts.map} +1 -1
- package/package.json +1 -1
- package/dist/base-C5EE71lz.d.cts.map +0 -1
- package/dist/base-C5EE71lz.d.mts.map +0 -1
- package/dist/base-CpxoQZCZ.mjs.map +0 -1
- package/dist/base-D83CMR-Q.cjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhooks-
|
|
1
|
+
{"version":3,"file":"webhooks-CoBpD12U.cjs","names":["PolarError"],"sources":["../src/webhooks.ts"],"sourcesContent":["import { PolarError } from \"./base\";\n\nconst webhookToleranceSeconds = 5 * 60;\n\nexport class PolarWebhookError extends PolarError {\n constructor(message: string, options?: ErrorOptions) {\n super(message, options);\n this.name = \"PolarWebhookError\";\n }\n}\n\nexport class PolarWebhookVerificationError extends PolarWebhookError {\n constructor(message: string, options?: ErrorOptions) {\n super(message, options);\n this.name = \"PolarWebhookVerificationError\";\n }\n}\n\nexport class PolarWebhookUnknownTypeError extends PolarWebhookError {\n constructor(public readonly eventType: string | null) {\n super(`Unknown webhook event type: ${JSON.stringify(eventType)}`);\n this.name = \"PolarWebhookUnknownTypeError\";\n }\n}\n\nexport const validateWebhook = async <Payload>(\n body: string | Uint8Array,\n headers: Record<string, string>,\n secret: string,\n eventTypes: ReadonlySet<string>,\n): Promise<Payload> => {\n const bodyText = typeof body === \"string\" ? body : new TextDecoder().decode(body);\n await verifySignature(bodyText, headers, secret);\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(bodyText);\n } catch (error) {\n throw new PolarWebhookError(\"Failed to parse webhook payload\", {\n cause: error,\n });\n }\n\n const eventType =\n typeof parsed === \"object\" &&\n parsed !== null &&\n \"type\" in parsed &&\n typeof parsed.type === \"string\"\n ? parsed.type\n : null;\n if (eventType === null || !eventTypes.has(eventType)) {\n throw new PolarWebhookUnknownTypeError(eventType);\n }\n\n return parsed as Payload;\n};\n\nconst verifySignature = async (\n body: string,\n headers: Record<string, string>,\n secret: string,\n): Promise<void> => {\n if (secret.length === 0) {\n throw new PolarWebhookVerificationError(\"Secret can't be empty\");\n }\n\n const normalizedHeaders = Object.fromEntries(\n Object.entries(headers).map(([key, value]) => [key.toLowerCase(), value]),\n );\n const webhookId = normalizedHeaders[\"webhook-id\"];\n const webhookTimestamp = normalizedHeaders[\"webhook-timestamp\"];\n const webhookSignature = normalizedHeaders[\"webhook-signature\"];\n if (!webhookId || !webhookTimestamp || !webhookSignature) {\n throw new PolarWebhookVerificationError(\"Missing required headers\");\n }\n\n const timestamp = Number(webhookTimestamp);\n if (!Number.isFinite(timestamp)) {\n throw new PolarWebhookVerificationError(\"Invalid signature headers\");\n }\n\n const now = Date.now() / 1000;\n if (timestamp < now - webhookToleranceSeconds) {\n throw new PolarWebhookVerificationError(\"Message timestamp too old\");\n }\n if (timestamp > now + webhookToleranceSeconds) {\n throw new PolarWebhookVerificationError(\"Message timestamp too new\");\n }\n\n const signedContent = `${webhookId}.${Math.floor(timestamp)}.${body}`;\n const textEncoder = new TextEncoder();\n const signedContentBytes = textEncoder.encode(signedContent);\n const signingKeys = await Promise.all(\n hmacKeys(secret).map((key) =>\n globalThis.crypto.subtle.importKey(\"raw\", key, { name: \"HMAC\", hash: \"SHA-256\" }, false, [\n \"verify\",\n ]),\n ),\n );\n\n for (const versionedSignature of webhookSignature.split(\" \")) {\n const [version, signature] = versionedSignature.split(\",\", 2);\n if (version !== \"v1\" || signature === undefined) {\n continue;\n }\n const decodedSignature = decodeBase64(signature);\n if (decodedSignature === null) {\n continue;\n }\n for (const signingKey of signingKeys) {\n if (\n await globalThis.crypto.subtle.verify(\n \"HMAC\",\n signingKey,\n decodedSignature,\n signedContentBytes,\n )\n ) {\n return;\n }\n }\n }\n\n throw new PolarWebhookVerificationError(\"No matching signature found\");\n};\n\nconst hmacKeys = (secret: string): BufferSource[] => {\n const utf8Key = new TextEncoder().encode(secret);\n const keys: BufferSource[] = [utf8Key];\n const remainder = secret.startsWith(\"whsec_\") ? secret.slice(\"whsec_\".length) : secret;\n const decoded = decodeBase64(remainder);\n if (decoded !== null && decoded.byteLength > 0 && !bytesEqual(decoded, utf8Key)) {\n keys.push(decoded);\n }\n return keys;\n};\n\nconst bytesEqual = (left: Uint8Array, right: Uint8Array): boolean => {\n if (left.byteLength !== right.byteLength) {\n return false;\n }\n for (let index = 0; index < left.byteLength; index++) {\n if (left[index] !== right[index]) {\n return false;\n }\n }\n return true;\n};\n\nconst decodeBase64 = (value: string): Uint8Array<ArrayBuffer> | null => {\n try {\n const decodedValue = globalThis.atob(value);\n const bytes = new Uint8Array(new ArrayBuffer(decodedValue.length));\n for (let index = 0; index < decodedValue.length; index++) {\n bytes[index] = decodedValue.charCodeAt(index);\n }\n return bytes;\n } catch {\n return null;\n }\n};\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { r as PolarError } from "./base-
|
|
1
|
+
import { r as PolarError } from "./base-BUt6nZzk.mjs";
|
|
2
2
|
//#region src/webhooks.ts
|
|
3
3
|
const webhookToleranceSeconds = 300;
|
|
4
4
|
var PolarWebhookError = class extends PolarError {
|
|
@@ -87,4 +87,4 @@ const decodeBase64 = (value) => {
|
|
|
87
87
|
//#endregion
|
|
88
88
|
export { validateWebhook as i, PolarWebhookUnknownTypeError as n, PolarWebhookVerificationError as r, PolarWebhookError as t };
|
|
89
89
|
|
|
90
|
-
//# sourceMappingURL=webhooks-
|
|
90
|
+
//# sourceMappingURL=webhooks-gpChtkEO.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhooks-
|
|
1
|
+
{"version":3,"file":"webhooks-gpChtkEO.mjs","names":[],"sources":["../src/webhooks.ts"],"sourcesContent":["import { PolarError } from \"./base\";\n\nconst webhookToleranceSeconds = 5 * 60;\n\nexport class PolarWebhookError extends PolarError {\n constructor(message: string, options?: ErrorOptions) {\n super(message, options);\n this.name = \"PolarWebhookError\";\n }\n}\n\nexport class PolarWebhookVerificationError extends PolarWebhookError {\n constructor(message: string, options?: ErrorOptions) {\n super(message, options);\n this.name = \"PolarWebhookVerificationError\";\n }\n}\n\nexport class PolarWebhookUnknownTypeError extends PolarWebhookError {\n constructor(public readonly eventType: string | null) {\n super(`Unknown webhook event type: ${JSON.stringify(eventType)}`);\n this.name = \"PolarWebhookUnknownTypeError\";\n }\n}\n\nexport const validateWebhook = async <Payload>(\n body: string | Uint8Array,\n headers: Record<string, string>,\n secret: string,\n eventTypes: ReadonlySet<string>,\n): Promise<Payload> => {\n const bodyText = typeof body === \"string\" ? body : new TextDecoder().decode(body);\n await verifySignature(bodyText, headers, secret);\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(bodyText);\n } catch (error) {\n throw new PolarWebhookError(\"Failed to parse webhook payload\", {\n cause: error,\n });\n }\n\n const eventType =\n typeof parsed === \"object\" &&\n parsed !== null &&\n \"type\" in parsed &&\n typeof parsed.type === \"string\"\n ? parsed.type\n : null;\n if (eventType === null || !eventTypes.has(eventType)) {\n throw new PolarWebhookUnknownTypeError(eventType);\n }\n\n return parsed as Payload;\n};\n\nconst verifySignature = async (\n body: string,\n headers: Record<string, string>,\n secret: string,\n): Promise<void> => {\n if (secret.length === 0) {\n throw new PolarWebhookVerificationError(\"Secret can't be empty\");\n }\n\n const normalizedHeaders = Object.fromEntries(\n Object.entries(headers).map(([key, value]) => [key.toLowerCase(), value]),\n );\n const webhookId = normalizedHeaders[\"webhook-id\"];\n const webhookTimestamp = normalizedHeaders[\"webhook-timestamp\"];\n const webhookSignature = normalizedHeaders[\"webhook-signature\"];\n if (!webhookId || !webhookTimestamp || !webhookSignature) {\n throw new PolarWebhookVerificationError(\"Missing required headers\");\n }\n\n const timestamp = Number(webhookTimestamp);\n if (!Number.isFinite(timestamp)) {\n throw new PolarWebhookVerificationError(\"Invalid signature headers\");\n }\n\n const now = Date.now() / 1000;\n if (timestamp < now - webhookToleranceSeconds) {\n throw new PolarWebhookVerificationError(\"Message timestamp too old\");\n }\n if (timestamp > now + webhookToleranceSeconds) {\n throw new PolarWebhookVerificationError(\"Message timestamp too new\");\n }\n\n const signedContent = `${webhookId}.${Math.floor(timestamp)}.${body}`;\n const textEncoder = new TextEncoder();\n const signedContentBytes = textEncoder.encode(signedContent);\n const signingKeys = await Promise.all(\n hmacKeys(secret).map((key) =>\n globalThis.crypto.subtle.importKey(\"raw\", key, { name: \"HMAC\", hash: \"SHA-256\" }, false, [\n \"verify\",\n ]),\n ),\n );\n\n for (const versionedSignature of webhookSignature.split(\" \")) {\n const [version, signature] = versionedSignature.split(\",\", 2);\n if (version !== \"v1\" || signature === undefined) {\n continue;\n }\n const decodedSignature = decodeBase64(signature);\n if (decodedSignature === null) {\n continue;\n }\n for (const signingKey of signingKeys) {\n if (\n await globalThis.crypto.subtle.verify(\n \"HMAC\",\n signingKey,\n decodedSignature,\n signedContentBytes,\n )\n ) {\n return;\n }\n }\n }\n\n throw new PolarWebhookVerificationError(\"No matching signature found\");\n};\n\nconst hmacKeys = (secret: string): BufferSource[] => {\n const utf8Key = new TextEncoder().encode(secret);\n const keys: BufferSource[] = [utf8Key];\n const remainder = secret.startsWith(\"whsec_\") ? secret.slice(\"whsec_\".length) : secret;\n const decoded = decodeBase64(remainder);\n if (decoded !== null && decoded.byteLength > 0 && !bytesEqual(decoded, utf8Key)) {\n keys.push(decoded);\n }\n return keys;\n};\n\nconst bytesEqual = (left: Uint8Array, right: Uint8Array): boolean => {\n if (left.byteLength !== right.byteLength) {\n return false;\n }\n for (let index = 0; index < left.byteLength; index++) {\n if (left[index] !== right[index]) {\n return false;\n }\n }\n return true;\n};\n\nconst decodeBase64 = (value: string): Uint8Array<ArrayBuffer> | null => {\n try {\n const decodedValue = globalThis.atob(value);\n const bytes = new Uint8Array(new ArrayBuffer(decodedValue.length));\n for (let index = 0; index < decodedValue.length; index++) {\n bytes[index] = decodedValue.charCodeAt(index);\n }\n return bytes;\n } catch {\n return null;\n }\n};\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { i as PolarError } from "./base-
|
|
1
|
+
import { i as PolarError } from "./base-CpfZ-knN.cjs";
|
|
2
2
|
//#region src/webhooks.d.ts
|
|
3
3
|
declare class PolarWebhookError extends PolarError {
|
|
4
4
|
constructor(message: string, options?: ErrorOptions);
|
|
@@ -12,4 +12,4 @@ declare class PolarWebhookUnknownTypeError extends PolarWebhookError {
|
|
|
12
12
|
}
|
|
13
13
|
//#endregion
|
|
14
14
|
export { PolarWebhookUnknownTypeError as n, PolarWebhookVerificationError as r, PolarWebhookError as t };
|
|
15
|
-
//# sourceMappingURL=webhooks-
|
|
15
|
+
//# sourceMappingURL=webhooks-vHNvi6WA.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhooks-
|
|
1
|
+
{"version":3,"file":"webhooks-vHNvi6WA.d.cts","names":[],"sources":["../src/webhooks.ts"],"mappings":";;cAIa,0BAA0B;EACzB,YAAA,iBAAiB,UAAU;;cAM5B,sCAAsC;EACrC,YAAA,iBAAiB,UAAU;;cAM5B,qCAAqC;WACpB;EAAA,YAAA"}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"base-C5EE71lz.d.cts","names":[],"sources":["../src/base.ts"],"mappings":";cAAa,mBAAmB;cAEnB,0BAA0B;EACzB,YAAA;;cAMD,yBAAyB;EACxB,YAAA,oBAAoB;;cAMrB,iBAAiB,qBAAqB;WAE/B;WACA,OAAO;EADP,YAAA,oBACA,OAAO;;cAOd,4BAA4B;WAErB;WACA;EADA,YAAA,iBACA;;KAOf,aAAa;KACb;UASK;GACP,cAAc,kBAAkB;;UAiDlB;EACf;EACA;EACA;;EAEA;;UAGe;;EAEf;;EAEA;;cAsBW;qBACQ,SAAS;EAEhB,YAAA,SAAS;EAOd,aACL,gBACA,aACA,aAAa,YACb,cAAc,aACd,0BACU;EAiBC,YACX,kBAAkB,cAClB,iBAAiB,iBAChB,QAAQ;EAmCE,cAAc,GACzB,UAAU,UACV,wCACA,SAAS,uBAAuB,gBAAgB,oBAC/C,QAAQ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"base-C5EE71lz.d.mts","names":[],"sources":["../src/base.ts"],"mappings":";cAAa,mBAAmB;cAEnB,0BAA0B;EACzB,YAAA;;cAMD,yBAAyB;EACxB,YAAA,oBAAoB;;cAMrB,iBAAiB,qBAAqB;WAE/B;WACA,OAAO;EADP,YAAA,oBACA,OAAO;;cAOd,4BAA4B;WAErB;WACA;EADA,YAAA,iBACA;;KAOf,aAAa;KACb;UASK;GACP,cAAc,kBAAkB;;UAiDlB;EACf;EACA;EACA;;EAEA;;UAGe;;EAEf;;EAEA;;cAsBW;qBACQ,SAAS;EAEhB,YAAA,SAAS;EAOd,aACL,gBACA,aACA,aAAa,YACb,cAAc,aACd,0BACU;EAiBC,YACX,kBAAkB,cAClB,iBAAiB,iBAChB,QAAQ;EAmCE,cAAc,GACzB,UAAU,UACV,wCACA,SAAS,uBAAuB,gBAAgB,oBAC/C,QAAQ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"base-CpxoQZCZ.mjs","names":[],"sources":["../src/base.ts"],"sourcesContent":["export class PolarError extends Error {}\n\nexport class PolarNetworkError extends PolarError {\n constructor(message: string) {\n super(`Polar API network error: ${message}`);\n this.name = \"PolarNetworkError\";\n }\n}\n\nexport class PolarServerError extends PolarError {\n constructor(statusCode: number, message: string) {\n super(`Polar API returned a server error: ${statusCode} - ${message}`);\n this.name = \"PolarServerError\";\n }\n}\n\nexport class PolarClientError<T = unknown> extends PolarError {\n constructor(\n public readonly statusCode: number,\n public readonly error: T,\n ) {\n super(`Polar API returned an error: ${statusCode} - ${JSON.stringify(error)}`);\n this.name = \"PolarClientError\";\n }\n}\n\nexport class PolarRateLimitError extends PolarClientError {\n constructor(\n public readonly statusCode: 429,\n public readonly retryAfter: number | null = null,\n ) {\n super(statusCode, \"Rate limit exceeded\");\n this.name = \"PolarRateLimitError\";\n }\n}\n\ntype PathParams = Record<string, string | number | boolean>;\ntype QueryParamValue =\n | string\n | string[]\n | number\n | number[]\n | boolean\n | boolean[]\n | null\n | undefined;\ninterface QueryParams {\n [key: string]: QueryParamValue | QueryParams;\n}\n\nconst buildUrl = (url: string, pathParams?: PathParams, queryParams?: QueryParams): string => {\n // Format URL with path params using string replacement\n let formattedUrl = url;\n if (pathParams) {\n for (const [key, value] of Object.entries(pathParams)) {\n if (value !== null && value !== undefined) {\n formattedUrl = formattedUrl.replace(`{${key}}`, encodeURIComponent(String(value)));\n }\n }\n }\n\n if (queryParams) {\n const searchParams = new URLSearchParams();\n for (const [key, value] of Object.entries(queryParams)) {\n if (value !== null && value !== undefined) {\n if (Array.isArray(value)) {\n for (const item of value) {\n searchParams.append(key, String(item));\n }\n } else if (typeof value === \"object\") {\n // Handle deepObject style parameters (e.g., metadata)\n for (const [subKey, subValue] of Object.entries(value)) {\n if (subValue !== null && subValue !== undefined) {\n if (Array.isArray(subValue)) {\n for (const item of subValue) {\n searchParams.append(`${key}[${subKey}]`, String(item));\n }\n } else {\n searchParams.append(`${key}[${subKey}]`, String(subValue));\n }\n }\n }\n } else {\n searchParams.append(key, String(value));\n }\n }\n }\n const queryString = searchParams.toString();\n if (queryString) {\n formattedUrl = `${formattedUrl}?${queryString}`;\n }\n }\n\n return formattedUrl;\n};\n\nexport interface ClientOptions {\n baseUrl: string;\n version: string;\n accessToken: string;\n /** Default request timeout, in seconds. */\n timeout?: number;\n}\n\nexport interface RequestOptions {\n /** Request timeout override, in seconds. */\n timeout?: number;\n /** Access token override for this request. */\n accessToken?: string;\n}\n\nconst MAX_ABORT_SIGNAL_TIMEOUT_MS = 2_147_483_647;\n\nexport const resolveBaseUrl = (\n servers: Record<string, string>,\n environment: string,\n baseUrl?: string,\n): string => {\n if (baseUrl !== undefined) {\n return baseUrl;\n }\n const serverUrl = servers[environment];\n if (serverUrl === undefined) {\n throw new Error(\n `Invalid environment ${JSON.stringify(environment)}. Expected one of: ${Object.keys(servers).sort().join(\", \")}.`,\n );\n }\n return serverUrl;\n};\n\nexport class ClientBase {\n protected readonly options: ClientOptions;\n\n constructor(options: ClientOptions) {\n this.options = {\n timeout: 5.0,\n ...options,\n };\n }\n\n public buildRequest(\n method: string,\n url: string,\n pathParams?: PathParams,\n queryParams?: QueryParams,\n body?: unknown,\n ): [string, RequestInit] {\n const fullUrl = buildUrl(`${this.options.baseUrl}${url}`, pathParams, queryParams);\n const headers = new Headers({\n \"Content-Type\": \"application/json\",\n \"Polar-Version\": this.options.version,\n Authorization: `Bearer ${this.options.accessToken}`,\n });\n return [\n fullUrl,\n {\n method,\n headers,\n ...(body ? { body: JSON.stringify(body) } : {}),\n },\n ];\n }\n\n public async sendRequest(\n request: [string, RequestInit],\n requestOptions?: RequestOptions,\n ): Promise<Response> {\n const [fullUrl, requestInit] = request;\n const timeout = requestOptions?.timeout ?? this.options.timeout;\n let headers = requestInit.headers;\n if (requestOptions?.accessToken !== undefined) {\n headers = new Headers(headers);\n headers.set(\"Authorization\", `Bearer ${requestOptions.accessToken}`);\n }\n let signal = requestInit.signal;\n if (timeout !== undefined) {\n const timeoutMilliseconds = Math.ceil(timeout * 1000);\n if (\n !Number.isFinite(timeout) ||\n timeout < 0 ||\n timeoutMilliseconds > MAX_ABORT_SIGNAL_TIMEOUT_MS\n ) {\n throw new RangeError(\n `Timeout must be a finite, non-negative number no greater than ${MAX_ABORT_SIGNAL_TIMEOUT_MS / 1000} seconds`,\n );\n }\n const timeoutSignal = AbortSignal.timeout(timeoutMilliseconds);\n signal = signal ? AbortSignal.any([signal, timeoutSignal]) : timeoutSignal;\n }\n try {\n return await fetch(fullUrl, {\n ...requestInit,\n headers,\n ...(signal ? { signal } : {}),\n });\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n throw new PolarNetworkError(errorMessage);\n }\n }\n\n public async parseResponse<T>(\n response: Response,\n responseType: \"json\" | \"text\" | \"none\",\n errors?: Record<number, new (...args: any[]) => PolarClientError>,\n ): Promise<T> {\n const statusCode = response.status;\n\n if (statusCode >= 500 && statusCode < 600) {\n const text = await response.text().catch(() => \"\");\n throw new PolarServerError(statusCode, text || \"Server error\");\n }\n\n if (statusCode >= 400 && statusCode < 500) {\n if (statusCode === 429) {\n const retryAfter = response.headers.get(\"Retry-After\");\n if (!retryAfter && errors?.[statusCode]) {\n const ErrorClass = errors[statusCode];\n const errorData = await response.json();\n throw new ErrorClass(statusCode, errorData);\n }\n throw new PolarRateLimitError(statusCode, retryAfter ? parseInt(retryAfter, 10) : null);\n }\n if (errors?.[statusCode]) {\n const ErrorClass = errors[statusCode];\n const errorData = await response.json();\n throw new ErrorClass(statusCode, errorData);\n } else {\n const text = await response.text().catch(() => \"\");\n throw new PolarClientError(statusCode, text || \"Client error\");\n }\n }\n\n if (responseType === \"json\") {\n return (await response.json()) as T;\n }\n if (responseType === \"text\") {\n return (await response.text()) as unknown as T;\n }\n\n return undefined as unknown as T;\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"base-D83CMR-Q.cjs","names":[],"sources":["../src/base.ts"],"sourcesContent":["export class PolarError extends Error {}\n\nexport class PolarNetworkError extends PolarError {\n constructor(message: string) {\n super(`Polar API network error: ${message}`);\n this.name = \"PolarNetworkError\";\n }\n}\n\nexport class PolarServerError extends PolarError {\n constructor(statusCode: number, message: string) {\n super(`Polar API returned a server error: ${statusCode} - ${message}`);\n this.name = \"PolarServerError\";\n }\n}\n\nexport class PolarClientError<T = unknown> extends PolarError {\n constructor(\n public readonly statusCode: number,\n public readonly error: T,\n ) {\n super(`Polar API returned an error: ${statusCode} - ${JSON.stringify(error)}`);\n this.name = \"PolarClientError\";\n }\n}\n\nexport class PolarRateLimitError extends PolarClientError {\n constructor(\n public readonly statusCode: 429,\n public readonly retryAfter: number | null = null,\n ) {\n super(statusCode, \"Rate limit exceeded\");\n this.name = \"PolarRateLimitError\";\n }\n}\n\ntype PathParams = Record<string, string | number | boolean>;\ntype QueryParamValue =\n | string\n | string[]\n | number\n | number[]\n | boolean\n | boolean[]\n | null\n | undefined;\ninterface QueryParams {\n [key: string]: QueryParamValue | QueryParams;\n}\n\nconst buildUrl = (url: string, pathParams?: PathParams, queryParams?: QueryParams): string => {\n // Format URL with path params using string replacement\n let formattedUrl = url;\n if (pathParams) {\n for (const [key, value] of Object.entries(pathParams)) {\n if (value !== null && value !== undefined) {\n formattedUrl = formattedUrl.replace(`{${key}}`, encodeURIComponent(String(value)));\n }\n }\n }\n\n if (queryParams) {\n const searchParams = new URLSearchParams();\n for (const [key, value] of Object.entries(queryParams)) {\n if (value !== null && value !== undefined) {\n if (Array.isArray(value)) {\n for (const item of value) {\n searchParams.append(key, String(item));\n }\n } else if (typeof value === \"object\") {\n // Handle deepObject style parameters (e.g., metadata)\n for (const [subKey, subValue] of Object.entries(value)) {\n if (subValue !== null && subValue !== undefined) {\n if (Array.isArray(subValue)) {\n for (const item of subValue) {\n searchParams.append(`${key}[${subKey}]`, String(item));\n }\n } else {\n searchParams.append(`${key}[${subKey}]`, String(subValue));\n }\n }\n }\n } else {\n searchParams.append(key, String(value));\n }\n }\n }\n const queryString = searchParams.toString();\n if (queryString) {\n formattedUrl = `${formattedUrl}?${queryString}`;\n }\n }\n\n return formattedUrl;\n};\n\nexport interface ClientOptions {\n baseUrl: string;\n version: string;\n accessToken: string;\n /** Default request timeout, in seconds. */\n timeout?: number;\n}\n\nexport interface RequestOptions {\n /** Request timeout override, in seconds. */\n timeout?: number;\n /** Access token override for this request. */\n accessToken?: string;\n}\n\nconst MAX_ABORT_SIGNAL_TIMEOUT_MS = 2_147_483_647;\n\nexport const resolveBaseUrl = (\n servers: Record<string, string>,\n environment: string,\n baseUrl?: string,\n): string => {\n if (baseUrl !== undefined) {\n return baseUrl;\n }\n const serverUrl = servers[environment];\n if (serverUrl === undefined) {\n throw new Error(\n `Invalid environment ${JSON.stringify(environment)}. Expected one of: ${Object.keys(servers).sort().join(\", \")}.`,\n );\n }\n return serverUrl;\n};\n\nexport class ClientBase {\n protected readonly options: ClientOptions;\n\n constructor(options: ClientOptions) {\n this.options = {\n timeout: 5.0,\n ...options,\n };\n }\n\n public buildRequest(\n method: string,\n url: string,\n pathParams?: PathParams,\n queryParams?: QueryParams,\n body?: unknown,\n ): [string, RequestInit] {\n const fullUrl = buildUrl(`${this.options.baseUrl}${url}`, pathParams, queryParams);\n const headers = new Headers({\n \"Content-Type\": \"application/json\",\n \"Polar-Version\": this.options.version,\n Authorization: `Bearer ${this.options.accessToken}`,\n });\n return [\n fullUrl,\n {\n method,\n headers,\n ...(body ? { body: JSON.stringify(body) } : {}),\n },\n ];\n }\n\n public async sendRequest(\n request: [string, RequestInit],\n requestOptions?: RequestOptions,\n ): Promise<Response> {\n const [fullUrl, requestInit] = request;\n const timeout = requestOptions?.timeout ?? this.options.timeout;\n let headers = requestInit.headers;\n if (requestOptions?.accessToken !== undefined) {\n headers = new Headers(headers);\n headers.set(\"Authorization\", `Bearer ${requestOptions.accessToken}`);\n }\n let signal = requestInit.signal;\n if (timeout !== undefined) {\n const timeoutMilliseconds = Math.ceil(timeout * 1000);\n if (\n !Number.isFinite(timeout) ||\n timeout < 0 ||\n timeoutMilliseconds > MAX_ABORT_SIGNAL_TIMEOUT_MS\n ) {\n throw new RangeError(\n `Timeout must be a finite, non-negative number no greater than ${MAX_ABORT_SIGNAL_TIMEOUT_MS / 1000} seconds`,\n );\n }\n const timeoutSignal = AbortSignal.timeout(timeoutMilliseconds);\n signal = signal ? AbortSignal.any([signal, timeoutSignal]) : timeoutSignal;\n }\n try {\n return await fetch(fullUrl, {\n ...requestInit,\n headers,\n ...(signal ? { signal } : {}),\n });\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n throw new PolarNetworkError(errorMessage);\n }\n }\n\n public async parseResponse<T>(\n response: Response,\n responseType: \"json\" | \"text\" | \"none\",\n errors?: Record<number, new (...args: any[]) => PolarClientError>,\n ): Promise<T> {\n const statusCode = response.status;\n\n if (statusCode >= 500 && statusCode < 600) {\n const text = await response.text().catch(() => \"\");\n throw new PolarServerError(statusCode, text || \"Server error\");\n }\n\n if (statusCode >= 400 && statusCode < 500) {\n if (statusCode === 429) {\n const retryAfter = response.headers.get(\"Retry-After\");\n if (!retryAfter && errors?.[statusCode]) {\n const ErrorClass = errors[statusCode];\n const errorData = await response.json();\n throw new ErrorClass(statusCode, errorData);\n }\n throw new PolarRateLimitError(statusCode, retryAfter ? parseInt(retryAfter, 10) : null);\n }\n if (errors?.[statusCode]) {\n const ErrorClass = errors[statusCode];\n const errorData = await response.json();\n throw new ErrorClass(statusCode, errorData);\n } else {\n const text = await response.text().catch(() => \"\");\n throw new PolarClientError(statusCode, text || \"Client error\");\n }\n }\n\n if (responseType === \"json\") {\n return (await response.json()) as T;\n }\n if (responseType === \"text\") {\n return (await response.text()) as unknown as T;\n }\n\n return undefined as unknown as T;\n }\n}\n"],"mappings":"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"}
|