@01.software/sdk 0.46.1 → 0.49.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.
Files changed (57) hide show
  1. package/CHANGELOG.md +96 -1
  2. package/README.md +145 -14
  3. package/dist/client.cjs +485 -81
  4. package/dist/client.cjs.map +1 -1
  5. package/dist/client.d.cts +7 -6
  6. package/dist/client.d.ts +7 -6
  7. package/dist/client.js +485 -81
  8. package/dist/client.js.map +1 -1
  9. package/dist/{collection-client-BEGXnfQe.d.ts → collection-client-DnDt6EQz.d.ts} +4 -4
  10. package/dist/{collection-client-L2rEgBaR.d.cts → collection-client-XfGLPuTf.d.cts} +4 -4
  11. package/dist/{const-y0eipvnQ.d.cts → const-CBba4lDo.d.cts} +4 -4
  12. package/dist/{const-GYVwlXLr.d.ts → const-DCNV5Kq7.d.ts} +4 -4
  13. package/dist/errors.cjs +112 -16
  14. package/dist/errors.cjs.map +1 -1
  15. package/dist/errors.d.cts +13 -4
  16. package/dist/errors.d.ts +13 -4
  17. package/dist/errors.js +112 -16
  18. package/dist/errors.js.map +1 -1
  19. package/dist/{index-BfYL6Qb1.d.cts → index-CbKyoEzy.d.cts} +3 -3
  20. package/dist/{index-Bei4WlVw.d.ts → index-DUuIqUS8.d.ts} +3 -3
  21. package/dist/index.cjs +452 -104
  22. package/dist/index.cjs.map +1 -1
  23. package/dist/index.d.cts +8 -8
  24. package/dist/index.d.ts +8 -8
  25. package/dist/index.js +452 -104
  26. package/dist/index.js.map +1 -1
  27. package/dist/{payload-types-3WNyC0gk.d.cts → payload-types-MKbx5MuJ.d.cts} +309 -17
  28. package/dist/{payload-types-3WNyC0gk.d.ts → payload-types-MKbx5MuJ.d.ts} +309 -17
  29. package/dist/query.cjs +165 -43
  30. package/dist/query.cjs.map +1 -1
  31. package/dist/query.d.cts +5 -5
  32. package/dist/query.d.ts +5 -5
  33. package/dist/query.js +165 -43
  34. package/dist/query.js.map +1 -1
  35. package/dist/realtime.d.cts +2 -2
  36. package/dist/realtime.d.ts +2 -2
  37. package/dist/server.cjs +566 -81
  38. package/dist/server.cjs.map +1 -1
  39. package/dist/server.d.cts +8 -7
  40. package/dist/server.d.ts +8 -7
  41. package/dist/server.js +566 -81
  42. package/dist/server.js.map +1 -1
  43. package/dist/storefront-cache.cjs +70 -1
  44. package/dist/storefront-cache.cjs.map +1 -1
  45. package/dist/storefront-cache.js +70 -1
  46. package/dist/storefront-cache.js.map +1 -1
  47. package/dist/{types-mIROvhhP.d.ts → types-1UeOk1Uy.d.cts} +110 -8
  48. package/dist/{types-CAicTn-o.d.cts → types-BKr_2avj.d.cts} +2 -2
  49. package/dist/{types-CDJ2M-MJ.d.cts → types-Du4s5anw.d.ts} +110 -8
  50. package/dist/{types-DpSyNTxy.d.ts → types-L_nh-ED7.d.ts} +2 -2
  51. package/dist/ui/form.d.cts +1 -1
  52. package/dist/ui/form.d.ts +1 -1
  53. package/dist/ui/video.d.cts +1 -1
  54. package/dist/ui/video.d.ts +1 -1
  55. package/dist/webhook.d.cts +4 -4
  56. package/dist/webhook.d.ts +4 -4
  57. package/package.json +6 -5
package/dist/client.js CHANGED
@@ -2,6 +2,24 @@
2
2
  import { stringify } from "qs-esm";
3
3
 
4
4
  // src/core/errors.ts
