@cimplify/sdk 0.22.3 → 0.22.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/advanced.js CHANGED
@@ -1,83 +1,83 @@
1
1
  'use strict';
2
2
 
3
- var chunkRETQI2CJ_js = require('./chunk-RETQI2CJ.js');
4
- require('./chunk-64OCG2TJ.js');
3
+ var chunkYMXFVI3N_js = require('./chunk-YMXFVI3N.js');
4
+ require('./chunk-5FK7MDHS.js');
5
5
 
6
6
 
7
7
 
8
8
  Object.defineProperty(exports, "AuthService", {
9
9
  enumerable: true,
10
- get: function () { return chunkRETQI2CJ_js.AuthService; }
10
+ get: function () { return chunkYMXFVI3N_js.AuthService; }
11
11
  });
12
12
  Object.defineProperty(exports, "BusinessService", {
13
13
  enumerable: true,
14
- get: function () { return chunkRETQI2CJ_js.BusinessService; }
14
+ get: function () { return chunkYMXFVI3N_js.BusinessService; }
15
15
  });
16
16
  Object.defineProperty(exports, "CartOperations", {
17
17
  enumerable: true,
18
- get: function () { return chunkRETQI2CJ_js.CartOperations; }
18
+ get: function () { return chunkYMXFVI3N_js.CartOperations; }
19
19
  });
20
20
  Object.defineProperty(exports, "CatalogueQueries", {
21
21
  enumerable: true,
22
- get: function () { return chunkRETQI2CJ_js.CatalogueQueries; }
22
+ get: function () { return chunkYMXFVI3N_js.CatalogueQueries; }
23
23
  });
24
24
  Object.defineProperty(exports, "CheckoutOperations", {
25
25
  enumerable: true,
26
- get: function () { return chunkRETQI2CJ_js.CheckoutService; }
26
+ get: function () { return chunkYMXFVI3N_js.CheckoutService; }
27
27
  });
28
28
  Object.defineProperty(exports, "CheckoutService", {
29
29
  enumerable: true,
30
- get: function () { return chunkRETQI2CJ_js.CheckoutService; }
30
+ get: function () { return chunkYMXFVI3N_js.CheckoutService; }
31
31
  });
32
32
  Object.defineProperty(exports, "CimplifyElement", {
33
33
  enumerable: true,
34
- get: function () { return chunkRETQI2CJ_js.CimplifyElement; }
34
+ get: function () { return chunkYMXFVI3N_js.CimplifyElement; }
35
35
  });
36
36
  Object.defineProperty(exports, "CimplifyElements", {
37
37
  enumerable: true,
38
- get: function () { return chunkRETQI2CJ_js.CimplifyElements; }
38
+ get: function () { return chunkYMXFVI3N_js.CimplifyElements; }
39
39
  });
40
40
  Object.defineProperty(exports, "ELEMENT_TYPES", {
41
41
  enumerable: true,
42
- get: function () { return chunkRETQI2CJ_js.ELEMENT_TYPES; }
42
+ get: function () { return chunkYMXFVI3N_js.ELEMENT_TYPES; }
43
43
  });
44
44
  Object.defineProperty(exports, "EVENT_TYPES", {
45
45
  enumerable: true,
46
- get: function () { return chunkRETQI2CJ_js.EVENT_TYPES; }
46
+ get: function () { return chunkYMXFVI3N_js.EVENT_TYPES; }
47
47
  });
48
48
  Object.defineProperty(exports, "FxService", {
49
49
  enumerable: true,
50
- get: function () { return chunkRETQI2CJ_js.FxService; }
50
+ get: function () { return chunkYMXFVI3N_js.FxService; }
51
51
  });
52
52
  Object.defineProperty(exports, "InventoryService", {
53
53
  enumerable: true,
54
- get: function () { return chunkRETQI2CJ_js.InventoryService; }
54
+ get: function () { return chunkYMXFVI3N_js.InventoryService; }
55
55
  });
56
56
  Object.defineProperty(exports, "LinkService", {
57
57
  enumerable: true,
58
- get: function () { return chunkRETQI2CJ_js.LinkService; }
58
+ get: function () { return chunkYMXFVI3N_js.LinkService; }
59
59
  });
