@classytic/revenue 1.0.2 → 1.0.6
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 +171 -2
- package/dist/{actions-CwG-b7fR.d.ts → actions-Ctf2XUL-.d.ts} +1 -1
- package/dist/core/index.d.ts +2 -2
- package/dist/core/index.js +74 -4
- package/dist/core/index.js.map +1 -1
- package/dist/enums/index.d.ts +35 -27
- package/dist/enums/index.js +107 -11
- package/dist/enums/index.js.map +1 -1
- package/dist/{index-BnJWVXuw.d.ts → index-BnEXsnLJ.d.ts} +1 -1
- package/dist/{index-ChVD3P9k.d.ts → index-C5SsOrV0.d.ts} +31 -1
- package/dist/index.d.ts +10 -9
- package/dist/index.js +187 -36
- package/dist/index.js.map +1 -1
- package/dist/payment.enums-B_RwB8iR.d.ts +184 -0
- package/dist/providers/index.d.ts +1 -1
- package/dist/schemas/index.d.ts +294 -137
- package/dist/schemas/index.js +132 -29
- package/dist/schemas/index.js.map +1 -1
- package/dist/schemas/validation.d.ts +83 -8
- package/dist/schemas/validation.js +55 -2
- package/dist/schemas/validation.js.map +1 -1
- package/dist/services/index.d.ts +2 -2
- package/dist/services/index.js +74 -4
- package/dist/services/index.js.map +1 -1
- package/dist/{split.schema-DYVP7Wu2.d.ts → split.schema-DLVF3XBI.d.ts} +301 -137
- package/dist/transaction.enums-7uBnuswI.d.ts +87 -0
- package/dist/utils/index.d.ts +2 -2
- package/dist/utils/index.js +75 -2
- package/dist/utils/index.js.map +1 -1
- package/package.json +6 -5
- package/dist/split.enums-Bh24jw8p.d.ts +0 -255
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import * as z from 'zod';
|
|
2
|
-
export { z };
|
|
3
2
|
|
|
4
3
|
// @classytic/revenue - Enterprise Revenue Management System
|
|
5
4
|
|
|
@@ -176,6 +175,50 @@ var CommissionConfigSchema = z.object({
|
|
|
176
175
|
rate: z.number().min(0).max(100)
|
|
177
176
|
}).optional()
|
|
178
177
|
});
|
|
178
|
+
var PaymentStatusEnumSchema = z.enum([
|
|
179
|
+
"pending",
|
|
180
|
+
"verified",
|
|
181
|
+
"failed",
|
|
182
|
+
"refunded",
|
|
183
|
+
"cancelled"
|
|
184
|
+
]);
|
|
185
|
+
var PaymentEntrySchema = z.object({
|
|
186
|
+
/** Payment method (e.g., 'cash', 'bank_transfer', 'bkash') */
|
|
187
|
+
method: z.string().min(1, "Payment method is required"),
|
|
188
|
+
/** Amount in smallest currency unit */
|
|
189
|
+
amount: MoneyAmountSchema,
|
|
190
|
+
/** Reference/transaction ID for this payment */
|
|
191
|
+
reference: z.string().optional(),
|
|
192
|
+
/** Method-specific details (walletNumber, bankName, trxId, etc.) */
|
|
193
|
+
details: z.record(z.string(), z.unknown()).optional()
|
|
194
|
+
});
|
|
195
|
+
var CurrentPaymentInputSchema = z.object({
|
|
196
|
+
/** Transaction ID reference */
|
|
197
|
+
transactionId: z.string().optional(),
|
|
198
|
+
/** Total amount (sum of all payments for split payments) */
|
|
199
|
+
amount: MoneyAmountSchema,
|
|
200
|
+
/** Payment status */
|
|
201
|
+
status: PaymentStatusEnumSchema.default("pending"),
|
|
202
|
+
/** Primary method for single payments, or 'split' when multiple methods */
|
|
203
|
+
method: z.string().min(1, "Payment method is required"),
|
|
204
|
+
/** Reference/transaction ID for single payment */
|
|
205
|
+
reference: z.string().optional(),
|
|
206
|
+
/** Array of individual payments for split payment scenarios */
|
|
207
|
+
payments: z.array(PaymentEntrySchema).optional(),
|
|
208
|
+
/** Verification timestamp */
|
|
209
|
+
verifiedAt: z.date().optional(),
|
|
210
|
+
/** User ID who verified the payment */
|
|
211
|
+
verifiedBy: z.string().optional()
|
|
212
|
+
}).refine(
|
|
213
|
+
(data) => {
|
|
214
|
+
if (data.payments && data.payments.length > 0) {
|
|
215
|
+
const paymentsTotal = data.payments.reduce((sum, p) => sum + p.amount, 0);
|
|
216
|
+
return paymentsTotal === data.amount;
|
|
217
|
+
}
|
|
218
|
+
return true;
|
|
219
|
+
},
|
|
220
|
+
{ message: "Split payments total must equal the transaction amount" }
|
|
221
|
+
);
|
|
179
222
|
var HoldStatusSchema = z.enum([
|
|
180
223
|
"none",
|
|
181
224
|
"held",
|
|
@@ -243,7 +286,17 @@ function safeValidate(schema, data) {
|
|
|
243
286
|
function formatZodError(error) {
|
|
244
287
|
return error.issues.map((issue) => `${issue.path.join(".")}: ${issue.message}`).join(", ");
|
|
245
288
|
}
|
|
289
|
+
function validateSplitPayments(currentPayment) {
|
|
290
|
+
if (!currentPayment.payments?.length) {
|
|
291
|
+
return true;
|
|
292
|
+
}
|
|
293
|
+
const paymentsTotal = currentPayment.payments.reduce(
|
|
294
|
+
(sum, p) => sum + p.amount,
|
|
295
|
+
0
|
|
296
|
+
);
|
|
297
|
+
return paymentsTotal === currentPayment.amount;
|
|
298
|
+
}
|
|
246
299
|
|
|
247
|
-
export { CancelSubscriptionSchema, CommissionConfigSchema, CreateHoldSchema, CreateMonetizationSchema, CreatePaymentSchema, CreateSubscriptionSchema, CurrencySchema, EmailSchema, HoldStatusSchema, IdempotencyKeySchema, IntervalSchema, MetadataSchema, MonetizationTypeSchema, MoneyAmountSchema, MoneySchema, ObjectIdSchema, ProviderConfigSchema, RefundSchema, ReleaseHoldSchema, RetryConfigSchema, RevenueConfigSchema, SplitRecipientSchema, SubscriptionStatusSchema, VerifyPaymentSchema, formatZodError, safeValidate, validate };
|
|
300
|
+
export { CancelSubscriptionSchema, CommissionConfigSchema, CreateHoldSchema, CreateMonetizationSchema, CreatePaymentSchema, CreateSubscriptionSchema, CurrencySchema, CurrentPaymentInputSchema, EmailSchema, HoldStatusSchema, IdempotencyKeySchema, IntervalSchema, MetadataSchema, MonetizationTypeSchema, MoneyAmountSchema, MoneySchema, ObjectIdSchema, PaymentEntrySchema, PaymentStatusEnumSchema, ProviderConfigSchema, RefundSchema, ReleaseHoldSchema, RetryConfigSchema, RevenueConfigSchema, SplitRecipientSchema, SubscriptionStatusSchema, VerifyPaymentSchema, formatZodError, safeValidate, validate, validateSplitPayments };
|
|
248
301
|
//# sourceMappingURL=validation.js.map
|
|
249
302
|
//# sourceMappingURL=validation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/schemas/validation.ts"],"names":[],"mappings":"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","file":"validation.js","sourcesContent":["/**\n * Zod Validation Schemas\n * @classytic/revenue\n *\n * Runtime validation with TypeScript inference\n * Using Zod v4 - Modern schema validation\n *\n * Inspired by: tRPC, Zod best practices\n */\n\nimport * as z from 'zod';\n\n// ============ PRIMITIVE SCHEMAS ============\n\n/**\n * MongoDB ObjectId pattern\n */\nexport const ObjectIdSchema = z.string().regex(\n /^[a-fA-F0-9]{24}$/,\n 'Invalid ObjectId format'\n);\n\n/**\n * Currency code (ISO 4217)\n */\nexport const CurrencySchema = z.string()\n .length(3, 'Currency must be 3 characters')\n .transform(val => val.toUpperCase())\n .default('USD');\n\n/**\n * Money amount in smallest unit (cents, paisa)\n */\nexport const MoneyAmountSchema = z.number()\n .int('Amount must be integer (smallest unit)')\n .nonnegative('Amount cannot be negative');\n\n/**\n * Money object\n */\nexport const MoneySchema = z.object({\n amount: MoneyAmountSchema,\n currency: z.string().length(3).default('USD'),\n});\n\n/**\n * Email address\n */\nexport const EmailSchema = z.string().email();\n\n/**\n * Idempotency key (optional, auto-generated if not provided)\n */\nexport const IdempotencyKeySchema = z.string()\n .min(1)\n .max(255)\n .optional();\n\n/**\n * Metadata object - Zod v4 record syntax\n */\nexport const MetadataSchema = z.record(z.string(), z.unknown()).optional().default({});\n\n// ============ PAYMENT SCHEMAS ============\n\n/**\n * Create payment intent params\n */\nexport const CreatePaymentSchema = z.object({\n /** Amount in smallest currency unit (cents) */\n amount: MoneyAmountSchema,\n /** ISO 4217 currency code */\n currency: z.string().length(3).default('USD'),\n /** Customer identifier */\n customerId: z.string().min(1, 'Customer ID is required'),\n /** Organization/merchant identifier */\n organizationId: z.string().min(1, 'Organization ID is required'),\n /** Payment provider to use */\n provider: z.string().min(1, 'Provider is required'),\n /** Idempotency key for safe retries */\n idempotencyKey: IdempotencyKeySchema,\n /** Description of the payment */\n description: z.string().optional(),\n /** Additional metadata */\n metadata: MetadataSchema,\n /** Success redirect URL */\n successUrl: z.string().url().optional(),\n /** Cancel redirect URL */\n cancelUrl: z.string().url().optional(),\n});\n\nexport type CreatePaymentInput = z.infer<typeof CreatePaymentSchema>;\n\n/**\n * Verify payment params\n */\nexport const VerifyPaymentSchema = z.object({\n /** Transaction ID or payment intent ID */\n id: z.string().min(1),\n /** Provider name (optional, auto-detected) */\n provider: z.string().optional(),\n /** Additional verification data */\n data: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport type VerifyPaymentInput = z.infer<typeof VerifyPaymentSchema>;\n\n/**\n * Refund params\n */\nexport const RefundSchema = z.object({\n /** Transaction ID to refund */\n transactionId: z.string().min(1),\n /** Amount to refund (optional, full refund if not provided) */\n amount: MoneyAmountSchema.optional(),\n /** Reason for refund */\n reason: z.string().optional(),\n /** Idempotency key */\n idempotencyKey: IdempotencyKeySchema,\n /** Additional metadata */\n metadata: MetadataSchema,\n});\n\nexport type RefundInput = z.infer<typeof RefundSchema>;\n\n// ============ SUBSCRIPTION SCHEMAS ============\n\n/**\n * Subscription status\n */\nexport const SubscriptionStatusSchema = z.enum([\n 'pending',\n 'active',\n 'paused',\n 'cancelled',\n 'expired',\n 'past_due',\n]);\n\nexport type SubscriptionStatus = z.infer<typeof SubscriptionStatusSchema>;\n\n/**\n * Subscription interval\n */\nexport const IntervalSchema = z.enum([\n 'day',\n 'week',\n 'month',\n 'year',\n 'one_time',\n]);\n\nexport type Interval = z.infer<typeof IntervalSchema>;\n\n/**\n * Create subscription params\n */\nexport const CreateSubscriptionSchema = z.object({\n /** Customer ID */\n customerId: z.string().min(1),\n /** Organization ID */\n organizationId: z.string().min(1),\n /** Plan identifier */\n planKey: z.string().min(1),\n /** Amount per period (smallest unit) */\n amount: MoneyAmountSchema,\n /** Currency */\n currency: z.string().length(3).default('USD'),\n /** Billing interval */\n interval: IntervalSchema.default('month'),\n /** Interval count (e.g., 2 for bi-monthly) */\n intervalCount: z.number().int().positive().default(1),\n /** Payment provider */\n provider: z.string().min(1),\n /** Reference to external entity */\n referenceId: z.string().optional(),\n /** Reference model name */\n referenceModel: z.string().optional(),\n /** Idempotency key */\n idempotencyKey: IdempotencyKeySchema,\n /** Metadata */\n metadata: MetadataSchema,\n /** Trial period in days */\n trialDays: z.number().int().nonnegative().optional(),\n});\n\nexport type CreateSubscriptionInput = z.infer<typeof CreateSubscriptionSchema>;\n\n/**\n * Cancel subscription params\n */\nexport const CancelSubscriptionSchema = z.object({\n /** Subscription ID */\n subscriptionId: z.string().min(1),\n /** Cancel immediately or at period end */\n immediate: z.boolean().default(false),\n /** Cancellation reason */\n reason: z.string().optional(),\n});\n\nexport type CancelSubscriptionInput = z.infer<typeof CancelSubscriptionSchema>;\n\n// ============ MONETIZATION SCHEMAS ============\n\n/**\n * Monetization type\n */\nexport const MonetizationTypeSchema = z.enum([\n 'purchase',\n 'subscription',\n 'free',\n]);\n\nexport type MonetizationType = z.infer<typeof MonetizationTypeSchema>;\n\n/**\n * Create monetization params (unified API)\n */\nexport const CreateMonetizationSchema = z.object({\n /** Type of monetization */\n type: MonetizationTypeSchema.default('purchase'),\n /** Amount (smallest unit) - required for purchase/subscription */\n amount: MoneyAmountSchema.optional(),\n /** Currency */\n currency: z.string().length(3).default('USD'),\n /** Customer ID */\n customerId: z.string().min(1),\n /** Organization ID */\n organizationId: z.string().min(1),\n /** Payment provider */\n provider: z.string().min(1),\n /** Plan key for categorization */\n planKey: z.string().optional(),\n /** Reference ID */\n referenceId: z.string().optional(),\n /** Reference model */\n referenceModel: z.string().optional(),\n /** Idempotency key */\n idempotencyKey: IdempotencyKeySchema,\n /** Metadata */\n metadata: MetadataSchema,\n /** Subscription-specific: interval */\n interval: IntervalSchema.optional(),\n /** Subscription-specific: trial days */\n trialDays: z.number().int().nonnegative().optional(),\n}).refine(\n (data) => {\n if (data.type !== 'free' && !data.amount) {\n return false;\n }\n return true;\n },\n { message: 'Amount is required for non-free monetization types' }\n);\n\nexport type CreateMonetizationInput = z.infer<typeof CreateMonetizationSchema>;\n\n// ============ COMMISSION SCHEMAS ============\n\n/**\n * Commission split recipient\n */\nexport const SplitRecipientSchema = z.object({\n /** Recipient ID */\n recipientId: z.string().min(1),\n /** Recipient type (user, organization, etc.) */\n recipientType: z.string().default('user'),\n /** Percentage of net amount (0-100) */\n percentage: z.number().min(0).max(100),\n /** Role description */\n role: z.string().optional(),\n});\n\nexport type SplitRecipient = z.infer<typeof SplitRecipientSchema>;\n\n/**\n * Commission configuration\n */\nexport const CommissionConfigSchema = z.object({\n /** Platform commission rate (0-100) */\n platformRate: z.number().min(0).max(100).default(0),\n /** Gateway fee rate (0-100) */\n gatewayFeeRate: z.number().min(0).max(100).default(0),\n /** Fixed gateway fee (smallest unit) */\n gatewayFixedFee: MoneyAmountSchema.default(0),\n /** Split recipients */\n splits: z.array(SplitRecipientSchema).optional(),\n /** Affiliate configuration */\n affiliate: z.object({\n recipientId: z.string(),\n recipientType: z.string().default('user'),\n rate: z.number().min(0).max(100),\n }).optional(),\n});\n\nexport type CommissionConfig = z.infer<typeof CommissionConfigSchema>;\n\n// ============ ESCROW SCHEMAS ============\n\n/**\n * Hold status\n */\nexport const HoldStatusSchema = z.enum([\n 'none',\n 'held',\n 'partial_release',\n 'released',\n 'cancelled',\n]);\n\nexport type HoldStatus = z.infer<typeof HoldStatusSchema>;\n\n/**\n * Create hold params\n */\nexport const CreateHoldSchema = z.object({\n /** Transaction ID */\n transactionId: z.string().min(1),\n /** Hold amount (optional, defaults to full transaction amount) */\n amount: MoneyAmountSchema.optional(),\n /** Hold until date */\n holdUntil: z.date().optional(),\n /** Reason for hold */\n reason: z.string().optional(),\n});\n\nexport type CreateHoldInput = z.infer<typeof CreateHoldSchema>;\n\n/**\n * Release hold params\n */\nexport const ReleaseHoldSchema = z.object({\n /** Transaction ID */\n transactionId: z.string().min(1),\n /** Amount to release (optional, full release if not provided) */\n amount: MoneyAmountSchema.optional(),\n /** Recipient ID */\n recipientId: z.string().min(1),\n /** Recipient type */\n recipientType: z.string().default('user'),\n /** Release notes */\n notes: z.string().optional(),\n});\n\nexport type ReleaseHoldInput = z.infer<typeof ReleaseHoldSchema>;\n\n// ============ CONFIG SCHEMAS ============\n\n/**\n * Provider configuration\n */\nexport const ProviderConfigSchema = z.record(z.string(), z.unknown());\n\n/**\n * Retry configuration\n */\nexport const RetryConfigSchema = z.object({\n /** Maximum retry attempts */\n maxAttempts: z.number().int().positive().default(3),\n /** Base delay in ms */\n baseDelay: z.number().positive().default(1000),\n /** Maximum delay in ms */\n maxDelay: z.number().positive().default(30000),\n /** Backoff multiplier */\n backoffMultiplier: z.number().positive().default(2),\n /** Jitter factor (0-1) */\n jitter: z.number().min(0).max(1).default(0.1),\n});\n\nexport type RetryConfig = z.infer<typeof RetryConfigSchema>;\n\n/**\n * Revenue configuration\n */\nexport const RevenueConfigSchema = z.object({\n /** Default currency */\n defaultCurrency: z.string().length(3).default('USD'),\n /** Commission configuration */\n commission: CommissionConfigSchema.optional(),\n /** Retry configuration */\n retry: RetryConfigSchema.optional(),\n /** Enable debug logging */\n debug: z.boolean().default(false),\n /** Environment */\n environment: z.enum(['development', 'staging', 'production']).default('development'),\n});\n\nexport type RevenueConfigInput = z.infer<typeof RevenueConfigSchema>;\n\n// ============ VALIDATION HELPERS ============\n\n/**\n * Validate input against schema\n */\nexport function validate<T extends z.ZodType>(\n schema: T,\n data: unknown\n): z.infer<T> {\n return schema.parse(data);\n}\n\n/**\n * Safe validate (returns result, doesn't throw)\n */\nexport function safeValidate<T extends z.ZodType>(\n schema: T,\n data: unknown\n): { success: true; data: z.infer<T> } | { success: false; error: z.ZodError } {\n const result = schema.safeParse(data);\n if (result.success) {\n return { success: true, data: result.data };\n }\n return { success: false, error: result.error };\n}\n\n/**\n * Format Zod error for display\n * Zod v4 uses `issues` property\n */\nexport function formatZodError(error: z.ZodError): string {\n return error.issues\n .map((issue) => `${issue.path.join('.')}: ${issue.message}`)\n .join(', ');\n}\n\nexport { z };\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/schemas/validation.ts"],"names":[],"mappings":"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","file":"validation.js","sourcesContent":["/**\n * Zod Validation Schemas\n * @classytic/revenue\n *\n * Runtime validation with TypeScript inference\n * Using Zod v4 - Modern schema validation\n *\n * Inspired by: tRPC, Zod best practices\n */\n\nimport * as z from 'zod';\n\n// ============ PRIMITIVE SCHEMAS ============\n\n/**\n * MongoDB ObjectId pattern\n */\nexport const ObjectIdSchema = z.string().regex(\n /^[a-fA-F0-9]{24}$/,\n 'Invalid ObjectId format'\n);\n\n/**\n * Currency code (ISO 4217)\n */\nexport const CurrencySchema = z.string()\n .length(3, 'Currency must be 3 characters')\n .transform(val => val.toUpperCase())\n .default('USD');\n\n/**\n * Money amount in smallest unit (cents, paisa)\n */\nexport const MoneyAmountSchema = z.number()\n .int('Amount must be integer (smallest unit)')\n .nonnegative('Amount cannot be negative');\n\n/**\n * Money object\n */\nexport const MoneySchema = z.object({\n amount: MoneyAmountSchema,\n currency: z.string().length(3).default('USD'),\n});\n\n/**\n * Email address\n */\nexport const EmailSchema = z.string().email();\n\n/**\n * Idempotency key (optional, auto-generated if not provided)\n */\nexport const IdempotencyKeySchema = z.string()\n .min(1)\n .max(255)\n .optional();\n\n/**\n * Metadata object - Zod v4 record syntax\n */\nexport const MetadataSchema = z.record(z.string(), z.unknown()).optional().default({});\n\n// ============ PAYMENT SCHEMAS ============\n\n/**\n * Create payment intent params\n */\nexport const CreatePaymentSchema = z.object({\n /** Amount in smallest currency unit (cents) */\n amount: MoneyAmountSchema,\n /** ISO 4217 currency code */\n currency: z.string().length(3).default('USD'),\n /** Customer identifier */\n customerId: z.string().min(1, 'Customer ID is required'),\n /** Organization/merchant identifier */\n organizationId: z.string().min(1, 'Organization ID is required'),\n /** Payment provider to use */\n provider: z.string().min(1, 'Provider is required'),\n /** Idempotency key for safe retries */\n idempotencyKey: IdempotencyKeySchema,\n /** Description of the payment */\n description: z.string().optional(),\n /** Additional metadata */\n metadata: MetadataSchema,\n /** Success redirect URL */\n successUrl: z.string().url().optional(),\n /** Cancel redirect URL */\n cancelUrl: z.string().url().optional(),\n});\n\nexport type CreatePaymentInput = z.infer<typeof CreatePaymentSchema>;\n\n/**\n * Verify payment params\n */\nexport const VerifyPaymentSchema = z.object({\n /** Transaction ID or payment intent ID */\n id: z.string().min(1),\n /** Provider name (optional, auto-detected) */\n provider: z.string().optional(),\n /** Additional verification data */\n data: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport type VerifyPaymentInput = z.infer<typeof VerifyPaymentSchema>;\n\n/**\n * Refund params\n */\nexport const RefundSchema = z.object({\n /** Transaction ID to refund */\n transactionId: z.string().min(1),\n /** Amount to refund (optional, full refund if not provided) */\n amount: MoneyAmountSchema.optional(),\n /** Reason for refund */\n reason: z.string().optional(),\n /** Idempotency key */\n idempotencyKey: IdempotencyKeySchema,\n /** Additional metadata */\n metadata: MetadataSchema,\n});\n\nexport type RefundInput = z.infer<typeof RefundSchema>;\n\n// ============ SUBSCRIPTION SCHEMAS ============\n\n/**\n * Subscription status\n */\nexport const SubscriptionStatusSchema = z.enum([\n 'pending',\n 'active',\n 'paused',\n 'cancelled',\n 'expired',\n 'past_due',\n]);\n\nexport type SubscriptionStatus = z.infer<typeof SubscriptionStatusSchema>;\n\n/**\n * Subscription interval\n */\nexport const IntervalSchema = z.enum([\n 'day',\n 'week',\n 'month',\n 'year',\n 'one_time',\n]);\n\nexport type Interval = z.infer<typeof IntervalSchema>;\n\n/**\n * Create subscription params\n */\nexport const CreateSubscriptionSchema = z.object({\n /** Customer ID */\n customerId: z.string().min(1),\n /** Organization ID */\n organizationId: z.string().min(1),\n /** Plan identifier */\n planKey: z.string().min(1),\n /** Amount per period (smallest unit) */\n amount: MoneyAmountSchema,\n /** Currency */\n currency: z.string().length(3).default('USD'),\n /** Billing interval */\n interval: IntervalSchema.default('month'),\n /** Interval count (e.g., 2 for bi-monthly) */\n intervalCount: z.number().int().positive().default(1),\n /** Payment provider */\n provider: z.string().min(1),\n /** Reference to external entity */\n referenceId: z.string().optional(),\n /** Reference model name */\n referenceModel: z.string().optional(),\n /** Idempotency key */\n idempotencyKey: IdempotencyKeySchema,\n /** Metadata */\n metadata: MetadataSchema,\n /** Trial period in days */\n trialDays: z.number().int().nonnegative().optional(),\n});\n\nexport type CreateSubscriptionInput = z.infer<typeof CreateSubscriptionSchema>;\n\n/**\n * Cancel subscription params\n */\nexport const CancelSubscriptionSchema = z.object({\n /** Subscription ID */\n subscriptionId: z.string().min(1),\n /** Cancel immediately or at period end */\n immediate: z.boolean().default(false),\n /** Cancellation reason */\n reason: z.string().optional(),\n});\n\nexport type CancelSubscriptionInput = z.infer<typeof CancelSubscriptionSchema>;\n\n// ============ MONETIZATION SCHEMAS ============\n\n/**\n * Monetization type\n */\nexport const MonetizationTypeSchema = z.enum([\n 'purchase',\n 'subscription',\n 'free',\n]);\n\nexport type MonetizationType = z.infer<typeof MonetizationTypeSchema>;\n\n/**\n * Create monetization params (unified API)\n */\nexport const CreateMonetizationSchema = z.object({\n /** Type of monetization */\n type: MonetizationTypeSchema.default('purchase'),\n /** Amount (smallest unit) - required for purchase/subscription */\n amount: MoneyAmountSchema.optional(),\n /** Currency */\n currency: z.string().length(3).default('USD'),\n /** Customer ID */\n customerId: z.string().min(1),\n /** Organization ID */\n organizationId: z.string().min(1),\n /** Payment provider */\n provider: z.string().min(1),\n /** Plan key for categorization */\n planKey: z.string().optional(),\n /** Reference ID */\n referenceId: z.string().optional(),\n /** Reference model */\n referenceModel: z.string().optional(),\n /** Idempotency key */\n idempotencyKey: IdempotencyKeySchema,\n /** Metadata */\n metadata: MetadataSchema,\n /** Subscription-specific: interval */\n interval: IntervalSchema.optional(),\n /** Subscription-specific: trial days */\n trialDays: z.number().int().nonnegative().optional(),\n}).refine(\n (data) => {\n if (data.type !== 'free' && !data.amount) {\n return false;\n }\n return true;\n },\n { message: 'Amount is required for non-free monetization types' }\n);\n\nexport type CreateMonetizationInput = z.infer<typeof CreateMonetizationSchema>;\n\n// ============ COMMISSION SCHEMAS ============\n\n/**\n * Commission split recipient\n */\nexport const SplitRecipientSchema = z.object({\n /** Recipient ID */\n recipientId: z.string().min(1),\n /** Recipient type (user, organization, etc.) */\n recipientType: z.string().default('user'),\n /** Percentage of net amount (0-100) */\n percentage: z.number().min(0).max(100),\n /** Role description */\n role: z.string().optional(),\n});\n\nexport type SplitRecipient = z.infer<typeof SplitRecipientSchema>;\n\n/**\n * Commission configuration\n */\nexport const CommissionConfigSchema = z.object({\n /** Platform commission rate (0-100) */\n platformRate: z.number().min(0).max(100).default(0),\n /** Gateway fee rate (0-100) */\n gatewayFeeRate: z.number().min(0).max(100).default(0),\n /** Fixed gateway fee (smallest unit) */\n gatewayFixedFee: MoneyAmountSchema.default(0),\n /** Split recipients */\n splits: z.array(SplitRecipientSchema).optional(),\n /** Affiliate configuration */\n affiliate: z.object({\n recipientId: z.string(),\n recipientType: z.string().default('user'),\n rate: z.number().min(0).max(100),\n }).optional(),\n});\n\nexport type CommissionConfig = z.infer<typeof CommissionConfigSchema>;\n\n// ============ CURRENT PAYMENT SCHEMAS ============\n\n/**\n * Payment status enum\n */\nexport const PaymentStatusEnumSchema = z.enum([\n 'pending',\n 'verified',\n 'failed',\n 'refunded',\n 'cancelled',\n]);\n\nexport type PaymentStatusEnum = z.infer<typeof PaymentStatusEnumSchema>;\n\n/**\n * Individual payment entry for split/multi-payment scenarios\n * e.g., cash + bank transfer + mobile wallet\n */\nexport const PaymentEntrySchema = z.object({\n /** Payment method (e.g., 'cash', 'bank_transfer', 'bkash') */\n method: z.string().min(1, 'Payment method is required'),\n /** Amount in smallest currency unit */\n amount: MoneyAmountSchema,\n /** Reference/transaction ID for this payment */\n reference: z.string().optional(),\n /** Method-specific details (walletNumber, bankName, trxId, etc.) */\n details: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport type PaymentEntryInput = z.infer<typeof PaymentEntrySchema>;\n\n/**\n * Current payment schema with split payment support\n * Backward compatible - single payments work without the payments array\n */\nexport const CurrentPaymentInputSchema = z.object({\n /** Transaction ID reference */\n transactionId: z.string().optional(),\n /** Total amount (sum of all payments for split payments) */\n amount: MoneyAmountSchema,\n /** Payment status */\n status: PaymentStatusEnumSchema.default('pending'),\n /** Primary method for single payments, or 'split' when multiple methods */\n method: z.string().min(1, 'Payment method is required'),\n /** Reference/transaction ID for single payment */\n reference: z.string().optional(),\n /** Array of individual payments for split payment scenarios */\n payments: z.array(PaymentEntrySchema).optional(),\n /** Verification timestamp */\n verifiedAt: z.date().optional(),\n /** User ID who verified the payment */\n verifiedBy: z.string().optional(),\n}).refine(\n (data) => {\n // If payments array exists and has items, validate totals match\n if (data.payments && data.payments.length > 0) {\n const paymentsTotal = data.payments.reduce((sum, p) => sum + p.amount, 0);\n return paymentsTotal === data.amount;\n }\n return true;\n },\n { message: 'Split payments total must equal the transaction amount' }\n);\n\nexport type CurrentPaymentInput = z.infer<typeof CurrentPaymentInputSchema>;\n\n// ============ ESCROW SCHEMAS ============\n\n/**\n * Hold status\n */\nexport const HoldStatusSchema = z.enum([\n 'none',\n 'held',\n 'partial_release',\n 'released',\n 'cancelled',\n]);\n\nexport type HoldStatus = z.infer<typeof HoldStatusSchema>;\n\n/**\n * Create hold params\n */\nexport const CreateHoldSchema = z.object({\n /** Transaction ID */\n transactionId: z.string().min(1),\n /** Hold amount (optional, defaults to full transaction amount) */\n amount: MoneyAmountSchema.optional(),\n /** Hold until date */\n holdUntil: z.date().optional(),\n /** Reason for hold */\n reason: z.string().optional(),\n});\n\nexport type CreateHoldInput = z.infer<typeof CreateHoldSchema>;\n\n/**\n * Release hold params\n */\nexport const ReleaseHoldSchema = z.object({\n /** Transaction ID */\n transactionId: z.string().min(1),\n /** Amount to release (optional, full release if not provided) */\n amount: MoneyAmountSchema.optional(),\n /** Recipient ID */\n recipientId: z.string().min(1),\n /** Recipient type */\n recipientType: z.string().default('user'),\n /** Release notes */\n notes: z.string().optional(),\n});\n\nexport type ReleaseHoldInput = z.infer<typeof ReleaseHoldSchema>;\n\n// ============ CONFIG SCHEMAS ============\n\n/**\n * Provider configuration\n */\nexport const ProviderConfigSchema = z.record(z.string(), z.unknown());\n\n/**\n * Retry configuration\n */\nexport const RetryConfigSchema = z.object({\n /** Maximum retry attempts */\n maxAttempts: z.number().int().positive().default(3),\n /** Base delay in ms */\n baseDelay: z.number().positive().default(1000),\n /** Maximum delay in ms */\n maxDelay: z.number().positive().default(30000),\n /** Backoff multiplier */\n backoffMultiplier: z.number().positive().default(2),\n /** Jitter factor (0-1) */\n jitter: z.number().min(0).max(1).default(0.1),\n});\n\nexport type RetryConfig = z.infer<typeof RetryConfigSchema>;\n\n/**\n * Revenue configuration\n */\nexport const RevenueConfigSchema = z.object({\n /** Default currency */\n defaultCurrency: z.string().length(3).default('USD'),\n /** Commission configuration */\n commission: CommissionConfigSchema.optional(),\n /** Retry configuration */\n retry: RetryConfigSchema.optional(),\n /** Enable debug logging */\n debug: z.boolean().default(false),\n /** Environment */\n environment: z.enum(['development', 'staging', 'production']).default('development'),\n});\n\nexport type RevenueConfigInput = z.infer<typeof RevenueConfigSchema>;\n\n// ============ VALIDATION HELPERS ============\n\n/**\n * Validate input against schema\n */\nexport function validate<T extends z.ZodType>(\n schema: T,\n data: unknown\n): z.infer<T> {\n return schema.parse(data);\n}\n\n/**\n * Safe validate (returns result, doesn't throw)\n */\nexport function safeValidate<T extends z.ZodType>(\n schema: T,\n data: unknown\n): { success: true; data: z.infer<T> } | { success: false; error: z.ZodError } {\n const result = schema.safeParse(data);\n if (result.success) {\n return { success: true, data: result.data };\n }\n return { success: false, error: result.error };\n}\n\n/**\n * Format Zod error for display\n * Zod v4 uses `issues` property\n */\nexport function formatZodError(error: z.ZodError): string {\n return error.issues\n .map((issue) => `${issue.path.join('.')}: ${issue.message}`)\n .join(', ');\n}\n\n// ============ SPLIT PAYMENT HELPERS ============\n\n/**\n * Validates that split payment totals match the transaction amount\n * Returns true for single payments (no payments array)\n *\n * @param currentPayment - The current payment object to validate\n * @returns true if valid, false if split totals don't match\n *\n * @example\n * // Single payment - always valid\n * validateSplitPayments({ amount: 50000, method: 'cash', status: 'verified' }) // true\n *\n * // Split payment - totals must match\n * validateSplitPayments({\n * amount: 50000,\n * method: 'split',\n * status: 'verified',\n * payments: [\n * { method: 'cash', amount: 10000 },\n * { method: 'bkash', amount: 40000 },\n * ]\n * }) // true (10000 + 40000 = 50000)\n */\nexport function validateSplitPayments(currentPayment: {\n amount: number;\n payments?: Array<{ amount: number }>;\n}): boolean {\n if (!currentPayment.payments?.length) {\n return true; // Single payment, no validation needed\n }\n\n const paymentsTotal = currentPayment.payments.reduce(\n (sum, p) => sum + p.amount,\n 0\n );\n\n return paymentsTotal === currentPayment.amount;\n}\n"]}
|
package/dist/services/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { E as EscrowService, M as MonetizationService, P as PaymentService, T as TransactionService } from '../index-
|
|
2
|
-
import '../index-
|
|
1
|
+
export { E as EscrowService, M as MonetizationService, P as PaymentService, T as TransactionService } from '../index-BnEXsnLJ.js';
|
|
2
|
+
import '../index-C5SsOrV0.js';
|
|
3
3
|
import 'mongoose';
|
package/dist/services/index.js
CHANGED
|
@@ -204,14 +204,37 @@ var TRANSACTION_TYPE = {
|
|
|
204
204
|
INCOME: "income",
|
|
205
205
|
EXPENSE: "expense"
|
|
206
206
|
};
|
|
207
|
+
var TRANSACTION_TYPE_VALUES = Object.values(
|
|
208
|
+
TRANSACTION_TYPE
|
|
209
|
+
);
|
|
207
210
|
var TRANSACTION_STATUS = {
|
|
211
|
+
PENDING: "pending",
|
|
212
|
+
PAYMENT_INITIATED: "payment_initiated",
|
|
213
|
+
PROCESSING: "processing",
|
|
214
|
+
REQUIRES_ACTION: "requires_action",
|
|
208
215
|
VERIFIED: "verified",
|
|
209
216
|
COMPLETED: "completed",
|
|
210
|
-
|
|
217
|
+
FAILED: "failed",
|
|
218
|
+
CANCELLED: "cancelled",
|
|
219
|
+
EXPIRED: "expired",
|
|
220
|
+
REFUNDED: "refunded",
|
|
221
|
+
PARTIALLY_REFUNDED: "partially_refunded"
|
|
222
|
+
};
|
|
223
|
+
var TRANSACTION_STATUS_VALUES = Object.values(
|
|
224
|
+
TRANSACTION_STATUS
|
|
225
|
+
);
|
|
211
226
|
var LIBRARY_CATEGORIES = {
|
|
212
227
|
SUBSCRIPTION: "subscription",
|
|
213
228
|
PURCHASE: "purchase"
|
|
214
229
|
};
|
|
230
|
+
var LIBRARY_CATEGORY_VALUES = Object.values(
|
|
231
|
+
LIBRARY_CATEGORIES
|
|
232
|
+
);
|
|
233
|
+
new Set(TRANSACTION_TYPE_VALUES);
|
|
234
|
+
new Set(
|
|
235
|
+
TRANSACTION_STATUS_VALUES
|
|
236
|
+
);
|
|
237
|
+
new Set(LIBRARY_CATEGORY_VALUES);
|
|
215
238
|
|
|
216
239
|
// src/utils/category-resolver.ts
|
|
217
240
|
function resolveCategory(entity, monetizationType, categoryMappings = {}) {
|
|
@@ -281,6 +304,10 @@ var MONETIZATION_TYPES = {
|
|
|
281
304
|
PURCHASE: "purchase",
|
|
282
305
|
SUBSCRIPTION: "subscription"
|
|
283
306
|
};
|
|
307
|
+
var MONETIZATION_TYPE_VALUES = Object.values(
|
|
308
|
+
MONETIZATION_TYPES
|
|
309
|
+
);
|
|
310
|
+
new Set(MONETIZATION_TYPE_VALUES);
|
|
284
311
|
|
|
285
312
|
// src/services/monetization.service.ts
|
|
286
313
|
var MonetizationService = class {
|
|
@@ -1280,23 +1307,66 @@ var TransactionService = class {
|
|
|
1280
1307
|
|
|
1281
1308
|
// src/enums/escrow.enums.ts
|
|
1282
1309
|
var HOLD_STATUS = {
|
|
1310
|
+
PENDING: "pending",
|
|
1283
1311
|
HELD: "held",
|
|
1284
1312
|
RELEASED: "released",
|
|
1285
1313
|
CANCELLED: "cancelled",
|
|
1314
|
+
EXPIRED: "expired",
|
|
1286
1315
|
PARTIALLY_RELEASED: "partially_released"
|
|
1287
1316
|
};
|
|
1317
|
+
var HOLD_STATUS_VALUES = Object.values(HOLD_STATUS);
|
|
1288
1318
|
var RELEASE_REASON = {
|
|
1289
|
-
PAYMENT_VERIFIED: "payment_verified"
|
|
1319
|
+
PAYMENT_VERIFIED: "payment_verified",
|
|
1320
|
+
MANUAL_RELEASE: "manual_release",
|
|
1321
|
+
AUTO_RELEASE: "auto_release",
|
|
1322
|
+
DISPUTE_RESOLVED: "dispute_resolved"
|
|
1323
|
+
};
|
|
1324
|
+
var RELEASE_REASON_VALUES = Object.values(
|
|
1325
|
+
RELEASE_REASON
|
|
1326
|
+
);
|
|
1290
1327
|
var HOLD_REASON = {
|
|
1291
|
-
PAYMENT_VERIFICATION: "payment_verification"
|
|
1328
|
+
PAYMENT_VERIFICATION: "payment_verification",
|
|
1329
|
+
FRAUD_CHECK: "fraud_check",
|
|
1330
|
+
MANUAL_REVIEW: "manual_review",
|
|
1331
|
+
DISPUTE: "dispute",
|
|
1332
|
+
COMPLIANCE: "compliance"
|
|
1333
|
+
};
|
|
1334
|
+
var HOLD_REASON_VALUES = Object.values(HOLD_REASON);
|
|
1335
|
+
new Set(HOLD_STATUS_VALUES);
|
|
1336
|
+
new Set(RELEASE_REASON_VALUES);
|
|
1337
|
+
new Set(HOLD_REASON_VALUES);
|
|
1292
1338
|
|
|
1293
1339
|
// src/enums/split.enums.ts
|
|
1294
1340
|
var SPLIT_TYPE = {
|
|
1341
|
+
PLATFORM_COMMISSION: "platform_commission",
|
|
1342
|
+
AFFILIATE_COMMISSION: "affiliate_commission",
|
|
1343
|
+
REFERRAL_COMMISSION: "referral_commission",
|
|
1344
|
+
PARTNER_COMMISSION: "partner_commission",
|
|
1295
1345
|
CUSTOM: "custom"
|
|
1296
1346
|
};
|
|
1347
|
+
var SPLIT_TYPE_VALUES = Object.values(SPLIT_TYPE);
|
|
1297
1348
|
var SPLIT_STATUS = {
|
|
1298
1349
|
PENDING: "pending",
|
|
1299
|
-
|
|
1350
|
+
DUE: "due",
|
|
1351
|
+
PAID: "paid",
|
|
1352
|
+
WAIVED: "waived",
|
|
1353
|
+
CANCELLED: "cancelled"
|
|
1354
|
+
};
|
|
1355
|
+
var SPLIT_STATUS_VALUES = Object.values(
|
|
1356
|
+
SPLIT_STATUS
|
|
1357
|
+
);
|
|
1358
|
+
var PAYOUT_METHOD = {
|
|
1359
|
+
BANK_TRANSFER: "bank_transfer",
|
|
1360
|
+
MOBILE_WALLET: "mobile_wallet",
|
|
1361
|
+
PLATFORM_BALANCE: "platform_balance",
|
|
1362
|
+
CRYPTO: "crypto",
|
|
1363
|
+
CHECK: "check",
|
|
1364
|
+
MANUAL: "manual"
|
|
1365
|
+
};
|
|
1366
|
+
var PAYOUT_METHOD_VALUES = Object.values(PAYOUT_METHOD);
|
|
1367
|
+
new Set(SPLIT_TYPE_VALUES);
|
|
1368
|
+
new Set(SPLIT_STATUS_VALUES);
|
|
1369
|
+
new Set(PAYOUT_METHOD_VALUES);
|
|
1300
1370
|
|
|
1301
1371
|
// src/utils/commission-split.ts
|
|
1302
1372
|
function calculateSplits(amount, splitRules = [], gatewayFeeRate = 0) {
|