@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
package/README.md
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# @salixcommerce/core
|
|
2
|
+
|
|
3
|
+
Framework-neutral commerce contracts and invariants.
|
|
4
|
+
|
|
5
|
+
SC09 implements runtime-validated money, product, variant, public catalog, availability, on-hand/reserved inventory, cart pricing, immutable order snapshots, declarative order/payment/fulfillment transitions, normalized payment events, administrator roles/capabilities/commands, and the provider-neutral `PaymentProvider` interface. Verified provider deliveries are explicitly classified as an applicable commerce event or an acknowledged ignored event. The package has no framework, database, provider SDK, environment, route, or client-content dependency. Generated applications own persistence, authentication, RLS, provider adapters, transactional repositories, capability cookies, and presentation.
|
package/dist/admin.d.ts
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const adminRoleSchema: z.ZodEnum<{
|
|
3
|
+
owner: "owner";
|
|
4
|
+
manager: "manager";
|
|
5
|
+
operator: "operator";
|
|
6
|
+
}>;
|
|
7
|
+
export declare const adminCapabilitySchema: z.ZodEnum<{
|
|
8
|
+
"admin.access": "admin.access";
|
|
9
|
+
"admin.audit.read": "admin.audit.read";
|
|
10
|
+
"admin.catalog.write": "admin.catalog.write";
|
|
11
|
+
"admin.inventory.adjust": "admin.inventory.adjust";
|
|
12
|
+
"admin.order.fulfill": "admin.order.fulfill";
|
|
13
|
+
"admin.payment.refund": "admin.payment.refund";
|
|
14
|
+
}>;
|
|
15
|
+
export type AdminRole = z.output<typeof adminRoleSchema>;
|
|
16
|
+
export type AdminCapability = z.output<typeof adminCapabilitySchema>;
|
|
17
|
+
export declare const ADMIN_ROLE_CAPABILITIES: Readonly<{
|
|
18
|
+
readonly owner: readonly ("admin.access" | "admin.audit.read" | "admin.catalog.write" | "admin.inventory.adjust" | "admin.order.fulfill" | "admin.payment.refund")[];
|
|
19
|
+
readonly manager: readonly ("admin.access" | "admin.audit.read" | "admin.catalog.write" | "admin.inventory.adjust" | "admin.order.fulfill" | "admin.payment.refund")[];
|
|
20
|
+
readonly operator: readonly ("admin.access" | "admin.inventory.adjust" | "admin.order.fulfill")[];
|
|
21
|
+
}>;
|
|
22
|
+
export declare function adminRoleHasCapability(role: AdminRole, capability: AdminCapability): boolean;
|
|
23
|
+
export declare const adminLoginCommandSchema: z.ZodObject<{
|
|
24
|
+
email: z.ZodString;
|
|
25
|
+
password: z.ZodString;
|
|
26
|
+
}, z.core.$strict>;
|
|
27
|
+
export declare const adminProductUpdateCommandSchema: z.ZodObject<{
|
|
28
|
+
description: z.ZodNullable<z.ZodString>;
|
|
29
|
+
idempotencyKey: z.ZodString;
|
|
30
|
+
name: z.ZodString;
|
|
31
|
+
status: z.ZodEnum<{
|
|
32
|
+
archived: "archived";
|
|
33
|
+
draft: "draft";
|
|
34
|
+
published: "published";
|
|
35
|
+
}>;
|
|
36
|
+
}, z.core.$strict>;
|
|
37
|
+
export declare const adminVariantUpdateCommandSchema: z.ZodObject<{
|
|
38
|
+
active: z.ZodBoolean;
|
|
39
|
+
allowBackorder: z.ZodBoolean;
|
|
40
|
+
idempotencyKey: z.ZodString;
|
|
41
|
+
name: z.ZodString;
|
|
42
|
+
priceMinor: z.ZodNumber;
|
|
43
|
+
}, z.core.$strict>;
|
|
44
|
+
export declare const adminInventoryAdjustmentCommandSchema: z.ZodObject<{
|
|
45
|
+
delta: z.ZodNumber;
|
|
46
|
+
idempotencyKey: z.ZodString;
|
|
47
|
+
reason: z.ZodString;
|
|
48
|
+
}, z.core.$strict>;
|
|
49
|
+
export declare const adminOrderTransitionCommandSchema: z.ZodObject<{
|
|
50
|
+
idempotencyKey: z.ZodString;
|
|
51
|
+
outcome: z.ZodEnum<{
|
|
52
|
+
fulfilled: "fulfilled";
|
|
53
|
+
processing: "processing";
|
|
54
|
+
}>;
|
|
55
|
+
reason: z.ZodString;
|
|
56
|
+
trackingCarrier: z.ZodOptional<z.ZodString>;
|
|
57
|
+
trackingNumber: z.ZodOptional<z.ZodString>;
|
|
58
|
+
}, z.core.$strict>;
|
|
59
|
+
export declare const adminRefundCommandSchema: z.ZodObject<{
|
|
60
|
+
amountMinor: z.ZodNumber;
|
|
61
|
+
idempotencyKey: z.ZodString;
|
|
62
|
+
reason: z.ZodString;
|
|
63
|
+
}, z.core.$strict>;
|
|
64
|
+
export type AdminLoginCommand = z.output<typeof adminLoginCommandSchema>;
|
|
65
|
+
export type AdminProductUpdateCommand = z.output<typeof adminProductUpdateCommandSchema>;
|
|
66
|
+
export type AdminVariantUpdateCommand = z.output<typeof adminVariantUpdateCommandSchema>;
|
|
67
|
+
export type AdminInventoryAdjustmentCommand = z.output<typeof adminInventoryAdjustmentCommandSchema>;
|
|
68
|
+
export type AdminOrderTransitionCommand = z.output<typeof adminOrderTransitionCommandSchema>;
|
|
69
|
+
export type AdminRefundCommand = z.output<typeof adminRefundCommandSchema>;
|
|
70
|
+
//# sourceMappingURL=admin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../src/admin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,eAAe;;;;EAA2C,CAAC;AAExE,eAAO,MAAM,qBAAqB;;;;;;;EAOhC,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,eAAe,CAAC,CAAC;AACzD,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAErE,eAAO,MAAM,uBAAuB;;;;EAWyC,CAAC;AAE9E,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,GAAG,OAAO,CAE5F;AAED,eAAO,MAAM,uBAAuB;;;kBAGlC,CAAC;AAEH,eAAO,MAAM,+BAA+B;;;;;;;;;kBAK1C,CAAC;AAEH,eAAO,MAAM,+BAA+B;;;;;;kBAM1C,CAAC;AAEH,eAAO,MAAM,qCAAqC;;;;kBAQhD,CAAC;AAEH,eAAO,MAAM,iCAAiC;;;;;;;;;kBAkB1C,CAAC;AAEL,eAAO,MAAM,wBAAwB;;;;kBAInC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,uBAAuB,CAAC,CAAC;AACzE,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,+BAA+B,CAAC,CAAC;AACzF,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,+BAA+B,CAAC,CAAC;AACzF,MAAM,MAAM,+BAA+B,GAAG,CAAC,CAAC,MAAM,CACpD,OAAO,qCAAqC,CAC7C,CAAC;AACF,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,iCAAiC,CAAC,CAAC;AAC7F,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,wBAAwB,CAAC,CAAC"}
|
package/dist/admin.js
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { idempotencyKeySchema } from "./cart.js";
|
|
3
|
+
import { nonNegativeMinorUnitSchema } from "./money.js";
|
|
4
|
+
export const adminRoleSchema = z.enum(["owner", "manager", "operator"]);
|
|
5
|
+
export const adminCapabilitySchema = z.enum([
|
|
6
|
+
"admin.access",
|
|
7
|
+
"admin.audit.read",
|
|
8
|
+
"admin.catalog.write",
|
|
9
|
+
"admin.inventory.adjust",
|
|
10
|
+
"admin.order.fulfill",
|
|
11
|
+
"admin.payment.refund",
|
|
12
|
+
]);
|
|
13
|
+
export const ADMIN_ROLE_CAPABILITIES = Object.freeze({
|
|
14
|
+
owner: Object.freeze(adminCapabilitySchema.options),
|
|
15
|
+
manager: Object.freeze([
|
|
16
|
+
"admin.access",
|
|
17
|
+
"admin.audit.read",
|
|
18
|
+
"admin.catalog.write",
|
|
19
|
+
"admin.inventory.adjust",
|
|
20
|
+
"admin.order.fulfill",
|
|
21
|
+
"admin.payment.refund",
|
|
22
|
+
]),
|
|
23
|
+
operator: Object.freeze(["admin.access", "admin.inventory.adjust", "admin.order.fulfill"]),
|
|
24
|
+
});
|
|
25
|
+
export function adminRoleHasCapability(role, capability) {
|
|
26
|
+
return ADMIN_ROLE_CAPABILITIES[adminRoleSchema.parse(role)].includes(capability);
|
|
27
|
+
}
|
|
28
|
+
export const adminLoginCommandSchema = z.strictObject({
|
|
29
|
+
email: z.string().trim().max(320).email().toLowerCase(),
|
|
30
|
+
password: z.string().min(1).max(4_096),
|
|
31
|
+
});
|
|
32
|
+
export const adminProductUpdateCommandSchema = z.strictObject({
|
|
33
|
+
description: z.string().trim().min(1).max(20_000).nullable(),
|
|
34
|
+
idempotencyKey: idempotencyKeySchema,
|
|
35
|
+
name: z.string().trim().min(1).max(240),
|
|
36
|
+
status: z.enum(["archived", "draft", "published"]),
|
|
37
|
+
});
|
|
38
|
+
export const adminVariantUpdateCommandSchema = z.strictObject({
|
|
39
|
+
active: z.boolean(),
|
|
40
|
+
allowBackorder: z.boolean(),
|
|
41
|
+
idempotencyKey: idempotencyKeySchema,
|
|
42
|
+
name: z.string().trim().min(1).max(160),
|
|
43
|
+
priceMinor: nonNegativeMinorUnitSchema,
|
|
44
|
+
});
|
|
45
|
+
export const adminInventoryAdjustmentCommandSchema = z.strictObject({
|
|
46
|
+
delta: z
|
|
47
|
+
.number()
|
|
48
|
+
.int()
|
|
49
|
+
.safe()
|
|
50
|
+
.refine((value) => value !== 0, "Adjustment cannot be zero."),
|
|
51
|
+
idempotencyKey: idempotencyKeySchema,
|
|
52
|
+
reason: z.string().trim().min(1).max(240),
|
|
53
|
+
});
|
|
54
|
+
export const adminOrderTransitionCommandSchema = z
|
|
55
|
+
.strictObject({
|
|
56
|
+
idempotencyKey: idempotencyKeySchema,
|
|
57
|
+
outcome: z.enum(["processing", "fulfilled"]),
|
|
58
|
+
reason: z.string().trim().min(1).max(240),
|
|
59
|
+
trackingCarrier: z.string().trim().min(1).max(120).optional(),
|
|
60
|
+
trackingNumber: z.string().trim().min(1).max(240).optional(),
|
|
61
|
+
})
|
|
62
|
+
.superRefine((command, context) => {
|
|
63
|
+
if ((command.trackingCarrier === undefined) !== (command.trackingNumber === undefined)) {
|
|
64
|
+
context.addIssue({ code: "custom", message: "Tracking carrier and number must be paired." });
|
|
65
|
+
}
|
|
66
|
+
if (command.outcome !== "fulfilled" &&
|
|
67
|
+
(command.trackingCarrier !== undefined || command.trackingNumber !== undefined)) {
|
|
68
|
+
context.addIssue({ code: "custom", message: "Tracking belongs to fulfillment only." });
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
export const adminRefundCommandSchema = z.strictObject({
|
|
72
|
+
amountMinor: nonNegativeMinorUnitSchema.refine((value) => value > 0, "Refund must be positive."),
|
|
73
|
+
idempotencyKey: idempotencyKeySchema,
|
|
74
|
+
reason: z.string().trim().min(1).max(240),
|
|
75
|
+
});
|
|
76
|
+
//# sourceMappingURL=admin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin.js","sourceRoot":"","sources":["../src/admin.ts"],"names":[],"mappings":"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"}
|
package/dist/cart.d.ts
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const idempotencyKeySchema: z.ZodString;
|
|
3
|
+
export declare const cartQuantitySchema: z.ZodNumber;
|
|
4
|
+
export declare const cartLineProposalSchema: z.ZodObject<{
|
|
5
|
+
quantity: z.ZodNumber;
|
|
6
|
+
variantId: z.ZodString;
|
|
7
|
+
}, z.core.$strict>;
|
|
8
|
+
export declare const cartMutationSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
9
|
+
operation: z.ZodLiteral<"increment">;
|
|
10
|
+
quantity: z.ZodNumber;
|
|
11
|
+
idempotencyKey: z.ZodString;
|
|
12
|
+
variantId: z.ZodString;
|
|
13
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
14
|
+
operation: z.ZodLiteral<"decrement">;
|
|
15
|
+
quantity: z.ZodNumber;
|
|
16
|
+
idempotencyKey: z.ZodString;
|
|
17
|
+
variantId: z.ZodString;
|
|
18
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
19
|
+
operation: z.ZodLiteral<"set">;
|
|
20
|
+
quantity: z.ZodNumber;
|
|
21
|
+
idempotencyKey: z.ZodString;
|
|
22
|
+
variantId: z.ZodString;
|
|
23
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
24
|
+
operation: z.ZodLiteral<"remove">;
|
|
25
|
+
idempotencyKey: z.ZodString;
|
|
26
|
+
variantId: z.ZodString;
|
|
27
|
+
}, z.core.$strict>], "operation">;
|
|
28
|
+
export declare const canonicalCartLineSchema: z.ZodObject<{
|
|
29
|
+
availability: z.ZodEnum<{
|
|
30
|
+
untracked: "untracked";
|
|
31
|
+
backorder: "backorder";
|
|
32
|
+
in_stock: "in_stock";
|
|
33
|
+
out_of_stock: "out_of_stock";
|
|
34
|
+
}>;
|
|
35
|
+
productName: z.ZodString;
|
|
36
|
+
productSlug: z.ZodString;
|
|
37
|
+
purchasable: z.ZodBoolean;
|
|
38
|
+
quantity: z.ZodNumber;
|
|
39
|
+
sku: z.ZodNullable<z.ZodString>;
|
|
40
|
+
unitPrice: z.ZodObject<{
|
|
41
|
+
amountMinor: z.ZodNumber;
|
|
42
|
+
currency: z.ZodString;
|
|
43
|
+
}, z.core.$strict>;
|
|
44
|
+
variantId: z.ZodString;
|
|
45
|
+
variantName: z.ZodString;
|
|
46
|
+
}, z.core.$strict>;
|
|
47
|
+
export declare const pricedCartLineSchema: z.ZodObject<{
|
|
48
|
+
availability: z.ZodEnum<{
|
|
49
|
+
untracked: "untracked";
|
|
50
|
+
backorder: "backorder";
|
|
51
|
+
in_stock: "in_stock";
|
|
52
|
+
out_of_stock: "out_of_stock";
|
|
53
|
+
}>;
|
|
54
|
+
productName: z.ZodString;
|
|
55
|
+
productSlug: z.ZodString;
|
|
56
|
+
purchasable: z.ZodBoolean;
|
|
57
|
+
quantity: z.ZodNumber;
|
|
58
|
+
sku: z.ZodNullable<z.ZodString>;
|
|
59
|
+
unitPrice: z.ZodObject<{
|
|
60
|
+
amountMinor: z.ZodNumber;
|
|
61
|
+
currency: z.ZodString;
|
|
62
|
+
}, z.core.$strict>;
|
|
63
|
+
variantId: z.ZodString;
|
|
64
|
+
variantName: z.ZodString;
|
|
65
|
+
lineTotal: z.ZodObject<{
|
|
66
|
+
amountMinor: z.ZodNumber;
|
|
67
|
+
currency: z.ZodString;
|
|
68
|
+
}, z.core.$strict>;
|
|
69
|
+
}, z.core.$strict>;
|
|
70
|
+
export declare const cartSnapshotSchema: z.ZodObject<{
|
|
71
|
+
currency: z.ZodString;
|
|
72
|
+
id: z.ZodString;
|
|
73
|
+
itemCount: z.ZodNumber;
|
|
74
|
+
lines: z.ZodArray<z.ZodObject<{
|
|
75
|
+
availability: z.ZodEnum<{
|
|
76
|
+
untracked: "untracked";
|
|
77
|
+
backorder: "backorder";
|
|
78
|
+
in_stock: "in_stock";
|
|
79
|
+
out_of_stock: "out_of_stock";
|
|
80
|
+
}>;
|
|
81
|
+
productName: z.ZodString;
|
|
82
|
+
productSlug: z.ZodString;
|
|
83
|
+
purchasable: z.ZodBoolean;
|
|
84
|
+
quantity: z.ZodNumber;
|
|
85
|
+
sku: z.ZodNullable<z.ZodString>;
|
|
86
|
+
unitPrice: z.ZodObject<{
|
|
87
|
+
amountMinor: z.ZodNumber;
|
|
88
|
+
currency: z.ZodString;
|
|
89
|
+
}, z.core.$strict>;
|
|
90
|
+
variantId: z.ZodString;
|
|
91
|
+
variantName: z.ZodString;
|
|
92
|
+
lineTotal: z.ZodObject<{
|
|
93
|
+
amountMinor: z.ZodNumber;
|
|
94
|
+
currency: z.ZodString;
|
|
95
|
+
}, z.core.$strict>;
|
|
96
|
+
}, z.core.$strict>>;
|
|
97
|
+
merchandiseSubtotal: z.ZodObject<{
|
|
98
|
+
amountMinor: z.ZodNumber;
|
|
99
|
+
currency: z.ZodString;
|
|
100
|
+
}, z.core.$strict>;
|
|
101
|
+
}, z.core.$strict>;
|
|
102
|
+
export type CartMutation = z.output<typeof cartMutationSchema>;
|
|
103
|
+
export type CanonicalCartLine = z.output<typeof canonicalCartLineSchema>;
|
|
104
|
+
export type PricedCartLine = z.output<typeof pricedCartLineSchema>;
|
|
105
|
+
export type CartSnapshot = z.output<typeof cartSnapshotSchema>;
|
|
106
|
+
export declare function createCartSnapshot(id: string, currency: string, lines: readonly CanonicalCartLine[]): CartSnapshot;
|
|
107
|
+
//# sourceMappingURL=cart.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cart.d.ts","sourceRoot":"","sources":["../src/cart.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,oBAAoB,aAKqC,CAAC;AAEvE,eAAO,MAAM,kBAAkB,aAAyC,CAAC;AAEzE,eAAO,MAAM,sBAAsB;;;kBAGjC,CAAC;AAOH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;iCAiB7B,CAAC;AAEH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;kBAUlC,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;kBAE/B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAM7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC/D,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,uBAAuB,CAAC,CAAC;AACzE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,oBAAoB,CAAC,CAAC;AACnE,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE/D,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,SAAS,iBAAiB,EAAE,GAClC,YAAY,CA+Bd"}
|
package/dist/cart.js
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { inventoryAvailabilitySchema } from "./inventory.js";
|
|
3
|
+
import { positiveIdentifierSchema, productSlugSchema } from "./catalog.js";
|
|
4
|
+
import { addMoney, currencyCodeSchema, moneySchema, multiplyMoney } from "./money.js";
|
|
5
|
+
export const idempotencyKeySchema = z
|
|
6
|
+
.string()
|
|
7
|
+
.trim()
|
|
8
|
+
.min(8)
|
|
9
|
+
.max(160)
|
|
10
|
+
.regex(/^[A-Za-z0-9][A-Za-z0-9._:-]*$/u, "Invalid idempotency key.");
|
|
11
|
+
export const cartQuantitySchema = z.number().int().safe().min(1).max(99);
|
|
12
|
+
export const cartLineProposalSchema = z.strictObject({
|
|
13
|
+
quantity: cartQuantitySchema,
|
|
14
|
+
variantId: positiveIdentifierSchema,
|
|
15
|
+
});
|
|
16
|
+
const cartMutationBase = {
|
|
17
|
+
idempotencyKey: idempotencyKeySchema,
|
|
18
|
+
variantId: positiveIdentifierSchema,
|
|
19
|
+
};
|
|
20
|
+
export const cartMutationSchema = z.discriminatedUnion("operation", [
|
|
21
|
+
z.strictObject({
|
|
22
|
+
...cartMutationBase,
|
|
23
|
+
operation: z.literal("increment"),
|
|
24
|
+
quantity: cartQuantitySchema,
|
|
25
|
+
}),
|
|
26
|
+
z.strictObject({
|
|
27
|
+
...cartMutationBase,
|
|
28
|
+
operation: z.literal("decrement"),
|
|
29
|
+
quantity: cartQuantitySchema,
|
|
30
|
+
}),
|
|
31
|
+
z.strictObject({
|
|
32
|
+
...cartMutationBase,
|
|
33
|
+
operation: z.literal("set"),
|
|
34
|
+
quantity: cartQuantitySchema,
|
|
35
|
+
}),
|
|
36
|
+
z.strictObject({ ...cartMutationBase, operation: z.literal("remove") }),
|
|
37
|
+
]);
|
|
38
|
+
export const canonicalCartLineSchema = z.strictObject({
|
|
39
|
+
availability: inventoryAvailabilitySchema,
|
|
40
|
+
productName: z.string().trim().min(1).max(240),
|
|
41
|
+
productSlug: productSlugSchema,
|
|
42
|
+
purchasable: z.boolean(),
|
|
43
|
+
quantity: cartQuantitySchema,
|
|
44
|
+
sku: z.string().trim().min(1).max(120).nullable(),
|
|
45
|
+
unitPrice: moneySchema,
|
|
46
|
+
variantId: positiveIdentifierSchema,
|
|
47
|
+
variantName: z.string().trim().min(1).max(160),
|
|
48
|
+
});
|
|
49
|
+
export const pricedCartLineSchema = canonicalCartLineSchema.extend({
|
|
50
|
+
lineTotal: moneySchema,
|
|
51
|
+
});
|
|
52
|
+
export const cartSnapshotSchema = z.strictObject({
|
|
53
|
+
currency: currencyCodeSchema,
|
|
54
|
+
id: positiveIdentifierSchema,
|
|
55
|
+
itemCount: z.number().int().safe().nonnegative(),
|
|
56
|
+
lines: z.array(pricedCartLineSchema).max(100),
|
|
57
|
+
merchandiseSubtotal: moneySchema,
|
|
58
|
+
});
|
|
59
|
+
export function createCartSnapshot(id, currency, lines) {
|
|
60
|
+
const parsedCurrency = currencyCodeSchema.parse(currency);
|
|
61
|
+
const parsedLines = z.array(canonicalCartLineSchema).max(100).parse(lines);
|
|
62
|
+
const uniqueVariantIds = new Set(parsedLines.map((line) => line.variantId));
|
|
63
|
+
if (uniqueVariantIds.size !== parsedLines.length) {
|
|
64
|
+
throw new TypeError("A cart cannot contain duplicate variant lines.");
|
|
65
|
+
}
|
|
66
|
+
let subtotal = { amountMinor: 0, currency: parsedCurrency };
|
|
67
|
+
let itemCount = 0;
|
|
68
|
+
const pricedLines = parsedLines.map((line) => {
|
|
69
|
+
if (line.unitPrice.currency !== parsedCurrency) {
|
|
70
|
+
addMoney(subtotal, line.unitPrice);
|
|
71
|
+
}
|
|
72
|
+
const lineTotal = multiplyMoney(line.unitPrice, line.quantity);
|
|
73
|
+
subtotal = addMoney(subtotal, lineTotal);
|
|
74
|
+
itemCount += line.quantity;
|
|
75
|
+
if (!Number.isSafeInteger(itemCount))
|
|
76
|
+
throw new RangeError("Cart item count exceeds safe range.");
|
|
77
|
+
return Object.freeze({ ...line, lineTotal });
|
|
78
|
+
});
|
|
79
|
+
return Object.freeze(cartSnapshotSchema.parse({
|
|
80
|
+
currency: parsedCurrency,
|
|
81
|
+
id,
|
|
82
|
+
itemCount,
|
|
83
|
+
lines: pricedLines,
|
|
84
|
+
merchandiseSubtotal: subtotal,
|
|
85
|
+
}));
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=cart.js.map
|
package/dist/cart.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cart.js","sourceRoot":"","sources":["../src/cart.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const positiveIdentifierSchema: z.ZodString;
|
|
3
|
+
export declare const productSlugSchema: z.ZodString;
|
|
4
|
+
export declare const productStatusSchema: z.ZodEnum<{
|
|
5
|
+
archived: "archived";
|
|
6
|
+
draft: "draft";
|
|
7
|
+
published: "published";
|
|
8
|
+
}>;
|
|
9
|
+
export declare const catalogImageSchema: z.ZodObject<{
|
|
10
|
+
altText: z.ZodString;
|
|
11
|
+
id: z.ZodString;
|
|
12
|
+
path: z.ZodString;
|
|
13
|
+
position: z.ZodNumber;
|
|
14
|
+
}, z.core.$strict>;
|
|
15
|
+
export declare const catalogVariantSchema: z.ZodObject<{
|
|
16
|
+
active: z.ZodBoolean;
|
|
17
|
+
availability: z.ZodEnum<{
|
|
18
|
+
untracked: "untracked";
|
|
19
|
+
backorder: "backorder";
|
|
20
|
+
in_stock: "in_stock";
|
|
21
|
+
out_of_stock: "out_of_stock";
|
|
22
|
+
}>;
|
|
23
|
+
id: z.ZodString;
|
|
24
|
+
name: z.ZodString;
|
|
25
|
+
options: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
26
|
+
position: z.ZodNumber;
|
|
27
|
+
price: z.ZodObject<{
|
|
28
|
+
amountMinor: z.ZodNumber;
|
|
29
|
+
currency: z.ZodString;
|
|
30
|
+
}, z.core.$strict>;
|
|
31
|
+
productId: z.ZodString;
|
|
32
|
+
sku: z.ZodNullable<z.ZodString>;
|
|
33
|
+
}, z.core.$strict>;
|
|
34
|
+
export declare const catalogProductSchema: z.ZodObject<{
|
|
35
|
+
attributes: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
36
|
+
categorySlugs: z.ZodArray<z.ZodString>;
|
|
37
|
+
createdAt: z.ZodString;
|
|
38
|
+
description: z.ZodNullable<z.ZodString>;
|
|
39
|
+
id: z.ZodString;
|
|
40
|
+
images: z.ZodArray<z.ZodObject<{
|
|
41
|
+
altText: z.ZodString;
|
|
42
|
+
id: z.ZodString;
|
|
43
|
+
path: z.ZodString;
|
|
44
|
+
position: z.ZodNumber;
|
|
45
|
+
}, z.core.$strict>>;
|
|
46
|
+
name: z.ZodString;
|
|
47
|
+
publishedAt: z.ZodNullable<z.ZodString>;
|
|
48
|
+
slug: z.ZodString;
|
|
49
|
+
status: z.ZodEnum<{
|
|
50
|
+
archived: "archived";
|
|
51
|
+
draft: "draft";
|
|
52
|
+
published: "published";
|
|
53
|
+
}>;
|
|
54
|
+
tags: z.ZodArray<z.ZodString>;
|
|
55
|
+
updatedAt: z.ZodString;
|
|
56
|
+
variants: z.ZodArray<z.ZodObject<{
|
|
57
|
+
active: z.ZodBoolean;
|
|
58
|
+
availability: z.ZodEnum<{
|
|
59
|
+
untracked: "untracked";
|
|
60
|
+
backorder: "backorder";
|
|
61
|
+
in_stock: "in_stock";
|
|
62
|
+
out_of_stock: "out_of_stock";
|
|
63
|
+
}>;
|
|
64
|
+
id: z.ZodString;
|
|
65
|
+
name: z.ZodString;
|
|
66
|
+
options: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
67
|
+
position: z.ZodNumber;
|
|
68
|
+
price: z.ZodObject<{
|
|
69
|
+
amountMinor: z.ZodNumber;
|
|
70
|
+
currency: z.ZodString;
|
|
71
|
+
}, z.core.$strict>;
|
|
72
|
+
productId: z.ZodString;
|
|
73
|
+
sku: z.ZodNullable<z.ZodString>;
|
|
74
|
+
}, z.core.$strict>>;
|
|
75
|
+
}, z.core.$strict>;
|
|
76
|
+
export declare const catalogQuerySchema: z.ZodObject<{
|
|
77
|
+
category: z.ZodOptional<z.ZodString>;
|
|
78
|
+
limit: z.ZodDefault<z.ZodNumber>;
|
|
79
|
+
search: z.ZodOptional<z.ZodString>;
|
|
80
|
+
}, z.core.$strict>;
|
|
81
|
+
export type ProductStatus = z.output<typeof productStatusSchema>;
|
|
82
|
+
export type CatalogImage = z.output<typeof catalogImageSchema>;
|
|
83
|
+
export type CatalogVariant = z.output<typeof catalogVariantSchema>;
|
|
84
|
+
export type CatalogProduct = z.output<typeof catalogProductSchema>;
|
|
85
|
+
export type CatalogQuery = z.output<typeof catalogQuerySchema>;
|
|
86
|
+
export declare function isProductPublic(product: CatalogProduct, now?: Date): boolean;
|
|
87
|
+
export declare function selectPublicCatalogProduct(product: CatalogProduct, now?: Date): CatalogProduct | null;
|
|
88
|
+
export declare function filterCatalogProducts(products: readonly CatalogProduct[], input?: z.input<typeof catalogQuerySchema>, now?: Date): CatalogProduct[];
|
|
89
|
+
//# sourceMappingURL=catalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,wBAAwB,aAE+C,CAAC;AAErF,eAAO,MAAM,iBAAiB,aAKuD,CAAC;AAEtF,eAAO,MAAM,mBAAmB;;;;EAA6C,CAAC;AAK9E,eAAO,MAAM,kBAAkB;;;;;kBAK7B,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;kBAU/B,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAc/B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;kBAI7B,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACjE,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC/D,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,oBAAoB,CAAC,CAAC;AACnE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,oBAAoB,CAAC,CAAC;AACnE,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE/D,wBAAgB,eAAe,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,OAAa,GAAG,OAAO,CAIlF;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,cAAc,EACvB,GAAG,OAAa,GACf,cAAc,GAAG,IAAI,CAOvB;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,SAAS,cAAc,EAAE,EACnC,KAAK,GAAE,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAM,EAC9C,GAAG,OAAa,GACf,cAAc,EAAE,CAsBlB"}
|
package/dist/catalog.js
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { inventoryAvailabilitySchema } from "./inventory.js";
|
|
3
|
+
import { moneySchema } from "./money.js";
|
|
4
|
+
export const positiveIdentifierSchema = z
|
|
5
|
+
.string()
|
|
6
|
+
.regex(/^[1-9][0-9]*$/u, "Identifier must be a positive base-ten integer string.");
|
|
7
|
+
export const productSlugSchema = z
|
|
8
|
+
.string()
|
|
9
|
+
.trim()
|
|
10
|
+
.min(1)
|
|
11
|
+
.max(160)
|
|
12
|
+
.regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/u, "Product slug must be lowercase kebab-case.");
|
|
13
|
+
export const productStatusSchema = z.enum(["archived", "draft", "published"]);
|
|
14
|
+
const jsonObjectSchema = z.record(z.string(), z.unknown());
|
|
15
|
+
const timestampSchema = z.string().datetime({ offset: true });
|
|
16
|
+
export const catalogImageSchema = z.strictObject({
|
|
17
|
+
altText: z.string().trim().min(1).max(240),
|
|
18
|
+
id: positiveIdentifierSchema,
|
|
19
|
+
path: z.string().trim().min(1).max(500),
|
|
20
|
+
position: z.number().int().safe().nonnegative(),
|
|
21
|
+
});
|
|
22
|
+
export const catalogVariantSchema = z.strictObject({
|
|
23
|
+
active: z.boolean(),
|
|
24
|
+
availability: inventoryAvailabilitySchema,
|
|
25
|
+
id: positiveIdentifierSchema,
|
|
26
|
+
name: z.string().trim().min(1).max(160),
|
|
27
|
+
options: jsonObjectSchema,
|
|
28
|
+
position: z.number().int().safe().nonnegative(),
|
|
29
|
+
price: moneySchema,
|
|
30
|
+
productId: positiveIdentifierSchema,
|
|
31
|
+
sku: z.string().trim().min(1).max(120).nullable(),
|
|
32
|
+
});
|
|
33
|
+
export const catalogProductSchema = z.strictObject({
|
|
34
|
+
attributes: jsonObjectSchema,
|
|
35
|
+
categorySlugs: z.array(productSlugSchema).max(50),
|
|
36
|
+
createdAt: timestampSchema,
|
|
37
|
+
description: z.string().trim().min(1).max(20_000).nullable(),
|
|
38
|
+
id: positiveIdentifierSchema,
|
|
39
|
+
images: z.array(catalogImageSchema).max(100),
|
|
40
|
+
name: z.string().trim().min(1).max(240),
|
|
41
|
+
publishedAt: timestampSchema.nullable(),
|
|
42
|
+
slug: productSlugSchema,
|
|
43
|
+
status: productStatusSchema,
|
|
44
|
+
tags: z.array(z.string().trim().min(1).max(80)).max(100),
|
|
45
|
+
updatedAt: timestampSchema,
|
|
46
|
+
variants: z.array(catalogVariantSchema).max(500),
|
|
47
|
+
});
|
|
48
|
+
export const catalogQuerySchema = z.strictObject({
|
|
49
|
+
category: productSlugSchema.optional(),
|
|
50
|
+
limit: z.number().int().safe().min(1).max(100).default(24),
|
|
51
|
+
search: z.string().trim().max(160).optional(),
|
|
52
|
+
});
|
|
53
|
+
export function isProductPublic(product, now = new Date()) {
|
|
54
|
+
const parsed = catalogProductSchema.parse(product);
|
|
55
|
+
if (parsed.status !== "published" || parsed.publishedAt === null)
|
|
56
|
+
return false;
|
|
57
|
+
return new Date(parsed.publishedAt).getTime() <= now.getTime();
|
|
58
|
+
}
|
|
59
|
+
export function selectPublicCatalogProduct(product, now = new Date()) {
|
|
60
|
+
const parsed = catalogProductSchema.parse(product);
|
|
61
|
+
if (!isProductPublic(parsed, now))
|
|
62
|
+
return null;
|
|
63
|
+
return {
|
|
64
|
+
...parsed,
|
|
65
|
+
variants: parsed.variants.filter((variant) => variant.active),
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
export function filterCatalogProducts(products, input = {}, now = new Date()) {
|
|
69
|
+
const query = catalogQuerySchema.parse(input);
|
|
70
|
+
const normalizedSearch = query.search?.toLocaleLowerCase();
|
|
71
|
+
return products
|
|
72
|
+
.map((product) => selectPublicCatalogProduct(product, now))
|
|
73
|
+
.filter((product) => product !== null)
|
|
74
|
+
.filter((product) => query.category === undefined ? true : product.categorySlugs.includes(query.category))
|
|
75
|
+
.filter((product) => {
|
|
76
|
+
if (normalizedSearch === undefined || normalizedSearch.length === 0)
|
|
77
|
+
return true;
|
|
78
|
+
return [product.name, product.description ?? "", ...product.tags]
|
|
79
|
+
.join(" ")
|
|
80
|
+
.toLocaleLowerCase()
|
|
81
|
+
.includes(normalizedSearch);
|
|
82
|
+
})
|
|
83
|
+
.sort((left, right) => left.name.localeCompare(right.name) || comparePositiveIdentifiers(left.id, right.id))
|
|
84
|
+
.slice(0, query.limit);
|
|
85
|
+
}
|
|
86
|
+
function comparePositiveIdentifiers(left, right) {
|
|
87
|
+
return left.length - right.length || left.localeCompare(right);
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Stable package identity for SC01 workspace-link verification. */
|
|
2
|
+
export declare const CORE_PACKAGE_NAME: "@salixcommerce/core";
|
|
3
|
+
export { DomainInvariantError, type DomainInvariantCode } from "./invariant-error.js";
|
|
4
|
+
export { ADMIN_ROLE_CAPABILITIES, adminCapabilitySchema, adminInventoryAdjustmentCommandSchema, adminLoginCommandSchema, adminOrderTransitionCommandSchema, adminProductUpdateCommandSchema, adminRefundCommandSchema, adminRoleHasCapability, adminRoleSchema, adminVariantUpdateCommandSchema, type AdminCapability, type AdminInventoryAdjustmentCommand, type AdminLoginCommand, type AdminOrderTransitionCommand, type AdminProductUpdateCommand, type AdminRefundCommand, type AdminRole, type AdminVariantUpdateCommand, } from "./admin.js";
|
|
5
|
+
export { addMoney, createMoney, currencyCodeSchema, formatMoney, moneySchema, multiplyMoney, nonNegativeMinorUnitSchema, type Money, } from "./money.js";
|
|
6
|
+
export { catalogImageSchema, catalogProductSchema, catalogQuerySchema, catalogVariantSchema, filterCatalogProducts, isProductPublic, positiveIdentifierSchema, productSlugSchema, productStatusSchema, selectPublicCatalogProduct, type CatalogImage, type CatalogProduct, type CatalogQuery, type CatalogVariant, type ProductStatus, } from "./catalog.js";
|
|
7
|
+
export { applyInventoryMovement, applyInventoryReservation, inventoryAvailabilitySchema, inventoryMovementSchema, inventoryStateSchema, resolveInventoryAvailability, type InventoryAvailability, type InventoryMovement, type InventoryState, } from "./inventory.js";
|
|
8
|
+
export { cartLineProposalSchema, cartMutationSchema, cartQuantitySchema, cartSnapshotSchema, canonicalCartLineSchema, createCartSnapshot, idempotencyKeySchema, pricedCartLineSchema, type CartMutation, type CartSnapshot, type CanonicalCartLine, type PricedCartLine, } from "./cart.js";
|
|
9
|
+
export { guardLifecycleTransition, validateLifecycleTransitionTable, type LifecycleGuardResult, type LifecycleTableDefect, type LifecycleTransition, } from "./lifecycle.js";
|
|
10
|
+
export { ORDER_TRANSITIONS, contactEmailSchema, createOrderItemSnapshot, guardOrderTransition, orderCancelCommandSchema, orderCapabilitySchema, orderCreateCommandSchema, orderItemSnapshotSchema, orderReferenceSchema, orderSnapshotSchema, orderStatusSchema, validateOrderTransitionTable, verifyOrderLineTotal, type OrderCapability, type OrderItemSnapshot, type OrderSnapshot, type OrderStatus, } from "./order.js";
|
|
11
|
+
export { PAYMENT_TRANSITIONS, guardPaymentTransition, ignoredPaymentWebhookSchema, normalizedPaymentEventSchema, paymentCapabilitySchema, paymentCertificationCommandSchema, paymentCheckoutCommandSchema, paymentCheckoutDestinationSchema, paymentCheckoutInputSchema, paymentCheckoutResultSchema, paymentEventKindSchema, paymentProviderKeySchema, paymentProviderPaymentSchema, paymentProviderReferenceSchema, paymentRefundInputSchema, paymentRefundResultSchema, paymentSnapshotSchema, paymentStatusSchema, paymentWebhookInputSchema, paymentWebhookVerificationSchema, resolvePaymentEvent, validatePaymentTransitionTable, type IgnoredPaymentWebhook, type NormalizedPaymentEvent, type PaymentCapability, type PaymentCertificationCommand, type PaymentCheckoutCommand, type PaymentCheckoutInput, type PaymentCheckoutResult, type PaymentEventApplication, type PaymentEventKind, type PaymentProvider, type PaymentProviderError, type PaymentProviderErrorCode, type PaymentProviderPayment, type PaymentProviderResult, type PaymentRefundInput, type PaymentRefundResult, type PaymentSnapshot, type PaymentStatus, type PaymentWebhookInput, type PaymentWebhookVerification, } from "./payment.js";
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Stable package identity for SC01 workspace-link verification. */
|
|
2
|
+
export const CORE_PACKAGE_NAME = "@salixcommerce/core";
|
|
3
|
+
export { DomainInvariantError } from "./invariant-error.js";
|
|
4
|
+
export { ADMIN_ROLE_CAPABILITIES, adminCapabilitySchema, adminInventoryAdjustmentCommandSchema, adminLoginCommandSchema, adminOrderTransitionCommandSchema, adminProductUpdateCommandSchema, adminRefundCommandSchema, adminRoleHasCapability, adminRoleSchema, adminVariantUpdateCommandSchema, } from "./admin.js";
|
|
5
|
+
export { addMoney, createMoney, currencyCodeSchema, formatMoney, moneySchema, multiplyMoney, nonNegativeMinorUnitSchema, } from "./money.js";
|
|
6
|
+
export { catalogImageSchema, catalogProductSchema, catalogQuerySchema, catalogVariantSchema, filterCatalogProducts, isProductPublic, positiveIdentifierSchema, productSlugSchema, productStatusSchema, selectPublicCatalogProduct, } from "./catalog.js";
|
|
7
|
+
export { applyInventoryMovement, applyInventoryReservation, inventoryAvailabilitySchema, inventoryMovementSchema, inventoryStateSchema, resolveInventoryAvailability, } from "./inventory.js";
|
|
8
|
+
export { cartLineProposalSchema, cartMutationSchema, cartQuantitySchema, cartSnapshotSchema, canonicalCartLineSchema, createCartSnapshot, idempotencyKeySchema, pricedCartLineSchema, } from "./cart.js";
|
|
9
|
+
export { guardLifecycleTransition, validateLifecycleTransitionTable, } from "./lifecycle.js";
|
|
10
|
+
export { ORDER_TRANSITIONS, contactEmailSchema, createOrderItemSnapshot, guardOrderTransition, orderCancelCommandSchema, orderCapabilitySchema, orderCreateCommandSchema, orderItemSnapshotSchema, orderReferenceSchema, orderSnapshotSchema, orderStatusSchema, validateOrderTransitionTable, verifyOrderLineTotal, } from "./order.js";
|
|
11
|
+
export { PAYMENT_TRANSITIONS, guardPaymentTransition, ignoredPaymentWebhookSchema, normalizedPaymentEventSchema, paymentCapabilitySchema, paymentCertificationCommandSchema, paymentCheckoutCommandSchema, paymentCheckoutDestinationSchema, paymentCheckoutInputSchema, paymentCheckoutResultSchema, paymentEventKindSchema, paymentProviderKeySchema, paymentProviderPaymentSchema, paymentProviderReferenceSchema, paymentRefundInputSchema, paymentRefundResultSchema, paymentSnapshotSchema, paymentStatusSchema, paymentWebhookInputSchema, paymentWebhookVerificationSchema, resolvePaymentEvent, validatePaymentTransitionTable, } from "./payment.js";
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,MAAM,CAAC,MAAM,iBAAiB,GAAG,qBAA8B,CAAC;AAEhE,OAAO,EAAE,oBAAoB,EAA4B,MAAM,sBAAsB,CAAC;AACtF,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,qCAAqC,EACrC,uBAAuB,EACvB,iCAAiC,EACjC,+BAA+B,EAC/B,wBAAwB,EACxB,sBAAsB,EACtB,eAAe,EACf,+BAA+B,GAShC,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,QAAQ,EACR,WAAW,EACX,kBAAkB,EAClB,WAAW,EACX,WAAW,EACX,aAAa,EACb,0BAA0B,GAE3B,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,EACrB,eAAe,EACf,wBAAwB,EACxB,iBAAiB,EACjB,mBAAmB,EACnB,0BAA0B,GAM3B,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,2BAA2B,EAC3B,uBAAuB,EACvB,oBAAoB,EACpB,4BAA4B,GAI7B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,EACvB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,GAKrB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,wBAAwB,EACxB,gCAAgC,GAIjC,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,uBAAuB,EACvB,oBAAoB,EACpB,wBAAwB,EACxB,qBAAqB,EACrB,wBAAwB,EACxB,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,4BAA4B,EAC5B,oBAAoB,GAKrB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,2BAA2B,EAC3B,4BAA4B,EAC5B,uBAAuB,EACvB,iCAAiC,EACjC,4BAA4B,EAC5B,gCAAgC,EAChC,0BAA0B,EAC1B,2BAA2B,EAC3B,sBAAsB,EACtB,wBAAwB,EACxB,4BAA4B,EAC5B,8BAA8B,EAC9B,wBAAwB,EACxB,yBAAyB,EACzB,qBAAqB,EACrB,mBAAmB,EACnB,yBAAyB,EACzB,gCAAgC,EAChC,mBAAmB,EACnB,8BAA8B,GAqB/B,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type DomainInvariantCode = "INVENTORY_ARITHMETIC_OVERFLOW" | "INVENTORY_MOVEMENT_BELOW_RESERVED" | "INVENTORY_NEGATIVE_BALANCE" | "INVENTORY_RESERVATION_EXCEEDS_ON_HAND" | "INVENTORY_RESERVATION_NEGATIVE" | "INVENTORY_UNTRACKED_MOVEMENT" | "MONEY_ARITHMETIC_OVERFLOW" | "MONEY_CURRENCY_MISMATCH" | "PAYMENT_EVENT_MISMATCH" | "PAYMENT_ILLEGAL_TRANSITION" | "PAYMENT_REFUND_EXCEEDS_CAPTURE";
|
|
2
|
+
export declare class DomainInvariantError extends Error {
|
|
3
|
+
readonly code: DomainInvariantCode;
|
|
4
|
+
constructor(code: DomainInvariantCode, message: string);
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=invariant-error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invariant-error.d.ts","sourceRoot":"","sources":["../src/invariant-error.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAC3B,+BAA+B,GAC/B,mCAAmC,GACnC,4BAA4B,GAC5B,uCAAuC,GACvC,gCAAgC,GAChC,8BAA8B,GAC9B,2BAA2B,GAC3B,yBAAyB,GACzB,wBAAwB,GACxB,4BAA4B,GAC5B,gCAAgC,CAAC;AAErC,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,SAAgB,IAAI,EAAE,mBAAmB,CAAC;gBAEvB,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM;CAK9D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invariant-error.js","sourceRoot":"","sources":["../src/invariant-error.ts"],"names":[],"mappings":"AAaA,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAC7B,IAAI,CAAsB;IAE1C,YAAmB,IAAyB,EAAE,OAAe;QAC3D,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF"}
|