@forklaunch/implementation-billing-stripe 0.3.4 → 0.4.0

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.
@@ -105,6 +105,19 @@ export class StripeWebhookService<
105
105
  if (this.openTelemetryCollector) {
106
106
  this.openTelemetryCollector.info('Handling webhook event', event);
107
107
  }
108
+
109
+ if (
110
+ await this.em.findOne('StripeWebhookEvent', {
111
+ idempotencyKey: event.request?.idempotency_key
112
+ })
113
+ ) {
114
+ this.openTelemetryCollector.info(
115
+ 'Webhook event already processed',
116
+ event
117
+ );
118
+ return;
119
+ }
120
+
108
121
  const eventType = event.type;
109
122
 
110
123
  switch (eventType) {
@@ -296,5 +309,13 @@ export class StripeWebhookService<
296
309
  );
297
310
  break;
298
311
  }
312
+
313
+ await this.em.insert('StripeWebhookEvent', {
314
+ stripeId: event.id,
315
+ idempotencyKey: event.request?.idempotency_key,
316
+ eventType: event.type,
317
+ eventData: event.data
318
+ });
319
+ await this.em.flush();
299
320
  }
300
321
  }
@@ -588,6 +588,15 @@ var StripeWebhookService = class {
588
588
  if (this.openTelemetryCollector) {
589
589
  this.openTelemetryCollector.info("Handling webhook event", event);
590
590
  }
591
+ if (await this.em.findOne("StripeWebhookEvent", {
592
+ idempotencyKey: event.request?.idempotency_key
593
+ })) {
594
+ this.openTelemetryCollector.info(
595
+ "Webhook event already processed",
596
+ event
597
+ );
598
+ return;
599
+ }
591
600
  const eventType = event.type;
592
601
  switch (eventType) {
593
602
  case "billing_portal.session.created": {
@@ -737,6 +746,13 @@ var StripeWebhookService = class {
737
746
  );
738
747
  break;
739
748
  }
749
+ await this.em.insert("StripeWebhookEvent", {
750
+ stripeId: event.id,
751
+ idempotencyKey: event.request?.idempotency_key,
752
+ eventType: event.type,
753
+ eventData: event.data
754
+ });
755
+ await this.em.flush();
740
756
  }
741
757
  };
742
758
  // Annotate the CommonJS export names for ESM import in node:
@@ -557,6 +557,15 @@ var StripeWebhookService = class {
557
557
  if (this.openTelemetryCollector) {
558
558
  this.openTelemetryCollector.info("Handling webhook event", event);
559
559
  }
560
+ if (await this.em.findOne("StripeWebhookEvent", {
561
+ idempotencyKey: event.request?.idempotency_key
562
+ })) {
563
+ this.openTelemetryCollector.info(
564
+ "Webhook event already processed",
565
+ event
566
+ );
567
+ return;
568
+ }
560
569
  const eventType = event.type;
561
570
  switch (eventType) {
562
571
  case "billing_portal.session.created": {
@@ -706,6 +715,13 @@ var StripeWebhookService = class {
706
715
  );
707
716
  break;
708
717
  }
718
+ await this.em.insert("StripeWebhookEvent", {
719
+ stripeId: event.id,
720
+ idempotencyKey: event.request?.idempotency_key,
721
+ eventType: event.type,
722
+ eventData: event.data
723
+ });
724
+ await this.em.flush();
709
725
  }
710
726
  };
711
727
  export {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forklaunch/implementation-billing-stripe",
3
- "version": "0.3.4",
3
+ "version": "0.4.0",
4
4
  "description": "Stripe implementation for forklaunch billing",
5
5
  "homepage": "https://github.com/forklaunch/forklaunch-js#readme",
6
6
  "bugs": {
@@ -42,23 +42,23 @@
42
42
  "lib/**"
43
43
  ],
44
44
  "dependencies": {
45
- "@forklaunch/common": "^0.6.5",
46
- "@forklaunch/core": "^0.14.7",
47
- "@forklaunch/internal": "^0.3.5",
48
- "@forklaunch/validator": "^0.10.5",
49
- "@mikro-orm/core": "^6.5.2",
45
+ "@forklaunch/common": "^0.6.12",
46
+ "@forklaunch/core": "^0.15.1",
47
+ "@forklaunch/internal": "^0.3.12",
48
+ "@forklaunch/validator": "^0.10.12",
49
+ "@mikro-orm/core": "^6.5.5",
50
50
  "@sinclair/typebox": "^0.34.41",
51
51
  "ajv": "^8.17.1",
52
52
  "stripe": "^18.5.0",
53
- "zod": "^4.1.5",
54
- "@forklaunch/implementation-billing-base": "0.6.4",
55
- "@forklaunch/interfaces-billing": "0.6.3"
53
+ "zod": "^4.1.11",
54
+ "@forklaunch/implementation-billing-base": "0.7.0",
55
+ "@forklaunch/interfaces-billing": "0.7.0"
56
56
  },
57
57
  "devDependencies": {
58
- "@typescript/native-preview": "7.0.0-dev.20250910.1",
58
+ "@typescript/native-preview": "7.0.0-dev.20250922.1",
59
59
  "depcheck": "^1.4.7",
60
60
  "prettier": "^3.6.2",
61
- "typedoc": "^0.28.12"
61
+ "typedoc": "^0.28.13"
62
62
  },
63
63
  "scripts": {
64
64
  "build": "tsc --noEmit && tsup domain/schemas/index.ts services/index.ts domain/enum/index.ts domain/types/index.ts --format cjs,esm --no-splitting --dts --tsconfig tsconfig.json --out-dir lib --clean && if [ -f eject-package.bash ]; then pnpm package:eject; fi",