@cimplify/sdk 0.3.6 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -521,6 +521,15 @@ var AUTHORIZATION_TYPE = {
521
521
  BIRTHDAY: "birthday",
522
522
  ADDRESS: "address"
523
523
  };
524
+ var DEVICE_TYPE = {
525
+ MOBILE: "mobile",
526
+ DESKTOP: "desktop",
527
+ TABLET: "tablet"
528
+ };
529
+ var CONTACT_TYPE = {
530
+ PHONE: "phone",
531
+ EMAIL: "email"
532
+ };
524
533
  var LINK_QUERY = {
525
534
  DATA: "link.data",
526
535
  ADDRESSES: "link.addresses",
@@ -1058,6 +1067,9 @@ var InventoryService = class {
1058
1067
  };
1059
1068
 
1060
1069
  // src/scheduling.ts
1070
+ function toVariables(input) {
1071
+ return Object.fromEntries(Object.entries(input));
1072
+ }
1061
1073
  function toCimplifyError9(error) {
1062
1074
  if (error instanceof CimplifyError) return error;
1063
1075
  if (error instanceof Error) {
@@ -1090,17 +1102,14 @@ var SchedulingService = class {
1090
1102
  }
1091
1103
  async getAvailableSlots(input) {
1092
1104
  return safe9(
1093
- this.client.query(
1094
- "scheduling.slots",
1095
- input
1096
- )
1105
+ this.client.query("scheduling.slots", toVariables(input))
1097
1106
  );
1098
1107
  }
1099
1108
  async checkSlotAvailability(input) {
1100
1109
  return safe9(
1101
1110
  this.client.query(
1102
1111
  "scheduling.check_availability",
1103
- input
1112
+ toVariables(input)
1104
1113
  )
1105
1114
  );
1106
1115
  }
@@ -1108,7 +1117,7 @@ var SchedulingService = class {
1108
1117
  return safe9(
1109
1118
  this.client.query(
1110
1119
  "scheduling.availability",
1111
- params
1120
+ toVariables(params)
1112
1121
  )
1113
1122
  );
1114
1123
  }
@@ -1221,9 +1230,359 @@ var LiteService = class {
1221
1230
  }
1222
1231
  };
1223
1232
 
1233
+ // src/types/elements.ts
1234
+ var ELEMENT_TYPES = {
1235
+ AUTH: "auth",
1236
+ ADDRESS: "address",
1237
+ PAYMENT: "payment"
1238
+ };
1239
+ var MESSAGE_TYPES = {
1240
+ // Parent → Iframe
1241
+ INIT: "init",
1242
+ SET_TOKEN: "set_token",
1243
+ GET_DATA: "get_data",
1244
+ REFRESH_TOKEN: "refresh_token",
1245
+ LOGOUT: "logout",
1246
+ // Iframe → Parent
1247
+ READY: "ready",
1248
+ HEIGHT_CHANGE: "height_change",
1249
+ AUTHENTICATED: "authenticated",
1250
+ REQUIRES_OTP: "requires_otp",
1251
+ ERROR: "error",
1252
+ ADDRESS_CHANGED: "address_changed",
1253
+ ADDRESS_SELECTED: "address_selected",
1254
+ PAYMENT_METHOD_SELECTED: "payment_method_selected",
1255
+ TOKEN_REFRESHED: "token_refreshed",
1256
+ LOGOUT_COMPLETE: "logout_complete"
1257
+ };
1258
+ var EVENT_TYPES = {
1259
+ READY: "ready",
1260
+ AUTHENTICATED: "authenticated",
1261
+ REQUIRES_OTP: "requires_otp",
1262
+ ERROR: "error",
1263
+ CHANGE: "change",
1264
+ BLUR: "blur",
1265
+ FOCUS: "focus"
1266
+ };
1267
+
1268
+ // src/elements.ts
1269
+ function mapOrderType(orderType) {
1270
+ if (orderType === "dine_in") return "dine-in";
1271
+ return orderType ?? "delivery";
1272
+ }
1273
+ function toCheckoutFormData(data) {
1274
+ return {
1275
+ cart_id: data.cart_id,
1276
+ customer: {
1277
+ name: "",
1278
+ email: "",
1279
+ phone: "",
1280
+ save_details: false
1281
+ },
1282
+ order_type: mapOrderType(data.order_type),
1283
+ address_info: data.address ? {
1284
+ street_address: data.address.street_address,
1285
+ apartment: data.address.apartment,
1286
+ city: data.address.city,
1287
+ region: data.address.region,
1288
+ postal_code: data.address.postal_code,
1289
+ country: data.address.country,
1290
+ delivery_instructions: data.address.delivery_instructions,
1291
+ phone_for_delivery: data.address.phone_for_delivery
1292
+ } : {},
1293
+ payment_method: data.payment_method?.type ?? "mobile_money",
1294
+ mobile_money_details: data.payment_method?.type === "mobile_money" && data.payment_method.phone_number ? {
1295
+ phone_number: data.payment_method.phone_number,
1296
+ provider: data.payment_method.provider ?? "mtn"
1297
+ } : void 0,
1298
+ special_instructions: data.notes,
1299
+ link_address_id: data.address?.id,
1300
+ link_payment_method_id: data.payment_method?.id
1301
+ };
1302
+ }
1303
+ var DEFAULT_LINK_URL = "https://link.cimplify.io";
1304
+ function isAllowedOrigin(origin) {
1305
+ try {
1306
+ const url = new URL(origin);
1307
+ const hostname = url.hostname;
1308
+ if (hostname === "localhost" || hostname === "127.0.0.1") {
1309
+ return true;
1310
+ }
1311
+ if (url.protocol !== "https:") {
1312
+ return false;
1313
+ }
1314
+ return hostname === "cimplify.io" || hostname.endsWith(".cimplify.io");
1315
+ } catch {
1316
+ return false;
1317
+ }
1318
+ }
1319
+ var CimplifyElements = class {
1320
+ constructor(client, businessId, options = {}) {
1321
+ this.elements = /* @__PURE__ */ new Map();
1322
+ this.accessToken = null;
1323
+ this.accountId = null;
1324
+ this.customerId = null;
1325
+ this.addressData = null;
1326
+ this.paymentData = null;
1327
+ this.client = client;
1328
+ this.businessId = businessId;
1329
+ this.linkUrl = options.linkUrl || DEFAULT_LINK_URL;
1330
+ this.options = options;
1331
+ this.boundHandleMessage = this.handleMessage.bind(this);
1332
+ if (typeof window !== "undefined") {
1333
+ window.addEventListener("message", this.boundHandleMessage);
1334
+ }
1335
+ }
1336
+ create(type, options = {}) {
1337
+ const existing = this.elements.get(type);
1338
+ if (existing) return existing;
1339
+ const element = new CimplifyElement(type, this.businessId, this.linkUrl, options, this);
1340
+ this.elements.set(type, element);
1341
+ return element;
1342
+ }
1343
+ getElement(type) {
1344
+ return this.elements.get(type);
1345
+ }
1346
+ destroy() {
1347
+ this.elements.forEach((element) => element.destroy());
1348
+ this.elements.clear();
1349
+ if (typeof window !== "undefined") {
1350
+ window.removeEventListener("message", this.boundHandleMessage);
1351
+ }
1352
+ }
1353
+ async submitCheckout(data) {
1354
+ const addressElement = this.elements.get(ELEMENT_TYPES.ADDRESS);
1355
+ if (addressElement) await addressElement.getData();
1356
+ const paymentElement = this.elements.get(ELEMENT_TYPES.PAYMENT);
1357
+ if (paymentElement) await paymentElement.getData();
1358
+ const internalData = {
1359
+ ...data,
1360
+ customer: this.accountId ? { account_id: this.accountId, customer_id: this.customerId } : void 0,
1361
+ address: this.addressData,
1362
+ payment_method: this.paymentData
1363
+ };
1364
+ const checkoutFormData = toCheckoutFormData(internalData);
1365
+ const result = await this.client.checkout.process(checkoutFormData);
1366
+ if (result.ok) {
1367
+ return {
1368
+ success: true,
1369
+ order: {
1370
+ id: result.value.order_id,
1371
+ status: result.value.payment_status,
1372
+ total: ""
1373
+ // Total is not returned by checkout result
1374
+ }
1375
+ };
1376
+ }
1377
+ return {
1378
+ success: false,
1379
+ error: {
1380
+ code: result.error.code || "CHECKOUT_FAILED",
1381
+ message: result.error.message || "Checkout failed"
1382
+ }
1383
+ };
1384
+ }
1385
+ isAuthenticated() {
1386
+ return this.accessToken !== null;
1387
+ }
1388
+ getAccessToken() {
1389
+ return this.accessToken;
1390
+ }
1391
+ handleMessage(event) {
1392
+ if (!isAllowedOrigin(event.origin)) {
1393
+ return;
1394
+ }
1395
+ const message = event.data;
1396
+ if (!message?.type) return;
1397
+ switch (message.type) {
1398
+ case MESSAGE_TYPES.AUTHENTICATED:
1399
+ this.accessToken = message.token;
1400
+ this.accountId = message.accountId;
1401
+ this.customerId = message.customerId;
1402
+ this.elements.forEach((element, type) => {
1403
+ if (type !== ELEMENT_TYPES.AUTH) {
1404
+ element.sendMessage({ type: MESSAGE_TYPES.SET_TOKEN, token: message.token });
1405
+ }
1406
+ });
1407
+ break;
1408
+ case MESSAGE_TYPES.TOKEN_REFRESHED:
1409
+ this.accessToken = message.token;
1410
+ break;
1411
+ case MESSAGE_TYPES.ADDRESS_CHANGED:
1412
+ case MESSAGE_TYPES.ADDRESS_SELECTED:
1413
+ this.addressData = message.address;
1414
+ break;
1415
+ case MESSAGE_TYPES.PAYMENT_METHOD_SELECTED:
1416
+ this.paymentData = message.method;
1417
+ break;
1418
+ case MESSAGE_TYPES.LOGOUT_COMPLETE:
1419
+ this.accessToken = null;
1420
+ this.accountId = null;
1421
+ this.customerId = null;
1422
+ this.addressData = null;
1423
+ this.paymentData = null;
1424
+ break;
1425
+ }
1426
+ }
1427
+ _setAddressData(data) {
1428
+ this.addressData = data;
1429
+ }
1430
+ _setPaymentData(data) {
1431
+ this.paymentData = data;
1432
+ }
1433
+ };
1434
+ var CimplifyElement = class {
1435
+ constructor(type, businessId, linkUrl, options, parent) {
1436
+ this.iframe = null;
1437
+ this.container = null;
1438
+ this.mounted = false;
1439
+ this.eventHandlers = /* @__PURE__ */ new Map();
1440
+ this.resolvers = /* @__PURE__ */ new Map();
1441
+ this.type = type;
1442
+ this.businessId = businessId;
1443
+ this.linkUrl = linkUrl;
1444
+ this.options = options;
1445
+ this.parent = parent;
1446
+ this.boundHandleMessage = this.handleMessage.bind(this);
1447
+ if (typeof window !== "undefined") {
1448
+ window.addEventListener("message", this.boundHandleMessage);
1449
+ }
1450
+ }
1451
+ mount(container) {
1452
+ if (this.mounted) {
1453
+ console.warn(`Element ${this.type} is already mounted`);
1454
+ return;
1455
+ }
1456
+ const target = typeof container === "string" ? document.querySelector(container) : container;
1457
+ if (!target) {
1458
+ console.error(`Container not found: ${container}`);
1459
+ return;
1460
+ }
1461
+ this.container = target;
1462
+ this.createIframe();
1463
+ this.mounted = true;
1464
+ }
1465
+ destroy() {
1466
+ if (this.iframe) {
1467
+ this.iframe.remove();
1468
+ this.iframe = null;
1469
+ }
1470
+ this.container = null;
1471
+ this.mounted = false;
1472
+ this.eventHandlers.clear();
1473
+ if (typeof window !== "undefined") {
1474
+ window.removeEventListener("message", this.boundHandleMessage);
1475
+ }
1476
+ }
1477
+ on(event, handler) {
1478
+ if (!this.eventHandlers.has(event)) {
1479
+ this.eventHandlers.set(event, /* @__PURE__ */ new Set());
1480
+ }
1481
+ this.eventHandlers.get(event).add(handler);
1482
+ }
1483
+ off(event, handler) {
1484
+ this.eventHandlers.get(event)?.delete(handler);
1485
+ }
1486
+ async getData() {
1487
+ return new Promise((resolve) => {
1488
+ const id = Math.random().toString(36).slice(2);
1489
+ this.resolvers.set(id, resolve);
1490
+ this.sendMessage({ type: MESSAGE_TYPES.GET_DATA });
1491
+ setTimeout(() => {
1492
+ if (this.resolvers.has(id)) {
1493
+ this.resolvers.delete(id);
1494
+ resolve(null);
1495
+ }
1496
+ }, 5e3);
1497
+ });
1498
+ }
1499
+ sendMessage(message) {
1500
+ if (this.iframe?.contentWindow) {
1501
+ this.iframe.contentWindow.postMessage(message, this.linkUrl);
1502
+ }
1503
+ }
1504
+ createIframe() {
1505
+ if (!this.container) return;
1506
+ const iframe = document.createElement("iframe");
1507
+ const url = new URL(`${this.linkUrl}/elements/${this.type}`);
1508
+ url.searchParams.set("businessId", this.businessId);
1509
+ if (this.options.prefillEmail) url.searchParams.set("email", this.options.prefillEmail);
1510
+ if (this.options.mode) url.searchParams.set("mode", this.options.mode);
1511
+ iframe.src = url.toString();
1512
+ iframe.style.border = "none";
1513
+ iframe.style.width = "100%";
1514
+ iframe.style.display = "block";
1515
+ iframe.style.overflow = "hidden";
1516
+ iframe.setAttribute("allowtransparency", "true");
1517
+ iframe.setAttribute("frameborder", "0");
1518
+ iframe.setAttribute("sandbox", "allow-scripts allow-same-origin allow-forms allow-popups");
1519
+ this.iframe = iframe;
1520
+ this.container.appendChild(iframe);
1521
+ iframe.onload = () => {
1522
+ this.sendMessage({
1523
+ type: MESSAGE_TYPES.INIT,
1524
+ businessId: this.businessId,
1525
+ prefillEmail: this.options.prefillEmail
1526
+ });
1527
+ const token = this.parent.getAccessToken();
1528
+ if (token && this.type !== ELEMENT_TYPES.AUTH) {
1529
+ this.sendMessage({ type: MESSAGE_TYPES.SET_TOKEN, token });
1530
+ }
1531
+ };
1532
+ }
1533
+ handleMessage(event) {
1534
+ if (!isAllowedOrigin(event.origin)) {
1535
+ return;
1536
+ }
1537
+ const message = event.data;
1538
+ if (!message?.type) return;
1539
+ switch (message.type) {
1540
+ case MESSAGE_TYPES.READY:
1541
+ this.emit(EVENT_TYPES.READY, { height: message.height });
1542
+ break;
1543
+ case MESSAGE_TYPES.HEIGHT_CHANGE:
1544
+ if (this.iframe) this.iframe.style.height = `${message.height}px`;
1545
+ break;
1546
+ case MESSAGE_TYPES.AUTHENTICATED:
1547
+ this.emit(EVENT_TYPES.AUTHENTICATED, {
1548
+ accountId: message.accountId,
1549
+ customerId: message.customerId,
1550
+ token: message.token
1551
+ });
1552
+ break;
1553
+ case MESSAGE_TYPES.REQUIRES_OTP:
1554
+ this.emit(EVENT_TYPES.REQUIRES_OTP, { contactMasked: message.contactMasked });
1555
+ break;
1556
+ case MESSAGE_TYPES.ERROR:
1557
+ this.emit(EVENT_TYPES.ERROR, { code: message.code, message: message.message });
1558
+ break;
1559
+ case MESSAGE_TYPES.ADDRESS_CHANGED:
1560
+ case MESSAGE_TYPES.ADDRESS_SELECTED:
1561
+ this.parent._setAddressData(message.address);
1562
+ this.emit(EVENT_TYPES.CHANGE, { address: message.address });
1563
+ this.resolveData(message.address);
1564
+ break;
1565
+ case MESSAGE_TYPES.PAYMENT_METHOD_SELECTED:
1566
+ this.parent._setPaymentData(message.method);
1567
+ this.emit(EVENT_TYPES.CHANGE, { paymentMethod: message.method });
1568
+ this.resolveData(message.method);
1569
+ break;
1570
+ }
1571
+ }
1572
+ emit(event, data) {
1573
+ this.eventHandlers.get(event)?.forEach((handler) => handler(data));
1574
+ }
1575
+ resolveData(data) {
1576
+ this.resolvers.forEach((resolve) => resolve(data));
1577
+ this.resolvers.clear();
1578
+ }
1579
+ };
1580
+ function createElements(client, businessId, options) {
1581
+ return new CimplifyElements(client, businessId, options);
1582
+ }
1583
+
1224
1584
  // src/client.ts
1225
- var SESSION_TOKEN_HEADER = "x-session-token";
1226
- var SESSION_STORAGE_KEY = "cimplify_session_token";
1585
+ var ACCESS_TOKEN_STORAGE_KEY = "cimplify_access_token";
1227
1586
  var DEFAULT_TIMEOUT_MS = 3e4;
1228
1587
  var DEFAULT_MAX_RETRIES = 3;
1229
1588
  var DEFAULT_RETRY_DELAY_MS = 1e3;
@@ -1285,7 +1644,7 @@ function deriveUrls() {
1285
1644
  }
1286
1645
  var CimplifyClient = class {
1287
1646
  constructor(config = {}) {
1288
- this.sessionToken = null;
1647
+ this.accessToken = null;
1289
1648
  this.inflightRequests = /* @__PURE__ */ new Map();
1290
1649
  this.publicKey = config.publicKey || "";
1291
1650
  const urls = deriveUrls();
@@ -1296,15 +1655,23 @@ var CimplifyClient = class {
1296
1655
  this.maxRetries = config.maxRetries ?? DEFAULT_MAX_RETRIES;
1297
1656
  this.retryDelay = config.retryDelay ?? DEFAULT_RETRY_DELAY_MS;
1298
1657
  this.hooks = config.hooks ?? {};
1299
- this.sessionToken = this.loadSessionToken();
1658
+ this.accessToken = this.loadAccessToken();
1300
1659
  }
1660
+ /** @deprecated Use getAccessToken() instead */
1301
1661
  getSessionToken() {
1302
- return this.sessionToken;
1662
+ return this.accessToken;
1303
1663
  }
1664
+ /** @deprecated Use setAccessToken() instead */
1304
1665
  setSessionToken(token) {
1305
- const previous = this.sessionToken;
1306
- this.sessionToken = token;
1307
- this.saveSessionToken(token);
1666
+ this.setAccessToken(token);
1667
+ }
1668
+ getAccessToken() {
1669
+ return this.accessToken;
1670
+ }
1671
+ setAccessToken(token) {
1672
+ const previous = this.accessToken;
1673
+ this.accessToken = token;
1674
+ this.saveAccessToken(token);
1308
1675
  this.hooks.onSessionChange?.({
1309
1676
  previousToken: previous,
1310
1677
  newToken: token,
@@ -1312,27 +1679,27 @@ var CimplifyClient = class {
1312
1679
  });
1313
1680
  }
1314
1681
  clearSession() {
1315
- const previous = this.sessionToken;
1316
- this.sessionToken = null;
1317
- this.saveSessionToken(null);
1682
+ const previous = this.accessToken;
1683
+ this.accessToken = null;
1684
+ this.saveAccessToken(null);
1318
1685
  this.hooks.onSessionChange?.({
1319
1686
  previousToken: previous,
1320
1687
  newToken: null,
1321
1688
  source: "clear"
1322
1689
  });
1323
1690
  }
1324
- loadSessionToken() {
1691
+ loadAccessToken() {
1325
1692
  if (typeof window !== "undefined" && window.localStorage) {
1326
- return localStorage.getItem(SESSION_STORAGE_KEY);
1693
+ return localStorage.getItem(ACCESS_TOKEN_STORAGE_KEY);
1327
1694
  }
1328
1695
  return null;
1329
1696
  }
1330
- saveSessionToken(token) {
1697
+ saveAccessToken(token) {
1331
1698
  if (typeof window !== "undefined" && window.localStorage) {
1332
1699
  if (token) {
1333
- localStorage.setItem(SESSION_STORAGE_KEY, token);
1700
+ localStorage.setItem(ACCESS_TOKEN_STORAGE_KEY, token);
1334
1701
  } else {
1335
- localStorage.removeItem(SESSION_STORAGE_KEY);
1702
+ localStorage.removeItem(ACCESS_TOKEN_STORAGE_KEY);
1336
1703
  }
1337
1704
  }
1338
1705
  }
@@ -1341,24 +1708,11 @@ var CimplifyClient = class {
1341
1708
  "Content-Type": "application/json",
1342
1709
  "X-API-Key": this.publicKey
1343
1710
  };
1344
- if (this.sessionToken) {
1345
- headers[SESSION_TOKEN_HEADER] = this.sessionToken;
1711
+ if (this.accessToken) {
1712
+ headers["Authorization"] = `Bearer ${this.accessToken}`;
1346
1713
  }
1347
1714
  return headers;
1348
1715
  }
1349
- updateSessionFromResponse(response) {
1350
- const newToken = response.headers.get(SESSION_TOKEN_HEADER);
1351
- if (newToken && newToken !== this.sessionToken) {
1352
- const previous = this.sessionToken;
1353
- this.sessionToken = newToken;
1354
- this.saveSessionToken(newToken);
1355
- this.hooks.onSessionChange?.({
1356
- previousToken: previous,
1357
- newToken,
1358
- source: "response"
1359
- });
1360
- }
1361
- }
1362
1716
  async resilientFetch(url, options) {
1363
1717
  const method = options.method || "GET";
1364
1718
  const path = url.replace(this.baseUrl, "").replace(this.linkApiUrl, "");
@@ -1470,7 +1824,6 @@ var CimplifyClient = class {
1470
1824
  headers: this.getHeaders(),
1471
1825
  body: JSON.stringify(body)
1472
1826
  });
1473
- this.updateSessionFromResponse(response);
1474
1827
  return this.handleResponse(response);
1475
1828
  });
1476
1829
  }
@@ -1485,7 +1838,6 @@ var CimplifyClient = class {
1485
1838
  headers: this.getHeaders(),
1486
1839
  body: JSON.stringify(body)
1487
1840
  });
1488
- this.updateSessionFromResponse(response);
1489
1841
  return this.handleResponse(response);
1490
1842
  }
1491
1843
  async get(path) {
@@ -1496,7 +1848,6 @@ var CimplifyClient = class {
1496
1848
  credentials: this.credentials,
1497
1849
  headers: this.getHeaders()
1498
1850
  });
1499
- this.updateSessionFromResponse(response);
1500
1851
  return this.handleRestResponse(response);
1501
1852
  });
