@salixcommerce/core 0.1.0
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 +5 -0
- package/dist/admin.d.ts +70 -0
- package/dist/admin.d.ts.map +1 -0
- package/dist/admin.js +76 -0
- package/dist/admin.js.map +1 -0
- package/dist/cart.d.ts +107 -0
- package/dist/cart.d.ts.map +1 -0
- package/dist/cart.js +87 -0
- package/dist/cart.js.map +1 -0
- package/dist/catalog.d.ts +89 -0
- package/dist/catalog.d.ts.map +1 -0
- package/dist/catalog.js +89 -0
- package/dist/catalog.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/invariant-error.d.ts +6 -0
- package/dist/invariant-error.d.ts.map +1 -0
- package/dist/invariant-error.js +9 -0
- package/dist/invariant-error.js.map +1 -0
- package/dist/inventory.d.ts +27 -0
- package/dist/inventory.d.ts.map +1 -0
- package/dist/inventory.js +95 -0
- package/dist/inventory.js.map +1 -0
- package/dist/lifecycle.d.ts +30 -0
- package/dist/lifecycle.d.ts.map +1 -0
- package/dist/lifecycle.js +76 -0
- package/dist/lifecycle.js.map +1 -0
- package/dist/money.d.ts +13 -0
- package/dist/money.d.ts.map +1 -0
- package/dist/money.js +67 -0
- package/dist/money.js.map +1 -0
- package/dist/order.d.ts +119 -0
- package/dist/order.d.ts.map +1 -0
- package/dist/order.js +132 -0
- package/dist/order.js.map +1 -0
- package/dist/payment.d.ts +253 -0
- package/dist/payment.d.ts.map +1 -0
- package/dist/payment.js +230 -0
- package/dist/payment.js.map +1 -0
- package/package.json +34 -0
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { type LifecycleGuardResult } from "./lifecycle.js";
|
|
3
|
+
import { type Money } from "./money.js";
|
|
4
|
+
export declare const paymentProviderKeySchema: z.ZodString;
|
|
5
|
+
export declare const paymentProviderReferenceSchema: z.ZodString;
|
|
6
|
+
export declare const paymentCheckoutDestinationSchema: z.ZodString;
|
|
7
|
+
export declare const paymentStatusSchema: z.ZodEnum<{
|
|
8
|
+
cancelled: "cancelled";
|
|
9
|
+
pending: "pending";
|
|
10
|
+
succeeded: "succeeded";
|
|
11
|
+
failed: "failed";
|
|
12
|
+
partially_refunded: "partially_refunded";
|
|
13
|
+
refunded: "refunded";
|
|
14
|
+
}>;
|
|
15
|
+
export declare const paymentCapabilitySchema: z.ZodEnum<{
|
|
16
|
+
"payment.succeed": "payment.succeed";
|
|
17
|
+
"payment.fail": "payment.fail";
|
|
18
|
+
"payment.cancel": "payment.cancel";
|
|
19
|
+
"payment.refund": "payment.refund";
|
|
20
|
+
}>;
|
|
21
|
+
export declare const paymentEventKindSchema: z.ZodEnum<{
|
|
22
|
+
"checkout.succeeded": "checkout.succeeded";
|
|
23
|
+
"checkout.failed": "checkout.failed";
|
|
24
|
+
"checkout.cancelled": "checkout.cancelled";
|
|
25
|
+
"refund.succeeded": "refund.succeeded";
|
|
26
|
+
}>;
|
|
27
|
+
export declare const paymentCheckoutCommandSchema: z.ZodObject<{
|
|
28
|
+
idempotencyKey: z.ZodString;
|
|
29
|
+
}, z.core.$strict>;
|
|
30
|
+
export declare const paymentCertificationCommandSchema: z.ZodObject<{
|
|
31
|
+
idempotencyKey: z.ZodString;
|
|
32
|
+
outcome: z.ZodEnum<{
|
|
33
|
+
succeed: "succeed";
|
|
34
|
+
fail: "fail";
|
|
35
|
+
cancel: "cancel";
|
|
36
|
+
}>;
|
|
37
|
+
}, z.core.$strict>;
|
|
38
|
+
export declare const paymentCheckoutInputSchema: z.ZodObject<{
|
|
39
|
+
amount: z.ZodObject<{
|
|
40
|
+
amountMinor: z.ZodNumber;
|
|
41
|
+
currency: z.ZodString;
|
|
42
|
+
}, z.core.$strict>;
|
|
43
|
+
idempotencyKey: z.ZodString;
|
|
44
|
+
orderReference: z.ZodString;
|
|
45
|
+
}, z.core.$strict>;
|
|
46
|
+
export declare const paymentCheckoutResultSchema: z.ZodObject<{
|
|
47
|
+
amount: z.ZodObject<{
|
|
48
|
+
amountMinor: z.ZodNumber;
|
|
49
|
+
currency: z.ZodString;
|
|
50
|
+
}, z.core.$strict>;
|
|
51
|
+
checkoutUrl: z.ZodString;
|
|
52
|
+
orderReference: z.ZodString;
|
|
53
|
+
provider: z.ZodString;
|
|
54
|
+
providerPaymentReference: z.ZodString;
|
|
55
|
+
status: z.ZodLiteral<"pending">;
|
|
56
|
+
}, z.core.$strict>;
|
|
57
|
+
export declare const paymentProviderPaymentSchema: z.ZodObject<{
|
|
58
|
+
amount: z.ZodObject<{
|
|
59
|
+
amountMinor: z.ZodNumber;
|
|
60
|
+
currency: z.ZodString;
|
|
61
|
+
}, z.core.$strict>;
|
|
62
|
+
orderReference: z.ZodString;
|
|
63
|
+
provider: z.ZodString;
|
|
64
|
+
providerPaymentReference: z.ZodString;
|
|
65
|
+
refundedAmount: z.ZodObject<{
|
|
66
|
+
amountMinor: z.ZodNumber;
|
|
67
|
+
currency: z.ZodString;
|
|
68
|
+
}, z.core.$strict>;
|
|
69
|
+
status: z.ZodEnum<{
|
|
70
|
+
cancelled: "cancelled";
|
|
71
|
+
pending: "pending";
|
|
72
|
+
succeeded: "succeeded";
|
|
73
|
+
failed: "failed";
|
|
74
|
+
partially_refunded: "partially_refunded";
|
|
75
|
+
refunded: "refunded";
|
|
76
|
+
}>;
|
|
77
|
+
}, z.core.$strict>;
|
|
78
|
+
export declare const paymentRefundInputSchema: z.ZodObject<{
|
|
79
|
+
amount: z.ZodObject<{
|
|
80
|
+
amountMinor: z.ZodNumber;
|
|
81
|
+
currency: z.ZodString;
|
|
82
|
+
}, z.core.$strict>;
|
|
83
|
+
idempotencyKey: z.ZodString;
|
|
84
|
+
orderReference: z.ZodString;
|
|
85
|
+
providerPaymentReference: z.ZodString;
|
|
86
|
+
reason: z.ZodString;
|
|
87
|
+
}, z.core.$strict>;
|
|
88
|
+
export declare const paymentRefundResultSchema: z.ZodObject<{
|
|
89
|
+
amount: z.ZodObject<{
|
|
90
|
+
amountMinor: z.ZodNumber;
|
|
91
|
+
currency: z.ZodString;
|
|
92
|
+
}, z.core.$strict>;
|
|
93
|
+
orderReference: z.ZodString;
|
|
94
|
+
provider: z.ZodString;
|
|
95
|
+
providerPaymentReference: z.ZodString;
|
|
96
|
+
providerRefundReference: z.ZodString;
|
|
97
|
+
status: z.ZodEnum<{
|
|
98
|
+
pending: "pending";
|
|
99
|
+
succeeded: "succeeded";
|
|
100
|
+
failed: "failed";
|
|
101
|
+
}>;
|
|
102
|
+
}, z.core.$strict>;
|
|
103
|
+
export declare const paymentWebhookInputSchema: z.ZodObject<{
|
|
104
|
+
rawBody: z.ZodString;
|
|
105
|
+
signature: z.ZodString;
|
|
106
|
+
}, z.core.$strict>;
|
|
107
|
+
export declare const normalizedPaymentEventSchema: z.ZodObject<{
|
|
108
|
+
amount: z.ZodObject<{
|
|
109
|
+
amountMinor: z.ZodNumber;
|
|
110
|
+
currency: z.ZodString;
|
|
111
|
+
}, z.core.$strict>;
|
|
112
|
+
eventId: z.ZodString;
|
|
113
|
+
kind: z.ZodEnum<{
|
|
114
|
+
"checkout.succeeded": "checkout.succeeded";
|
|
115
|
+
"checkout.failed": "checkout.failed";
|
|
116
|
+
"checkout.cancelled": "checkout.cancelled";
|
|
117
|
+
"refund.succeeded": "refund.succeeded";
|
|
118
|
+
}>;
|
|
119
|
+
occurredAt: z.ZodString;
|
|
120
|
+
orderReference: z.ZodString;
|
|
121
|
+
provider: z.ZodString;
|
|
122
|
+
providerPaymentReference: z.ZodString;
|
|
123
|
+
}, z.core.$strict>;
|
|
124
|
+
export declare const ignoredPaymentWebhookSchema: z.ZodObject<{
|
|
125
|
+
disposition: z.ZodLiteral<"ignored">;
|
|
126
|
+
eventId: z.ZodString;
|
|
127
|
+
provider: z.ZodString;
|
|
128
|
+
reason: z.ZodString;
|
|
129
|
+
}, z.core.$strict>;
|
|
130
|
+
export declare const paymentWebhookVerificationSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
131
|
+
disposition: z.ZodLiteral<"event">;
|
|
132
|
+
event: z.ZodObject<{
|
|
133
|
+
amount: z.ZodObject<{
|
|
134
|
+
amountMinor: z.ZodNumber;
|
|
135
|
+
currency: z.ZodString;
|
|
136
|
+
}, z.core.$strict>;
|
|
137
|
+
eventId: z.ZodString;
|
|
138
|
+
kind: z.ZodEnum<{
|
|
139
|
+
"checkout.succeeded": "checkout.succeeded";
|
|
140
|
+
"checkout.failed": "checkout.failed";
|
|
141
|
+
"checkout.cancelled": "checkout.cancelled";
|
|
142
|
+
"refund.succeeded": "refund.succeeded";
|
|
143
|
+
}>;
|
|
144
|
+
occurredAt: z.ZodString;
|
|
145
|
+
orderReference: z.ZodString;
|
|
146
|
+
provider: z.ZodString;
|
|
147
|
+
providerPaymentReference: z.ZodString;
|
|
148
|
+
}, z.core.$strict>;
|
|
149
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
150
|
+
disposition: z.ZodLiteral<"ignored">;
|
|
151
|
+
eventId: z.ZodString;
|
|
152
|
+
provider: z.ZodString;
|
|
153
|
+
reason: z.ZodString;
|
|
154
|
+
}, z.core.$strict>], "disposition">;
|
|
155
|
+
export declare const paymentSnapshotSchema: z.ZodObject<{
|
|
156
|
+
amount: z.ZodObject<{
|
|
157
|
+
amountMinor: z.ZodNumber;
|
|
158
|
+
currency: z.ZodString;
|
|
159
|
+
}, z.core.$strict>;
|
|
160
|
+
checkoutUrl: z.ZodString;
|
|
161
|
+
createdAt: z.ZodString;
|
|
162
|
+
id: z.ZodString;
|
|
163
|
+
orderReference: z.ZodString;
|
|
164
|
+
provider: z.ZodString;
|
|
165
|
+
providerPaymentReference: z.ZodString;
|
|
166
|
+
refundedAmount: z.ZodObject<{
|
|
167
|
+
amountMinor: z.ZodNumber;
|
|
168
|
+
currency: z.ZodString;
|
|
169
|
+
}, z.core.$strict>;
|
|
170
|
+
status: z.ZodEnum<{
|
|
171
|
+
cancelled: "cancelled";
|
|
172
|
+
pending: "pending";
|
|
173
|
+
succeeded: "succeeded";
|
|
174
|
+
failed: "failed";
|
|
175
|
+
partially_refunded: "partially_refunded";
|
|
176
|
+
refunded: "refunded";
|
|
177
|
+
}>;
|
|
178
|
+
updatedAt: z.ZodString;
|
|
179
|
+
}, z.core.$strict>;
|
|
180
|
+
export type PaymentStatus = z.output<typeof paymentStatusSchema>;
|
|
181
|
+
export type PaymentCertificationCommand = z.output<typeof paymentCertificationCommandSchema>;
|
|
182
|
+
export type PaymentCheckoutCommand = z.output<typeof paymentCheckoutCommandSchema>;
|
|
183
|
+
export type PaymentCapability = z.output<typeof paymentCapabilitySchema>;
|
|
184
|
+
export type PaymentEventKind = z.output<typeof paymentEventKindSchema>;
|
|
185
|
+
export type PaymentCheckoutInput = z.output<typeof paymentCheckoutInputSchema>;
|
|
186
|
+
export type PaymentCheckoutResult = z.output<typeof paymentCheckoutResultSchema>;
|
|
187
|
+
export type PaymentProviderPayment = z.output<typeof paymentProviderPaymentSchema>;
|
|
188
|
+
export type PaymentRefundInput = z.output<typeof paymentRefundInputSchema>;
|
|
189
|
+
export type PaymentRefundResult = z.output<typeof paymentRefundResultSchema>;
|
|
190
|
+
export type PaymentWebhookInput = z.output<typeof paymentWebhookInputSchema>;
|
|
191
|
+
export type NormalizedPaymentEvent = z.output<typeof normalizedPaymentEventSchema>;
|
|
192
|
+
export type IgnoredPaymentWebhook = z.output<typeof ignoredPaymentWebhookSchema>;
|
|
193
|
+
export type PaymentWebhookVerification = z.output<typeof paymentWebhookVerificationSchema>;
|
|
194
|
+
export type PaymentSnapshot = z.output<typeof paymentSnapshotSchema>;
|
|
195
|
+
export type PaymentProviderErrorCode = "CONFIGURATION" | "INVALID_REQUEST" | "NOT_FOUND" | "REJECTED" | "SIGNATURE_INVALID" | "TEMPORARY_FAILURE";
|
|
196
|
+
export interface PaymentProviderError {
|
|
197
|
+
readonly code: PaymentProviderErrorCode;
|
|
198
|
+
readonly message: string;
|
|
199
|
+
readonly retryable: boolean;
|
|
200
|
+
}
|
|
201
|
+
export type PaymentProviderResult<T> = {
|
|
202
|
+
readonly data: T;
|
|
203
|
+
readonly ok: true;
|
|
204
|
+
} | {
|
|
205
|
+
readonly error: PaymentProviderError;
|
|
206
|
+
readonly ok: false;
|
|
207
|
+
};
|
|
208
|
+
export interface PaymentProvider {
|
|
209
|
+
readonly key: string;
|
|
210
|
+
createCheckout(input: PaymentCheckoutInput): Promise<PaymentProviderResult<PaymentCheckoutResult>>;
|
|
211
|
+
createRefund(input: PaymentRefundInput): Promise<PaymentProviderResult<PaymentRefundResult>>;
|
|
212
|
+
retrievePayment(reference: string): Promise<PaymentProviderResult<PaymentProviderPayment>>;
|
|
213
|
+
verifyWebhook(input: PaymentWebhookInput): Promise<PaymentProviderResult<PaymentWebhookVerification>>;
|
|
214
|
+
}
|
|
215
|
+
export declare const PAYMENT_TRANSITIONS: readonly [{
|
|
216
|
+
readonly capability: "payment.succeed";
|
|
217
|
+
readonly from: "pending";
|
|
218
|
+
readonly to: "succeeded";
|
|
219
|
+
}, {
|
|
220
|
+
readonly capability: "payment.fail";
|
|
221
|
+
readonly from: "pending";
|
|
222
|
+
readonly to: "failed";
|
|
223
|
+
}, {
|
|
224
|
+
readonly capability: "payment.cancel";
|
|
225
|
+
readonly from: "pending";
|
|
226
|
+
readonly to: "cancelled";
|
|
227
|
+
}, {
|
|
228
|
+
readonly capability: "payment.refund";
|
|
229
|
+
readonly from: "succeeded";
|
|
230
|
+
readonly to: "partially_refunded";
|
|
231
|
+
}, {
|
|
232
|
+
readonly capability: "payment.refund";
|
|
233
|
+
readonly from: "succeeded";
|
|
234
|
+
readonly to: "refunded";
|
|
235
|
+
}, {
|
|
236
|
+
readonly capability: "payment.refund";
|
|
237
|
+
readonly from: "partially_refunded";
|
|
238
|
+
readonly to: "partially_refunded";
|
|
239
|
+
}, {
|
|
240
|
+
readonly capability: "payment.refund";
|
|
241
|
+
readonly from: "partially_refunded";
|
|
242
|
+
readonly to: "refunded";
|
|
243
|
+
}];
|
|
244
|
+
export declare function guardPaymentTransition(from: PaymentStatus, to: PaymentStatus, capabilities: readonly PaymentCapability[]): LifecycleGuardResult<PaymentStatus, PaymentCapability>;
|
|
245
|
+
export declare function validatePaymentTransitionTable(): import("./lifecycle.js").LifecycleTableDefect[];
|
|
246
|
+
export interface PaymentEventApplication {
|
|
247
|
+
readonly capability: PaymentCapability;
|
|
248
|
+
readonly fromStatus: PaymentStatus;
|
|
249
|
+
readonly refundedAmount: Money;
|
|
250
|
+
readonly toStatus: PaymentStatus;
|
|
251
|
+
}
|
|
252
|
+
export declare function resolvePaymentEvent(current: PaymentProviderPayment, event: NormalizedPaymentEvent): PaymentEventApplication;
|
|
253
|
+
//# sourceMappingURL=payment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payment.d.ts","sourceRoot":"","sources":["../src/payment.ts"],"names":[],"mappings":"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"}
|
package/dist/payment.js
ADDED
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { idempotencyKeySchema } from "./cart.js";
|
|
3
|
+
import { DomainInvariantError } from "./invariant-error.js";
|
|
4
|
+
import { guardLifecycleTransition, validateLifecycleTransitionTable, } from "./lifecycle.js";
|
|
5
|
+
import { addMoney, moneySchema } from "./money.js";
|
|
6
|
+
import { orderReferenceSchema } from "./order.js";
|
|
7
|
+
export const paymentProviderKeySchema = z
|
|
8
|
+
.string()
|
|
9
|
+
.trim()
|
|
10
|
+
.min(1)
|
|
11
|
+
.max(50)
|
|
12
|
+
.regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/u, "Payment provider must be a slug.");
|
|
13
|
+
export const paymentProviderReferenceSchema = z
|
|
14
|
+
.string()
|
|
15
|
+
.trim()
|
|
16
|
+
.min(8)
|
|
17
|
+
.max(200)
|
|
18
|
+
.regex(/^[A-Za-z0-9][A-Za-z0-9._:-]*$/u, "Invalid provider reference.");
|
|
19
|
+
export const paymentCheckoutDestinationSchema = z
|
|
20
|
+
.string()
|
|
21
|
+
.trim()
|
|
22
|
+
.min(1)
|
|
23
|
+
.max(2_000)
|
|
24
|
+
.refine((value) => isInternalPath(value) || isHttpsUrl(value), {
|
|
25
|
+
message: "Checkout destination must be root-relative or HTTPS.",
|
|
26
|
+
});
|
|
27
|
+
export const paymentStatusSchema = z.enum([
|
|
28
|
+
"pending",
|
|
29
|
+
"succeeded",
|
|
30
|
+
"failed",
|
|
31
|
+
"cancelled",
|
|
32
|
+
"partially_refunded",
|
|
33
|
+
"refunded",
|
|
34
|
+
]);
|
|
35
|
+
export const paymentCapabilitySchema = z.enum([
|
|
36
|
+
"payment.succeed",
|
|
37
|
+
"payment.fail",
|
|
38
|
+
"payment.cancel",
|
|
39
|
+
"payment.refund",
|
|
40
|
+
]);
|
|
41
|
+
export const paymentEventKindSchema = z.enum([
|
|
42
|
+
"checkout.succeeded",
|
|
43
|
+
"checkout.failed",
|
|
44
|
+
"checkout.cancelled",
|
|
45
|
+
"refund.succeeded",
|
|
46
|
+
]);
|
|
47
|
+
export const paymentCheckoutCommandSchema = z.strictObject({
|
|
48
|
+
idempotencyKey: idempotencyKeySchema,
|
|
49
|
+
});
|
|
50
|
+
export const paymentCertificationCommandSchema = z.strictObject({
|
|
51
|
+
idempotencyKey: idempotencyKeySchema,
|
|
52
|
+
outcome: z.enum(["succeed", "fail", "cancel"]),
|
|
53
|
+
});
|
|
54
|
+
export const paymentCheckoutInputSchema = z.strictObject({
|
|
55
|
+
amount: moneySchema,
|
|
56
|
+
idempotencyKey: idempotencyKeySchema,
|
|
57
|
+
orderReference: orderReferenceSchema,
|
|
58
|
+
});
|
|
59
|
+
export const paymentCheckoutResultSchema = z.strictObject({
|
|
60
|
+
amount: moneySchema,
|
|
61
|
+
checkoutUrl: paymentCheckoutDestinationSchema,
|
|
62
|
+
orderReference: orderReferenceSchema,
|
|
63
|
+
provider: paymentProviderKeySchema,
|
|
64
|
+
providerPaymentReference: paymentProviderReferenceSchema,
|
|
65
|
+
status: z.literal("pending"),
|
|
66
|
+
});
|
|
67
|
+
export const paymentProviderPaymentSchema = z
|
|
68
|
+
.strictObject({
|
|
69
|
+
amount: moneySchema,
|
|
70
|
+
orderReference: orderReferenceSchema,
|
|
71
|
+
provider: paymentProviderKeySchema,
|
|
72
|
+
providerPaymentReference: paymentProviderReferenceSchema,
|
|
73
|
+
refundedAmount: moneySchema,
|
|
74
|
+
status: paymentStatusSchema,
|
|
75
|
+
})
|
|
76
|
+
.superRefine(validatePaymentMoneyState);
|
|
77
|
+
export const paymentRefundInputSchema = z.strictObject({
|
|
78
|
+
amount: moneySchema,
|
|
79
|
+
idempotencyKey: idempotencyKeySchema,
|
|
80
|
+
orderReference: orderReferenceSchema,
|
|
81
|
+
providerPaymentReference: paymentProviderReferenceSchema,
|
|
82
|
+
reason: z.string().trim().min(1).max(240),
|
|
83
|
+
});
|
|
84
|
+
export const paymentRefundResultSchema = z.strictObject({
|
|
85
|
+
amount: moneySchema,
|
|
86
|
+
orderReference: orderReferenceSchema,
|
|
87
|
+
provider: paymentProviderKeySchema,
|
|
88
|
+
providerPaymentReference: paymentProviderReferenceSchema,
|
|
89
|
+
providerRefundReference: paymentProviderReferenceSchema,
|
|
90
|
+
status: z.enum(["pending", "succeeded", "failed"]),
|
|
91
|
+
});
|
|
92
|
+
export const paymentWebhookInputSchema = z.strictObject({
|
|
93
|
+
rawBody: z.string().min(1).max(1_048_576),
|
|
94
|
+
signature: z.string().trim().min(16).max(1_024),
|
|
95
|
+
});
|
|
96
|
+
export const normalizedPaymentEventSchema = z
|
|
97
|
+
.strictObject({
|
|
98
|
+
amount: moneySchema,
|
|
99
|
+
eventId: paymentProviderReferenceSchema,
|
|
100
|
+
kind: paymentEventKindSchema,
|
|
101
|
+
occurredAt: z.string().datetime({ offset: true }),
|
|
102
|
+
orderReference: orderReferenceSchema,
|
|
103
|
+
provider: paymentProviderKeySchema,
|
|
104
|
+
providerPaymentReference: paymentProviderReferenceSchema,
|
|
105
|
+
})
|
|
106
|
+
.superRefine((event, context) => {
|
|
107
|
+
if (event.kind === "refund.succeeded" && event.amount.amountMinor === 0) {
|
|
108
|
+
context.addIssue({ code: "custom", message: "A refund event amount must be positive." });
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
export const ignoredPaymentWebhookSchema = z.strictObject({
|
|
112
|
+
disposition: z.literal("ignored"),
|
|
113
|
+
eventId: paymentProviderReferenceSchema,
|
|
114
|
+
provider: paymentProviderKeySchema,
|
|
115
|
+
reason: z.string().trim().min(1).max(120),
|
|
116
|
+
});
|
|
117
|
+
export const paymentWebhookVerificationSchema = z.discriminatedUnion("disposition", [
|
|
118
|
+
z.strictObject({
|
|
119
|
+
disposition: z.literal("event"),
|
|
120
|
+
event: normalizedPaymentEventSchema,
|
|
121
|
+
}),
|
|
122
|
+
ignoredPaymentWebhookSchema,
|
|
123
|
+
]);
|
|
124
|
+
export const paymentSnapshotSchema = z
|
|
125
|
+
.strictObject({
|
|
126
|
+
amount: moneySchema,
|
|
127
|
+
checkoutUrl: paymentCheckoutDestinationSchema,
|
|
128
|
+
createdAt: z.string().datetime({ offset: true }),
|
|
129
|
+
id: z.string().regex(/^[1-9][0-9]*$/u),
|
|
130
|
+
orderReference: orderReferenceSchema,
|
|
131
|
+
provider: paymentProviderKeySchema,
|
|
132
|
+
providerPaymentReference: paymentProviderReferenceSchema,
|
|
133
|
+
refundedAmount: moneySchema,
|
|
134
|
+
status: paymentStatusSchema,
|
|
135
|
+
updatedAt: z.string().datetime({ offset: true }),
|
|
136
|
+
})
|
|
137
|
+
.superRefine((payment, context) => {
|
|
138
|
+
validatePaymentMoneyState(payment, context);
|
|
139
|
+
if (new Date(payment.updatedAt).getTime() < new Date(payment.createdAt).getTime()) {
|
|
140
|
+
context.addIssue({ code: "custom", message: "Payment timestamps are out of order." });
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
export const PAYMENT_TRANSITIONS = Object.freeze([
|
|
144
|
+
{ capability: "payment.succeed", from: "pending", to: "succeeded" },
|
|
145
|
+
{ capability: "payment.fail", from: "pending", to: "failed" },
|
|
146
|
+
{ capability: "payment.cancel", from: "pending", to: "cancelled" },
|
|
147
|
+
{ capability: "payment.refund", from: "succeeded", to: "partially_refunded" },
|
|
148
|
+
{ capability: "payment.refund", from: "succeeded", to: "refunded" },
|
|
149
|
+
{ capability: "payment.refund", from: "partially_refunded", to: "partially_refunded" },
|
|
150
|
+
{ capability: "payment.refund", from: "partially_refunded", to: "refunded" },
|
|
151
|
+
]);
|
|
152
|
+
export function guardPaymentTransition(from, to, capabilities) {
|
|
153
|
+
return guardLifecycleTransition(PAYMENT_TRANSITIONS, { capabilities, from, to });
|
|
154
|
+
}
|
|
155
|
+
export function validatePaymentTransitionTable() {
|
|
156
|
+
return validateLifecycleTransitionTable(PAYMENT_TRANSITIONS, "pending", [
|
|
157
|
+
"cancelled",
|
|
158
|
+
"failed",
|
|
159
|
+
"refunded",
|
|
160
|
+
]);
|
|
161
|
+
}
|
|
162
|
+
export function resolvePaymentEvent(current, event) {
|
|
163
|
+
const payment = paymentProviderPaymentSchema.parse(current);
|
|
164
|
+
const normalized = normalizedPaymentEventSchema.parse(event);
|
|
165
|
+
assertEventIdentity(payment, normalized);
|
|
166
|
+
let capability;
|
|
167
|
+
let toStatus;
|
|
168
|
+
let refundedAmount = payment.refundedAmount;
|
|
169
|
+
if (normalized.kind === "refund.succeeded") {
|
|
170
|
+
capability = "payment.refund";
|
|
171
|
+
refundedAmount = addMoney(payment.refundedAmount, normalized.amount);
|
|
172
|
+
if (refundedAmount.amountMinor > payment.amount.amountMinor) {
|
|
173
|
+
throw new DomainInvariantError("PAYMENT_REFUND_EXCEEDS_CAPTURE", "Cumulative refunds cannot exceed the captured payment amount.");
|
|
174
|
+
}
|
|
175
|
+
toStatus =
|
|
176
|
+
refundedAmount.amountMinor === payment.amount.amountMinor ? "refunded" : "partially_refunded";
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
if (normalized.amount.amountMinor !== payment.amount.amountMinor ||
|
|
180
|
+
normalized.amount.currency !== payment.amount.currency) {
|
|
181
|
+
throw new DomainInvariantError("PAYMENT_EVENT_MISMATCH", "Checkout event amount does not match the canonical payment amount.");
|
|
182
|
+
}
|
|
183
|
+
const targetByKind = {
|
|
184
|
+
"checkout.cancelled": ["payment.cancel", "cancelled"],
|
|
185
|
+
"checkout.failed": ["payment.fail", "failed"],
|
|
186
|
+
"checkout.succeeded": ["payment.succeed", "succeeded"],
|
|
187
|
+
};
|
|
188
|
+
[capability, toStatus] = targetByKind[normalized.kind];
|
|
189
|
+
}
|
|
190
|
+
const guarded = guardPaymentTransition(payment.status, toStatus, [capability]);
|
|
191
|
+
if (!guarded.ok) {
|
|
192
|
+
throw new DomainInvariantError("PAYMENT_ILLEGAL_TRANSITION", `Payment cannot move from ${payment.status} to ${toStatus}.`);
|
|
193
|
+
}
|
|
194
|
+
return Object.freeze({
|
|
195
|
+
capability,
|
|
196
|
+
fromStatus: payment.status,
|
|
197
|
+
refundedAmount,
|
|
198
|
+
toStatus,
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
function validatePaymentMoneyState(payment, context) {
|
|
202
|
+
if (payment.amount.currency !== payment.refundedAmount.currency) {
|
|
203
|
+
context.addIssue({ code: "custom", message: "Payment and refund currencies must match." });
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
const amount = payment.amount.amountMinor;
|
|
207
|
+
const refunded = payment.refundedAmount.amountMinor;
|
|
208
|
+
const valid = refunded <= amount &&
|
|
209
|
+
((payment.status === "partially_refunded" && refunded > 0 && refunded < amount) ||
|
|
210
|
+
(payment.status === "refunded" && refunded === amount) ||
|
|
211
|
+
(!payment.status.includes("refunded") && refunded === 0));
|
|
212
|
+
if (!valid) {
|
|
213
|
+
context.addIssue({ code: "custom", message: "Refund amount does not match payment status." });
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
function assertEventIdentity(payment, event) {
|
|
217
|
+
if (payment.provider !== event.provider ||
|
|
218
|
+
payment.providerPaymentReference !== event.providerPaymentReference ||
|
|
219
|
+
payment.orderReference !== event.orderReference ||
|
|
220
|
+
payment.amount.currency !== event.amount.currency) {
|
|
221
|
+
throw new DomainInvariantError("PAYMENT_EVENT_MISMATCH", "Payment event identity or currency does not match the canonical payment.");
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
function isInternalPath(value) {
|
|
225
|
+
return value.startsWith("/") && !value.startsWith("//");
|
|
226
|
+
}
|
|
227
|
+
function isHttpsUrl(value) {
|
|
228
|
+
return value.startsWith("https://") && value.length > "https://".length;
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=payment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payment.js","sourceRoot":"","sources":["../src/payment.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@salixcommerce/core",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Framework-neutral Salix Commerce domain contracts and invariants.",
|
|
5
|
+
"license": "UNLICENSED",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"sideEffects": false,
|
|
8
|
+
"files": [
|
|
9
|
+
"dist",
|
|
10
|
+
"README.md"
|
|
11
|
+
],
|
|
12
|
+
"main": "./dist/index.js",
|
|
13
|
+
"types": "./dist/index.d.ts",
|
|
14
|
+
"exports": {
|
|
15
|
+
".": {
|
|
16
|
+
"types": "./dist/index.d.ts",
|
|
17
|
+
"import": "./dist/index.js",
|
|
18
|
+
"default": "./dist/index.js"
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"engines": {
|
|
22
|
+
"node": ">=24.11.0 <25"
|
|
23
|
+
},
|
|
24
|
+
"publishConfig": {
|
|
25
|
+
"access": "public"
|
|
26
|
+
},
|
|
27
|
+
"dependencies": {
|
|
28
|
+
"zod": "4.4.3"
|
|
29
|
+
},
|
|
30
|
+
"scripts": {
|
|
31
|
+
"build": "tsc -p tsconfig.build.json",
|
|
32
|
+
"typecheck": "tsc -p tsconfig.json --noEmit"
|
|
33
|
+
}
|
|
34
|
+
}
|