@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.
@@ -26,49 +26,79 @@ var MCP_RESOURCE_INVENTORY = [
26
26
  {
27
27
  uri: "docs://sdk/getting-started",
28
28
  label: "getting-started",
29
- registeredName: "docs-getting-started"
29
+ registeredName: "docs-getting-started",
30
+ canonicalDocsSlug: ["developers", "sdk"],
31
+ canonicalDocsKeywords: ["Install the package", "@01.software/sdk"]
32
+ },
33
+ {
34
+ uri: "docs://sdk/guides",
35
+ label: "guides",
36
+ registeredName: "docs-guides",
37
+ canonicalDocsSlug: ["developers", "sdk"],
38
+ canonicalDocsKeywords: ["Setup Flow", "Next Actions"]
39
+ },
40
+ {
41
+ uri: "docs://sdk/api",
42
+ label: "api",
43
+ registeredName: "docs-api",
44
+ canonicalDocsSlug: ["developers", "api"],
45
+ canonicalDocsKeywords: ["/api/openapi", "OpenAPI"]
30
46
  },
31
- { uri: "docs://sdk/guides", label: "guides", registeredName: "docs-guides" },
32
- { uri: "docs://sdk/api", label: "api", registeredName: "docs-api" },
33
47
  {
34
48
  uri: "docs://sdk/query-builder",
35
49
  label: "query-builder",
36
- registeredName: "docs-query-builder"
50
+ registeredName: "docs-query-builder",
51
+ canonicalDocsSlug: ["developers", "sdk"],
52
+ canonicalDocsKeywords: ["query helpers", "@01.software/sdk/query"]
37
53
  },
38
54
  {
39
55
  uri: "docs://sdk/react-query",
40
56
  label: "react-query",
41
- registeredName: "docs-react-query"
57
+ registeredName: "docs-react-query",
58
+ canonicalDocsSlug: ["developers", "sdk"],
59
+ canonicalDocsKeywords: ["React", "@tanstack/react-query"]
42
60
  },
43
61
  {
44
62
  uri: "docs://sdk/server-api",
45
63
  label: "server-api",
46
- registeredName: "docs-server-api"
64
+ registeredName: "docs-server-api",
65
+ canonicalDocsSlug: ["developers", "api"],
66
+ canonicalDocsKeywords: ["Server writes", "trusted server credentials"]
47
67
  },
48
68
  {
49
69
  uri: "docs://sdk/customer-auth",
50
70
  label: "customer-auth",
51
- registeredName: "docs-customer-auth"
71
+ registeredName: "docs-customer-auth",
72
+ canonicalDocsSlug: ["developers", "authentication"],
73
+ canonicalDocsKeywords: ["Publishable Key", "Secret Key"]
52
74
  },
53
75
  {
54
76
  uri: "docs://sdk/browser-vs-server",
55
77
  label: "browser-vs-server",
56
- registeredName: "docs-browser-vs-server"
78
+ registeredName: "docs-browser-vs-server",
79
+ canonicalDocsSlug: ["developers", "sdk"],
80
+ canonicalDocsKeywords: ["browser client", "server client"]
57
81
  },
58
82
  {
59
83
  uri: "docs://sdk/file-upload",
60
84
  label: "file-upload",
61
- registeredName: "docs-file-upload"
85
+ registeredName: "docs-file-upload",
86
+ canonicalDocsSlug: ["developers", "api"],
87
+ canonicalDocsKeywords: ["direct HTTP", "machine-readable contract"]
62
88
  },
63
89
  {
64
90
  uri: "docs://sdk/webhook",
65
91
  label: "webhook",
66
- registeredName: "docs-webhook"
92
+ registeredName: "docs-webhook",
93
+ canonicalDocsSlug: ["developers", "webhooks"],
94
+ canonicalDocsKeywords: ["Webhook", "commerce.notification"]
67
95
  },
68
96
  {
69
97
  uri: "docs://sdk/product-detail",
70
98
  label: "product-detail",
71
- registeredName: "docs-product-detail"
99
+ registeredName: "docs-product-detail",
100
+ canonicalDocsSlug: ["recipes", "product-detail"],
101
+ canonicalDocsKeywords: ["Product detail page", "commerce.product.detail"]
72
102
  }
73
103
  ];
74
104
  var MCP_RESOURCE_LABELS = MCP_RESOURCE_INVENTORY.map(
@@ -460,6 +490,29 @@ var transactionStatusSchema = z3.enum([
460
490
  "failed",
461
491
  "canceled"
462
492
  ]);
493
+ var financialStatusSchema = z3.enum([
494
+ "pending",
495
+ "paid",
496
+ "failed",
497
+ "canceled",
498
+ "partially_refunded",
499
+ "refunded"
500
+ ]);
501
+ var confirmationStatusSchema = z3.enum(["unconfirmed", "confirmed"]);
502
+ var fulfillmentOrderStatusSchema = z3.enum([
503
+ "open",
504
+ "in_progress",
505
+ "on_hold",
506
+ "canceled",
507
+ "closed"
508
+ ]);
509
+ var shipmentStatusSchema = z3.enum([
510
+ "pending",
511
+ "shipped",
512
+ "delivered",
513
+ "canceled",
514
+ "failed"
515
+ ]);
463
516
  var orderStatusSchema = z3.enum([
464
517
  "pending",
465
518
  "paid",
@@ -474,7 +527,7 @@ var orderStatusSchema = z3.enum([
474
527
  "return_processing",
475
528
  "returned"
476
529
  ]);
477
- var entityIdSchema = z3.union([z3.string(), z3.number()]).transform(String);
530
+ var entityIdSchema = z3.union([z3.string().min(1), z3.number()]).transform(String);
478
531
  var createOrderItemSchema = z3.object({
479
532
  product: entityIdSchema,
480
533
  variant: entityIdSchema,
@@ -482,7 +535,7 @@ var createOrderItemSchema = z3.object({
482
535
  quantity: z3.number().int().positive("quantity must be a positive integer"),
483
536
  unitPrice: z3.number().optional(),
484
537
  totalPrice: z3.number().optional()
485
- });
538
+ }).strict();
486
539
  var createOrderSchema = z3.object({
487
540
  pgPaymentId: z3.string().min(1).optional(),
488
541
  orderNumber: z3.string().min(1, "orderNumber is required"),
@@ -491,7 +544,7 @@ var createOrderSchema = z3.object({
491
544
  name: z3.string().optional(),
492
545
  email: z3.string().email("Invalid email format"),
493
546
  phone: z3.string().optional()
494
- }),
547
+ }).strict(),
495
548
  shippingAddress: z3.object({
496
549
  postalCode: z3.string().optional(),
497
550
  address: z3.string().optional(),
@@ -499,12 +552,12 @@ var createOrderSchema = z3.object({
499
552
  deliveryMessage: z3.string().optional(),
500
553
  recipientName: z3.string().optional(),
501
554
  phone: z3.string().optional()
502
- }),
555
+ }).strict(),
503
556
  orderItems: z3.array(createOrderItemSchema).min(1, "At least one order item is required").max(100, "Maximum 100 items per order"),
504
557
  totalAmount: z3.number().nonnegative("totalAmount must be non-negative"),
505
558
  shippingAmount: z3.number().min(0).optional(),
506
559
  discountCode: z3.string().optional()
507
- });
560
+ }).strict();
508
561
  var CreateOrderSchema = createOrderSchema;