1502
1853
  }
@@ -1507,7 +1858,6 @@ var CimplifyClient = class {
1507
1858
  headers: this.getHeaders(),
1508
1859
  body: body ? JSON.stringify(body) : void 0
1509
1860
  });
1510
- this.updateSessionFromResponse(response);
1511
1861
  return this.handleRestResponse(response);
1512
1862
  }
1513
1863
  async delete(path) {
@@ -1516,7 +1866,6 @@ var CimplifyClient = class {
1516
1866
  credentials: this.credentials,
1517
1867
  headers: this.getHeaders()
1518
1868
  });
1519
- this.updateSessionFromResponse(response);
1520
1869
  return this.handleRestResponse(response);
1521
1870
  }
1522
1871
  async linkGet(path) {
@@ -1527,7 +1876,6 @@ var CimplifyClient = class {
1527
1876
  credentials: this.credentials,
1528
1877
  headers: this.getHeaders()
1529
1878
  });
1530
- this.updateSessionFromResponse(response);
1531
1879
  return this.handleRestResponse(response);
1532
1880
  });
1533
1881
  }
@@ -1538,7 +1886,6 @@ var CimplifyClient = class {
1538
1886
  headers: this.getHeaders(),
1539
1887
  body: body ? JSON.stringify(body) : void 0
1540
1888
  });
