alchemy 0.24.0 → 0.24.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.
Files changed (163) hide show
  1. package/lib/aws/function.d.ts.map +1 -1
  2. package/lib/aws/function.js +1 -4
  3. package/lib/aws/function.js.map +1 -1
  4. package/lib/cloudflare/bindings.d.ts +3 -3
  5. package/lib/cloudflare/bindings.d.ts.map +1 -1
  6. package/lib/cloudflare/bindings.js.map +1 -1
  7. package/lib/cloudflare/bound.d.ts +3 -3
  8. package/lib/cloudflare/bound.d.ts.map +1 -1
  9. package/lib/cloudflare/do-state-store/index.d.ts +2 -0
  10. package/lib/cloudflare/do-state-store/index.d.ts.map +1 -0
  11. package/lib/cloudflare/do-state-store/index.js +2 -0
  12. package/lib/cloudflare/do-state-store/index.js.map +1 -0
  13. package/lib/cloudflare/do-state-store/internal.d.ts +19 -0
  14. package/lib/cloudflare/do-state-store/internal.d.ts.map +1 -0
  15. package/lib/cloudflare/do-state-store/internal.js +163 -0
  16. package/lib/cloudflare/do-state-store/internal.js.map +1 -0
  17. package/lib/cloudflare/do-state-store/store.d.ts +59 -0
  18. package/lib/cloudflare/do-state-store/store.d.ts.map +1 -0
  19. package/lib/cloudflare/do-state-store/store.js +120 -0
  20. package/lib/cloudflare/do-state-store/store.js.map +1 -0
  21. package/lib/cloudflare/do-state-store/types.d.ts +82 -0
  22. package/lib/cloudflare/do-state-store/types.d.ts.map +1 -0
  23. package/lib/cloudflare/do-state-store/types.js +1 -0
  24. package/lib/cloudflare/do-state-store/types.js.map +1 -0
  25. package/lib/cloudflare/do-state-store/worker.d.ts +27 -0
  26. package/lib/cloudflare/do-state-store/worker.d.ts.map +1 -0
  27. package/lib/cloudflare/do-state-store/worker.js +170 -0
  28. package/lib/cloudflare/do-state-store/worker.js.map +1 -0
  29. package/lib/cloudflare/index.d.ts +1 -0
  30. package/lib/cloudflare/index.d.ts.map +1 -1
  31. package/lib/cloudflare/index.js +1 -0
  32. package/lib/cloudflare/index.js.map +1 -1
  33. package/lib/cloudflare/pipeline.js +1 -1
  34. package/lib/cloudflare/pipeline.js.map +1 -1
  35. package/lib/cloudflare/queue-consumer.d.ts +14 -1
  36. package/lib/cloudflare/queue-consumer.d.ts.map +1 -1
  37. package/lib/cloudflare/queue-consumer.js +17 -0
  38. package/lib/cloudflare/queue-consumer.js.map +1 -1
  39. package/lib/cloudflare/website.d.ts +30 -1
  40. package/lib/cloudflare/website.d.ts.map +1 -1
  41. package/lib/cloudflare/website.js +8 -5
  42. package/lib/cloudflare/website.js.map +1 -1
  43. package/lib/cloudflare/worker-metadata.js +1 -1
  44. package/lib/cloudflare/worker-metadata.js.map +1 -1
  45. package/lib/cloudflare/worker.d.ts +40 -1
  46. package/lib/cloudflare/worker.d.ts.map +1 -1
  47. package/lib/cloudflare/worker.js +40 -38
  48. package/lib/cloudflare/worker.js.map +1 -1
  49. package/lib/cloudflare/wrangler.json.js +1 -1
  50. package/lib/cloudflare/wrangler.json.js.map +1 -1
  51. package/lib/fs/file-system-state-store.d.ts +3 -1
  52. package/lib/fs/file-system-state-store.d.ts.map +1 -1
  53. package/lib/fs/file-system-state-store.js +2 -2
  54. package/lib/fs/file-system-state-store.js.map +1 -1
  55. package/lib/stripe/card.d.ts +171 -0
  56. package/lib/stripe/card.d.ts.map +1 -0
  57. package/lib/stripe/card.js +148 -0
  58. package/lib/stripe/card.js.map +1 -0
  59. package/lib/stripe/client.d.ts +9 -0
  60. package/lib/stripe/client.d.ts.map +1 -0
  61. package/lib/stripe/client.js +94 -0
  62. package/lib/stripe/client.js.map +1 -0
  63. package/lib/stripe/coupon.d.ts +135 -0
  64. package/lib/stripe/coupon.d.ts.map +1 -0
  65. package/lib/stripe/coupon.js +161 -0
  66. package/lib/stripe/coupon.js.map +1 -0
  67. package/lib/stripe/customer.d.ts +269 -0
  68. package/lib/stripe/customer.d.ts.map +1 -0
  69. package/lib/stripe/customer.js +289 -0
  70. package/lib/stripe/customer.js.map +1 -0
  71. package/lib/stripe/entitlements-feature.d.ts +84 -0
  72. package/lib/stripe/entitlements-feature.d.ts.map +1 -0
  73. package/lib/stripe/entitlements-feature.js +102 -0
  74. package/lib/stripe/entitlements-feature.js.map +1 -0
  75. package/lib/stripe/file.d.ts +143 -0
  76. package/lib/stripe/file.d.ts.map +1 -0
  77. package/lib/stripe/file.js +97 -0
  78. package/lib/stripe/file.js.map +1 -0
  79. package/lib/stripe/index.d.ts +11 -0
  80. package/lib/stripe/index.d.ts.map +1 -1
  81. package/lib/stripe/index.js +11 -0
  82. package/lib/stripe/index.js.map +1 -1
  83. package/lib/stripe/meter.d.ts +10 -1
  84. package/lib/stripe/meter.d.ts.map +1 -1
  85. package/lib/stripe/meter.js +13 -7
  86. package/lib/stripe/meter.js.map +1 -1
  87. package/lib/stripe/portal-configuration.d.ts +286 -0
  88. package/lib/stripe/portal-configuration.d.ts.map +1 -0
  89. package/lib/stripe/portal-configuration.js +320 -0
  90. package/lib/stripe/portal-configuration.js.map +1 -0
  91. package/lib/stripe/price.d.ts +10 -1
  92. package/lib/stripe/price.d.ts.map +1 -1
  93. package/lib/stripe/price.js +34 -13
  94. package/lib/stripe/price.js.map +1 -1
  95. package/lib/stripe/product-feature.d.ts +76 -0
  96. package/lib/stripe/product-feature.d.ts.map +1 -0
  97. package/lib/stripe/product-feature.js +74 -0
  98. package/lib/stripe/product-feature.js.map +1 -0
  99. package/lib/stripe/product.d.ts +10 -1
  100. package/lib/stripe/product.d.ts.map +1 -1
  101. package/lib/stripe/product.js +33 -14
  102. package/lib/stripe/product.js.map +1 -1
  103. package/lib/stripe/promotion-code.d.ts +138 -0
  104. package/lib/stripe/promotion-code.d.ts.map +1 -0
  105. package/lib/stripe/promotion-code.js +150 -0
  106. package/lib/stripe/promotion-code.js.map +1 -0
  107. package/lib/stripe/shipping-rate.d.ts +188 -0
  108. package/lib/stripe/shipping-rate.d.ts.map +1 -0
  109. package/lib/stripe/shipping-rate.js +198 -0
  110. package/lib/stripe/shipping-rate.js.map +1 -0
  111. package/lib/stripe/tax-rate.d.ts +130 -0
  112. package/lib/stripe/tax-rate.d.ts.map +1 -0
  113. package/lib/stripe/tax-rate.js +126 -0
  114. package/lib/stripe/tax-rate.js.map +1 -0
  115. package/lib/stripe/webhook.d.ts +10 -1
  116. package/lib/stripe/webhook.d.ts.map +1 -1
  117. package/lib/stripe/webhook.js +59 -14
  118. package/lib/stripe/webhook.js.map +1 -1
  119. package/lib/test/bun.d.ts.map +1 -1
  120. package/lib/test/bun.js +2 -6
  121. package/lib/test/bun.js.map +1 -1
  122. package/lib/test/vitest.d.ts.map +1 -1
  123. package/lib/test/vitest.js +3 -7
  124. package/lib/test/vitest.js.map +1 -1
  125. package/lib/util/retry.d.ts +1 -1
  126. package/lib/util/retry.d.ts.map +1 -1
  127. package/lib/util/retry.js.map +1 -1
  128. package/package.json +2 -1
  129. package/src/aws/function.ts +3 -6
  130. package/src/cloudflare/bindings.ts +3 -2
  131. package/src/cloudflare/bound.ts +3 -3
  132. package/src/cloudflare/do-state-store/index.ts +1 -0
  133. package/src/cloudflare/do-state-store/internal.ts +215 -0
  134. package/src/cloudflare/do-state-store/store.ts +188 -0
  135. package/src/cloudflare/do-state-store/types.ts +74 -0
  136. package/src/cloudflare/do-state-store/worker.ts +199 -0
  137. package/src/cloudflare/index.ts +1 -0
  138. package/src/cloudflare/pipeline.ts +1 -1
  139. package/src/cloudflare/queue-consumer.ts +59 -1
  140. package/src/cloudflare/website.ts +38 -6
  141. package/src/cloudflare/worker-metadata.ts +1 -1
  142. package/src/cloudflare/worker.ts +66 -46
  143. package/src/cloudflare/wrangler.json.ts +1 -1
  144. package/src/fs/file-system-state-store.ts +7 -2
  145. package/src/stripe/card.ts +320 -0
  146. package/src/stripe/client.ts +145 -0
  147. package/src/stripe/coupon.ts +280 -0
  148. package/src/stripe/customer.ts +528 -0
  149. package/src/stripe/entitlements-feature.ts +169 -0
  150. package/src/stripe/file.ts +219 -0
  151. package/src/stripe/index.ts +11 -0
  152. package/src/stripe/meter.ts +23 -7
  153. package/src/stripe/portal-configuration.ts +609 -0
  154. package/src/stripe/price.ts +47 -14
  155. package/src/stripe/product-feature.ts +150 -0
  156. package/src/stripe/product.ts +48 -15
  157. package/src/stripe/promotion-code.ts +268 -0
  158. package/src/stripe/shipping-rate.ts +362 -0
  159. package/src/stripe/tax-rate.ts +218 -0
  160. package/src/stripe/webhook.ts +82 -15
  161. package/src/test/bun.ts +2 -7
  162. package/src/test/vitest.ts +3 -8
  163. package/src/util/retry.ts +1 -1