60
60
  Object.defineProperty(exports, "LiteService", {
61
61
  enumerable: true,
62
- get: function () { return chunkRETQI2CJ_js.LiteService; }
62
+ get: function () { return chunkYMXFVI3N_js.LiteService; }
63
63
  });
64
64
  Object.defineProperty(exports, "MESSAGE_TYPES", {
65
65
  enumerable: true,
66
- get: function () { return chunkRETQI2CJ_js.MESSAGE_TYPES; }
66
+ get: function () { return chunkYMXFVI3N_js.MESSAGE_TYPES; }
67
67
  });
68
68
  Object.defineProperty(exports, "OrderQueries", {
69
69
  enumerable: true,
70
- get: function () { return chunkRETQI2CJ_js.OrderQueries; }
70
+ get: function () { return chunkYMXFVI3N_js.OrderQueries; }
71
71
  });
72
72
  Object.defineProperty(exports, "SchedulingService", {
73
73
  enumerable: true,
74
- get: function () { return chunkRETQI2CJ_js.SchedulingService; }
74
+ get: function () { return chunkYMXFVI3N_js.SchedulingService; }
75
75
  });
76
76
  Object.defineProperty(exports, "createElements", {
77
77
  enumerable: true,
78
- get: function () { return chunkRETQI2CJ_js.createElements; }
78
+ get: function () { return chunkYMXFVI3N_js.createElements; }
79
79
  });
80
80
  Object.defineProperty(exports, "generateIdempotencyKey", {
81
81
  enumerable: true,
82
- get: function () { return chunkRETQI2CJ_js.generateIdempotencyKey; }
82
+ get: function () { return chunkYMXFVI3N_js.generateIdempotencyKey; }
83
83
  });