1541
- this.updateSessionFromResponse(response);
1542
1889
  return this.handleRestResponse(response);
1543
1890
  }
1544
1891
  async linkDelete(path) {
@@ -1547,7 +1894,6 @@ var CimplifyClient = class {
1547
1894
  credentials: this.credentials,
1548
1895
  headers: this.getHeaders()
1549
1896
  });
1550
- this.updateSessionFromResponse(response);
1551
1897
  return this.handleRestResponse(response);
1552
1898
  }
1553
1899
  async handleRestResponse(response) {
@@ -1632,6 +1978,23 @@ var CimplifyClient = class {
1632
1978
  }
1633
1979
  return this._lite;
1634
1980
  }
1981
+ /**
1982
+ * Create a CimplifyElements instance for embedding checkout components.
1983
+ * Like Stripe's stripe.elements().
1984
+ *
1985
+ * @param businessId - The business ID for checkout context
1986
+ * @param options - Optional configuration for elements
1987
+ *
1988
+ * @example
1989
+ * ```ts
1990
+ * const elements = client.elements('bus_xxx');
1991
+ * const authElement = elements.create('auth');
1992
+ * authElement.mount('#auth-container');
1993
+ * ```
1994
+ */
1995
+ elements(businessId, options) {
1996
+ return createElements(this, businessId, options);
1997
+ }
1635
1998
  };
