@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.
- package/README.md +2 -2
- package/dist/contracts.d.ts +26 -1
- package/dist/contracts.d.ts.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +27 -0
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +61 -0
- package/dist/logger.js.map +1 -1
- package/dist/plugins/builtin-plugins.d.ts.map +1 -1
- package/dist/plugins/builtin-plugins.js +2 -1
- package/dist/plugins/builtin-plugins.js.map +1 -1
- package/dist/providers/stripe/plugin/stripe-plan-sync.d.ts +4 -0
- package/dist/providers/stripe/plugin/stripe-plan-sync.d.ts.map +1 -0
- package/dist/providers/stripe/plugin/stripe-plan-sync.js +83 -0
- package/dist/providers/stripe/plugin/stripe-plan-sync.js.map +1 -0
- package/dist/providers/stripe/plugin/stripe.d.ts +20 -0
- package/dist/providers/stripe/plugin/stripe.d.ts.map +1 -0
- package/dist/providers/stripe/plugin/stripe.js +238 -0
- package/dist/providers/stripe/plugin/stripe.js.map +1 -0
- package/dist/providers/stripe/security/stripe-signature-verification.d.ts +3 -0
- package/dist/providers/stripe/security/stripe-signature-verification.d.ts.map +1 -0
- package/dist/providers/stripe/security/stripe-signature-verification.js +162 -0
- package/dist/providers/stripe/security/stripe-signature-verification.js.map +1 -0
- package/dist/providers/stripe/services/stripe-subscription-verification-service.d.ts +3 -0
- package/dist/providers/stripe/services/stripe-subscription-verification-service.d.ts.map +1 -0
- package/dist/providers/stripe/services/stripe-subscription-verification-service.js +65 -0
- package/dist/providers/stripe/services/stripe-subscription-verification-service.js.map +1 -0
- package/dist/services/managed-subscription-service.d.ts +2 -1
- package/dist/services/managed-subscription-service.d.ts.map +1 -1
- package/dist/services/managed-subscription-service.js +7 -1
- package/dist/services/managed-subscription-service.js.map +1 -1
- package/dist/services/plan-provisioning-service.d.ts +2 -1
- package/dist/services/plan-provisioning-service.d.ts.map +1 -1
- package/dist/services/plan-provisioning-service.js +16 -1
- package/dist/services/plan-provisioning-service.js.map +1 -1
- package/dist/services/provider-subscription-sync-service.d.ts +2 -1
- package/dist/services/provider-subscription-sync-service.d.ts.map +1 -1
- package/dist/services/provider-subscription-sync-service.js +7 -1
- package/dist/services/provider-subscription-sync-service.js.map +1 -1
- package/dist/submesh.d.ts +15 -1
- package/dist/submesh.d.ts.map +1 -1
- package/dist/submesh.js +79 -12
- package/dist/submesh.js.map +1 -1
- package/package.json +10 -10
- 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
|
package/dist/contracts.d.ts
CHANGED
|
@@ -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;
|
package/dist/contracts.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"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
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
package/dist/logger.d.ts.map
CHANGED
|
@@ -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
|
package/dist/logger.js.map
CHANGED
|
@@ -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;
|
|
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;
|
|
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
|