@classytic/revenue 1.0.6 → 1.1.2
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 +581 -633
- package/dist/application/services/index.d.ts +6 -0
- package/dist/application/services/index.js +3288 -0
- package/dist/application/services/index.js.map +1 -0
- package/dist/core/events.d.ts +455 -0
- package/dist/core/events.js +122 -0
- package/dist/core/events.js.map +1 -0
- package/dist/core/index.d.ts +12 -889
- package/dist/core/index.js +2372 -786
- package/dist/core/index.js.map +1 -1
- package/dist/enums/index.d.ts +29 -8
- package/dist/enums/index.js +41 -8
- package/dist/enums/index.js.map +1 -1
- package/dist/escrow.enums-CE0VQsfe.d.ts +76 -0
- package/dist/{index-BnEXsnLJ.d.ts → index-DxIK0UmZ.d.ts} +281 -26
- package/dist/index-EnfKzDbs.d.ts +806 -0
- package/dist/{index-C5SsOrV0.d.ts → index-cLJBLUvx.d.ts} +55 -111
- package/dist/index.d.ts +16 -16
- package/dist/index.js +2558 -2192
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/plugins/index.d.ts +267 -0
- package/dist/infrastructure/plugins/index.js +292 -0
- package/dist/infrastructure/plugins/index.js.map +1 -0
- package/dist/money-widWVD7r.d.ts +111 -0
- package/dist/payment.enums-C1BiGlRa.d.ts +69 -0
- package/dist/plugin-Bb9HOE10.d.ts +336 -0
- package/dist/providers/index.d.ts +19 -6
- package/dist/providers/index.js +22 -3
- package/dist/providers/index.js.map +1 -1
- package/dist/reconciliation/index.d.ts +215 -0
- package/dist/reconciliation/index.js +140 -0
- package/dist/reconciliation/index.js.map +1 -0
- package/dist/{retry-80lBCmSe.d.ts → retry-D4hFUwVk.d.ts} +1 -41
- package/dist/schemas/index.d.ts +1653 -49
- package/dist/schemas/index.js +233 -19
- package/dist/schemas/index.js.map +1 -1
- package/dist/schemas/validation.d.ts +4 -4
- package/dist/schemas/validation.js +16 -15
- package/dist/schemas/validation.js.map +1 -1
- package/dist/settlement.enums-ByC1x0ye.d.ts +130 -0
- package/dist/settlement.schema-CpamV7ZY.d.ts +343 -0
- package/dist/split.enums-DG3TxQf9.d.ts +42 -0
- package/dist/tax-CV8A0sxl.d.ts +60 -0
- package/dist/utils/index.d.ts +487 -13
- package/dist/utils/index.js +351 -289
- package/dist/utils/index.js.map +1 -1
- package/package.json +22 -9
- package/dist/actions-Ctf2XUL-.d.ts +0 -519
- package/dist/payment.enums-B_RwB8iR.d.ts +0 -184
- package/dist/services/index.d.ts +0 -3
- package/dist/services/index.js +0 -1702
- package/dist/services/index.js.map +0 -1
- package/dist/split.schema-DLVF3XBI.d.ts +0 -1122
- package/dist/transaction.enums-7uBnuswI.d.ts +0 -87
package/dist/schemas/index.js
CHANGED
|
@@ -8,16 +8,6 @@ var baseMetadataSchema = new Schema(
|
|
|
8
8
|
},
|
|
9
9
|
{ _id: false, strict: false }
|
|
10
10
|
);
|
|
11
|
-
var referenceSchema = {
|
|
12
|
-
referenceId: {
|
|
13
|
-
type: Schema.Types.ObjectId,
|
|
14
|
-
refPath: "referenceModel"
|
|
15
|
-
},
|
|
16
|
-
referenceModel: {
|
|
17
|
-
type: String,
|
|
18
|
-
enum: ["Subscription", "Order", "Membership", "Booking", "Invoice"]
|
|
19
|
-
}
|
|
20
|
-
};
|
|
21
11
|
var gatewaySchema = new Schema(
|
|
22
12
|
{
|
|
23
13
|
type: {
|
|
@@ -48,12 +38,12 @@ var gatewaySchema = new Schema(
|
|
|
48
38
|
var gateway_schema_default = gatewaySchema;
|
|
49
39
|
|
|
50
40
|
// src/enums/transaction.enums.ts
|
|
51
|
-
var
|
|
52
|
-
|
|
53
|
-
|
|
41
|
+
var TRANSACTION_FLOW = {
|
|
42
|
+
INFLOW: "inflow",
|
|
43
|
+
OUTFLOW: "outflow"
|
|
54
44
|
};
|
|
55
|
-
var
|
|
56
|
-
|
|
45
|
+
var TRANSACTION_FLOW_VALUES = Object.values(
|
|
46
|
+
TRANSACTION_FLOW
|
|
57
47
|
);
|
|
58
48
|
var TRANSACTION_STATUS = {
|
|
59
49
|
PENDING: "pending",
|
|
@@ -78,7 +68,7 @@ var LIBRARY_CATEGORIES = {
|
|
|
78
68
|
var LIBRARY_CATEGORY_VALUES = Object.values(
|
|
79
69
|
LIBRARY_CATEGORIES
|
|
80
70
|
);
|
|
81
|
-
new Set(
|
|
71
|
+
new Set(TRANSACTION_FLOW_VALUES);
|
|
82
72
|
new Set(
|
|
83
73
|
TRANSACTION_STATUS_VALUES
|
|
84
74
|
);
|
|
@@ -115,6 +105,7 @@ var SUBSCRIPTION_STATUS = {
|
|
|
115
105
|
CANCELLED: "cancelled",
|
|
116
106
|
EXPIRED: "expired",
|
|
117
107
|
PENDING: "pending",
|
|
108
|
+
PENDING_RENEWAL: "pending_renewal",
|
|
118
109
|
INACTIVE: "inactive"
|
|
119
110
|
};
|
|
120
111
|
var SUBSCRIPTION_STATUS_VALUES = Object.values(
|
|
@@ -205,6 +196,27 @@ new Set(SPLIT_TYPE_VALUES);
|
|
|
205
196
|
new Set(SPLIT_STATUS_VALUES);
|
|
206
197
|
new Set(PAYOUT_METHOD_VALUES);
|
|
207
198
|
|
|
199
|
+
// src/enums/settlement.enums.ts
|
|
200
|
+
var SETTLEMENT_STATUS = {
|
|
201
|
+
PENDING: "pending",
|
|
202
|
+
PROCESSING: "processing",
|
|
203
|
+
COMPLETED: "completed",
|
|
204
|
+
FAILED: "failed",
|
|
205
|
+
CANCELLED: "cancelled"
|
|
206
|
+
};
|
|
207
|
+
var SETTLEMENT_STATUS_VALUES = Object.values(SETTLEMENT_STATUS);
|
|
208
|
+
var SETTLEMENT_TYPE = {
|
|
209
|
+
SPLIT_PAYOUT: "split_payout",
|
|
210
|
+
// Payout to split recipient (vendor/affiliate)
|
|
211
|
+
PLATFORM_WITHDRAWAL: "platform_withdrawal",
|
|
212
|
+
// Platform withdraws commission
|
|
213
|
+
MANUAL_PAYOUT: "manual_payout",
|
|
214
|
+
// Manual vendor payout
|
|
215
|
+
ESCROW_RELEASE: "escrow_release"
|
|
216
|
+
// Release from escrow hold
|
|
217
|
+
};
|
|
218
|
+
var SETTLEMENT_TYPE_VALUES = Object.values(SETTLEMENT_TYPE);
|
|
219
|
+
|
|
208
220
|
// src/schemas/transaction/payment.schema.ts
|
|
209
221
|
var paymentEntrySchema = new Schema(
|
|
210
222
|
{
|
|
@@ -379,13 +391,55 @@ var commissionSchema = new Schema(
|
|
|
379
391
|
{ _id: false }
|
|
380
392
|
);
|
|
381
393
|
var commission_schema_default = commissionSchema;
|
|
394
|
+
var taxBreakdownSchema = new Schema({
|
|
395
|
+
/** Is tax applicable for this transaction? */
|
|
396
|
+
isApplicable: {
|
|
397
|
+
type: Boolean,
|
|
398
|
+
default: false
|
|
399
|
+
},
|
|
400
|
+
/** Tax rate used (0-1, e.g., 0.15 = 15%) */
|
|
401
|
+
rate: {
|
|
402
|
+
type: Number,
|
|
403
|
+
default: 0,
|
|
404
|
+
min: 0,
|
|
405
|
+
max: 1
|
|
406
|
+
},
|
|
407
|
+
/** Base amount (before tax) */
|
|
408
|
+
baseAmount: {
|
|
409
|
+
type: Number,
|
|
410
|
+
default: 0,
|
|
411
|
+
min: 0
|
|
412
|
+
},
|
|
413
|
+
/** Tax amount */
|
|
414
|
+
taxAmount: {
|
|
415
|
+
type: Number,
|
|
416
|
+
default: 0,
|
|
417
|
+
min: 0
|
|
418
|
+
},
|
|
419
|
+
/** Total amount (base + tax) */
|
|
420
|
+
totalAmount: {
|
|
421
|
+
type: Number,
|
|
422
|
+
default: 0,
|
|
423
|
+
min: 0
|
|
424
|
+
},
|
|
425
|
+
/** Were prices tax-inclusive? */
|
|
426
|
+
pricesIncludeTax: {
|
|
427
|
+
type: Boolean
|
|
428
|
+
},
|
|
429
|
+
/** Tax type: collected (revenue), paid (expense), or exempt */
|
|
430
|
+
type: {
|
|
431
|
+
type: String,
|
|
432
|
+
enum: ["collected", "paid", "exempt"]
|
|
433
|
+
}
|
|
434
|
+
}, { _id: false });
|
|
435
|
+
var tax_schema_default = taxBreakdownSchema;
|
|
382
436
|
|
|
383
437
|
// src/schemas/transaction/index.ts
|
|
384
438
|
var transaction_default = {
|
|
385
439
|
baseMetadataSchema,
|
|
386
|
-
referenceSchema,
|
|
387
440
|
gatewaySchema: gateway_schema_default,
|
|
388
441
|
commissionSchema: commission_schema_default,
|
|
442
|
+
taxBreakdownSchema: tax_schema_default,
|
|
389
443
|
...payment_schema_default
|
|
390
444
|
};
|
|
391
445
|
var planSchema = new Schema(
|
|
@@ -613,15 +667,175 @@ var split_schema_default = splitSchema;
|
|
|
613
667
|
var split_default = {
|
|
614
668
|
splitSchema: split_schema_default
|
|
615
669
|
};
|
|
670
|
+
var settlementSchema = new Schema({
|
|
671
|
+
// ============ IDENTIFICATION ============
|
|
672
|
+
organizationId: {
|
|
673
|
+
type: Schema.Types.ObjectId,
|
|
674
|
+
required: true,
|
|
675
|
+
index: true
|
|
676
|
+
// The organization responsible for this payout
|
|
677
|
+
},
|
|
678
|
+
recipientId: {
|
|
679
|
+
type: Schema.Types.ObjectId,
|
|
680
|
+
required: true,
|
|
681
|
+
index: true
|
|
682
|
+
// Who receives the payout (vendor, affiliate, partner)
|
|
683
|
+
},
|
|
684
|
+
recipientType: {
|
|
685
|
+
type: String,
|
|
686
|
+
enum: ["platform", "organization", "user", "affiliate", "partner"],
|
|
687
|
+
required: true
|
|
688
|
+
// Type of recipient
|
|
689
|
+
},
|
|
690
|
+
// ============ CLASSIFICATION ============
|
|
691
|
+
type: {
|
|
692
|
+
type: String,
|
|
693
|
+
enum: SETTLEMENT_TYPE_VALUES,
|
|
694
|
+
required: true
|
|
695
|
+
// split_payout | platform_withdrawal | manual_payout | escrow_release
|
|
696
|
+
},
|
|
697
|
+
status: {
|
|
698
|
+
type: String,
|
|
699
|
+
enum: SETTLEMENT_STATUS_VALUES,
|
|
700
|
+
default: "pending",
|
|
701
|
+
index: true
|
|
702
|
+
// pending | processing | completed | failed | cancelled
|
|
703
|
+
},
|
|
704
|
+
payoutMethod: {
|
|
705
|
+
type: String,
|
|
706
|
+
enum: PAYOUT_METHOD_VALUES,
|
|
707
|
+
required: true
|
|
708
|
+
// bank_transfer | mobile_wallet | platform_balance | crypto | manual
|
|
709
|
+
},
|
|
710
|
+
// ============ AMOUNT ============
|
|
711
|
+
amount: {
|
|
712
|
+
type: Number,
|
|
713
|
+
required: true,
|
|
714
|
+
min: 0
|
|
715
|
+
// Amount in smallest currency unit (cents, paisa, etc.)
|
|
716
|
+
},
|
|
717
|
+
currency: {
|
|
718
|
+
type: String,
|
|
719
|
+
required: true,
|
|
720
|
+
default: "USD"
|
|
721
|
+
// ISO 4217 currency code
|
|
722
|
+
},
|
|
723
|
+
// ============ SOURCE LINKAGE ============
|
|
724
|
+
sourceTransactionIds: [{
|
|
725
|
+
type: Schema.Types.ObjectId,
|
|
726
|
+
ref: "Transaction"
|
|
727
|
+
// Transactions this settlement pays out from
|
|
728
|
+
}],
|
|
729
|
+
sourceSplitIds: [{
|
|
730
|
+
type: String
|
|
731
|
+
// Split IDs within transactions (if applicable)
|
|
732
|
+
}],
|
|
733
|
+
// ============ BANK TRANSFER DETAILS ============
|
|
734
|
+
bankTransferDetails: {
|
|
735
|
+
accountNumber: { type: String },
|
|
736
|
+
accountName: { type: String },
|
|
737
|
+
bankName: { type: String },
|
|
738
|
+
routingNumber: { type: String },
|
|
739
|
+
swiftCode: { type: String },
|
|
740
|
+
iban: { type: String },
|
|
741
|
+
transferReference: { type: String },
|
|
742
|
+
// Bank confirmation reference
|
|
743
|
+
transferredAt: { type: Date }
|
|
744
|
+
},
|
|
745
|
+
// ============ MOBILE WALLET DETAILS ============
|
|
746
|
+
mobileWalletDetails: {
|
|
747
|
+
provider: { type: String },
|
|
748
|
+
// bKash, Nagad, Rocket, etc.
|
|
749
|
+
phoneNumber: { type: String },
|
|
750
|
+
accountNumber: { type: String },
|
|
751
|
+
// Wallet account number
|
|
752
|
+
transactionId: { type: String },
|
|
753
|
+
// Provider transaction ID
|
|
754
|
+
transferredAt: { type: Date }
|
|
755
|
+
},
|
|
756
|
+
// ============ CRYPTO DETAILS ============
|
|
757
|
+
cryptoDetails: {
|
|
758
|
+
network: { type: String },
|
|
759
|
+
// Ethereum, Bitcoin, etc.
|
|
760
|
+
walletAddress: { type: String },
|
|
761
|
+
transactionHash: { type: String },
|
|
762
|
+
transferredAt: { type: Date }
|
|
763
|
+
},
|
|
764
|
+
// ============ PLATFORM BALANCE ============
|
|
765
|
+
platformBalanceDetails: {
|
|
766
|
+
balanceId: { type: Schema.Types.ObjectId },
|
|
767
|
+
// Reference to balance record
|
|
768
|
+
appliedAt: { type: Date }
|
|
769
|
+
},
|
|
770
|
+
// ============ DATES ============
|
|
771
|
+
scheduledAt: {
|
|
772
|
+
type: Date,
|
|
773
|
+
index: true
|
|
774
|
+
// When this payout is scheduled for
|
|
775
|
+
},
|
|
776
|
+
processedAt: {
|
|
777
|
+
type: Date
|
|
778
|
+
// When processing started
|
|
779
|
+
},
|
|
780
|
+
completedAt: {
|
|
781
|
+
type: Date
|
|
782
|
+
// When successfully completed
|
|
783
|
+
},
|
|
784
|
+
failedAt: {
|
|
785
|
+
type: Date
|
|
786
|
+
// When it failed
|
|
787
|
+
},
|
|
788
|
+
cancelledAt: {
|
|
789
|
+
type: Date
|
|
790
|
+
// When it was cancelled
|
|
791
|
+
},
|
|
792
|
+
// ============ FAILURE INFO ============
|
|
793
|
+
failureReason: {
|
|
794
|
+
type: String
|
|
795
|
+
// Human-readable failure reason
|
|
796
|
+
},
|
|
797
|
+
failureCode: {
|
|
798
|
+
type: String
|
|
799
|
+
// Machine-readable error code
|
|
800
|
+
},
|
|
801
|
+
retryCount: {
|
|
802
|
+
type: Number,
|
|
803
|
+
default: 0,
|
|
804
|
+
min: 0
|
|
805
|
+
// Number of retry attempts
|
|
806
|
+
},
|
|
807
|
+
// ============ NOTES & METADATA ============
|
|
808
|
+
notes: {
|
|
809
|
+
type: String
|
|
810
|
+
// Admin notes about this settlement
|
|
811
|
+
},
|
|
812
|
+
metadata: {
|
|
813
|
+
type: Schema.Types.Mixed,
|
|
814
|
+
default: {}
|
|
815
|
+
// Flexible metadata for app-specific data
|
|
816
|
+
}
|
|
817
|
+
}, {
|
|
818
|
+
timestamps: true
|
|
819
|
+
// Adds createdAt and updatedAt
|
|
820
|
+
});
|
|
821
|
+
settlementSchema.index({ organizationId: 1, status: 1 });
|
|
822
|
+
settlementSchema.index({ recipientId: 1, status: 1 });
|
|
823
|
+
settlementSchema.index({ type: 1, status: 1, scheduledAt: 1 });
|
|
824
|
+
settlementSchema.index({ sourceTransactionIds: 1 });
|
|
825
|
+
settlementSchema.index({ status: 1, scheduledAt: 1 });
|
|
826
|
+
|
|
827
|
+
// src/schemas/settlement/index.ts
|
|
828
|
+
var settlement_default = { settlementSchema };
|
|
616
829
|
|
|
617
830
|
// src/schemas/index.ts
|
|
618
831
|
var schemas_default = {
|
|
619
832
|
...transaction_default,
|
|
620
833
|
...subscription_default,
|
|
621
834
|
...escrow_default,
|
|
622
|
-
...split_default
|
|
835
|
+
...split_default,
|
|
836
|
+
...settlement_default
|
|
623
837
|
};
|
|
624
838
|
|
|
625
|
-
export { baseMetadataSchema, commissionSchema, currentPaymentSchema, schemas_default as default, gatewaySchema, holdSchema, paymentDetailsSchema, paymentEntrySchema, paymentSummarySchema, planSchema,
|
|
839
|
+
export { baseMetadataSchema, commissionSchema, currentPaymentSchema, schemas_default as default, gatewaySchema, holdSchema, paymentDetailsSchema, paymentEntrySchema, paymentSummarySchema, planSchema, settlementSchema, splitSchema, subscriptionInfoSchema, taxBreakdownSchema, tenantSnapshotSchema };
|
|
626
840
|
//# sourceMappingURL=index.js.map
|
|
627
841
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/schemas/transaction/common.schema.ts","../../src/schemas/transaction/gateway.schema.ts","../../src/enums/transaction.enums.ts","../../src/enums/payment.enums.ts","../../src/enums/subscription.enums.ts","../../src/enums/monetization.enums.ts","../../src/enums/escrow.enums.ts","../../src/enums/split.enums.ts","../../src/schemas/transaction/payment.schema.ts","../../src/schemas/transaction/commission.schema.ts","../../src/schemas/transaction/index.ts","../../src/schemas/subscription/plan.schema.ts","../../src/schemas/subscription/info.schema.ts","../../src/schemas/subscription/index.ts","../../src/schemas/escrow/hold.schema.ts","../../src/schemas/escrow/index.ts","../../src/schemas/split/split.schema.ts","../../src/schemas/split/index.ts","../../src/schemas/index.ts"],"names":["Schema"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Common Transaction Schemas\n * @classytic/revenue\n *\n * Base schemas shared across transaction types\n */\n\nimport { Schema } from 'mongoose';\n\n/**\n * Base metadata schema for transactions\n */\nexport const baseMetadataSchema = new Schema(\n {\n // Flexible key-value metadata\n },\n { _id: false, strict: false }\n);\n\n/**\n * Reference schema for polymorphic associations\n */\nexport const referenceSchema = {\n referenceId: {\n type: Schema.Types.ObjectId,\n refPath: 'referenceModel',\n },\n referenceModel: {\n type: String,\n enum: ['Subscription', 'Order', 'Membership', 'Booking', 'Invoice'],\n },\n};\n\nexport default {\n baseMetadataSchema,\n referenceSchema,\n};\n\n","/**\n * Gateway Schema\n * @classytic/revenue\n *\n * Schema for payment gateway information\n */\n\nimport { Schema } from 'mongoose';\n\n/**\n * Gateway Schema - Embedded in Transaction\n * Tracks payment gateway details\n */\nexport const gatewaySchema = new Schema(\n {\n type: {\n type: String,\n required: true,\n },\n sessionId: {\n type: String,\n sparse: true,\n },\n paymentIntentId: {\n type: String,\n sparse: true,\n },\n provider: {\n type: String,\n },\n metadata: {\n type: Schema.Types.Mixed,\n default: {},\n },\n verificationData: {\n type: Schema.Types.Mixed,\n },\n },\n { _id: false }\n);\n\nexport default gatewaySchema;\n","/**\n * Transaction Enums\n * @classytic/revenue\n *\n * Library-managed transaction enums only.\n * Users should define their own categories and merge with these.\n */\n\n// ============ TRANSACTION TYPE ============\n/**\n * Transaction Type - Income vs Expense\n *\n * INCOME: Money coming in (payments, subscriptions, purchases)\n * EXPENSE: Money going out (refunds, payouts)\n *\n * Users can map these in their config via transactionTypeMapping\n */\nexport const TRANSACTION_TYPE = {\n INCOME: 'income',\n EXPENSE: 'expense',\n} as const;\n\nexport type TransactionType = typeof TRANSACTION_TYPE;\nexport type TransactionTypeValue = TransactionType[keyof TransactionType];\nexport const TRANSACTION_TYPE_VALUES = Object.values(\n TRANSACTION_TYPE,\n) as TransactionTypeValue[];\n\n// ============ TRANSACTION STATUS ============\n/**\n * Transaction Status - Library-managed states\n */\nexport const TRANSACTION_STATUS = {\n PENDING: 'pending',\n PAYMENT_INITIATED: 'payment_initiated',\n PROCESSING: 'processing',\n REQUIRES_ACTION: 'requires_action',\n VERIFIED: 'verified',\n COMPLETED: 'completed',\n FAILED: 'failed',\n CANCELLED: 'cancelled',\n EXPIRED: 'expired',\n REFUNDED: 'refunded',\n PARTIALLY_REFUNDED: 'partially_refunded',\n} as const;\n\nexport type TransactionStatus = typeof TRANSACTION_STATUS;\nexport type TransactionStatusValue = TransactionStatus[keyof TransactionStatus];\nexport const TRANSACTION_STATUS_VALUES = Object.values(\n TRANSACTION_STATUS,\n) as TransactionStatusValue[];\n\n// ============ LIBRARY CATEGORIES ============\n/**\n * Categories managed by this library\n *\n * SUBSCRIPTION: Recurring subscription payments\n * PURCHASE: One-time purchases\n *\n * Users should spread these into their own category enums:\n *\n * @example\n * import { LIBRARY_CATEGORIES } from '@classytic/revenue';\n *\n * export const MY_CATEGORIES = {\n * ...LIBRARY_CATEGORIES,\n * SALARY: 'salary',\n * RENT: 'rent',\n * EQUIPMENT: 'equipment',\n * } as const;\n */\nexport const LIBRARY_CATEGORIES = {\n SUBSCRIPTION: 'subscription',\n PURCHASE: 'purchase',\n} as const;\n\nexport type LibraryCategories = typeof LIBRARY_CATEGORIES;\nexport type LibraryCategoryValue = LibraryCategories[keyof LibraryCategories];\nexport const LIBRARY_CATEGORY_VALUES = Object.values(\n LIBRARY_CATEGORIES,\n) as LibraryCategoryValue[];\n\nconst transactionTypeSet = new Set<TransactionTypeValue>(TRANSACTION_TYPE_VALUES);\nconst transactionStatusSet = new Set<TransactionStatusValue>(\n TRANSACTION_STATUS_VALUES,\n);\nconst libraryCategorySet = new Set<LibraryCategoryValue>(LIBRARY_CATEGORY_VALUES);\n\nexport function isLibraryCategory(value: unknown): value is LibraryCategoryValue {\n return typeof value === 'string' && libraryCategorySet.has(value as LibraryCategoryValue);\n}\n\nexport function isTransactionType(value: unknown): value is TransactionTypeValue {\n return typeof value === 'string' && transactionTypeSet.has(value as TransactionTypeValue);\n}\n\nexport function isTransactionStatus(\n value: unknown,\n): value is TransactionStatusValue {\n return typeof value === 'string' && transactionStatusSet.has(value as TransactionStatusValue);\n}\n","/**\n * Payment Enums\n * @classytic/revenue\n *\n * Library-managed payment enums only.\n * Users define their own payment methods in their schema.\n */\n\n// ============ PAYMENT STATUS ============\n/**\n * Payment Status - Library-managed states\n */\nexport const PAYMENT_STATUS = {\n PENDING: 'pending',\n VERIFIED: 'verified',\n FAILED: 'failed',\n REFUNDED: 'refunded',\n CANCELLED: 'cancelled',\n} as const;\n\nexport type PaymentStatus = typeof PAYMENT_STATUS;\nexport type PaymentStatusValue = PaymentStatus[keyof PaymentStatus];\nexport const PAYMENT_STATUS_VALUES = Object.values(\n PAYMENT_STATUS,\n) as PaymentStatusValue[];\n\n// ============ PAYMENT GATEWAY TYPES ============\n/**\n * Common gateway type constants for convenience\n *\n * ⚠️ IMPORTANT: These are NOT restrictions - just common reference values\n *\n * You can register ANY custom gateway provider by passing it to createRevenue():\n *\n * @example\n * ```typescript\n * const revenue = createRevenue({\n * providers: {\n * manual: new ManualProvider(),\n * bkash: new BkashProvider(), // ✅ Custom gateway\n * nagad: new NagadProvider(), // ✅ Custom gateway\n * stripe: new StripeProvider(), // ✅ Custom gateway\n * paypal: new PaypalProvider(), // ✅ Any gateway you want\n * }\n * });\n *\n * // Use by name\n * await revenue.monetization.create({ gateway: 'bkash', ... });\n * ```\n *\n * Reference values:\n * - MANUAL: Built-in manual provider (@classytic/revenue-manual)\n * - STRIPE: Stripe provider (build with @classytic/revenue-stripe)\n * - SSLCOMMERZ: SSLCommerz provider (build with @classytic/revenue-sslcommerz)\n *\n * Add your own: bkash, nagad, rocket, paypal, razorpay, flutterwave, etc.\n */\nexport const PAYMENT_GATEWAY_TYPE = {\n MANUAL: 'manual',\n STRIPE: 'stripe',\n SSLCOMMERZ: 'sslcommerz',\n} as const;\n\nexport type PaymentGatewayType = typeof PAYMENT_GATEWAY_TYPE;\nexport type PaymentGatewayTypeValue = PaymentGatewayType[keyof PaymentGatewayType];\nexport const PAYMENT_GATEWAY_TYPE_VALUES = Object.values(\n PAYMENT_GATEWAY_TYPE,\n) as PaymentGatewayTypeValue[];\n\n// Backward compatibility alias\nexport const GATEWAY_TYPES = PAYMENT_GATEWAY_TYPE;\nexport const GATEWAY_TYPE_VALUES = PAYMENT_GATEWAY_TYPE_VALUES;\n\nconst paymentStatusSet = new Set<PaymentStatusValue>(PAYMENT_STATUS_VALUES);\nconst paymentGatewayTypeSet = new Set<PaymentGatewayTypeValue>(\n PAYMENT_GATEWAY_TYPE_VALUES,\n);\n\nexport function isPaymentStatus(value: unknown): value is PaymentStatusValue {\n return typeof value === 'string' && paymentStatusSet.has(value as PaymentStatusValue);\n}\n\nexport function isPaymentGatewayType(\n value: unknown,\n): value is PaymentGatewayTypeValue {\n return (\n typeof value === 'string' &&\n paymentGatewayTypeSet.has(value as PaymentGatewayTypeValue)\n );\n}\n\nexport const isGatewayType = isPaymentGatewayType;\n","/**\n * Subscription Enums\n * @classytic/revenue\n *\n * All subscription-related enums and constants\n */\n\n// ============ SUBSCRIPTION STATUS ============\n/**\n * Subscription Status\n */\nexport const SUBSCRIPTION_STATUS = {\n ACTIVE: 'active',\n PAUSED: 'paused',\n CANCELLED: 'cancelled',\n EXPIRED: 'expired',\n PENDING: 'pending',\n INACTIVE: 'inactive',\n} as const;\n\nexport type SubscriptionStatus = typeof SUBSCRIPTION_STATUS;\nexport type SubscriptionStatusValue = SubscriptionStatus[keyof SubscriptionStatus];\nexport const SUBSCRIPTION_STATUS_VALUES = Object.values(\n SUBSCRIPTION_STATUS,\n) as SubscriptionStatusValue[];\n\n// ============ PLAN KEYS ============\n/**\n * Supported plan intervals\n */\nexport const PLAN_KEYS = {\n MONTHLY: 'monthly',\n QUARTERLY: 'quarterly',\n YEARLY: 'yearly',\n} as const;\n\nexport type PlanKeys = typeof PLAN_KEYS;\nexport type PlanKeyValue = PlanKeys[keyof PlanKeys];\nexport const PLAN_KEY_VALUES = Object.values(PLAN_KEYS) as PlanKeyValue[];\n\nconst subscriptionStatusSet = new Set<SubscriptionStatusValue>(\n SUBSCRIPTION_STATUS_VALUES,\n);\nconst planKeySet = new Set<PlanKeyValue>(PLAN_KEY_VALUES);\n\nexport function isSubscriptionStatus(\n value: unknown,\n): value is SubscriptionStatusValue {\n return (\n typeof value === 'string' &&\n subscriptionStatusSet.has(value as SubscriptionStatusValue)\n );\n}\n\nexport function isPlanKey(value: unknown): value is PlanKeyValue {\n return typeof value === 'string' && planKeySet.has(value as PlanKeyValue);\n}\n","/**\n * Monetization Enums\n * @classytic/revenue\n *\n * General monetization enums and constants\n */\n\n// ============ MONETIZATION TYPES ============\nexport const MONETIZATION_TYPES = {\n FREE: 'free',\n PURCHASE: 'purchase',\n SUBSCRIPTION: 'subscription',\n} as const;\n\nexport type MonetizationTypes = typeof MONETIZATION_TYPES;\nexport type MonetizationTypeValue = MonetizationTypes[keyof MonetizationTypes];\nexport const MONETIZATION_TYPE_VALUES = Object.values(\n MONETIZATION_TYPES,\n) as MonetizationTypeValue[];\n\nconst monetizationTypeSet = new Set<MonetizationTypeValue>(MONETIZATION_TYPE_VALUES);\n\nexport function isMonetizationType(\n value: unknown,\n): value is MonetizationTypeValue {\n return (\n typeof value === 'string' &&\n monetizationTypeSet.has(value as MonetizationTypeValue)\n );\n}\n","/**\n * Escrow/Hold Enums\n * @classytic/revenue\n *\n * Enums for platform-as-intermediary payment flow\n */\n\nexport const HOLD_STATUS = {\n PENDING: 'pending',\n HELD: 'held',\n RELEASED: 'released',\n CANCELLED: 'cancelled',\n EXPIRED: 'expired',\n PARTIALLY_RELEASED: 'partially_released',\n} as const;\n\nexport type HoldStatus = typeof HOLD_STATUS;\nexport type HoldStatusValue = HoldStatus[keyof HoldStatus];\nexport const HOLD_STATUS_VALUES = Object.values(HOLD_STATUS) as HoldStatusValue[];\n\nexport const RELEASE_REASON = {\n PAYMENT_VERIFIED: 'payment_verified',\n MANUAL_RELEASE: 'manual_release',\n AUTO_RELEASE: 'auto_release',\n DISPUTE_RESOLVED: 'dispute_resolved',\n} as const;\n\nexport type ReleaseReason = typeof RELEASE_REASON;\nexport type ReleaseReasonValue = ReleaseReason[keyof ReleaseReason];\nexport const RELEASE_REASON_VALUES = Object.values(\n RELEASE_REASON,\n) as ReleaseReasonValue[];\n\nexport const HOLD_REASON = {\n PAYMENT_VERIFICATION: 'payment_verification',\n FRAUD_CHECK: 'fraud_check',\n MANUAL_REVIEW: 'manual_review',\n DISPUTE: 'dispute',\n COMPLIANCE: 'compliance',\n} as const;\n\nexport type HoldReason = typeof HOLD_REASON;\nexport type HoldReasonValue = HoldReason[keyof HoldReason];\nexport const HOLD_REASON_VALUES = Object.values(HOLD_REASON) as HoldReasonValue[];\n\nconst holdStatusSet = new Set<HoldStatusValue>(HOLD_STATUS_VALUES);\nconst releaseReasonSet = new Set<ReleaseReasonValue>(RELEASE_REASON_VALUES);\nconst holdReasonSet = new Set<HoldReasonValue>(HOLD_REASON_VALUES);\n\nexport function isHoldStatus(value: unknown): value is HoldStatusValue {\n return typeof value === 'string' && holdStatusSet.has(value as HoldStatusValue);\n}\n\nexport function isReleaseReason(value: unknown): value is ReleaseReasonValue {\n return (\n typeof value === 'string' &&\n releaseReasonSet.has(value as ReleaseReasonValue)\n );\n}\n\nexport function isHoldReason(value: unknown): value is HoldReasonValue {\n return typeof value === 'string' && holdReasonSet.has(value as HoldReasonValue);\n}\n","/**\n * Split Payment Enums\n * @classytic/revenue\n *\n * Enums for multi-party commission splits\n */\n\nexport const SPLIT_TYPE = {\n PLATFORM_COMMISSION: 'platform_commission',\n AFFILIATE_COMMISSION: 'affiliate_commission',\n REFERRAL_COMMISSION: 'referral_commission',\n PARTNER_COMMISSION: 'partner_commission',\n CUSTOM: 'custom',\n} as const;\n\nexport type SplitType = typeof SPLIT_TYPE;\nexport type SplitTypeValue = SplitType[keyof SplitType];\nexport const SPLIT_TYPE_VALUES = Object.values(SPLIT_TYPE) as SplitTypeValue[];\n\nexport const SPLIT_STATUS = {\n PENDING: 'pending',\n DUE: 'due',\n PAID: 'paid',\n WAIVED: 'waived',\n CANCELLED: 'cancelled',\n} as const;\n\nexport type SplitStatus = typeof SPLIT_STATUS;\nexport type SplitStatusValue = SplitStatus[keyof SplitStatus];\nexport const SPLIT_STATUS_VALUES = Object.values(\n SPLIT_STATUS,\n) as SplitStatusValue[];\n\nexport const PAYOUT_METHOD = {\n BANK_TRANSFER: 'bank_transfer',\n MOBILE_WALLET: 'mobile_wallet',\n PLATFORM_BALANCE: 'platform_balance',\n CRYPTO: 'crypto',\n CHECK: 'check',\n MANUAL: 'manual',\n} as const;\n\nexport type PayoutMethod = typeof PAYOUT_METHOD;\nexport type PayoutMethodValue = PayoutMethod[keyof PayoutMethod];\nexport const PAYOUT_METHOD_VALUES = Object.values(PAYOUT_METHOD) as PayoutMethodValue[];\n\nconst splitTypeSet = new Set<SplitTypeValue>(SPLIT_TYPE_VALUES);\nconst splitStatusSet = new Set<SplitStatusValue>(SPLIT_STATUS_VALUES);\nconst payoutMethodSet = new Set<PayoutMethodValue>(PAYOUT_METHOD_VALUES);\n\nexport function isSplitType(value: unknown): value is SplitTypeValue {\n return typeof value === 'string' && splitTypeSet.has(value as SplitTypeValue);\n}\n\nexport function isSplitStatus(value: unknown): value is SplitStatusValue {\n return (\n typeof value === 'string' &&\n splitStatusSet.has(value as SplitStatusValue)\n );\n}\n\nexport function isPayoutMethod(value: unknown): value is PayoutMethodValue {\n return (\n typeof value === 'string' &&\n payoutMethodSet.has(value as PayoutMethodValue)\n );\n}\n","/**\n * Payment Schemas for Transaction Model\n * @classytic/revenue\n *\n * Schemas for payment tracking in transactions\n */\n\nimport { Schema } from 'mongoose';\nimport {\n PAYMENT_STATUS_VALUES,\n} from '../../enums/index.js';\n\n/**\n * Individual Payment Entry Schema\n * For split/multi-payment scenarios (e.g., cash + bank + mobile wallet)\n *\n * Use in currentPaymentSchema.payments array\n */\nexport const paymentEntrySchema = new Schema(\n {\n method: {\n type: String,\n required: true,\n },\n amount: {\n type: Number,\n required: true,\n min: 0,\n },\n reference: {\n type: String,\n trim: true,\n },\n details: {\n type: Schema.Types.Mixed,\n // For method-specific data: walletNumber, bankName, trxId, etc.\n },\n },\n { _id: false }\n);\n\n/**\n * Current Payment Schema\n * Use this in your model: currentPayment: { type: currentPaymentSchema }\n *\n * Tracks the latest payment transaction for an entity\n * Supports both single payments and multi-payment (split) scenarios\n */\nexport const currentPaymentSchema = new Schema(\n {\n transactionId: {\n type: Schema.Types.ObjectId,\n ref: 'Transaction',\n },\n amount: {\n type: Number,\n min: 0,\n // Total amount (sum of all payments for split payments)\n },\n status: {\n type: String,\n enum: PAYMENT_STATUS_VALUES,\n default: 'pending',\n },\n method: {\n type: String,\n // Primary method for single payments, or 'split' when multiple methods\n },\n reference: {\n type: String,\n trim: true,\n },\n // Split payments support - array of individual payment entries\n payments: {\n type: [paymentEntrySchema],\n default: undefined, // Not set for single payments (backward compat)\n },\n verifiedAt: {\n type: Date,\n },\n verifiedBy: {\n type: Schema.Types.ObjectId,\n ref: 'User',\n },\n },\n { _id: false }\n);\n\n/**\n * Payment Summary Schema\n * Use this in your model: paymentSummary: { type: paymentSummarySchema }\n *\n * Tracks payment history and totals\n */\nexport const paymentSummarySchema = new Schema(\n {\n totalPayments: {\n type: Number,\n default: 0,\n min: 0,\n },\n totalAmountPaid: {\n type: Number,\n default: 0,\n min: 0,\n },\n lastPaymentDate: {\n type: Date,\n },\n lastPaymentAmount: {\n type: Number,\n min: 0,\n },\n },\n { _id: false }\n);\n\n/**\n * Payment Details Schema (for manual payments)\n * Embedded in Transaction model\n */\nexport const paymentDetailsSchema = new Schema(\n {\n provider: { type: String },\n walletNumber: { type: String },\n walletType: { type: String },\n trxId: { type: String },\n bankName: { type: String },\n accountNumber: { type: String },\n accountName: { type: String },\n proofUrl: { type: String },\n },\n { _id: false }\n);\n\n/**\n * Tenant Snapshot Schema\n * Captures organization payment details at transaction time (audit trail)\n */\nexport const tenantSnapshotSchema = new Schema(\n {\n paymentInstructions: { type: String },\n bkashNumber: { type: String },\n nagadNumber: { type: String },\n bankAccount: { type: String },\n },\n { _id: false }\n);\n\nexport default {\n paymentEntrySchema,\n currentPaymentSchema,\n paymentSummarySchema,\n paymentDetailsSchema,\n tenantSnapshotSchema,\n};\n","/**\n * Commission Schema\n * @classytic/revenue\n *\n * Schema for platform commission tracking\n * Embedded in Transaction model\n */\n\nimport { Schema } from 'mongoose';\n\n/**\n * Commission Schema - Embedded in Transaction\n * Tracks platform commission with gateway fee deduction\n *\n * Usage: commission: commissionSchema\n */\nexport const commissionSchema = new Schema(\n {\n // Commission rate (e.g., 0.10 for 10%)\n rate: {\n type: Number,\n min: 0,\n max: 1,\n },\n // Gross commission amount (before gateway fees)\n grossAmount: {\n type: Number,\n min: 0,\n },\n // Gateway fee rate (e.g., 0.029 for 2.9%)\n gatewayFeeRate: {\n type: Number,\n min: 0,\n max: 1,\n },\n // Gateway fee amount deducted from commission\n gatewayFeeAmount: {\n type: Number,\n min: 0,\n },\n // Net commission (grossAmount - gatewayFeeAmount)\n netAmount: {\n type: Number,\n min: 0,\n },\n // Commission status\n status: {\n type: String,\n enum: ['pending', 'paid', 'waived', 'reversed'],\n default: 'pending',\n },\n // For affiliate tracking\n affiliate: {\n recipientId: String,\n recipientType: {\n type: String,\n enum: ['user', 'organization', 'partner'],\n },\n rate: Number,\n grossAmount: Number,\n netAmount: Number,\n },\n // For multi-party splits\n splits: [\n {\n type: String,\n recipientId: String,\n rate: Number,\n grossAmount: Number,\n netAmount: Number,\n },\n ],\n },\n { _id: false }\n);\n\nexport default commissionSchema;\n\n","/**\n * Transaction Schemas Index\n * @classytic/revenue\n */\n\nexport * from './common.schema.js';\nexport * from './gateway.schema.js';\nexport * from './payment.schema.js';\nexport * from './commission.schema.js';\n\nimport { baseMetadataSchema, referenceSchema } from './common.schema.js';\nimport gatewaySchema from './gateway.schema.js';\nimport paymentSchemas from './payment.schema.js';\nimport commissionSchema from './commission.schema.js';\n\nexport default {\n baseMetadataSchema,\n referenceSchema,\n gatewaySchema,\n commissionSchema,\n ...paymentSchemas,\n};\n\n","/**\n * Plan Schema\n * @classytic/revenue\n *\n * Schema for subscription plans\n */\n\nimport { Schema } from 'mongoose';\nimport { PLAN_KEY_VALUES } from '../../enums/subscription.enums.js';\n\n/**\n * Plan Schema - for defining subscription plans\n */\nexport const planSchema = new Schema(\n {\n key: {\n type: String,\n enum: PLAN_KEY_VALUES,\n required: true,\n },\n name: {\n type: String,\n required: true,\n },\n description: {\n type: String,\n },\n amount: {\n type: Number,\n required: true,\n min: 0,\n },\n currency: {\n type: String,\n default: 'BDT',\n },\n interval: {\n type: String,\n enum: ['day', 'week', 'month', 'year'],\n default: 'month',\n },\n intervalCount: {\n type: Number,\n default: 1,\n min: 1,\n },\n features: [\n {\n type: String,\n },\n ],\n metadata: {\n type: Schema.Types.Mixed,\n default: {},\n },\n isActive: {\n type: Boolean,\n default: true,\n },\n },\n { _id: false }\n);\n\nexport default planSchema;\n\n","/**\n * Subscription Info Schema\n * @classytic/revenue\n *\n * Schema for subscription information embedded in entities\n */\n\nimport { Schema } from 'mongoose';\nimport { SUBSCRIPTION_STATUS_VALUES, PLAN_KEY_VALUES } from '../../enums/subscription.enums.js';\n\n/**\n * Subscription Info Schema\n * Use this in your entity models that have subscriptions\n *\n * @example\n * const OrganizationSchema = new Schema({\n * name: String,\n * subscription: { type: subscriptionInfoSchema },\n * });\n */\nexport const subscriptionInfoSchema = new Schema(\n {\n planKey: {\n type: String,\n enum: PLAN_KEY_VALUES,\n required: true,\n },\n status: {\n type: String,\n enum: SUBSCRIPTION_STATUS_VALUES,\n default: 'pending',\n },\n isActive: {\n type: Boolean,\n default: false,\n },\n startDate: {\n type: Date,\n },\n endDate: {\n type: Date,\n },\n canceledAt: {\n type: Date,\n },\n cancelAt: {\n type: Date,\n },\n pausedAt: {\n type: Date,\n },\n lastPaymentDate: {\n type: Date,\n },\n lastPaymentAmount: {\n type: Number,\n },\n renewalCount: {\n type: Number,\n default: 0,\n },\n },\n { _id: false }\n);\n\nexport default subscriptionInfoSchema;\n","/**\n * Subscription Schemas Index\n * @classytic/revenue\n */\n\nexport { planSchema } from './plan.schema.js';\nexport { subscriptionInfoSchema } from './info.schema.js';\n\nimport planSchema from './plan.schema.js';\nimport subscriptionInfoSchema from './info.schema.js';\n\nexport default {\n planSchema,\n subscriptionInfoSchema,\n};\n\n","/**\n * Hold/Escrow Schema\n * @classytic/revenue\n *\n * Schema for platform-as-intermediary escrow flow\n * Spread into transaction schema when needed\n */\n\nimport { HOLD_STATUS, HOLD_STATUS_VALUES, HOLD_REASON_VALUES } from '../../enums/escrow.enums.js';\n\nexport const holdSchema = {\n status: {\n type: String,\n enum: HOLD_STATUS_VALUES,\n default: HOLD_STATUS.PENDING,\n },\n\n heldAmount: {\n type: Number,\n required: false,\n },\n\n releasedAmount: {\n type: Number,\n default: 0,\n },\n\n reason: {\n type: String,\n enum: HOLD_REASON_VALUES,\n required: false,\n },\n\n holdUntil: {\n type: Date,\n required: false,\n },\n\n heldAt: Date,\n releasedAt: Date,\n cancelledAt: Date,\n\n releases: [\n {\n amount: Number,\n recipientId: String,\n recipientType: String,\n releasedAt: Date,\n releasedBy: String,\n reason: String,\n metadata: Object,\n },\n ],\n\n metadata: {\n type: Object,\n default: {},\n },\n} as const;\n\nexport default holdSchema;\n","/**\n * Escrow Schemas Index\n * @classytic/revenue\n */\n\nexport { holdSchema } from './hold.schema.js';\n\nimport holdSchema from './hold.schema.js';\n\nexport default {\n holdSchema,\n};\n\n","/**\n * Split Schema\n * @classytic/revenue\n *\n * Schema for multi-party commission splits\n */\n\nimport { Schema } from 'mongoose';\nimport {\n SPLIT_TYPE_VALUES,\n SPLIT_STATUS,\n SPLIT_STATUS_VALUES,\n PAYOUT_METHOD_VALUES,\n} from '../../enums/split.enums.js';\n\n/**\n * Split Schema - Embedded in Transaction\n */\nexport const splitSchema = new Schema(\n {\n type: {\n type: String,\n enum: SPLIT_TYPE_VALUES,\n required: true,\n },\n recipientId: {\n type: String,\n required: true,\n },\n recipientType: {\n type: String,\n enum: ['platform', 'organization', 'user', 'affiliate', 'partner'],\n required: true,\n },\n rate: {\n type: Number,\n required: true,\n min: 0,\n max: 1,\n },\n grossAmount: {\n type: Number,\n required: true,\n min: 0,\n },\n gatewayFeeRate: {\n type: Number,\n default: 0,\n min: 0,\n max: 1,\n },\n gatewayFeeAmount: {\n type: Number,\n default: 0,\n min: 0,\n },\n netAmount: {\n type: Number,\n required: true,\n min: 0,\n },\n status: {\n type: String,\n enum: SPLIT_STATUS_VALUES,\n default: SPLIT_STATUS.PENDING,\n },\n dueDate: {\n type: Date,\n },\n paidDate: {\n type: Date,\n },\n payoutMethod: {\n type: String,\n enum: PAYOUT_METHOD_VALUES,\n },\n payoutTransactionId: {\n type: String,\n },\n metadata: {\n type: Schema.Types.Mixed,\n default: {},\n },\n },\n { _id: false }\n);\n\nexport default splitSchema;\n","/**\n * Split Schemas Index\n * @classytic/revenue\n */\n\nexport { splitSchema } from './split.schema.js';\n\nimport splitSchema from './split.schema.js';\n\nexport default {\n splitSchema,\n};\n\n","/**\n * Schema Index\n * @classytic/revenue\n *\n * Core schemas for injection into your models\n *\n * Note: Enums are separate. Import them from '@classytic/revenue/enums'\n */\n\n// Re-export core schemas only\nexport * from './transaction/index.js';\nexport * from './subscription/index.js';\nexport * from './escrow/index.js';\nexport * from './split/index.js';\n\n// Default export with core schemas\nimport transactionSchemas from './transaction/index.js';\nimport subscriptionSchemas from './subscription/index.js';\nimport escrowSchemas from './escrow/index.js';\nimport splitSchemas from './split/index.js';\n\nexport default {\n ...transactionSchemas,\n ...subscriptionSchemas,\n ...escrowSchemas,\n ...splitSchemas,\n};\n\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/schemas/transaction/common.schema.ts","../../src/schemas/transaction/gateway.schema.ts","../../src/enums/transaction.enums.ts","../../src/enums/payment.enums.ts","../../src/enums/subscription.enums.ts","../../src/enums/monetization.enums.ts","../../src/enums/escrow.enums.ts","../../src/enums/split.enums.ts","../../src/enums/settlement.enums.ts","../../src/schemas/transaction/payment.schema.ts","../../src/schemas/transaction/commission.schema.ts","../../src/schemas/transaction/tax.schema.ts","../../src/schemas/transaction/index.ts","../../src/schemas/subscription/plan.schema.ts","../../src/schemas/subscription/info.schema.ts","../../src/schemas/subscription/index.ts","../../src/schemas/escrow/hold.schema.ts","../../src/schemas/escrow/index.ts","../../src/schemas/split/split.schema.ts","../../src/schemas/split/index.ts","../../src/schemas/settlement/settlement.schema.ts","../../src/schemas/settlement/index.ts","../../src/schemas/index.ts"],"names":["Schema"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Common Transaction Schemas\n * @classytic/revenue\n *\n * Base schemas shared across transaction types\n */\n\nimport { Schema } from 'mongoose';\n\n/**\n * Base metadata schema for transactions\n */\nexport const baseMetadataSchema = new Schema(\n {\n // Flexible key-value metadata\n },\n { _id: false, strict: false }\n);\n\nexport default {\n baseMetadataSchema,\n};\n","/**\n * Gateway Schema\n * @classytic/revenue\n *\n * Schema for payment gateway information\n */\n\nimport { Schema } from 'mongoose';\n\n/**\n * Gateway Schema - Embedded in Transaction\n * Tracks payment gateway details\n */\nexport const gatewaySchema = new Schema(\n {\n type: {\n type: String,\n required: true,\n },\n sessionId: {\n type: String,\n sparse: true,\n },\n paymentIntentId: {\n type: String,\n sparse: true,\n },\n provider: {\n type: String,\n },\n metadata: {\n type: Schema.Types.Mixed,\n default: {},\n },\n verificationData: {\n type: Schema.Types.Mixed,\n },\n },\n { _id: false }\n);\n\nexport default gatewaySchema;\n","/**\n * Transaction Enums\n * @classytic/revenue\n *\n * Library-managed transaction enums only.\n * Users should define their own categories and merge with these.\n */\n\n// ============ TRANSACTION FLOW ============\n/**\n * Transaction Flow - Directional money movement\n *\n * INFLOW: Money coming in (payments, subscriptions, purchases, receipts)\n * OUTFLOW: Money going out (refunds, payouts, expenses, disbursements)\n *\n * Industry-standard terminology compatible with QuickBooks, Xero, and other accounting systems.\n * Users can map categories to flow directions via transactionTypeMapping config.\n *\n * @example\n * // Revenue platform\n * { type: 'subscription', flow: 'inflow' }\n *\n * // Payroll platform\n * { type: 'salary', flow: 'outflow' }\n *\n * // Marketplace\n * { type: 'commission', flow: 'outflow' } // Paying sellers\n * { type: 'platform_fee', flow: 'inflow' } // Platform revenue\n */\nexport const TRANSACTION_FLOW = {\n INFLOW: 'inflow',\n OUTFLOW: 'outflow',\n} as const;\n\n/** @deprecated Use TRANSACTION_FLOW instead */\nexport const TRANSACTION_TYPE = TRANSACTION_FLOW;\n\nexport type TransactionFlow = typeof TRANSACTION_FLOW;\nexport type TransactionFlowValue = TransactionFlow[keyof TransactionFlow];\nexport const TRANSACTION_FLOW_VALUES = Object.values(\n TRANSACTION_FLOW,\n) as TransactionFlowValue[];\n\n/** @deprecated Use TransactionFlow instead */\nexport type TransactionType = TransactionFlow;\n/** @deprecated Use TransactionFlowValue instead */\nexport type TransactionTypeValue = TransactionFlowValue;\n/** @deprecated Use TRANSACTION_FLOW_VALUES instead */\nexport const TRANSACTION_TYPE_VALUES = TRANSACTION_FLOW_VALUES;\n\n// ============ TRANSACTION STATUS ============\n/**\n * Transaction Status - Library-managed states\n */\nexport const TRANSACTION_STATUS = {\n PENDING: 'pending',\n PAYMENT_INITIATED: 'payment_initiated',\n PROCESSING: 'processing',\n REQUIRES_ACTION: 'requires_action',\n VERIFIED: 'verified',\n COMPLETED: 'completed',\n FAILED: 'failed',\n CANCELLED: 'cancelled',\n EXPIRED: 'expired',\n REFUNDED: 'refunded',\n PARTIALLY_REFUNDED: 'partially_refunded',\n} as const;\n\nexport type TransactionStatus = typeof TRANSACTION_STATUS;\nexport type TransactionStatusValue = TransactionStatus[keyof TransactionStatus];\nexport const TRANSACTION_STATUS_VALUES = Object.values(\n TRANSACTION_STATUS,\n) as TransactionStatusValue[];\n\n// ============ LIBRARY CATEGORIES ============\n/**\n * Categories managed by this library\n *\n * SUBSCRIPTION: Recurring subscription payments\n * PURCHASE: One-time purchases\n *\n * Users should spread these into their own category enums:\n *\n * @example\n * import { LIBRARY_CATEGORIES } from '@classytic/revenue';\n *\n * export const MY_CATEGORIES = {\n * ...LIBRARY_CATEGORIES,\n * SALARY: 'salary',\n * RENT: 'rent',\n * EQUIPMENT: 'equipment',\n * } as const;\n */\nexport const LIBRARY_CATEGORIES = {\n SUBSCRIPTION: 'subscription',\n PURCHASE: 'purchase',\n} as const;\n\nexport type LibraryCategories = typeof LIBRARY_CATEGORIES;\nexport type LibraryCategoryValue = LibraryCategories[keyof LibraryCategories];\nexport const LIBRARY_CATEGORY_VALUES = Object.values(\n LIBRARY_CATEGORIES,\n) as LibraryCategoryValue[];\n\nconst transactionFlowSet = new Set<TransactionFlowValue>(TRANSACTION_FLOW_VALUES);\nconst transactionStatusSet = new Set<TransactionStatusValue>(\n TRANSACTION_STATUS_VALUES,\n);\nconst libraryCategorySet = new Set<LibraryCategoryValue>(LIBRARY_CATEGORY_VALUES);\n\nexport function isLibraryCategory(value: unknown): value is LibraryCategoryValue {\n return typeof value === 'string' && libraryCategorySet.has(value as LibraryCategoryValue);\n}\n\nexport function isTransactionFlow(value: unknown): value is TransactionFlowValue {\n return typeof value === 'string' && transactionFlowSet.has(value as TransactionFlowValue);\n}\n\n/** @deprecated Use isTransactionFlow instead */\nexport function isTransactionType(value: unknown): value is TransactionTypeValue {\n return isTransactionFlow(value);\n}\n\nexport function isTransactionStatus(\n value: unknown,\n): value is TransactionStatusValue {\n return typeof value === 'string' && transactionStatusSet.has(value as TransactionStatusValue);\n}\n","/**\n * Payment Enums\n * @classytic/revenue\n *\n * Library-managed payment enums only.\n * Users define their own payment methods in their schema.\n */\n\n// ============ PAYMENT STATUS ============\n/**\n * Payment Status - Library-managed states\n */\nexport const PAYMENT_STATUS = {\n PENDING: 'pending',\n VERIFIED: 'verified',\n FAILED: 'failed',\n REFUNDED: 'refunded',\n CANCELLED: 'cancelled',\n} as const;\n\nexport type PaymentStatus = typeof PAYMENT_STATUS;\nexport type PaymentStatusValue = PaymentStatus[keyof PaymentStatus];\nexport const PAYMENT_STATUS_VALUES = Object.values(\n PAYMENT_STATUS,\n) as PaymentStatusValue[];\n\n// ============ PAYMENT GATEWAY TYPES ============\n/**\n * Common gateway type constants for convenience\n *\n * ⚠️ IMPORTANT: These are NOT restrictions - just common reference values\n *\n * You can register ANY custom gateway provider by passing it to createRevenue():\n *\n * @example\n * ```typescript\n * const revenue = createRevenue({\n * providers: {\n * manual: new ManualProvider(),\n * bkash: new BkashProvider(), // ✅ Custom gateway\n * nagad: new NagadProvider(), // ✅ Custom gateway\n * stripe: new StripeProvider(), // ✅ Custom gateway\n * paypal: new PaypalProvider(), // ✅ Any gateway you want\n * }\n * });\n *\n * // Use by name\n * await revenue.monetization.create({ gateway: 'bkash', ... });\n * ```\n *\n * Reference values:\n * - MANUAL: Built-in manual provider (@classytic/revenue-manual)\n * - STRIPE: Stripe provider (build with @classytic/revenue-stripe)\n * - SSLCOMMERZ: SSLCommerz provider (build with @classytic/revenue-sslcommerz)\n *\n * Add your own: bkash, nagad, rocket, paypal, razorpay, flutterwave, etc.\n */\nexport const PAYMENT_GATEWAY_TYPE = {\n MANUAL: 'manual',\n STRIPE: 'stripe',\n SSLCOMMERZ: 'sslcommerz',\n} as const;\n\nexport type PaymentGatewayType = typeof PAYMENT_GATEWAY_TYPE;\nexport type PaymentGatewayTypeValue = PaymentGatewayType[keyof PaymentGatewayType];\nexport const PAYMENT_GATEWAY_TYPE_VALUES = Object.values(\n PAYMENT_GATEWAY_TYPE,\n) as PaymentGatewayTypeValue[];\n\n// Backward compatibility alias\nexport const GATEWAY_TYPES = PAYMENT_GATEWAY_TYPE;\nexport const GATEWAY_TYPE_VALUES = PAYMENT_GATEWAY_TYPE_VALUES;\n\nconst paymentStatusSet = new Set<PaymentStatusValue>(PAYMENT_STATUS_VALUES);\nconst paymentGatewayTypeSet = new Set<PaymentGatewayTypeValue>(\n PAYMENT_GATEWAY_TYPE_VALUES,\n);\n\nexport function isPaymentStatus(value: unknown): value is PaymentStatusValue {\n return typeof value === 'string' && paymentStatusSet.has(value as PaymentStatusValue);\n}\n\nexport function isPaymentGatewayType(\n value: unknown,\n): value is PaymentGatewayTypeValue {\n return (\n typeof value === 'string' &&\n paymentGatewayTypeSet.has(value as PaymentGatewayTypeValue)\n );\n}\n\nexport const isGatewayType = isPaymentGatewayType;\n","/**\n * Subscription Enums\n * @classytic/revenue\n *\n * All subscription-related enums and constants\n */\n\n// ============ SUBSCRIPTION STATUS ============\n/**\n * Subscription Status\n */\nexport const SUBSCRIPTION_STATUS = {\n ACTIVE: 'active',\n PAUSED: 'paused',\n CANCELLED: 'cancelled',\n EXPIRED: 'expired',\n PENDING: 'pending',\n PENDING_RENEWAL: 'pending_renewal',\n INACTIVE: 'inactive',\n} as const;\n\nexport type SubscriptionStatus = typeof SUBSCRIPTION_STATUS;\nexport type SubscriptionStatusValue = SubscriptionStatus[keyof SubscriptionStatus];\nexport const SUBSCRIPTION_STATUS_VALUES = Object.values(\n SUBSCRIPTION_STATUS,\n) as SubscriptionStatusValue[];\n\n// ============ PLAN KEYS ============\n/**\n * Supported plan intervals\n */\nexport const PLAN_KEYS = {\n MONTHLY: 'monthly',\n QUARTERLY: 'quarterly',\n YEARLY: 'yearly',\n} as const;\n\nexport type PlanKeys = typeof PLAN_KEYS;\nexport type PlanKeyValue = PlanKeys[keyof PlanKeys];\nexport const PLAN_KEY_VALUES = Object.values(PLAN_KEYS) as PlanKeyValue[];\n\nconst subscriptionStatusSet = new Set<SubscriptionStatusValue>(\n SUBSCRIPTION_STATUS_VALUES,\n);\nconst planKeySet = new Set<PlanKeyValue>(PLAN_KEY_VALUES);\n\nexport function isSubscriptionStatus(\n value: unknown,\n): value is SubscriptionStatusValue {\n return (\n typeof value === 'string' &&\n subscriptionStatusSet.has(value as SubscriptionStatusValue)\n );\n}\n\nexport function isPlanKey(value: unknown): value is PlanKeyValue {\n return typeof value === 'string' && planKeySet.has(value as PlanKeyValue);\n}\n","/**\n * Monetization Enums\n * @classytic/revenue\n *\n * General monetization enums and constants\n */\n\n// ============ MONETIZATION TYPES ============\nexport const MONETIZATION_TYPES = {\n FREE: 'free',\n PURCHASE: 'purchase',\n SUBSCRIPTION: 'subscription',\n} as const;\n\nexport type MonetizationTypes = typeof MONETIZATION_TYPES;\nexport type MonetizationTypeValue = MonetizationTypes[keyof MonetizationTypes];\nexport const MONETIZATION_TYPE_VALUES = Object.values(\n MONETIZATION_TYPES,\n) as MonetizationTypeValue[];\n\nconst monetizationTypeSet = new Set<MonetizationTypeValue>(MONETIZATION_TYPE_VALUES);\n\nexport function isMonetizationType(\n value: unknown,\n): value is MonetizationTypeValue {\n return (\n typeof value === 'string' &&\n monetizationTypeSet.has(value as MonetizationTypeValue)\n );\n}\n","/**\n * Escrow/Hold Enums\n * @classytic/revenue\n *\n * Enums for platform-as-intermediary payment flow\n */\n\nexport const HOLD_STATUS = {\n PENDING: 'pending',\n HELD: 'held',\n RELEASED: 'released',\n CANCELLED: 'cancelled',\n EXPIRED: 'expired',\n PARTIALLY_RELEASED: 'partially_released',\n} as const;\n\nexport type HoldStatus = typeof HOLD_STATUS;\nexport type HoldStatusValue = HoldStatus[keyof HoldStatus];\nexport const HOLD_STATUS_VALUES = Object.values(HOLD_STATUS) as HoldStatusValue[];\n\nexport const RELEASE_REASON = {\n PAYMENT_VERIFIED: 'payment_verified',\n MANUAL_RELEASE: 'manual_release',\n AUTO_RELEASE: 'auto_release',\n DISPUTE_RESOLVED: 'dispute_resolved',\n} as const;\n\nexport type ReleaseReason = typeof RELEASE_REASON;\nexport type ReleaseReasonValue = ReleaseReason[keyof ReleaseReason];\nexport const RELEASE_REASON_VALUES = Object.values(\n RELEASE_REASON,\n) as ReleaseReasonValue[];\n\nexport const HOLD_REASON = {\n PAYMENT_VERIFICATION: 'payment_verification',\n FRAUD_CHECK: 'fraud_check',\n MANUAL_REVIEW: 'manual_review',\n DISPUTE: 'dispute',\n COMPLIANCE: 'compliance',\n} as const;\n\nexport type HoldReason = typeof HOLD_REASON;\nexport type HoldReasonValue = HoldReason[keyof HoldReason];\nexport const HOLD_REASON_VALUES = Object.values(HOLD_REASON) as HoldReasonValue[];\n\nconst holdStatusSet = new Set<HoldStatusValue>(HOLD_STATUS_VALUES);\nconst releaseReasonSet = new Set<ReleaseReasonValue>(RELEASE_REASON_VALUES);\nconst holdReasonSet = new Set<HoldReasonValue>(HOLD_REASON_VALUES);\n\nexport function isHoldStatus(value: unknown): value is HoldStatusValue {\n return typeof value === 'string' && holdStatusSet.has(value as HoldStatusValue);\n}\n\nexport function isReleaseReason(value: unknown): value is ReleaseReasonValue {\n return (\n typeof value === 'string' &&\n releaseReasonSet.has(value as ReleaseReasonValue)\n );\n}\n\nexport function isHoldReason(value: unknown): value is HoldReasonValue {\n return typeof value === 'string' && holdReasonSet.has(value as HoldReasonValue);\n}\n","/**\n * Split Payment Enums\n * @classytic/revenue\n *\n * Enums for multi-party commission splits\n */\n\nexport const SPLIT_TYPE = {\n PLATFORM_COMMISSION: 'platform_commission',\n AFFILIATE_COMMISSION: 'affiliate_commission',\n REFERRAL_COMMISSION: 'referral_commission',\n PARTNER_COMMISSION: 'partner_commission',\n CUSTOM: 'custom',\n} as const;\n\nexport type SplitType = typeof SPLIT_TYPE;\nexport type SplitTypeValue = SplitType[keyof SplitType];\nexport const SPLIT_TYPE_VALUES = Object.values(SPLIT_TYPE) as SplitTypeValue[];\n\nexport const SPLIT_STATUS = {\n PENDING: 'pending',\n DUE: 'due',\n PAID: 'paid',\n WAIVED: 'waived',\n CANCELLED: 'cancelled',\n} as const;\n\nexport type SplitStatus = typeof SPLIT_STATUS;\nexport type SplitStatusValue = SplitStatus[keyof SplitStatus];\nexport const SPLIT_STATUS_VALUES = Object.values(\n SPLIT_STATUS,\n) as SplitStatusValue[];\n\nexport const PAYOUT_METHOD = {\n BANK_TRANSFER: 'bank_transfer',\n MOBILE_WALLET: 'mobile_wallet',\n PLATFORM_BALANCE: 'platform_balance',\n CRYPTO: 'crypto',\n CHECK: 'check',\n MANUAL: 'manual',\n} as const;\n\nexport type PayoutMethod = typeof PAYOUT_METHOD;\nexport type PayoutMethodValue = PayoutMethod[keyof PayoutMethod];\nexport const PAYOUT_METHOD_VALUES = Object.values(PAYOUT_METHOD) as PayoutMethodValue[];\n\nconst splitTypeSet = new Set<SplitTypeValue>(SPLIT_TYPE_VALUES);\nconst splitStatusSet = new Set<SplitStatusValue>(SPLIT_STATUS_VALUES);\nconst payoutMethodSet = new Set<PayoutMethodValue>(PAYOUT_METHOD_VALUES);\n\nexport function isSplitType(value: unknown): value is SplitTypeValue {\n return typeof value === 'string' && splitTypeSet.has(value as SplitTypeValue);\n}\n\nexport function isSplitStatus(value: unknown): value is SplitStatusValue {\n return (\n typeof value === 'string' &&\n splitStatusSet.has(value as SplitStatusValue)\n );\n}\n\nexport function isPayoutMethod(value: unknown): value is PayoutMethodValue {\n return (\n typeof value === 'string' &&\n payoutMethodSet.has(value as PayoutMethodValue)\n );\n}\n","/**\n * Settlement Enums\n * @classytic/revenue\n *\n * Enums for settlement/payout tracking\n */\n\n// ============ SETTLEMENT STATUS ============\n\nexport const SETTLEMENT_STATUS = {\n PENDING: 'pending',\n PROCESSING: 'processing',\n COMPLETED: 'completed',\n FAILED: 'failed',\n CANCELLED: 'cancelled',\n} as const;\n\nexport type SettlementStatus = typeof SETTLEMENT_STATUS;\nexport type SettlementStatusValue = SettlementStatus[keyof SettlementStatus];\n\nexport const SETTLEMENT_STATUS_VALUES = Object.values(SETTLEMENT_STATUS);\n\n/**\n * Type guard for settlement status\n */\nexport function isSettlementStatus(value: unknown): value is SettlementStatusValue {\n return typeof value === 'string' && SETTLEMENT_STATUS_VALUES.includes(value as SettlementStatusValue);\n}\n\n// ============ SETTLEMENT TYPE ============\n\nexport const SETTLEMENT_TYPE = {\n SPLIT_PAYOUT: 'split_payout', // Payout to split recipient (vendor/affiliate)\n PLATFORM_WITHDRAWAL: 'platform_withdrawal', // Platform withdraws commission\n MANUAL_PAYOUT: 'manual_payout', // Manual vendor payout\n ESCROW_RELEASE: 'escrow_release', // Release from escrow hold\n} as const;\n\nexport type SettlementType = typeof SETTLEMENT_TYPE;\nexport type SettlementTypeValue = SettlementType[keyof SettlementType];\n\nexport const SETTLEMENT_TYPE_VALUES = Object.values(SETTLEMENT_TYPE);\n\n/**\n * Type guard for settlement type\n */\nexport function isSettlementType(value: unknown): value is SettlementTypeValue {\n return typeof value === 'string' && SETTLEMENT_TYPE_VALUES.includes(value as SettlementTypeValue);\n}\n\n// ============ EXPORTS ============\n\nexport default {\n SETTLEMENT_STATUS,\n SETTLEMENT_STATUS_VALUES,\n SETTLEMENT_TYPE,\n SETTLEMENT_TYPE_VALUES,\n isSettlementStatus,\n isSettlementType,\n};\n","/**\n * Payment Schemas for Transaction Model\n * @classytic/revenue\n *\n * Schemas for payment tracking in transactions\n */\n\nimport { Schema } from 'mongoose';\nimport {\n PAYMENT_STATUS_VALUES,\n} from '../../enums/index.js';\n\n/**\n * Individual Payment Entry Schema\n * For split/multi-payment scenarios (e.g., cash + bank + mobile wallet)\n *\n * Use in currentPaymentSchema.payments array\n */\nexport const paymentEntrySchema = new Schema(\n {\n method: {\n type: String,\n required: true,\n },\n amount: {\n type: Number,\n required: true,\n min: 0,\n },\n reference: {\n type: String,\n trim: true,\n },\n details: {\n type: Schema.Types.Mixed,\n // For method-specific data: walletNumber, bankName, trxId, etc.\n },\n },\n { _id: false }\n);\n\n/**\n * Current Payment Schema\n * Use this in your model: currentPayment: { type: currentPaymentSchema }\n *\n * Tracks the latest payment transaction for an entity\n * Supports both single payments and multi-payment (split) scenarios\n */\nexport const currentPaymentSchema = new Schema(\n {\n transactionId: {\n type: Schema.Types.ObjectId,\n ref: 'Transaction',\n },\n amount: {\n type: Number,\n min: 0,\n // Total amount (sum of all payments for split payments)\n },\n status: {\n type: String,\n enum: PAYMENT_STATUS_VALUES,\n default: 'pending',\n },\n method: {\n type: String,\n // Primary method for single payments, or 'split' when multiple methods\n },\n reference: {\n type: String,\n trim: true,\n },\n // Split payments support - array of individual payment entries\n payments: {\n type: [paymentEntrySchema],\n default: undefined, // Not set for single payments (backward compat)\n },\n verifiedAt: {\n type: Date,\n },\n verifiedBy: {\n type: Schema.Types.ObjectId,\n ref: 'User',\n },\n },\n { _id: false }\n);\n\n/**\n * Payment Summary Schema\n * Use this in your model: paymentSummary: { type: paymentSummarySchema }\n *\n * Tracks payment history and totals\n */\nexport const paymentSummarySchema = new Schema(\n {\n totalPayments: {\n type: Number,\n default: 0,\n min: 0,\n },\n totalAmountPaid: {\n type: Number,\n default: 0,\n min: 0,\n },\n lastPaymentDate: {\n type: Date,\n },\n lastPaymentAmount: {\n type: Number,\n min: 0,\n },\n },\n { _id: false }\n);\n\n/**\n * Payment Details Schema (for manual payments)\n * Embedded in Transaction model\n */\nexport const paymentDetailsSchema = new Schema(\n {\n provider: { type: String },\n walletNumber: { type: String },\n walletType: { type: String },\n trxId: { type: String },\n bankName: { type: String },\n accountNumber: { type: String },\n accountName: { type: String },\n proofUrl: { type: String },\n },\n { _id: false }\n);\n\n/**\n * Tenant Snapshot Schema\n * Captures organization payment details at transaction time (audit trail)\n */\nexport const tenantSnapshotSchema = new Schema(\n {\n paymentInstructions: { type: String },\n bkashNumber: { type: String },\n nagadNumber: { type: String },\n bankAccount: { type: String },\n },\n { _id: false }\n);\n\nexport default {\n paymentEntrySchema,\n currentPaymentSchema,\n paymentSummarySchema,\n paymentDetailsSchema,\n tenantSnapshotSchema,\n};\n","/**\n * Commission Schema\n * @classytic/revenue\n *\n * Schema for platform commission tracking\n * Embedded in Transaction model\n */\n\nimport { Schema } from 'mongoose';\n\n/**\n * Commission Schema - Embedded in Transaction\n * Tracks platform commission with gateway fee deduction\n *\n * Usage: commission: commissionSchema\n */\nexport const commissionSchema = new Schema(\n {\n // Commission rate (e.g., 0.10 for 10%)\n rate: {\n type: Number,\n min: 0,\n max: 1,\n },\n // Gross commission amount (before gateway fees)\n grossAmount: {\n type: Number,\n min: 0,\n },\n // Gateway fee rate (e.g., 0.029 for 2.9%)\n gatewayFeeRate: {\n type: Number,\n min: 0,\n max: 1,\n },\n // Gateway fee amount deducted from commission\n gatewayFeeAmount: {\n type: Number,\n min: 0,\n },\n // Net commission (grossAmount - gatewayFeeAmount)\n netAmount: {\n type: Number,\n min: 0,\n },\n // Commission status\n status: {\n type: String,\n enum: ['pending', 'paid', 'waived', 'reversed'],\n default: 'pending',\n },\n // For affiliate tracking\n affiliate: {\n recipientId: String,\n recipientType: {\n type: String,\n enum: ['user', 'organization', 'partner'],\n },\n rate: Number,\n grossAmount: Number,\n netAmount: Number,\n },\n // For multi-party splits\n splits: [\n {\n type: String,\n recipientId: String,\n rate: Number,\n grossAmount: Number,\n netAmount: Number,\n },\n ],\n },\n { _id: false }\n);\n\nexport default commissionSchema;\n\n","/**\n * Tax Schema\n * @classytic/revenue\n *\n * Mongoose schema for tax breakdown in transactions\n */\n\nimport { Schema } from 'mongoose';\n\n/**\n * Tax Breakdown Schema\n * Embed this in Transaction model to track tax\n *\n * @example\n * ```typescript\n * import mongoose from 'mongoose';\n * import { taxBreakdownSchema } from '@classytic/revenue/schemas';\n *\n * const transactionSchema = new mongoose.Schema({\n * amount: Number,\n * tax: taxBreakdownSchema, // Add tax tracking\n * // ... other fields\n * });\n * ```\n */\nexport const taxBreakdownSchema = new Schema({\n /** Is tax applicable for this transaction? */\n isApplicable: {\n type: Boolean,\n default: false,\n },\n\n /** Tax rate used (0-1, e.g., 0.15 = 15%) */\n rate: {\n type: Number,\n default: 0,\n min: 0,\n max: 1,\n },\n\n /** Base amount (before tax) */\n baseAmount: {\n type: Number,\n default: 0,\n min: 0,\n },\n\n /** Tax amount */\n taxAmount: {\n type: Number,\n default: 0,\n min: 0,\n },\n\n /** Total amount (base + tax) */\n totalAmount: {\n type: Number,\n default: 0,\n min: 0,\n },\n\n /** Were prices tax-inclusive? */\n pricesIncludeTax: {\n type: Boolean,\n },\n\n /** Tax type: collected (revenue), paid (expense), or exempt */\n type: {\n type: String,\n enum: ['collected', 'paid', 'exempt'],\n },\n}, { _id: false });\n\n/**\n * TypeScript type inference\n */\nexport type TaxBreakdown = {\n isApplicable: boolean;\n rate: number;\n baseAmount: number;\n taxAmount: number;\n totalAmount: number;\n pricesIncludeTax?: boolean;\n type?: 'collected' | 'paid' | 'exempt';\n};\n\nexport default taxBreakdownSchema;\n","/**\n * Transaction Schemas Index\n * @classytic/revenue\n */\n\nexport * from './common.schema.js';\nexport * from './gateway.schema.js';\nexport * from './payment.schema.js';\nexport * from './commission.schema.js';\nexport * from './tax.schema.js';\n\nimport { baseMetadataSchema } from './common.schema.js';\nimport gatewaySchema from './gateway.schema.js';\nimport paymentSchemas from './payment.schema.js';\nimport commissionSchema from './commission.schema.js';\nimport taxBreakdownSchema from './tax.schema.js';\n\nexport default {\n baseMetadataSchema,\n gatewaySchema,\n commissionSchema,\n taxBreakdownSchema,\n ...paymentSchemas,\n};\n","/**\n * Plan Schema\n * @classytic/revenue\n *\n * Schema for subscription plans\n */\n\nimport { Schema } from 'mongoose';\nimport { PLAN_KEY_VALUES } from '../../enums/subscription.enums.js';\n\n/**\n * Plan Schema - for defining subscription plans\n */\nexport const planSchema = new Schema(\n {\n key: {\n type: String,\n enum: PLAN_KEY_VALUES,\n required: true,\n },\n name: {\n type: String,\n required: true,\n },\n description: {\n type: String,\n },\n amount: {\n type: Number,\n required: true,\n min: 0,\n },\n currency: {\n type: String,\n default: 'BDT',\n },\n interval: {\n type: String,\n enum: ['day', 'week', 'month', 'year'],\n default: 'month',\n },\n intervalCount: {\n type: Number,\n default: 1,\n min: 1,\n },\n features: [\n {\n type: String,\n },\n ],\n metadata: {\n type: Schema.Types.Mixed,\n default: {},\n },\n isActive: {\n type: Boolean,\n default: true,\n },\n },\n { _id: false }\n);\n\nexport default planSchema;\n\n","/**\n * Subscription Info Schema\n * @classytic/revenue\n *\n * Schema for subscription information embedded in entities\n */\n\nimport { Schema } from 'mongoose';\nimport { SUBSCRIPTION_STATUS_VALUES, PLAN_KEY_VALUES } from '../../enums/subscription.enums.js';\n\n/**\n * Subscription Info Schema\n * Use this in your entity models that have subscriptions\n *\n * @example\n * const OrganizationSchema = new Schema({\n * name: String,\n * subscription: { type: subscriptionInfoSchema },\n * });\n */\nexport const subscriptionInfoSchema = new Schema(\n {\n planKey: {\n type: String,\n enum: PLAN_KEY_VALUES,\n required: true,\n },\n status: {\n type: String,\n enum: SUBSCRIPTION_STATUS_VALUES,\n default: 'pending',\n },\n isActive: {\n type: Boolean,\n default: false,\n },\n startDate: {\n type: Date,\n },\n endDate: {\n type: Date,\n },\n canceledAt: {\n type: Date,\n },\n cancelAt: {\n type: Date,\n },\n pausedAt: {\n type: Date,\n },\n lastPaymentDate: {\n type: Date,\n },\n lastPaymentAmount: {\n type: Number,\n },\n renewalCount: {\n type: Number,\n default: 0,\n },\n },\n { _id: false }\n);\n\nexport default subscriptionInfoSchema;\n","/**\n * Subscription Schemas Index\n * @classytic/revenue\n */\n\nexport { planSchema } from './plan.schema.js';\nexport { subscriptionInfoSchema } from './info.schema.js';\n\nimport planSchema from './plan.schema.js';\nimport subscriptionInfoSchema from './info.schema.js';\n\nexport default {\n planSchema,\n subscriptionInfoSchema,\n};\n\n","/**\n * Hold/Escrow Schema\n * @classytic/revenue\n *\n * Schema for platform-as-intermediary escrow flow\n * Spread into transaction schema when needed\n */\n\nimport { HOLD_STATUS, HOLD_STATUS_VALUES, HOLD_REASON_VALUES } from '../../enums/escrow.enums.js';\n\nexport const holdSchema = {\n status: {\n type: String,\n enum: HOLD_STATUS_VALUES,\n default: HOLD_STATUS.PENDING,\n },\n\n heldAmount: {\n type: Number,\n required: false,\n },\n\n releasedAmount: {\n type: Number,\n default: 0,\n },\n\n reason: {\n type: String,\n enum: HOLD_REASON_VALUES,\n required: false,\n },\n\n holdUntil: {\n type: Date,\n required: false,\n },\n\n heldAt: Date,\n releasedAt: Date,\n cancelledAt: Date,\n\n releases: [\n {\n amount: Number,\n recipientId: String,\n recipientType: String,\n releasedAt: Date,\n releasedBy: String,\n reason: String,\n metadata: Object,\n },\n ],\n\n metadata: {\n type: Object,\n default: {},\n },\n} as const;\n\nexport default holdSchema;\n","/**\n * Escrow Schemas Index\n * @classytic/revenue\n */\n\nexport { holdSchema } from './hold.schema.js';\n\nimport holdSchema from './hold.schema.js';\n\nexport default {\n holdSchema,\n};\n\n","/**\n * Split Schema\n * @classytic/revenue\n *\n * Schema for multi-party commission splits\n */\n\nimport { Schema } from 'mongoose';\nimport {\n SPLIT_TYPE_VALUES,\n SPLIT_STATUS,\n SPLIT_STATUS_VALUES,\n PAYOUT_METHOD_VALUES,\n} from '../../enums/split.enums.js';\n\n/**\n * Split Schema - Embedded in Transaction\n */\nexport const splitSchema = new Schema(\n {\n type: {\n type: String,\n enum: SPLIT_TYPE_VALUES,\n required: true,\n },\n recipientId: {\n type: String,\n required: true,\n },\n recipientType: {\n type: String,\n enum: ['platform', 'organization', 'user', 'affiliate', 'partner'],\n required: true,\n },\n rate: {\n type: Number,\n required: true,\n min: 0,\n max: 1,\n },\n grossAmount: {\n type: Number,\n required: true,\n min: 0,\n },\n gatewayFeeRate: {\n type: Number,\n default: 0,\n min: 0,\n max: 1,\n },\n gatewayFeeAmount: {\n type: Number,\n default: 0,\n min: 0,\n },\n netAmount: {\n type: Number,\n required: true,\n min: 0,\n },\n status: {\n type: String,\n enum: SPLIT_STATUS_VALUES,\n default: SPLIT_STATUS.PENDING,\n },\n dueDate: {\n type: Date,\n },\n paidDate: {\n type: Date,\n },\n payoutMethod: {\n type: String,\n enum: PAYOUT_METHOD_VALUES,\n },\n payoutTransactionId: {\n type: String,\n },\n metadata: {\n type: Schema.Types.Mixed,\n default: {},\n },\n },\n { _id: false }\n);\n\nexport default splitSchema;\n","/**\n * Split Schemas Index\n * @classytic/revenue\n */\n\nexport { splitSchema } from './split.schema.js';\n\nimport splitSchema from './split.schema.js';\n\nexport default {\n splitSchema,\n};\n\n","/**\n * Settlement Schema\n * @classytic/revenue\n *\n * Mongoose schema for settlement/payout tracking\n */\n\nimport mongoose, { Schema } from 'mongoose';\nimport { SETTLEMENT_STATUS_VALUES, SETTLEMENT_TYPE_VALUES } from '../../enums/settlement.enums.js';\nimport { PAYOUT_METHOD_VALUES } from '../../enums/split.enums.js';\n\n/**\n * Settlement Schema\n * Tracks payouts from platform to vendors/affiliates/partners\n *\n * Use in your Settlement model:\n * ```typescript\n * import mongoose from 'mongoose';\n * import { settlementSchema } from '@classytic/revenue/schemas';\n *\n * const Settlement = mongoose.model('Settlement', settlementSchema);\n * ```\n */\nexport const settlementSchema = new Schema({\n // ============ IDENTIFICATION ============\n\n organizationId: {\n type: Schema.Types.ObjectId,\n required: true,\n index: true,\n // The organization responsible for this payout\n },\n\n recipientId: {\n type: Schema.Types.ObjectId,\n required: true,\n index: true,\n // Who receives the payout (vendor, affiliate, partner)\n },\n\n recipientType: {\n type: String,\n enum: ['platform', 'organization', 'user', 'affiliate', 'partner'],\n required: true,\n // Type of recipient\n },\n\n // ============ CLASSIFICATION ============\n\n type: {\n type: String,\n enum: SETTLEMENT_TYPE_VALUES,\n required: true,\n // split_payout | platform_withdrawal | manual_payout | escrow_release\n },\n\n status: {\n type: String,\n enum: SETTLEMENT_STATUS_VALUES,\n default: 'pending',\n index: true,\n // pending | processing | completed | failed | cancelled\n },\n\n payoutMethod: {\n type: String,\n enum: PAYOUT_METHOD_VALUES,\n required: true,\n // bank_transfer | mobile_wallet | platform_balance | crypto | manual\n },\n\n // ============ AMOUNT ============\n\n amount: {\n type: Number,\n required: true,\n min: 0,\n // Amount in smallest currency unit (cents, paisa, etc.)\n },\n\n currency: {\n type: String,\n required: true,\n default: 'USD',\n // ISO 4217 currency code\n },\n\n // ============ SOURCE LINKAGE ============\n\n sourceTransactionIds: [{\n type: Schema.Types.ObjectId,\n ref: 'Transaction',\n // Transactions this settlement pays out from\n }],\n\n sourceSplitIds: [{\n type: String,\n // Split IDs within transactions (if applicable)\n }],\n\n // ============ BANK TRANSFER DETAILS ============\n\n bankTransferDetails: {\n accountNumber: { type: String },\n accountName: { type: String },\n bankName: { type: String },\n routingNumber: { type: String },\n swiftCode: { type: String },\n iban: { type: String },\n transferReference: { type: String }, // Bank confirmation reference\n transferredAt: { type: Date },\n },\n\n // ============ MOBILE WALLET DETAILS ============\n\n mobileWalletDetails: {\n provider: { type: String }, // bKash, Nagad, Rocket, etc.\n phoneNumber: { type: String },\n accountNumber: { type: String }, // Wallet account number\n transactionId: { type: String }, // Provider transaction ID\n transferredAt: { type: Date },\n },\n\n // ============ CRYPTO DETAILS ============\n\n cryptoDetails: {\n network: { type: String }, // Ethereum, Bitcoin, etc.\n walletAddress: { type: String },\n transactionHash: { type: String },\n transferredAt: { type: Date },\n },\n\n // ============ PLATFORM BALANCE ============\n\n platformBalanceDetails: {\n balanceId: { type: Schema.Types.ObjectId }, // Reference to balance record\n appliedAt: { type: Date },\n },\n\n // ============ DATES ============\n\n scheduledAt: {\n type: Date,\n index: true,\n // When this payout is scheduled for\n },\n\n processedAt: {\n type: Date,\n // When processing started\n },\n\n completedAt: {\n type: Date,\n // When successfully completed\n },\n\n failedAt: {\n type: Date,\n // When it failed\n },\n\n cancelledAt: {\n type: Date,\n // When it was cancelled\n },\n\n // ============ FAILURE INFO ============\n\n failureReason: {\n type: String,\n // Human-readable failure reason\n },\n\n failureCode: {\n type: String,\n // Machine-readable error code\n },\n\n retryCount: {\n type: Number,\n default: 0,\n min: 0,\n // Number of retry attempts\n },\n\n // ============ NOTES & METADATA ============\n\n notes: {\n type: String,\n // Admin notes about this settlement\n },\n\n metadata: {\n type: Schema.Types.Mixed,\n default: {},\n // Flexible metadata for app-specific data\n },\n}, {\n timestamps: true, // Adds createdAt and updatedAt\n});\n\n// ============ INDEXES ============\n\n// Query by organization and status\nsettlementSchema.index({ organizationId: 1, status: 1 });\n\n// Query by recipient and status\nsettlementSchema.index({ recipientId: 1, status: 1 });\n\n// Query scheduled settlements\nsettlementSchema.index({ type: 1, status: 1, scheduledAt: 1 });\n\n// Query by source transaction\nsettlementSchema.index({ sourceTransactionIds: 1 });\n\n// Query pending payouts by date\nsettlementSchema.index({ status: 1, scheduledAt: 1 });\n\n// ============ TYPESCRIPT TYPE ============\n\nexport type SettlementDocument = mongoose.InferSchemaType<typeof settlementSchema> &\n mongoose.Document & {\n _id: mongoose.Types.ObjectId;\n createdAt: Date;\n updatedAt: Date;\n };\n\n// ============ EXPORTS ============\n\nexport default settlementSchema;\n","/**\n * Settlement Schemas Index\n * @classytic/revenue\n */\n\nexport { settlementSchema, type SettlementDocument } from './settlement.schema.js';\n\nimport { settlementSchema } from './settlement.schema.js';\n\nexport default { settlementSchema };\n","/**\n * Schema Index\n * @classytic/revenue\n *\n * Core schemas for injection into your models\n *\n * Note: Enums are separate. Import them from '@classytic/revenue/enums'\n */\n\n// Re-export core schemas only\nexport * from './transaction/index.js';\nexport * from './subscription/index.js';\nexport * from './escrow/index.js';\nexport * from './split/index.js';\nexport * from './settlement/index.js';\n\n// Default export with core schemas\nimport transactionSchemas from './transaction/index.js';\nimport subscriptionSchemas from './subscription/index.js';\nimport escrowSchemas from './escrow/index.js';\nimport splitSchemas from './split/index.js';\nimport settlementSchemas from './settlement/index.js';\n\nexport default {\n ...transactionSchemas,\n ...subscriptionSchemas,\n ...escrowSchemas,\n ...splitSchemas,\n ...settlementSchemas,\n};\n\n"]}
|
|
@@ -118,8 +118,8 @@ declare const CreateSubscriptionSchema: z.ZodObject<{
|
|
|
118
118
|
}>>;
|
|
119
119
|
intervalCount: z.ZodDefault<z.ZodNumber>;
|
|
120
120
|
provider: z.ZodString;
|
|
121
|
-
|
|
122
|
-
|
|
121
|
+
sourceId: z.ZodOptional<z.ZodString>;
|
|
122
|
+
sourceModel: z.ZodOptional<z.ZodString>;
|
|
123
123
|
idempotencyKey: z.ZodOptional<z.ZodString>;
|
|
124
124
|
metadata: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
125
125
|
trialDays: z.ZodOptional<z.ZodNumber>;
|
|
@@ -158,8 +158,8 @@ declare const CreateMonetizationSchema: z.ZodObject<{
|
|
|
158
158
|
organizationId: z.ZodString;
|
|
159
159
|
provider: z.ZodString;
|
|
160
160
|
planKey: z.ZodOptional<z.ZodString>;
|
|
161
|
-
|
|
162
|
-
|
|
161
|
+
sourceId: z.ZodOptional<z.ZodString>;
|
|
162
|
+
sourceModel: z.ZodOptional<z.ZodString>;
|
|
163
163
|
idempotencyKey: z.ZodOptional<z.ZodString>;
|
|
164
164
|
metadata: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
165
165
|
interval: z.ZodOptional<z.ZodEnum<{
|
|
@@ -89,10 +89,10 @@ var CreateSubscriptionSchema = z.object({
|
|
|
89
89
|
intervalCount: z.number().int().positive().default(1),
|
|
90
90
|
/** Payment provider */
|
|
91
91
|
provider: z.string().min(1),
|
|
92
|
-
/**
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
|
|
92
|
+
/** Source entity ID (your app model) */
|
|
93
|
+
sourceId: z.string().optional(),
|
|
94
|
+
/** Source model name (your app model) */
|
|
95
|
+
sourceModel: z.string().optional(),
|
|
96
96
|
/** Idempotency key */
|
|
97
97
|
idempotencyKey: IdempotencyKeySchema,
|
|
98
98
|
/** Metadata */
|
|
@@ -128,10 +128,10 @@ var CreateMonetizationSchema = z.object({
|
|
|
128
128
|
provider: z.string().min(1),
|
|
129
129
|
/** Plan key for categorization */
|
|
130
130
|
planKey: z.string().optional(),
|
|
131
|
-
/**
|
|
132
|
-
|
|
133
|
-
/**
|
|
134
|
-
|
|
131
|
+
/** Source entity ID (your app model) */
|
|
132
|
+
sourceId: z.string().optional(),
|
|
133
|
+
/** Source model name (your app model) */
|
|
134
|
+
sourceModel: z.string().optional(),
|
|
135
135
|
/** Idempotency key */
|
|
136
136
|
idempotencyKey: IdempotencyKeySchema,
|
|
137
137
|
/** Metadata */
|
|
@@ -154,16 +154,16 @@ var SplitRecipientSchema = z.object({
|
|
|
154
154
|
recipientId: z.string().min(1),
|
|
155
155
|
/** Recipient type (user, organization, etc.) */
|
|
156
156
|
recipientType: z.string().default("user"),
|
|
157
|
-
/**
|
|
158
|
-
percentage: z.number().min(0).max(
|
|
157
|
+
/** Split rate as decimal (0-1, e.g., 0.10 for 10%) */
|
|
158
|
+
percentage: z.number().min(0).max(1),
|
|
159
159
|
/** Role description */
|
|
160
160
|
role: z.string().optional()
|
|
161
161
|
});
|
|
162
162
|
var CommissionConfigSchema = z.object({
|
|
163
|
-
/** Platform commission rate (0-
|
|
164
|
-
platformRate: z.number().min(0).max(
|
|
165
|
-
/** Gateway fee rate (0-
|
|
166
|
-
gatewayFeeRate: z.number().min(0).max(
|
|
163
|
+
/** Platform commission rate as decimal (0-1, e.g., 0.15 for 15%) */
|
|
164
|
+
platformRate: z.number().min(0).max(1).default(0),
|
|
165
|
+
/** Gateway fee rate as decimal (0-1, e.g., 0.029 for 2.9%) */
|
|
166
|
+
gatewayFeeRate: z.number().min(0).max(1).default(0),
|
|
167
167
|
/** Fixed gateway fee (smallest unit) */
|
|
168
168
|
gatewayFixedFee: MoneyAmountSchema.default(0),
|
|
169
169
|
/** Split recipients */
|
|
@@ -172,7 +172,8 @@ var CommissionConfigSchema = z.object({
|
|
|
172
172
|
affiliate: z.object({
|
|
173
173
|
recipientId: z.string(),
|
|
174
174
|
recipientType: z.string().default("user"),
|
|
175
|
-
rate
|
|
175
|
+
/** Affiliate rate as decimal (0-1, e.g., 0.05 for 5%) */
|
|
176
|
+
rate: z.number().min(0).max(1)
|
|
176
177
|
}).optional()
|
|
177
178
|
});
|
|
178
179
|
var PaymentStatusEnumSchema = z.enum([
|