@shware/purchase 0.0.3 → 0.0.4

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.
@@ -22,6 +22,7 @@ var stripe_exports = {};
22
22
  __export(stripe_exports, {
23
23
  METADATA_KEYS: () => METADATA_KEYS,
24
24
  cancellationDetailsSchema: () => cancellationDetailsSchema,
25
+ checkoutSessionSchema: () => checkoutSessionSchema,
25
26
  mapCheckoutSession: () => mapCheckoutSession,
26
27
  mapStatus: () => mapStatus,
27
28
  mapTime: () => mapTime
@@ -98,10 +99,18 @@ var cancellationDetailsSchema = (0, import_v4_mini.object)({
98
99
  ])
99
100
  )
100
101
  });
102
+ function checkoutSessionSchema(productIds) {
103
+ return (0, import_v4_mini.object)({
104
+ productId: (0, import_v4_mini.enum)(productIds),
105
+ cancelUrl: (0, import_v4_mini.optional)((0, import_v4_mini.url)()),
106
+ successUrl: (0, import_v4_mini.optional)((0, import_v4_mini.url)())
107
+ });
108
+ }
101
109
  // Annotate the CommonJS export names for ESM import in node:
102
110
  0 && (module.exports = {
103
111
  METADATA_KEYS,
104
112
  cancellationDetailsSchema,
113
+ checkoutSessionSchema,
105
114
  mapCheckoutSession,
106
115
  mapStatus,
107
116
  mapTime
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/stripe/index.ts"],"sourcesContent":["import type Stripe from 'stripe';\nimport { maxLength, object, optional, string, enum as _enum, type z } from 'zod/v4-mini';\nimport { SubscriptionStatus } from '../subscription/index';\n\nexport const METADATA_KEYS = {\n USER_ID: 'user_id',\n PRODUCT_ID: 'product_id',\n} as const;\n\nexport type ProductId = Lowercase<string>;\nexport type PriceId = `price_${string}`;\n\nexport interface Config {\n returnUrl: string;\n cancelUrl: string;\n successUrl: `${string}?session_id={CHECKOUT_SESSION_ID}`;\n allowPromotionCodes: boolean;\n payments: Record<ProductId, PriceId>;\n subscriptions: Record<ProductId, PriceId>;\n}\n\nexport function mapTime<T extends number | null>(\n stripeTimestampSeconds: T\n): T extends number ? string : null {\n if (!stripeTimestampSeconds) return null as T extends number ? string : null;\n return new Date(stripeTimestampSeconds * 1000).toISOString() as T extends number ? string : null;\n}\n\nexport function mapCheckoutSession(session: Stripe.Checkout.Session) {\n return {\n id: session.id,\n url: session.url,\n livemode: session.livemode,\n expires_at: session.expires_at,\n payment_status: session.payment_status,\n currency: session.currency,\n amount_total: session.amount_total,\n line_items:\n session.line_items?.data.map((item) => ({\n id: item.id,\n currency: item.currency,\n quantity: item.quantity,\n description: item.description,\n amount_tax: item.amount_tax,\n amount_total: item.amount_total,\n amount_subtotal: item.amount_subtotal,\n amount_discount: item.amount_discount,\n price: item.price ? { id: item.price.id } : null,\n })) ?? [],\n };\n}\n\nexport function mapStatus(status: Stripe.Subscription.Status): SubscriptionStatus {\n switch (status) {\n case 'active':\n return SubscriptionStatus.ACTIVE;\n case 'canceled':\n return SubscriptionStatus.CANCELED;\n case 'incomplete':\n return SubscriptionStatus.INCOMPLETE;\n case 'incomplete_expired':\n return SubscriptionStatus.INCOMPLETE_EXPIRED;\n case 'past_due':\n return SubscriptionStatus.PAST_DUE;\n case 'paused':\n return SubscriptionStatus.PAUSED;\n case 'trialing':\n return SubscriptionStatus.TRIALING;\n case 'unpaid':\n return SubscriptionStatus.UNPAID;\n default: {\n console.error(`Invalid stripe status: ${status}`);\n throw new Error(`Invalid stripe status: ${status}`);\n }\n }\n}\n\nexport const cancellationDetailsSchema = object({\n comment: optional(string().check(maxLength(1024))),\n feedback: optional(\n _enum([\n 'customer_service',\n 'low_quality',\n 'missing_features',\n 'switched_service',\n 'too_complex',\n 'too_expensive',\n 'unused',\n 'other',\n ])\n ),\n});\n\nexport interface CancellationDetails extends z.output<typeof cancellationDetailsSchema> {\n reason?: 'cancellation_requested' | 'payment_disputed' | 'payment_failed';\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,qBAA2E;AAC3E,0BAAmC;AAE5B,IAAM,gBAAgB;AAAA,EAC3B,SAAS;AAAA,EACT,YAAY;AACd;AAcO,SAAS,QACd,wBACkC;AAClC,MAAI,CAAC,uBAAwB,QAAO;AACpC,SAAO,IAAI,KAAK,yBAAyB,GAAI,EAAE,YAAY;AAC7D;AAEO,SAAS,mBAAmB,SAAkC;AACnE,SAAO;AAAA,IACL,IAAI,QAAQ;AAAA,IACZ,KAAK,QAAQ;AAAA,IACb,UAAU,QAAQ;AAAA,IAClB,YAAY,QAAQ;AAAA,IACpB,gBAAgB,QAAQ;AAAA,IACxB,UAAU,QAAQ;AAAA,IAClB,cAAc,QAAQ;AAAA,IACtB,YACE,QAAQ,YAAY,KAAK,IAAI,CAAC,UAAU;AAAA,MACtC,IAAI,KAAK;AAAA,MACT,UAAU,KAAK;AAAA,MACf,UAAU,KAAK;AAAA,MACf,aAAa,KAAK;AAAA,MAClB,YAAY,KAAK;AAAA,MACjB,cAAc,KAAK;AAAA,MACnB,iBAAiB,KAAK;AAAA,MACtB,iBAAiB,KAAK;AAAA,MACtB,OAAO,KAAK,QAAQ,EAAE,IAAI,KAAK,MAAM,GAAG,IAAI;AAAA,IAC9C,EAAE,KAAK,CAAC;AAAA,EACZ;AACF;AAEO,SAAS,UAAU,QAAwD;AAChF,UAAQ,QAAQ;AAAA,IACd,KAAK;AACH,aAAO,uCAAmB;AAAA,IAC5B,KAAK;AACH,aAAO,uCAAmB;AAAA,IAC5B,KAAK;AACH,aAAO,uCAAmB;AAAA,IAC5B,KAAK;AACH,aAAO,uCAAmB;AAAA,IAC5B,KAAK;AACH,aAAO,uCAAmB;AAAA,IAC5B,KAAK;AACH,aAAO,uCAAmB;AAAA,IAC5B,KAAK;AACH,aAAO,uCAAmB;AAAA,IAC5B,KAAK;AACH,aAAO,uCAAmB;AAAA,IAC5B,SAAS;AACP,cAAQ,MAAM,0BAA0B,MAAM,EAAE;AAChD,YAAM,IAAI,MAAM,0BAA0B,MAAM,EAAE;AAAA,IACpD;AAAA,EACF;AACF;AAEO,IAAM,gCAA4B,uBAAO;AAAA,EAC9C,aAAS,6BAAS,uBAAO,EAAE,UAAM,0BAAU,IAAI,CAAC,CAAC;AAAA,EACjD,cAAU;AAAA,QACR,eAAAA,MAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AACF,CAAC;","names":["_enum"]}
1
+ {"version":3,"sources":["../../src/stripe/index.ts"],"sourcesContent":["import type Stripe from 'stripe';\nimport { maxLength, object, optional, string, enum as _enum, type z, url } from 'zod/v4-mini';\nimport { SubscriptionStatus } from '../subscription/index';\n\nexport const METADATA_KEYS = {\n USER_ID: 'user_id',\n PRODUCT_ID: 'product_id',\n} as const;\n\nexport type ProductId = Lowercase<string>;\nexport type PriceId = `price_${string}`;\n\nexport interface Config {\n returnUrl: string;\n cancelUrl: string;\n successUrl: `${string}?session_id={CHECKOUT_SESSION_ID}`;\n allowPromotionCodes: boolean;\n payments: Record<ProductId, PriceId>;\n subscriptions: Record<ProductId, PriceId>;\n}\n\nexport function mapTime<T extends number | null>(\n stripeTimestampSeconds: T\n): T extends number ? string : null {\n if (!stripeTimestampSeconds) return null as T extends number ? string : null;\n return new Date(stripeTimestampSeconds * 1000).toISOString() as T extends number ? string : null;\n}\n\nexport function mapCheckoutSession(session: Stripe.Checkout.Session) {\n return {\n id: session.id,\n url: session.url,\n livemode: session.livemode,\n expires_at: session.expires_at,\n payment_status: session.payment_status,\n currency: session.currency,\n amount_total: session.amount_total,\n line_items:\n session.line_items?.data.map((item) => ({\n id: item.id,\n currency: item.currency,\n quantity: item.quantity,\n description: item.description,\n amount_tax: item.amount_tax,\n amount_total: item.amount_total,\n amount_subtotal: item.amount_subtotal,\n amount_discount: item.amount_discount,\n price: item.price ? { id: item.price.id } : null,\n })) ?? [],\n };\n}\n\nexport type CheckoutSession = ReturnType<typeof mapCheckoutSession>;\n\nexport function mapStatus(status: Stripe.Subscription.Status): SubscriptionStatus {\n switch (status) {\n case 'active':\n return SubscriptionStatus.ACTIVE;\n case 'canceled':\n return SubscriptionStatus.CANCELED;\n case 'incomplete':\n return SubscriptionStatus.INCOMPLETE;\n case 'incomplete_expired':\n return SubscriptionStatus.INCOMPLETE_EXPIRED;\n case 'past_due':\n return SubscriptionStatus.PAST_DUE;\n case 'paused':\n return SubscriptionStatus.PAUSED;\n case 'trialing':\n return SubscriptionStatus.TRIALING;\n case 'unpaid':\n return SubscriptionStatus.UNPAID;\n default: {\n console.error(`Invalid stripe status: ${status}`);\n throw new Error(`Invalid stripe status: ${status}`);\n }\n }\n}\n\nexport const cancellationDetailsSchema = object({\n comment: optional(string().check(maxLength(1024))),\n feedback: optional(\n _enum([\n 'customer_service',\n 'low_quality',\n 'missing_features',\n 'switched_service',\n 'too_complex',\n 'too_expensive',\n 'unused',\n 'other',\n ])\n ),\n});\n\nexport function checkoutSessionSchema(productIds: [ProductId, ...ProductId[]]) {\n return object({\n productId: _enum(productIds),\n cancelUrl: optional(url()),\n successUrl: optional(url()),\n });\n}\n\nexport interface CancellationDetails extends z.output<typeof cancellationDetailsSchema> {\n reason?: 'cancellation_requested' | 'payment_disputed' | 'payment_failed';\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,qBAAgF;AAChF,0BAAmC;AAE5B,IAAM,gBAAgB;AAAA,EAC3B,SAAS;AAAA,EACT,YAAY;AACd;AAcO,SAAS,QACd,wBACkC;AAClC,MAAI,CAAC,uBAAwB,QAAO;AACpC,SAAO,IAAI,KAAK,yBAAyB,GAAI,EAAE,YAAY;AAC7D;AAEO,SAAS,mBAAmB,SAAkC;AACnE,SAAO;AAAA,IACL,IAAI,QAAQ;AAAA,IACZ,KAAK,QAAQ;AAAA,IACb,UAAU,QAAQ;AAAA,IAClB,YAAY,QAAQ;AAAA,IACpB,gBAAgB,QAAQ;AAAA,IACxB,UAAU,QAAQ;AAAA,IAClB,cAAc,QAAQ;AAAA,IACtB,YACE,QAAQ,YAAY,KAAK,IAAI,CAAC,UAAU;AAAA,MACtC,IAAI,KAAK;AAAA,MACT,UAAU,KAAK;AAAA,MACf,UAAU,KAAK;AAAA,MACf,aAAa,KAAK;AAAA,MAClB,YAAY,KAAK;AAAA,MACjB,cAAc,KAAK;AAAA,MACnB,iBAAiB,KAAK;AAAA,MACtB,iBAAiB,KAAK;AAAA,MACtB,OAAO,KAAK,QAAQ,EAAE,IAAI,KAAK,MAAM,GAAG,IAAI;AAAA,IAC9C,EAAE,KAAK,CAAC;AAAA,EACZ;AACF;AAIO,SAAS,UAAU,QAAwD;AAChF,UAAQ,QAAQ;AAAA,IACd,KAAK;AACH,aAAO,uCAAmB;AAAA,IAC5B,KAAK;AACH,aAAO,uCAAmB;AAAA,IAC5B,KAAK;AACH,aAAO,uCAAmB;AAAA,IAC5B,KAAK;AACH,aAAO,uCAAmB;AAAA,IAC5B,KAAK;AACH,aAAO,uCAAmB;AAAA,IAC5B,KAAK;AACH,aAAO,uCAAmB;AAAA,IAC5B,KAAK;AACH,aAAO,uCAAmB;AAAA,IAC5B,KAAK;AACH,aAAO,uCAAmB;AAAA,IAC5B,SAAS;AACP,cAAQ,MAAM,0BAA0B,MAAM,EAAE;AAChD,YAAM,IAAI,MAAM,0BAA0B,MAAM,EAAE;AAAA,IACpD;AAAA,EACF;AACF;AAEO,IAAM,gCAA4B,uBAAO;AAAA,EAC9C,aAAS,6BAAS,uBAAO,EAAE,UAAM,0BAAU,IAAI,CAAC,CAAC;AAAA,EACjD,cAAU;AAAA,QACR,eAAAA,MAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AACF,CAAC;AAEM,SAAS,sBAAsB,YAAyC;AAC7E,aAAO,uBAAO;AAAA,IACZ,eAAW,eAAAA,MAAM,UAAU;AAAA,IAC3B,eAAW,6BAAS,oBAAI,CAAC;AAAA,IACzB,gBAAY,6BAAS,oBAAI,CAAC;AAAA,EAC5B,CAAC;AACH;","names":["_enum"]}
@@ -39,6 +39,7 @@ declare function mapCheckoutSession(session: Stripe.Checkout.Session): {
39
39
  } | null;
40
40
  }[];
41
41
  };
42
+ type CheckoutSession = ReturnType<typeof mapCheckoutSession>;
42
43
  declare function mapStatus(status: Stripe.Subscription.Status): SubscriptionStatus;
43
44
  declare const cancellationDetailsSchema: z.ZodMiniObject<{
44
45
  comment: z.ZodMiniOptional<z.ZodMiniString<string>>;
@@ -53,8 +54,15 @@ declare const cancellationDetailsSchema: z.ZodMiniObject<{
53
54
  other: "other";
54
55
  }>>;
55
56
  }, z.core.$strip>;
57
+ declare function checkoutSessionSchema(productIds: [ProductId, ...ProductId[]]): z.ZodMiniObject<{
58
+ productId: z.ZodMiniEnum<{
59
+ [x: Lowercase<string>]: Lowercase<string>;
60
+ }>;
61
+ cancelUrl: z.ZodMiniOptional<z.ZodMiniURL>;
62
+ successUrl: z.ZodMiniOptional<z.ZodMiniURL>;
63
+ }, z.core.$strip>;
56
64
  interface CancellationDetails extends z.output<typeof cancellationDetailsSchema> {
57
65
  reason?: 'cancellation_requested' | 'payment_disputed' | 'payment_failed';
58
66
  }
59
67
 
60
- export { type CancellationDetails, type Config, METADATA_KEYS, type PriceId, type ProductId, cancellationDetailsSchema, mapCheckoutSession, mapStatus, mapTime };
68
+ export { type CancellationDetails, type CheckoutSession, type Config, METADATA_KEYS, type PriceId, type ProductId, cancellationDetailsSchema, checkoutSessionSchema, mapCheckoutSession, mapStatus, mapTime };
@@ -39,6 +39,7 @@ declare function mapCheckoutSession(session: Stripe.Checkout.Session): {
39
39
  } | null;
40
40
  }[];
41
41
  };
