@classytic/revenue 1.1.2 → 1.1.3

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 (89) hide show
  1. package/README.md +8 -7
  2. package/dist/application/services/index.d.mts +4 -0
  3. package/dist/application/services/index.mjs +3 -0
  4. package/dist/base-CsTlVQJe.d.mts +136 -0
  5. package/dist/base-DCoyIUj6.mjs +152 -0
  6. package/dist/category-resolver-DV83N8ok.mjs +284 -0
  7. package/dist/commission-split-BzB8cd39.mjs +485 -0
  8. package/dist/core/events.d.mts +294 -0
  9. package/dist/core/events.mjs +100 -0
  10. package/dist/core/index.d.mts +9 -0
  11. package/dist/core/index.mjs +8 -0
  12. package/dist/enums/index.d.mts +157 -0
  13. package/dist/enums/index.mjs +56 -0
  14. package/dist/errors-CorrWz7A.d.mts +787 -0
  15. package/dist/escrow.enums-CZGrrdg7.mjs +101 -0
  16. package/dist/{escrow.enums-CE0VQsfe.d.ts → escrow.enums-DwdLuuve.d.mts} +30 -28
  17. package/dist/idempotency-DaYcUGY1.mjs +172 -0
  18. package/dist/index-Dsp7H5Wb.d.mts +471 -0
  19. package/dist/index.d.mts +9 -0
  20. package/dist/index.mjs +38 -0
  21. package/dist/infrastructure/plugins/{index.d.ts → index.d.mts} +81 -109
  22. package/dist/infrastructure/plugins/index.mjs +345 -0
  23. package/dist/money-CvrDOijQ.mjs +271 -0
  24. package/dist/money-DPG8AtJ8.d.mts +112 -0
  25. package/dist/{payment.enums-C1BiGlRa.d.ts → payment.enums-HAuAS9Pp.d.mts} +14 -13
  26. package/dist/payment.enums-tEFVa-Xp.mjs +69 -0
  27. package/dist/plugin-BbK0OVHy.d.mts +327 -0
  28. package/dist/plugin-Cd_V04Em.mjs +210 -0
  29. package/dist/providers/index.d.mts +3 -0
  30. package/dist/providers/index.mjs +3 -0
  31. package/dist/reconciliation/{index.d.ts → index.d.mts} +90 -112
  32. package/dist/reconciliation/index.mjs +192 -0
  33. package/dist/retry-HHCOXYdn.d.mts +186 -0
  34. package/dist/revenue-9scqKSef.mjs +553 -0
  35. package/dist/schemas/index.d.mts +2665 -0
  36. package/dist/schemas/index.mjs +717 -0
  37. package/dist/schemas/validation.d.mts +375 -0
  38. package/dist/schemas/validation.mjs +325 -0
  39. package/dist/{settlement.enums-ByC1x0ye.d.ts → settlement.enums-DFhkqZEY.d.mts} +31 -29
  40. package/dist/settlement.schema-D5uWB5tP.d.mts +344 -0
  41. package/dist/settlement.service-BxuiHpNC.d.mts +594 -0
  42. package/dist/settlement.service-CUxbUTzT.mjs +2510 -0
  43. package/dist/split.enums-BrjabxIX.mjs +86 -0
  44. package/dist/split.enums-DmskfLOM.d.mts +43 -0
  45. package/dist/tax-BoCt5cEd.d.mts +61 -0
  46. package/dist/tax-EQ15DO81.mjs +162 -0
  47. package/dist/transaction.enums-pCyMFT4Z.mjs +96 -0
  48. package/dist/utils/{index.d.ts → index.d.mts} +91 -161
  49. package/dist/utils/index.mjs +346 -0
  50. package/package.json +38 -36
  51. package/dist/application/services/index.d.ts +0 -6
  52. package/dist/application/services/index.js +0 -3288
  53. package/dist/application/services/index.js.map +0 -1
  54. package/dist/core/events.d.ts +0 -455
  55. package/dist/core/events.js +0 -122
  56. package/dist/core/events.js.map +0 -1
  57. package/dist/core/index.d.ts +0 -13
  58. package/dist/core/index.js +0 -4591
  59. package/dist/core/index.js.map +0 -1
  60. package/dist/enums/index.d.ts +0 -159
  61. package/dist/enums/index.js +0 -296
  62. package/dist/enums/index.js.map +0 -1
  63. package/dist/index-DxIK0UmZ.d.ts +0 -633
  64. package/dist/index-EnfKzDbs.d.ts +0 -806
  65. package/dist/index-cLJBLUvx.d.ts +0 -478
  66. package/dist/index.d.ts +0 -43
  67. package/dist/index.js +0 -4864
  68. package/dist/index.js.map +0 -1
  69. package/dist/infrastructure/plugins/index.js +0 -292
  70. package/dist/infrastructure/plugins/index.js.map +0 -1
  71. package/dist/money-widWVD7r.d.ts +0 -111
  72. package/dist/plugin-Bb9HOE10.d.ts +0 -336
  73. package/dist/providers/index.d.ts +0 -145
  74. package/dist/providers/index.js +0 -141
  75. package/dist/providers/index.js.map +0 -1
  76. package/dist/reconciliation/index.js +0 -140
  77. package/dist/reconciliation/index.js.map +0 -1
  78. package/dist/retry-D4hFUwVk.d.ts +0 -194
  79. package/dist/schemas/index.d.ts +0 -2655
  80. package/dist/schemas/index.js +0 -841
  81. package/dist/schemas/index.js.map +0 -1
  82. package/dist/schemas/validation.d.ts +0 -384
  83. package/dist/schemas/validation.js +0 -303
  84. package/dist/schemas/validation.js.map +0 -1
  85. package/dist/settlement.schema-CpamV7ZY.d.ts +0 -343
  86. package/dist/split.enums-DG3TxQf9.d.ts +0 -42
  87. package/dist/tax-CV8A0sxl.d.ts +0 -60
  88. package/dist/utils/index.js +0 -1202
  89. package/dist/utils/index.js.map +0 -1