509
562
  var updateTransactionSchema = z3.object({
510
563
  pgPaymentId: z3.string().min(1, "pgPaymentId is required").describe("PG payment ID (required)"),
@@ -553,7 +606,7 @@ var returnReasonSchema = z3.enum([
553
606
  ]);
554
607
  var restockActionSchema = z3.enum(["return_to_stock", "discard"]);
555
608
  var returnWithRefundItemSchema = z3.object({
556
- orderItem: z3.union([z3.string(), z3.number()]).transform(String),
609
+ orderItem: z3.union([z3.string().min(1), z3.number()]).transform(String),
557
610
  quantity: z3.number().int().positive("quantity must be a positive integer"),
558
611
  restockAction: restockActionSchema.default("return_to_stock"),
559
612
  restockingFee: z3.number().min(0, "restockingFee must be non-negative").optional().describe("Restocking fee charged for this line (ADR 0005 \xA7Gap 1)")
@@ -567,10 +620,29 @@ var returnWithRefundSchema = z3.object({
567
620
  returnShippingFee: z3.number().min(0, "returnShippingFee must be non-negative").optional().describe(
568
621
  "Return shipping fee charged to the customer (ADR 0005 \xA7Gap 1)"
569
622
  ),
623
+ initialShippingRefundAmount: z3.number().min(0, "initialShippingRefundAmount must be non-negative").optional().describe("Initial order shipping amount refunded to the customer"),
624
+ initialShippingRefundOverrideNote: z3.string().min(1).optional().describe(
625
+ "Operator audit note required when overriding policy suggestion"
626
+ ),
570
627
  pgPaymentId: z3.string().min(1, "pgPaymentId is required").describe("PG payment ID for refund (required)"),
571
628
  paymentKey: z3.string().min(1).optional().describe("Provider payment key for verified refund"),
572
629
  refundReceiptUrl: z3.string().optional().describe("Refund receipt URL (optional)")
573
630
  }).strict();
631
+ var createReturnSchema = z3.object({
632
+ orderNumber: z3.string().min(1, "orderNumber is required").describe("Order number (required)"),
633
+ reason: returnReasonSchema.optional().describe("Return reason (optional)"),
634
+ reasonDetail: z3.string().optional().describe("Detailed reason text (optional)"),
635
+ 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)"),
636
+ refundAmount: z3.number().min(0, "refundAmount must be non-negative").describe(
637
+ "Line refund amount before initial shipping refund (required, min 0)"
638
+ ),
639
+ returnShippingFee: z3.number().min(0, "returnShippingFee must be non-negative").optional().describe("Return shipping fee charged to the customer"),
640
+ initialShippingRefundAmount: z3.number().min(0, "initialShippingRefundAmount must be non-negative").optional().describe("Initial order shipping amount refunded to the customer"),
641
+ initialShippingRefundOverrideNote: z3.string().min(1).optional().describe(
642
+ "Operator audit note required when overriding policy suggestion"
643
+ )
644
+ }).strict();
645
+ var CreateReturnSchema = createReturnSchema;
574
646
  var ReturnWithRefundSchema = returnWithRefundSchema;
575
647
  var cancelReasonCodeSchema = z3.enum([
576
648
  "customer",
@@ -844,6 +916,11 @@ var MCP_TOOL_CONTRACT = {
844
916
  oauthScope: "mcp:write",
845
917
  readOnly: false
846
918
  },
919
+ "prepare-fulfillment-order": {
920
+ consoleRole: "tenant-admin",
921
+ oauthScope: "mcp:write",
922
+ readOnly: false
923
+ },
847
924
  "update-fulfillment": {
848
925
  consoleRole: "tenant-admin",
849
926
  oauthScope: "mcp:write",
@@ -1116,6 +1193,13 @@ var TOOL_POLICY_MANIFEST = {
1116
1193
  consoleSurface: "POST /api/orders/create-fulfillment",
1117
1194
  annotationPolicy: NON_DESTRUCTIVE_MUTATION_ANNOTATION
1118
1195
  },
1196
+ "prepare-fulfillment-order": {
1197
+ category: "mutation-fulfillment",
1198
+ oauthScope: MCP_SCOPES.write,
1199
+ consoleRole: "tenant-admin",
1200
+ consoleSurface: "POST /api/fulfillment-orders/prepare-fulfillment-order",
1201
+ annotationPolicy: NON_DESTRUCTIVE_MUTATION_ANNOTATION
1202
+ },
1119
1203
  "update-fulfillment": {
1120
1204
  category: "mutation-fulfillment",
1121
1205
  oauthScope: MCP_SCOPES.write,
@@ -1742,22 +1826,13 @@ async function createOrder(params) {
1742
1826
  import { z as z7 } from "zod";
1743
1827
  var schema5 = {
1744
1828
  orderNumber: z7.string().min(1).describe("Order number (required)"),
1745
- status: z7.enum([
1746
- "pending",
1747
- "paid",
1748
- "failed",
1749
- "canceled",
1750
- "preparing",
1751
- "shipped",
1752
- "delivered",
1753
- "confirmed"
1754
- ]).describe(
1755
- "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."
1829
+ status: z7.enum(["confirmed"]).describe(
1830
+ "Order confirmation status mutation. Shipping/display statuses are derived from fulfillment orders and shipments; financial/refund states are set by payment/refund flows."
1756
1831
  )
1757
1832
  };
1758
1833
  var metadata5 = {
1759
1834
  name: "update-order",
1760
- 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.",
1835
+ 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.",
1761
1836
  annotations: {
1762
1837
  title: "Update order status",
1763
1838
  readOnlyHint: false,
@@ -1815,20 +1890,19 @@ async function checkout(params) {
1815
1890
  import { z as z9 } from "zod";
1816
1891
  var schema7 = {
1817
1892
  orderNumber: z9.string().min(1).describe("Order number (required)"),
1818
- carrier: z9.string().optional().describe("Shipping carrier name (optional)"),
1819
- trackingNumber: z9.string().optional().describe(
1820
- 'Tracking number (optional). Setting carrier + tracking triggers "shipped" status'
1821
- ),
1893
+ fulfillmentOrderId: z9.string().optional().describe("Fulfillment order ID to ship (optional)"),
1894
+ carrier: z9.string().min(1).optional().describe("Shipping carrier name"),
1895
+ trackingNumber: z9.string().min(1).optional().describe("Tracking number"),
1822
1896
  items: z9.array(
1823
1897
  z9.object({
1824
1898
  orderItem: z9.string().min(1).describe("Order item ID"),
1825
1899
  quantity: z9.number().int().positive().describe("Quantity to fulfill")
1826
1900
  })
1827
- ).describe("Array of items to fulfill (required)")
1901
+ ).optional().describe("Array of items to fulfill (optional)")
1828
1902
  };
1829
1903
  var metadata7 = {
1830
1904
  name: "create-fulfillment",
1831
- description: "Create a shipment/fulfillment for order items. Auto-updates order status (paid \u2192 preparing \u2192 shipped).",
1905
+ description: "Create a shipment for fulfillment order items. Tracking information can be supplied now or updated later with update-fulfillment.",
1832
1906
  annotations: {
1833
1907
  title: "Create fulfillment",
1834
1908
  readOnlyHint: false,
@@ -1838,6 +1912,7 @@ var metadata7 = {
1838
1912
  };
1839
1913
  async function createFulfillment({
1840
1914
  orderNumber,
1915
+ fulfillmentOrderId,
1841
1916
  carrier,
1842
1917
  trackingNumber,
1843
1918
  items
@@ -1846,8 +1921,9 @@ async function createFulfillment({
1846
1921
  const client = getClient();
1847
1922
  const result = await client.commerce.orders.createFulfillment({
1848
1923
  orderNumber,
1849
- carrier,
1850
- trackingNumber,
1924
+ fulfillmentOrderId,
1925
+ ...carrier ? { carrier } : {},
1926
+ ...trackingNumber ? { trackingNumber } : {},
1851
1927
  items
1852
1928
  });
1853
1929
  return toolSuccess({ data: result });
@@ -1856,23 +1932,48 @@ async function createFulfillment({
1856
1932
  }
1857
1933
  }
1858
1934
 
1859
- // src/tools/update-fulfillment.ts
1935
+ // src/tools/prepare-fulfillment-order.ts
1860
1936
  import { z as z10 } from "zod";
1861
1937
  var schema8 = {
1862
- fulfillmentId: z10.string().min(1).describe("Fulfillment ID (required)"),
1863
- status: z10.enum(["packed", "shipped", "delivered", "failed"]).describe(
1864
- "New fulfillment status (required). FSM: pending\u2192packed/shipped/failed, packed\u2192shipped/failed, shipped\u2192delivered/failed"
1865
- ),
1866
- carrier: z10.string().optional().describe(
1867
- "Shipping carrier (optional, changeable only in pending/packed status)"
1868
- ),
1869
- trackingNumber: z10.string().optional().describe(
1870
- "Tracking number (optional, changeable only in pending/packed status)"
1871
- )
1938
+ orderNumber: z10.string().min(1).describe("Order number (required)")
1872
1939
  };
1873
1940
  var metadata8 = {
1941
+ name: "prepare-fulfillment-order",
1942
+ description: "Prepare starts fulfillment work and does not require carrier/tracking.",
1943
+ annotations: {
1944
+ title: "Prepare fulfillment order",
1945
+ readOnlyHint: false,
1946
+ destructiveHint: false,
1947
+ idempotentHint: false
1948
+ }
1949
+ };
1950
+ async function prepareFulfillmentOrder({
1951
+ orderNumber
1952
+ }) {
1953
+ try {
1954
+ const client = getClient();
1955
+ const result = await client.commerce.orders.prepareFulfillmentOrder({
1956
+ orderNumber
1957
+ });
1958
+ return toolSuccess({ data: result });
1959
+ } catch (error) {
1960
+ return toolError(error);
1961
+ }
1962
+ }
1963
+
1964
+ // src/tools/update-fulfillment.ts
1965
+ import { z as z11 } from "zod";
1966
+ var schema9 = {
1967
+ fulfillmentId: z11.string().min(1).describe("Fulfillment ID (required)"),
1968
+ status: z11.enum(["shipped", "delivered", "failed"]).optional().describe(
1969
+ "New shipment status. Shipment lifecycle: shipped\u2192delivered/failed"
1970
+ ),
1971
+ carrier: z11.string().optional().describe("Shipping carrier (optional; can be added or corrected later)"),
1972
+ trackingNumber: z11.string().optional().describe("Tracking number (optional; can be added or corrected later)")
1973
+ };
1974
+ var metadata9 = {
1874
1975
  name: "update-fulfillment",
1875
- description: "Update fulfillment status, carrier, and tracking number. Auto-updates order status when all fulfillments are delivered.",
1976
+ description: "Update shipment status, carrier, or tracking number. Tracking can be added after shipment creation.",
1876
1977
  annotations: {
1877
1978
  title: "Update fulfillment",
1878
1979
  readOnlyHint: false,
@@ -1888,11 +1989,16 @@ async function updateFulfillment({
1888
1989
  }) {
1889
1990
  try {
1890
1991
  const client = getClient();
1992
+ if (status === void 0 && carrier === void 0 && trackingNumber === void 0) {
1993
+ return toolError(
1994
+ new Error("status, carrier, or trackingNumber is required")
1995
+ );
1996
+ }
1891
1997
  const result = await client.commerce.orders.updateFulfillment({
1892
1998
  fulfillmentId,
1893
- status,
1894
- carrier,
1895
- trackingNumber
1999
+ ...status ? { status } : {},
2000
+ ...carrier ? { carrier } : {},
2001
+ ...trackingNumber ? { trackingNumber } : {}
1896
2002
  });
1897
2003
  return toolSuccess({ data: result });
1898
2004
  } catch (error) {
@@ -1901,8 +2007,8 @@ async function updateFulfillment({
1901
2007
  }
1902
2008
 
1903
2009
  // src/tools/update-transaction.ts
1904
- var schema9 = UpdateTransactionSchema.shape;
1905
- var metadata9 = {
2010
+ var schema10 = UpdateTransactionSchema.shape;
2011
+ var metadata10 = {
1906
2012
  name: "update-transaction",
1907
2013
  description: "Update transaction status, payment method, and receipt URL.",
1908
2014
  annotations: {
@@ -1938,8 +2044,8 @@ async function updateTransaction({
1938
2044
  }
1939
2045
 
1940
2046
  // src/tools/confirm-payment.ts
1941
- var schema10 = ConfirmPaymentSchema.shape;
1942
- var metadata10 = {
2047
+ var schema11 = ConfirmPaymentSchema.shape;
2048
+ var metadata11 = {
1943
2049
  name: "confirm-payment",
1944
2050
  description: "Confirm a provider-verified ecommerce payment through the generic payment confirmation flow.",
1945
2051
  annotations: {
@@ -1966,10 +2072,10 @@ var CancelOrderToolSchema = CancelOrderSchema.extend({
1966
2072
  "Optional X-Idempotency-Key forwarded to the Console cancel endpoint"
1967
2073
  )
1968
2074
  }).strict();
1969
- var schema11 = CancelOrderToolSchema.shape;
1970
- var metadata11 = {
2075
+ var schema12 = CancelOrderToolSchema.shape;
2076
+ var metadata12 = {
1971
2077
  name: "cancel-order",
1972
- 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.",
2078
+ 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.",
1973
2079
  annotations: {
1974
2080
  title: "Cancel order",
1975
2081
  readOnlyHint: false,
@@ -1994,20 +2100,8 @@ async function cancelOrder(params) {
1994
2100
  }
1995
2101
 
1996
2102
  // src/tools/create-return.ts
1997
- import { z as z11 } from "zod";
1998
- var schema12 = {
1999
- orderNumber: z11.string().min(1).describe("Order number (required)"),
2000
- reason: z11.enum(["change_of_mind", "defective", "wrong_delivery", "damaged", "other"]).optional().describe("Return reason (optional)"),
2001
- reasonDetail: z11.string().optional().describe("Detailed reason text (optional)"),
2002
- returnItems: z11.array(
2003
- z11.object({
2004
- orderItem: z11.string().min(1).describe("Order item ID"),
2005
- quantity: z11.number().int().positive().describe("Quantity to return")
2006
- })
2007
- ).describe("Array of products to return (required)"),
2008
- refundAmount: z11.number().nonnegative().describe("Refund amount (required, min 0)")
2009
- };
2010
- var metadata12 = {
2103
+ var schema13 = CreateReturnSchema.shape;
2104
+ var metadata13 = {
2011
2105
  name: "create-return",
2012
2106
  description: "Create a return request for an order. Only works for delivered/confirmed orders. Updates order status to return_requested.",
2013
2107
  annotations: {
@@ -2022,7 +2116,10 @@ async function createReturn({
2022
2116
  reason,
2023
2117
  reasonDetail,
2024
2118
  returnItems,
2025
- refundAmount
2119
+ refundAmount,
2120
+ returnShippingFee,
2121
+ initialShippingRefundAmount,
2122
+ initialShippingRefundOverrideNote
2026
2123
  }) {
2027
2124
  try {
2028
2125
  const client = getClient();
@@ -2031,7 +2128,10 @@ async function createReturn({
2031
2128
  reason,
2032
2129
  reasonDetail,
2033
2130
  returnItems,
2034
- refundAmount
2131
+ refundAmount,
2132
+ returnShippingFee,
2133
+ initialShippingRefundAmount,
2134
+ initialShippingRefundOverrideNote
2035
2135
  });
2036
2136
  return toolSuccess({ data: result });
2037
2137
  } catch (error) {
@@ -2041,13 +2141,13 @@ async function createReturn({
2041
2141
 
2042
2142
  // src/tools/update-return.ts
2043
2143
  import { z as z12 } from "zod";
2044
- var schema13 = {
2144
+ var schema14 = {
2045
2145
  returnId: z12.string().min(1).describe("Return ID (required)"),
2046
2146
  status: z12.enum(["processing", "approved", "rejected", "completed"]).describe(
2047
2147
  "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."
2048
2148
  )
2049
2149
  };
2050
- var metadata13 = {
2150
+ var metadata14 = {
2051
2151
  name: "update-return",
2052
2152
  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.",
2053
2153
  annotations: {
@@ -2074,8 +2174,8 @@ async function updateReturn({
2074
2174
  }
2075
2175
 
2076
2176
  // src/tools/return-with-refund.ts
2077
- var schema14 = ReturnWithRefundSchema.shape;
2078
- var metadata14 = {
2177
+ var schema15 = ReturnWithRefundSchema.shape;
2178
+ var metadata15 = {
2079
2179
  name: "return-with-refund",
2080
2180
  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.",
2081
2181
  annotations: {
@@ -2092,6 +2192,8 @@ async function returnWithRefund({
2092
2192
  returnItems,
2093
2193
  refundAmount,
2094
2194
  returnShippingFee,
2195
+ initialShippingRefundAmount,
2196
+ initialShippingRefundOverrideNote,
2095
2197
  pgPaymentId,
2096
2198
  paymentKey,
2097
2199
  refundReceiptUrl
@@ -2105,6 +2207,8 @@ async function returnWithRefund({
2105
2207
  returnItems,
2106
2208
  refundAmount,
2107
2209
  returnShippingFee,
2210
+ initialShippingRefundAmount,
2211
+ initialShippingRefundOverrideNote,
2108
2212
  pgPaymentId,
2109
2213
  paymentKey,
2110
2214
  refundReceiptUrl
@@ -2118,14 +2222,14 @@ async function returnWithRefund({
2118
2222
 
2119
2223
  // src/tools/add-cart-item.ts
2120
2224
  import { z as z13 } from "zod";
2121
- var schema15 = {
2225
+ var schema16 = {
2122
2226
  cartId: z13.string().min(1).describe("Cart ID (required)"),
2123
2227
  product: z13.string().min(1).describe("Product ID (required)"),
2124
2228
  variant: z13.string().min(1).describe("Product variant ID (required)"),
2125
2229
  option: z13.string().min(1).describe("Product option ID (required)"),
2126
2230
  quantity: z13.number().int().positive().describe("Quantity to add (required, positive integer)")
2127
2231
  };
2128
- var metadata15 = {
2232
+ var metadata16 = {
2129
2233
  name: "add-cart-item",
2130
2234
  description: "Add a product to cart. Validates stock, merges quantity if item already exists, recalculates totals.",
2131
2235
  annotations: {
@@ -2159,11 +2263,11 @@ async function addCartItem({
2159
2263
 
2160
2264
  // src/tools/update-cart-item.ts
2161
2265
  import { z as z14 } from "zod";
2162
- var schema16 = {
2266
+ var schema17 = {
2163
2267
  cartItemId: z14.string().min(1).describe("Cart item ID (required)"),
2164
2268
  quantity: z14.number().int().positive().describe("New quantity (required, positive integer)")
2165
2269
  };
2166
- var metadata16 = {
2270
+ var metadata17 = {
2167
2271
  name: "update-cart-item",
2168
2272
  description: "Update cart item quantity. Validates stock availability, recalculates cart totals.",
2169
2273
  annotations: {
@@ -2188,10 +2292,10 @@ async function updateCartItem({
2188
2292
 
2189
2293
  // src/tools/remove-cart-item.ts
2190
2294
  import { z as z15 } from "zod";
2191
- var schema17 = {
2295
+ var schema18 = {
2192
2296
  cartItemId: z15.string().min(1).describe("Cart item ID to remove (required)")
2193
2297
  };
2194
- var metadata17 = {
2298
+ var metadata18 = {
2195
2299
  name: "remove-cart-item",
2196
2300
  description: "Remove an item from cart. Recalculates cart totals after removal.",
2197
2301
  annotations: {
@@ -2215,11 +2319,11 @@ async function removeCartItem({
2215
2319
 
2216
2320
  // src/tools/apply-discount.ts
2217
2321
  import { z as z16 } from "zod";
2218
- var schema18 = {
2322
+ var schema19 = {
2219
2323
  cartId: z16.string().min(1).describe("Cart ID (required)"),
2220
2324
  discountCode: z16.string().describe("Discount code to apply (required)")
2221
2325
  };
2222
- var metadata18 = {
2326
+ var metadata19 = {
2223
2327
  name: "apply-discount",
2224
2328
  description: "Apply a discount code to a cart. Validates the code, updates cart totals, and sets free shipping if applicable.",
2225
2329
  annotations: {
@@ -2244,10 +2348,10 @@ async function applyDiscount({
2244
2348
 
2245
2349
  // src/tools/remove-discount.ts
2246
2350
  import { z as z17 } from "zod";
2247
- var schema19 = {
2351
+ var schema20 = {
2248
2352
  cartId: z17.string().min(1).describe("Cart ID (required)")
2249
2353
  };
2250
- var metadata19 = {
2354
+ var metadata20 = {
2251
2355
  name: "remove-discount",
2252
2356
  description: "Remove the applied discount code from a cart and recalculate totals.",
2253
2357
  annotations: {
@@ -2271,10 +2375,10 @@ async function removeDiscount({
2271
2375
 
2272
2376
  // src/tools/clear-cart.ts
2273
2377
  import { z as z18 } from "zod";
2274
- var schema20 = {
2378
+ var schema21 = {
2275
2379
  cartId: z18.string().min(1).describe("Cart ID (required)")
2276
2380
  };
2277
- var metadata20 = {
2381
+ var metadata21 = {
2278
2382
  name: "clear-cart",
2279
2383
  description: "Remove all items from a cart, reset discount and amounts. Shipping fee is preserved.",
2280
2384
  annotations: {
@@ -2298,11 +2402,11 @@ async function clearCart({
2298
2402
 
2299
2403
  // src/tools/validate-discount.ts
2300
2404
  import { z as z19 } from "zod";
2301
- var schema21 = {
2405
+ var schema22 = {
2302
2406
  code: z19.string().describe("Discount code to validate (required)"),
2303
2407
  orderAmount: z19.number().describe("Order amount for validation (required)")
2304
2408
  };
2305
- var metadata21 = {
2409
+ var metadata22 = {
2306
2410
  name: "validate-discount",
2307
2411
  description: "Validate a discount code. Checks active status, date range, usage limits, minimum order amount, and calculates discount.",
2308
2412
  annotations: {
@@ -2330,12 +2434,12 @@ async function validateDiscount({
2330
2434
 
2331
2435
  // src/tools/calculate-shipping.ts
2332
2436
  import { z as z20 } from "zod";
2333
- var schema22 = {
2437
+ var schema23 = {
2334
2438
  shippingPolicyId: z20.string().optional().describe("Shipping policy ID (uses default policy if omitted)"),
2335
2439
  orderAmount: z20.number().describe("Order amount for fee calculation (required)"),
2336
2440
  postalCode: z20.string().optional().describe("Postal code for Jeju surcharge detection (63000-63644)")
2337
2441
  };
2338
- var metadata22 = {
2442
+ var metadata23 = {
2339
2443
  name: "calculate-shipping",
2340
2444
  description: "Calculate shipping fee based on order amount and postal code. Supports free shipping threshold and Jeju surcharge.",
2341
2445
  annotations: {
@@ -2365,7 +2469,7 @@ async function calculateShipping({
2365
2469
 
2366
2470
  // src/tools/stock-check.ts
2367
2471
  import { z as z21 } from "zod";
2368
- var schema23 = {
2472
+ var schema24 = {
2369
2473
  items: z21.array(
2370
2474
  z21.object({
2371
2475
  variantId: z21.string().describe("Product variant ID"),
@@ -2375,7 +2479,7 @@ var schema23 = {
2375
2479
  "Array of items to check stock for (required, max 100). Each: { variantId, quantity }"
2376
2480
  )
2377
2481
  };
2378
- var metadata23 = {
2482
+ var metadata24 = {
2379
2483
  name: "stock-check",
2380
2484
  description: "Batch check product option stock availability. Returns per-item availability and an allAvailable flag.",
2381
2485
  annotations: {
@@ -2399,11 +2503,11 @@ async function stockCheck({
2399
2503
 
2400
2504
  // src/tools/product-detail.ts
2401
2505
  import { z as z22 } from "zod";
2402
- var schema24 = {
2506
+ var schema25 = {
2403
2507
  slug: z22.string().optional().describe("Product slug (one of slug or id required)"),
2404
2508
  id: z22.string().optional().describe("Product id (one of slug or id required)")
2405
2509
  };
2406
- var metadata24 = {
2510
+ var metadata25 = {
2407
2511
  name: "product-detail",
2408
2512
  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.",
2409
2513
  annotations: {
@@ -2431,7 +2535,7 @@ async function productDetail({
2431
2535
  }
2432
2536
 
2433
2537
  // src/tools/product-upsert.ts
2434
- var schema25 = {
2538
+ var schema26 = {
2435
2539
  productId: ProductUpsertObjectSchema.shape.productId.describe(
2436
2540
  "Existing product id for graph-only updates. Prefer this for an existing product on edit after loading GET /api/products/:id/composer-draft."
2437
2541
  ),
@@ -2448,7 +2552,7 @@ var schema25 = {
2448
2552
  "Full desired variant graph. On edit, omitted variants are deleted or deactivated according to server references. Prefer stable option-value IDs."
2449
2553
  )
2450
2554
  };
2451
- var metadata25 = {
2555
+ var metadata26 = {
2452
2556
  name: "product-upsert",
2453
2557
  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.",
2454
2558
  annotations: {
@@ -2489,8 +2593,8 @@ async function getCollectionSchema(collection) {
2489
2593
  }
2490
2594
 
2491
2595
  // src/tools/get-collection-schema.ts
2492
- var schema26 = createCollectionSchemaToolInputSchema(SERVER_COLLECTIONS3).shape;
2493
- var metadata26 = {
2596
+ var schema27 = createCollectionSchemaToolInputSchema(SERVER_COLLECTIONS3).shape;
2597
+ var metadata27 = {
2494
2598
  name: "get-collection-schema",
2495
2599
  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.",
2496
2600
  annotations: {
@@ -2541,8 +2645,8 @@ async function getTenantFeatureProgress(feature, includeEvidence = false) {
2541
2645
  }
2542
2646
 
2543
2647
  // src/tools/get-tenant-context.ts
2544
- var schema27 = tenantContextToolInputSchema.shape;
2545
- var metadata27 = {
2648
+ var schema28 = tenantContextToolInputSchema.shape;
2649
+ var metadata28 = {
2546
2650
  name: "get-tenant-context",
2547
2651
  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.",
2548
2652
  annotations: {
@@ -2619,8 +2723,8 @@ async function handler({
2619
2723
  }
2620
2724
 
2621
2725
  // src/tools/check-feature-progress.ts
2622
- var schema28 = tenantFeatureProgressInputSchema.shape;
2623
- var metadata28 = {
2726
+ var schema29 = tenantFeatureProgressInputSchema.shape;
2727
+ var metadata29 = {
2624
2728
  name: "check-feature-progress",
2625
2729
  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.",
2626
2730
  annotations: {
@@ -2666,12 +2770,12 @@ function invalidateFieldConfigCache() {
2666
2770
  }
2667
2771
 
2668
2772
  // src/tools/list-configurable-fields.ts
2669
- var schema29 = {
2773
+ var schema30 = {
2670
2774
  collection: z23.string().optional().describe(
2671
2775
  "Filter by collection slug (optional \u2014 returns all if omitted). Use this filter to reduce response size when you know which collection to check."
2672
2776
  )
2673
2777
  };
2674
- var metadata29 = {
2778
+ var metadata30 = {
2675
2779
  name: "list-configurable-fields",
2676
2780
  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.",
2677
2781
  annotations: {
@@ -2703,7 +2807,7 @@ async function listConfigurableFields(params) {
2703
2807
 
2704
2808
  // src/tools/update-field-config.ts
2705
2809
  import { z as z24 } from "zod";
2706
- var schema30 = {
2810
+ var schema31 = {
2707
2811
  collection: z24.string().min(1).describe("Collection slug (required)"),
2708
2812
  hiddenFields: z24.array(z24.string().min(1).max(200)).max(300).describe(
2709
2813
  "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."
@@ -2712,7 +2816,7 @@ var schema30 = {
2712
2816
  "Hide the entire collection from Admin Panel (optional). When true, individual hiddenFields are irrelevant."
2713
2817
  )
2714
2818
  };
2715
- var metadata30 = {
2819
+ var metadata31 = {
2716
2820
  name: "update-field-config",
2717
2821
  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.",
2718
2822
  annotations: {
@@ -3181,7 +3285,7 @@ function getRecipe(goal, runtime = "both") {
3181
3285
  }
3182
3286
 
3183
3287
  // src/tools/sdk-get-recipe.ts
3184
- var schema31 = {
3288
+ var schema32 = {
3185
3289
  goal: z25.enum([
3186
3290
  "fetch-list",
3187
3291
  "fetch-by-id",
@@ -3198,7 +3302,7 @@ var schema31 = {
3198
3302
  collection: z25.string().optional().describe("Specific collection name if applicable"),
3199
3303
  includeExample: z25.boolean().default(true).describe("Whether to include a full code example")
3200
3304
  };
3201
- var metadata31 = {
3305
+ var metadata32 = {
3202
3306
  name: "sdk-get-recipe",
3203
3307
  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.",
3204
3308
  annotations: {
@@ -3379,9 +3483,16 @@ var docIndex = [
3379
3483
  "order",
3380
3484
  "orderChanged",
3381
3485
  "collection.orderChanged",
3382
- "isOrderChangedWebhookEvent"
3486
+ "isOrderChangedWebhookEvent",
3487
+ "commerce.notification",
3488
+ "createCommerceNotificationWebhookHandler",
3489
+ "createCommerceEmailWebhookHandler",
3490
+ "orderCanceled",
3491
+ "resolveCancelRefund",
3492
+ "cancel refund",
3493
+ "external PG refund"
3383
3494
  ],
3384
- summary: "Tenant webhooks deliver signed server-to-server events via WEBHOOK_SECRET, including customer password reset and semantic order changes with collection.orderChanged / isOrderChangedWebhookEvent.",
3495
+ 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.",
3385
3496
  resourceUri: "docs://sdk/webhook"
3386
3497
  },
3387
3498
  // Order API
@@ -3393,8 +3504,8 @@ var docIndex = [
3393
3504
  },
3394
3505
  {
3395
3506
  title: "Order API \u2014 Fulfillment and Shipping",
3396
- keywords: ["fulfillment", "shipping", "tracking", "carrier", "trackingNumber", "createFulfillment", "updateFulfillment", "shipped", "delivered"],
3397
- summary: "client.commerce.orders.createFulfillment({ orderNumber, items, carrier?, trackingNumber? }) creates a shipment. updateFulfillment() advances fulfillment status.",
3507
+ keywords: ["fulfillment", "shipping", "tracking", "carrier", "trackingNumber", "prepareFulfillmentOrder", "createFulfillment", "updateFulfillment", "shipped", "delivered"],
3508
+ summary: "client.commerce.orders.prepareFulfillmentOrder({ orderNumber }) starts fulfillment work. createFulfillment({ orderNumber, ... }) creates a shipment with optional tracking. updateFulfillment() advances shipment status or updates tracking.",
3398
3509
  resourceUri: "docs://sdk/server-api"
3399
3510
  },
3400
3511
  {
@@ -3427,11 +3538,11 @@ function searchDocs(query, limit = 5) {
3427
3538
  }
3428
3539
 
3429
3540
  // src/tools/sdk-search-docs.ts
3430
- var schema32 = {
3541
+ var schema33 = {
3431
3542
  query: z26.string().min(2).describe('Search keyword or phrase (e.g. "infinite scroll", "webhook", "customer login")'),
3432
3543
  limit: z26.number().min(1).max(10).default(5).describe("Maximum results to return (1-10, default: 5)")
3433
3544
  };
3434
- var metadata32 = {
3545
+ var metadata33 = {
3435
3546
  name: "sdk-search-docs",
3436
3547
  description: "Search SDK documentation by keyword. Returns matching topics with summaries and resource links. Use when looking for specific SDK features or patterns.",
3437
3548
  annotations: {
@@ -3467,7 +3578,7 @@ function handler4({
3467
3578
 
3468
3579
  // src/tools/sdk-get-auth-setup.ts
3469
3580
  import { z as z27 } from "zod";
3470
- var schema33 = {
3581
+ var schema34 = {
3471
3582
  scenario: z27.enum([
3472
3583
  "browser-client",
3473
3584
  "server-client",
@@ -3477,7 +3588,7 @@ var schema33 = {
3477
3588
  "webhook-verification"
3478
3589
  ]).describe("Authentication scenario")
3479
3590
  };
3480
- var metadata33 = {
3591
+ var metadata34 = {
3481
3592
  name: "sdk-get-auth-setup",
3482
3593
  description: "Get the current authentication setup for a specific scenario. Returns env var names, code snippets, and security notes.",
3483
3594
  annotations: {
@@ -3641,12 +3752,12 @@ function handler5({
3641
3752
  // src/tools/sdk-get-collection-pattern.ts
3642
3753
  import { z as z28 } from "zod";
3643
3754
  import { COLLECTIONS, SERVER_COLLECTIONS as SERVER_COLLECTIONS4 } from "@01.software/sdk";
3644
- var schema34 = {
3755
+ var schema35 = {
3645
3756
  collection: z28.enum(SERVER_COLLECTIONS4).describe("Collection name"),
3646
3757
  operation: z28.enum(["read", "write", "full-crud"]).default("read").describe("What operations are needed"),
3647
3758
  surface: z28.enum(["query-builder", "react-query", "server-api"]).default("query-builder").describe("Preferred API surface")
3648
3759
  };
3649
- var metadata34 = {
3760
+ var metadata35 = {
3650
3761
  name: "sdk-get-collection-pattern",
3651
3762
  description: "Get the recommended CRUD pattern for a specific collection. Returns code examples for the chosen API surface and operation type.",
3652
3763
  annotations: {
@@ -3843,13 +3954,13 @@ function handler6({
3843
3954
 
3844
3955
  // src/prompts/sdk-usage-guide.ts
3845
3956
  import { z as z29 } from "zod";
3846
- var schema35 = {
3957
+ var schema36 = {
3847
3958
  goal: z29.string().describe('What the user wants to accomplish (e.g., "query product list", "create order")'),
3848
3959
  runtime: z29.enum(["browser", "server"]).optional().describe("Target runtime: browser (React/Next.js client) or server (Node.js)"),
3849
3960
  surface: z29.enum(["query-builder", "react-query", "customer-api", "server-api"]).optional().describe("Preferred API surface"),
3850
3961
  collection: z29.string().optional().describe("Specific collection if relevant")
3851
3962
  };
3852
- var metadata35 = {
3963
+ var metadata36 = {
3853
3964
  name: "sdk-usage-guide",
3854
3965
  title: "SDK Usage Guide",
3855
3966
  description: "Provides guidance on how to perform a specific task using the 01.software SDK",
@@ -4023,12 +4134,12 @@ const { allAvailable } = await client.commerce.product.stockCheck({
4023
4134
  // src/prompts/collection-query-help.ts
4024
4135
  import { z as z30 } from "zod";
4025
4136
  import { COLLECTIONS as COLLECTIONS2, SERVER_COLLECTIONS as SERVER_COLLECTIONS5 } from "@01.software/sdk";
4026
- var schema36 = {
4137
+ var schema37 = {
4027
4138
  collection: z30.enum(SERVER_COLLECTIONS5).describe("Collection name"),
4028
4139
  operation: z30.enum(["find", "create", "update", "delete"]).describe("Operation to perform (find, create, update, delete)"),
4029
4140
  filters: z30.string().optional().describe("Filter conditions (JSON string, optional)")
4030
4141
  };
4031
- var metadata36 = {
4142
+ var metadata37 = {
4032
4143
  name: "collection-query-help",
4033
4144
  title: "Collection Query Help",
4034
4145
  description: "Provides guidance on how to write queries for a specific collection",
@@ -4126,7 +4237,7 @@ ${operation === "find" ? `- Use \`where\` option for filtering (Payload query sy
4126
4237
 
4127
4238
  // src/prompts/order-flow-guide.ts
4128
4239
  import { z as z31 } from "zod";
4129
- var schema37 = {
4240
+ var schema38 = {
4130
4241
  scenario: z31.enum([
4131
4242
  "simple-order",
4132
4243
  "cart-checkout",
@@ -4135,7 +4246,7 @@ var schema37 = {
4135
4246
  "fulfillment-tracking"
4136
4247
  ]).describe("Order flow scenario")
4137
4248
  };
4138
- var metadata37 = {
4249
+ var metadata38 = {
4139
4250
  name: "order-flow-guide",
4140
4251
  title: "Order Flow Guide",
4141
4252
  description: "Provides step-by-step guidance for ecommerce order flows including creation, checkout, returns, and fulfillment.",
@@ -4155,10 +4266,16 @@ var SCENARIOS = {
4155
4266
  - Successful confirmation transitions the order to \`paid\`
4156
4267
  - Paid orders reserve sellable quantity (reservedStock += qty); physical stock is decremented on delivery
4157
4268
 
4158
- 3. **Fulfillment** \u2192 \`create-fulfillment\` tool
4159
- - Provide carrier + trackingNumber for shipped status
4160
- - Partial shipment \u2192 order becomes \`preparing\`
4161
- - All items shipped \u2192 order becomes \`shipped\`
4269
+ 3. **Prepare Fulfillment Work** \u2192 \`prepare-fulfillment-order\` tool
4270
+ - Provide orderNumber only
4271
+ - Starts fulfillment-order work without carrier/tracking
4272
+ - Order display status is derived as \`preparing\`
4273
+
4274
+ 4. **Create Shipment** \u2192 \`create-fulfillment\` tool
4275
+ - Provide orderNumber
4276
+ - Optional: carrier + trackingNumber can be supplied now or later
4277
+ - Shipment status starts as \`shipped\`
4278
+ - Shipment state drives the derived order display status
4162
4279
 
4163
4280
  ### Code Example (ServerClient)
4164
4281
  \`\`\`typescript
@@ -4189,7 +4306,12 @@ await client.commerce.orders.confirmPayment({
4189
4306
  confirmationSource: 'provider_api_confirm'
4190
4307
  })
4191
4308
 
4192
- // 3. Ship items
4309
+ // 3. Start fulfillment work without tracking
4310
+ await client.commerce.orders.prepareFulfillmentOrder({
4311
+ orderNumber: 'ORD-240101-001'
4312
+ })
4313
+
4314
+ // 4. Ship items; tracking can be added now or later
4193
4315
  await client.commerce.orders.createFulfillment({
4194
4316
  orderNumber: 'ORD-240101-001',
4195
4317
  carrier: 'cj',
@@ -4275,11 +4397,12 @@ await client.commerce.orders.returnWithRefund({
4275
4397
  - **PG refund is not performed by Console** \u2014 storefront/BFF calls Toss/Portone; webhook sync is a follow-up
4276
4398
  - \`refundedAmount\` is not incremented on local cancel; new cancels return \`providerRefunded: false\`
4277
4399
  - \`refundPending: true\` signals storefront PG refund is still required; idempotent retries may return it from server metadata
4400
+ - \`in_progress\` / \`on_hold\` preparation fulfillment orders are voided during cancel when no shipment exists
4278
4401
  - Legacy inline-PG-cancel rows may still return \`reconciliationRequired: true\` with \`providerRefunded: true\`
4279
4402
  - Duplicate local success returns \`alreadyCanceled: true\`
4280
4403
 
4281
4404
  ### V1 Rejections
4282
- - Orders with non-failed fulfillments are rejected
4405
+ - Orders with active fulfillments (not \`failed\` / \`canceled\`) are rejected
4283
4406
  - \`shipped\`, \`delivered\`, \`confirmed\`, and return-axis orders are rejected
4284
4407
  - Active returns are rejected; use \`return-with-refund\` after delivery
4285
4408
  - Partial line-item cancellation is not supported in v1
@@ -4327,32 +4450,45 @@ Use one idempotency key per distinct PG refund attempt/result. For PG refund fai
4327
4450
  "fulfillment-tracking": `## Fulfillment & Tracking
4328
4451
 
4329
4452
  ### Creating Fulfillment
4330
- 1. **Create Fulfillment** \u2192 \`create-fulfillment\` tool
4331
- - Order must be \`paid\` or \`preparing\`
4332
- - With carrier + trackingNumber \u2192 fulfillment status = \`shipped\`
4333
- - Without \u2192 fulfillment status = \`pending\`
4453
+ 1. **Prepare Fulfillment Work** \u2192 \`prepare-fulfillment-order\` tool
4454
+ - Order must be paid and fulfillable
4455
+ - Provide orderNumber only
4456
+ - No carrier/tracking is required
4457
+ - Fulfillment order status becomes \`in_progress\`
4458
+
4459
+ 2. **Create Shipment** \u2192 \`create-fulfillment\` tool
4460
+ - Provide orderNumber
4461
+ - Optional: carrier and trackingNumber can be supplied now or updated later
4462
+ - Optional: fulfillmentOrderId and item quantities for partial shipments
4463
+ - Shipment status starts as \`shipped\`
4334
4464
 
4335
4465
  ### Updating Fulfillment
4336
- 2. **Update** \u2192 \`update-fulfillment\` tool
4337
- - FSM: pending \u2192 packed \u2192 shipped \u2192 delivered (terminal)
4338
- - Or: pending/packed/shipped \u2192 failed (terminal)
4339
- - Carrier/trackingNumber changeable only in pending/packed status
4466
+ 3. **Update Shipment** \u2192 \`update-fulfillment\` tool
4467
+ - Shipment lifecycle: shipped \u2192 delivered
4468
+ - Or: shipped \u2192 failed
4469
+ - Carrier/trackingNumber can be added or corrected after shipment creation
4340
4470
 
4341
4471
  ### Auto Timestamps
4342
4472
  - \`shipped\` \u2192 sets \`shippedAt\`
4343
4473
  - \`delivered\` \u2192 sets \`deliveredAt\`
4344
4474
 
4345
- ### Order Auto-sync
4346
- - All items shipped with carrier \u2192 order \`shipped\`
4347
- - Partial shipment \u2192 order \`preparing\`
4348
- - All non-failed fulfillments delivered \u2192 order \`delivered\`
4475
+ ### Order Display Projection
4476
+ - \`preparing\` is derived from active fulfillment-order work
4477
+ - \`shipped\` is derived from active shipment rows
4478
+ - \`delivered\` is derived only after all active shipments are delivered
4479
+ - \`confirmed\` is set through \`update-order\` after delivery
4349
4480
 
4350
4481
  ### Carriers
4351
4482
  cj, hanjin, lotte, epost, logen, other
4352
4483
 
4353
4484
  ### Code Example
4354
4485
  \`\`\`typescript
4355
- // Create fulfillment with tracking
4486
+ // Prepare fulfillment work first
4487
+ await client.commerce.orders.prepareFulfillmentOrder({
4488
+ orderNumber: 'ORD-240101-001'
4489
+ })
4490
+
4491
+ // Create shipment; carrier/tracking are optional
4356
4492
  await client.commerce.orders.createFulfillment({
4357
4493
  orderNumber: 'ORD-240101-001',
4358
4494
  carrier: 'cj',
@@ -4360,6 +4496,13 @@ await client.commerce.orders.createFulfillment({
4360
4496
  items: [{ orderItem: 'oi-id', quantity: 2 }]
4361
4497
  })
4362
4498
 
4499
+ // Add or update tracking later
4500
+ await client.commerce.orders.updateFulfillment({
4501
+ fulfillmentId: 'ful-id',
4502
+ carrier: 'cj',
4503
+ trackingNumber: '1234567890'
4504
+ })
4505
+
4363
4506
  // Mark as delivered
4364
4507
  await client.commerce.orders.updateFulfillment({
4365
4508
  fulfillmentId: 'ful-id',
@@ -4377,7 +4520,7 @@ ${SCENARIOS[scenario] || "Unknown scenario."}
4377
4520
  ## Related MCP Tools
4378
4521
  - \`create-order\`, \`get-order\`, \`update-order\`
4379
4522
  - \`checkout\`
4380
- - \`create-fulfillment\`, \`update-fulfillment\`
4523
+ - \`prepare-fulfillment-order\`, \`create-fulfillment\`, \`update-fulfillment\`
4381
4524
  - \`create-return\`, \`update-return\`, \`return-with-refund\`
4382
4525
  - \`confirm-payment\`, \`cancel-order\`, \`update-transaction\`
4383
4526
  - \`validate-discount\`, \`calculate-shipping\``;
@@ -4385,7 +4528,7 @@ ${SCENARIOS[scenario] || "Unknown scenario."}
4385
4528
 
4386
4529
  // src/prompts/feature-setup-guide.ts
4387
4530
  import { z as z32 } from "zod";
4388
- var schema38 = {
4531
+ var schema39 = {
4389
4532
  feature: z32.enum([
4390
4533
  "ecommerce",
4391
4534
  "customers",
@@ -4401,7 +4544,7 @@ var schema38 = {
4401
4544
  "community"
4402
4545
  ]).describe("Feature to get setup guide for")
4403
4546
  };
4404
- var metadata38 = {
4547
+ var metadata39 = {
4405
4548
  name: "feature-setup-guide",
4406
4549
  title: "Feature Setup Guide",
4407
4550
  description: "Setup checklist and remediation guide for a tenant feature. Load with check-feature-progress and get-tenant-context to diagnose setup gaps.",
@@ -4609,7 +4752,7 @@ ${FEATURES[feature] || "Unknown feature."}
4609
4752
  }
4610
4753
 
4611
4754
  // src/resources/(config)/app.ts
4612
- var metadata39 = {
4755
+ var metadata40 = {
4613
4756
  name: "app-config",
4614
4757
  title: "Application Config",
4615
4758
  description: "01.software SDK and MCP server configuration information"
@@ -4653,7 +4796,7 @@ The hosted HTTP MCP endpoint at https://mcp.01.software/mcp exposes only these O
4653
4796
  - \`sdk-get-auth-setup\` - Get framework-specific auth setup guidance
4654
4797
  - \`sdk-get-collection-pattern\` - Get collection-specific usage patterns
4655
4798
 
4656
- ## Local CLI Stdio Surface (33)
4799
+ ## Local CLI Stdio Surface (35)
4657
4800
 
4658
4801
  For trusted local server-key workflows, start the stdio server:
4659
4802
 
@@ -4675,7 +4818,7 @@ Rate limits depend on your tenant plan:
4675
4818
 
4676
4819
  // src/resources/(collections)/schema.ts
4677
4820
  import { COLLECTIONS as COLLECTIONS3 } from "@01.software/sdk";
4678
- var metadata40 = {
4821
+ var metadata41 = {
4679
4822
  name: "collections-schema",
4680
4823
  title: "Collection Schema Info",
4681
4824
  description: "Available collections and their schema information"
@@ -4812,7 +4955,7 @@ Total available collections: ${COLLECTIONS3.length}`;
4812
4955
  }
4813
4956
 
4814
4957
  // src/resources/(docs)/getting-started.ts
4815
- var metadata41 = {
4958
+ var metadata42 = {
4816
4959
  name: "docs-getting-started",
4817
4960
  title: "Getting Started",
4818
4961
  description: "01.software SDK getting started guide"
@@ -4873,7 +5016,7 @@ const result = await client.collections.from('products').find({
4873
5016
  }
4874
5017
 
4875
5018
  // src/resources/(docs)/guides.ts
4876
- var metadata42 = {
5019
+ var metadata43 = {
4877
5020
  name: "docs-guides",
4878
5021
  title: "Guides",
4879
5022
  description: "01.software SDK usage guides"
@@ -5086,7 +5229,7 @@ For more implementation guidance, see the [SDK Guide](/developers/sdk).`;
5086
5229
  }
5087
5230
 
5088
5231
  // src/resources/(docs)/api.ts
5089
- var metadata43 = {
5232
+ var metadata44 = {
5090
5233
  name: "docs-api",
5091
5234
  title: "API Reference",
5092
5235
  description: "01.software SDK API reference documentation"
@@ -5369,7 +5512,7 @@ For more details, see the [API documentation](/developers/api).`;
5369
5512
  }
5370
5513
 
5371
5514
  // src/resources/(docs)/query-builder.ts
5372
- var metadata44 = {
5515
+ var metadata45 = {
5373
5516
  name: "docs-query-builder",
5374
5517
  title: "Query Builder",
5375
5518
  description: "01.software SDK Query Builder API reference (client.collections.from)"
@@ -5522,6 +5665,33 @@ if (page1.hasNextPage) {
5522
5665
  }
5523
5666
  \`\`\`
5524
5667
 
5668
+ ## Join fields (\`joins\`)
5669
+
5670
+ 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.
5671
+
5672
+ 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.
5673
+
5674
+ \`\`\`typescript
5675
+ import { PRODUCT_PLP_FIND_OPTIONS } from '@01.software/sdk'
5676
+
5677
+ await client.collections.from('products').find({
5678
+ ...PRODUCT_PLP_FIND_OPTIONS,
5679
+ where: { status: { equals: 'published' } },
5680
+ limit: 24,
5681
+ })
5682
+
5683
+ // Or configure joins explicitly (tune limits to your catalog size):
5684
+ await client.collections.from('products').find({
5685
+ joins: {
5686
+ variants: { limit: 50, sort: '_order' },
5687
+ options: { limit: 30, sort: '_order' },
5688
+ },
5689
+ })
5690
+
5691
+ // Disable all join-field population for lightweight lists:
5692
+ await client.collections.from('products').find({ joins: false })
5693
+ \`\`\`
5694
+
5525
5695
  ## Sorting
5526
5696
 
5527
5697
  \`\`\`typescript
@@ -5563,7 +5733,7 @@ console.log(result.hasNextPage) // true
5563
5733
  }
5564
5734
 
5565
5735
  // src/resources/(docs)/react-query.ts
5566
- var metadata45 = {
5736
+ var metadata46 = {
5567
5737
  name: "docs-react-query",
5568
5738
  title: "React Query Hooks",
5569
5739
  description: "01.software SDK React Query hooks reference (@01.software/sdk/query)"
@@ -5795,7 +5965,7 @@ export function ProductList() {
5795
5965
  }
5796
5966
 
5797
5967
  // src/resources/(docs)/server-api.ts
5798
- var metadata46 = {
5968
+ var metadata47 = {
5799
5969
  name: "docs-server-api",
5800
5970
  title: "Server-side API",
5801
5971
  description: "01.software SDK server-side API reference (client.commerce) for orders, fulfillments, returns, carts, and validation"
@@ -5871,25 +6041,34 @@ const order = docs[0] ?? null
5871
6041
  \`\`\`
5872
6042
 
5873
6043
  ### updateOrder()
5874
- Update order status.
6044
+ Confirm an order after delivery. Financial and shipment/display statuses are server-derived.
5875
6045
 
5876
6046
  \`\`\`typescript
5877
6047
  const order = await client.commerce.orders.update({
5878
6048
  orderNumber: 'ORD-20240101-0001',
5879
- status: 'paid', // pending | paid | failed | canceled | preparing | shipped | delivered | confirmed
6049
+ status: 'confirmed',
5880
6050
  })
5881
6051
  \`\`\`
5882
6052
 
5883
6053
  ## Fulfillment API
5884
6054
 
6055
+ ### prepareFulfillmentOrder()
6056
+ Start fulfillment-order work without carrier or tracking.
6057
+
6058
+ \`\`\`typescript
6059
+ const result = await client.commerce.orders.prepareFulfillmentOrder({
6060
+ orderNumber: 'ORD-20240101-0001',
6061
+ })
6062
+ \`\`\`
6063
+
5885
6064
  ### createFulfillment()
5886
- Create a shipment record for order items.
6065
+ Create a shipment record for order items. Carrier and trackingNumber are optional and can be added later.
5887
6066
 
5888
6067
  \`\`\`typescript
5889
6068
  const fulfillment = await client.commerce.orders.createFulfillment({
5890
6069
  orderNumber: 'ORD-20240101-0001',
5891
- carrier?: 'cj', // cj | hanjin | lotte | epost | logen | other
5892
- trackingNumber?: '123456789012',
6070
+ carrier: 'cj', // optional: cj | hanjin | lotte | epost | logen | other
6071
+ trackingNumber: '123456789012', // optional
5893
6072
  items: [
5894
6073
  { orderItem: 'order-item-id', quantity: 2 }
5895
6074
  ],
@@ -5897,14 +6076,13 @@ const fulfillment = await client.commerce.orders.createFulfillment({
5897
6076
  \`\`\`
5898
6077
 
5899
6078
  ### updateFulfillment()
5900
- Update fulfillment status and optionally carrier/tracking.
6079
+ Update fulfillment status or tracking information.
5901
6080
 
5902
6081
  \`\`\`typescript
5903
6082
  const fulfillment = await client.commerce.orders.updateFulfillment({
5904
6083
  fulfillmentId: 'fulfillment-id',
5905
- status: 'delivered', // packed | shipped | delivered | failed
5906
- carrier?: 'cj',
5907
- trackingNumber?: '123456789012',
6084
+ carrier: 'cj',
6085
+ trackingNumber: '123456789012',
5908
6086
  })
5909
6087
  \`\`\`
5910
6088
 
@@ -5919,9 +6097,12 @@ const ret = await client.commerce.orders.createReturn({
5919
6097
  reason?: 'defective', // change_of_mind | defective | wrong_delivery | damaged | other
5920
6098
  reasonDetail?: 'Screen cracked on arrival',
5921
6099
  returnItems: [
5922
- { orderItem: 'order-item-id', quantity: 1 }
6100
+ { orderItem: 'order-item-id', quantity: 1, restockingFee?: 500 }
5923
6101
  ],
5924
6102
  refundAmount: 29900,
6103
+ returnShippingFee?: 1500,
6104
+ initialShippingRefundAmount?: 3000,
6105
+ initialShippingRefundOverrideNote?: 'Policy override note',
5925
6106
  })
5926
6107
  \`\`\`
5927
6108
 
@@ -5948,6 +6129,8 @@ const result = await client.commerce.orders.returnWithRefund({
5948
6129
  ],
5949
6130
  refundAmount: 29900,
5950
6131
  returnShippingFee?: 1500,
6132
+ initialShippingRefundAmount?: 3000,
6133
+ initialShippingRefundOverrideNote?: 'Policy override note',
5951
6134
  pgPaymentId: 'provider-payment-id', // required
5952
6135
  paymentKey: 'provider-payment-key', // required for provider refund
5953
6136
  refundReceiptUrl?: 'https://...',
@@ -6079,7 +6262,7 @@ const result = await client.commerce.shipping.calculate({
6079
6262
  }
6080
6263
 
6081
6264
  // src/resources/(docs)/customer-auth.ts
6082
- var metadata47 = {
6265
+ var metadata48 = {
6083
6266
  name: "docs-customer-auth",
6084
6267
  title: "Customer Auth API",
6085
6268
  description: "01.software SDK Customer Auth API reference (client.customer)"
@@ -6257,7 +6440,7 @@ async function loadProfile() {
6257
6440
  }
6258
6441
 
6259
6442
  // src/resources/(docs)/browser-vs-server.ts
6260
- var metadata48 = {
6443
+ var metadata49 = {
6261
6444
  name: "docs-browser-vs-server",
6262
6445
  title: "Client vs ServerClient",
6263
6446
  description: "When to use Client (createClient) vs ServerClient (createServerClient) in the 01.software SDK"
@@ -6423,7 +6606,7 @@ export function ProductList() {
6423
6606
  }
6424
6607
 
6425
6608
  // src/resources/(docs)/file-upload.ts
6426
- var metadata49 = {
6609
+ var metadata50 = {
6427
6610
  name: "docs-file-upload",
6428
6611
  title: "File Upload",
6429
6612
  description: "01.software SDK file upload patterns using the images collection"
@@ -6574,7 +6757,7 @@ The platform stores files in Cloudflare R2 and serves via CDN (\`cdn.01.software
6574
6757
  }
6575
6758
 
6576
6759
  // src/resources/(docs)/webhook.ts
6577
- var metadata50 = {
6760
+ var metadata51 = {
6578
6761
  name: "docs-webhook",
6579
6762
  title: "Webhooks",
6580
6763
  description: "01.software SDK webhook verification and event handling"
@@ -6643,8 +6826,8 @@ export async function POST(request: Request) {
6643
6826
 
6644
6827
  \`\`\`typescript
6645
6828
  import {
6829
+ createCommerceNotificationWebhookHandler,
6646
6830
  handleWebhook,
6647
- isCommerceNotificationWebhookEvent,
6648
6831
  } from '@01.software/sdk/webhook'
6649
6832
 
6650
6833
  function getWebhookSecret(): string {
@@ -6653,26 +6836,25 @@ function getWebhookSecret(): string {
6653
6836
  return secret
6654
6837
  }
6655
6838
 
6656
- export async function POST(request: Request) {
6657
- return handleWebhook(request, async (event) => {
6658
- if (!isCommerceNotificationWebhookEvent(event)) return
6659
-
6660
- const idempotencyKey = \`\${event.notification.intentId}:\${event.notification.dedupeKey}\`
6661
- const processed = await processOnce(idempotencyKey, async () => {
6662
- if (event.notification.event === 'orderPaid') {
6663
- const orderId = event.notification.orderId ?? event.data.orderId
6664
- if (orderId) await updateOrderWorkflow(orderId)
6665
- }
6839
+ const commerceNotificationHandler = createCommerceNotificationWebhookHandler({
6840
+ async orderPaid({ event, idempotencyKey }) {
6841
+ await processOnce(idempotencyKey, async () => {
6842
+ const orderId = event.notification.orderId ?? event.data.orderId
6843
+ if (orderId) await updateOrderWorkflow(orderId)
6844
+ })
6845
+ },
6666
6846
 
6667
- if (event.notification.event === 'fulfillmentShipped') {
6668
- const fulfillmentId =
6669
- event.notification.fulfillmentId ?? event.data.fulfillmentId
6670
- if (fulfillmentId) await updateFulfillmentWorkflow(fulfillmentId)
6671
- }
6847
+ async fulfillmentShipped({ event, idempotencyKey }) {
6848
+ await processOnce(idempotencyKey, async () => {
6849
+ const fulfillmentId =
6850
+ event.notification.fulfillmentId ?? event.data.fulfillmentId
6851
+ if (fulfillmentId) await updateFulfillmentWorkflow(fulfillmentId)
6672
6852
  })
6853
+ },
6854
+ })
6673
6855
 
6674
- if (!processed) return
6675
- }, {
6856
+ export async function POST(request: Request) {
6857
+ return handleWebhook(request, commerceNotificationHandler, {
6676
6858
  secret: getWebhookSecret(),
6677
6859
  })
6678
6860
  }
@@ -6680,11 +6862,11 @@ export async function POST(request: Request) {
6680
6862
 
6681
6863
  Back \`processOnce()\` with durable storage such as a database unique key or queue idempotency store; do not use process-local memory for webhook idempotency.
6682
6864
 
6683
- ## Headless Commerce Email Workers
6865
+ ## Commerce Notification Workers
6684
6866
 
6685
- 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.
6867
+ 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.
6686
6868
 
6687
- 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.
6869
+ 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.
6688
6870
 
6689
6871
  ## Webhook Payload Structure
6690
6872
 
@@ -6737,9 +6919,11 @@ Canonical example (public operational identifiers only; no PII, payment/provider
6737
6919
  Use \`notification.intentId\` plus \`notification.dedupeKey\` for semantic idempotency. \`deliveryId\` is per delivery attempt / observability and may not be stable across semantic retries.
6738
6920
  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.
6739
6921
 
6922
+ 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.
6923
+
6740
6924
  V1 source subscription semantics:
6741
6925
 
6742
- - \`orderPaid\` and \`orderDelivered\` are delivered through \`orders\`-scoped endpoints.
6926
+ - \`orderPaid\`, \`orderCanceled\`, and \`orderDelivered\` are delivered through \`orders\`-scoped endpoints.
6743
6927
  - \`fulfillmentShipped\` is delivered through \`fulfillments\`-scoped endpoints.
6744
6928
  - \`returnRequested\` and \`returnCompleted\` are delivered through \`returns\`-scoped endpoints.
6745
6929
  - Empty, unscoped, and all-collection endpoints do not receive v1 semantic commerce notifications.
@@ -6838,7 +7022,7 @@ Configure webhook URLs in the 01.software console under Tenant Settings > Webhoo
6838
7022
  }
6839
7023
 
6840
7024
  // src/resources/(docs)/product-detail.ts
6841
- var metadata51 = {
7025
+ var metadata52 = {
6842
7026
  name: "docs-product-detail",
6843
7027
  title: "Product Detail Helper",
6844
7028
  description: "01.software SDK commerce.product.detail helper guide"
@@ -6948,7 +7132,7 @@ function runtimeAnnotationsFor(meta) {
6948
7132
  openWorldHint: policy.annotationPolicy.openWorld
6949
7133
  };
6950
7134
  }
6951
- function registerTool(server, schema39, meta, handler21) {
7135
+ function registerTool(server, schema40, meta, handler21) {
6952
7136
  let registered = REGISTERED_TOOLS_BY_SERVER.get(server);
6953
7137
  if (!registered) {
6954
7138
  registered = /* @__PURE__ */ new Set();
@@ -6959,7 +7143,7 @@ function registerTool(server, schema39, meta, handler21) {
6959
7143
  meta.name,
6960
7144
  {
6961
7145
  description: meta.description,
6962
- inputSchema: schema39,
7146
+ inputSchema: schema40,
6963
7147
  annotations: runtimeAnnotationsFor(meta)
6964
7148
  },
6965
7149
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -7009,13 +7193,13 @@ function registerTool(server, schema39, meta, handler21) {
7009
7193
  }
7010
7194
  );
7011
7195
  }
7012
- function registerPrompt(server, schema39, meta, handler21) {
7196
+ function registerPrompt(server, schema40, meta, handler21) {
7013
7197
  server.registerPrompt(
7014
7198
  meta.name,
7015
7199
  {
7016
7200
  title: meta.title,
7017
7201
  description: meta.description,
7018
- argsSchema: schema39
7202
+ argsSchema: schema40
7019
7203
  },
7020
7204
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
7021
7205
  (params) => ({
@@ -7075,245 +7259,251 @@ function createServer(options = {}) {
7075
7259
  server,
7076
7260
  schema8,
7077
7261
  metadata8,
7078
- updateFulfillment
7262
+ prepareFulfillmentOrder
7079
7263
  );
7080
7264
  registerTool(
7081
7265
  server,
7082
7266
  schema9,
7083
7267
  metadata9,
7084
- updateTransaction
7268
+ updateFulfillment
7085
7269
  );
7086
7270
  registerTool(
7087
7271
  server,
7088
7272
  schema10,
7089
7273
  metadata10,
7090
- confirmPayment
7274
+ updateTransaction
7091
7275
  );
7092
- registerTool(server, schema11, metadata11, cancelOrder);
7093
7276
  registerTool(
7094
7277
  server,
7095
- schema12,
7096
- metadata12,
7097
- createReturn
7278
+ schema11,
7279
+ metadata11,
7280
+ confirmPayment
7098
7281
  );
7282
+ registerTool(server, schema12, metadata12, cancelOrder);
7099
7283
  registerTool(
7100
7284
  server,
7101
7285
  schema13,
7102
7286
  metadata13,
7103
- updateReturn
7287
+ createReturn
7104
7288
  );
7105
7289
  registerTool(
7106
7290
  server,
7107
7291
  schema14,
7108
7292
  metadata14,
7109
- returnWithRefund
7293
+ updateReturn
7110
7294
  );
7111
- registerTool(server, schema15, metadata15, addCartItem);
7112
7295
  registerTool(
7113
7296
  server,
7114
- schema16,
7115
- metadata16,
7116
- updateCartItem
7297
+ schema15,
7298
+ metadata15,
7299
+ returnWithRefund
7117
7300
  );
7301
+ registerTool(server, schema16, metadata16, addCartItem);
7118
7302
  registerTool(
7119
7303
  server,
7120
7304
  schema17,
7121
7305
  metadata17,
7122
- removeCartItem
7306
+ updateCartItem
7123
7307
  );
7124
7308
  registerTool(
7125
7309
  server,
7126
7310
  schema18,
7127
7311
  metadata18,
7128
- applyDiscount
7312
+ removeCartItem
7129
7313
  );
7130
7314
  registerTool(
7131
7315
  server,
7132
7316
  schema19,
7133
7317
  metadata19,
7134
- removeDiscount
7318
+ applyDiscount
7135
7319
  );
7136
- registerTool(server, schema20, metadata20, clearCart);
7137
7320
  registerTool(
7138
7321
  server,
7139
- schema21,
7140
- metadata21,
7141
- validateDiscount
7322
+ schema20,
7323
+ metadata20,
7324
+ removeDiscount
7142
7325
  );
7326
+ registerTool(server, schema21, metadata21, clearCart);
7143
7327
  registerTool(
7144
7328
  server,
7145
7329
  schema22,
7146
7330
  metadata22,
7147
- calculateShipping
7331
+ validateDiscount
7148
7332
  );
7149
- registerTool(server, schema23, metadata23, stockCheck);
7150
7333
  registerTool(
7151
7334
  server,
7152
- schema24,
7153
- metadata24,
7154
- productDetail
7335
+ schema23,
7336
+ metadata23,
7337
+ calculateShipping
7155
7338
  );
7339
+ registerTool(server, schema24, metadata24, stockCheck);
7156
7340
  registerTool(
7157
7341
  server,
7158
7342
  schema25,
7159
7343
  metadata25,
7344
+ productDetail
7345
+ );
7346
+ registerTool(
7347
+ server,
7348
+ schema26,
7349
+ metadata26,
7160
7350
  productUpsert
7161
7351
  );
7162
7352
  }
7163
- registerTool(
7164
- server,
7165
- schema26,
7166
- metadata26,
7167
- getCollectionSchemaTool
7168
- );
7169
7353
  registerTool(
7170
7354
  server,
7171
7355
  schema27,
7172
7356
  metadata27,
7173
- handler
7357
+ getCollectionSchemaTool
7174
7358
  );
7175
7359
  registerTool(
7176
7360
  server,
7177
7361
  schema28,
7178
7362
  metadata28,
7179
- handler2
7363
+ handler
7180
7364
  );
7181
7365
  registerTool(
7182
7366
  server,
7183
7367
  schema29,
7184
7368
  metadata29,
7185
- listConfigurableFields
7369
+ handler2
7186
7370
  );
7187
7371
  registerTool(
7188
7372
  server,
7189
7373
  schema30,
7190
7374
  metadata30,
7191
- updateFieldConfig
7375
+ listConfigurableFields
7192
7376
  );
7193
7377
  registerTool(
7194
7378
  server,
7195
7379
  schema31,
7196
7380
  metadata31,
7197
- handler3
7381
+ updateFieldConfig
7198
7382
  );
7199
7383
  registerTool(
7200
7384
  server,
7201
7385
  schema32,
7202
7386
  metadata32,
7203
- handler4
7387
+ handler3
7204
7388
  );
7205
7389
  registerTool(
7206
7390
  server,
7207
7391
  schema33,
7208
7392
  metadata33,
7209
- handler5
7393
+ handler4
7210
7394
  );
7211
7395
  registerTool(
7212
7396
  server,
7213
7397
  schema34,
7214
7398
  metadata34,
7215
- handler6
7399
+ handler5
7216
7400
  );
7217
- registerPrompt(
7401
+ registerTool(
7218
7402
  server,
7219
7403
  schema35,
7220
7404
  metadata35,
7221
- sdkUsageGuide
7405
+ handler6
7222
7406
  );
7223
7407
  registerPrompt(
7224
7408
  server,
7225
7409
  schema36,
7226
7410
  metadata36,
7227
- collectionQueryHelp
7411
+ sdkUsageGuide
7228
7412
  );
7229
7413
  registerPrompt(
7230
7414
  server,
7231
7415
  schema37,
7232
7416
  metadata37,
7233
- orderFlowGuide
7417
+ collectionQueryHelp
7234
7418
  );
7235
7419
  registerPrompt(
7236
7420
  server,
7237
7421
  schema38,
7238
7422
  metadata38,
7423
+ orderFlowGuide
7424
+ );
7425
+ registerPrompt(
7426
+ server,
7427
+ schema39,
7428
+ metadata39,
7239
7429
  featureSetupGuide
7240
7430
  );
7241
7431
  registerStaticResource(
7242
7432
  server,
7243
7433
  mcpResourceUri("app-config"),
7244
- metadata39,
7434
+ metadata40,
7245
7435
  handler7
7246
7436
  );
7247
7437
  registerStaticResource(
7248
7438
  server,
7249
7439
  mcpResourceUri("collections-schema"),
7250
- metadata40,
7440
+ metadata41,
7251
7441
  handler8
7252
7442
  );
7253
7443
  registerStaticResource(
7254
7444
  server,
7255
7445
  mcpResourceUri("docs-getting-started"),
7256
- metadata41,
7446
+ metadata42,
7257
7447
  handler9
7258
7448
  );
7259
7449
  registerStaticResource(
7260
7450
  server,
7261
7451
  mcpResourceUri("docs-guides"),
7262
- metadata42,
7452
+ metadata43,
7263
7453
  handler10
7264
7454
  );
7265
7455
  registerStaticResource(
7266
7456
  server,
7267
7457
  mcpResourceUri("docs-api"),
7268
- metadata43,
7458
+ metadata44,
7269
7459
  handler11
7270
7460
  );
7271
7461
  registerStaticResource(
7272
7462
  server,
7273
7463
  mcpResourceUri("docs-query-builder"),
7274
- metadata44,
7464
+ metadata45,
7275
7465
  handler12
7276
7466
  );
7277
7467
  registerStaticResource(
7278
7468
  server,
7279
7469
  mcpResourceUri("docs-react-query"),
7280
- metadata45,
7470
+ metadata46,
7281
7471
  handler13
7282
7472
  );
7283
7473
  registerStaticResource(
7284
7474
  server,
7285
7475
  mcpResourceUri("docs-server-api"),
7286
- metadata46,
7476
+ metadata47,
7287
7477
  handler14
7288
7478
  );
7289
7479
  registerStaticResource(
7290
7480
  server,
7291
7481
  mcpResourceUri("docs-customer-auth"),
7292
- metadata47,
7482
+ metadata48,
7293
7483
  handler15
7294
7484
  );
7295
7485
  registerStaticResource(
7296
7486
  server,
7297
7487
  mcpResourceUri("docs-browser-vs-server"),
7298
- metadata48,
7488
+ metadata49,
7299
7489
  handler16
7300
7490
  );
7301
7491
  registerStaticResource(
7302
7492
  server,
7303
7493
  mcpResourceUri("docs-file-upload"),
7304
- metadata49,
7494
+ metadata50,
7305
7495
  handler17
7306
7496
  );
7307
7497
  registerStaticResource(
7308
7498
  server,
7309
7499
  mcpResourceUri("docs-webhook"),
7310
- metadata50,
7500
+ metadata51,
7311
7501
  handler18
7312
7502
  );
7313
7503
  registerStaticResource(
7314
7504
  server,
7315
7505
  mcpResourceUri("docs-product-detail"),
7316
- metadata51,
7506
+ metadata52,
7317
7507
  handler19
7318
7508
  );
7319
7509
  return server;