@@ -0,0 +1,148 @@
1
+ import { Resource } from "../resource.js";
2
+ import { createStripeClient, handleStripeDeleteError, isStripeConflictError, } from "./client.js";
3
+ /**
4
+ * Create and manage Stripe cards attached to customers
5
+ *
6
+ * @example
7
+ * // Create a card using raw card details
8
+ * const customerCard = await Card("customer-card", {
9
+ * customer: "cus_xyz123",
10
+ * number: "4242424242424242",
11
+ * expMonth: 12,
12
+ * expYear: 2025,
13
+ * cvc: "123",
14
+ * name: "John Doe",
15
+ * addressLine1: "123 Main St",
16
+ * addressCity: "San Francisco",
17
+ * addressState: "CA",
18
+ * addressZip: "94105",
19
+ * addressCountry: "US"
20
+ * });
21
+ *
22
+ * @example
23
+ * // Create a card using a token
24
+ * const tokenCard = await Card("token-card", {
25
+ * customer: "cus_xyz123",
26
+ * source: "tok_visa",
27
+ * metadata: {
28
+ * type: "primary",
29
+ * source: "mobile_app"
30
+ * }
31
+ * });
32
+ *
33
+ * @example
34
+ * // Create a card for international customer
35
+ * const internationalCard = await Card("international-card", {
36
+ * customer: "cus_international456",
37
+ * number: "4000000000000002",
38
+ * expMonth: 6,
39
+ * expYear: 2026,
40
+ * name: "Maria Garcia",
41
+ * addressLine1: "Calle Principal 123",
42
+ * addressCity: "Madrid",
43
+ * addressCountry: "ES",
44
+ * addressZip: "28001",
45
+ * metadata: {
46
+ * region: "europe",
47
+ * currency_preference: "eur"
48
+ * }
49
+ * });
50
+ */
51
+ export const Card = Resource("stripe::Card", async function (_id, props) {
52
+ const stripe = createStripeClient({ apiKey: props.apiKey });
53
+ if (this.phase === "delete") {
54
+ try {
55
+ if (this.output?.id && this.output?.customer) {
56
+ await stripe.customers.deleteSource(this.output.customer, this.output.id);
57
+ }
58
+ }
59
+ catch (error) {
60
+ handleStripeDeleteError(error, "Card", this.output?.id);
61
+ }
62
+ return this.destroy();
63
+ }
64
+ try {
65
+ let card;
66
+ if (this.phase === "update" && this.output?.id) {
67
+ const updateParams = {
68
+ name: props.name,
69
+ address_city: props.addressCity,
70
+ address_country: props.addressCountry,
71
+ address_line1: props.addressLine1,
72
+ address_line2: props.addressLine2,
73
+ address_state: props.addressState,
74
+ address_zip: props.addressZip,
75
+ exp_month: props.expMonth?.toString(),
76
+ exp_year: props.expYear?.toString(),
77
+ metadata: props.metadata,
78
+ };
79
+ card = (await stripe.customers.updateSource(props.customer, this.output.id, updateParams));
80
+ }
81
+ else {
82
+ const createParams = {
83
+ metadata: props.metadata,
84
+ };
85
+ if (props.source) {
86
+ createParams.source = props.source;
87
+ }
88
+ else if (props.number) {
89
+ createParams.source = {
90
+ object: "card",
91
+ number: props.number,
92
+ exp_month: props.expMonth,
93
+ exp_year: props.expYear,
94
+ cvc: props.cvc,
95
+ name: props.name,
96
+ address_city: props.addressCity,
97
+ address_country: props.addressCountry,
98
+ address_line1: props.addressLine1,
99
+ address_line2: props.addressLine2,
100
+ address_state: props.addressState,
101
+ address_zip: props.addressZip,
102
+ currency: props.currency,
103
+ default_for_currency: props.defaultForCurrency,
104
+ };
105
+ }
106
+ try {
107
+ card = (await stripe.customers.createSource(props.customer, createParams));
108
+ }
109
+ catch (error) {
110
+ if (isStripeConflictError(error) && props.adopt) {
111
+ throw new Error("Card adoption is not supported - cards cannot be uniquely identified for adoption");
112
+ }
113
+ else {
114
+ throw error;
115
+ }
116
+ }
117
+ }
118
+ return this({
119
+ id: card.id,
120
+ object: card.object,
121
+ customer: props.customer,
122
+ brand: card.brand,
123
+ country: card.country || undefined,
124
+ dynamicLast4: card.dynamic_last4 || undefined,
125
+ expMonth: card.exp_month,
126
+ expYear: card.exp_year,
127
+ fingerprint: card.fingerprint || undefined,
128
+ funding: card.funding,
129
+ last4: card.last4,
130
+ name: card.name || undefined,
131
+ addressCity: card.address_city || undefined,
132
+ addressCountry: card.address_country || undefined,
133
+ addressLine1: card.address_line1 || undefined,
134
+ addressLine2: card.address_line2 || undefined,
135
+ addressState: card.address_state || undefined,
136
+ addressZip: card.address_zip || undefined,
137
+ currency: card.currency || undefined,
138
+ defaultForCurrency: card.default_for_currency || undefined,
139
+ metadata: card.metadata || undefined,
140
+ tokenizationMethod: card.tokenization_method || undefined,
141
+ });
142
+ }
143
+ catch (error) {
144
+ console.error("Error creating/updating card:", error);
145
+ throw error;
146
+ }
147
+ });
148
+ //# sourceMappingURL=card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card.js","sourceRoot":"","sources":["../../src/stripe/card.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import Stripe from "stripe";
2
+ import type { Secret } from "../secret.ts";
3
+ export interface StripeClientOptions {
4
+ apiKey?: Secret | string;
5
+ }
6
+ export declare function createStripeClient(options?: StripeClientOptions): Stripe;
7
+ export declare function handleStripeDeleteError(error: any, resourceType: string, resourceId?: string): void;
8
+ export declare function isStripeConflictError(error: any): boolean;
9
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/stripe/client.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAG3C,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC1B;AAED,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,mBAAwB,GAAG,MAAM,CAoB5E;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,GAAG,EACV,YAAY,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,MAAM,GAClB,IAAI,CAaN;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAEzD"}
@@ -0,0 +1,94 @@
1
+ import Stripe from "stripe";
2
+ import { withExponentialBackoff } from "../util/retry.js";
3
+ export function createStripeClient(options = {}) {
4
+ let apiKey;
5
+ if (options.apiKey) {
6
+ apiKey =
7
+ typeof options.apiKey === "string"
8
+ ? options.apiKey
9
+ : options.apiKey.unencrypted;
10
+ }
11
+ else {
12
+ const envApiKey = process.env.STRIPE_API_KEY;
13
+ if (!envApiKey) {
14
+ throw new Error("Stripe API key is required. Provide it via the apiKey parameter or set the STRIPE_API_KEY environment variable.");
15
+ }
16
+ apiKey = envApiKey;
17
+ }
18
+ const stripe = new Stripe(apiKey);
19
+ return createStripeProxy(stripe);
20
+ }
21
+ export function handleStripeDeleteError(error, resourceType, resourceId) {
22
+ if (error?.code === "resource_missing" || error?.status === 404) {
23
+ console.log(`${resourceType} ${resourceId || "unknown"} not found during deletion (already deleted)`);
24
+ return;
25
+ }
26
+ console.error(`Error deleting ${resourceType} ${resourceId || "unknown"}:`, error);
27
+ throw error;
28
+ }
29
+ export function isStripeConflictError(error) {
30
+ return error?.status === 409 || error?.statusCode === 409;
31
+ }
32
+ /**
33
+ * Creates a proxy that wraps Stripe API calls with retry logic
34
+ */
35
+ function createStripeProxy(stripe) {
36
+ // Cache for proxied resources to avoid creating new proxies for the same resource
37
+ const resourceProxyCache = new Map();
38
+ return new Proxy(stripe, {
39
+ get(target, prop, receiver) {
40
+ const value = Reflect.get(target, prop, receiver);
41
+ // If it's not a property we want to proxy, return as-is
42
+ if (typeof prop !== "string" ||
43
+ typeof value !== "object" ||
44
+ value === null) {
45
+ return value;
46
+ }
47
+ // Check if this looks like a Stripe resource (has methods like create, retrieve, etc.)
48
+ const hasStripeResourceMethods = value &&
49
+ typeof value === "object" &&
50
+ (typeof value.create === "function" ||
51
+ typeof value.retrieve === "function" ||
52
+ typeof value.list === "function" ||
53
+ typeof value.update === "function" ||
54
+ typeof value.del === "function");
55
+ if (!hasStripeResourceMethods) {
56
+ return value;
57
+ }
58
+ // Return cached proxy if it exists
59
+ if (resourceProxyCache.has(prop)) {
60
+ return resourceProxyCache.get(prop);
61
+ }
62
+ // Create a new proxy for this resource
63
+ const resourceProxy = new Proxy(value, {
64
+ get(resourceTarget, methodName, resourceReceiver) {
65
+ const method = Reflect.get(resourceTarget, methodName, resourceReceiver);
66
+ // If it's not a function, return as-is
67
+ if (typeof method !== "function") {
68
+ return method;
69
+ }
70
+ // Wrap the method with retry logic
71
+ return (...args) => withStripeRetry(() => method.apply(resourceTarget, args));
72
+ },
73
+ });
74
+ // Cache the proxy
75
+ resourceProxyCache.set(prop, resourceProxy);
76
+ return resourceProxy;
77
+ },
78
+ });
79
+ }
80
+ /**
81
+ * Determines if a Stripe error should trigger a retry
82
+ */
83
+ function isStripeRetryableError(error) {
84
+ return (error?.raw?.statusCode === 429 ||
85
+ error?.code === "rate_limit" ||
86
+ error?.type === "rate_limit_error");
87
+ }
88
+ /**
89
+ * Wraps a Stripe API operation with retry logic for rate limiting
90
+ */
91
+ async function withStripeRetry(operation, maxAttempts = 5, initialDelayMs = 1000) {
92
+ return withExponentialBackoff(operation, isStripeRetryableError, maxAttempts, initialDelayMs);
93
+ }
94
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/stripe/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,135 @@
1
+ import type Stripe from "stripe";
2
+ import type { Context } from "../context.ts";
3
+ import { Resource } from "../resource.ts";
4
+ import type { Secret } from "../secret.ts";
5
+ type CouponDuration = Stripe.CouponCreateParams.Duration;
6
+ /**
7
+ * Properties for creating a Stripe coupon
8
+ */
9
+ export interface CouponProps {
10
+ /**
11
+ * Unique string of your choice that will be used to identify this coupon when applying it to a customer
12
+ */
13
+ id?: string;
14
+ /**
15
+ * Specifies how long the discount will be in effect
16
+ */
17
+ duration: CouponDuration;
18
+ /**
19
+ * A positive integer representing the amount to subtract from an invoice total (required if percent_off is not passed)
20
+ */
21
+ amountOff?: number;
22
+ /**
23
+ * Three-letter ISO code for the currency of the amount_off parameter (required if amount_off is passed)
24
+ */
25
+ currency?: string;
26
+ /**
27
+ * Required only if duration is repeating, in which case it must be a positive integer that specifies the number of months the discount will be in effect
28
+ */
29
+ durationInMonths?: number;
30
+ /**
31
+ * A positive integer specifying the number of times the coupon can be redeemed before it's no longer valid
32
+ */
33
+ maxRedemptions?: number;
34
+ /**
35
+ * Name of the coupon displayed to customers on, for instance invoices, or receipts
36
+ */
37
+ name?: string;
38
+ /**
39
+ * A positive float larger than 0, and smaller or equal to 100, that represents the discount the coupon will apply (required if amount_off is not passed)
40
+ */
41
+ percentOff?: number;
42
+ /**
43
+ * Unix timestamp specifying the last time at which the coupon can be redeemed
44
+ */
45
+ redeemBy?: number;
46
+ /**
47
+ * Number of times this coupon has been applied to a customer
48
+ */
49
+ timesRedeemed?: number;
50
+ /**
51
+ * Taking account of the above properties, whether this coupon can still be applied to a customer
52
+ */
53
+ valid?: boolean;
54
+ /**
55
+ * Set of key-value pairs that you can attach to an object
56
+ */
57
+ metadata?: Record<string, string>;
58
+ /**
59
+ * API key to use (overrides environment variable)
60
+ */
61
+ apiKey?: Secret;
62
+ /**
63
+ * If true, adopt existing resource if creation fails due to conflict
64
+ */
65
+ adopt?: boolean;
66
+ }
67
+ /**
68
+ * Output from the Stripe coupon
69
+ */
70
+ export interface Coupon extends Resource<"stripe::Coupon">, CouponProps {
71
+ /**
72
+ * The ID of the coupon
73
+ */
74
+ id: string;
75
+ /**
76
+ * String representing the object's type
77
+ */
78
+ object: "coupon";
79
+ /**
80
+ * Time at which the object was created
81
+ */
82
+ created: number;
83
+ /**
84
+ * Has the value true if the object exists in live mode or the value false if the object exists in test mode
85
+ */
86
+ livemode: boolean;
87
+ }
88
+ /**
89
+ * Create and manage Stripe coupons for discounts
90
+ *
91
+ * @example
92
+ * // Create a percentage-based coupon
93
+ * const percentageCoupon = await Coupon("summer-sale", {
94
+ * id: "SUMMER25",
95
+ * duration: "once",
96
+ * percentOff: 25,
97
+ * name: "Summer Sale 25% Off",
98
+ * maxRedemptions: 1000,
99
+ * metadata: {
100
+ * campaign: "summer_2024",
101
+ * type: "seasonal"
102
+ * }
103
+ * });
104
+ *
105
+ * @example
106
+ * // Create a fixed amount coupon
107
+ * const fixedAmountCoupon = await Coupon("new-customer", {
108
+ * id: "WELCOME10",
109
+ * duration: "once",
110
+ * amountOff: 1000,
111
+ * currency: "usd",
112
+ * name: "Welcome $10 Off",
113
+ * metadata: {
114
+ * type: "welcome",
115
+ * target: "new_customers"
116
+ * }
117
+ * });
118
+ *
119
+ * @example
120
+ * // Create a repeating coupon for subscriptions
121
+ * const subscriptionCoupon = await Coupon("loyal-customer", {
122
+ * id: "LOYAL15",
123
+ * duration: "repeating",
124
+ * durationInMonths: 6,
125
+ * percentOff: 15,
126
+ * name: "Loyal Customer 15% Off",
127
+ * metadata: {
128
+ * type: "loyalty",
129
+ * tier: "premium"
130
+ * }
131
+ * });
132
+ */
133
+ export declare const Coupon: (((this: any, id: string, props?: {}) => never) & (new (_: never) => never)) | ((this: Context<Coupon>, _id: string, props: CouponProps) => Promise<Coupon>);
134
+ export {};
135
+ //# sourceMappingURL=coupon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coupon.d.ts","sourceRoot":"","sources":["../../src/stripe/coupon.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAO3C,KAAK,cAAc,GAAG,MAAM,CAAC,kBAAkB,CAAC,QAAQ,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,QAAQ,EAAE,cAAc,CAAC;IAEzB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAElC;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,MAAO,SAAQ,QAAQ,CAAC,gBAAgB,CAAC,EAAE,WAAW;IACrE;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,MAAM,EAAE,QAAQ,CAAC;IAEjB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,eAAO,MAAM,MAAM,yFAGT,OAAO,CAAC,MAAM,CAAC,OAChB,MAAM,SACJ,WAAW,KACjB,OAAO,CAAC,MAAM,CAAC,CAoHnB,CAAC"}
@@ -0,0 +1,161 @@
1
+ import { Resource } from "../resource.js";
2
+ import { createStripeClient, handleStripeDeleteError, isStripeConflictError, } from "./client.js";
3
+ /**
4
+ * Create and manage Stripe coupons for discounts
5
+ *
6
+ * @example
7
+ * // Create a percentage-based coupon
8
+ * const percentageCoupon = await Coupon("summer-sale", {
9
+ * id: "SUMMER25",
10
+ * duration: "once",
11
+ * percentOff: 25,
12
+ * name: "Summer Sale 25% Off",
13
+ * maxRedemptions: 1000,
14
+ * metadata: {
15
+ * campaign: "summer_2024",
16
+ * type: "seasonal"
17
+ * }
18
+ * });
19
+ *
20
+ * @example
21
+ * // Create a fixed amount coupon
22
+ * const fixedAmountCoupon = await Coupon("new-customer", {
23
+ * id: "WELCOME10",
24
+ * duration: "once",
25
+ * amountOff: 1000,
26
+ * currency: "usd",
27
+ * name: "Welcome $10 Off",
28
+ * metadata: {
29
+ * type: "welcome",
30
+ * target: "new_customers"
31
+ * }
32
+ * });
33
+ *
34
+ * @example
35
+ * // Create a repeating coupon for subscriptions
36
+ * const subscriptionCoupon = await Coupon("loyal-customer", {
37
+ * id: "LOYAL15",
38
+ * duration: "repeating",
39
+ * durationInMonths: 6,
40
+ * percentOff: 15,
41
+ * name: "Loyal Customer 15% Off",
42
+ * metadata: {
43
+ * type: "loyalty",
44
+ * tier: "premium"
45
+ * }
46
+ * });
47
+ */
48
+ export const Coupon = Resource("stripe::Coupon", async function (_id, props) {
49
+ const stripe = createStripeClient({ apiKey: props.apiKey });
50
+ if (this.phase === "delete") {
51
+ try {
52
+ if (this.output?.id) {
53
+ await stripe.coupons.del(this.output.id);
54
+ }
55
+ }
56
+ catch (error) {
57
+ handleStripeDeleteError(error, "Coupon", this.output?.id);
58
+ }
59
+ return this.destroy();
60
+ }
61
+ try {
62
+ let coupon;
63
+ if (this.phase === "update" && this.output?.id) {
64
+ coupon = await stripe.coupons.update(this.output.id, {
65
+ name: props.name,
66
+ metadata: props.metadata,
67
+ });
68
+ }
69
+ else {
70
+ const createParams = {
71
+ duration: props.duration,
72
+ name: props.name,
73
+ metadata: props.metadata,
74
+ };
75
+ if (props.id) {
76
+ createParams.id = props.id;
77
+ }
78
+ if (props.amountOff !== undefined) {
79
+ createParams.amount_off = props.amountOff;
80
+ }
81
+ if (props.currency) {
82
+ createParams.currency = props.currency;
83
+ }
84
+ if (props.durationInMonths !== undefined) {
85
+ createParams.duration_in_months = props.durationInMonths;
86
+ }
87
+ if (props.maxRedemptions !== undefined) {
88
+ createParams.max_redemptions = props.maxRedemptions;
89
+ }
90
+ if (props.percentOff !== undefined) {
91
+ createParams.percent_off = props.percentOff;
92
+ }
93
+ if (props.redeemBy !== undefined) {
94
+ createParams.redeem_by = props.redeemBy;
95
+ }
96
+ try {
97
+ try {
98
+ coupon = await stripe.coupons.create(createParams);
99
+ }
100
+ catch (error) {
101
+ if (isStripeConflictError(error) && props.adopt) {
102
+ if (props.id) {
103
+ const existingCoupon = await stripe.coupons.retrieve(props.id);
104
+ const updateParams = {
105
+ metadata: props.metadata,
106
+ name: props.name,
107
+ };
108
+ coupon = await stripe.coupons.update(existingCoupon.id, updateParams);
109
+ }
110
+ else {
111
+ throw error;
112
+ }
113
+ }
114
+ else {
115
+ throw error;
116
+ }
117
+ }
118
+ }
119
+ catch (error) {
120
+ if (isStripeConflictError(error) && props.adopt) {
121
+ if (props.id) {
122
+ const existingCoupon = await stripe.coupons.retrieve(props.id);
123
+ const updateParams = {
124
+ metadata: props.metadata,
125
+ name: props.name,
126
+ };
127
+ coupon = await stripe.coupons.update(existingCoupon.id, updateParams);
128
+ }
129
+ else {
130
+ throw error;
131
+ }
132
+ }
133
+ else {
134
+ throw error;
135
+ }
136
+ }
137
+ }
138
+ return this({
139
+ id: coupon.id,
140
+ object: coupon.object,
141
+ duration: coupon.duration,
142
+ amountOff: coupon.amount_off || undefined,
143
+ currency: coupon.currency || undefined,
144
+ durationInMonths: coupon.duration_in_months || undefined,
145
+ maxRedemptions: coupon.max_redemptions || undefined,
146
+ name: coupon.name || undefined,
147
+ percentOff: coupon.percent_off || undefined,
148
+ redeemBy: coupon.redeem_by || undefined,
149
+ timesRedeemed: coupon.times_redeemed || undefined,
150
+ valid: coupon.valid,
151
+ metadata: coupon.metadata || undefined,
152
+ created: coupon.created,
153
+ livemode: coupon.livemode,
154
+ });
155
+ }
156
+ catch (error) {
157
+ console.error("Error creating/updating coupon:", error);
158
+ throw error;
159
+ }
160
+ });
161
+ //# sourceMappingURL=coupon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coupon.js","sourceRoot":"","sources":["../../src/stripe/coupon.ts"],"names":[],"mappings":"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"}