1636
1999
  function createCimplifyClient(config) {
1637
2000
  return new CimplifyClient(config);
@@ -2195,21 +2558,28 @@ exports.BusinessService = BusinessService;
2195
2558
  exports.CHECKOUT_MODE = CHECKOUT_MODE;
2196
2559
  exports.CHECKOUT_MUTATION = CHECKOUT_MUTATION;
2197
2560
  exports.CHECKOUT_STEP = CHECKOUT_STEP;
2561
+ exports.CONTACT_TYPE = CONTACT_TYPE;
2198
2562
  exports.CURRENCY_SYMBOLS = CURRENCY_SYMBOLS;
2199
2563
  exports.CartOperations = CartOperations;
2200
2564
  exports.CatalogueQueries = CatalogueQueries;
2201
2565
  exports.CheckoutOperations = CheckoutService;
2202
2566
  exports.CheckoutService = CheckoutService;
2203
2567
  exports.CimplifyClient = CimplifyClient;
2568
+ exports.CimplifyElement = CimplifyElement;
2569
+ exports.CimplifyElements = CimplifyElements;
2204
2570
  exports.CimplifyError = CimplifyError;
2205
2571
  exports.DEFAULT_COUNTRY = DEFAULT_COUNTRY;
2206
2572
  exports.DEFAULT_CURRENCY = DEFAULT_CURRENCY;
2573
+ exports.DEVICE_TYPE = DEVICE_TYPE;
2574
+ exports.ELEMENT_TYPES = ELEMENT_TYPES;
2575
+ exports.EVENT_TYPES = EVENT_TYPES;
2207
2576
  exports.ErrorCode = ErrorCode;
2208
2577
  exports.InventoryService = InventoryService;
2209
2578
  exports.LINK_MUTATION = LINK_MUTATION;
2210
2579
  exports.LINK_QUERY = LINK_QUERY;
2211
2580
  exports.LinkService = LinkService;
2212
2581
  exports.LiteService = LiteService;
2582
+ exports.MESSAGE_TYPES = MESSAGE_TYPES;
2213
2583
  exports.MOBILE_MONEY_PROVIDER = MOBILE_MONEY_PROVIDER;
2214
2584
  exports.MOBILE_MONEY_PROVIDERS = MOBILE_MONEY_PROVIDERS;
2215
2585
  exports.ORDER_MUTATION = ORDER_MUTATION;
@@ -2225,6 +2595,7 @@ exports.categorizePaymentError = categorizePaymentError;
2225
2595
  exports.combine = combine;
2226
2596
  exports.combineObject = combineObject;
2227
2597
  exports.createCimplifyClient = createCimplifyClient;
2598
+ exports.createElements = createElements;
2228
2599
  exports.detectMobileMoneyProvider = detectMobileMoneyProvider;
2229
2600
  exports.err = err;
2230
2601
  exports.extractPriceInfo = extractPriceInfo;