5
+ var SDK_ERROR_BRAND = /* @__PURE__ */ Symbol.for("@01.software/sdk/SDKError");
6
+ var SDK_ERROR_TYPE_BRAND = /* @__PURE__ */ Symbol.for("@01.software/sdk/SDKError.type");
7
+ function defineSDKErrorBrand(error) {
8
+ Object.defineProperty(error, SDK_ERROR_BRAND, {
9
+ value: true,
10
+ enumerable: false,
11
+ configurable: false,
12
+ writable: false
13
+ });
14
+ }
15
+ function defineSDKErrorType(error, type) {
16
+ Object.defineProperty(error, SDK_ERROR_TYPE_BRAND, {
17
+ value: type,
18
+ enumerable: false,
19
+ configurable: false,
20
+ writable: false
21
+ });
22
+ }
5
23
  var SDKError = class extends Error {
6
24
  constructor(code, message, status, details, userMessage, suggestion, requestId) {
7
25
  super(message);
@@ -12,6 +30,7 @@ var SDKError = class extends Error {
12
30
  this.userMessage = userMessage;
13
31
  this.suggestion = suggestion;
14
32
  this.requestId = requestId;
33
+ defineSDKErrorBrand(this);
15
34
  if (Error.captureStackTrace) {
16
35
  Error.captureStackTrace(this, new.target);
17
36
  }
@@ -32,6 +51,7 @@ var SDKError = class extends Error {
32
51
  ...this.kind !== void 0 && { kind: this.kind },
33
52
  ...this.reason !== void 0 && { reason: this.reason },
34
53
  ...this.rawReason !== void 0 && { rawReason: this.rawReason },
54
+ ...this.apiReason !== void 0 && { apiReason: this.apiReason },
35
55
  ...this.retryable !== void 0 && { retryable: this.retryable },
36
56
  ...this.retryAfter !== void 0 && { retryAfter: this.retryAfter }
37
57
  };
@@ -39,34 +59,78 @@ var SDKError = class extends Error {
39
59
  };
40
60
  var COMMERCE_ERROR_CODES = [
41
61
  "validation_failed",
62
+ "bad_request",
42
63
  "unauthorized",
43
64
  "forbidden",
65
+ "account_suspended",
66
+ "key_invalid",
67
+ "pat_tenant_header_forbidden",
68
+ "tenant_mismatch",
69
+ "test_tenant_expired",
70
+ "token_invalid",
44
71
  "token_expired",
45
72
  "origin_not_allowed",
46
73
  "server_credentials_required",
74
+ "role_denied",
75
+ "scope_denied",
76
+ "feature_disabled",
47
77
  "not_found",
48
78
  "conflict",
79
+ "locked",
49
80
  "cart_revision_conflict",
50
81
  "rate_limit_exceeded",
51
82
  "usage_limit_exceeded",
52
83
  "service_unavailable",
53
84
  "idempotency_conflict",
54
85
  "idempotency_in_progress",
86
+ "idempotency_key_required",
87
+ "invalid_idempotency_key",
55
88
  "cart_not_active",
56
89
  "cart_locked",
57
90
  "cart_empty",
58
91
  "cart_market_unavailable",
59
92
  "cart_market_mismatch",
60
93
  "checkout_not_open",
94
+ "checkout_already_open",
61
95
  "payment_slot_held",
62
96
  "reservation_expired",
63
97
  "payment_session_not_cancelable",
98
+ "payment_session_conflict",
64
99
  "provider_identity_mismatch",
100
+ "payment_method_unavailable",
65
101
  "provider_unavailable",
66
102
  "lock_timeout",
67
103
  "price_changed",
68
104
  "pricing_fact_in_use",
69
105
  "insufficient_stock",
106
+ "reservation_conflict",
107
+ "stock_lock_unavailable",
108
+ "variant_not_found",
109
+ "variant_stock_write_failed",
110
+ "stock_invariant_violation",
111
+ "payment_confirmation_in_flight",
112
+ "checkout_reservation_release_requires_transaction",
113
+ "admission_metadata_invalid",
114
+ "admission_metadata_required",
115
+ "capacity_exceeded",
116
+ "occurrence_lock_unavailable",
117
+ "occurrence_not_open",
118
+ "admission_type_capacity_exceeded",
119
+ "admission_type_occurrence_mismatch",
120
+ "admission_hold_expired",
121
+ "admission_hold_checkout_item_conflict",
122
+ "admission_hold_checkout_conflict",
123
+ "admission_hold_quantity_mismatch",
124
+ "admission_hold_unbound",
125
+ "admission_hold_missing",
126
+ "admission_hold_checkout_item_missing",
127
+ "admission_hold_expiry_failed",
128
+ "admission_hold_expiry_requires_transaction",
129
+ "admission_hold_line_item_mismatch",
130
+ "admission_materialization_failed",
131
+ "variant_inactive",
132
+ "variant_product_mismatch",
133
+ "product_not_public",
70
134
  "market_not_found",
71
135
  "market_shipping_currency_unsupported",
72
136
  "missing_market_rate",
@@ -91,7 +155,11 @@ var COMMERCE_ERROR_CODES = [
91
155
  "discount_min_order_amount",
92
156
  "discount_currency_scope_required",
93
157
  "discount_allocation_method_unsupported",
94
- "currency_mismatch"
158
+ "currency_mismatch",
159
+ "customer_token_required",
160
+ "market_required",
161
+ "server_derived",
162
+ "internal_error"
95
163
  ];
96
164
  var COMMERCE_ERROR_CODE_SET = new Set(
97
165
  COMMERCE_ERROR_CODES
@@ -117,6 +185,12 @@ function commerceProtocolError(issue, trustedRequestId) {
117
185
  );
118
186
  }
119
187
  function parseCommerceErrorEnvelope(body, headerRequestId) {
188
+ if (headerRequestId === void 0) {
189
+ throw commerceProtocolError("missing_request_id_header");
190
+ }
191
+ if (headerRequestId.length === 0) {
192
+ throw commerceProtocolError("empty_request_id_header");
193
+ }
120
194
  if (!isPlainRecord(body)) {
121
195
  throw commerceProtocolError("expected_object", headerRequestId);
122
196
  }
@@ -126,7 +200,7 @@ function parseCommerceErrorEnvelope(body, headerRequestId) {
126
200
  if (typeof body.error !== "string" || body.error.length === 0 || typeof body.reason !== "string" || body.reason.length === 0 || typeof body.requestId !== "string" || body.requestId.length === 0 || body.retryable !== void 0 && typeof body.retryable !== "boolean" || body.details !== void 0 && !isPlainRecord(body.details)) {
127
201
  throw commerceProtocolError("invalid_field", headerRequestId);
128
202
  }
129
- if (headerRequestId && headerRequestId !== body.requestId) {
203
+ if (headerRequestId !== void 0 && headerRequestId !== body.requestId) {
130
204
  throw commerceProtocolError("request_id_mismatch", headerRequestId);
131
205
  }
132
206
  return {
@@ -151,8 +225,16 @@ function enhanceCommerceError(error, body, headerRequestId) {
151
225
  });
152
226
  return error;
153
227
  }
228
+ function enhanceNonCommerceError(error, reason) {
229
+ if (typeof reason === "string") Object.assign(error, { apiReason: reason });
230
+ return error;
231
+ }
232
+ function getSDKErrorReason(error) {
233
+ if (error.kind !== "commerce") return error.apiReason;
234
+ return error.reason === "unknown_commerce_error" ? error.rawReason : error.reason;
235
+ }
154
236
  function isCommerceSDKError(error) {
155
- if (!(error instanceof SDKError) || error.kind !== "commerce") return false;
237
+ if (!isSDKError(error) || error.kind !== "commerce") return false;
156
238
  if (typeof error.requestId !== "string" || typeof error.retryable !== "boolean" || error.retryAfter !== void 0 && (!Number.isSafeInteger(error.retryAfter) || error.retryAfter < 0) || typeof error.reason !== "string") {
157
239
  return false;
158
240
  }
@@ -162,12 +244,14 @@ var NetworkError = class extends SDKError {
162
244
  constructor(message, status, details, userMessage, suggestion) {
163
245
  super("NETWORK_ERROR", message, status, details, userMessage, suggestion);
164
246
  this.name = "NetworkError";
247
+ defineSDKErrorType(this, "NetworkError");
165
248
  }
166
249
  };
167
250
  var ValidationError = class extends SDKError {
168
251
  constructor(message, details, userMessage, suggestion, status = 400) {
169
252
  super("VALIDATION_ERROR", message, status, details, userMessage, suggestion);
170
253
  this.name = "ValidationError";
254
+ defineSDKErrorType(this, "ValidationError");
171
255
  }
172
256
  };
173
257
  var ApiError = class extends SDKError {
@@ -182,24 +266,28 @@ var ApiError = class extends SDKError {
182
266
  requestId
183
267
  );
184
268
  this.name = "ApiError";
269
+ defineSDKErrorType(this, "ApiError");
185
270
  }
186
271
  };
187
272
  var ConfigError = class extends SDKError {
188
273
  constructor(message, details, userMessage, suggestion) {
189
274
  super("CONFIG_ERROR", message, void 0, details, userMessage, suggestion);
190
275
  this.name = "ConfigError";
276
+ defineSDKErrorType(this, "ConfigError");
191
277
  }
192
278
  };
193
279
  var TimeoutError = class extends SDKError {
194
280
  constructor(message = "Request timed out.", details, userMessage, suggestion) {
195
281
  super("TIMEOUT_ERROR", message, 408, details, userMessage, suggestion);
196
282
  this.name = "TimeoutError";
283
+ defineSDKErrorType(this, "TimeoutError");
197
284
  }
198
285
  };
199
286
  var GoneError = class extends SDKError {
200
287
  constructor(message = "The requested resource is no longer available.", details, userMessage, suggestion) {
201
288
  super("GONE_ERROR", message, 410, details, userMessage, suggestion);
202
289
  this.name = "GoneError";
290
+ defineSDKErrorType(this, "GoneError");
203
291
  }
204
292
  };
205
293
  var ServiceUnavailableError = class extends SDKError {
@@ -214,6 +302,7 @@ var ServiceUnavailableError = class extends SDKError {
214
302
  );
215
303
  this.name = "ServiceUnavailableError";
216
304
  this.retryAfter = retryAfter;
305
+ defineSDKErrorType(this, "ServiceUnavailableError");
217
306
  }
218
307
  };
219
308
  var UsageLimitError = class extends SDKError {
@@ -221,6 +310,7 @@ var UsageLimitError = class extends SDKError {
221
310
  super("USAGE_LIMIT_ERROR", message, 429, details, userMessage, suggestion);
222
311
  this.name = "UsageLimitError";
223
312
  this.usage = usage;
313
+ defineSDKErrorType(this, "UsageLimitError");
224
314
  }
225
315
  toJSON() {
226
316
  return {
@@ -241,6 +331,7 @@ var AuthError = class extends SDKError {
241
331
  requestId
242
332
  );
243
333
  this.name = "AuthError";
334
+ defineSDKErrorType(this, "AuthError");
244
335
  }
245
336
  };
246
337
  var PermissionError = class extends SDKError {
@@ -255,6 +346,7 @@ var PermissionError = class extends SDKError {
255
346
  requestId
256
347
  );
257
348
  this.name = "PermissionError";
349
+ defineSDKErrorType(this, "PermissionError");
258
350
  }
259
351
  };
260
352
  var NotFoundError = class extends SDKError {
@@ -269,12 +361,14 @@ var NotFoundError = class extends SDKError {
269
361
  requestId
270
362
  );
271
363
  this.name = "NotFoundError";
364
+ defineSDKErrorType(this, "NotFoundError");
272
365
  }
273
366
  };
274
367
  var ConflictError = class extends SDKError {
275
368
  constructor(message, details, userMessage, suggestion, requestId) {
276
369
  super("conflict", message, 409, details, userMessage, suggestion, requestId);
277
370
  this.name = "ConflictError";
371
+ defineSDKErrorType(this, "ConflictError");
278
372
  }
279
373
  };
280
374
  var RateLimitError = class extends SDKError {
@@ -290,8 +384,64 @@ var RateLimitError = class extends SDKError {
290
384
  );
291
385
  this.name = "RateLimitError";
292
386
  this.retryAfter = retryAfter;
387
+ defineSDKErrorType(this, "RateLimitError");
293
388
  }
294
389
  };
390
+ function hasBrandedSDKErrorShape(error) {
391
+ if (error === null || typeof error !== "object") return false;
392
+ const candidate = error;
393
+ return candidate[SDK_ERROR_BRAND] === true && typeof candidate.name === "string" && typeof candidate.code === "string" && typeof candidate.message === "string" && (candidate.status === void 0 || typeof candidate.status === "number") && (candidate.userMessage === void 0 || typeof candidate.userMessage === "string") && (candidate.suggestion === void 0 || typeof candidate.suggestion === "string") && (candidate.requestId === void 0 || typeof candidate.requestId === "string") && (candidate.kind === void 0 || candidate.kind === "commerce") && (candidate.reason === void 0 || typeof candidate.reason === "string") && (candidate.rawReason === void 0 || typeof candidate.rawReason === "string") && (candidate.apiReason === void 0 || typeof candidate.apiReason === "string") && (candidate.retryable === void 0 || typeof candidate.retryable === "boolean") && (candidate.retryAfter === void 0 || typeof candidate.retryAfter === "number") && typeof candidate.getUserMessage === "function" && typeof candidate.toJSON === "function";
394
+ }
395
+ function hasSDKErrorType(error, type) {
396
+ return hasBrandedSDKErrorShape(error) && error[SDK_ERROR_TYPE_BRAND] === type;
397
+ }
398
+ function isSDKError(error) {
399
+ return error instanceof SDKError || hasBrandedSDKErrorShape(error);
400
+ }
401
+ function isNetworkError(error) {
402
+ return error instanceof NetworkError || hasSDKErrorType(error, "NetworkError");
403
+ }
404
+ function isValidationError(error) {
405
+ if (error instanceof ValidationError || hasSDKErrorType(error, "ValidationError")) {
406
+ return true;
407
+ }
408
+ if (error == null || typeof error !== "object") return false;
409
+ const candidate = error;
410
+ return candidate.name === "ValidationError" && candidate.code === "VALIDATION_ERROR" && typeof candidate.message === "string" && typeof candidate.getUserMessage === "function" && typeof candidate.toJSON === "function";
411
+ }
412
+ function isApiError(error) {
413
+ return error instanceof ApiError || hasSDKErrorType(error, "ApiError");
414
+ }
415
+ function isConfigError(error) {
416
+ return error instanceof ConfigError || hasSDKErrorType(error, "ConfigError");
417
+ }
418
+ function isTimeoutError(error) {
419
+ return error instanceof TimeoutError || hasSDKErrorType(error, "TimeoutError");
420
+ }
421
+ function isGoneError(error) {
422
+ return error instanceof GoneError || hasSDKErrorType(error, "GoneError");
423
+ }
424
+ function isServiceUnavailableError(error) {
425
+ return error instanceof ServiceUnavailableError || hasSDKErrorType(error, "ServiceUnavailableError");
426
+ }
427
+ function isUsageLimitError(error) {
428
+ return error instanceof UsageLimitError || hasSDKErrorType(error, "UsageLimitError");
429
+ }
430
+ function isAuthError(error) {
431
+ return error instanceof AuthError || hasSDKErrorType(error, "AuthError");
432
+ }
433
+ function isPermissionError(error) {
434
+ return error instanceof PermissionError || hasSDKErrorType(error, "PermissionError");
435
+ }
436
+ function isNotFoundError(error) {
437
+ return error instanceof NotFoundError || hasSDKErrorType(error, "NotFoundError");
438
+ }
439
+ function isConflictError(error) {
440
+ return error instanceof ConflictError || hasSDKErrorType(error, "ConflictError");
441
+ }
442
+ function isRateLimitError(error) {
443
+ return error instanceof RateLimitError || hasSDKErrorType(error, "RateLimitError");
444
+ }
295
445
  var createNetworkError = (message, status, details, userMessage, suggestion) => new NetworkError(message, status, details, userMessage, suggestion);
296
446
  var createValidationError = (message, details, userMessage, suggestion, status) => new ValidationError(message, details, userMessage, suggestion, status);
297
447
  var createApiError = (message, status, details, userMessage, suggestion, requestId) => new ApiError(message, status, details, userMessage, suggestion, requestId);
@@ -501,7 +651,7 @@ function mapResponseToError(status, parsed, details, requestId, retryAfter, erro
501
651
  if (retryAfter !== void 0) {
502
652
  Object.assign(withRequestId, { retryAfter });
503
653
  }
504
- return errorFamily === "commerce" ? enhanceCommerceError(withRequestId, parsed.body, requestId) : withRequestId;
654
+ return errorFamily === "commerce" ? enhanceCommerceError(withRequestId, parsed.body, requestId) : enhanceNonCommerceError(withRequestId, parsed.reason);
505
655
  };
506
656
  if (status === 400 || status === 422) {
507
657
  return finalize(
@@ -688,7 +838,7 @@ async function httpFetch(url, options) {
688
838
  ),
689
839
  requestId
690
840
  );
691
- throw errorFamily === "commerce" ? enhanceCommerceError(usageError, parsed.body, requestId) : usageError;
841
+ throw errorFamily === "commerce" ? enhanceCommerceError(usageError, parsed.body, requestId) : enhanceNonCommerceError(usageError, parsed.reason);
692
842
  }
693
843
  if (response.status === 401 && onUnauthorized && customerToken && !hasRetried401 && (commerceEnvelope?.reason ?? parsed.reason) === "token_expired") {
694
844
  hasRetried401 = true;
@@ -1103,7 +1253,10 @@ async function parseApiResponse(response, endpoint2, options = {}) {
1103
1253
  return parsed;
1104
1254
  }
1105
1255
  const data = parsed;
1106
- if (data.error) {
1256
+ const hasCommerceEnvelopeSignal = options.errorFamily === "commerce" && ["error", "reason", "requestId", "retryable", "details"].some(
1257
+ (key) => Object.prototype.hasOwnProperty.call(data, key)
1258
+ );
1259
+ if (data.error || hasCommerceEnvelopeSignal) {
1107
1260
  const errorMessage = typeof data.error === "string" ? data.error : "Unknown API error";
1108
1261
  const reason = typeof data.reason === "string" ? data.reason : void 0;
1109
1262
  const requestId = response.headers.get("x-request-id") ?? void 0;
@@ -1132,19 +1285,21 @@ async function parseApiResponse(response, endpoint2, options = {}) {
1132
1285
  }
1133
1286
  const withRequestId = attachRequestId(error, requestId);
1134
1287
  if (retryAfter !== void 0) Object.assign(withRequestId, { retryAfter });
1135
- throw options.errorFamily === "commerce" ? enhanceCommerceError(withRequestId, data, requestId) : withRequestId;
1288
+ throw options.errorFamily === "commerce" ? enhanceCommerceError(withRequestId, data, requestId) : enhanceNonCommerceError(withRequestId, reason);
1136
1289
  }
1137
1290
  return data;
1138
1291
  }
1139
1292
 
1140
1293
  // ../../internal/http-contracts/src/index.ts
1141
1294
  var operationBrand = /* @__PURE__ */ Symbol("sdk-http-operation");
1142
- var operation = (collection, method, path) => Object.freeze({
1295
+ var operation = (collection, method, path, errorFamily) => Object.freeze({
1143
1296
  [operationBrand]: true,
1144
1297
  collection,
1145
1298
  method,
1146
- path
1299
+ path,
1300
+ ...errorFamily && { errorFamily }
1147
1301
  });
1302
+ var strictCommerceOperation = (collection, method, path) => operation(collection, method, path, "commerce");
1148
1303
  var COMMERCE_ENDPOINT_OPERATIONS = {
1149
1304
  products: {
1150
1305
  detail: operation("products", "get", "/detail"),
@@ -1177,13 +1332,13 @@ var COMMERCE_ENDPOINT_OPERATIONS = {
1177
1332
  byPayment: operation("orders", "get", "/by-payment"),
1178
1333
  cancel: operation("orders", "post", "/cancel"),
1179
1334
  resolveCancelRefund: operation("orders", "post", "/resolve-cancel-refund"),
1180
- checkout: operation("orders", "post", "/checkout"),
1335
+ checkout: strictCommerceOperation("orders", "post", "/checkout"),
1181
1336
  createFulfillment: operation("orders", "post", "/create-fulfillment"),
1182
1337
  updateFulfillment: operation("orders", "post", "/update-fulfillment")
1183
1338
  },
1184
1339
  checkouts: {
1185
- detail: operation("checkouts", "post", "/detail"),
1186
- query: operation("checkouts", "post", "/query")
1340
+ detail: strictCommerceOperation("checkouts", "post", "/detail"),
1341
+ query: strictCommerceOperation("checkouts", "post", "/query")
1187
1342
  },
1188
1343
  transactions: {
1189
1344
  update: operation("transactions", "post", "/update")
@@ -1204,29 +1359,58 @@ var COMMERCE_ENDPOINT_OPERATIONS = {
1204
1359
  bulkImport: operation("fulfillments", "post", "/bulk-import")
1205
1360
  },
1206
1361
  carts: {
1207
- create: operation("carts", "post", "/create"),
1208
- retrieve: operation("carts", "post", "/retrieve"),
1209
- mine: operation("carts", "post", "/mine"),
1210
- merge: operation("carts", "post", "/merge"),
1211
- addItem: operation("carts", "post", "/add-item"),
1212
- updateItem: operation("carts", "post", "/update-item"),
1213
- removeItem: operation("carts", "post", "/remove-item"),
1214
- updateDiscountCodes: operation("carts", "post", "/update-discount-codes"),
1215
- updateAttributes: operation("carts", "post", "/update-attributes"),
1216
- clear: operation("carts", "post", "/clear")
1362
+ create: strictCommerceOperation("carts", "post", "/create"),
1363
+ retrieve: strictCommerceOperation("carts", "post", "/retrieve"),
1364
+ mine: strictCommerceOperation("carts", "post", "/mine"),
1365
+ merge: strictCommerceOperation("carts", "post", "/merge"),
1366
+ addItem: strictCommerceOperation("carts", "post", "/add-item"),
1367
+ updateItem: strictCommerceOperation("carts", "post", "/update-item"),
1368
+ removeItem: strictCommerceOperation("carts", "post", "/remove-item"),
1369
+ updateDiscountCodes: strictCommerceOperation(
1370
+ "carts",
1371
+ "post",
1372
+ "/update-discount-codes"
1373
+ ),
1374
+ updateAttributes: strictCommerceOperation(
1375
+ "carts",
1376
+ "post",
1377
+ "/update-attributes"
1378
+ ),
1379
+ clear: strictCommerceOperation("carts", "post", "/clear")
1217
1380
  },
1218
1381
  paymentSessions: {
1219
- create: operation("payment-sessions", "post", "/create"),
1220
- retrieve: operation("payment-sessions", "post", "/retrieve"),
1221
- cancel: operation("payment-sessions", "post", "/cancel"),
1382
+ create: strictCommerceOperation("payment-sessions", "post", "/create"),
1383
+ retrieve: strictCommerceOperation("payment-sessions", "post", "/retrieve"),
1384
+ cancel: strictCommerceOperation("payment-sessions", "post", "/cancel"),
1222
1385
  server: {
1223
- create: operation("payment-sessions", "post", "/server/create"),
1224
- retrieve: operation("payment-sessions", "post", "/server/retrieve"),
1225
- cancel: operation("payment-sessions", "post", "/server/cancel"),
1226
- confirm: operation("payment-sessions", "post", "/server/confirm")
1386
+ create: strictCommerceOperation(
1387
+ "payment-sessions",
1388
+ "post",
1389
+ "/server/create"
1390
+ ),
1391
+ retrieve: strictCommerceOperation(
1392
+ "payment-sessions",
1393
+ "post",
1394
+ "/server/retrieve"
1395
+ ),
1396
+ cancel: strictCommerceOperation(
1397
+ "payment-sessions",
1398
+ "post",
1399
+ "/server/cancel"
1400
+ ),
1401
+ confirm: strictCommerceOperation(
1402
+ "payment-sessions",
1403
+ "post",
1404
+ "/server/confirm"
1405
+ )
1227
1406
  },
1228
1407
  custom: {
1229
1408
  create: operation("orders", "post", "/custom-payment-sessions"),
1409
+ retrieve: operation(
1410
+ "orders",
1411
+ "post",
1412
+ "/custom-payment-sessions/retrieve"
1413
+ ),
1230
1414
  confirm: operation("orders", "post", "/custom-payment-sessions/confirm")
1231
1415
  }
1232
1416
  },
@@ -1252,6 +1436,11 @@ var EVENTS_ENDPOINT_OPERATIONS = {
1252
1436
  )
1253
1437
  }
1254
1438
  };
1439
+ var COMMUNITY_ENDPOINT_OPERATIONS = {
1440
+ posts: {
1441
+ detail: operation("posts", "get", "/detail")
1442
+ }
1443
+ };
1255
1444
  function resolveOperationTemplate(descriptor) {
1256
1445
  return descriptor.collection ? `/api/${descriptor.collection}${descriptor.path}` : `/api${descriptor.path}`;
1257
1446
  }
@@ -1283,6 +1472,9 @@ var sharedEndpoint = (descriptor) => descriptor;
1283
1472
  function resolveOperationMethod2(descriptor) {
1284
1473
  return "collection" in descriptor ? resolveOperationMethod(descriptor) : descriptor.method;
1285
1474
  }
1475
+ function resolveOperationErrorFamily(descriptor) {
1476
+ return "collection" in descriptor ? descriptor.errorFamily : void 0;
1477
+ }
1286
1478
  function resolveOperationPath2(descriptor, options) {
1287
1479
  if ("collection" in descriptor) {
1288
1480
  return resolveOperationPath(descriptor, options);
@@ -1317,12 +1509,12 @@ var COMMERCE_ENDPOINTS = {
1317
1509
  updateFulfillment: endpoint("POST", "/api/orders/update-fulfillment")
1318
1510
  },
1319
1511
  checkouts: {
1320
- create: endpoint("POST", "/api/orders/checkout"),
1321
- retrieve: endpoint("POST", "/api/checkouts/detail"),
1512
+ create: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.orders.checkout),
1513
+ retrieve: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.checkouts.detail),
1322
1514
  server: {
1323
- create: endpoint("POST", "/api/orders/checkout"),
1324
- retrieve: endpoint("POST", "/api/checkouts/detail"),
1325
- query: endpoint("POST", "/api/checkouts/query")
1515
+ create: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.orders.checkout),
1516
+ retrieve: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.checkouts.detail),
1517
+ query: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.checkouts.query)
1326
1518
  }
1327
1519
  },
1328
1520
  returns: {
@@ -1340,10 +1532,10 @@ var COMMERCE_ENDPOINTS = {
1340
1532
  bulkImport: endpoint("POST", "/api/fulfillments/bulk-import")
1341
1533
  },
1342
1534
  carts: {
1343
- create: endpoint("POST", "/api/carts/create"),
1535
+ create: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.carts.create),
1344
1536
  retrieve: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.carts.retrieve),
1345
- mine: endpoint("POST", "/api/carts/mine"),
1346
- merge: endpoint("POST", "/api/carts/merge"),
1537
+ mine: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.carts.mine),
1538
+ merge: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.carts.merge),
1347
1539
  server: {
1348
1540
  // Server credentials are an authorization lane, not a second Cart
1349
1541
  // transport. These must stay bound to the registered shared operations.
@@ -1363,29 +1555,46 @@ var COMMERCE_ENDPOINTS = {
1363
1555
  clear: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.carts.clear)
1364
1556
  },
1365
1557
  addItem: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.carts.addItem),
1366
- updateItem: endpoint("POST", "/api/carts/update-item"),
1367
- removeItem: endpoint("POST", "/api/carts/remove-item"),
1368
- updateDiscountCodes: endpoint("POST", "/api/carts/update-discount-codes"),
1369
- updateAttributes: endpoint("POST", "/api/carts/update-attributes"),
1370
- clear: endpoint("POST", "/api/carts/clear")
1558
+ updateItem: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.carts.updateItem),
1559
+ removeItem: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.carts.removeItem),
1560
+ updateDiscountCodes: sharedEndpoint(
1561
+ COMMERCE_ENDPOINT_OPERATIONS.carts.updateDiscountCodes
1562
+ ),
1563
+ updateAttributes: sharedEndpoint(
1564
+ COMMERCE_ENDPOINT_OPERATIONS.carts.updateAttributes
1565
+ ),
1566
+ clear: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.carts.clear)
1371
1567
  },