42
+ type CheckoutSession = ReturnType<typeof mapCheckoutSession>;
42
43
  declare function mapStatus(status: Stripe.Subscription.Status): SubscriptionStatus;
43
44
  declare const cancellationDetailsSchema: z.ZodMiniObject<{
44
45
  comment: z.ZodMiniOptional<z.ZodMiniString<string>>;
@@ -53,8 +54,15 @@ declare const cancellationDetailsSchema: z.ZodMiniObject<{
53
54
  other: "other";
54
55
  }>>;
55
56
  }, z.core.$strip>;
57
+ declare function checkoutSessionSchema(productIds: [ProductId, ...ProductId[]]): z.ZodMiniObject<{
58
+ productId: z.ZodMiniEnum<{
59
+ [x: Lowercase<string>]: Lowercase<string>;
60
+ }>;
61
+ cancelUrl: z.ZodMiniOptional<z.ZodMiniURL>;
62
+ successUrl: z.ZodMiniOptional<z.ZodMiniURL>;
63
+ }, z.core.$strip>;
56
64
  interface CancellationDetails extends z.output<typeof cancellationDetailsSchema> {
57
65
  reason?: 'cancellation_requested' | 'payment_disputed' | 'payment_failed';
58
66
  }
59
67
 
60
- export { type CancellationDetails, type Config, METADATA_KEYS, type PriceId, type ProductId, cancellationDetailsSchema, mapCheckoutSession, mapStatus, mapTime };
68
+ export { type CancellationDetails, type CheckoutSession, type Config, METADATA_KEYS, type PriceId, type ProductId, cancellationDetailsSchema, checkoutSessionSchema, mapCheckoutSession, mapStatus, mapTime };
@@ -1,5 +1,5 @@
1
1
  // src/stripe/index.ts
