@efaj/pulumi-dynamic-stripe 0.2.2 → 0.2.3-6151a1a

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/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.2.3](https://github.com/efaj/pulumi-dynamic-stripe/compare/v0.2.2...v0.2.3) (2026-08-29)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **leak:** fixed an exposed an specific use case via specific "sparks" metadata ([a1dc919](https://github.com/efaj/pulumi-dynamic-stripe/commit/a1dc9193b64c7fc6246b13988862b2f41ae1286a))
9
+
3
10
  ## [0.2.2](https://github.com/efaj/pulumi-dynamic-stripe/compare/v0.2.1...v0.2.2) (2026-08-29)
4
11
 
5
12
 
package/Pulumi.yaml ADDED
@@ -0,0 +1,4 @@
1
+ name: pulumi-dynamic-stripe-test
2
+ runtime: nodejs
3
+ backend:
4
+ url: file://~
package/README.md CHANGED
@@ -61,7 +61,10 @@ const premiumPrice = new Price("premium-price", {
61
61
  const premiumPaymentLink = new PaymentLink("premium-link", {
62
62
  apiKey: stripeApiKey,
63
63
  priceId: premiumPrice.priceId,
64
- sparksAmount: "1000",
64
+ metadata: {
65
+ tier: "premium",
66
+ campaign: "summer_sale",
67
+ },
65
68
  });
66
69
 
67
70
  // Export the generated URL so it can be used in your application
@@ -2,8 +2,8 @@ import * as pulumi from "@pulumi/pulumi";
2
2
  export interface StripePaymentLinkArgs {
3
3
  apiKey: pulumi.Input<string>;
4
4
  priceId: pulumi.Input<string>;
5
- sparksAmount: pulumi.Input<string>;
6
5
  redirectUrl: pulumi.Input<string>;
6
+ metadata?: pulumi.Input<Record<string, string>>;
7
7
  allowPromotionCodes?: pulumi.Input<boolean>;
8
8
  managedPayments?: pulumi.Input<boolean>;
9
9
  automaticTax?: pulumi.Input<boolean>;
@@ -17,8 +17,8 @@ export interface StripePaymentLinkArgs {
17
17
  export interface StripePaymentLinkProviderArgs {
18
18
  apiKey: string;
19
19
  priceId: string;
20
- sparksAmount: string;
21
20
  redirectUrl: string;
21
+ metadata?: Record<string, string>;
22
22
  allowPromotionCodes?: boolean;
23
23
  managedPayments?: boolean;
24
24
  automaticTax?: boolean;
@@ -15,23 +15,13 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
15
15
  }) : function(o, v) {
16
16
  o["default"] = v;
17
17
  });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
35
25
  var __importDefault = (this && this.__importDefault) || function (mod) {
36
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
37
27
  };
@@ -42,12 +32,13 @@ const stripe_1 = __importDefault(require("stripe"));
42
32
  const utils_1 = require("./utils");
43
33
  class StripePaymentLinkProvider {
44
34
  async create(inputs) {
35
+ var _a;
45
36
  const stripe = new stripe_1.default(inputs.apiKey);
46
37
  const paymentLink = await stripe.paymentLinks.create({
47
38
  line_items: [
48
39
  {
49
40
  price: inputs.priceId,
50
- quantity: inputs.quantity ?? 1,
41
+ quantity: (_a = inputs.quantity) !== null && _a !== void 0 ? _a : 1,
51
42
  ...(inputs.adjustableQuantity !== undefined
52
43
  ? inputs.adjustableQuantity.enabled
53
44
  ? { adjustable_quantity: inputs.adjustableQuantity }
@@ -72,9 +63,7 @@ class StripePaymentLinkProvider {
72
63
  ? { managed_payments: { enabled: true } }
73
64
  : {}),
74
65
  ...(inputs.automaticTax ? { automatic_tax: { enabled: true } } : {}),
75
- metadata: {
76
- sparks: inputs.sparksAmount,
77
- },
66
+ ...(inputs.metadata ? { metadata: inputs.metadata } : {}),
78
67
  });
79
68
  return {
80
69
  id: paymentLink.id,
@@ -89,8 +78,8 @@ class StripePaymentLinkProvider {
89
78
  const replaces = [];
90
79
  if (olds.priceId !== news.priceId)
91
80
  replaces.push("priceId");
92
- if (olds.sparksAmount !== news.sparksAmount)
93
- replaces.push("sparksAmount");
81
+ if (JSON.stringify(olds.metadata) !== JSON.stringify(news.metadata))
82
+ replaces.push("metadata");
94
83
  if (olds.redirectUrl !== news.redirectUrl)
95
84
  replaces.push("redirectUrl");
96
85
  if (olds.allowPromotionCodes !== news.allowPromotionCodes)
@@ -124,8 +113,8 @@ class PaymentLink extends pulumi.dynamic.Resource {
124
113
  super(stripePaymentLinkProvider, name, {
125
114
  apiKey: args.apiKey,
126
115
  priceId: args.priceId,
127
- sparksAmount: args.sparksAmount,
128
116
  redirectUrl: args.redirectUrl,
117
+ metadata: args.metadata,
129
118
  allowPromotionCodes: args.allowPromotionCodes,
130
119
  managedPayments: args.managedPayments,
131
120
  automaticTax: args.automaticTax,
@@ -25,6 +25,7 @@ export interface StripePriceArgs {
25
25
  tiersMode?: pulumi.Input<TiersMode>;
26
26
  tiers?: pulumi.Input<pulumi.Input<TierArgs>[]>;
27
27
  transformQuantity?: pulumi.Input<TransformQuantityArgs>;
28
+ metadata?: pulumi.Input<Record<string, string>>;
28
29
  }
29
30
  export interface RecurringProviderArgs {
30
31
  interval: RecurringInterval;
@@ -51,6 +52,7 @@ export interface StripePriceProviderArgs {
51
52
  tiersMode?: TiersMode;
52
53
  tiers?: TierProviderArgs[];
53
54
  transformQuantity?: TransformQuantityProviderArgs;
55
+ metadata?: Record<string, string>;
54
56
  }
55
57
  export declare class StripePriceProvider implements pulumi.dynamic.ResourceProvider {
56
58
  create(inputs: StripePriceProviderArgs): Promise<pulumi.dynamic.CreateResult>;
@@ -15,23 +15,13 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
15
15
  }) : function(o, v) {
16
16
  o["default"] = v;
17
17
  });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
35
25
  var __importDefault = (this && this.__importDefault) || function (mod) {
36
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
37
27
  };
@@ -78,6 +68,7 @@ class StripePriceProvider {
78
68
  },
79
69
  }
80
70
  : {}),
71
+ ...(inputs.metadata ? { metadata: inputs.metadata } : {}),
81
72
  });
82
73
  return {
83
74
  id: price.id,
@@ -108,6 +99,8 @@ class StripePriceProvider {
108
99
  if (JSON.stringify(olds.transformQuantity) !==
109
100
  JSON.stringify(news.transformQuantity))
110
101
  replaces.push("transformQuantity");
102
+ if (JSON.stringify(olds.metadata) !== JSON.stringify(news.metadata))
103
+ replaces.push("metadata");
111
104
  if (olds.apiKey !== news.apiKey)
112
105
  replaces.push("apiKey");
113
106
  return {
@@ -4,12 +4,14 @@ export interface StripeProductArgs {
4
4
  name: pulumi.Input<string>;
5
5
  description?: pulumi.Input<string>;
6
6
  taxCode?: pulumi.Input<string>;
7
+ metadata?: pulumi.Input<Record<string, string>>;
7
8
  }
8
9
  export interface StripeProductProviderArgs {
9
10
  apiKey: string;
10
11
  name: string;
11
12
  description?: string;
12
13
  taxCode?: string;
14
+ metadata?: Record<string, string>;
13
15
  }
14
16
  export declare class StripeProductProvider implements pulumi.dynamic.ResourceProvider {
15
17
  create(inputs: StripeProductProviderArgs): Promise<pulumi.dynamic.CreateResult>;
@@ -15,23 +15,13 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
15
15
  }) : function(o, v) {
16
16
  o["default"] = v;
17
17
  });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
35
25
  var __importDefault = (this && this.__importDefault) || function (mod) {
36
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
37
27
  };
@@ -47,6 +37,7 @@ class StripeProductProvider {
47
37
  name: inputs.name,
48
38
  description: inputs.description,
49
39
  tax_code: inputs.taxCode,
40
+ ...(inputs.metadata ? { metadata: inputs.metadata } : {}),
50
41
  });
51
42
  return {
52
43
  id: product.id,
@@ -64,6 +55,8 @@ class StripeProductProvider {
64
55
  changes.push("description");
65
56
  if (olds.taxCode !== news.taxCode)
66
57
  changes.push("taxCode");
58
+ if (JSON.stringify(olds.metadata) !== JSON.stringify(news.metadata))
59
+ changes.push("metadata");
67
60
  if (olds.apiKey !== news.apiKey)
68
61
  changes.push("apiKey");
69
62
  return {
@@ -77,6 +70,7 @@ class StripeProductProvider {
77
70
  name: news.name,
78
71
  description: news.description,
79
72
  tax_code: news.taxCode,
73
+ ...(news.metadata ? { metadata: news.metadata } : {}),
80
74
  });
81
75
  return {
82
76
  outs: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@efaj/pulumi-dynamic-stripe",
3
- "version": "0.2.2",
3
+ "version": "0.2.3-6151a1a",
4
4
  "description": "A Pulumi Dynamic Provider for Stripe, supporting modern features like Payment Links.",
5
5
  "keywords": [
6
6
  "pulumi",
@@ -33,12 +33,12 @@
33
33
  },
34
34
  "dependencies": {
35
35
  "@pulumi/pulumi": "^3.259.0",
36
- "stripe": "^22.6.0"
36
+ "stripe": "^23.0.0"
37
37
  },
38
38
  "devDependencies": {
39
39
  "@biomejs/biome": "2.5.11",
40
40
  "@types/node": "^26.4.0",
41
- "typescript": "^6.0.3",
41
+ "typescript": "^5.5.4",
42
42
  "vite": "^6.4.3",
43
43
  "vitest": "^3.2.7"
44
44
  }
@@ -75,7 +75,7 @@ describe("Stripe Providers", () => {
75
75
  inputs: {
76
76
  apiKey: "sk_test_123",
77
77
  priceId: "price_abc",
78
- sparksAmount: "100",
78
+ metadata: { sparks: "100" },
79
79
  redirectUrl: "https://example.com/success",
80
80
  allowPromotionCodes: true,
81
81
  managedPayments: true,
@@ -108,7 +108,7 @@ describe("Stripe Providers", () => {
108
108
  inputs: {
109
109
  apiKey: "sk_test_123",
110
110
  priceId: "price_abc",
111
- sparksAmount: "50",
111
+ metadata: { sparks: "50" },
112
112
  redirectUrl: "https://example.com/success",
113
113
  },
114
114
  expectedPayload: {
@@ -136,7 +136,7 @@ describe("Stripe Providers", () => {
136
136
  inputs: {
137
137
  apiKey: "sk_test_123",
138
138
  priceId: "price_abc",
139
- sparksAmount: "100",
139
+ metadata: { sparks: "100" },
140
140
  redirectUrl: "https://example.com/success",
141
141
  quantity: 5,
142
142
  adjustableQuantity: { enabled: true, maximum: 5 },
@@ -180,7 +180,7 @@ describe("Stripe Providers", () => {
180
180
  name: "all properties change",
181
181
  olds: {
182
182
  priceId: "old",
183
- sparksAmount: "10",
183
+ metadata: { sparks: "10" },
184
184
  redirectUrl: "url1",
185
185
  allowPromotionCodes: false,
186
186
  managedPayments: false,
@@ -191,7 +191,7 @@ describe("Stripe Providers", () => {
191
191
  },
192
192
  news: {
193
193
  priceId: "new",
194
- sparksAmount: "20",
194
+ metadata: { sparks: "20" },
195
195
  redirectUrl: "url2",
196
196
  allowPromotionCodes: true,
197
197
  managedPayments: true,
@@ -203,7 +203,7 @@ describe("Stripe Providers", () => {
203
203
  expectedChanges: true,
204
204
  expectedReplaces: [
205
205
  "priceId",
206
- "sparksAmount",
206
+ "metadata",
207
207
  "redirectUrl",
208
208
  "allowPromotionCodes",
209
209
  "managedPayments",
@@ -215,15 +215,23 @@ describe("Stripe Providers", () => {
215
215
  },
216
216
  {
217
217
  name: "some properties change",
218
- olds: { priceId: "old", sparksAmount: "10", redirectUrl: "url1" },
219
- news: { priceId: "old", sparksAmount: "20", redirectUrl: "url1" },
218
+ olds: {
219
+ priceId: "old",
220
+ metadata: { sparks: "10" },
221
+ redirectUrl: "url1",
222
+ },
223
+ news: {
224
+ priceId: "old",
225
+ metadata: { sparks: "20" },
226
+ redirectUrl: "url1",
227
+ },
220
228
  expectedChanges: true,
221
- expectedReplaces: ["sparksAmount"],
229
+ expectedReplaces: ["metadata"],
222
230
  },
223
231
  {
224
232
  name: "quantity changes",
225
- olds: { priceId: "same", sparksAmount: "10", quantity: 1 },
226
- news: { priceId: "same", sparksAmount: "10", quantity: 2 },
233
+ olds: { priceId: "same", metadata: { sparks: "10" }, quantity: 1 },
234
+ news: { priceId: "same", metadata: { sparks: "10" }, quantity: 2 },
227
235
  expectedChanges: true,
228
236
  expectedReplaces: ["quantity"],
229
237
  },
@@ -231,12 +239,12 @@ describe("Stripe Providers", () => {
231
239
  name: "adjustableQuantity changes",
232
240
  olds: {
233
241
  priceId: "same",
234
- sparksAmount: "10",
242
+ metadata: { sparks: "10" },
235
243
  adjustableQuantity: { enabled: true, minimum: 1, maximum: 10 },
236
244
  },
237
245
  news: {
238
246
  priceId: "same",
239
- sparksAmount: "10",
247
+ metadata: { sparks: "10" },
240
248
  adjustableQuantity: { enabled: true, minimum: 2, maximum: 10 },
241
249
  },
242
250
  expectedChanges: true,
@@ -244,8 +252,8 @@ describe("Stripe Providers", () => {
244
252
  },
245
253
  {
246
254
  name: "no properties change",
247
- olds: { priceId: "same", sparksAmount: "10" },
248
- news: { priceId: "same", sparksAmount: "10" },
255
+ olds: { priceId: "same", metadata: { sparks: "10" } },
256
+ news: { priceId: "same", metadata: { sparks: "10" } },
249
257
  expectedChanges: false,
250
258
  expectedReplaces: [],
251
259
  },