1372
1568
  paymentSessions: {
1373
- create: endpoint("POST", "/api/payment-sessions/create"),
1374
- retrieve: endpoint("POST", "/api/payment-sessions/retrieve"),
1375
- cancel: endpoint("POST", "/api/payment-sessions/cancel"),
1569
+ create: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.paymentSessions.create),
1570
+ retrieve: sharedEndpoint(
1571
+ COMMERCE_ENDPOINT_OPERATIONS.paymentSessions.retrieve
1572
+ ),
1573
+ cancel: sharedEndpoint(COMMERCE_ENDPOINT_OPERATIONS.paymentSessions.cancel),
1376
1574
  custom: {
1377
1575
  create: sharedEndpoint(
1378
1576
  COMMERCE_ENDPOINT_OPERATIONS.paymentSessions.custom.create
1379
1577
  ),
1578
+ retrieve: sharedEndpoint(
1579
+ COMMERCE_ENDPOINT_OPERATIONS.paymentSessions.custom.retrieve
1580
+ ),
1380
1581
  confirm: sharedEndpoint(
1381
1582
  COMMERCE_ENDPOINT_OPERATIONS.paymentSessions.custom.confirm
1382
1583
  )
1383
1584
  },
1384
1585
  server: {
1385
- create: endpoint("POST", "/api/payment-sessions/server/create"),
1386
- retrieve: endpoint("POST", "/api/payment-sessions/server/retrieve"),
1387
- cancel: endpoint("POST", "/api/payment-sessions/server/cancel"),
1388
- confirm: endpoint("POST", "/api/payment-sessions/server/confirm")
1586
+ create: sharedEndpoint(
1587
+ COMMERCE_ENDPOINT_OPERATIONS.paymentSessions.server.create
1588
+ ),
1589
+ retrieve: sharedEndpoint(
1590
+ COMMERCE_ENDPOINT_OPERATIONS.paymentSessions.server.retrieve
1591
+ ),
1592
+ cancel: sharedEndpoint(
1593
+ COMMERCE_ENDPOINT_OPERATIONS.paymentSessions.server.cancel
1594
+ ),
1595
+ confirm: sharedEndpoint(
1596
+ COMMERCE_ENDPOINT_OPERATIONS.paymentSessions.server.confirm
1597
+ )
1389
1598
  }
