@shdan/submesh 0.1.0 → 0.1.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 (48) hide show
  1. package/README.md +2 -2
  2. package/dist/contracts.d.ts +26 -1
  3. package/dist/contracts.d.ts.map +1 -1
  4. package/dist/index.d.ts +2 -1
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +1 -0
  7. package/dist/index.js.map +1 -1
  8. package/dist/logger.d.ts +27 -0
  9. package/dist/logger.d.ts.map +1 -1
  10. package/dist/logger.js +61 -0
  11. package/dist/logger.js.map +1 -1
  12. package/dist/plugins/builtin-plugins.d.ts.map +1 -1
  13. package/dist/plugins/builtin-plugins.js +2 -1
  14. package/dist/plugins/builtin-plugins.js.map +1 -1
  15. package/dist/providers/stripe/plugin/stripe-plan-sync.d.ts +4 -0
  16. package/dist/providers/stripe/plugin/stripe-plan-sync.d.ts.map +1 -0
  17. package/dist/providers/stripe/plugin/stripe-plan-sync.js +83 -0
  18. package/dist/providers/stripe/plugin/stripe-plan-sync.js.map +1 -0
  19. package/dist/providers/stripe/plugin/stripe.d.ts +20 -0
  20. package/dist/providers/stripe/plugin/stripe.d.ts.map +1 -0
  21. package/dist/providers/stripe/plugin/stripe.js +238 -0
  22. package/dist/providers/stripe/plugin/stripe.js.map +1 -0
  23. package/dist/providers/stripe/security/stripe-signature-verification.d.ts +3 -0
  24. package/dist/providers/stripe/security/stripe-signature-verification.d.ts.map +1 -0
  25. package/dist/providers/stripe/security/stripe-signature-verification.js +162 -0
  26. package/dist/providers/stripe/security/stripe-signature-verification.js.map +1 -0
  27. package/dist/providers/stripe/services/stripe-subscription-verification-service.d.ts +3 -0
  28. package/dist/providers/stripe/services/stripe-subscription-verification-service.d.ts.map +1 -0
  29. package/dist/providers/stripe/services/stripe-subscription-verification-service.js +65 -0
  30. package/dist/providers/stripe/services/stripe-subscription-verification-service.js.map +1 -0
  31. package/dist/services/managed-subscription-service.d.ts +2 -1
  32. package/dist/services/managed-subscription-service.d.ts.map +1 -1
  33. package/dist/services/managed-subscription-service.js +7 -1
  34. package/dist/services/managed-subscription-service.js.map +1 -1
  35. package/dist/services/plan-provisioning-service.d.ts +2 -1
  36. package/dist/services/plan-provisioning-service.d.ts.map +1 -1
  37. package/dist/services/plan-provisioning-service.js +16 -1
  38. package/dist/services/plan-provisioning-service.js.map +1 -1
  39. package/dist/services/provider-subscription-sync-service.d.ts +2 -1
  40. package/dist/services/provider-subscription-sync-service.d.ts.map +1 -1
  41. package/dist/services/provider-subscription-sync-service.js +7 -1
  42. package/dist/services/provider-subscription-sync-service.js.map +1 -1
  43. package/dist/submesh.d.ts +15 -1
  44. package/dist/submesh.d.ts.map +1 -1
  45. package/dist/submesh.js +79 -12
  46. package/dist/submesh.js.map +1 -1
  47. package/package.json +10 -10
  48. package/LICENSE +0 -21
package/README.md CHANGED
@@ -5,8 +5,8 @@ Submesh SDK for embedding subscription infrastructure into backend services.
5
5
  Use this package to:
6
6
 
7
7
  - model plans and entitlements
8
- - ingest webhooks from provider plugins
9
- - verify and sync store subscriptions
8
+ - ingest webhooks from provider plugins (Manual, Google Play, Apple App Store, Stripe)
9
+ - verify and sync store subscriptions (Google Play, Apple App Store, Stripe)
10
10
  - evaluate feature access decisions
11
11
 
12
12
  ## Install
@@ -115,11 +115,27 @@ export interface AppleAppStorePluginConfig extends WebhookSecurityConfig {
115
115
  appleSignedPayloadPublicKeys?: string[];
116
116
  planSync?: ApplePlanSyncConfig;
117
117
  }
118
+ export interface StripePlanSyncConfig {
119
+ enabled?: boolean;
120
+ endpointUrl?: string;
121
+ deprovisionEndpointUrl?: string;
122
+ deprovisionHttpMethod?: string;
123
+ authToken?: string;
124
+ authHeaderName?: string;
125
+ autoProvisionAllPlans?: boolean;
126
+ }
127
+ export interface StripePluginConfig extends WebhookSecurityConfig {
128
+ stripeWebhookSigningSecret?: string;
129
+ stripeWebhookToleranceSeconds?: number;
130
+ stripeApiKey?: string;
131
+ planSync?: StripePlanSyncConfig;
132
+ }
118
133
  export type ManualPluginConfig = WebhookSecurityConfig;
