@01.software/cli 0.12.0 → 0.13.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.
@@ -12,49 +12,79 @@ var MCP_RESOURCE_INVENTORY = [
12
12
  {
13
13
  uri: "docs://sdk/getting-started",
14
14
  label: "getting-started",
15
- registeredName: "docs-getting-started"
15
+ registeredName: "docs-getting-started",
16
+ canonicalDocsSlug: ["developers", "sdk"],
17
+ canonicalDocsKeywords: ["Install the package", "@01.software/sdk"]
18
+ },
19
+ {
20
+ uri: "docs://sdk/guides",
21
+ label: "guides",
22
+ registeredName: "docs-guides",
23
+ canonicalDocsSlug: ["developers", "sdk"],
24
+ canonicalDocsKeywords: ["Setup Flow", "Next Actions"]
25
+ },
26
+ {
27
+ uri: "docs://sdk/api",
28
+ label: "api",
29
+ registeredName: "docs-api",
30
+ canonicalDocsSlug: ["developers", "api"],
31
+ canonicalDocsKeywords: ["/api/openapi", "OpenAPI"]
16
32
  },
17
- { uri: "docs://sdk/guides", label: "guides", registeredName: "docs-guides" },
18
- { uri: "docs://sdk/api", label: "api", registeredName: "docs-api" },
19
33
  {
20
34
  uri: "docs://sdk/query-builder",
21
35
  label: "query-builder",
22
- registeredName: "docs-query-builder"
36
+ registeredName: "docs-query-builder",
37
+ canonicalDocsSlug: ["developers", "sdk"],
38
+ canonicalDocsKeywords: ["query helpers", "@01.software/sdk/query"]
23
39
  },
24
40
  {
25
41
  uri: "docs://sdk/react-query",
26
42
  label: "react-query",
27
- registeredName: "docs-react-query"
43
+ registeredName: "docs-react-query",
44
+ canonicalDocsSlug: ["developers", "sdk"],
45
+ canonicalDocsKeywords: ["React", "@tanstack/react-query"]
28
46
  },
29
47
  {
30
48
  uri: "docs://sdk/server-api",
31
49
  label: "server-api",
32
- registeredName: "docs-server-api"
50
+ registeredName: "docs-server-api",
51
+ canonicalDocsSlug: ["developers", "api"],
52
+ canonicalDocsKeywords: ["Server writes", "trusted server credentials"]
33
53
  },
34
54
  {
35
55
  uri: "docs://sdk/customer-auth",
36
56
  label: "customer-auth",
37
- registeredName: "docs-customer-auth"
57
+ registeredName: "docs-customer-auth",
58
+ canonicalDocsSlug: ["developers", "authentication"],
59
+ canonicalDocsKeywords: ["Publishable Key", "Secret Key"]
38
60
  },
39
61
  {
40
62
  uri: "docs://sdk/browser-vs-server",
41
63
  label: "browser-vs-server",
42
- registeredName: "docs-browser-vs-server"
64
+ registeredName: "docs-browser-vs-server",
65
+ canonicalDocsSlug: ["developers", "sdk"],
66
+ canonicalDocsKeywords: ["browser client", "server client"]
43
67
  },
44
68
  {
45
69
  uri: "docs://sdk/file-upload",
46
70
  label: "file-upload",
47
- registeredName: "docs-file-upload"
71
+ registeredName: "docs-file-upload",
72
+ canonicalDocsSlug: ["developers", "api"],
73
+ canonicalDocsKeywords: ["direct HTTP", "machine-readable contract"]
48
74
  },
49
75
  {
50
76
  uri: "docs://sdk/webhook",
51
77
  label: "webhook",
52
- registeredName: "docs-webhook"
78
+ registeredName: "docs-webhook",
79
+ canonicalDocsSlug: ["developers", "webhooks"],
80
+ canonicalDocsKeywords: ["Webhook", "commerce.notification"]
53
81
  },
54
82
  {
55
83
  uri: "docs://sdk/product-detail",
56
84
  label: "product-detail",
57
- registeredName: "docs-product-detail"
85
+ registeredName: "docs-product-detail",
86
+ canonicalDocsSlug: ["recipes", "product-detail"],
87
+ canonicalDocsKeywords: ["Product detail page", "commerce.product.detail"]
58
88
  }
59
89
  ];
60
90
  var MCP_RESOURCE_LABELS = MCP_RESOURCE_INVENTORY.map(
@@ -457,6 +487,29 @@ var transactionStatusSchema = z3.enum([
457
487
  "failed",
458
488
  "canceled"
459
489
  ]);
490
+ var financialStatusSchema = z3.enum([
491
+ "pending",
492
+ "paid",
493
+ "failed",
494
+ "canceled",
495
+ "partially_refunded",
496
+ "refunded"
497
+ ]);
498
+ var confirmationStatusSchema = z3.enum(["unconfirmed", "confirmed"]);
499
+ var fulfillmentOrderStatusSchema = z3.enum([
500
+ "open",
501
+ "in_progress",
502
+ "on_hold",
503
+ "canceled",
504
+ "closed"
505
+ ]);
506
+ var shipmentStatusSchema = z3.enum([
507
+ "pending",
508
+ "shipped",
509
+ "delivered",
510
+ "canceled",
511
+ "failed"
512
+ ]);
460
513
  var orderStatusSchema = z3.enum([
461
514
  "pending",
462
515
  "paid",
@@ -471,7 +524,7 @@ var orderStatusSchema = z3.enum([
471
524
  "return_processing",
472
525
  "returned"
473
526
  ]);
474
- var entityIdSchema = z3.union([z3.string(), z3.number()]).transform(String);
527
+ var entityIdSchema = z3.union([z3.string().min(1), z3.number()]).transform(String);
475
528
  var createOrderItemSchema = z3.object({
476
529
  product: entityIdSchema,
477
530
  variant: entityIdSchema,
@@ -479,7 +532,7 @@ var createOrderItemSchema = z3.object({
479
532
  quantity: z3.number().int().positive("quantity must be a positive integer"),
480
533
  unitPrice: z3.number().optional(),
481
534
  totalPrice: z3.number().optional()
482
- });
535
+ }).strict();
483
536
  var createOrderSchema = z3.object({
484
537
  pgPaymentId: z3.string().min(1).optional(),
485
538
  orderNumber: z3.string().min(1, "orderNumber is required"),
@@ -488,7 +541,7 @@ var createOrderSchema = z3.object({
488
541
  name: z3.string().optional(),
489
542
  email: z3.string().email("Invalid email format"),
490
543
  phone: z3.string().optional()
491
- }),
544
+ }).strict(),
492
545
  shippingAddress: z3.object({
493
546
  postalCode: z3.string().optional(),
494
547
  address: z3.string().optional(),
@@ -496,12 +549,12 @@ var createOrderSchema = z3.object({
496
549
  deliveryMessage: z3.string().optional(),
497
550
  recipientName: z3.string().optional(),
498
551
  phone: z3.string().optional()
499
- }),
552
+ }).strict(),
500
553
  orderItems: z3.array(createOrderItemSchema).min(1, "At least one order item is required").max(100, "Maximum 100 items per order"),
501
554
  totalAmount: z3.number().nonnegative("totalAmount must be non-negative"),
502
555
  shippingAmount: z3.number().min(0).optional(),
503
556
  discountCode: z3.string().optional()
504
- });
557
+ }).strict();
505
558
  var CreateOrderSchema = createOrderSchema;