1390
1599
  },
1391
1600
  shippingPolicies: {
@@ -1476,7 +1685,8 @@ var CustomerScopedApi = class {
1476
1685
  return this.transport.request(resolveOperationPath2(endpoint2, options), {
1477
1686
  method: resolveOperationMethod2(endpoint2),
1478
1687
  body,
1479
- headers: options?.headers
1688
+ headers: options?.headers,
1689
+ errorFamily: resolveOperationErrorFamily(endpoint2)
1480
1690
  });
1481
1691
  }
1482
1692
  };
@@ -1498,15 +1708,33 @@ function unwrapPayloadDoc(value) {
1498
1708
  }
1499
1709
  return value;
1500
1710
  }
1711
+ function hasCanonicalNotFoundReason(error) {
1712
+ return getSDKErrorReason(error) === "not_found";
1713
+ }
1501
1714
  var CommunityClient = class extends RawCustomerScopedApi {
1502
1715
  constructor(options) {
1503
1716
  super("CommunityClient", { ...options, requiresCredential: false });
1717
+ this.requiresSafePublicRawReads = !options.secretKey;
1504
1718
  }
1505
1719
  buildQuery(params) {
1506
1720
  if (!params) return "";
1507
1721
  const entries = Object.entries(params).filter((e) => e[1] !== void 0).map(([k, v]) => [k, String(v)]);
1508
1722
  return entries.length ? `?${new URLSearchParams(entries).toString()}` : "";
1509
1723
  }
1724
+ withSafePublicRawReadQuery(query) {
1725
+ if (!this.requiresSafePublicRawReads) return query;
1726
+ if (!query) return "?depth=0&joins=false";
1727
+ return `?depth=0&joins=false&${query.slice(1)}`;
1728
+ }
1729
+ buildSafePublicRawListQuery(params) {
1730
+ if (!this.requiresSafePublicRawReads) {
1731
+ return this.buildQuery(params);
1732
+ }
1733
+ const queryParams = {};
1734
+ if (params?.page !== void 0) queryParams.page = params.page;
1735
+ if (params?.limit !== void 0) queryParams.limit = params.limit;
1736
+ return this.withSafePublicRawReadQuery(this.buildQuery(queryParams));
1737
+ }
1510
1738
  buildPostsListQuery(params) {
1511
1739
  const urlParams = new URLSearchParams();
1512
1740
  const sort = params?.sort ?? DEFAULT_POST_LIST_SORT;
@@ -1566,15 +1794,35 @@ var CommunityClient = class extends RawCustomerScopedApi {
1566
1794
  "GET"
1567
1795
  );
1568
1796
  }
1797
+ /**
1798
+ * Public post detail projected by the same allowlist as the public feed.
1799
+ * Missing, hidden, and cross-tenant posts all resolve to `null`.
1800
+ */
1801
+ async getPost(params) {
1802
+ const query = new URLSearchParams({ postId: params.postId });
1803
+ try {
1804
+ return await this.execute(
1805
+ resolveOperationPath(COMMUNITY_ENDPOINT_OPERATIONS.posts.detail, {
1806
+ query
1807
+ }),
1808
+ resolveOperationMethod(COMMUNITY_ENDPOINT_OPERATIONS.posts.detail)
1809
+ );
1810
+ } catch (error) {
1811
+ if (error instanceof NotFoundError && hasCanonicalNotFoundReason(error)) {
1812
+ return null;
1813
+ }
1814
+ throw error;
1815
+ }
1816
+ }
1569
1817
  listPostCategories(params) {
1570
1818
  return this.execute(
1571
- `/api/post-categories${this.buildQuery(params)}`,
1819
+ `/api/post-categories${this.buildSafePublicRawListQuery(params)}`,
1572
1820
  "GET"
1573
1821
  );
1574
1822
  }
1575
1823
  listPostTags(params) {
1576
1824
  return this.execute(
1577
- `/api/post-tags${this.buildQuery(params)}`,
1825
+ `/api/post-tags${this.buildSafePublicRawListQuery(params)}`,
1578
1826
  "GET"
1579
1827
  );
1580
1828
  }
@@ -1740,7 +1988,7 @@ var CommunityClient = class extends RawCustomerScopedApi {
1740
1988
  }
1741
1989
  getReactionTypes() {
1742
1990
  return this.execute(
1743
- "/api/reaction-types?limit=100",
1991
+ `/api/reaction-types${this.buildSafePublicRawListQuery({ limit: 100 })}`,
1744
1992
  "GET"
1745
1993
  );
1746
1994
  }
@@ -1768,11 +2016,17 @@ var CommunityClient = class extends RawCustomerScopedApi {
1768
2016
  }
1769
2017
  // Profiles
1770
2018
  listProfileLists(params) {
1771
- return this.execute(`/api/customer-profile-lists${this.buildQuery(params)}`, "GET");
2019
+ return this.execute(
2020
+ `/api/customer-profile-lists${this.buildSafePublicRawListQuery(params)}`,
2021
+ "GET"
2022
+ );
1772
2023
  }
1773
2024
  async getProfileList(params) {
1774
2025
  const query = "slug" in params ? `?where[slug][equals]=${encodeURIComponent(params.slug)}&limit=1` : `?where[id][equals]=${encodeURIComponent(params.id)}&limit=1`;
1775
- const res = await this.execute(`/api/customer-profile-lists${query}`, "GET");
2026
+ const res = await this.execute(
2027
+ `/api/customer-profile-lists${this.withSafePublicRawReadQuery(query)}`,
2028
+ "GET"
2029
+ );
1776
2030
  return res.docs[0] ?? null;
1777
2031
  }
1778
2032
  updatePublicProfile(body) {
@@ -1885,7 +2139,7 @@ var ORDER_PRIMARY_DISPLAY_STATUSES = [
1885
2139
  ];
1886
2140
  var CHECKOUT_STATUSES = ["open", "placed", "abandoned"];
1887
2141
  var ABANDONED_REASONS = ["expired", "customer", "operator"];
1888
- var PAYMENT_PROVIDERS = ["toss"];
2142
+ var PAYMENT_PROVIDERS = ["toss", "portone"];
1889
2143
  var PAYMENT_PROVIDER_STATUSES = [
1890
2144
  "requires_payment_method",
1891
2145
  "requires_action",
@@ -3058,8 +3312,101 @@ function validateRequiredReconciliation(value, allowed, resource, path) {
3058
3312
  previous = current;
3059
3313
  });
3060
3314
  }
3061
- function validateNextAction(value, resource, path) {
3315
+ function validateNextAction(value, provider, resource, path) {
3062
3316
  const action = record(value, resource, path);
3317
+ if (provider === "portone") {
3318
+ if (action.type === "portone_sdk") {
3319
+ exact(
3320
+ action,
3321
+ [
3322
+ "type",
3323
+ "version",
3324
+ "storeId",
3325
+ "channelKey",
3326
+ "paymentId",
3327
+ "orderName",
3328
+ "totalAmount",
3329
+ "currency",
3330
+ "payMethod",
3331
+ "redirectUrl"
3332
+ ],
3333
+ [],
3334
+ resource,
3335
+ path
3336
+ );
3337
+ if (action.version !== "v2") fail(resource, `${path}.version`, "v2");
3338
+ for (const key of ["storeId", "channelKey"]) {
3339
+ boundedString(action[key], 255, resource, `${path}.${key}`);
3340
+ }
3341
+ const paymentId = boundedString(
3342
+ action.paymentId,
3343
+ 40,
3344
+ resource,
3345
+ `${path}.paymentId`
3346
+ );
3347
+ if (!/^[A-Za-z0-9]{6,40}$/.test(paymentId)) {
3348
+ fail(
3349
+ resource,
3350
+ `${path}.paymentId`,
3351
+ "6-40 ASCII alphanumeric characters"
3352
+ );
3353
+ }
3354
+ boundedString(
3355
+ action.orderName,
3356
+ MAX_COMMERCE_SHORT_TEXT_LENGTH,
3357
+ resource,
3358
+ `${path}.orderName`
3359
+ );
3360
+ positiveInteger(action.totalAmount, resource, `${path}.totalAmount`);
3361
+ if (action.currency !== "CURRENCY_KRW") {
3362
+ fail(resource, `${path}.currency`, "CURRENCY_KRW");
3363
+ }
3364
+ if (action.payMethod !== "CARD")
3365
+ fail(resource, `${path}.payMethod`, "CARD");
3366
+ const redirectUrl = boundedString(
3367
+ action.redirectUrl,
3368
+ 2048,
3369
+ resource,
3370
+ `${path}.redirectUrl`
3371
+ );
3372
+ try {
3373
+ const parsed = new URL(redirectUrl);
3374
+ const loopback = parsed.protocol === "http:" && (parsed.hostname === "localhost" || parsed.hostname === "127.0.0.1");
3375
+ if (!loopback && parsed.protocol !== "https:" || parsed.username || parsed.password)
3376
+ throw new Error("unsafe redirect URL");
3377
+ } catch {
3378
+ fail(
3379
+ resource,
3380
+ `${path}.redirectUrl`,
3381
+ "HTTPS or loopback URL without embedded credentials"
3382
+ );
3383
+ }
3384
+ return;
3385
+ }
3386
+ exact(action, ["type", "checkoutUrl"], [], resource, path);
3387
+ if (action.type !== "portone_checkout") {
3388
+ fail(resource, `${path}.type`, "portone_checkout | portone_sdk");
3389
+ }
3390
+ const checkoutUrl = boundedString(
3391
+ action.checkoutUrl,
3392
+ 2048,
3393
+ resource,
3394
+ `${path}.checkoutUrl`
3395
+ );
3396
+ try {
3397
+ const parsed = new URL(checkoutUrl);
3398
+ if (parsed.protocol !== "https:" || parsed.username !== "" || parsed.password !== "") {
3399
+ throw new Error("unsafe checkout URL");
3400
+ }
3401
+ } catch {
3402
+ fail(
3403
+ resource,
3404
+ `${path}.checkoutUrl`,
3405
+ "absolute HTTPS URL without embedded credentials"
3406
+ );
3407
+ }
3408
+ return;
3409
+ }
3063
3410
  exact(
3064
3411
  action,
3065
3412
  [
@@ -3110,10 +3457,18 @@ function validateNextAction(value, resource, path) {
3110
3457
  if (action.customerEmail !== void 0)
3111
3458
  validateCustomer({ email: action.customerEmail }, resource, path);
3112
3459
  }
3113
- function validatePublicPaymentSession(value) {
3460
+ function validatePublicPaymentSession(value, expectedProvider) {
3114
3461
  const resource = "PaymentSession";
3115
3462
  const session = record(value, resource, "$");
3116
- enumValue(session.provider, PAYMENT_PROVIDERS, resource, "$.provider");
3463
+ const provider = enumValue(
3464
+ session.provider,
3465
+ PAYMENT_PROVIDERS,
3466
+ resource,
3467
+ "$.provider"
3468
+ );
3469
+ if (expectedProvider !== void 0 && provider !== expectedProvider) {
3470
+ fail(resource, "$.provider", expectedProvider);
3471
+ }
3117
3472
  const status = enumValue(
3118
3473
  session.providerStatus,
3119
3474
  PAYMENT_PROVIDER_STATUSES,
@@ -3150,7 +3505,12 @@ function validatePublicPaymentSession(value) {
3150
3505
  }
3151
3506
  if (!("nextAction" in session))
3152
3507
  fail(resource, "$.nextAction", "required field");
3153
- validateNextAction(session.nextAction, resource, "$.nextAction");
3508
+ validateNextAction(
3509
+ session.nextAction,
3510
+ provider,
3511
+ resource,
3512
+ "$.nextAction"
3513
+ );
3154
3514
  } else if (session.sessionRole === "residual") {
3155
3515
  if (session.presentationStatus !== "suppressed" || session.finalizationStatus !== "not_ready") {
3156
3516
  fail(resource, "$", "suppressed residual not-ready state");
@@ -3889,8 +4249,8 @@ var PaymentSessionApi = class extends CustomerScopedApi {
3889
4249
  }
3890
4250
  });
3891
4251
  }
3892
- async paymentSession(result) {
3893
- return validatePublicPaymentSession(await result);
4252
+ async paymentSession(result, expectedProvider) {
4253
+ return validatePublicPaymentSession(await result, expectedProvider);
3894
4254
  }
3895
4255
  create(params) {
3896
4256
  const { idempotencyKey, ...body } = params;
@@ -3900,18 +4260,53 @@ var PaymentSessionApi = class extends CustomerScopedApi {
3900
4260
  this.serverTransport ? COMMERCE_ENDPOINTS.paymentSessions.server.create : COMMERCE_ENDPOINTS.paymentSessions.create,
3901
4261
  body,
3902
4262
  idempotencyKey
3903
- )
4263
+ ),
4264
+ "toss"
4265
+ );
4266
+ }
4267
+ createPortOne(params) {
4268
+ const { idempotencyKey, ...body } = params;
4269
+ assertCommerceIdempotencyKey(idempotencyKey);
4270
+ return this.paymentSession(
4271
+ this.post(
4272
+ this.serverTransport ? COMMERCE_ENDPOINTS.paymentSessions.server.create : COMMERCE_ENDPOINTS.paymentSessions.create,
4273
+ body,
4274
+ idempotencyKey
4275
+ ),
4276
+ "portone"
3904
4277
  );
3905
4278
  }
3906
4279
  retrieve(params) {
3907
4280
  const endpoint2 = this.serverTransport ? COMMERCE_ENDPOINTS.paymentSessions.server.retrieve : COMMERCE_ENDPOINTS.paymentSessions.retrieve;
3908
- return this.paymentSession(this.post(endpoint2, params));
4281
+ return this.paymentSession(
4282
+ this.post(endpoint2, params),
4283
+ "toss"
4284
+ );
4285
+ }
4286
+ retrievePortOne(params) {
4287
+ const endpoint2 = this.serverTransport ? COMMERCE_ENDPOINTS.paymentSessions.server.retrieve : COMMERCE_ENDPOINTS.paymentSessions.retrieve;
4288
+ return this.paymentSession(
4289
+ this.post(endpoint2, params),
4290
+ "portone"
4291
+ );
3909
4292
  }
3910
4293
  cancel(params) {
3911
4294
  const { idempotencyKey, ...body } = params;
3912
4295
  assertCommerceIdempotencyKey(idempotencyKey);
3913
4296
  const endpoint2 = this.serverTransport ? COMMERCE_ENDPOINTS.paymentSessions.server.cancel : COMMERCE_ENDPOINTS.paymentSessions.cancel;
3914
- return this.paymentSession(this.post(endpoint2, body, idempotencyKey));
4297
+ return this.paymentSession(
4298
+ this.post(endpoint2, body, idempotencyKey),
4299
+ "toss"
4300
+ );
4301
+ }
4302
+ cancelPortOne(params) {
4303
+ const { idempotencyKey, ...body } = params;
4304
+ assertCommerceIdempotencyKey(idempotencyKey);
4305
+ const endpoint2 = this.serverTransport ? COMMERCE_ENDPOINTS.paymentSessions.server.cancel : COMMERCE_ENDPOINTS.paymentSessions.cancel;
4306
+ return this.paymentSession(
4307
+ this.post(endpoint2, body, idempotencyKey),
4308
+ "portone"
4309
+ );
3915
4310
  }
3916
4311
  confirm(params) {
3917
4312
  const { idempotencyKey, ...body } = params;
@@ -3921,7 +4316,8 @@ var PaymentSessionApi = class extends CustomerScopedApi {
3921
4316
  COMMERCE_ENDPOINTS.paymentSessions.server.confirm,
3922
4317
  body,
3923
4318
  idempotencyKey
3924
- )
4319
+ ),
4320
+ "toss"
3925
4321
  );
3926
4322
  }
3927
4323
  };
@@ -4952,21 +5348,11 @@ var PRODUCT_DETAIL_UNAVAILABLE_REASONS = /* @__PURE__ */ new Set([
4952
5348
  "not_published",
4953
5349
  "feature_disabled"
4954
5350
  ]);
4955
- function isRecord(value) {
4956
- return typeof value === "object" && value !== null;
4957
- }
4958
- function readProductDetailUnavailableReason(value) {
4959
- if (!isRecord(value)) return void 0;
4960
- const directReason = value.reason ?? value.code;
4961
- if (typeof directReason === "string" && PRODUCT_DETAIL_UNAVAILABLE_REASONS.has(directReason)) {
4962
- return directReason;
4963
- }
4964
- return readProductDetailUnavailableReason(value.body);
4965
- }
4966
5351
  function productDetailResultFromError(error) {
4967
5352
  if (!(error instanceof SDKError) || error.status !== 404) return void 0;
4968
- const reason = readProductDetailUnavailableReason(error.details);
4969
- if (!reason) return void 0;
5353
+ const reason = getSDKErrorReason(error);
5354
+ if (!reason || !PRODUCT_DETAIL_UNAVAILABLE_REASONS.has(reason))
5355
+ return void 0;
4970
5356
  return { found: false, reason };
4971
5357
  }
4972
5358
  var MARKET_PRICE_QUERY_UNSUPPORTED_MESSAGE = "Market listing pages do not support base price filters or price sorts.";
@@ -5175,8 +5561,11 @@ var CommerceClient = class {
5175
5561
  };
5176
5562
  this.paymentSessions = {
5177
5563
  create: paymentSessionApi.create.bind(paymentSessionApi),
5564
+ createPortOne: paymentSessionApi.createPortOne.bind(paymentSessionApi),
5178
5565
  retrieve: (params) => paymentSessionApi.retrieve(params),
5179
- cancel: (params) => paymentSessionApi.cancel(params)
5566
+ retrievePortOne: (params) => paymentSessionApi.retrievePortOne(params),
5567
+ cancel: (params) => paymentSessionApi.cancel(params),
5568
+ cancelPortOne: (params) => paymentSessionApi.cancelPortOne(params)
5180
5569
  };
5181
5570
  this.discounts = {
5182
5571
  validate: (params) => api.requestEndpoint(
@@ -5490,6 +5879,21 @@ function createClient(options) {
5490
5879
  export {
5491
5880
  Client,
5492
5881
  ContentClient,
5493
- createClient
5882
+ createClient,
5883
+ isApiError,
5884
+ isAuthError,
5885
+ isCommerceSDKError,
5886
+ isConfigError,
5887
+ isConflictError,
5888
+ isGoneError,
5889
+ isNetworkError,
5890
+ isNotFoundError,
5891
+ isPermissionError,
5892
+ isRateLimitError,
5893
+ isSDKError,
5894
+ isServiceUnavailableError,
5895
+ isTimeoutError,
5896
+ isUsageLimitError,
5897
+ isValidationError
5494
5898
  };
5495
5899
  //# sourceMappingURL=client.js.map