package/dist/advanced.mjs CHANGED
@@ -1,2 +1,2 @@
1
- export { AuthService, BusinessService, CartOperations, CatalogueQueries, CheckoutService as CheckoutOperations, CheckoutService, CimplifyElement, CimplifyElements, ELEMENT_TYPES, EVENT_TYPES, FxService, InventoryService, LinkService, LiteService, MESSAGE_TYPES, OrderQueries, SchedulingService, createElements, generateIdempotencyKey } from './chunk-X7FRCS2Q.mjs';
2
- import './chunk-JFT63H34.mjs';
1
+ export { AuthService, BusinessService, CartOperations, CatalogueQueries, CheckoutService as CheckoutOperations, CheckoutService, CimplifyElement, CimplifyElements, ELEMENT_TYPES, EVENT_TYPES, FxService, InventoryService, LinkService, LiteService, MESSAGE_TYPES, OrderQueries, SchedulingService, createElements, generateIdempotencyKey } from './chunk-DNN5VN64.mjs';
2
+ import './chunk-4Z74TIJP.mjs';
@@ -307,15 +307,15 @@ function formatPrice(amount, currency = "GHS", locale = "en-US") {
307
307
  if (isNaN(numAmount)) {
308
308
  return `${getCurrencySymbol(currency)}0.00`;
309
309
  }
310
+ const symbol = getCurrencySymbol(currency);
310
311
  try {
311
- return new Intl.NumberFormat(locale, {
312
- style: "currency",
313
- currency: currency.toUpperCase(),
312
+ const formatted = new Intl.NumberFormat(locale, {
314
313
  minimumFractionDigits: 2,
315
314
  maximumFractionDigits: 2
316
315
  }).format(numAmount);
316
+ return `${symbol}${formatted}`;
317
317
  } catch {
318
- return `${getCurrencySymbol(currency)}${numAmount.toFixed(2)}`;
318
+ return `${symbol}${numAmount.toFixed(2)}`;
319
319
  }
320
320
  }
321
321
  function formatPriceAdjustment(amount, currency = "GHS", locale = "en-US") {
@@ -309,15 +309,15 @@ function formatPrice(amount, currency = "GHS", locale = "en-US") {
309
309
  if (isNaN(numAmount)) {
310
310
  return `${getCurrencySymbol(currency)}0.00`;
311
311
  }
312
+ const symbol = getCurrencySymbol(currency);
312
313
  try {
313
- return new Intl.NumberFormat(locale, {
314
- style: "currency",
315
- currency: currency.toUpperCase(),
314
+ const formatted = new Intl.NumberFormat(locale, {
316
315
  minimumFractionDigits: 2,
317
316
  maximumFractionDigits: 2
318
317
  }).format(numAmount);
318
+ return `${symbol}${formatted}`;
319
319
  } catch {
320
- return `${getCurrencySymbol(currency)}${numAmount.toFixed(2)}`;
320
+ return `${symbol}${numAmount.toFixed(2)}`;
321
321
  }
322
322
  }
323
323
  function formatPriceAdjustment(amount, currency = "GHS", locale = "en-US") {
@@ -1,4 +1,4 @@
1
- import { CimplifyError, currencyCode, ErrorCode, enrichError, isPaymentStatusRequiresAction, normalizeStatusResponse, isPaymentStatusSuccess, isPaymentStatusFailure, getErrorHint } from './chunk-JFT63H34.mjs';
1
+ import { CimplifyError, currencyCode, ErrorCode, enrichError, isPaymentStatusRequiresAction, normalizeStatusResponse, isPaymentStatusSuccess, isPaymentStatusFailure, getErrorHint } from './chunk-4Z74TIJP.mjs';
2
2
 
3
3
  // src/types/result.ts
4
4
  function ok(value) {
@@ -272,7 +272,20 @@ var CatalogueQueries = class {
272
272
  const encodedId = encodeURIComponent(id);
273
273
  const result = await safe(this.client.get(`/api/v1/catalogue/products/${encodedId}`));
274
274
  if (!result.ok) return result;
275
- return ok(normalizeCatalogueProductPayload(result.value));
275
+ const payload = result.value;
276
+ const rawProduct = isRecord(payload.item) ? payload.item : payload;
277
+ const product = normalizeCatalogueProductPayload(rawProduct);
278
+ if (isRecord(payload.category)) {
279
+ product.category = payload.category;
280
+ }
281
+ const addOnIds = rawProduct.add_on_ids;
282
+ if (Array.isArray(addOnIds) && addOnIds.length > 0) {
283
+ const addOnsResult = await this.getAddOns(product.id);
284
+ if (addOnsResult.ok) {
285
+ product.add_ons = addOnsResult.value;
286
+ }
287
+ }
288
+ return ok(product);
276
289
  }
277
290
  async getProductBySlug(slug) {
278
291
  return this.getProduct(slug);
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunkRETQI2CJ_js = require('./chunk-RETQI2CJ.js');
4
- var chunk64OCG2TJ_js = require('./chunk-64OCG2TJ.js');
3
+ var chunkYMXFVI3N_js = require('./chunk-YMXFVI3N.js');
4
+ var chunk5FK7MDHS_js = require('./chunk-5FK7MDHS.js');
5
5
 
6
6
  // src/activity.ts
7
7
  var ActivityService = class {
@@ -29,7 +29,7 @@ var ActivityService = class {
29
29
  this.sendEvents([event]);
30
30
  }
31
31
  async getState() {
32
- return chunkRETQI2CJ_js.safe(this.client.get("/api/v1/activity/state"));
32
+ return chunkYMXFVI3N_js.safe(this.client.get("/api/v1/activity/state"));
33
33
  }
34
34
  async getRecommendations(options) {
35
35
  const params = new URLSearchParams();
@@ -37,10 +37,10 @@ var ActivityService = class {
37
37
  if (options?.limit) params.set("limit", String(options.limit));
38
38
  const query = params.toString();
39
39
  const path = query ? `/api/v1/activity/recommendations?${query}` : "/api/v1/activity/recommendations";
40
- return chunkRETQI2CJ_js.safe(this.client.get(path));
40
+ return chunkYMXFVI3N_js.safe(this.client.get(path));
41
41
  }
42
42
  async dismissMessage(code) {
43
- return chunkRETQI2CJ_js.safe(
43
+ return chunkYMXFVI3N_js.safe(
44
44
  this.client.post("/api/v1/activity/messages/dismiss", { code })
45
45
  );
46
46
  }
@@ -66,7 +66,7 @@ var DeliveryService = class {
66
66
  params.set("dropoff_lat", String(dropoffLat));
67
67
  params.set("dropoff_lng", String(dropoffLng));
68
68
  if (country) params.set("country", country);
69
- return chunkRETQI2CJ_js.safe(
69
+ return chunkYMXFVI3N_js.safe(
70
70
  this.client.get(`/api/v1/delivery/fee?${params.toString()}`)
71
71
  );
72
72
  }
@@ -91,16 +91,16 @@ function isRetryable(error) {
91
91
  if (error instanceof DOMException && error.name === "AbortError") {
92
92
  return true;
93
93
  }
94
- if (error instanceof chunk64OCG2TJ_js.CimplifyError) {
94
+ if (error instanceof chunk5FK7MDHS_js.CimplifyError) {
95
95
  return error.retryable;
96
96
  }
97
97
  return false;
98
98
  }
99
99
  function toNetworkError(error, isTestMode) {
100
100
  if (error instanceof DOMException && error.name === "AbortError") {
101
- return chunk64OCG2TJ_js.enrichError(
102
- new chunk64OCG2TJ_js.CimplifyError(
103
- chunk64OCG2TJ_js.ErrorCode.TIMEOUT,
101
+ return chunk5FK7MDHS_js.enrichError(
102
+ new chunk5FK7MDHS_js.CimplifyError(
103
+ chunk5FK7MDHS_js.ErrorCode.TIMEOUT,
104
104
  "Request timed out. Please check your connection and try again.",
105
105
  true
106
106
  ),
@@ -108,21 +108,21 @@ function toNetworkError(error, isTestMode) {
108
108
  );
109
109
  }
110
110
  if (error instanceof TypeError && error.message.includes("fetch")) {
111
- return chunk64OCG2TJ_js.enrichError(
112
- new chunk64OCG2TJ_js.CimplifyError(
113
- chunk64OCG2TJ_js.ErrorCode.NETWORK_ERROR,
111
+ return chunk5FK7MDHS_js.enrichError(
112
+ new chunk5FK7MDHS_js.CimplifyError(
113
+ chunk5FK7MDHS_js.ErrorCode.NETWORK_ERROR,
114
114
  "Network error. Please check your internet connection.",
115
115
  true
116
116
  ),
117
117
  { isTestMode }
118
118
  );
119
119
  }
120
- if (error instanceof chunk64OCG2TJ_js.CimplifyError) {
121
- return chunk64OCG2TJ_js.enrichError(error, { isTestMode });
120
+ if (error instanceof chunk5FK7MDHS_js.CimplifyError) {
121
+ return chunk5FK7MDHS_js.enrichError(error, { isTestMode });
122
122
  }
123
- return chunk64OCG2TJ_js.enrichError(
124
- new chunk64OCG2TJ_js.CimplifyError(
125
- chunk64OCG2TJ_js.ErrorCode.UNKNOWN_ERROR,
123
+ return chunk5FK7MDHS_js.enrichError(
124
+ new chunk5FK7MDHS_js.CimplifyError(
125
+ chunk5FK7MDHS_js.ErrorCode.UNKNOWN_ERROR,
126
126
  error instanceof Error ? error.message : "An unknown error occurred",
127
127
  false
128
128
  ),
@@ -289,8 +289,8 @@ var CimplifyClient = class {
289
289
  this.businessIdResolvePromise = (async () => {
290
290
  const result = await this.business.getInfo();
291
291
  if (!result.ok || !result.value?.id) {
292
- throw new chunk64OCG2TJ_js.CimplifyError(
293
- chunk64OCG2TJ_js.ErrorCode.NOT_FOUND,
292
+ throw new chunk5FK7MDHS_js.CimplifyError(
293
+ chunk5FK7MDHS_js.ErrorCode.NOT_FOUND,
294
294
  "Unable to resolve business ID from the current public key.",
295
295
  true
296
296
  );
@@ -407,7 +407,7 @@ var CimplifyClient = class {
407
407
  if (response.status >= 400 && response.status < 500) {
408
408
  this.hooks.onRequestError?.({
409
409
  ...context,
410
- error: new chunk64OCG2TJ_js.CimplifyError(
410
+ error: new chunk5FK7MDHS_js.CimplifyError(
411
411
  `HTTP_${response.status}`,
412
412
  `Request failed with status ${response.status}`,
413
413
  false
@@ -433,7 +433,7 @@ var CimplifyClient = class {
433
433
  }
434
434
  this.hooks.onRequestError?.({
435
435
  ...context,
436
- error: new chunk64OCG2TJ_js.CimplifyError(
436
+ error: new chunk5FK7MDHS_js.CimplifyError(
437
437
  "SERVER_ERROR",
438
438
  `Server error ${response.status} after ${retryCount} retries`,
439
439
  false
@@ -564,15 +564,15 @@ var CimplifyClient = class {
564
564
  const errorCode = typeof json.error === "object" && json.error?.error_code || typeof json.error === "object" && json.error?.code || "API_ERROR";
565
565
  const errorMessage = typeof json.error === "object" && json.error?.error_message || typeof json.error === "object" && json.error?.message || typeof json.error === "string" && json.error || typeof json.message === "string" && json.message || "An error occurred";
566
566
  const retryable = typeof json.error === "object" && typeof json.error?.retryable === "boolean" ? json.error.retryable : false;
567
- const error = chunk64OCG2TJ_js.enrichError(
568
- new chunk64OCG2TJ_js.CimplifyError(
567
+ const error = chunk5FK7MDHS_js.enrichError(
568
+ new chunk5FK7MDHS_js.CimplifyError(
569
569
  errorCode,
570
570
  errorMessage,
571
571
  retryable
572
572
  ),
573
573
  { isTestMode: this.isTestMode() }
574
574
  );
575
- if (response.status === 401 || error.code === chunk64OCG2TJ_js.ErrorCode.UNAUTHORIZED) {
575
+ if (response.status === 401 || error.code === chunk5FK7MDHS_js.ErrorCode.UNAUTHORIZED) {
576
576
  console.warn(
577
577
  "[Cimplify] Received 401 Unauthorized. Access token may be missing/expired. Refresh authentication and retry the request."
578
578
  );
@@ -580,8 +580,8 @@ var CimplifyClient = class {
580
580
  throw error;
581
581
  }
582
582
  if (json?.success === false || json?.error?.code || json?.error?.message) {
583
- const error = chunk64OCG2TJ_js.enrichError(
584
- new chunk64OCG2TJ_js.CimplifyError(
583
+ const error = chunk5FK7MDHS_js.enrichError(
584
+ new chunk5FK7MDHS_js.CimplifyError(
585
585
  json.error?.code || "API_ERROR",
586
586
  json.error?.message || "An error occurred",
587
587
  json.error?.retryable || false
@@ -597,67 +597,67 @@ var CimplifyClient = class {
597
597
  }
598
598
  get catalogue() {
599
599
  if (!this._catalogue) {
600
- this._catalogue = new chunkRETQI2CJ_js.CatalogueQueries(this);
600
+ this._catalogue = new chunkYMXFVI3N_js.CatalogueQueries(this);
601
601
  }
602
602
  return this._catalogue;
603
603
  }
604
604
  get cart() {
605
605
  if (!this._cart) {
606
- this._cart = new chunkRETQI2CJ_js.CartOperations(this);
606
+ this._cart = new chunkYMXFVI3N_js.CartOperations(this);
607
607
  }
608
608
  return this._cart;
609
609
  }
610
610
  get checkout() {
611
611
  if (!this._checkout) {
612
- this._checkout = new chunkRETQI2CJ_js.CheckoutService(this);
612
+ this._checkout = new chunkYMXFVI3N_js.CheckoutService(this);
613
613
  }
614
614
  return this._checkout;
615
615
  }
616
616
  get orders() {
617
617
  if (!this._orders) {
618
- this._orders = new chunkRETQI2CJ_js.OrderQueries(this);
618
+ this._orders = new chunkYMXFVI3N_js.OrderQueries(this);
619
619
  }
620
620
  return this._orders;
621
621
  }
622
622
  get link() {
623
623
  if (!this._link) {
624
- this._link = new chunkRETQI2CJ_js.LinkService(this);
624
+ this._link = new chunkYMXFVI3N_js.LinkService(this);
625
625
  }
626
626
  return this._link;
627
627
  }
628
628
  get auth() {
629
629
  if (!this._auth) {
630
- this._auth = new chunkRETQI2CJ_js.AuthService(this);
630
+ this._auth = new chunkYMXFVI3N_js.AuthService(this);
631
631
  }
632
632
  return this._auth;
633
633
  }
634
634
  get business() {
635
635
  if (!this._business) {
636
- this._business = new chunkRETQI2CJ_js.BusinessService(this);
636
+ this._business = new chunkYMXFVI3N_js.BusinessService(this);
637
637
  }
638
638
  return this._business;
639
639
  }
640
640
  get inventory() {
641
641
  if (!this._inventory) {
642
- this._inventory = new chunkRETQI2CJ_js.InventoryService(this);
642
+ this._inventory = new chunkYMXFVI3N_js.InventoryService(this);
643
643
  }
644
644
  return this._inventory;
645
645
  }
646
646
  get scheduling() {
647
647
  if (!this._scheduling) {
648
- this._scheduling = new chunkRETQI2CJ_js.SchedulingService(this);
648
+ this._scheduling = new chunkYMXFVI3N_js.SchedulingService(this);
649
649
  }
650
650
  return this._scheduling;
651
651
  }
652
652
  get lite() {
653
653
  if (!this._lite) {
654
- this._lite = new chunkRETQI2CJ_js.LiteService(this);
654
+ this._lite = new chunkYMXFVI3N_js.LiteService(this);
655
655
  }
656
656
  return this._lite;
657
657
  }
658
658
  get fx() {
659
659
  if (!this._fx) {
660
- this._fx = new chunkRETQI2CJ_js.FxService(this);
660
+ this._fx = new chunkYMXFVI3N_js.FxService(this);
661
661
  }
662
662
  return this._fx;
663
663
  }
@@ -677,7 +677,7 @@ var CimplifyClient = class {
677
677
  if (businessId) {
678
678
  this.setBusinessId(businessId);
679
679
  }
680
- return chunkRETQI2CJ_js.createElements(this, businessId ?? this.businessId ?? void 0, options);
680
+ return chunkYMXFVI3N_js.createElements(this, businessId ?? this.businessId ?? void 0, options);
681
681
  }
682
682
  };
683
683
  function createCimplifyClient(config = {}) {
@@ -1,5 +1,5 @@
1
- import { safe, CatalogueQueries, CartOperations, CheckoutService, OrderQueries, LinkService, AuthService, BusinessService, InventoryService, SchedulingService, LiteService, FxService, createElements } from './chunk-X7FRCS2Q.mjs';
2
- import { CimplifyError, ErrorCode, enrichError } from './chunk-JFT63H34.mjs';
1
+ import { safe, CatalogueQueries, CartOperations, CheckoutService, OrderQueries, LinkService, AuthService, BusinessService, InventoryService, SchedulingService, LiteService, FxService, createElements } from './chunk-DNN5VN64.mjs';
2
+ import { CimplifyError, ErrorCode, enrichError } from './chunk-4Z74TIJP.mjs';
3
3
 
4
4
  // src/activity.ts
5
5
  var ActivityService = class {
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunk64OCG2TJ_js = require('./chunk-64OCG2TJ.js');
3
+ var chunk5FK7MDHS_js = require('./chunk-5FK7MDHS.js');
4
4
 
5
5
  // src/types/result.ts
6
6
  function ok(value) {
@@ -74,11 +74,11 @@ function combineObject(results) {
74
74
 
75
75
  // src/internal/safe.ts
76
76
  function toCimplifyError(error) {
77
- if (error instanceof chunk64OCG2TJ_js.CimplifyError) return chunk64OCG2TJ_js.enrichError(error);
77
+ if (error instanceof chunk5FK7MDHS_js.CimplifyError) return chunk5FK7MDHS_js.enrichError(error);
78
78
  if (error instanceof Error) {
79
- return chunk64OCG2TJ_js.enrichError(new chunk64OCG2TJ_js.CimplifyError(chunk64OCG2TJ_js.ErrorCode.UNKNOWN_ERROR, error.message, false));
79
+ return chunk5FK7MDHS_js.enrichError(new chunk5FK7MDHS_js.CimplifyError(chunk5FK7MDHS_js.ErrorCode.UNKNOWN_ERROR, error.message, false));
80
80
  }
81
- return chunk64OCG2TJ_js.enrichError(new chunk64OCG2TJ_js.CimplifyError(chunk64OCG2TJ_js.ErrorCode.UNKNOWN_ERROR, String(error), false));
81
+ return chunk5FK7MDHS_js.enrichError(new chunk5FK7MDHS_js.CimplifyError(chunk5FK7MDHS_js.ErrorCode.UNKNOWN_ERROR, String(error), false));
82
82
  }
83
83
  async function safe(promise) {
84
84
  try {
@@ -274,7 +274,20 @@ var CatalogueQueries = class {
274
274
  const encodedId = encodeURIComponent(id);
275
275
  const result = await safe(this.client.get(`/api/v1/catalogue/products/${encodedId}`));
276
276
  if (!result.ok) return result;
277
- return ok(normalizeCatalogueProductPayload(result.value));
277
+ const payload = result.value;
278
+ const rawProduct = isRecord(payload.item) ? payload.item : payload;
279
+ const product = normalizeCatalogueProductPayload(rawProduct);
280
+ if (isRecord(payload.category)) {
281
+ product.category = payload.category;
282
+ }
283
+ const addOnIds = rawProduct.add_on_ids;
284
+ if (Array.isArray(addOnIds) && addOnIds.length > 0) {
285
+ const addOnsResult = await this.getAddOns(product.id);
286
+ if (addOnsResult.ok) {
287
+ product.add_ons = addOnsResult.value;
288
+ }
289
+ }
290
+ return ok(product);
278
291
  }
279
292
  async getProductBySlug(slug) {
280
293
  return this.getProduct(slug);
@@ -1058,7 +1071,7 @@ var CheckoutResolver = class {
1058
1071
  }
1059
1072
  }
1060
1073
  }
1061
- if (checkoutResult.requires_authorization || chunk64OCG2TJ_js.isPaymentStatusRequiresAction(checkoutResult.payment_status)) {
1074
+ if (checkoutResult.requires_authorization || chunk5FK7MDHS_js.isPaymentStatusRequiresAction(checkoutResult.payment_status)) {
1062
1075
  const authorization = await this.handleAuthorization({
1063
1076
  authorizationType,
1064
1077
  paymentReference,
@@ -1232,18 +1245,18 @@ var CheckoutResolver = class {
1232
1245
  if (statusResult.value.reference) {
1233
1246
  paymentReference = statusResult.value.reference;
1234
1247
  }
1235
- const normalized = chunk64OCG2TJ_js.normalizeStatusResponse(statusResult.value);
1236
- if (normalized.paid || chunk64OCG2TJ_js.isPaymentStatusSuccess(normalized.status)) {
1248
+ const normalized = chunk5FK7MDHS_js.normalizeStatusResponse(statusResult.value);
1249
+ if (normalized.paid || chunk5FK7MDHS_js.isPaymentStatusSuccess(normalized.status)) {
1237
1250
  return this.finalizeSuccess(latestCheckoutResult);
1238
1251
  }
1239
- if (chunk64OCG2TJ_js.isPaymentStatusFailure(normalized.status)) {
1252
+ if (chunk5FK7MDHS_js.isPaymentStatusFailure(normalized.status)) {
1240
1253
  return this.fail(
1241
1254
  normalized.status ? normalized.status.toUpperCase() : "PAYMENT_FAILED",
1242
1255
  normalized.message || "Payment failed during confirmation.",
1243
1256
  false
1244
1257
  );
1245
1258
  }
1246
- if (chunk64OCG2TJ_js.isPaymentStatusRequiresAction(normalized.status)) {
1259
+ if (chunk5FK7MDHS_js.isPaymentStatusRequiresAction(normalized.status)) {
1247
1260
  const authorization = await this.handleAuthorization({
1248
1261
  authorizationType,
1249
1262
  paymentReference,
@@ -1274,8 +1287,8 @@ var CheckoutResolver = class {
1274
1287
  try {
1275
1288
  const finalResult = await this.client.checkout.pollPaymentStatus(input.orderId);
1276
1289
  if (finalResult.ok) {
1277
- const normalized = chunk64OCG2TJ_js.normalizeStatusResponse(finalResult.value);
1278
- if (normalized.paid || chunk64OCG2TJ_js.isPaymentStatusSuccess(normalized.status)) {
1290
+ const normalized = chunk5FK7MDHS_js.normalizeStatusResponse(finalResult.value);
1291
+ if (normalized.paid || chunk5FK7MDHS_js.isPaymentStatusSuccess(normalized.status)) {
1279
1292
  return this.finalizeSuccess(latestCheckoutResult);
1280
1293
  }
1281
1294
  }
@@ -1471,12 +1484,12 @@ var CheckoutResolver = class {
1471
1484
  };
1472
1485
  }
1473
1486
  isSuccessfulStatus(status) {
1474
- const normalized = chunk64OCG2TJ_js.normalizeStatusResponse({ status, paid: false });
1475
- return normalized.paid || chunk64OCG2TJ_js.isPaymentStatusSuccess(normalized.status);
1487
+ const normalized = chunk5FK7MDHS_js.normalizeStatusResponse({ status, paid: false });
1488
+ return normalized.paid || chunk5FK7MDHS_js.isPaymentStatusSuccess(normalized.status);
1476
1489
  }
1477
1490
  isFailureStatus(status) {
1478
- const normalized = chunk64OCG2TJ_js.normalizeStatusResponse({ status, paid: false });
1479
- return chunk64OCG2TJ_js.isPaymentStatusFailure(normalized.status);
1491
+ const normalized = chunk5FK7MDHS_js.normalizeStatusResponse({ status, paid: false });
1492
+ return chunk5FK7MDHS_js.isPaymentStatusFailure(normalized.status);
1480
1493
  }
1481
1494
  ensureNotAborted() {
1482
1495
  if (this.signal?.aborted) {
@@ -1547,7 +1560,7 @@ var CheckoutService = class {
1547
1560
  }
1548
1561
  async initializePayment(_orderId, _method) {
1549
1562
  return err(
1550
- new chunk64OCG2TJ_js.CimplifyError(
1563
+ new chunk5FK7MDHS_js.CimplifyError(
1551
1564
  "NOT_IMPLEMENTED",
1552
1565
  "initializePayment is not available in REST mode.",
1553
1566
  false
@@ -1619,11 +1632,11 @@ var CheckoutService = class {
1619
1632
  pay_currency: data.pay_currency,
1620
1633
  fx_quote_id: data.fx_quote_id
1621
1634
  };
1622
- const baseCurrency = chunk64OCG2TJ_js.currencyCode(
1635
+ const baseCurrency = chunk5FK7MDHS_js.currencyCode(
1623
1636
  (cart.pricing.currency || checkoutData.pay_currency || "GHS").toUpperCase()
1624
1637
  );
1625
1638
  const payCurrency = data.pay_currency?.trim().toUpperCase();
1626
- const payCurrencyCode = payCurrency ? chunk64OCG2TJ_js.currencyCode(payCurrency) : void 0;
1639
+ const payCurrencyCode = payCurrency ? chunk5FK7MDHS_js.currencyCode(payCurrency) : void 0;
1627
1640
  const cartTotalAmount = typeof cart.pricing.total_price === "number" ? cart.pricing.total_price : Number.parseFloat(cart.pricing.total_price || "0");
1628
1641
  if (payCurrencyCode && payCurrencyCode !== baseCurrency && !checkoutData.fx_quote_id && Number.isFinite(cartTotalAmount) && cartTotalAmount > 0) {
1629
1642
  const fxQuoteResult = await this.client.fx.lockQuote({
@@ -1946,7 +1959,7 @@ var BusinessService = class {
1946
1959
  if (!result.ok) return err(result.error);
1947
1960
  const location = result.value.find((item) => item.id === locationId);
1948
1961
  if (!location) {
1949
- return err(new chunk64OCG2TJ_js.CimplifyError(chunk64OCG2TJ_js.ErrorCode.NOT_FOUND, `Location not found: ${locationId}`, false));
1962
+ return err(new chunk5FK7MDHS_js.CimplifyError(chunk5FK7MDHS_js.ErrorCode.NOT_FOUND, `Location not found: ${locationId}`, false));
1950
1963
  }
1951
1964
  return ok(location);
1952
1965
  }
@@ -2220,7 +2233,7 @@ var EVENT_TYPES = {
2220
2233
 
2221
2234
  // src/elements.ts
2222
2235
  function toCheckoutError(code, message, recoverable) {
2223
- const hint = chunk64OCG2TJ_js.getErrorHint(code);
2236
+ const hint = chunk5FK7MDHS_js.getErrorHint(code);
2224
2237
  return {
2225
2238
  success: false,
2226
2239
  error: {