506
559
  var updateTransactionSchema = z3.object({
507
560
  pgPaymentId: z3.string().min(1, "pgPaymentId is required").describe("PG payment ID (required)"),
@@ -550,7 +603,7 @@ var returnReasonSchema = z3.enum([
550
603
  ]);
551
604
  var restockActionSchema = z3.enum(["return_to_stock", "discard"]);
552
605
  var returnWithRefundItemSchema = z3.object({
553
- orderItem: z3.union([z3.string(), z3.number()]).transform(String),
606
+ orderItem: z3.union([z3.string().min(1), z3.number()]).transform(String),
554
607
  quantity: z3.number().int().positive("quantity must be a positive integer"),
555
608
  restockAction: restockActionSchema.default("return_to_stock"),
556
609
  restockingFee: z3.number().min(0, "restockingFee must be non-negative").optional().describe("Restocking fee charged for this line (ADR 0005 \xA7Gap 1)")
@@ -564,10 +617,29 @@ var returnWithRefundSchema = z3.object({
564
617
  returnShippingFee: z3.number().min(0, "returnShippingFee must be non-negative").optional().describe(
565
618
  "Return shipping fee charged to the customer (ADR 0005 \xA7Gap 1)"
566
619
  ),
620
+ initialShippingRefundAmount: z3.number().min(0, "initialShippingRefundAmount must be non-negative").optional().describe("Initial order shipping amount refunded to the customer"),
621
+ initialShippingRefundOverrideNote: z3.string().min(1).optional().describe(
622
+ "Operator audit note required when overriding policy suggestion"
623
+ ),
567
624
  pgPaymentId: z3.string().min(1, "pgPaymentId is required").describe("PG payment ID for refund (required)"),
568
625
  paymentKey: z3.string().min(1).optional().describe("Provider payment key for verified refund"),
569
626
  refundReceiptUrl: z3.string().optional().describe("Refund receipt URL (optional)")
570
627
  }).strict();
628
+ var createReturnSchema = z3.object({
629
+ orderNumber: z3.string().min(1, "orderNumber is required").describe("Order number (required)"),
630
+ reason: returnReasonSchema.optional().describe("Return reason (optional)"),
631
+ reasonDetail: z3.string().optional().describe("Detailed reason text (optional)"),
632
+ returnItems: z3.array(returnWithRefundItemSchema).min(1, "At least one return item is required").max(100, "Too many return items").describe("Array of products to return (required)"),
633
+ refundAmount: z3.number().min(0, "refundAmount must be non-negative").describe(
634
+ "Line refund amount before initial shipping refund (required, min 0)"
635
+ ),
636
+ returnShippingFee: z3.number().min(0, "returnShippingFee must be non-negative").optional().describe("Return shipping fee charged to the customer"),
637
+ initialShippingRefundAmount: z3.number().min(0, "initialShippingRefundAmount must be non-negative").optional().describe("Initial order shipping amount refunded to the customer"),
638
+ initialShippingRefundOverrideNote: z3.string().min(1).optional().describe(
639
+ "Operator audit note required when overriding policy suggestion"
640
+ )
641
+ }).strict();
642
+ var CreateReturnSchema = createReturnSchema;
571
643
  var ReturnWithRefundSchema = returnWithRefundSchema;
572
644
  var cancelReasonCodeSchema = z3.enum([
573
645
  "customer",
@@ -841,6 +913,11 @@ var MCP_TOOL_CONTRACT = {
841
913
  oauthScope: "mcp:write",
842
914
  readOnly: false
843
915
  },
916
+ "prepare-fulfillment-order": {
917
+ consoleRole: "tenant-admin",
918
+ oauthScope: "mcp:write",
919
+ readOnly: false
920
+ },
844
921
  "update-fulfillment": {
845
922
  consoleRole: "tenant-admin",
846
923
  oauthScope: "mcp:write",
@@ -1113,6 +1190,13 @@ var TOOL_POLICY_MANIFEST = {
1113
1190
  consoleSurface: "POST /api/orders/create-fulfillment",
1114
1191
  annotationPolicy: NON_DESTRUCTIVE_MUTATION_ANNOTATION
1115
1192
  },
1193
+ "prepare-fulfillment-order": {
1194
+ category: "mutation-fulfillment",
1195
+ oauthScope: MCP_SCOPES.write,
1196
+ consoleRole: "tenant-admin",
1197
+ consoleSurface: "POST /api/fulfillment-orders/prepare-fulfillment-order",
1198
+ annotationPolicy: NON_DESTRUCTIVE_MUTATION_ANNOTATION
1199
+ },
1116
1200
  "update-fulfillment": {
1117
1201
  category: "mutation-fulfillment",
1118
1202
  oauthScope: MCP_SCOPES.write,
@@ -1739,22 +1823,13 @@ async function createOrder(params) {
1739
1823
  import { z as z7 } from "zod";
1740
1824
  var schema5 = {
1741
1825
  orderNumber: z7.string().min(1).describe("Order number (required)"),
1742
- status: z7.enum([
1743
- "pending",
1744
- "paid",
1745
- "failed",
1746
- "canceled",
1747
- "preparing",
1748
- "shipped",
1749
- "delivered",
1750
- "confirmed"
1751
- ]).describe(
1752
- "New operator-driven order status. The schema keeps SDK status values for compatibility, but the Console update endpoint rejects server-derived statuses (paid, canceled, returned, refunded); those must be set by payment/refund flows, and return-related statuses must be set via Return endpoints."
1826
+ status: z7.enum(["confirmed"]).describe(
1827
+ "Order confirmation status mutation. Shipping/display statuses are derived from fulfillment orders and shipments; financial/refund states are set by payment/refund flows."
1753
1828
  )
1754
1829
  };
1755
1830
  var metadata5 = {
1756
1831
  name: "update-order",
1757
- description: "Update operator-driven order status. Console accepts transitions such as paid\u2192preparing/shipped/delivered/confirmed and rejects server-derived payment/refund statuses such as paid, canceled, returned, and refunded; the MCP schema keeps SDK status values for compatibility.",
1832
+ description: "Confirm an order after delivery. Financial, fulfillment-order, shipment, return, and display statuses are explicit server-derived axes and are not writable through this tool.",
1758
1833
  annotations: {
1759
1834
  title: "Update order status",
1760
1835
  readOnlyHint: false,
@@ -1812,20 +1887,19 @@ async function checkout(params) {
1812
1887
  import { z as z9 } from "zod";
1813
1888
  var schema7 = {
1814
1889
  orderNumber: z9.string().min(1).describe("Order number (required)"),
1815
- carrier: z9.string().optional().describe("Shipping carrier name (optional)"),
1816
- trackingNumber: z9.string().optional().describe(
1817
- 'Tracking number (optional). Setting carrier + tracking triggers "shipped" status'
1818
- ),
1890
+ fulfillmentOrderId: z9.string().optional().describe("Fulfillment order ID to ship (optional)"),
1891
+ carrier: z9.string().min(1).optional().describe("Shipping carrier name"),
1892
+ trackingNumber: z9.string().min(1).optional().describe("Tracking number"),
1819
1893
  items: z9.array(
1820
1894
  z9.object({
1821
1895
  orderItem: z9.string().min(1).describe("Order item ID"),
1822
1896
  quantity: z9.number().int().positive().describe("Quantity to fulfill")
1823
1897
  })
1824
- ).describe("Array of items to fulfill (required)")
1898
+ ).optional().describe("Array of items to fulfill (optional)")
1825
1899
  };
1826
1900
  var metadata7 = {
1827
1901
  name: "create-fulfillment",
1828
- description: "Create a shipment/fulfillment for order items. Auto-updates order status (paid \u2192 preparing \u2192 shipped).",
1902
+ description: "Create a shipment for fulfillment order items. Tracking information can be supplied now or updated later with update-fulfillment.",
1829
1903
  annotations: {
1830
1904
  title: "Create fulfillment",
1831
1905
  readOnlyHint: false,
@@ -1835,6 +1909,7 @@ var metadata7 = {
1835
1909
  };
1836
1910
  async function createFulfillment({
1837
1911
  orderNumber,
1912
+ fulfillmentOrderId,
1838
1913
  carrier,
1839
1914
  trackingNumber,
1840
1915
  items
@@ -1843,8 +1918,9 @@ async function createFulfillment({
1843
1918
  const client = getClient();
1844
1919
  const result = await client.commerce.orders.createFulfillment({
1845
1920
  orderNumber,
1846
- carrier,
1847
- trackingNumber,
1921
+ fulfillmentOrderId,
1922
+ ...carrier ? { carrier } : {},
1923
+ ...trackingNumber ? { trackingNumber } : {},
1848
1924
  items
1849
1925
  });
1850
1926
  return toolSuccess({ data: result });
@@ -1853,23 +1929,48 @@ async function createFulfillment({
1853
1929
  }
1854
1930
  }
1855
1931
 
1856
- // src/tools/update-fulfillment.ts
1932
+ // src/tools/prepare-fulfillment-order.ts
1857
1933
  import { z as z10 } from "zod";
1858
1934
  var schema8 = {
1859
- fulfillmentId: z10.string().min(1).describe("Fulfillment ID (required)"),
1860
- status: z10.enum(["packed", "shipped", "delivered", "failed"]).describe(
1861
- "New fulfillment status (required). FSM: pending\u2192packed/shipped/failed, packed\u2192shipped/failed, shipped\u2192delivered/failed"
1862
- ),
1863
- carrier: z10.string().optional().describe(
1864
- "Shipping carrier (optional, changeable only in pending/packed status)"
1865
- ),
1866
- trackingNumber: z10.string().optional().describe(
1867
- "Tracking number (optional, changeable only in pending/packed status)"
1868
- )
1935
+ orderNumber: z10.string().min(1).describe("Order number (required)")
1869
1936
  };
1870
1937
  var metadata8 = {
1938
+ name: "prepare-fulfillment-order",
1939
+ description: "Prepare starts fulfillment work and does not require carrier/tracking.",
1940
+ annotations: {
1941
+ title: "Prepare fulfillment order",
1942
+ readOnlyHint: false,
1943
+ destructiveHint: false,
1944
+ idempotentHint: false
1945
+ }
1946
+ };
1947
+ async function prepareFulfillmentOrder({
1948
+ orderNumber
1949
+ }) {
1950
+ try {
1951
+ const client = getClient();
1952
+ const result = await client.commerce.orders.prepareFulfillmentOrder({
1953
+ orderNumber
1954
+ });
1955
+ return toolSuccess({ data: result });
1956
+ } catch (error) {
1957
+ return toolError(error);
1958
+ }
1959
+ }
1960
+
1961
+ // src/tools/update-fulfillment.ts
1962
+ import { z as z11 } from "zod";
1963
+ var schema9 = {
1964
+ fulfillmentId: z11.string().min(1).describe("Fulfillment ID (required)"),
1965
+ status: z11.enum(["shipped", "delivered", "failed"]).optional().describe(
1966
+ "New shipment status. Shipment lifecycle: shipped\u2192delivered/failed"
1967
+ ),
1968
+ carrier: z11.string().optional().describe("Shipping carrier (optional; can be added or corrected later)"),
1969
+ trackingNumber: z11.string().optional().describe("Tracking number (optional; can be added or corrected later)")
1970
+ };
1971
+ var metadata9 = {
1871
1972
  name: "update-fulfillment",
1872
- description: "Update fulfillment status, carrier, and tracking number. Auto-updates order status when all fulfillments are delivered.",
1973
+ description: "Update shipment status, carrier, or tracking number. Tracking can be added after shipment creation.",
1873
1974
  annotations: {
1874
1975
  title: "Update fulfillment",
1875
1976
  readOnlyHint: false,
@@ -1885,11 +1986,16 @@ async function updateFulfillment({
1885
1986
  }) {
1886
1987
  try {
1887
1988
  const client = getClient();
1989
+ if (status === void 0 && carrier === void 0 && trackingNumber === void 0) {
1990
+ return toolError(
1991
+ new Error("status, carrier, or trackingNumber is required")
1992
+ );
1993
+ }
1888
1994
  const result = await client.commerce.orders.updateFulfillment({
1889
1995
  fulfillmentId,
1890
- status,
1891
- carrier,
1892
- trackingNumber
1996
+ ...status ? { status } : {},
1997
+ ...carrier ? { carrier } : {},
1998
+ ...trackingNumber ? { trackingNumber } : {}
1893
1999
  });
1894
2000
  return toolSuccess({ data: result });
1895
2001
  } catch (error) {
@@ -1898,8 +2004,8 @@ async function updateFulfillment({
1898
2004
  }
1899
2005
 
1900
2006
  // src/tools/update-transaction.ts
1901
- var schema9 = UpdateTransactionSchema.shape;
1902
- var metadata9 = {
2007
+ var schema10 = UpdateTransactionSchema.shape;
2008
+ var metadata10 = {
1903
2009
  name: "update-transaction",
1904
2010
  description: "Update transaction status, payment method, and receipt URL.",
1905
2011
  annotations: {
@@ -1935,8 +2041,8 @@ async function updateTransaction({
1935
2041
  }
1936
2042
 
1937
2043
  // src/tools/confirm-payment.ts
1938
- var schema10 = ConfirmPaymentSchema.shape;
1939
- var metadata10 = {
2044
+ var schema11 = ConfirmPaymentSchema.shape;
2045
+ var metadata11 = {
1940
2046
  name: "confirm-payment",
1941
2047
  description: "Confirm a provider-verified ecommerce payment through the generic payment confirmation flow.",
1942
2048
  annotations: {
@@ -1963,10 +2069,10 @@ var CancelOrderToolSchema = CancelOrderSchema.extend({
1963
2069
  "Optional X-Idempotency-Key forwarded to the Console cancel endpoint"
1964
2070
  )
1965
2071
  }).strict();
1966
- var schema11 = CancelOrderToolSchema.shape;
1967
- var metadata11 = {
2072
+ var schema12 = CancelOrderToolSchema.shape;
2073
+ var metadata12 = {
1968
2074
  name: "cancel-order",
1969
- description: "Cancel an eligible pre-fulfillment order through the provider-verified cancellation flow. Paid captured orders are refunded before the local order moves to canceled; shipped, delivered, active-return, and fulfilled orders are rejected.",
2075
+ description: "Cancel an eligible order through the server-derived local cancellation flow. Paid captured orders move to canceled locally and require separate storefront PG refund resolution; preparation fulfillment orders are voided when no shipment exists, while shipped, delivered, active-return, and fulfilled orders are rejected.",
1970
2076
  annotations: {
1971
2077
  title: "Cancel order",
1972
2078
  readOnlyHint: false,
@@ -1991,20 +2097,8 @@ async function cancelOrder(params) {
1991
2097
  }
1992
2098
 
1993
2099
  // src/tools/create-return.ts
1994
- import { z as z11 } from "zod";
1995
- var schema12 = {
1996
- orderNumber: z11.string().min(1).describe("Order number (required)"),
1997
- reason: z11.enum(["change_of_mind", "defective", "wrong_delivery", "damaged", "other"]).optional().describe("Return reason (optional)"),
1998
- reasonDetail: z11.string().optional().describe("Detailed reason text (optional)"),
1999
- returnItems: z11.array(
2000
- z11.object({
2001
- orderItem: z11.string().min(1).describe("Order item ID"),
2002
- quantity: z11.number().int().positive().describe("Quantity to return")
2003
- })
2004
- ).describe("Array of products to return (required)"),
2005
- refundAmount: z11.number().nonnegative().describe("Refund amount (required, min 0)")
2006
- };
2007
- var metadata12 = {
2100
+ var schema13 = CreateReturnSchema.shape;
2101
+ var metadata13 = {
2008
2102
  name: "create-return",
2009
2103
  description: "Create a return request for an order. Only works for delivered/confirmed orders. Updates order status to return_requested.",
2010
2104
  annotations: {
@@ -2019,7 +2113,10 @@ async function createReturn({
2019
2113
  reason,
2020
2114
  reasonDetail,
2021
2115
  returnItems,
2022
- refundAmount
2116
+ refundAmount,
2117
+ returnShippingFee,
2118
+ initialShippingRefundAmount,
2119
+ initialShippingRefundOverrideNote
2023
2120
  }) {
2024
2121
  try {
2025
2122
  const client = getClient();
@@ -2028,7 +2125,10 @@ async function createReturn({
2028
2125
  reason,
2029
2126
  reasonDetail,
2030
2127
  returnItems,
2031
- refundAmount
2128
+ refundAmount,
2129
+ returnShippingFee,
2130
+ initialShippingRefundAmount,
2131
+ initialShippingRefundOverrideNote
2032
2132
  });
2033
2133
  return toolSuccess({ data: result });
2034
2134
  } catch (error) {
@@ -2038,13 +2138,13 @@ async function createReturn({
2038
2138
 
2039
2139
  // src/tools/update-return.ts
2040
2140
  import { z as z12 } from "zod";
2041
- var schema13 = {
2141
+ var schema14 = {
2042
2142
  returnId: z12.string().min(1).describe("Return ID (required)"),
2043
2143
  status: z12.enum(["processing", "approved", "rejected", "completed"]).describe(
2044
2144
  "New operator-driven return status (required). The schema keeps SDK status values for compatibility, but Console accepts only requested\u2192processing/rejected and processing\u2192approved/rejected here; completed is server-derived and must be set by return-with-refund."
2045
2145
  )
2046
2146
  };
2047
- var metadata13 = {
2147
+ var metadata14 = {
2048
2148
  name: "update-return",
2049
2149
  description: "Update operator-driven return status with FSM validation. Rejection can restore the order flow; completion and inventory restoration are handled by return-with-refund after provider-verified refund, while the MCP schema keeps SDK status values for compatibility.",
2050
2150
  annotations: {
@@ -2071,8 +2171,8 @@ async function updateReturn({
2071
2171
  }
2072
2172
 
2073
2173
  // src/tools/return-with-refund.ts
2074
- var schema14 = ReturnWithRefundSchema.shape;
2075
- var metadata14 = {
2174
+ var schema15 = ReturnWithRefundSchema.shape;
2175
+ var metadata15 = {
2076
2176
  name: "return-with-refund",
2077
2177
  description: "Combined provider-verified return + refund operation. Creates a completed return, restores eligible stock, records the refund transaction, and advances the order to the returned state.",
2078
2178
  annotations: {
@@ -2089,6 +2189,8 @@ async function returnWithRefund({
2089
2189
  returnItems,
2090
2190
  refundAmount,
2091
2191
  returnShippingFee,
2192
+ initialShippingRefundAmount,
2193
+ initialShippingRefundOverrideNote,
2092
2194
  pgPaymentId,
2093
2195
  paymentKey,
2094
2196
  refundReceiptUrl
@@ -2102,6 +2204,8 @@ async function returnWithRefund({
2102
2204
  returnItems,
2103
2205
  refundAmount,
2104
2206
  returnShippingFee,
2207
+ initialShippingRefundAmount,
2208
+ initialShippingRefundOverrideNote,
2105
2209
  pgPaymentId,
2106
2210
  paymentKey,
2107
2211
  refundReceiptUrl
@@ -2115,14 +2219,14 @@ async function returnWithRefund({
2115
2219
 
2116
2220
  // src/tools/add-cart-item.ts
2117
2221
  import { z as z13 } from "zod";
2118
- var schema15 = {
2222
+ var schema16 = {
2119
2223
  cartId: z13.string().min(1).describe("Cart ID (required)"),
2120
2224
  product: z13.string().min(1).describe("Product ID (required)"),
2121
2225
  variant: z13.string().min(1).describe("Product variant ID (required)"),
2122
2226
  option: z13.string().min(1).describe("Product option ID (required)"),
2123
2227
  quantity: z13.number().int().positive().describe("Quantity to add (required, positive integer)")
2124
2228
  };
2125
- var metadata15 = {
2229
+ var metadata16 = {
2126
2230
  name: "add-cart-item",
2127
2231
  description: "Add a product to cart. Validates stock, merges quantity if item already exists, recalculates totals.",
2128
2232
  annotations: {
@@ -2156,11 +2260,11 @@ async function addCartItem({
2156
2260
 
2157
2261
  // src/tools/update-cart-item.ts
2158
2262
  import { z as z14 } from "zod";
2159
- var schema16 = {
2263
+ var schema17 = {
2160
2264
  cartItemId: z14.string().min(1).describe("Cart item ID (required)"),
2161
2265
  quantity: z14.number().int().positive().describe("New quantity (required, positive integer)")
2162
2266
  };
2163
- var metadata16 = {
2267
+ var metadata17 = {
2164
2268
  name: "update-cart-item",
2165
2269
  description: "Update cart item quantity. Validates stock availability, recalculates cart totals.",
2166
2270
  annotations: {
@@ -2185,10 +2289,10 @@ async function updateCartItem({
2185
2289
 
2186
2290
  // src/tools/remove-cart-item.ts
2187
2291
  import { z as z15 } from "zod";
2188
- var schema17 = {
2292
+ var schema18 = {
2189
2293
  cartItemId: z15.string().min(1).describe("Cart item ID to remove (required)")
2190
2294
  };
2191
- var metadata17 = {
2295
+ var metadata18 = {
2192
2296
  name: "remove-cart-item",
2193
2297
  description: "Remove an item from cart. Recalculates cart totals after removal.",
2194
2298
  annotations: {
@@ -2212,11 +2316,11 @@ async function removeCartItem({
2212
2316
 
2213
2317
  // src/tools/apply-discount.ts
2214
2318
  import { z as z16 } from "zod";
2215
- var schema18 = {
2319
+ var schema19 = {
2216
2320
  cartId: z16.string().min(1).describe("Cart ID (required)"),
2217
2321
  discountCode: z16.string().describe("Discount code to apply (required)")
2218
2322
  };
2219
- var metadata18 = {
2323
+ var metadata19 = {
2220
2324
  name: "apply-discount",
2221
2325
  description: "Apply a discount code to a cart. Validates the code, updates cart totals, and sets free shipping if applicable.",
2222
2326
  annotations: {
@@ -2241,10 +2345,10 @@ async function applyDiscount({
2241
2345
 
2242
2346
  // src/tools/remove-discount.ts
2243
2347
  import { z as z17 } from "zod";
2244
- var schema19 = {
2348
+ var schema20 = {
2245
2349
  cartId: z17.string().min(1).describe("Cart ID (required)")
2246
2350
  };
2247
- var metadata19 = {
2351
+ var metadata20 = {
2248
2352
  name: "remove-discount",
2249
2353
  description: "Remove the applied discount code from a cart and recalculate totals.",
2250
2354
  annotations: {
@@ -2268,10 +2372,10 @@ async function removeDiscount({
2268
2372
 
2269
2373
  // src/tools/clear-cart.ts
2270
2374
  import { z as z18 } from "zod";
2271
- var schema20 = {
2375
+ var schema21 = {
2272
2376
  cartId: z18.string().min(1).describe("Cart ID (required)")
2273
2377
  };
2274
- var metadata20 = {
2378
+ var metadata21 = {
2275
2379
  name: "clear-cart",
2276
2380
  description: "Remove all items from a cart, reset discount and amounts. Shipping fee is preserved.",
2277
2381
  annotations: {
@@ -2295,11 +2399,11 @@ async function clearCart({
2295
2399
 
2296
2400
  // src/tools/validate-discount.ts
2297
2401
  import { z as z19 } from "zod";
2298
- var schema21 = {
2402
+ var schema22 = {
2299
2403
  code: z19.string().describe("Discount code to validate (required)"),
2300
2404
  orderAmount: z19.number().describe("Order amount for validation (required)")
2301
2405
  };
2302
- var metadata21 = {
2406
+ var metadata22 = {
2303
2407
  name: "validate-discount",
2304
2408
  description: "Validate a discount code. Checks active status, date range, usage limits, minimum order amount, and calculates discount.",
2305
2409
  annotations: {
@@ -2327,12 +2431,12 @@ async function validateDiscount({
2327
2431
 
2328
2432
  // src/tools/calculate-shipping.ts
2329
2433
  import { z as z20 } from "zod";
2330
- var schema22 = {
2434
+ var schema23 = {
2331
2435
  shippingPolicyId: z20.string().optional().describe("Shipping policy ID (uses default policy if omitted)"),
2332
2436
  orderAmount: z20.number().describe("Order amount for fee calculation (required)"),
2333
2437
  postalCode: z20.string().optional().describe("Postal code for Jeju surcharge detection (63000-63644)")
2334
2438
  };
2335
- var metadata22 = {
2439
+ var metadata23 = {
2336
2440
  name: "calculate-shipping",
2337
2441
  description: "Calculate shipping fee based on order amount and postal code. Supports free shipping threshold and Jeju surcharge.",
2338
2442
  annotations: {
@@ -2362,7 +2466,7 @@ async function calculateShipping({
2362
2466
 
2363
2467
  // src/tools/stock-check.ts
2364
2468
  import { z as z21 } from "zod";
2365
- var schema23 = {
2469
+ var schema24 = {
2366
2470
  items: z21.array(
2367
2471
  z21.object({
2368
2472
  variantId: z21.string().describe("Product variant ID"),
@@ -2372,7 +2476,7 @@ var schema23 = {
2372
2476
  "Array of items to check stock for (required, max 100). Each: { variantId, quantity }"
2373
2477
  )
2374
2478
  };
2375
- var metadata23 = {
2479
+ var metadata24 = {
2376
2480
  name: "stock-check",
2377
2481
  description: "Batch check product option stock availability. Returns per-item availability and an allAvailable flag.",
2378
2482
  annotations: {
@@ -2396,11 +2500,11 @@ async function stockCheck({
2396
2500
 
2397
2501
  // src/tools/product-detail.ts
2398
2502
  import { z as z22 } from "zod";
2399
- var schema24 = {
2503
+ var schema25 = {
2400
2504
  slug: z22.string().optional().describe("Product slug (one of slug or id required)"),
2401
2505
  id: z22.string().optional().describe("Product id (one of slug or id required)")
2402
2506
  };
2403
- var metadata24 = {
2507
+ var metadata25 = {
2404
2508
  name: "product-detail",
2405
2509
  description: "Fetch full product detail by slug or id. Returns one resolver-ready product with variants, option slugs, option value slugs/media, brand, categories, tags, images, videos, and listing rollup, or found:false with a reason if missing/unpublished/feature disabled. Permission/auth errors still throw.",
2406
2510
  annotations: {
@@ -2428,7 +2532,7 @@ async function productDetail({
2428
2532
  }
2429
2533
 
2430
2534
  // src/tools/product-upsert.ts
2431
- var schema25 = {
2535
+ var schema26 = {
2432
2536
  productId: ProductUpsertObjectSchema.shape.productId.describe(
2433
2537
  "Existing product id for graph-only updates. Prefer this for an existing product on edit after loading GET /api/products/:id/composer-draft."
2434
2538
  ),
@@ -2445,7 +2549,7 @@ var schema25 = {
2445
2549
  "Full desired variant graph. On edit, omitted variants are deleted or deactivated according to server references. Prefer stable option-value IDs."
2446
2550
  )
2447
2551
  };
2448
- var metadata25 = {
2552
+ var metadata26 = {
2449
2553
  name: "product-upsert",
2450
2554
  description: "Create a product or update an existing product graph. Existing products should load composer-draft first, send productId plus graphRevision, and include the full desired options/variants graph.",
2451
2555
  annotations: {
@@ -2486,8 +2590,8 @@ async function getCollectionSchema(collection) {
2486
2590
  }
2487
2591
 
2488
2592
  // src/tools/get-collection-schema.ts
2489
- var schema26 = createCollectionSchemaToolInputSchema(SERVER_COLLECTIONS3).shape;
2490
- var metadata26 = {
2593
+ var schema27 = createCollectionSchemaToolInputSchema(SERVER_COLLECTIONS3).shape;
2594
+ var metadata27 = {
2491
2595
  name: "get-collection-schema",
2492
2596
  description: "Get the authoritative tenant-aware collection schema from console. Use this before create/update to understand writable fields, hidden fields, required metadata, and collection-level visibility.",
2493
2597
  annotations: {
@@ -2538,8 +2642,8 @@ async function getTenantFeatureProgress(feature, includeEvidence = false) {
2538
2642
  }
2539
2643
 
2540
2644
  // src/tools/get-tenant-context.ts
2541
- var schema27 = tenantContextToolInputSchema.shape;
2542
- var metadata27 = {
2645
+ var schema28 = tenantContextToolInputSchema.shape;
2646
+ var metadata28 = {
2543
2647
  name: "get-tenant-context",
2544
2648
  description: "Get current tenant features, active collections, and field visibility. Call this at the start of every session. Use includeCounts=true to also get per-collection document counts for setup diagnostics.",
2545
2649
  annotations: {
@@ -2616,8 +2720,8 @@ async function handler({
2616
2720
  }
2617
2721
 
2618
2722
  // src/tools/check-feature-progress.ts
2619
- var schema28 = tenantFeatureProgressInputSchema.shape;
2620
- var metadata28 = {
2723
+ var schema29 = tenantFeatureProgressInputSchema.shape;
2724
+ var metadata29 = {
2621
2725
  name: "check-feature-progress",
2622
2726
  description: "Check tenant implementation progress for a supported feature. Start with feature=ecommerce to inspect catalog, cart, checkout, payment result, webhook, and operations readiness without mutating tenant data.",
2623
2727
  annotations: {
@@ -2663,12 +2767,12 @@ function invalidateFieldConfigCache() {
2663
2767
  }
2664
2768
 
2665
2769
  // src/tools/list-configurable-fields.ts
2666
- var schema29 = {
2770
+ var schema30 = {
2667
2771
  collection: z23.string().optional().describe(
2668
2772
  "Filter by collection slug (optional \u2014 returns all if omitted). Use this filter to reduce response size when you know which collection to check."
2669
2773
  )
2670
2774
  };
2671
- var metadata29 = {
2775
+ var metadata30 = {
2672
2776
  name: "list-configurable-fields",
2673
2777
  description: "List all configurable fields for tenant collections with current visibility state. Shows which fields can be shown/hidden and their current status. Returns all collections including inactive features \u2014 cross-reference with get-tenant-context for active features. Response includes ~300 fields across 47 collections \u2014 use collection filter when possible.",
2674
2778
  annotations: {
@@ -2700,7 +2804,7 @@ async function listConfigurableFields(params) {
2700
2804
 
2701
2805
  // src/tools/update-field-config.ts
2702
2806
  import { z as z24 } from "zod";
2703
- var schema30 = {
2807
+ var schema31 = {
2704
2808
  collection: z24.string().min(1).describe("Collection slug (required)"),
2705
2809
  hiddenFields: z24.array(z24.string().min(1).max(200)).max(300).describe(
2706
2810
  "Fields to hide (required). This is a FULL REPLACE \u2014 fields NOT in this list will be shown. Pass [] to show all fields. Use list-configurable-fields first to see available field paths."
@@ -2709,7 +2813,7 @@ var schema30 = {
2709
2813
  "Hide the entire collection from Admin Panel (optional). When true, individual hiddenFields are irrelevant."
2710
2814
  )
2711
2815
  };
2712
- var metadata30 = {
2816
+ var metadata31 = {
2713
2817
  name: "update-field-config",
2714
2818
  description: "Update field visibility configuration for a tenant collection. Hidden fields are removed from the Admin Panel UI. IMPORTANT: hiddenFields is a full replace, not a merge. Always call list-configurable-fields first to see current state.",
2715
2819
  annotations: {
@@ -3178,7 +3282,7 @@ function getRecipe(goal, runtime = "both") {
3178
3282
  }
3179
3283
 
3180
3284
  // src/tools/sdk-get-recipe.ts
3181
- var schema31 = {
3285
+ var schema32 = {
3182
3286
  goal: z25.enum([
3183
3287
  "fetch-list",
3184
3288
  "fetch-by-id",
@@ -3195,7 +3299,7 @@ var schema31 = {
3195
3299
  collection: z25.string().optional().describe("Specific collection name if applicable"),
3196
3300
  includeExample: z25.boolean().default(true).describe("Whether to include a full code example")
3197
3301
  };
3198
- var metadata31 = {
3302
+ var metadata32 = {
3199
3303
  name: "sdk-get-recipe",
3200
3304
  description: "Get a complete SDK code recipe for a specific task. Returns recommended approach, code example, and related documentation links. Use this FIRST when the user asks how to do something with the SDK.",
3201
3305
  annotations: {
@@ -3376,9 +3480,16 @@ var docIndex = [
3376
3480
  "order",
3377
3481
  "orderChanged",
3378
3482
  "collection.orderChanged",
3379
- "isOrderChangedWebhookEvent"
3483
+ "isOrderChangedWebhookEvent",
3484
+ "commerce.notification",
3485
+ "createCommerceNotificationWebhookHandler",
3486
+ "createCommerceEmailWebhookHandler",
3487
+ "orderCanceled",
3488
+ "resolveCancelRefund",
3489
+ "cancel refund",
3490
+ "external PG refund"
3380
3491
  ],
3381
- summary: "Tenant webhooks deliver signed server-to-server events via WEBHOOK_SECRET, including customer password reset and semantic order changes with collection.orderChanged / isOrderChangedWebhookEvent.",
3492
+ summary: "Tenant webhooks deliver signed server-to-server events via WEBHOOK_SECRET, including customer password reset, semantic order changes, and commerce.notification workers with createCommerceNotificationWebhookHandler for orderCanceled refund handoff.",
3382
3493
  resourceUri: "docs://sdk/webhook"
3383
3494
  },
3384
3495
  // Order API
@@ -3390,8 +3501,8 @@ var docIndex = [
3390
3501
  },
3391
3502
  {
3392
3503
  title: "Order API \u2014 Fulfillment and Shipping",
3393
- keywords: ["fulfillment", "shipping", "tracking", "carrier", "trackingNumber", "createFulfillment", "updateFulfillment", "shipped", "delivered"],
3394
- summary: "client.commerce.orders.createFulfillment({ orderNumber, items, carrier?, trackingNumber? }) creates a shipment. updateFulfillment() advances fulfillment status.",
3504
+ keywords: ["fulfillment", "shipping", "tracking", "carrier", "trackingNumber", "prepareFulfillmentOrder", "createFulfillment", "updateFulfillment", "shipped", "delivered"],
3505
+ summary: "client.commerce.orders.prepareFulfillmentOrder({ orderNumber }) starts fulfillment work. createFulfillment({ orderNumber, ... }) creates a shipment with optional tracking. updateFulfillment() advances shipment status or updates tracking.",
3395
3506
  resourceUri: "docs://sdk/server-api"
3396
3507
  },
3397
3508
  {
@@ -3424,11 +3535,11 @@ function searchDocs(query, limit = 5) {
3424
3535
  }
3425
3536
 
3426
3537
  // src/tools/sdk-search-docs.ts
3427
- var schema32 = {
3538
+ var schema33 = {
3428
3539
  query: z26.string().min(2).describe('Search keyword or phrase (e.g. "infinite scroll", "webhook", "customer login")'),
3429
3540
  limit: z26.number().min(1).max(10).default(5).describe("Maximum results to return (1-10, default: 5)")
3430
3541
  };
3431
- var metadata32 = {
3542
+ var metadata33 = {
3432
3543
  name: "sdk-search-docs",
3433
3544
  description: "Search SDK documentation by keyword. Returns matching topics with summaries and resource links. Use when looking for specific SDK features or patterns.",
3434
3545
  annotations: {
@@ -3464,7 +3575,7 @@ function handler4({
3464
3575
 
3465
3576
  // src/tools/sdk-get-auth-setup.ts
3466
3577
  import { z as z27 } from "zod";
3467
- var schema33 = {
3578
+ var schema34 = {
3468
3579
  scenario: z27.enum([
3469
3580
  "browser-client",
3470
3581
  "server-client",
@@ -3474,7 +3585,7 @@ var schema33 = {
3474
3585
  "webhook-verification"
3475
3586
  ]).describe("Authentication scenario")
3476
3587
  };
3477
- var metadata33 = {
3588
+ var metadata34 = {
3478
3589
  name: "sdk-get-auth-setup",
3479
3590
  description: "Get the current authentication setup for a specific scenario. Returns env var names, code snippets, and security notes.",
3480
3591
  annotations: {
@@ -3638,12 +3749,12 @@ function handler5({
3638
3749
  // src/tools/sdk-get-collection-pattern.ts
3639
3750
  import { z as z28 } from "zod";
3640
3751
  import { COLLECTIONS, SERVER_COLLECTIONS as SERVER_COLLECTIONS4 } from "@01.software/sdk";
3641
- var schema34 = {
3752
+ var schema35 = {
3642
3753
  collection: z28.enum(SERVER_COLLECTIONS4).describe("Collection name"),
3643
3754
  operation: z28.enum(["read", "write", "full-crud"]).default("read").describe("What operations are needed"),
3644
3755
  surface: z28.enum(["query-builder", "react-query", "server-api"]).default("query-builder").describe("Preferred API surface")
3645
3756
  };
3646
- var metadata34 = {
3757
+ var metadata35 = {
3647
3758
  name: "sdk-get-collection-pattern",
3648
3759
  description: "Get the recommended CRUD pattern for a specific collection. Returns code examples for the chosen API surface and operation type.",
3649
3760
  annotations: {
@@ -3840,13 +3951,13 @@ function handler6({
3840
3951
 
3841
3952
  // src/prompts/sdk-usage-guide.ts
3842
3953
  import { z as z29 } from "zod";
3843
- var schema35 = {
3954
+ var schema36 = {
3844
3955
  goal: z29.string().describe('What the user wants to accomplish (e.g., "query product list", "create order")'),
3845
3956
  runtime: z29.enum(["browser", "server"]).optional().describe("Target runtime: browser (React/Next.js client) or server (Node.js)"),
3846
3957
  surface: z29.enum(["query-builder", "react-query", "customer-api", "server-api"]).optional().describe("Preferred API surface"),
3847
3958
  collection: z29.string().optional().describe("Specific collection if relevant")
3848
3959
  };
3849
- var metadata35 = {
3960
+ var metadata36 = {
3850
3961
  name: "sdk-usage-guide",
3851
3962
  title: "SDK Usage Guide",
3852
3963
  description: "Provides guidance on how to perform a specific task using the 01.software SDK",
@@ -4020,12 +4131,12 @@ const { allAvailable } = await client.commerce.product.stockCheck({
4020
4131
  // src/prompts/collection-query-help.ts
4021
4132
  import { z as z30 } from "zod";
4022
4133
  import { COLLECTIONS as COLLECTIONS2, SERVER_COLLECTIONS as SERVER_COLLECTIONS5 } from "@01.software/sdk";
4023
- var schema36 = {
4134
+ var schema37 = {
4024
4135
  collection: z30.enum(SERVER_COLLECTIONS5).describe("Collection name"),
4025
4136
  operation: z30.enum(["find", "create", "update", "delete"]).describe("Operation to perform (find, create, update, delete)"),
4026
4137
  filters: z30.string().optional().describe("Filter conditions (JSON string, optional)")
4027
4138
  };
4028
- var metadata36 = {
4139
+ var metadata37 = {
4029
4140
  name: "collection-query-help",
4030
4141
  title: "Collection Query Help",
4031
4142
  description: "Provides guidance on how to write queries for a specific collection",
@@ -4123,7 +4234,7 @@ ${operation === "find" ? `- Use \`where\` option for filtering (Payload query sy
4123
4234
 
4124
4235
  // src/prompts/order-flow-guide.ts
4125
4236
  import { z as z31 } from "zod";
4126
- var schema37 = {
4237
+ var schema38 = {
4127
4238
  scenario: z31.enum([
4128
4239
  "simple-order",
4129
4240
  "cart-checkout",
@@ -4132,7 +4243,7 @@ var schema37 = {
4132
4243
  "fulfillment-tracking"
4133
4244
  ]).describe("Order flow scenario")
4134
4245
  };
4135
- var metadata37 = {
4246
+ var metadata38 = {
4136
4247
  name: "order-flow-guide",
4137
4248
  title: "Order Flow Guide",
4138
4249
  description: "Provides step-by-step guidance for ecommerce order flows including creation, checkout, returns, and fulfillment.",
@@ -4152,10 +4263,16 @@ var SCENARIOS = {
4152
4263
  - Successful confirmation transitions the order to \`paid\`
4153
4264
  - Paid orders reserve sellable quantity (reservedStock += qty); physical stock is decremented on delivery
4154
4265
 
4155
- 3. **Fulfillment** \u2192 \`create-fulfillment\` tool
4156
- - Provide carrier + trackingNumber for shipped status
4157
- - Partial shipment \u2192 order becomes \`preparing\`
4158
- - All items shipped \u2192 order becomes \`shipped\`
4266
+ 3. **Prepare Fulfillment Work** \u2192 \`prepare-fulfillment-order\` tool
4267
+ - Provide orderNumber only
4268
+ - Starts fulfillment-order work without carrier/tracking
4269
+ - Order display status is derived as \`preparing\`
4270
+
4271
+ 4. **Create Shipment** \u2192 \`create-fulfillment\` tool
4272
+ - Provide orderNumber
4273
+ - Optional: carrier + trackingNumber can be supplied now or later
4274
+ - Shipment status starts as \`shipped\`
4275
+ - Shipment state drives the derived order display status
4159
4276
 
4160
4277
  ### Code Example (ServerClient)
4161
4278
  \`\`\`typescript
@@ -4186,7 +4303,12 @@ await client.commerce.orders.confirmPayment({
4186
4303
  confirmationSource: 'provider_api_confirm'
4187
4304
  })
4188
4305
 
4189
- // 3. Ship items
4306
+ // 3. Start fulfillment work without tracking
4307
+ await client.commerce.orders.prepareFulfillmentOrder({
4308
+ orderNumber: 'ORD-240101-001'
4309
+ })
4310
+
4311
+ // 4. Ship items; tracking can be added now or later
4190
4312
  await client.commerce.orders.createFulfillment({
4191
4313
  orderNumber: 'ORD-240101-001',
4192
4314
  carrier: 'cj',
@@ -4272,11 +4394,12 @@ await client.commerce.orders.returnWithRefund({
4272
4394
  - **PG refund is not performed by Console** \u2014 storefront/BFF calls Toss/Portone; webhook sync is a follow-up
4273
4395
  - \`refundedAmount\` is not incremented on local cancel; new cancels return \`providerRefunded: false\`
4274
4396
  - \`refundPending: true\` signals storefront PG refund is still required; idempotent retries may return it from server metadata
4397
+ - \`in_progress\` / \`on_hold\` preparation fulfillment orders are voided during cancel when no shipment exists
4275
4398
  - Legacy inline-PG-cancel rows may still return \`reconciliationRequired: true\` with \`providerRefunded: true\`
4276
4399
  - Duplicate local success returns \`alreadyCanceled: true\`
4277
4400
 
4278
4401
  ### V1 Rejections
4279
- - Orders with non-failed fulfillments are rejected
4402
+ - Orders with active fulfillments (not \`failed\` / \`canceled\`) are rejected
4280
4403
  - \`shipped\`, \`delivered\`, \`confirmed\`, and return-axis orders are rejected
4281
4404
  - Active returns are rejected; use \`return-with-refund\` after delivery
4282
4405
  - Partial line-item cancellation is not supported in v1
@@ -4324,32 +4447,45 @@ Use one idempotency key per distinct PG refund attempt/result. For PG refund fai
4324
4447
  "fulfillment-tracking": `## Fulfillment & Tracking
4325
4448
 
4326
4449
  ### Creating Fulfillment
4327
- 1. **Create Fulfillment** \u2192 \`create-fulfillment\` tool
4328
- - Order must be \`paid\` or \`preparing\`
4329
- - With carrier + trackingNumber \u2192 fulfillment status = \`shipped\`
4330
- - Without \u2192 fulfillment status = \`pending\`
4450
+ 1. **Prepare Fulfillment Work** \u2192 \`prepare-fulfillment-order\` tool
4451
+ - Order must be paid and fulfillable
4452
+ - Provide orderNumber only
4453
+ - No carrier/tracking is required
4454
+ - Fulfillment order status becomes \`in_progress\`
4455
+
4456
+ 2. **Create Shipment** \u2192 \`create-fulfillment\` tool
4457
+ - Provide orderNumber
4458
+ - Optional: carrier and trackingNumber can be supplied now or updated later
4459
+ - Optional: fulfillmentOrderId and item quantities for partial shipments
4460
+ - Shipment status starts as \`shipped\`
4331
4461
 
4332
4462
  ### Updating Fulfillment
4333
- 2. **Update** \u2192 \`update-fulfillment\` tool
4334
- - FSM: pending \u2192 packed \u2192 shipped \u2192 delivered (terminal)
4335
- - Or: pending/packed/shipped \u2192 failed (terminal)
4336
- - Carrier/trackingNumber changeable only in pending/packed status
4463
+ 3. **Update Shipment** \u2192 \`update-fulfillment\` tool
4464
+ - Shipment lifecycle: shipped \u2192 delivered
4465
+ - Or: shipped \u2192 failed
4466
+ - Carrier/trackingNumber can be added or corrected after shipment creation
4337
4467
 
4338
4468
  ### Auto Timestamps
4339
4469
  - \`shipped\` \u2192 sets \`shippedAt\`
4340
4470
  - \`delivered\` \u2192 sets \`deliveredAt\`
4341
4471
 
4342
- ### Order Auto-sync
4343
- - All items shipped with carrier \u2192 order \`shipped\`
4344
- - Partial shipment \u2192 order \`preparing\`
4345
- - All non-failed fulfillments delivered \u2192 order \`delivered\`
4472
+ ### Order Display Projection
4473
+ - \`preparing\` is derived from active fulfillment-order work
4474
+ - \`shipped\` is derived from active shipment rows
4475
+ - \`delivered\` is derived only after all active shipments are delivered
4476
+ - \`confirmed\` is set through \`update-order\` after delivery
4346
4477
 
4347
4478
  ### Carriers
4348
4479
  cj, hanjin, lotte, epost, logen, other
4349
4480
 
4350
4481
  ### Code Example
4351
4482
  \`\`\`typescript
4352
- // Create fulfillment with tracking
4483
+ // Prepare fulfillment work first
4484
+ await client.commerce.orders.prepareFulfillmentOrder({
4485
+ orderNumber: 'ORD-240101-001'
4486
+ })
4487
+
4488
+ // Create shipment; carrier/tracking are optional
4353
4489
  await client.commerce.orders.createFulfillment({
4354
4490
  orderNumber: 'ORD-240101-001',
4355
4491
  carrier: 'cj',
@@ -4357,6 +4493,13 @@ await client.commerce.orders.createFulfillment({
4357
4493
  items: [{ orderItem: 'oi-id', quantity: 2 }]
4358
4494
  })
4359
4495
 
4496
+ // Add or update tracking later
4497
+ await client.commerce.orders.updateFulfillment({
4498
+ fulfillmentId: 'ful-id',
4499
+ carrier: 'cj',
4500
+ trackingNumber: '1234567890'
4501
+ })
4502
+
4360
4503
  // Mark as delivered
4361
4504
  await client.commerce.orders.updateFulfillment({
4362
4505
  fulfillmentId: 'ful-id',
@@ -4374,7 +4517,7 @@ ${SCENARIOS[scenario] || "Unknown scenario."}
4374
4517
  ## Related MCP Tools
4375
4518
  - \`create-order\`, \`get-order\`, \`update-order\`
4376
4519
  - \`checkout\`
4377
- - \`create-fulfillment\`, \`update-fulfillment\`
4520
+ - \`prepare-fulfillment-order\`, \`create-fulfillment\`, \`update-fulfillment\`
4378
4521
  - \`create-return\`, \`update-return\`, \`return-with-refund\`
4379
4522
  - \`confirm-payment\`, \`cancel-order\`, \`update-transaction\`
4380
4523
  - \`validate-discount\`, \`calculate-shipping\``;
@@ -4382,7 +4525,7 @@ ${SCENARIOS[scenario] || "Unknown scenario."}
4382
4525
 
4383
4526
  // src/prompts/feature-setup-guide.ts
4384
4527
  import { z as z32 } from "zod";
4385
- var schema38 = {
4528
+ var schema39 = {
4386
4529
  feature: z32.enum([
4387
4530
  "ecommerce",
4388
4531
  "customers",
@@ -4398,7 +4541,7 @@ var schema38 = {
4398
4541
  "community"
4399
4542
  ]).describe("Feature to get setup guide for")
4400
4543
  };
4401
- var metadata38 = {
4544
+ var metadata39 = {
4402
4545
  name: "feature-setup-guide",
4403
4546
  title: "Feature Setup Guide",
4404
4547
  description: "Setup checklist and remediation guide for a tenant feature. Load with check-feature-progress and get-tenant-context to diagnose setup gaps.",
@@ -4606,7 +4749,7 @@ ${FEATURES[feature] || "Unknown feature."}
4606
4749
  }
4607
4750
 
4608
4751
  // src/resources/(config)/app.ts
4609
- var metadata39 = {
4752
+ var metadata40 = {
4610
4753
  name: "app-config",
4611
4754
  title: "Application Config",
4612
4755
  description: "01.software SDK and MCP server configuration information"
@@ -4650,7 +4793,7 @@ The hosted HTTP MCP endpoint at https://mcp.01.software/mcp exposes only these O
4650
4793
  - \`sdk-get-auth-setup\` - Get framework-specific auth setup guidance
4651
4794
  - \`sdk-get-collection-pattern\` - Get collection-specific usage patterns
4652
4795
 
4653
- ## Local CLI Stdio Surface (33)
4796
+ ## Local CLI Stdio Surface (35)
4654
4797
 
4655
4798
  For trusted local server-key workflows, start the stdio server:
4656
4799
 
@@ -4672,7 +4815,7 @@ Rate limits depend on your tenant plan:
4672
4815
 
4673
4816
  // src/resources/(collections)/schema.ts
4674
4817
  import { COLLECTIONS as COLLECTIONS3 } from "@01.software/sdk";
4675
- var metadata40 = {
4818
+ var metadata41 = {
4676
4819
  name: "collections-schema",
4677
4820
  title: "Collection Schema Info",
4678
4821
  description: "Available collections and their schema information"
@@ -4809,7 +4952,7 @@ Total available collections: ${COLLECTIONS3.length}`;
4809
4952
  }
4810
4953
 
4811
4954
  // src/resources/(docs)/getting-started.ts
4812
- var metadata41 = {
4955
+ var metadata42 = {
4813
4956
  name: "docs-getting-started",
4814
4957
  title: "Getting Started",
4815
4958
  description: "01.software SDK getting started guide"
@@ -4870,7 +5013,7 @@ const result = await client.collections.from('products').find({
4870
5013
  }
4871
5014
 
4872
5015
  // src/resources/(docs)/guides.ts
4873
- var metadata42 = {
5016
+ var metadata43 = {
4874
5017
  name: "docs-guides",
4875
5018
  title: "Guides",
4876
5019
  description: "01.software SDK usage guides"
@@ -5083,7 +5226,7 @@ For more implementation guidance, see the [SDK Guide](/developers/sdk).`;
5083
5226
  }
5084
5227
 
5085
5228
  // src/resources/(docs)/api.ts
5086
- var metadata43 = {
5229
+ var metadata44 = {
5087
5230
  name: "docs-api",
5088
5231
  title: "API Reference",
5089
5232
  description: "01.software SDK API reference documentation"
@@ -5366,7 +5509,7 @@ For more details, see the [API documentation](/developers/api).`;
5366
5509
  }
5367
5510
 
5368
5511
  // src/resources/(docs)/query-builder.ts
5369
- var metadata44 = {
5512
+ var metadata45 = {
5370
5513
  name: "docs-query-builder",
5371
5514
  title: "Query Builder",
5372
5515
  description: "01.software SDK Query Builder API reference (client.collections.from)"
@@ -5519,6 +5662,33 @@ if (page1.hasNextPage) {
5519
5662
  }
5520
5663
  \`\`\`
5521
5664
 
5665
+ ## Join fields (\`joins\`)
5666
+
5667
+ Payload \`type: 'join'\` reverse-relations (e.g. \`products.variants\`, \`products.options\`) are **not** controlled by \`depth\`. When \`joins\` is omitted, each join field defaults to **limit 10** docs.
5668
+
5669
+ Storefront PLPs that query \`products\` with only \`depth\` and group client-side can silently drop color swatches when a product has more than 10 option values. Prefer \`commerce.product.listingGroupsCatalog()\` + \`buildProductListingCard()\`, or spread \`PRODUCT_PLP_FIND_OPTIONS\` from \`@01.software/sdk\` into raw \`find()\` calls.
5670
+
5671
+ \`\`\`typescript
5672
+ import { PRODUCT_PLP_FIND_OPTIONS } from '@01.software/sdk'
5673
+
5674
+ await client.collections.from('products').find({
5675
+ ...PRODUCT_PLP_FIND_OPTIONS,
5676
+ where: { status: { equals: 'published' } },
5677
+ limit: 24,
5678
+ })
5679
+
5680
+ // Or configure joins explicitly (tune limits to your catalog size):
5681
+ await client.collections.from('products').find({
5682
+ joins: {
5683
+ variants: { limit: 50, sort: '_order' },
5684
+ options: { limit: 30, sort: '_order' },
5685
+ },
5686
+ })
5687
+
5688
+ // Disable all join-field population for lightweight lists:
5689
+ await client.collections.from('products').find({ joins: false })
5690
+ \`\`\`
5691
+
5522
5692
  ## Sorting
5523
5693
 
5524
5694
  \`\`\`typescript
@@ -5560,7 +5730,7 @@ console.log(result.hasNextPage) // true
5560
5730
  }
5561
5731
 
5562
5732
  // src/resources/(docs)/react-query.ts
5563
- var metadata45 = {
5733
+ var metadata46 = {
5564
5734
  name: "docs-react-query",
5565
5735
  title: "React Query Hooks",
5566
5736
  description: "01.software SDK React Query hooks reference (@01.software/sdk/query)"
@@ -5792,7 +5962,7 @@ export function ProductList() {
5792
5962
  }
5793
5963
 
5794
5964
  // src/resources/(docs)/server-api.ts
5795
- var metadata46 = {
5965
+ var metadata47 = {
5796
5966
  name: "docs-server-api",
5797
5967
  title: "Server-side API",
5798
5968
  description: "01.software SDK server-side API reference (client.commerce) for orders, fulfillments, returns, carts, and validation"
@@ -5868,25 +6038,34 @@ const order = docs[0] ?? null
5868
6038
  \`\`\`
5869
6039
 
5870
6040
  ### updateOrder()
5871
- Update order status.
6041
+ Confirm an order after delivery. Financial and shipment/display statuses are server-derived.
5872
6042
 
5873
6043
  \`\`\`typescript
5874
6044
  const order = await client.commerce.orders.update({
5875
6045
  orderNumber: 'ORD-20240101-0001',
5876
- status: 'paid', // pending | paid | failed | canceled | preparing | shipped | delivered | confirmed
6046
+ status: 'confirmed',
5877
6047
  })
5878
6048
  \`\`\`
5879
6049
 
5880
6050
  ## Fulfillment API
5881
6051
 
6052
+ ### prepareFulfillmentOrder()
6053
+ Start fulfillment-order work without carrier or tracking.
6054
+
6055
+ \`\`\`typescript
6056
+ const result = await client.commerce.orders.prepareFulfillmentOrder({
6057
+ orderNumber: 'ORD-20240101-0001',
6058
+ })
6059
+ \`\`\`
6060
+
5882
6061
  ### createFulfillment()
5883
- Create a shipment record for order items.
6062
+ Create a shipment record for order items. Carrier and trackingNumber are optional and can be added later.
5884
6063
 
5885
6064
  \`\`\`typescript
5886
6065
  const fulfillment = await client.commerce.orders.createFulfillment({
5887
6066
  orderNumber: 'ORD-20240101-0001',
5888
- carrier?: 'cj', // cj | hanjin | lotte | epost | logen | other
5889
- trackingNumber?: '123456789012',
6067
+ carrier: 'cj', // optional: cj | hanjin | lotte | epost | logen | other
6068
+ trackingNumber: '123456789012', // optional
5890
6069
  items: [
5891
6070
  { orderItem: 'order-item-id', quantity: 2 }
5892
6071
  ],
@@ -5894,14 +6073,13 @@ const fulfillment = await client.commerce.orders.createFulfillment({
5894
6073
  \`\`\`
5895
6074
 
5896
6075
  ### updateFulfillment()
5897
- Update fulfillment status and optionally carrier/tracking.
6076
+ Update fulfillment status or tracking information.
5898
6077
 
5899
6078
  \`\`\`typescript
5900
6079
  const fulfillment = await client.commerce.orders.updateFulfillment({
5901
6080
  fulfillmentId: 'fulfillment-id',
5902
- status: 'delivered', // packed | shipped | delivered | failed
5903
- carrier?: 'cj',
5904
- trackingNumber?: '123456789012',
6081
+ carrier: 'cj',
6082
+ trackingNumber: '123456789012',
5905
6083
  })
5906
6084
  \`\`\`
5907
6085
 
@@ -5916,9 +6094,12 @@ const ret = await client.commerce.orders.createReturn({
5916
6094
  reason?: 'defective', // change_of_mind | defective | wrong_delivery | damaged | other
5917
6095
  reasonDetail?: 'Screen cracked on arrival',
5918
6096
  returnItems: [
5919
- { orderItem: 'order-item-id', quantity: 1 }
6097
+ { orderItem: 'order-item-id', quantity: 1, restockingFee?: 500 }
5920
6098
  ],
5921
6099
  refundAmount: 29900,
6100
+ returnShippingFee?: 1500,
6101
+ initialShippingRefundAmount?: 3000,
6102
+ initialShippingRefundOverrideNote?: 'Policy override note',
5922
6103
  })
5923
6104
  \`\`\`
5924
6105
 
@@ -5945,6 +6126,8 @@ const result = await client.commerce.orders.returnWithRefund({
5945
6126
  ],
5946
6127
  refundAmount: 29900,
5947
6128
  returnShippingFee?: 1500,
6129
+ initialShippingRefundAmount?: 3000,
6130
+ initialShippingRefundOverrideNote?: 'Policy override note',
5948
6131
  pgPaymentId: 'provider-payment-id', // required
5949
6132
  paymentKey: 'provider-payment-key', // required for provider refund
5950
6133
  refundReceiptUrl?: 'https://...',
@@ -6076,7 +6259,7 @@ const result = await client.commerce.shipping.calculate({
6076
6259
  }
6077
6260
 
6078
6261
  // src/resources/(docs)/customer-auth.ts
6079
- var metadata47 = {
6262
+ var metadata48 = {
6080
6263
  name: "docs-customer-auth",
6081
6264
  title: "Customer Auth API",
6082
6265
  description: "01.software SDK Customer Auth API reference (client.customer)"
@@ -6254,7 +6437,7 @@ async function loadProfile() {
6254
6437
  }
6255
6438
 
6256
6439
  // src/resources/(docs)/browser-vs-server.ts
6257
- var metadata48 = {
6440
+ var metadata49 = {
6258
6441
  name: "docs-browser-vs-server",
6259
6442
  title: "Client vs ServerClient",
6260
6443
  description: "When to use Client (createClient) vs ServerClient (createServerClient) in the 01.software SDK"
@@ -6420,7 +6603,7 @@ export function ProductList() {
6420
6603
  }
6421
6604
 
6422
6605
  // src/resources/(docs)/file-upload.ts
6423
- var metadata49 = {
6606
+ var metadata50 = {
6424
6607
  name: "docs-file-upload",
6425
6608
  title: "File Upload",
6426
6609
  description: "01.software SDK file upload patterns using the images collection"
@@ -6571,7 +6754,7 @@ The platform stores files in Cloudflare R2 and serves via CDN (\`cdn.01.software
6571
6754
  }
6572
6755
 
6573
6756
  // src/resources/(docs)/webhook.ts
6574
- var metadata50 = {
6757
+ var metadata51 = {
6575
6758
  name: "docs-webhook",
6576
6759
  title: "Webhooks",
6577
6760
  description: "01.software SDK webhook verification and event handling"
@@ -6640,8 +6823,8 @@ export async function POST(request: Request) {
6640
6823
 
6641
6824
  \`\`\`typescript
6642
6825
  import {
6826
+ createCommerceNotificationWebhookHandler,
6643
6827
  handleWebhook,
6644
- isCommerceNotificationWebhookEvent,
6645
6828
  } from '@01.software/sdk/webhook'
6646
6829
 
6647
6830
  function getWebhookSecret(): string {
@@ -6650,26 +6833,25 @@ function getWebhookSecret(): string {
6650
6833
  return secret
6651
6834
  }
6652
6835
 
6653
- export async function POST(request: Request) {
6654
- return handleWebhook(request, async (event) => {
6655
- if (!isCommerceNotificationWebhookEvent(event)) return
6656
-
6657
- const idempotencyKey = \`\${event.notification.intentId}:\${event.notification.dedupeKey}\`
6658
- const processed = await processOnce(idempotencyKey, async () => {
6659
- if (event.notification.event === 'orderPaid') {
6660
- const orderId = event.notification.orderId ?? event.data.orderId
6661
- if (orderId) await updateOrderWorkflow(orderId)
6662
- }
6836
+ const commerceNotificationHandler = createCommerceNotificationWebhookHandler({
6837
+ async orderPaid({ event, idempotencyKey }) {
6838
+ await processOnce(idempotencyKey, async () => {
6839
+ const orderId = event.notification.orderId ?? event.data.orderId
6840
+ if (orderId) await updateOrderWorkflow(orderId)
6841
+ })
6842
+ },
6663
6843
 
6664
- if (event.notification.event === 'fulfillmentShipped') {
6665
- const fulfillmentId =
6666
- event.notification.fulfillmentId ?? event.data.fulfillmentId
6667
- if (fulfillmentId) await updateFulfillmentWorkflow(fulfillmentId)
6668
- }
6844
+ async fulfillmentShipped({ event, idempotencyKey }) {
6845
+ await processOnce(idempotencyKey, async () => {
6846
+ const fulfillmentId =
6847
+ event.notification.fulfillmentId ?? event.data.fulfillmentId
6848
+ if (fulfillmentId) await updateFulfillmentWorkflow(fulfillmentId)
6669
6849
  })
6850
+ },
6851
+ })
6670
6852
 
6671
- if (!processed) return
6672
- }, {
6853
+ export async function POST(request: Request) {
6854
+ return handleWebhook(request, commerceNotificationHandler, {
6673
6855
  secret: getWebhookSecret(),
6674
6856
  })
6675
6857
  }
@@ -6677,11 +6859,11 @@ export async function POST(request: Request) {
6677
6859
 
6678
6860
  Back \`processOnce()\` with durable storage such as a database unique key or queue idempotency store; do not use process-local memory for webhook idempotency.
6679
6861
 
6680
- ## Headless Commerce Email Workers
6862
+ ## Commerce Notification Workers
6681
6863
 
6682
- For tenant-owned transactional email, use \`commerce.notification\` as the trigger and build a signed worker with \`createCommerceEmailWebhookHandler()\`. 01.software owns event timing, delivery retries, signing, and idempotency signals; the tenant worker owns template rendering, provider credentials, extra order/customer fetches via \`createServerClient\`, and final delivery through a tenant provider such as Resend.
6864
+ For new tenant-owned commerce side effects, use \`commerce.notification\` as the trigger and build a signed worker with \`createCommerceNotificationWebhookHandler()\`. Existing email workers may keep \`createCommerceEmailWebhookHandler()\` as a compatibility alias, but the general helper name should be used in new guidance. 01.software owns event timing, delivery retries, signing, and idempotency signals; the tenant worker owns email, external PG calls, extra order/customer fetches via \`createServerClient\`, and final side effects.
6683
6865
 
6684
- Use \`getCommerceNotificationIdempotencyKey(event)\` or the \`idempotencyKey\` passed by \`createCommerceEmailWebhookHandler()\`, then guard provider sends with durable \`processOnce(idempotencyKey, ...)\` storage. The webhook payload is PII-light and is not enough for recipient data, so fetch recipient/template context with server SDK credentials. In the v1 headless path, do not store tenant ESP secrets in 01.software and do not ask 01.software to send directly through the tenant provider.
6866
+ Use \`getCommerceNotificationIdempotencyKey(event)\` or the \`idempotencyKey\` passed by \`createCommerceNotificationWebhookHandler()\`, then guard side effects with durable \`processOnce(idempotencyKey, ...)\` storage. \`notification.intentId + notification.dedupeKey\` is semantic idempotency. \`deliveryId\` is delivery-attempt observability only.
6685
6867
 
6686
6868
  ## Webhook Payload Structure
6687
6869
 
@@ -6734,9 +6916,11 @@ Canonical example (public operational identifiers only; no PII, payment/provider
6734
6916
  Use \`notification.intentId\` plus \`notification.dedupeKey\` for semantic idempotency. \`deliveryId\` is per delivery attempt / observability and may not be stable across semantic retries.
6735
6917
  Some normalized deliveries may include \`data.source\` or \`change\` metadata, but handlers should treat those fields as optional. Route from \`notification.orderId\`, \`notification.fulfillmentId\`, \`notification.returnId\`, or the matching typed \`data.*Id\` field.
6736
6918
 
6919
+ For CMS/Admin cancellation side effects, route \`commerce.notification/orderCanceled\` workers per the public webhooks guide (**orderCanceled external PG refund handoff**). Use \`orders/update\` only for cache refreshes and local projections. Detailed trusted refetch, PG refund classification, and refund reporting contracts live in that guide\u2014not in this generic webhook resource.
6920
+
6737
6921
  V1 source subscription semantics:
6738
6922
 
6739
- - \`orderPaid\` and \`orderDelivered\` are delivered through \`orders\`-scoped endpoints.
6923
+ - \`orderPaid\`, \`orderCanceled\`, and \`orderDelivered\` are delivered through \`orders\`-scoped endpoints.
6740
6924
  - \`fulfillmentShipped\` is delivered through \`fulfillments\`-scoped endpoints.
6741
6925
  - \`returnRequested\` and \`returnCompleted\` are delivered through \`returns\`-scoped endpoints.
6742
6926
  - Empty, unscoped, and all-collection endpoints do not receive v1 semantic commerce notifications.
@@ -6835,7 +7019,7 @@ Configure webhook URLs in the 01.software console under Tenant Settings > Webhoo
6835
7019
  }
6836
7020
 
6837
7021
  // src/resources/(docs)/product-detail.ts
6838
- var metadata51 = {
7022
+ var metadata52 = {
6839
7023
  name: "docs-product-detail",
6840
7024
  title: "Product Detail Helper",
6841
7025
  description: "01.software SDK commerce.product.detail helper guide"
@@ -6945,7 +7129,7 @@ function runtimeAnnotationsFor(meta) {
6945
7129
  openWorldHint: policy.annotationPolicy.openWorld
6946
7130
  };
6947
7131
  }
6948
- function registerTool(server, schema39, meta, handler20) {
7132
+ function registerTool(server, schema40, meta, handler20) {
6949
7133
  let registered = REGISTERED_TOOLS_BY_SERVER.get(server);
6950
7134
  if (!registered) {
6951
7135
  registered = /* @__PURE__ */ new Set();
@@ -6956,7 +7140,7 @@ function registerTool(server, schema39, meta, handler20) {
6956
7140
  meta.name,
6957
7141
  {
6958
7142
  description: meta.description,
6959
- inputSchema: schema39,
7143
+ inputSchema: schema40,
6960
7144
  annotations: runtimeAnnotationsFor(meta)
6961
7145
  },
6962
7146
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -7006,13 +7190,13 @@ function registerTool(server, schema39, meta, handler20) {
7006
7190
  }
7007
7191
  );
7008
7192
  }
7009
- function registerPrompt(server, schema39, meta, handler20) {
7193
+ function registerPrompt(server, schema40, meta, handler20) {
7010
7194
  server.registerPrompt(
7011
7195
  meta.name,
7012
7196
  {
7013
7197
  title: meta.title,
7014
7198
  description: meta.description,
7015
- argsSchema: schema39
7199
+ argsSchema: schema40
7016
7200
  },
7017
7201
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
7018
7202
  (params) => ({
@@ -7072,245 +7256,251 @@ function createServer(options = {}) {
7072
7256
  server,
7073
7257
  schema8,
7074
7258
  metadata8,
7075
- updateFulfillment
7259
+ prepareFulfillmentOrder
7076
7260
  );
7077
7261
  registerTool(
7078
7262
  server,
7079
7263
  schema9,
7080
7264
  metadata9,
7081
- updateTransaction
7265
+ updateFulfillment
7082
7266
  );
7083
7267
  registerTool(
7084
7268
  server,
7085
7269
  schema10,
7086
7270
  metadata10,
7087
- confirmPayment
7271
+ updateTransaction
7088
7272
  );
7089
- registerTool(server, schema11, metadata11, cancelOrder);
7090
7273
  registerTool(
7091
7274
  server,
7092
- schema12,
7093
- metadata12,
7094
- createReturn
7275
+ schema11,
7276
+ metadata11,
7277
+ confirmPayment
7095
7278
  );
7279
+ registerTool(server, schema12, metadata12, cancelOrder);
7096
7280
  registerTool(
7097
7281
  server,
7098
7282
  schema13,
7099
7283
  metadata13,
7100
- updateReturn
7284
+ createReturn
7101
7285
  );
7102
7286
  registerTool(
7103
7287
  server,
7104
7288
  schema14,
7105
7289
  metadata14,
7106
- returnWithRefund
7290
+ updateReturn
7107
7291
  );
7108
- registerTool(server, schema15, metadata15, addCartItem);
7109
7292
  registerTool(
7110
7293
  server,
7111
- schema16,
7112
- metadata16,
7113
- updateCartItem
7294
+ schema15,
7295
+ metadata15,
7296
+ returnWithRefund
7114
7297
  );
7298
+ registerTool(server, schema16, metadata16, addCartItem);
7115
7299
  registerTool(
7116
7300
  server,
7117
7301
  schema17,
7118
7302
  metadata17,
7119
- removeCartItem
7303
+ updateCartItem
7120
7304
  );
7121
7305
  registerTool(
7122
7306
  server,
7123
7307
  schema18,
7124
7308
  metadata18,
7125
- applyDiscount
7309
+ removeCartItem
7126
7310
  );
7127
7311
  registerTool(
7128
7312
  server,
7129
7313
  schema19,
7130
7314
  metadata19,
7131
- removeDiscount
7315
+ applyDiscount
7132
7316
  );
7133
- registerTool(server, schema20, metadata20, clearCart);
7134
7317
  registerTool(
7135
7318
  server,
7136
- schema21,
7137
- metadata21,
7138
- validateDiscount
7319
+ schema20,
7320
+ metadata20,
7321
+ removeDiscount
7139
7322
  );
7323
+ registerTool(server, schema21, metadata21, clearCart);
7140
7324
  registerTool(
7141
7325
  server,
7142
7326
  schema22,
7143
7327
  metadata22,
7144
- calculateShipping
7328
+ validateDiscount
7145
7329
  );
7146
- registerTool(server, schema23, metadata23, stockCheck);
7147
7330
  registerTool(
7148
7331
  server,
7149
- schema24,
7150
- metadata24,
7151
- productDetail
7332
+ schema23,
7333
+ metadata23,
7334
+ calculateShipping
7152
7335
  );
7336
+ registerTool(server, schema24, metadata24, stockCheck);
7153
7337
  registerTool(
7154
7338
  server,
7155
7339
  schema25,
7156
7340
  metadata25,
7341
+ productDetail
7342
+ );
7343
+ registerTool(
7344
+ server,
7345
+ schema26,
7346
+ metadata26,
7157
7347
  productUpsert
7158
7348
  );
7159
7349
  }
7160
- registerTool(
7161
- server,
7162
- schema26,
7163
- metadata26,
7164
- getCollectionSchemaTool
7165
- );
7166
7350
  registerTool(
7167
7351
  server,
7168
7352
  schema27,
7169
7353
  metadata27,
7170
- handler
7354
+ getCollectionSchemaTool
7171
7355
  );
7172
7356
  registerTool(
7173
7357
  server,
7174
7358
  schema28,
7175
7359
  metadata28,
7176
- handler2
7360
+ handler
7177
7361
  );
7178
7362
  registerTool(
7179
7363
  server,
7180
7364
  schema29,
7181
7365
  metadata29,
7182
- listConfigurableFields
7366
+ handler2
7183
7367
  );
7184
7368
  registerTool(
7185
7369
  server,
7186
7370
  schema30,
7187
7371
  metadata30,
7188
- updateFieldConfig
7372
+ listConfigurableFields
7189
7373
  );
7190
7374
  registerTool(
7191
7375
  server,
7192
7376
  schema31,
7193
7377
  metadata31,
7194
- handler3
7378
+ updateFieldConfig
7195
7379
  );
7196
7380
  registerTool(
7197
7381
  server,
7198
7382
  schema32,
7199
7383
  metadata32,
7200
- handler4
7384
+ handler3
7201
7385
  );
7202
7386
  registerTool(
7203
7387
  server,
7204
7388
  schema33,
7205
7389
  metadata33,
7206
- handler5
7390
+ handler4
7207
7391
  );
7208
7392
  registerTool(
7209
7393
  server,
7210
7394
  schema34,
7211
7395
  metadata34,
7212
- handler6
7396
+ handler5
7213
7397
  );
7214
- registerPrompt(
7398
+ registerTool(
7215
7399
  server,
7216
7400
  schema35,
7217
7401
  metadata35,
7218
- sdkUsageGuide
7402
+ handler6
7219
7403
  );
7220
7404
  registerPrompt(
7221
7405
  server,
7222
7406
  schema36,
7223
7407
  metadata36,
7224
- collectionQueryHelp
7408
+ sdkUsageGuide
7225
7409
  );
7226
7410
  registerPrompt(
7227
7411
  server,
7228
7412
  schema37,
7229
7413
  metadata37,
7230
- orderFlowGuide
7414
+ collectionQueryHelp
7231
7415
  );
7232
7416
  registerPrompt(
7233
7417
  server,
7234
7418
  schema38,
7235
7419
  metadata38,
7420
+ orderFlowGuide
7421
+ );
7422
+ registerPrompt(
7423
+ server,
7424
+ schema39,
7425
+ metadata39,
7236
7426
  featureSetupGuide
7237
7427
  );
7238
7428
  registerStaticResource(
7239
7429
  server,
7240
7430
  mcpResourceUri("app-config"),
7241
- metadata39,
7431
+ metadata40,
7242
7432
  handler7
7243
7433
  );
7244
7434
  registerStaticResource(
7245
7435
  server,
7246
7436
  mcpResourceUri("collections-schema"),
7247
- metadata40,
7437
+ metadata41,
7248
7438
  handler8
7249
7439
  );
7250
7440
  registerStaticResource(
7251
7441
  server,
7252
7442
  mcpResourceUri("docs-getting-started"),
7253
- metadata41,
7443
+ metadata42,
7254
7444
  handler9
7255
7445
  );
7256
7446
  registerStaticResource(
7257
7447
  server,
7258
7448
  mcpResourceUri("docs-guides"),
7259
- metadata42,
7449
+ metadata43,
7260
7450
  handler10
7261
7451
  );
7262
7452
  registerStaticResource(
7263
7453
  server,
7264
7454
  mcpResourceUri("docs-api"),
7265
- metadata43,
7455
+ metadata44,
7266
7456
  handler11
7267
7457
  );
7268
7458
  registerStaticResource(
7269
7459
  server,
7270
7460
  mcpResourceUri("docs-query-builder"),
7271
- metadata44,
7461
+ metadata45,
7272
7462
  handler12
7273
7463
  );
7274
7464
  registerStaticResource(
7275
7465
  server,
7276
7466
  mcpResourceUri("docs-react-query"),
7277
- metadata45,
7467
+ metadata46,
7278
7468
  handler13
7279
7469
  );
7280
7470
  registerStaticResource(
7281
7471
  server,
7282
7472
  mcpResourceUri("docs-server-api"),
7283
- metadata46,
7473
+ metadata47,
7284
7474
  handler14
7285
7475
  );
7286
7476
  registerStaticResource(
7287
7477
  server,
7288
7478
  mcpResourceUri("docs-customer-auth"),
7289
- metadata47,
7479
+ metadata48,
7290
7480
  handler15
7291
7481
  );
7292
7482
  registerStaticResource(
7293
7483
  server,
7294
7484
  mcpResourceUri("docs-browser-vs-server"),
7295
- metadata48,
7485
+ metadata49,
7296
7486
  handler16
7297
7487
  );
7298
7488
  registerStaticResource(
7299
7489
  server,
7300
7490
  mcpResourceUri("docs-file-upload"),
7301
- metadata49,
7491
+ metadata50,
7302
7492
  handler17
7303
7493
  );
7304
7494
  registerStaticResource(
7305
7495
  server,
7306
7496
  mcpResourceUri("docs-webhook"),
7307
- metadata50,
7497
+ metadata51,
7308
7498
  handler18
7309
7499
  );
7310
7500
  registerStaticResource(
7311
7501
  server,
7312
7502
  mcpResourceUri("docs-product-detail"),
7313
- metadata51,
7503
+ metadata52,
7314
7504
  handler19
7315
7505
  );
7316
7506
  return server;
@@ -7331,4 +7521,4 @@ export {
7331
7521
  flushMcpTelemetrySummary,
7332
7522
  createServer
7333
7523
  };
7334
- //# sourceMappingURL=chunk-CBN6MUZE.js.map
7524
+ //# sourceMappingURL=chunk-Y5GYUAK3.js.map