2
- import { maxLength, object, optional, string, enum as _enum } from "zod/v4-mini";
2
+ import { maxLength, object, optional, string, enum as _enum, url } from "zod/v4-mini";
3
3
  import { SubscriptionStatus } from "../subscription/index.mjs";
4
4
  var METADATA_KEYS = {
5
5
  USER_ID: "user_id",
@@ -70,9 +70,17 @@ var cancellationDetailsSchema = object({
70
70
  ])
71
71
  )
72
72
  });
73
+ function checkoutSessionSchema(productIds) {
74
+ return object({
75
+ productId: _enum(productIds),
76
+ cancelUrl: optional(url()),
77
+ successUrl: optional(url())
78
+ });
79
+ }
73
80
  export {
74
81
  METADATA_KEYS,
75
82
  cancellationDetailsSchema,
83
+ checkoutSessionSchema,
76
84
  mapCheckoutSession,
77
85
  mapStatus,
78
86
  mapTime
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/stripe/index.ts"],"sourcesContent":["import type Stripe from 'stripe';\nimport { maxLength, object, optional, string, enum as _enum, type z } from 'zod/v4-mini';\nimport { SubscriptionStatus } from '../subscription/index';\n\nexport const METADATA_KEYS = {\n USER_ID: 'user_id',\n PRODUCT_ID: 'product_id',\n} as const;\n\nexport type ProductId = Lowercase<string>;\nexport type PriceId = `price_${string}`;\n\nexport interface Config {\n returnUrl: string;\n cancelUrl: string;\n successUrl: `${string}?session_id={CHECKOUT_SESSION_ID}`;\n allowPromotionCodes: boolean;\n payments: Record<ProductId, PriceId>;\n subscriptions: Record<ProductId, PriceId>;\n}\n\nexport function mapTime<T extends number | null>(\n stripeTimestampSeconds: T\n): T extends number ? string : null {\n if (!stripeTimestampSeconds) return null as T extends number ? string : null;\n return new Date(stripeTimestampSeconds * 1000).toISOString() as T extends number ? string : null;\n}\n\nexport function mapCheckoutSession(session: Stripe.Checkout.Session) {\n return {\n id: session.id,\n url: session.url,\n livemode: session.livemode,\n expires_at: session.expires_at,\n payment_status: session.payment_status,\n currency: session.currency,\n amount_total: session.amount_total,\n line_items:\n session.line_items?.data.map((item) => ({\n id: item.id,\n currency: item.currency,\n quantity: item.quantity,\n description: item.description,\n amount_tax: item.amount_tax,\n amount_total: item.amount_total,\n amount_subtotal: item.amount_subtotal,\n amount_discount: item.amount_discount,\n price: item.price ? { id: item.price.id } : null,\n })) ?? [],\n };\n}\n\nexport function mapStatus(status: Stripe.Subscription.Status): SubscriptionStatus {\n switch (status) {\n case 'active':\n return SubscriptionStatus.ACTIVE;\n case 'canceled':\n return SubscriptionStatus.CANCELED;\n case 'incomplete':\n return SubscriptionStatus.INCOMPLETE;\n case 'incomplete_expired':\n return SubscriptionStatus.INCOMPLETE_EXPIRED;\n case 'past_due':\n return SubscriptionStatus.PAST_DUE;\n case 'paused':\n return SubscriptionStatus.PAUSED;\n case 'trialing':\n return SubscriptionStatus.TRIALING;\n case 'unpaid':\n return SubscriptionStatus.UNPAID;\n default: {\n console.error(`Invalid stripe status: ${status}`);\n throw new Error(`Invalid stripe status: ${status}`);\n }\n }\n}\n\nexport const cancellationDetailsSchema = object({\n comment: optional(string().check(maxLength(1024))),\n feedback: optional(\n _enum([\n 'customer_service',\n 'low_quality',\n 'missing_features',\n 'switched_service',\n 'too_complex',\n 'too_expensive',\n 'unused',\n 'other',\n ])\n ),\n});\n\nexport interface CancellationDetails extends z.output<typeof cancellationDetailsSchema> {\n reason?: 'cancellation_requested' | 'payment_disputed' | 'payment_failed';\n}\n"],"mappings":";AACA,SAAS,WAAW,QAAQ,UAAU,QAAQ,QAAQ,aAAqB;AAC3E,SAAS,0BAA0B;AAE5B,IAAM,gBAAgB;AAAA,EAC3B,SAAS;AAAA,EACT,YAAY;AACd;AAcO,SAAS,QACd,wBACkC;AAClC,MAAI,CAAC,uBAAwB,QAAO;AACpC,SAAO,IAAI,KAAK,yBAAyB,GAAI,EAAE,YAAY;AAC7D;AAEO,SAAS,mBAAmB,SAAkC;AACnE,SAAO;AAAA,IACL,IAAI,QAAQ;AAAA,IACZ,KAAK,QAAQ;AAAA,IACb,UAAU,QAAQ;AAAA,IAClB,YAAY,QAAQ;AAAA,IACpB,gBAAgB,QAAQ;AAAA,IACxB,UAAU,QAAQ;AAAA,IAClB,cAAc,QAAQ;AAAA,IACtB,YACE,QAAQ,YAAY,KAAK,IAAI,CAAC,UAAU;AAAA,MACtC,IAAI,KAAK;AAAA,MACT,UAAU,KAAK;AAAA,MACf,UAAU,KAAK;AAAA,MACf,aAAa,KAAK;AAAA,MAClB,YAAY,KAAK;AAAA,MACjB,cAAc,KAAK;AAAA,MACnB,iBAAiB,KAAK;AAAA,MACtB,iBAAiB,KAAK;AAAA,MACtB,OAAO,KAAK,QAAQ,EAAE,IAAI,KAAK,MAAM,GAAG,IAAI;AAAA,IAC9C,EAAE,KAAK,CAAC;AAAA,EACZ;AACF;AAEO,SAAS,UAAU,QAAwD;AAChF,UAAQ,QAAQ;AAAA,IACd,KAAK;AACH,aAAO,mBAAmB;AAAA,IAC5B,KAAK;AACH,aAAO,mBAAmB;AAAA,IAC5B,KAAK;AACH,aAAO,mBAAmB;AAAA,IAC5B,KAAK;AACH,aAAO,mBAAmB;AAAA,IAC5B,KAAK;AACH,aAAO,mBAAmB;AAAA,IAC5B,KAAK;AACH,aAAO,mBAAmB;AAAA,IAC5B,KAAK;AACH,aAAO,mBAAmB;AAAA,IAC5B,KAAK;AACH,aAAO,mBAAmB;AAAA,IAC5B,SAAS;AACP,cAAQ,MAAM,0BAA0B,MAAM,EAAE;AAChD,YAAM,IAAI,MAAM,0BAA0B,MAAM,EAAE;AAAA,IACpD;AAAA,EACF;AACF;AAEO,IAAM,4BAA4B,OAAO;AAAA,EAC9C,SAAS,SAAS,OAAO,EAAE,MAAM,UAAU,IAAI,CAAC,CAAC;AAAA,EACjD,UAAU;AAAA,IACR,MAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AACF,CAAC;","names":[]}
1
+ {"version":3,"sources":["../../src/stripe/index.ts"],"sourcesContent":["import type Stripe from 'stripe';\nimport { maxLength, object, optional, string, enum as _enum, type z, url } from 'zod/v4-mini';\nimport { SubscriptionStatus } from '../subscription/index';\n\nexport const METADATA_KEYS = {\n USER_ID: 'user_id',\n PRODUCT_ID: 'product_id',\n} as const;\n\nexport type ProductId = Lowercase<string>;\nexport type PriceId = `price_${string}`;\n\nexport interface Config {\n returnUrl: string;\n cancelUrl: string;\n successUrl: `${string}?session_id={CHECKOUT_SESSION_ID}`;\n allowPromotionCodes: boolean;\n payments: Record<ProductId, PriceId>;\n subscriptions: Record<ProductId, PriceId>;\n}\n\nexport function mapTime<T extends number | null>(\n stripeTimestampSeconds: T\n): T extends number ? string : null {\n if (!stripeTimestampSeconds) return null as T extends number ? string : null;\n return new Date(stripeTimestampSeconds * 1000).toISOString() as T extends number ? string : null;\n}\n\nexport function mapCheckoutSession(session: Stripe.Checkout.Session) {\n return {\n id: session.id,\n url: session.url,\n livemode: session.livemode,\n expires_at: session.expires_at,\n payment_status: session.payment_status,\n currency: session.currency,\n amount_total: session.amount_total,\n line_items:\n session.line_items?.data.map((item) => ({\n id: item.id,\n currency: item.currency,\n quantity: item.quantity,\n description: item.description,\n amount_tax: item.amount_tax,\n amount_total: item.amount_total,\n amount_subtotal: item.amount_subtotal,\n amount_discount: item.amount_discount,\n price: item.price ? { id: item.price.id } : null,\n })) ?? [],\n };\n}\n\nexport type CheckoutSession = ReturnType<typeof mapCheckoutSession>;\n\nexport function mapStatus(status: Stripe.Subscription.Status): SubscriptionStatus {\n switch (status) {\n case 'active':\n return SubscriptionStatus.ACTIVE;\n case 'canceled':\n return SubscriptionStatus.CANCELED;\n case 'incomplete':\n return SubscriptionStatus.INCOMPLETE;\n case 'incomplete_expired':\n return SubscriptionStatus.INCOMPLETE_EXPIRED;\n case 'past_due':\n return SubscriptionStatus.PAST_DUE;\n case 'paused':\n return SubscriptionStatus.PAUSED;\n case 'trialing':\n return SubscriptionStatus.TRIALING;\n case 'unpaid':\n return SubscriptionStatus.UNPAID;\n default: {\n console.error(`Invalid stripe status: ${status}`);\n throw new Error(`Invalid stripe status: ${status}`);\n }\n }\n}\n\nexport const cancellationDetailsSchema = object({\n comment: optional(string().check(maxLength(1024))),\n feedback: optional(\n _enum([\n 'customer_service',\n 'low_quality',\n 'missing_features',\n 'switched_service',\n 'too_complex',\n 'too_expensive',\n 'unused',\n 'other',\n ])\n ),\n});\n\nexport function checkoutSessionSchema(productIds: [ProductId, ...ProductId[]]) {\n return object({\n productId: _enum(productIds),\n cancelUrl: optional(url()),\n successUrl: optional(url()),\n });\n}\n\nexport interface CancellationDetails extends z.output<typeof cancellationDetailsSchema> {\n reason?: 'cancellation_requested' | 'payment_disputed' | 'payment_failed';\n}\n"],"mappings":";AACA,SAAS,WAAW,QAAQ,UAAU,QAAQ,QAAQ,OAAe,WAAW;AAChF,SAAS,0BAA0B;AAE5B,IAAM,gBAAgB;AAAA,EAC3B,SAAS;AAAA,EACT,YAAY;AACd;AAcO,SAAS,QACd,wBACkC;AAClC,MAAI,CAAC,uBAAwB,QAAO;AACpC,SAAO,IAAI,KAAK,yBAAyB,GAAI,EAAE,YAAY;AAC7D;AAEO,SAAS,mBAAmB,SAAkC;AACnE,SAAO;AAAA,IACL,IAAI,QAAQ;AAAA,IACZ,KAAK,QAAQ;AAAA,IACb,UAAU,QAAQ;AAAA,IAClB,YAAY,QAAQ;AAAA,IACpB,gBAAgB,QAAQ;AAAA,IACxB,UAAU,QAAQ;AAAA,IAClB,cAAc,QAAQ;AAAA,IACtB,YACE,QAAQ,YAAY,KAAK,IAAI,CAAC,UAAU;AAAA,MACtC,IAAI,KAAK;AAAA,MACT,UAAU,KAAK;AAAA,MACf,UAAU,KAAK;AAAA,MACf,aAAa,KAAK;AAAA,MAClB,YAAY,KAAK;AAAA,MACjB,cAAc,KAAK;AAAA,MACnB,iBAAiB,KAAK;AAAA,MACtB,iBAAiB,KAAK;AAAA,MACtB,OAAO,KAAK,QAAQ,EAAE,IAAI,KAAK,MAAM,GAAG,IAAI;AAAA,IAC9C,EAAE,KAAK,CAAC;AAAA,EACZ;AACF;AAIO,SAAS,UAAU,QAAwD;AAChF,UAAQ,QAAQ;AAAA,IACd,KAAK;AACH,aAAO,mBAAmB;AAAA,IAC5B,KAAK;AACH,aAAO,mBAAmB;AAAA,IAC5B,KAAK;AACH,aAAO,mBAAmB;AAAA,IAC5B,KAAK;AACH,aAAO,mBAAmB;AAAA,IAC5B,KAAK;AACH,aAAO,mBAAmB;AAAA,IAC5B,KAAK;AACH,aAAO,mBAAmB;AAAA,IAC5B,KAAK;AACH,aAAO,mBAAmB;AAAA,IAC5B,KAAK;AACH,aAAO,mBAAmB;AAAA,IAC5B,SAAS;AACP,cAAQ,MAAM,0BAA0B,MAAM,EAAE;AAChD,YAAM,IAAI,MAAM,0BAA0B,MAAM,EAAE;AAAA,IACpD;AAAA,EACF;AACF;AAEO,IAAM,4BAA4B,OAAO;AAAA,EAC9C,SAAS,SAAS,OAAO,EAAE,MAAM,UAAU,IAAI,CAAC,CAAC;AAAA,EACjD,UAAU;AAAA,IACR,MAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AACF,CAAC;AAEM,SAAS,sBAAsB,YAAyC;AAC7E,SAAO,OAAO;AAAA,IACZ,WAAW,MAAM,UAAU;AAAA,IAC3B,WAAW,SAAS,IAAI,CAAC;AAAA,IACzB,YAAY,SAAS,IAAI,CAAC;AAAA,EAC5B,CAAC;AACH;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shware/purchase",
3
- "version": "0.0.3",
3
+ "version": "0.0.4",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "scripts": {