package/README.md CHANGED
@@ -78,12 +78,13 @@ import type { ITransaction } from '@classytic/shared-types';
78
78
  ## Installation
79
79
 
80
80
  ```bash
81
- npm install @classytic/revenue mongoose zod
81
+ npm install @classytic/revenue @classytic/shared-types mongoose zod
82
82
  ```
83
83
 
84
84
  **Peer Dependencies:**
85
+ - `@classytic/shared-types` ^1.0.0
85
86
  - `mongoose` ^8.0.0 || ^9.0.0
86
- - `zod` ^4.1.13
87
+ - `zod` ^4.0.0
87
88
 
88
89
  **Provider Packages** (install as needed):
89
90
  ```bash
@@ -435,7 +436,7 @@ await revenue.escrow.split(transaction._id, {
435
436
  ```typescript
436
437
  import { EventBus } from '@classytic/revenue/events';
437
438
 
438
- revenue.events.on('payment:verified', async (event) => {
439
+ revenue.events.on('payment.verified', async (event) => {
439
440
  // Grant access
440
441
  await grantAccess(event.transaction.customerId);
441
442
 
@@ -443,14 +444,14 @@ revenue.events.on('payment:verified', async (event) => {
443
444
  await sendEmail(event.transaction.customerId, 'Payment received!');
444
445
  });
445
446
 
446
- revenue.events.on('subscription:cancelled', async (event) => {
447
+ revenue.events.on('subscription.cancelled', async (event) => {
447
448
  await removeAccess(event.subscription.customerId);
448
449
  });
449
450
 
450
451
  // Other events:
451
- // - monetization:created, payment:failed, payment:refunded
452
- // - subscription:activated, subscription:renewed
453
- // - escrow:held, escrow:released, settlement:completed
452
+ // - monetization.created, payment.failed, payment.refunded
453
+ // - subscription.activated, subscription.renewed
454
+ // - escrow.held, escrow.released, settlement.completed
454
455
  ```
455
456
 
456
457
  ### Tax Plugin (Optional)
@@ -0,0 +1,4 @@
1
+ import { a as MonetizationService, i as PaymentService, n as EscrowService, r as TransactionService, t as SettlementService } from "../../settlement.service-BxuiHpNC.mjs";
2
+ import "../../index-Dsp7H5Wb.mjs";
3
+ import "../../settlement.schema-D5uWB5tP.mjs";
4
+ export { EscrowService, MonetizationService, PaymentService, SettlementService, TransactionService };
@@ -0,0 +1,3 @@
1
+ import { a as MonetizationService, i as PaymentService, n as EscrowService, r as TransactionService, t as SettlementService } from "../../settlement.service-CUxbUTzT.mjs";
2
+
3
+ export { EscrowService, MonetizationService, PaymentService, SettlementService, TransactionService };
@@ -0,0 +1,136 @@
1
+ import { D as ProviderCapabilities, W as WebhookEventData, _ as PaymentIntentData, a as CreateIntentParams, b as PaymentResultData, k as RefundResultData } from "./index-Dsp7H5Wb.mjs";
2
+
3
+ //#region src/providers/base.d.ts
4
+ /**
5
+ * Payment Intent - standardized response from createIntent
6
+ */
7
+ declare class PaymentIntent implements PaymentIntentData {
8
+ readonly id: string;
9
+ readonly sessionId: string | null;
10
+ readonly paymentIntentId: string | null;
11
+ readonly provider: string;
12
+ readonly status: string;
13
+ readonly amount: number;
14
+ readonly currency?: string;
15
+ readonly metadata: Record<string, unknown>;
16
+ readonly clientSecret?: string;
17
+ readonly paymentUrl?: string;
18
+ readonly instructions?: string;
19
+ readonly raw?: unknown;
20
+ constructor(data: PaymentIntentData);
21
+ }
22
+ /**
23
+ * Payment Result - standardized response from verifyPayment
24
+ */
25
+ declare class PaymentResult implements PaymentResultData {
26
+ readonly id: string;
27
+ readonly provider: string;
28
+ readonly status: 'succeeded' | 'failed' | 'processing' | 'requires_action';
29
+ readonly amount?: number;
30
+ readonly currency?: string;
31
+ readonly paidAt?: Date;
32
+ readonly metadata: Record<string, unknown>;
33
+ readonly raw?: unknown;
34
+ constructor(data: PaymentResultData);
35
+ }
36
+ /**
37
+ * Refund Result - standardized response from refund
38
+ */
39
+ declare class RefundResult implements RefundResultData {
40
+ readonly id: string;
41
+ readonly provider: string;
42
+ readonly status: 'succeeded' | 'failed' | 'processing';
43
+ readonly amount?: number;
44
+ readonly currency?: string;
45
+ readonly refundedAt?: Date;
46
+ readonly reason?: string;
47
+ readonly metadata: Record<string, unknown>;
48
+ readonly raw?: unknown;
49
+ constructor(data: RefundResultData);
50
+ }
51
+ /**
52
+ * Webhook Event - standardized webhook event
53
+ */
54
+ declare class WebhookEvent implements WebhookEventData {
55
+ readonly id: string;
56
+ readonly provider: string;
57
+ readonly type: string;
58
+ readonly data: {
59
+ sessionId?: string;
60
+ paymentIntentId?: string;
61
+ [key: string]: unknown;
62
+ };
63
+ readonly createdAt?: Date;
64
+ readonly raw?: unknown;
65
+ constructor(data: WebhookEventData);
66
+ }
67
+ /**
68
+ * Base Payment Provider
69
+ * All payment providers must extend this class
70
+ */
71
+ declare abstract class PaymentProvider {
72
+ readonly config: Record<string, unknown>;
73
+ readonly name: string;
74
+ /** Default currency - injected by Revenue when provider is registered */
75
+ private _defaultCurrency;
76
+ constructor(config?: Record<string, unknown>);
77
+ /**
78
+ * Get the default currency for this provider
79
+ * Used when creating PaymentIntent, PaymentResult, RefundResult without explicit currency
80
+ */
81
+ get defaultCurrency(): string;
82
+ /**
83
+ * Set the default currency (called by Revenue when registering provider)
84
+ * @internal
85
+ */
86
+ setDefaultCurrency(currency: string): void;
87
+ /**
88
+ * Create a payment intent
89
+ * @param params - Payment parameters
90
+ * @returns Promise<PaymentIntent>
91
+ */
92
+ abstract createIntent(params: CreateIntentParams): Promise<PaymentIntent>;
93
+ /**
94
+ * Verify a payment
95
+ * @param intentId - Payment intent ID
96
+ * @returns Promise<PaymentResult>
97
+ */
98
+ abstract verifyPayment(intentId: string): Promise<PaymentResult>;
99
+ /**
100
+ * Get payment status
101
+ * @param intentId - Payment intent ID
102
+ * @returns Promise<PaymentResult>
103
+ */
104
+ abstract getStatus(intentId: string): Promise<PaymentResult>;
105
+ /**
106
+ * Refund a payment
107
+ * @param paymentId - Payment ID
108
+ * @param amount - Amount to refund (optional, full refund if not provided)
109
+ * @param options - Refund options
110
+ * @returns Promise<RefundResult>
111
+ */
112
+ abstract refund(paymentId: string, amount?: number | null, options?: {
113
+ reason?: string;
114
+ }): Promise<RefundResult>;
115
+ /**
116
+ * Handle webhook from provider
117
+ * @param payload - Webhook payload
118
+ * @param headers - Request headers (for signature verification)
119
+ * @returns Promise<WebhookEvent>
120
+ */
121
+ abstract handleWebhook(payload: unknown, headers?: Record<string, string>): Promise<WebhookEvent>;
122
+ /**
123
+ * Verify webhook signature (optional)
124
+ * @param payload - Webhook payload
125
+ * @param signature - Webhook signature
126
+ * @returns boolean
127
+ */
128
+ verifyWebhookSignature(_payload: unknown, _signature: string): boolean;
129
+ /**
130
+ * Get provider capabilities
131
+ * @returns ProviderCapabilities
132
+ */
133
+ getCapabilities(): ProviderCapabilities;
134
+ }
135
+ //#endregion
136
+ export { WebhookEvent as a, RefundResult as i, PaymentProvider as n, PaymentResult as r, PaymentIntent as t };
@@ -0,0 +1,152 @@
1
+ //#region src/providers/base.ts
2
+ /**
3
+ * Payment Intent - standardized response from createIntent
4
+ */
5
+ var PaymentIntent = class {
6
+ id;
7
+ sessionId;
8
+ paymentIntentId;
9
+ provider;
10
+ status;
11
+ amount;
12
+ currency;
13
+ metadata;
14
+ clientSecret;
15
+ paymentUrl;
16
+ instructions;
17
+ raw;
18
+ constructor(data) {
19
+ this.id = data.id;
20
+ this.sessionId = data.sessionId ?? null;
21
+ this.paymentIntentId = data.paymentIntentId ?? null;
22
+ this.provider = data.provider;
23
+ this.status = data.status;
24
+ this.amount = data.amount;
25
+ this.currency = data.currency;
26
+ this.metadata = data.metadata ?? {};
27
+ this.clientSecret = data.clientSecret;
28
+ this.paymentUrl = data.paymentUrl;
29
+ this.instructions = data.instructions;
30
+ this.raw = data.raw;
31
+ }
32
+ };
33
+ /**
34
+ * Payment Result - standardized response from verifyPayment
35
+ */
36
+ var PaymentResult = class {
37
+ id;
38
+ provider;
39
+ status;
40
+ amount;
41
+ currency;
42
+ paidAt;
43
+ metadata;
44
+ raw;
45
+ constructor(data) {
46
+ this.id = data.id;
47
+ this.provider = data.provider;
48
+ this.status = data.status;
49
+ this.amount = data.amount;
50
+ this.currency = data.currency;
51
+ this.paidAt = data.paidAt;
52
+ this.metadata = data.metadata ?? {};
53
+ this.raw = data.raw;
54
+ }
55
+ };
56
+ /**
57
+ * Refund Result - standardized response from refund
58
+ */
59
+ var RefundResult = class {
60
+ id;
61
+ provider;
62
+ status;
63
+ amount;
64
+ currency;
65
+ refundedAt;
66
+ reason;
67
+ metadata;
68
+ raw;
69
+ constructor(data) {
70
+ this.id = data.id;
71
+ this.provider = data.provider;
72
+ this.status = data.status;
73
+ this.amount = data.amount;
74
+ this.currency = data.currency;
75
+ this.refundedAt = data.refundedAt;
76
+ this.reason = data.reason;
77
+ this.metadata = data.metadata ?? {};
78
+ this.raw = data.raw;
79
+ }
80
+ };
81
+ /**
82
+ * Webhook Event - standardized webhook event
83
+ */
84
+ var WebhookEvent = class {
85
+ id;
86
+ provider;
87
+ type;
88
+ data;
89
+ createdAt;
90
+ raw;
91
+ constructor(data) {
92
+ this.id = data.id;
93
+ this.provider = data.provider;
94
+ this.type = data.type;
95
+ this.data = data.data;
96
+ this.createdAt = data.createdAt;
97
+ this.raw = data.raw;
98
+ }
99
+ };
100
+ /**
101
+ * Base Payment Provider
102
+ * All payment providers must extend this class
103
+ */
104
+ var PaymentProvider = class {
105
+ config;
106
+ name;
107
+ /** Default currency - injected by Revenue when provider is registered */
108
+ _defaultCurrency = "USD";
109
+ constructor(config = {}) {
110
+ this.config = config;
111
+ this.name = "base";
112
+ if (config.defaultCurrency && typeof config.defaultCurrency === "string") this._defaultCurrency = config.defaultCurrency;
113
+ }
114
+ /**
115
+ * Get the default currency for this provider
116
+ * Used when creating PaymentIntent, PaymentResult, RefundResult without explicit currency
117
+ */
118
+ get defaultCurrency() {
119
+ return this._defaultCurrency;
120
+ }
121
+ /**
122
+ * Set the default currency (called by Revenue when registering provider)
123
+ * @internal
124
+ */
125
+ setDefaultCurrency(currency) {
126
+ this._defaultCurrency = currency;
127
+ }
128
+ /**
129
+ * Verify webhook signature (optional)
130
+ * @param payload - Webhook payload
131
+ * @param signature - Webhook signature
132
+ * @returns boolean
133
+ */
134
+ verifyWebhookSignature(_payload, _signature) {
135
+ return true;
136
+ }
137
+ /**
138
+ * Get provider capabilities
139
+ * @returns ProviderCapabilities
140
+ */
141
+ getCapabilities() {
142
+ return {
143
+ supportsWebhooks: false,
144
+ supportsRefunds: false,
145
+ supportsPartialRefunds: false,
146
+ requiresManualVerification: true
147
+ };
148
+ }
149
+ };
150
+
151
+ //#endregion
152
+ export { WebhookEvent as a, RefundResult as i, PaymentProvider as n, PaymentResult as r, PaymentIntent as t };
@@ -0,0 +1,284 @@
1
+ import { t as LIBRARY_CATEGORIES } from "./transaction.enums-pCyMFT4Z.mjs";
2
+
3
+ //#region src/core/errors.ts
4
+ /**
5
+ * Base Revenue Error
6
+ */
7
+ var RevenueError = class extends Error {
8
+ code;
9
+ retryable;
10
+ metadata;
11
+ constructor(message, code, options = {}) {
12
+ super(message);
13
+ this.name = this.constructor.name;
14
+ this.code = code;
15
+ this.retryable = options.retryable ?? false;
16
+ this.metadata = options.metadata ?? {};
17
+ Error.captureStackTrace(this, this.constructor);
18
+ }
19
+ toJSON() {
20
+ return {
21
+ name: this.name,
22
+ message: this.message,
23
+ code: this.code,
24
+ retryable: this.retryable,
25
+ metadata: this.metadata
26
+ };
27
+ }
28
+ };
29
+ /**
30
+ * Configuration Errors
31
+ */
32
+ var ConfigurationError = class extends RevenueError {
33
+ constructor(message, metadata = {}) {
34
+ super(message, "CONFIGURATION_ERROR", {
35
+ retryable: false,
36
+ metadata
37
+ });
38
+ }
39
+ };
40
+ var ModelNotRegisteredError = class extends ConfigurationError {
41
+ constructor(modelName) {
42
+ super(`Model "${modelName}" is not registered. Register it via createRevenue({ models: { ${modelName}: ... } })`, { modelName });
43
+ }
44
+ };
45
+ /**
46
+ * Provider Errors
47
+ */
48
+ var ProviderError = class extends RevenueError {
49
+ constructor(message, code, options = {}) {
50
+ super(message, code, options);
51
+ }
52
+ };
53
+ var ProviderNotFoundError = class extends ProviderError {
54
+ constructor(providerName, availableProviders = []) {
55
+ super(`Payment provider "${providerName}" not found. Available: ${availableProviders.join(", ")}`, "PROVIDER_NOT_FOUND", {
56
+ retryable: false,
57
+ metadata: {
58
+ providerName,
59
+ availableProviders
60
+ }
61
+ });
62
+ }
63
+ };
64
+ var ProviderCapabilityError = class extends ProviderError {
65
+ constructor(providerName, capability) {
66
+ super(`Provider "${providerName}" does not support ${capability}`, "PROVIDER_CAPABILITY_NOT_SUPPORTED", {
67
+ retryable: false,
68
+ metadata: {
69
+ providerName,
70
+ capability
71
+ }
72
+ });
73
+ }
74
+ };
75
+ var PaymentIntentCreationError = class extends ProviderError {
76
+ constructor(providerName, originalError) {
77
+ super(`Failed to create payment intent with provider "${providerName}": ${originalError.message}`, "PAYMENT_INTENT_CREATION_FAILED", {
78
+ retryable: true,
79
+ metadata: {
80
+ providerName,
81
+ originalError: originalError.message
82
+ }
83
+ });
84
+ }
85
+ };
86
+ var PaymentVerificationError = class extends ProviderError {
87
+ constructor(paymentIntentId, reason) {
88
+ super(`Payment verification failed for intent "${paymentIntentId}": ${reason}`, "PAYMENT_VERIFICATION_FAILED", {
89
+ retryable: true,
90
+ metadata: {
91
+ paymentIntentId,
92
+ reason
93
+ }
94
+ });
95
+ }
96
+ };
97
+ /**
98
+ * Resource Not Found Errors
99
+ */
100
+ var NotFoundError = class extends RevenueError {
101
+ constructor(message, code, metadata = {}) {
102
+ super(message, code, {
103
+ retryable: false,
104
+ metadata
105
+ });
106
+ }
107
+ };
108
+ var SubscriptionNotFoundError = class extends NotFoundError {
109
+ constructor(subscriptionId) {
110
+ super(`Subscription not found: ${subscriptionId}`, "SUBSCRIPTION_NOT_FOUND", { subscriptionId });
111
+ }
112
+ };
113
+ var TransactionNotFoundError = class extends NotFoundError {
114
+ constructor(transactionId) {
115
+ super(`Transaction not found: ${transactionId}`, "TRANSACTION_NOT_FOUND", { transactionId });
116
+ }
117
+ };
118
+ /**
119
+ * Validation Errors
120
+ */
121
+ var ValidationError = class extends RevenueError {
122
+ constructor(message, metadata = {}) {
123
+ super(message, "VALIDATION_ERROR", {
124
+ retryable: false,
125
+ metadata
126
+ });
127
+ }
128
+ };
129
+ var InvalidAmountError = class extends ValidationError {
130
+ constructor(amount, message) {
131
+ super(message ?? `Invalid amount: ${amount}. Amount must be non-negative`, { amount });
132
+ }
133
+ };
134
+ var MissingRequiredFieldError = class extends ValidationError {
135
+ constructor(fieldName) {
136
+ super(`Missing required field: ${fieldName}`, { fieldName });
137
+ }
138
+ };
139
+ /**
140
+ * State Errors
141
+ */
142
+ var StateError = class extends RevenueError {
143
+ constructor(message, code, metadata = {}) {
144
+ super(message, code, {
145
+ retryable: false,
146
+ metadata
147
+ });
148
+ }
149
+ };
150
+ var AlreadyVerifiedError = class extends StateError {
151
+ constructor(transactionId) {
152
+ super(`Transaction ${transactionId} is already verified`, "ALREADY_VERIFIED", { transactionId });
153
+ }
154
+ };
155
+ var InvalidStateTransitionError = class extends StateError {
156
+ constructor(resourceType, resourceId, fromState, toState) {
157
+ super(`Invalid state transition for ${resourceType} ${resourceId}: ${fromState} → ${toState}`, "INVALID_STATE_TRANSITION", {
158
+ resourceType,
159
+ resourceId,
160
+ fromState,
161
+ toState
162
+ });
163
+ }
164
+ };
165
+ var SubscriptionNotActiveError = class extends StateError {
166
+ constructor(subscriptionId, message) {
167
+ super(message ?? `Subscription ${subscriptionId} is not active`, "SUBSCRIPTION_NOT_ACTIVE", { subscriptionId });
168
+ }
169
+ };
170
+ /**
171
+ * Operation Errors
172
+ */
173
+ var OperationError = class extends RevenueError {
174
+ constructor(message, code, options = {}) {
175
+ super(message, code, options);
176
+ }
177
+ };
178
+ var RefundNotSupportedError = class extends OperationError {
179
+ constructor(providerName) {
180
+ super(`Refunds are not supported by provider "${providerName}"`, "REFUND_NOT_SUPPORTED", {
181
+ retryable: false,
182
+ metadata: { providerName }
183
+ });
184
+ }
185
+ };
186
+ var RefundError = class extends OperationError {
187
+ constructor(transactionId, reason) {
188
+ super(`Refund failed for transaction ${transactionId}: ${reason}`, "REFUND_FAILED", {
189
+ retryable: true,
190
+ metadata: {
191
+ transactionId,
192
+ reason
193
+ }
194
+ });
195
+ }
196
+ };
197
+ /**
198
+ * Error Code Constants
199
+ */
200
+ const ERROR_CODES = {
201
+ CONFIGURATION_ERROR: "CONFIGURATION_ERROR",
202
+ MODEL_NOT_REGISTERED: "MODEL_NOT_REGISTERED",
203
+ PROVIDER_NOT_FOUND: "PROVIDER_NOT_FOUND",
204
+ PROVIDER_CAPABILITY_NOT_SUPPORTED: "PROVIDER_CAPABILITY_NOT_SUPPORTED",
205
+ PAYMENT_INTENT_CREATION_FAILED: "PAYMENT_INTENT_CREATION_FAILED",
206
+ PAYMENT_VERIFICATION_FAILED: "PAYMENT_VERIFICATION_FAILED",
207
+ SUBSCRIPTION_NOT_FOUND: "SUBSCRIPTION_NOT_FOUND",
208
+ TRANSACTION_NOT_FOUND: "TRANSACTION_NOT_FOUND",
209
+ VALIDATION_ERROR: "VALIDATION_ERROR",
210
+ INVALID_AMOUNT: "INVALID_AMOUNT",
211
+ MISSING_REQUIRED_FIELD: "MISSING_REQUIRED_FIELD",
212
+ ALREADY_VERIFIED: "ALREADY_VERIFIED",
213
+ INVALID_STATE_TRANSITION: "INVALID_STATE_TRANSITION",
214
+ SUBSCRIPTION_NOT_ACTIVE: "SUBSCRIPTION_NOT_ACTIVE",
215
+ REFUND_NOT_SUPPORTED: "REFUND_NOT_SUPPORTED",
216
+ REFUND_FAILED: "REFUND_FAILED"
217
+ };
218
+ /**
219
+ * Check if error is retryable
220
+ */
221
+ function isRetryable(error) {
222
+ return error instanceof RevenueError && error.retryable;
223
+ }
224
+ /**
225
+ * Check if error is from revenue package
226
+ */
227
+ function isRevenueError(error) {
228
+ return error instanceof RevenueError;
229
+ }
230
+
231
+ //#endregion
232
+ //#region src/shared/utils/validators/category-resolver.ts
233
+ /**
234
+ * Category Resolver Utility
235
+ * @classytic/revenue
236
+ *
237
+ * Resolves transaction category based on categoryMappings
238
+ */
239
+ /**
240
+ * Resolve category for a transaction based on entity and monetizationType
241
+ *
242
+ * Resolution Logic:
243
+ * 1. If categoryMappings[entity] exists → use it
244
+ * 2. Otherwise → fall back to default library category
245
+ *
246
+ * @param entity - The logical entity/identifier (e.g., 'Order', 'PlatformSubscription', 'Membership')
247
+ * NOTE: This is NOT a database model name - it's just a logical identifier
248
+ * @param monetizationType - The monetization type ('subscription', 'purchase', 'free')
249
+ * @param categoryMappings - User-defined category mappings from config
250
+ * @returns Category name for the transaction
251
+ *
252
+ * @example
253
+ * // With mapping defined
254
+ * resolveCategory('Order', 'subscription', { Order: 'order_subscription' })
255
+ * // Returns: 'order_subscription'
256
+ *
257
+ * @example
258
+ * // Without mapping, falls back to library default
259
+ * resolveCategory('Order', 'subscription', {})
260
+ * // Returns: 'subscription'
261
+ *
262
+ * @example
263
+ * // Different entities with different mappings
264
+ * const mappings = {
265
+ * Order: 'order_subscription',
266
+ * PlatformSubscription: 'platform_subscription',
267
+ * TenantUpgrade: 'tenant_upgrade',
268
+ * Membership: 'gym_membership',
269
+ * Enrollment: 'course_enrollment',
270
+ * };
271
+ * resolveCategory('PlatformSubscription', 'subscription', mappings)
272
+ * // Returns: 'platform_subscription'
273
+ */
274
+ function resolveCategory(entity, monetizationType, categoryMappings = {}) {
275
+ if (entity && categoryMappings[entity]) return categoryMappings[entity];
276
+ switch (monetizationType) {
277
+ case "subscription": return LIBRARY_CATEGORIES.SUBSCRIPTION;
278
+ case "purchase": return LIBRARY_CATEGORIES.PURCHASE;
279
+ default: return LIBRARY_CATEGORIES.SUBSCRIPTION;
280
+ }
281
+ }
282
+
283
+ //#endregion
284
+ export { ValidationError as C, TransactionNotFoundError as S, isRevenueError as T, RefundNotSupportedError as _, InvalidAmountError as a, SubscriptionNotActiveError as b, ModelNotRegisteredError as c, PaymentIntentCreationError as d, PaymentVerificationError as f, RefundError as g, ProviderNotFoundError as h, ERROR_CODES as i, NotFoundError as l, ProviderError as m, AlreadyVerifiedError as n, InvalidStateTransitionError as o, ProviderCapabilityError as p, ConfigurationError as r, MissingRequiredFieldError as s, resolveCategory as t, OperationError as u, RevenueError as v, isRetryable as w, SubscriptionNotFoundError as x, StateError as y };