119
134
  export interface BuiltinPluginConfigMap {
120
135
  manual: ManualPluginConfig;
121
136
  "google-play": GooglePlayPluginConfig;
122
137
  "apple-app-store": AppleAppStorePluginConfig;
138
+ stripe: StripePluginConfig;
123
139
  }
124
140
  export type InstallPluginInput<K extends string = string> = {
125
141
  pluginKey: K;
@@ -166,8 +182,17 @@ export interface VerifyAppleAppStoreSubscriptionInput {
166
182
  export interface SyncAppleAppStoreSubscriptionInput extends VerifyAppleAppStoreSubscriptionInput {
167
183
  subjectId: string;
168
184
  }
185
+ export interface VerifyStripeSubscriptionInput {
186
+ subscriptionId: string;
187
+ apiKey?: string;
188
+ subjectId?: string;
189
+ planCode?: string;
190
+ }
191
+ export interface SyncStripeSubscriptionInput extends VerifyStripeSubscriptionInput {
192
+ subjectId: string;
193
+ }
169
194
  export interface VerifiedProviderSubscription {
170
- provider: "google-play" | "apple-app-store";
195
+ provider: "google-play" | "apple-app-store" | "stripe";
171
196
  sourceRef: string;
172
197
  status: SubscriptionStatus;
173
198
  canonical: CanonicalSubscriptionInput;
@@ -1 +1 @@
1
- {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,0BAA0B,EAC1B,IAAI,EACJ,qBAAqB,EACrB,kBAAkB,EAClB,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EACL,0BAA0B,EAC1B,6BAA6B,EAC9B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,eAAgB,SAAQ,qBAAqB;IAC5D,QAAQ,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,8BAA8B;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,yBAAyB;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,qBAAqB;IACpC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,+BAAgC,SAAQ,yBAAyB;IAChF,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,+BAA+B,CAAC;IACjD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,sBAAuB,SAAQ,qBAAqB;IACnE,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,+BAA+B,CAAC,EAAE,MAAM,CAAC;IACzC,sBAAsB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChD,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,4BAA4B,CAAC,EAAE,MAAM,EAAE,CAAC;IACxC,mCAAmC,CAAC,EAAE,OAAO,CAAC;IAC9C,UAAU,CAAC,EAAE;QACX,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,cAAc,CAAC,EAAE,+BAA+B,CAAC;KAClD,CAAC;IACF,QAAQ,CAAC,EAAE,wBAAwB,CAAC;CACrC;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,yBAA0B,SAAQ,qBAAqB;IACtE,4BAA4B,CAAC,EAAE,MAAM,EAAE,CAAC;IACxC,4BAA4B,CAAC,EAAE,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,EAAE,mBAAmB,CAAC;CAChC;AAED,MAAM,MAAM,kBAAkB,GAAG,qBAAqB,CAAC;AAEvD,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,aAAa,EAAE,sBAAsB,CAAC;IACtC,iBAAiB,EAAE,yBAAyB,CAAC;CAC9C;AAED,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,IAAI;IAC1D,SAAS,EAAE,CAAC,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,CAAC,SAAS,MAAM,sBAAsB,GAC3C,sBAAsB,CAAC,CAAC,CAAC,GACzB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC7B,CAAC;AAEF,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,YAAY,CAAC,EAAE,kBAAkB,CAAC;CACnC;AAED,MAAM,WAAW,mBAAmB;IAClC,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,YAAY,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;CAC/B;AAED,MAAM,WAAW,yBAAyB;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iCAAiC;IAChD,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,yBAAyB,CAAC;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,+BAAgC,SAAQ,iCAAiC;IACxF,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oCAAoC;IACnD,qBAAqB,EAAE,MAAM,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,4BAA4B,CAAC,EAAE,MAAM,EAAE,CAAC;IACxC,4BAA4B,CAAC,EAAE,MAAM,EAAE,CAAC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kCAAmC,SAAQ,oCAAoC;IAC9F,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,EAAE,aAAa,GAAG,iBAAiB,CAAC;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,SAAS,EAAE,0BAA0B,CAAC;IACtC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,0BAA2B,SAAQ,4BAA4B;IAC9E,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,YAAY,CAAC,EAAE,mBAAmB,CAAC;IACnC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,0BAA0B,CAAC;IACrC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,6BAA6B,CAAC;IAC1C,OAAO,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC/B,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AAED,MAAM,MAAM,yBAAyB,GAAG,iBAAiB,CAAC"}
1
+ {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -2,10 +2,11 @@ export * from "@shdan/submesh-core";
2
2
  export { Submesh } from "./submesh.js";
3
3
  export { ConflictError, NotFoundError, SubmeshError, ValidationError } from "./errors.js";
4
4
  export { createSubmeshDrizzleDb, DrizzleSubmeshRepositories, ensureDrizzleSchema, migrateSubmeshDrizzle, submeshDrizzleSchema, type DrizzleConnectionOptions, type DrizzleRepositoriesOptions, type ExternalDrizzleOptions, type SubmeshDrizzleDatabase, } from "./drizzle/index.js";
5
- export type { AppleAppStorePluginConfig, ApplePlanSyncConfig, BuiltinPluginConfigMap, CreateManagedSubscriptionInput, CreatePlanInput, GoogleOauthServiceAccountConfig, GooglePlayPlanSyncConfig, GooglePlayPluginConfig, GoogleServiceAccountInput, IngestWebhookOptions, IngestWebhookResult, InstallPluginInput, LinkIdentityInput, LinkProviderIdentityInput, ManualPluginConfig, PluginListItem, SyncAppleAppStoreSubscriptionInput, SyncGooglePlaySubscriptionInput, SubmeshOptions, SyncedProviderSubscription, UpdatePlanInput, UpdateSubscriptionInput, CancelSubscriptionOptions, UpsertCatalogMappingInput, UpsertSubjectInput, VerifiedProviderSubscription, VerifyAppleAppStoreSubscriptionInput, VerifyGooglePlaySubscriptionInput, WebhookSecurityConfig, } from "./contracts.js";
5
+ export type { AppleAppStorePluginConfig, ApplePlanSyncConfig, BuiltinPluginConfigMap, CreateManagedSubscriptionInput, CreatePlanInput, GoogleOauthServiceAccountConfig, GooglePlayPlanSyncConfig, GooglePlayPluginConfig, GoogleServiceAccountInput, IngestWebhookOptions, IngestWebhookResult, InstallPluginInput, LinkIdentityInput, LinkProviderIdentityInput, ManualPluginConfig, PluginListItem, SyncAppleAppStoreSubscriptionInput, SyncGooglePlaySubscriptionInput, SyncStripeSubscriptionInput, SubmeshOptions, SyncedProviderSubscription, StripePlanSyncConfig, StripePluginConfig, UpdatePlanInput, UpdateSubscriptionInput, CancelSubscriptionOptions, UpsertCatalogMappingInput, UpsertSubjectInput, VerifiedProviderSubscription, VerifyAppleAppStoreSubscriptionInput, VerifyGooglePlaySubscriptionInput, VerifyStripeSubscriptionInput, WebhookSecurityConfig, } from "./contracts.js";
6
6
  export type { CatalogMappingRepository, InboundEventRepository, PlanRepository, PluginInstallationRepository, RepositorySet, SubjectRepository, SubmeshRepositories, SubscriptionRepository, UpsertPluginInstallationInput, UpsertSubscriptionInput, } from "./repositories/index.js";
7
7
  export { manualPlugin } from "./plugins/manual.js";
8
8
  export { googlePlayPlugin } from "./providers/google/plugin/play.js";
9
9
  export { appleAppStorePlugin } from "./providers/apple/plugin/app-store.js";
10
+ export { stripePlugin } from "./providers/stripe/plugin/stripe.js";
10
11
  export { createRelaySignature, verifyRelaySignature, } from "./security/relay-signature.js";
11
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC1F,OAAO,EACL,sBAAsB,EACtB,0BAA0B,EAC1B,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,EAC/B,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,GAC5B,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,yBAAyB,EACzB,mBAAmB,EACnB,sBAAsB,EACtB,8BAA8B,EAC9B,eAAe,EACf,+BAA+B,EAC/B,wBAAwB,EACxB,sBAAsB,EACtB,yBAAyB,EACzB,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,yBAAyB,EACzB,kBAAkB,EAClB,cAAc,EACd,kCAAkC,EAClC,+BAA+B,EAC/B,cAAc,EACd,0BAA0B,EAC1B,eAAe,EACf,uBAAuB,EACvB,yBAAyB,EACzB,yBAAyB,EACzB,kBAAkB,EAClB,4BAA4B,EAC5B,oCAAoC,EACpC,iCAAiC,EACjC,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,wBAAwB,EACxB,sBAAsB,EACtB,cAAc,EACd,4BAA4B,EAC5B,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,EACtB,6BAA6B,EAC7B,uBAAuB,GACxB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,+BAA+B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC1F,OAAO,EACL,sBAAsB,EACtB,0BAA0B,EAC1B,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,EAC/B,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,GAC5B,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,yBAAyB,EACzB,mBAAmB,EACnB,sBAAsB,EACtB,8BAA8B,EAC9B,eAAe,EACf,+BAA+B,EAC/B,wBAAwB,EACxB,sBAAsB,EACtB,yBAAyB,EACzB,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,yBAAyB,EACzB,kBAAkB,EAClB,cAAc,EACd,kCAAkC,EAClC,+BAA+B,EAC/B,2BAA2B,EAC3B,cAAc,EACd,0BAA0B,EAC1B,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EACf,uBAAuB,EACvB,yBAAyB,EACzB,yBAAyB,EACzB,kBAAkB,EAClB,4BAA4B,EAC5B,oCAAoC,EACpC,iCAAiC,EACjC,6BAA6B,EAC7B,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,wBAAwB,EACxB,sBAAsB,EACtB,cAAc,EACd,4BAA4B,EAC5B,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,EACtB,6BAA6B,EAC7B,uBAAuB,GACxB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACnE,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,+BAA+B,CAAC"}
package/dist/index.js CHANGED
@@ -5,5 +5,6 @@ export { createSubmeshDrizzleDb, DrizzleSubmeshRepositories, ensureDrizzleSchema
5
5
  export { manualPlugin } from "./plugins/manual.js";
6
6
  export { googlePlayPlugin } from "./providers/google/plugin/play.js";
7
7
  export { appleAppStorePlugin } from "./providers/apple/plugin/app-store.js";
8
+ export { stripePlugin } from "./providers/stripe/plugin/stripe.js";
8
9
  export { createRelaySignature, verifyRelaySignature, } from "./security/relay-signature.js";
9
10
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC1F,OAAO,EACL,sBAAsB,EACtB,0BAA0B,EAC1B,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,GAKrB,MAAM,oBAAoB,CAAC;AA4C5B,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,+BAA+B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC1F,OAAO,EACL,sBAAsB,EACtB,0BAA0B,EAC1B,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,GAKrB,MAAM,oBAAoB,CAAC;AAgD5B,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACnE,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,+BAA+B,CAAC"}
package/dist/logger.d.ts CHANGED
@@ -13,4 +13,31 @@ export interface SubmeshLogger {
13
13
  }
14
14
  /** A logger that discards all messages. Used as the default. */
15
15
  export declare const noopLogger: SubmeshLogger;
16
+ declare const LOG_LEVELS: {
17
+ readonly debug: 10;
18
+ readonly info: 20;
19
+ readonly warn: 30;
20
+ readonly error: 40;
21
+ };
22
+ export type LogLevel = keyof typeof LOG_LEVELS;
23
+ export interface ConsoleLoggerOptions {
24
+ /** The minimum log level to emit. Defaults to "info". */
25
+ level?: LogLevel;
26
+ }
27
+ /**
28
+ * Standard console-based logger for Submesh.
29
+ *
30
+ * Provides a simple starting point for developers who want to see SDK
31
+ * output in the terminal without integrating a full logging library.
32
+ */
33
+ export declare class ConsoleLogger implements SubmeshLogger {
34
+ private levelValue;
35
+ constructor(options?: ConsoleLoggerOptions);
36
+ private shouldLog;
37
+ debug(message: string, context?: Record<string, unknown>): void;
38
+ info(message: string, context?: Record<string, unknown>): void;
39
+ warn(message: string, context?: Record<string, unknown>): void;
40
+ error(message: string, context?: Record<string, unknown>): void;
41
+ }
42
+ export {};
16
43
  //# sourceMappingURL=logger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAChE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC/D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC/D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CACjE;AAED,gEAAgE;AAChE,eAAO,MAAM,UAAU,EAAE,aAKxB,CAAC"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAChE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC/D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC/D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CACjE;AAED,gEAAgE;AAChE,eAAO,MAAM,UAAU,EAAE,aAKxB,CAAC;AAEF,QAAA,MAAM,UAAU;;;;;CAKN,CAAC;AAEX,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,UAAU,CAAC;AAE/C,MAAM,WAAW,oBAAoB;IACnC,yDAAyD;IACzD,KAAK,CAAC,EAAE,QAAQ,CAAC;CAClB;AAED;;;;;GAKG;AACH,qBAAa,aAAc,YAAW,aAAa;IACjD,OAAO,CAAC,UAAU,CAAS;gBAEf,OAAO,GAAE,oBAAyB;IAI9C,OAAO,CAAC,SAAS;IAIjB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAS/D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAS9D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAS9D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAQhE"}
package/dist/logger.js CHANGED
@@ -5,4 +5,65 @@ export const noopLogger = {
5
5
  warn() { },
6
6
  error() { },
7
7
  };
8
+ const LOG_LEVELS = {
9
+ debug: 10,
10
+ info: 20,
11
+ warn: 30,
12
+ error: 40,
13
+ };
14
+ /**
15
+ * Standard console-based logger for Submesh.
16
+ *
17
+ * Provides a simple starting point for developers who want to see SDK
18
+ * output in the terminal without integrating a full logging library.
19
+ */
20
+ export class ConsoleLogger {
21
+ levelValue;
22
+ constructor(options = {}) {
23
+ this.levelValue = LOG_LEVELS[options.level ?? "info"];
24
+ }
25
+ shouldLog(level) {
26
+ return LOG_LEVELS[level] >= this.levelValue;
27
+ }
28
+ debug(message, context) {
29
+ if (!this.shouldLog("debug"))
30
+ return;
31
+ if (context && Object.keys(context).length > 0) {
32
+ console.debug(`[submesh:debug] ${message}`, context);
33
+ }
34
+ else {
35
+ console.debug(`[submesh:debug] ${message}`);
36
+ }
37
+ }
38
+ info(message, context) {
39
+ if (!this.shouldLog("info"))
40
+ return;
41
+ if (context && Object.keys(context).length > 0) {
42
+ console.info(`[submesh:info] ${message}`, context);
43
+ }
44
+ else {
45
+ console.info(`[submesh:info] ${message}`);
46
+ }
47
+ }
48
+ warn(message, context) {
49
+ if (!this.shouldLog("warn"))
50
+ return;
51
+ if (context && Object.keys(context).length > 0) {
52
+ console.warn(`[submesh:warn] ${message}`, context);
53
+ }
54
+ else {
55
+ console.warn(`[submesh:warn] ${message}`);
56
+ }
57
+ }
58
+ error(message, context) {
59
+ if (!this.shouldLog("error"))
60
+ return;
61
+ if (context && Object.keys(context).length > 0) {
62
+ console.error(`[submesh:error] ${message}`, context);
63
+ }
64
+ else {
65
+ console.error(`[submesh:error] ${message}`);
66
+ }
67
+ }
68
+ }
8
69
  //# sourceMappingURL=logger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAcA,gEAAgE;AAChE,MAAM,CAAC,MAAM,UAAU,GAAkB;IACvC,KAAK,KAAI,CAAC;IACV,IAAI,KAAI,CAAC;IACT,IAAI,KAAI,CAAC;IACT,KAAK,KAAI,CAAC;CACX,CAAC"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAcA,gEAAgE;AAChE,MAAM,CAAC,MAAM,UAAU,GAAkB;IACvC,KAAK,KAAI,CAAC;IACV,IAAI,KAAI,CAAC;IACT,IAAI,KAAI,CAAC;IACT,KAAK,KAAI,CAAC;CACX,CAAC;AAEF,MAAM,UAAU,GAAG;IACjB,KAAK,EAAE,EAAE;IACT,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,EAAE;IACR,KAAK,EAAE,EAAE;CACD,CAAC;AASX;;;;;GAKG;AACH,MAAM,OAAO,aAAa;IAChB,UAAU,CAAS;IAE3B,YAAY,UAAgC,EAAE;QAC5C,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC,CAAC;IACxD,CAAC;IAEO,SAAS,CAAC,KAAe;QAC/B,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,OAAiC;QACtD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;YAAE,OAAO;QACrC,IAAI,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/C,OAAO,CAAC,KAAK,CAAC,mBAAmB,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,mBAAmB,OAAO,EAAE,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,OAAiC;QACrD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;YAAE,OAAO;QACpC,IAAI,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/C,OAAO,CAAC,IAAI,CAAC,kBAAkB,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;QACrD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,kBAAkB,OAAO,EAAE,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,OAAiC;QACrD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;YAAE,OAAO;QACpC,IAAI,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/C,OAAO,CAAC,IAAI,CAAC,kBAAkB,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;QACrD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,kBAAkB,OAAO,EAAE,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,OAAiC;QACtD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;YAAE,OAAO;QACrC,IAAI,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/C,OAAO,CAAC,KAAK,CAAC,mBAAmB,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,mBAAmB,OAAO,EAAE,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"builtin-plugins.d.ts","sourceRoot":"","sources":["../../src/plugins/builtin-plugins.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAM9D,wBAAgB,iBAAiB,IAAI,kBAAkB,EAAE,CAExD"}
1
+ {"version":3,"file":"builtin-plugins.d.ts","sourceRoot":"","sources":["../../src/plugins/builtin-plugins.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAO9D,wBAAgB,iBAAiB,IAAI,kBAAkB,EAAE,CAExD"}
@@ -1,7 +1,8 @@
1
1
  import { appleAppStorePlugin } from "../providers/apple/plugin/app-store.js";
2
2
  import { googlePlayPlugin } from "../providers/google/plugin/play.js";
3
+ import { stripePlugin } from "../providers/stripe/plugin/stripe.js";
3
4
  import { manualPlugin } from "./manual.js";
4
5
  export function getBuiltinPlugins() {
5
- return [manualPlugin, googlePlayPlugin, appleAppStorePlugin];
6
+ return [manualPlugin, googlePlayPlugin, appleAppStorePlugin, stripePlugin];
6
7
  }
7
8
  //# sourceMappingURL=builtin-plugins.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"builtin-plugins.js","sourceRoot":"","sources":["../../src/plugins/builtin-plugins.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,UAAU,iBAAiB;IAC/B,OAAO,CAAC,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,CAAC,CAAC;AAC/D,CAAC"}
1
+ {"version":3,"file":"builtin-plugins.js","sourceRoot":"","sources":["../../src/plugins/builtin-plugins.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,UAAU,iBAAiB;IAC/B,OAAO,CAAC,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,YAAY,CAAC,CAAC;AAC7E,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { PlanProvisioningInput, PluginPlanProvisionResult } from "@shdan/submesh-core";
2
+ export declare function provisionStripePlan(plan: PlanProvisioningInput, config: Record<string, unknown>): Promise<PluginPlanProvisionResult>;
3
+ export declare function deprovisionStripePlan(plan: PlanProvisioningInput, config: Record<string, unknown>, result: PluginPlanProvisionResult): Promise<void>;
4
+ //# sourceMappingURL=stripe-plan-sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stripe-plan-sync.d.ts","sourceRoot":"","sources":["../../../../src/providers/stripe/plugin/stripe-plan-sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,yBAAyB,EAC1B,MAAM,qBAAqB,CAAC;AA6C7B,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,qBAAqB,EAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,yBAAyB,CAAC,CA8CpC;AAED,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,qBAAqB,EAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,EAAE,yBAAyB,GAChC,OAAO,CAAC,IAAI,CAAC,CAYf"}
@@ -0,0 +1,83 @@
1
+ import { getPluginPlanMetadata, relayDeprovisionPlan, relayProvisionPlan, shouldProvisionPlan, } from "../../../plugins/plan-provisioning.js";
2
+ function asObject(value) {
3
+ return value && typeof value === "object" && !Array.isArray(value)
4
+ ? value
5
+ : {};
6
+ }
7
+ function getString(value) {
8
+ return typeof value === "string" && value.length > 0 ? value : undefined;
9
+ }
10
+ function withRelayStrategy(result) {
11
+ return {
12
+ mappings: result.mappings.map((mapping) => {
13
+ const metadata = asObject(mapping.metadata);
14
+ return {
15
+ ...mapping,
16
+ metadata: {
17
+ ...metadata,
18
+ strategy: getString(metadata.strategy) ?? "relay-http",
19
+ },
20
+ };
21
+ }),
22
+ metadata: {
23
+ ...asObject(result.metadata),
24
+ strategy: getString(asObject(result.metadata).strategy) ?? "relay-http",
25
+ },
26
+ };
27
+ }
28
+ function shouldRelayDeprovision(result) {
29
+ return result.mappings.some((mapping) => {
30
+ const strategy = getString(asObject(mapping.metadata).strategy);
31
+ return strategy === "relay-http";
32
+ });
33
+ }
34
+ export async function provisionStripePlan(plan, config) {
35
+ const providerMetadata = getPluginPlanMetadata(plan.metadata, "stripe", [
36
+ "stripeBilling",
37
+ ]);
38
+ if (!shouldProvisionPlan(config, providerMetadata)) {
39
+ return { mappings: [] };
40
+ }
41
+ const endpointUrl = getString(providerMetadata.endpointUrl) ??
42
+ getString(config.planSync?.endpointUrl);
43
+ if (endpointUrl) {
44
+ return withRelayStrategy(await relayProvisionPlan({
45
+ pluginKey: "stripe",
46
+ plan,
47
+ installationConfig: config,
48
+ providerMetadata,
49
+ }));
50
+ }
51
+ const externalProductId = getString(providerMetadata.externalProductId) ??
52
+ getString(providerMetadata.priceId) ??
53
+ getString(providerMetadata.productId);
54
+ if (externalProductId) {
55
+ return {
56
+ mappings: [
57
+ {
58
+ externalProductId,
59
+ metadata: {
60
+ strategy: "mapping-only",
61
+ },
62
+ },
63
+ ],
64
+ metadata: {
65
+ strategy: "mapping-only",
66
+ },
67
+ };
68
+ }
69
+ throw new Error("Stripe plan provisioning requires either metadata.providers['stripe'].externalProductId (or priceId/productId) or planSync.endpointUrl.");
70
+ }
71
+ export async function deprovisionStripePlan(plan, config, result) {
72
+ if (!shouldRelayDeprovision(result)) {
73
+ return;
74
+ }
75
+ await relayDeprovisionPlan({
76
+ pluginKey: "stripe",
77
+ plan,
78
+ installationConfig: config,
79
+ providerMetadata: getPluginPlanMetadata(plan.metadata, "stripe", ["stripeBilling"]),
80
+ result,
81
+ });
82
+ }
83
+ //# sourceMappingURL=stripe-plan-sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stripe-plan-sync.js","sourceRoot":"","sources":["../../../../src/providers/stripe/plugin/stripe-plan-sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { ParsedWebhookEvent } from "@shdan/submesh-core";
2
+ import type { StripePluginConfig } from "../../../contracts.js";
3
+ export declare const stripePlugin: {
4
+ key: string;
5
+ displayName: string;
6
+ description: string;
7
+ capabilities: string[];
8
+ provisionPlan(input: import("@shdan/submesh-core").PlanProvisioningInput, context: {
9
+ config: StripePluginConfig;
10
+ }): Promise<import("@shdan/submesh-core").PluginPlanProvisionResult>;
11
+ deprovisionPlan(input: import("@shdan/submesh-core").PlanProvisioningInput, context: {
12
+ config: StripePluginConfig;
13
+ result: import("@shdan/submesh-core").PluginPlanProvisionResult;
14
+ }): Promise<void>;
15
+ verifyWebhook(envelope: import("@shdan/submesh-core").PluginWebhookEnvelope, context: {
16
+ config: StripePluginConfig;
17
+ }): Promise<import("@shdan/submesh-core").PluginWebhookVerification>;
18
+ parseWebhook(envelope: import("@shdan/submesh-core").PluginWebhookEnvelope): Promise<ParsedWebhookEvent>;
19
+ };
20
+ //# sourceMappingURL=stripe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stripe.d.ts","sourceRoot":"","sources":["../../../../src/providers/stripe/plugin/stripe.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,kBAAkB,EAEnB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAgRhE,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;CAkCyB,CAAC"}
@@ -0,0 +1,238 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { verifyStripeWebhook } from "../security/stripe-signature-verification.js";
3
+ import { verifyTrustedRelayWebhook } from "../../../security/plugin-webhook-verification.js";
4
+ import { hashPayload } from "../../../plugins/hash-payload.js";
5
+ import { deprovisionStripePlan, provisionStripePlan } from "./stripe-plan-sync.js";
6
+ function asObject(value) {
7
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
8
+ return {};
9
+ }
10
+ return value;
11
+ }
12
+ function getString(value) {
13
+ return typeof value === "string" && value.length > 0 ? value : undefined;
14
+ }
15
+ function getBoolean(value) {
16
+ return typeof value === "boolean" ? value : undefined;
17
+ }
18
+ function getNumericString(value) {
19
+ if (typeof value === "number" && Number.isFinite(value)) {
20
+ return value.toString();
21
+ }
22
+ return getString(value);
23
+ }
24
+ function toStripeDateString(value) {
25
+ const raw = getNumericString(value);
26
+ if (raw) {
27
+ const numeric = Number(raw);
28
+ if (Number.isFinite(numeric)) {
29
+ return raw.length >= 13
30
+ ? new Date(numeric).toISOString()
31
+ : new Date(numeric * 1000).toISOString();
32
+ }
33
+ }
34
+ return getString(value) ?? null;
35
+ }
36
+ function isFutureTimestamp(value) {
37
+ if (!value) {
38
+ return false;
39
+ }
40
+ const time = Date.parse(value);
41
+ return Number.isFinite(time) && time > Date.now();
42
+ }
43
+ function normalizeStripeStatus(input) {
44
+ if (input.eventType === "customer.subscription.deleted") {
45
+ return "canceled";
46
+ }
47
+ if (input.eventType === "customer.subscription.paused") {
48
+ return "paused";
49
+ }
50
+ if (input.eventType === "customer.subscription.resumed") {
51
+ return "active";
52
+ }
53
+ if (input.eventType === "customer.subscription.trial_will_end") {
54
+ return "trialing";
55
+ }
56
+ switch (input.status) {
57
+ case "trialing":
58
+ return "trialing";
59
+ case "active":
60
+ return "active";
61
+ case "past_due":
62
+ case "unpaid":
63
+ return "billing_issue";
64
+ case "paused":
65
+ return "paused";
66
+ case "incomplete":
67
+ case "incomplete_expired":
68
+ return "canceled";
69
+ case "canceled":
70
+ return input.cancelAtPeriodEnd && isFutureTimestamp(input.currentPeriodEnd)
71
+ ? "active"
72
+ : "canceled";
73
+ default:
74
+ return "active";
75
+ }
76
+ }
77
+ function parsePayload(body) {
78
+ if (typeof body === "string") {
79
+ return asObject(JSON.parse(body));
80
+ }
81
+ if (body && typeof body === "object" && !Array.isArray(body)) {
82
+ return body;
83
+ }
84
+ throw new Error("Stripe plugin expects a JSON object payload.");
85
+ }
86
+ function resolveExternalProductId(payload, subscription) {
87
+ const items = asObject(subscription.items);
88
+ const data = Array.isArray(items.data)
89
+ ? items.data.filter((entry) => Boolean(entry) && typeof entry === "object" && !Array.isArray(entry))
90
+ : [];
91
+ const firstItem = asObject(data[0]);
92
+ const price = asObject(firstItem.price || subscription.price || subscription.plan);
93
+ return (getString(payload.externalProductId) ??
94
+ getString(payload.priceId) ??
95
+ getString(payload.productId) ??
96
+ getString(price.id) ??
97
+ getString(price.product) ??
98
+ getString(asObject(price.product).id));
99
+ }
100
+ function resolveExternalCustomerId(payload, subscription) {
101
+ const customer = subscription.customer;
102
+ return (getString(payload.externalCustomerId) ??
103
+ getString(payload.externalSubjectId) ??
104
+ getString(payload.customerId) ??
105
+ getString(customer) ??
106
+ getString(asObject(customer).id));
107
+ }
108
+ function buildRecord(input) {
109
+ const metadata = asObject(input.subscription.metadata);
110
+ const currentPeriodStart = toStripeDateString(input.subscription.current_period_start) ??
111
+ toStripeDateString(input.payload.currentPeriodStart);
112
+ const currentPeriodEnd = toStripeDateString(input.subscription.current_period_end) ??
113
+ toStripeDateString(input.payload.currentPeriodEnd);
114
+ const cancelAtPeriodEnd = getBoolean(input.subscription.cancel_at_period_end) ?? false;
115
+ const cancelAt = toStripeDateString(input.subscription.cancel_at) ??
116
+ toStripeDateString(input.payload.cancelAt) ??
117
+ (cancelAtPeriodEnd && isFutureTimestamp(currentPeriodEnd) ? currentPeriodEnd : null);
118
+ const externalCustomerId = resolveExternalCustomerId(input.payload, input.subscription);
119
+ return {
120
+ pluginKey: "stripe",
121
+ sourceType: getString(input.payload.sourceType) ?? "stripe",
122
+ sourceRef: input.sourceRef,
123
+ status: normalizeStripeStatus({
124
+ status: getString(input.subscription.status) ?? getString(input.payload.status),
125
+ eventType: input.eventType,
126
+ currentPeriodEnd,
127
+ cancelAtPeriodEnd,
128
+ }),
129
+ subjectId: getString(input.payload.subjectId) ??
130
+ getString(input.payload.userId) ??
131
+ getString(metadata.subjectId) ??
132
+ getString(metadata.userId),
133
+ externalSubjectId: externalCustomerId,
134
+ externalCustomerId,
135
+ planCode: getString(input.payload.planCode) ?? getString(metadata.planCode),
136
+ externalProductId: resolveExternalProductId(input.payload, input.subscription),
137
+ currentPeriodStart,
138
+ currentPeriodEnd,
139
+ trialEndAt: toStripeDateString(input.subscription.trial_end),
140
+ cancelAt,
141
+ metadata: {
142
+ eventType: input.eventType,
143
+ lifecycle: input.eventType.split(".").slice(-1)[0] ?? "updated",
144
+ payload: input.payload,
145
+ subscription: input.subscription,
146
+ },
147
+ };
148
+ }
149
+ function toNormalizedEvent(payload) {
150
+ const sourceRef = String(payload.sourceRef ?? payload.subscriptionId ?? payload.id ?? randomUUID());
151
+ const record = buildRecord({
152
+ payload,
153
+ subscription: {
154
+ id: sourceRef,
155
+ status: payload.status,
156
+ customer: payload.externalCustomerId ?? payload.externalSubjectId ?? payload.customerId,
157
+ current_period_start: payload.currentPeriodStart,
158
+ current_period_end: payload.currentPeriodEnd,
159
+ trial_end: payload.trialEndAt,
160
+ cancel_at: payload.cancelAt,
161
+ items: {
162
+ data: [
163
+ {
164
+ price: {
165
+ id: payload.priceId ?? payload.externalProductId,
166
+ product: payload.productId,
167
+ },
168
+ },
169
+ ],
170
+ },
171
+ metadata: asObject(payload.metadata),
172
+ },
173
+ eventType: getString(payload.eventType) ?? "stripe.subscription.updated",
174
+ sourceRef,
175
+ });
176
+ return {
177
+ eventKey: getString(payload.eventKey) ?? hashPayload(payload),
178
+ eventType: getString(payload.eventType) ?? "stripe.subscription.updated",
179
+ sourceRef,
180
+ records: [record],
181
+ };
182
+ }
183
+ function toStripeEvent(payload) {
184
+ const eventType = getString(payload.type) ?? "stripe.event";
185
+ const data = asObject(payload.data);
186
+ const object = asObject(data.object);
187
+ if (!eventType.startsWith("customer.subscription.")) {
188
+ return {
189
+ eventKey: getString(payload.id) ?? hashPayload(payload),
190
+ eventType,
191
+ sourceRef: null,
192
+ records: [],
193
+ };
194
+ }
195
+ const sourceRef = String(object.id ?? payload.id ?? randomUUID());
196
+ const record = buildRecord({
197
+ payload,
198
+ subscription: object,
199
+ eventType,
200
+ sourceRef,
201
+ });
202
+ return {
203
+ eventKey: getString(payload.id) ?? hashPayload(payload),
204
+ eventType,
205
+ sourceRef,
206
+ records: [record],
207
+ };
208
+ }
209
+ export const stripePlugin = {
210
+ key: "stripe",
211
+ displayName: "Stripe Billing",
212
+ description: "Normalizes Stripe Billing subscription webhook events and syncs verified subscriptions into canonical records.",
213
+ capabilities: ["webhooks", "subscription-sync", "billing"],
214
+ async provisionPlan(input, context) {
215
+ return provisionStripePlan(input, context.config);
216
+ },
217
+ async deprovisionPlan(input, context) {
218
+ return deprovisionStripePlan(input, context.config, context.result);
219
+ },
220
+ async verifyWebhook(envelope, context) {
221
+ const stripeVerification = verifyStripeWebhook(envelope, context.config);
222
+ if (stripeVerification) {
223
+ return stripeVerification;
224
+ }
225
+ return verifyTrustedRelayWebhook(envelope, context.config);
226
+ },
227
+ async parseWebhook(envelope) {
228
+ const payload = parsePayload(envelope.body);
229
+ if (typeof payload.status === "string") {
230
+ return toNormalizedEvent(payload);
231
+ }
232
+ if (typeof payload.type === "string") {
233
+ return toStripeEvent(payload);
234
+ }
235
+ throw new Error("Stripe plugin expects either a normalized payload with status or a Stripe event payload with type.");
236
+ },
237
+ };
238
+ //# sourceMappingURL=stripe.js.map