@shopfront/bridge 1.20.5 → 2.0.1

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 (235) hide show
  1. package/.idea/codeStyles/Project.xml +10 -0
  2. package/.idea/codeStyles/codeStyleConfig.xml +5 -0
  3. package/.idea/git_toolbox_blame.xml +6 -0
  4. package/.idea/git_toolbox_prj.xml +15 -0
  5. package/.idea/inspectionProfiles/Project_Default.xml +5 -0
  6. package/.idea/jsLinters/eslint.xml +6 -0
  7. package/.idea/misc.xml +6 -0
  8. package/.idea/php.xml +15 -1
  9. package/.idea/shopfront-embedded-bridge.iml +3 -1
  10. package/.idea/vcs.xml +1 -1
  11. package/eslint.config.js +16 -0
  12. package/jest.config.js +8 -0
  13. package/lib/APIs/Database/BaseDatabase.d.ts +28 -0
  14. package/lib/APIs/Database/BaseDatabase.js +5 -0
  15. package/lib/APIs/Database/Database.d.ts +19 -7
  16. package/lib/APIs/Database/Database.js +22 -12
  17. package/lib/APIs/Database/types/BaseBarcodeTemplateRepository.d.ts +8 -0
  18. package/lib/APIs/Database/types/BaseBarcodeTemplateRepository.js +1 -0
  19. package/lib/APIs/Database/types/BaseClassificationRepository.d.ts +11 -0
  20. package/lib/APIs/Database/types/BaseClassificationRepository.js +1 -0
  21. package/lib/APIs/Database/types/BaseCustomerDisplayRepository.d.ts +10 -0
  22. package/lib/APIs/Database/types/BaseCustomerDisplayRepository.js +1 -0
  23. package/lib/APIs/Database/types/BaseCustomerGroupRepository.d.ts +24 -0
  24. package/lib/APIs/Database/types/BaseCustomerGroupRepository.js +1 -0
  25. package/lib/APIs/Database/types/BaseCustomerRepository.d.ts +76 -0
  26. package/lib/APIs/Database/types/BaseCustomerRepository.js +1 -0
  27. package/lib/APIs/Database/types/BaseEnterpriseRepository.d.ts +8 -0
  28. package/lib/APIs/Database/types/BaseEnterpriseRepository.js +1 -0
  29. package/lib/APIs/Database/types/BaseGiftCardRepository.d.ts +18 -0
  30. package/lib/APIs/Database/types/BaseGiftCardRepository.js +1 -0
  31. package/lib/APIs/Database/types/BaseKitchenOrderRepository.d.ts +41 -0
  32. package/lib/APIs/Database/types/BaseKitchenOrderRepository.js +1 -0
  33. package/lib/APIs/Database/types/BaseKitchenScreenRepository.d.ts +16 -0
  34. package/lib/APIs/Database/types/BaseKitchenScreenRepository.js +1 -0
  35. package/lib/APIs/Database/types/BaseLockedResourceRepository.d.ts +12 -0
  36. package/lib/APIs/Database/types/BaseLockedResourceRepository.js +1 -0
  37. package/lib/APIs/Database/types/BaseLoyaltyRepository.d.ts +16 -0
  38. package/lib/APIs/Database/types/BaseLoyaltyRepository.js +1 -0
  39. package/lib/APIs/Database/types/BaseMovementRepository.d.ts +16 -0
  40. package/lib/APIs/Database/types/BaseMovementRepository.js +1 -0
  41. package/lib/APIs/Database/types/BaseOutletRepository.d.ts +19 -0
  42. package/lib/APIs/Database/types/BaseOutletRepository.js +1 -0
  43. package/lib/APIs/Database/types/BasePaymentMethodRepository.d.ts +27 -0
  44. package/lib/APIs/Database/types/BasePaymentMethodRepository.js +1 -0
  45. package/lib/APIs/Database/types/BasePriceListRepository.d.ts +40 -0
  46. package/lib/APIs/Database/types/BasePriceListRepository.js +1 -0
  47. package/lib/APIs/Database/types/BasePriceSetRepository.d.ts +6 -0
  48. package/lib/APIs/Database/types/BasePriceSetRepository.js +1 -0
  49. package/lib/APIs/Database/types/BaseProductRepository.d.ts +160 -0
  50. package/lib/APIs/Database/types/BaseProductRepository.js +1 -0
  51. package/lib/APIs/Database/types/BasePromotionCategoryRepository.d.ts +10 -0
  52. package/lib/APIs/Database/types/BasePromotionCategoryRepository.js +1 -0
  53. package/lib/APIs/Database/types/BasePromotionRepository.d.ts +72 -0
  54. package/lib/APIs/Database/types/BasePromotionRepository.js +1 -0
  55. package/lib/APIs/Database/types/BaseReceiptRepository.d.ts +31 -0
  56. package/lib/APIs/Database/types/BaseReceiptRepository.js +1 -0
  57. package/lib/APIs/Database/types/BaseRegisterRepository.d.ts +56 -0
  58. package/lib/APIs/Database/types/BaseRegisterRepository.js +1 -0
  59. package/lib/APIs/Database/types/BaseRepository.d.ts +41 -0
  60. package/lib/APIs/Database/types/BaseRepository.js +1 -0
  61. package/lib/APIs/Database/types/BaseSalesKeyRepository.d.ts +37 -0
  62. package/lib/APIs/Database/types/BaseSalesKeyRepository.js +1 -0
  63. package/lib/APIs/Database/types/BaseSalesRepository.d.ts +123 -0
  64. package/lib/APIs/Database/types/BaseSalesRepository.js +1 -0
  65. package/lib/APIs/Database/types/BaseSearchableRepository.d.ts +8 -0
  66. package/lib/APIs/Database/types/BaseSearchableRepository.js +1 -0
  67. package/lib/APIs/Database/types/BaseStocktakeAccumulatedRepository.d.ts +16 -0
  68. package/lib/APIs/Database/types/BaseStocktakeAccumulatedRepository.js +1 -0
  69. package/lib/APIs/Database/types/BaseStocktakeRepository.d.ts +8 -0
  70. package/lib/APIs/Database/types/BaseStocktakeRepository.js +1 -0
  71. package/lib/APIs/Database/types/BaseStocktakeScannedRepository.d.ts +24 -0
  72. package/lib/APIs/Database/types/BaseStocktakeScannedRepository.js +1 -0
  73. package/lib/APIs/Database/types/BaseSupplierRepository.d.ts +35 -0
  74. package/lib/APIs/Database/types/BaseSupplierRepository.js +1 -0
  75. package/lib/APIs/Database/types/BaseTakingsRepository.d.ts +13 -0
  76. package/lib/APIs/Database/types/BaseTakingsRepository.js +1 -0
  77. package/lib/APIs/Database/types/BaseTaxRateRepository.d.ts +9 -0
  78. package/lib/APIs/Database/types/BaseTaxRateRepository.js +1 -0
  79. package/lib/APIs/Database/types/BaseTransfereeRepository.d.ts +12 -0
  80. package/lib/APIs/Database/types/BaseTransfereeRepository.js +1 -0
  81. package/lib/APIs/Database/types/BaseVendorConnectionRepository.d.ts +7 -0
  82. package/lib/APIs/Database/types/BaseVendorConnectionRepository.js +1 -0
  83. package/lib/APIs/Database/types/DataSourceTables.d.ts +61 -0
  84. package/lib/APIs/Database/types/DataSourceTables.js +1 -0
  85. package/lib/APIs/Fulfilment/FulfilmentTypes.d.ts +2 -2
  86. package/lib/APIs/Fulfilment/FulfilmentTypes.js +1 -2
  87. package/lib/APIs/InternalMessages/InternalMessageSource.d.ts +6 -3
  88. package/lib/APIs/InternalMessages/InternalMessageSource.js +6 -7
  89. package/lib/APIs/Sale/BaseCurrentSale.d.ts +83 -0
  90. package/lib/APIs/Sale/BaseCurrentSale.js +13 -0
  91. package/lib/APIs/Sale/BaseSale.d.ts +3 -38
  92. package/lib/APIs/Sale/BaseSale.js +1 -40
  93. package/lib/APIs/Sale/CurrentSale.d.ts +19 -84
  94. package/lib/APIs/Sale/CurrentSale.js +32 -102
  95. package/lib/APIs/Sale/Exceptions.d.ts +3 -0
  96. package/lib/APIs/Sale/Exceptions.js +7 -7
  97. package/lib/APIs/Sale/Sale.d.ts +39 -7
  98. package/lib/APIs/Sale/Sale.js +41 -13
  99. package/lib/APIs/Sale/SaleCustomer.d.ts +0 -2
  100. package/lib/APIs/Sale/SaleCustomer.js +1 -7
  101. package/lib/APIs/Sale/SalePayment.d.ts +3 -22
  102. package/lib/APIs/Sale/SalePayment.js +7 -33
  103. package/lib/APIs/Sale/SaleProduct.d.ts +6 -46
  104. package/lib/APIs/Sale/SaleProduct.js +6 -53
  105. package/lib/APIs/Sale/ShopfrontSaleState.d.ts +7 -9
  106. package/lib/APIs/Sale/ShopfrontSaleState.js +1 -2
  107. package/lib/APIs/Sale/index.d.ts +9 -9
  108. package/lib/APIs/Sale/index.js +7 -39
  109. package/lib/Actions/BaseAction.d.ts +21 -5
  110. package/lib/Actions/BaseAction.js +155 -97
  111. package/lib/Actions/Button.d.ts +2 -2
  112. package/lib/Actions/Button.js +3 -7
  113. package/lib/Actions/CustomerListOption.d.ts +2 -2
  114. package/lib/Actions/CustomerListOption.js +2 -6
  115. package/lib/Actions/Dialog.d.ts +4 -4
  116. package/lib/Actions/Dialog.js +2 -6
  117. package/lib/Actions/Redirect.d.ts +2 -2
  118. package/lib/Actions/Redirect.js +7 -9
  119. package/lib/Actions/SaleKey.d.ts +2 -2
  120. package/lib/Actions/SaleKey.js +3 -7
  121. package/lib/Actions/SaleUpdate.d.ts +3 -3
  122. package/lib/Actions/SaleUpdate.js +3 -7
  123. package/lib/Actions/Toast.d.ts +3 -3
  124. package/lib/Actions/Toast.js +2 -6
  125. package/lib/Application.d.ts +114 -78
  126. package/lib/Application.js +199 -164
  127. package/lib/ApplicationEvents.d.ts +55 -54
  128. package/lib/ApplicationEvents.js +9 -6
  129. package/lib/BaseApplication.d.ts +169 -0
  130. package/lib/BaseApplication.js +40 -0
  131. package/lib/BaseBridge.d.ts +33 -0
  132. package/lib/BaseBridge.js +16 -0
  133. package/lib/Bridge.d.ts +46 -9
  134. package/lib/Bridge.js +42 -54
  135. package/lib/Common/EventEmitter.d.ts +10 -1
  136. package/lib/Common/EventEmitter.js +10 -5
  137. package/lib/Common/Serializable.d.ts +8 -6
  138. package/lib/Common/Serializable.js +1 -2
  139. package/lib/EmitableEvents/BaseEmitableEvent.d.ts +7 -1
  140. package/lib/EmitableEvents/BaseEmitableEvent.js +7 -5
  141. package/lib/EmitableEvents/Fulfilment/Options.d.ts +1 -1
  142. package/lib/EmitableEvents/Fulfilment/Options.js +4 -8
  143. package/lib/EmitableEvents/Fulfilment/OrderCancel.d.ts +1 -1
  144. package/lib/EmitableEvents/Fulfilment/OrderCancel.js +4 -8
  145. package/lib/EmitableEvents/Fulfilment/OrderCreate.d.ts +2 -2
  146. package/lib/EmitableEvents/Fulfilment/OrderCreate.js +4 -8
  147. package/lib/EmitableEvents/Fulfilment/OrderUpdate.d.ts +2 -2
  148. package/lib/EmitableEvents/Fulfilment/OrderUpdate.js +4 -8
  149. package/lib/EmitableEvents/Fulfilment/OrdersSync.d.ts +2 -2
  150. package/lib/EmitableEvents/Fulfilment/OrdersSync.js +4 -8
  151. package/lib/EmitableEvents/Fulfilment/RegisterIntent.d.ts +2 -2
  152. package/lib/EmitableEvents/Fulfilment/RegisterIntent.js +4 -8
  153. package/lib/EmitableEvents/Fulfilment/index.d.ts +7 -7
  154. package/lib/EmitableEvents/Fulfilment/index.js +6 -15
  155. package/lib/EmitableEvents/InternalMessage.d.ts +2 -2
  156. package/lib/EmitableEvents/InternalMessage.js +4 -8
  157. package/lib/EmitableEvents/SellScreenOption.d.ts +2 -2
  158. package/lib/EmitableEvents/SellScreenOption.js +7 -11
  159. package/lib/EmitableEvents/SellScreenPromotionApplicable.d.ts +1 -1
  160. package/lib/EmitableEvents/SellScreenPromotionApplicable.js +4 -8
  161. package/lib/EmitableEvents/TableUpdate.d.ts +2 -2
  162. package/lib/EmitableEvents/TableUpdate.js +4 -8
  163. package/lib/Events/AudioPermissionChange.d.ts +5 -2
  164. package/lib/Events/AudioPermissionChange.js +6 -7
  165. package/lib/Events/AudioReady.d.ts +5 -2
  166. package/lib/Events/AudioReady.js +6 -7
  167. package/lib/Events/BaseEvent.d.ts +8 -3
  168. package/lib/Events/BaseEvent.js +1 -6
  169. package/lib/Events/Callback.d.ts +5 -2
  170. package/lib/Events/Callback.js +5 -6
  171. package/lib/Events/FormatIntegratedProduct.d.ts +27 -32
  172. package/lib/Events/FormatIntegratedProduct.js +12 -9
  173. package/lib/Events/FulfilmentCollectOrder.d.ts +5 -2
  174. package/lib/Events/FulfilmentCollectOrder.js +5 -6
  175. package/lib/Events/FulfilmentCompleteOrder.d.ts +5 -2
  176. package/lib/Events/FulfilmentCompleteOrder.js +5 -6
  177. package/lib/Events/FulfilmentGetOrder.d.ts +12 -6
  178. package/lib/Events/FulfilmentGetOrder.js +10 -8
  179. package/lib/Events/FulfilmentOrderApproval.d.ts +5 -2
  180. package/lib/Events/FulfilmentOrderApproval.js +5 -6
  181. package/lib/Events/FulfilmentProcessOrder.d.ts +12 -10
  182. package/lib/Events/FulfilmentProcessOrder.js +7 -8
  183. package/lib/Events/FulfilmentVoidOrder.d.ts +5 -2
  184. package/lib/Events/FulfilmentVoidOrder.js +5 -6
  185. package/lib/Events/GiftCardCodeCheck.d.ts +16 -11
  186. package/lib/Events/GiftCardCodeCheck.js +11 -9
  187. package/lib/Events/InternalPageMessage.d.ts +10 -4
  188. package/lib/Events/InternalPageMessage.js +12 -10
  189. package/lib/Events/PaymentMethodsEnabled.d.ts +16 -11
  190. package/lib/Events/PaymentMethodsEnabled.js +10 -8
  191. package/lib/Events/Ready.d.ts +12 -7
  192. package/lib/Events/Ready.js +5 -6
  193. package/lib/Events/RegisterChanged.d.ts +12 -6
  194. package/lib/Events/RegisterChanged.js +6 -7
  195. package/lib/Events/RequestButtons.d.ts +17 -12
  196. package/lib/Events/RequestButtons.js +13 -11
  197. package/lib/Events/RequestCustomerListOptions.d.ts +11 -5
  198. package/lib/Events/RequestCustomerListOptions.js +12 -11
  199. package/lib/Events/RequestSaleKeys.d.ts +12 -6
  200. package/lib/Events/RequestSaleKeys.js +13 -11
  201. package/lib/Events/RequestSellScreenOptions.d.ts +18 -5
  202. package/lib/Events/RequestSellScreenOptions.js +17 -9
  203. package/lib/Events/RequestSettings.d.ts +11 -5
  204. package/lib/Events/RequestSettings.js +12 -10
  205. package/lib/Events/RequestTableColumns.d.ts +16 -11
  206. package/lib/Events/RequestTableColumns.js +12 -9
  207. package/lib/Events/SaleComplete.d.ts +15 -18
  208. package/lib/Events/SaleComplete.js +6 -7
  209. package/lib/Events/UIPipeline.d.ts +17 -5
  210. package/lib/Events/UIPipeline.js +17 -10
  211. package/lib/Mocks/APIs/Sale/MockCurrentSale.d.ts +99 -0
  212. package/lib/Mocks/APIs/Sale/MockCurrentSale.js +326 -0
  213. package/lib/Mocks/Database/MockDatabase.d.ts +96 -0
  214. package/lib/Mocks/Database/MockDatabase.js +89 -0
  215. package/lib/Mocks/MockApplication.d.ts +154 -0
  216. package/lib/Mocks/MockApplication.js +482 -0
  217. package/lib/Mocks/MockBridge.d.ts +31 -0
  218. package/lib/Mocks/MockBridge.js +77 -0
  219. package/lib/Mocks/index.d.ts +7 -0
  220. package/lib/Mocks/index.js +15 -0
  221. package/lib/Utilities/ActionEventRegistrar.d.ts +19 -4
  222. package/lib/Utilities/ActionEventRegistrar.js +19 -3
  223. package/lib/Utilities/MiscTypes.d.ts +6 -4
  224. package/lib/Utilities/MiscTypes.js +1 -2
  225. package/lib/Utilities/SaleCreate.d.ts +6 -2
  226. package/lib/Utilities/SaleCreate.js +10 -6
  227. package/lib/Utilities/Static.d.ts +3 -0
  228. package/lib/Utilities/Static.js +5 -7
  229. package/lib/Utilities/UUID.d.ts +9 -3
  230. package/lib/Utilities/UUID.js +10 -7
  231. package/lib/index.d.ts +16 -14
  232. package/lib/index.js +14 -49
  233. package/package.json +12 -10
  234. package/lib/Events/CheckGiftCardCollision.d.ts +0 -14
  235. package/lib/Events/CheckGiftCardCollision.js +0 -25
@@ -1,76 +1,45 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.Application = exports.ShopfrontTokenRequestError = exports.ShopfrontTokenDecodingError = void 0;
7
- const ApplicationEvents_1 = require("./ApplicationEvents");
8
- const Ready_1 = require("./Events/Ready");
9
- const Button_1 = require("./Actions/Button");
10
- const RequestSettings_1 = require("./Events/RequestSettings");
11
- const RequestButtons_1 = require("./Events/RequestButtons");
12
- const ActionEventRegistrar_1 = __importDefault(require("./Utilities/ActionEventRegistrar"));
13
- const RequestTableColumns_1 = require("./Events/RequestTableColumns");
14
- const RequestSellScreenOptions_1 = require("./Events/RequestSellScreenOptions");
15
- const BaseEmitableEvent_1 = require("./EmitableEvents/BaseEmitableEvent");
16
- const InternalPageMessage_1 = require("./Events/InternalPageMessage");
17
- const RegisterChanged_1 = require("./Events/RegisterChanged");
18
- const Database_1 = require("./APIs/Database/Database");
19
- const FormatIntegratedProduct_1 = require("./Events/FormatIntegratedProduct");
20
- const RequestCustomerListOptions_1 = require("./Events/RequestCustomerListOptions");
21
- const RequestSaleKeys_1 = require("./Events/RequestSaleKeys");
22
- const SaleComplete_1 = require("./Events/SaleComplete");
23
- const UIPipeline_1 = require("./Events/UIPipeline");
24
- const PaymentMethodsEnabled_1 = require("./Events/PaymentMethodsEnabled");
25
- const AudioPermissionChange_1 = require("./Events/AudioPermissionChange");
26
- const FulfilmentGetOrder_1 = require("./Events/FulfilmentGetOrder");
27
- const FulfilmentVoidOrder_1 = require("./Events/FulfilmentVoidOrder");
28
- const FulfilmentProcessOrder_1 = require("./Events/FulfilmentProcessOrder");
29
- const FulfilmentOrderApproval_1 = require("./Events/FulfilmentOrderApproval");
30
- const FulfilmentCollectOrder_1 = require("./Events/FulfilmentCollectOrder");
31
- const FulfilmentCompleteOrder_1 = require("./Events/FulfilmentCompleteOrder");
32
- const CurrentSale_1 = require("./APIs/Sale/CurrentSale");
33
- const SaleCreate_1 = require("./Utilities/SaleCreate");
34
- const AudioReady_1 = require("./Events/AudioReady");
35
- const GiftCardCodeCheck_1 = require("./Events/GiftCardCodeCheck");
36
- class ShopfrontTokenDecodingError extends Error {
37
- }
38
- exports.ShopfrontTokenDecodingError = ShopfrontTokenDecodingError;
39
- class ShopfrontTokenRequestError extends Error {
40
- }
41
- exports.ShopfrontTokenRequestError = ShopfrontTokenRequestError;
42
- // noinspection JSUnusedGlobalSymbols
43
- class Application {
1
+ import { Button } from "./Actions/Button.js";
2
+ import { Database } from "./APIs/Database/Database.js";
3
+ import { CurrentSale } from "./APIs/Sale/CurrentSale.js";
4
+ import { isDirectShopfrontEvent, ToShopfront, } from "./ApplicationEvents.js";
5
+ import { BaseApplication, ShopfrontTokenDecodingError, ShopfrontTokenRequestError, } from "./BaseApplication.js";
6
+ import { BaseEmitableEvent } from "./EmitableEvents/BaseEmitableEvent.js";
7
+ import { AudioPermissionChange } from "./Events/AudioPermissionChange.js";
8
+ import { AudioReady } from "./Events/AudioReady.js";
9
+ import { FormatIntegratedProduct } from "./Events/FormatIntegratedProduct.js";
10
+ import { FulfilmentCollectOrder } from "./Events/FulfilmentCollectOrder.js";
11
+ import { FulfilmentCompleteOrder } from "./Events/FulfilmentCompleteOrder.js";
12
+ import { FulfilmentGetOrder } from "./Events/FulfilmentGetOrder.js";
13
+ import { FulfilmentOrderApproval } from "./Events/FulfilmentOrderApproval.js";
14
+ import { FulfilmentProcessOrder } from "./Events/FulfilmentProcessOrder.js";
15
+ import { FulfilmentVoidOrder } from "./Events/FulfilmentVoidOrder.js";
16
+ import { GiftCardCodeCheck } from "./Events/GiftCardCodeCheck.js";
17
+ import { InternalPageMessage } from "./Events/InternalPageMessage.js";
18
+ import { PaymentMethodsEnabled } from "./Events/PaymentMethodsEnabled.js";
19
+ import { Ready } from "./Events/Ready.js";
20
+ import { RegisterChanged } from "./Events/RegisterChanged.js";
21
+ import { RequestButtons } from "./Events/RequestButtons.js";
22
+ import { RequestCustomerListOptions } from "./Events/RequestCustomerListOptions.js";
23
+ import { RequestSaleKeys } from "./Events/RequestSaleKeys.js";
24
+ import { RequestSellScreenOptions } from "./Events/RequestSellScreenOptions.js";
25
+ import { RequestSettings } from "./Events/RequestSettings.js";
26
+ import { RequestTableColumns } from "./Events/RequestTableColumns.js";
27
+ import { SaleComplete } from "./Events/SaleComplete.js";
28
+ import { UIPipeline } from "./Events/UIPipeline.js";
29
+ import ActionEventRegistrar from "./Utilities/ActionEventRegistrar.js";
30
+ import { buildSaleData } from "./Utilities/SaleCreate.js";
31
+ export class Application extends BaseApplication {
44
32
  constructor(bridge) {
45
- this.listeners = {
46
- READY: new Map(),
47
- REQUEST_SETTINGS: new Map(),
48
- REQUEST_BUTTONS: new Map(),
49
- REQUEST_TABLE_COLUMNS: new Map(),
50
- REQUEST_SELL_SCREEN_OPTIONS: new Map(),
51
- INTERNAL_PAGE_MESSAGE: new Map(),
52
- REGISTER_CHANGED: new Map(),
53
- FORMAT_INTEGRATED_PRODUCT: new Map(),
54
- REQUEST_CUSTOMER_LIST_OPTIONS: new Map(),
55
- REQUEST_SALE_KEYS: new Map(),
56
- SALE_COMPLETE: new Map(),
57
- UI_PIPELINE: new Map(),
58
- PAYMENT_METHODS_ENABLED: new Map(),
59
- AUDIO_PERMISSION_CHANGE: new Map(),
60
- AUDIO_READY: new Map(),
61
- FULFILMENT_GET_ORDER: new Map(),
62
- FULFILMENT_PROCESS_ORDER: new Map(),
63
- FULFILMENT_VOID_ORDER: new Map(),
64
- FULFILMENT_ORDER_APPROVAL: new Map(),
65
- FULFILMENT_ORDER_COLLECTED: new Map(),
66
- FULFILMENT_ORDER_COMPLETED: new Map(),
67
- GIFT_CARD_CODE_CHECK: new Map(),
68
- };
69
- this.directListeners = {};
33
+ super(bridge, new Database(bridge));
34
+ /**
35
+ * Handles an application event
36
+ */
70
37
  this.handleEvent = (event, data, id) => {
71
38
  if (event === "READY") {
72
39
  this.isReady = true;
73
40
  this.key = data.key;
41
+ this.outlet = data.outlet;
42
+ this.register = data.register;
74
43
  data = {
75
44
  outlet: data.outlet,
76
45
  register: data.register,
@@ -89,7 +58,7 @@ class Application {
89
58
  }
90
59
  else if (event === "LOCATION_CHANGED") {
91
60
  // Unregister all serialized listeners as they're no longer displayed
92
- ActionEventRegistrar_1.default.clear();
61
+ ActionEventRegistrar.clear();
93
62
  return;
94
63
  }
95
64
  else if (event === "RESPONSE_CURRENT_SALE" ||
@@ -104,42 +73,39 @@ class Application {
104
73
  }
105
74
  this.emit(event, data, id);
106
75
  };
107
- this.bridge = bridge;
108
- this.isReady = false;
109
- this.key = '';
110
- this.register = null;
111
- this.outlet = null;
112
- this.user = null;
113
- this.database = new Database_1.Database(this.bridge);
114
76
  this.bridge.addEventListener(this.handleEvent);
115
77
  this.addEventListener("REGISTER_CHANGED", this.handleLocationChanged);
116
78
  }
79
+ /**
80
+ * @inheritDoc
81
+ */
117
82
  destroy() {
118
83
  this.bridge.destroy();
119
84
  }
85
+ /**
86
+ * Calls any registered listeners for the received event
87
+ */
120
88
  emit(event, data = {}, id) {
121
- if (ApplicationEvents_1.directShopfrontEvents.includes(event)) {
122
- event = event;
89
+ if (isDirectShopfrontEvent(event)) {
123
90
  const listeners = this.directListeners[event];
124
91
  if (typeof listeners === "undefined") {
125
- return this.bridge.sendMessage(ApplicationEvents_1.ToShopfront.NOT_LISTENING_TO_EVENT);
92
+ return this.bridge.sendMessage(ToShopfront.NOT_LISTENING_TO_EVENT);
126
93
  }
127
94
  const results = [];
128
95
  for (const e of listeners.values()) {
129
- results.push(e(data));
96
+ results.push(e());
130
97
  }
131
98
  return Promise.all(results)
132
99
  .then(() => {
133
100
  // Ensure void is returned
134
101
  });
135
102
  }
136
- event = event;
137
103
  let results = [];
138
104
  if (typeof this.listeners[event] === "undefined") {
139
- return this.bridge.sendMessage(ApplicationEvents_1.ToShopfront.UNSUPPORTED_EVENT, event, id);
105
+ return this.bridge.sendMessage(ToShopfront.UNSUPPORTED_EVENT, event, id);
140
106
  }
141
107
  if (this.listeners[event].size === 0) {
142
- return this.bridge.sendMessage(ApplicationEvents_1.ToShopfront.NOT_LISTENING_TO_EVENT, event, id);
108
+ return this.bridge.sendMessage(ToShopfront.NOT_LISTENING_TO_EVENT, event, id);
143
109
  }
144
110
  for (const e of this.listeners[event].values()) {
145
111
  results.push(e.emit(data, this.bridge));
@@ -150,69 +116,71 @@ class Application {
150
116
  results = results;
151
117
  return Promise.all(results)
152
118
  .then((res) => {
153
- return RequestButtons_1.RequestButtons.respond(this.bridge, res.flat(), id);
119
+ return RequestButtons.respond(this.bridge, res.flat(), id);
154
120
  });
155
121
  case "REQUEST_SETTINGS":
156
122
  results = results;
157
123
  return Promise.all(results)
158
124
  .then((res) => {
159
- return RequestSettings_1.RequestSettings.respond(this.bridge, res.flat(), id);
125
+ return RequestSettings.respond(this.bridge, res.flat(), id);
160
126
  });
161
127
  case "REQUEST_TABLE_COLUMNS":
162
128
  results = results;
163
129
  return Promise.all(results)
164
130
  .then((res) => {
165
- return RequestTableColumns_1.RequestTableColumns.respond(this.bridge, res.flat(), id);
131
+ return RequestTableColumns.respond(this.bridge, res.flat(), id);
166
132
  });
167
133
  case "REQUEST_SELL_SCREEN_OPTIONS":
168
134
  results = results;
169
135
  return Promise.all(results)
170
136
  .then((res) => {
171
- return RequestSellScreenOptions_1.RequestSellScreenOptions.respond(this.bridge, res.flat(), id);
137
+ return RequestSellScreenOptions.respond(this.bridge, res.flat(), id);
172
138
  });
173
139
  case "FORMAT_INTEGRATED_PRODUCT":
174
140
  results = results;
175
141
  return Promise.all(results)
176
142
  .then((res) => {
177
- return FormatIntegratedProduct_1.FormatIntegratedProduct.respond(this.bridge, res.flat(), id);
143
+ return FormatIntegratedProduct.respond(this.bridge, res.flat(), id);
178
144
  });
179
145
  case "REQUEST_CUSTOMER_LIST_OPTIONS":
180
146
  results = results;
181
147
  return Promise.all(results)
182
- .then(res => RequestCustomerListOptions_1.RequestCustomerListOptions.respond(this.bridge, res.flat(), id));
148
+ .then(res => RequestCustomerListOptions.respond(this.bridge, res.flat(), id));
183
149
  case "REQUEST_SALE_KEYS":
184
150
  results = results;
185
151
  return Promise.all(results)
186
- .then(res => RequestSaleKeys_1.RequestSaleKeys.respond(this.bridge, res.flat(), id));
152
+ .then(res => RequestSaleKeys.respond(this.bridge, res.flat(), id));
187
153
  case "UI_PIPELINE":
188
154
  results = results;
189
155
  return Promise.all(results)
190
156
  .then(res => {
191
- return UIPipeline_1.UIPipeline.respond(this.bridge, res.flat(), id);
157
+ return UIPipeline.respond(this.bridge, res.flat(), id);
192
158
  });
193
159
  case "GIFT_CARD_CODE_CHECK":
194
160
  results = results;
195
161
  return Promise.all(results)
196
162
  .then(res => {
197
- return GiftCardCodeCheck_1.GiftCardCodeCheck.respond(this.bridge, res[0], id);
163
+ return GiftCardCodeCheck.respond(this.bridge, res[0], id);
198
164
  });
199
165
  case "PAYMENT_METHODS_ENABLED":
200
166
  results = results;
201
167
  return Promise.all(results)
202
168
  .then(res => {
203
- return PaymentMethodsEnabled_1.PaymentMethodsEnabled.respond(this.bridge, res.flat(), id);
169
+ return PaymentMethodsEnabled.respond(this.bridge, res.flat(), id);
204
170
  });
205
171
  case "FULFILMENT_GET_ORDER":
206
172
  results = results;
207
173
  return Promise.all(results)
208
174
  .then(res => {
209
- return FulfilmentGetOrder_1.FulfilmentGetOrder.respond(this.bridge, res[0], id);
175
+ return FulfilmentGetOrder.respond(this.bridge, res[0], id);
210
176
  });
211
177
  }
212
178
  }
179
+ /**
180
+ * @inheritDoc
181
+ */
213
182
  addEventListener(event, callback) {
214
- if (ApplicationEvents_1.directShopfrontEvents.includes(event)) {
215
- event = event;
183
+ if (isDirectShopfrontEvent(event)) {
216
184
  if (typeof this.directListeners[event] === "undefined") {
217
185
  this.directListeners[event] = new Set();
218
186
  }
@@ -222,97 +190,96 @@ class Application {
222
190
  }
223
191
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
224
192
  let c;
225
- event = event;
226
193
  switch (event) {
227
194
  case "READY":
228
- c = new Ready_1.Ready(callback);
195
+ c = new Ready(callback);
229
196
  this.listeners[event].set(callback, c);
230
197
  break;
231
198
  case "REQUEST_SETTINGS":
232
- c = new RequestSettings_1.RequestSettings(callback);
199
+ c = new RequestSettings(callback);
233
200
  this.listeners[event].set(callback, c);
234
201
  break;
235
202
  case "REQUEST_BUTTONS":
236
- c = new RequestButtons_1.RequestButtons(callback);
203
+ c = new RequestButtons(callback);
237
204
  this.listeners[event].set(callback, c);
238
205
  break;
239
206
  case "REQUEST_TABLE_COLUMNS":
240
- c = new RequestTableColumns_1.RequestTableColumns(callback);
207
+ c = new RequestTableColumns(callback);
241
208
  this.listeners[event].set(callback, c);
242
209
  break;
243
210
  case "REQUEST_SELL_SCREEN_OPTIONS":
244
- c = new RequestSellScreenOptions_1.RequestSellScreenOptions(callback);
211
+ c = new RequestSellScreenOptions(callback);
245
212
  this.listeners[event].set(callback, c);
246
213
  break;
247
214
  case "INTERNAL_PAGE_MESSAGE":
248
- c = new InternalPageMessage_1.InternalPageMessage(callback, this);
215
+ c = new InternalPageMessage(callback, this);
249
216
  this.listeners[event].set(callback, c);
250
217
  break;
251
218
  case "REGISTER_CHANGED":
252
- c = new RegisterChanged_1.RegisterChanged(callback);
219
+ c = new RegisterChanged(callback);
253
220
  this.listeners[event].set(callback, c);
254
221
  break;
255
222
  case "REQUEST_CUSTOMER_LIST_OPTIONS":
256
- c = new RequestCustomerListOptions_1.RequestCustomerListOptions(callback);
223
+ c = new RequestCustomerListOptions(callback);
257
224
  this.listeners[event].set(callback, c);
258
225
  break;
259
226
  case "FORMAT_INTEGRATED_PRODUCT":
260
- c = new FormatIntegratedProduct_1.FormatIntegratedProduct(callback);
227
+ c = new FormatIntegratedProduct(callback);
261
228
  this.listeners[event].set(callback, c);
262
229
  break;
263
230
  case "REQUEST_SALE_KEYS":
264
- c = new RequestSaleKeys_1.RequestSaleKeys(callback);
231
+ c = new RequestSaleKeys(callback);
265
232
  this.listeners[event].set(callback, c);
266
233
  break;
267
234
  case "SALE_COMPLETE":
268
- c = new SaleComplete_1.SaleComplete(callback);
235
+ c = new SaleComplete(callback);
269
236
  this.listeners[event].set(callback, c);
270
237
  break;
271
238
  case "UI_PIPELINE":
272
- c = new UIPipeline_1.UIPipeline(callback);
239
+ c = new UIPipeline(callback);
273
240
  this.listeners[event].set(callback, c);
274
241
  break;
275
242
  case "PAYMENT_METHODS_ENABLED":
276
- c = new PaymentMethodsEnabled_1.PaymentMethodsEnabled(callback);
243
+ c = new PaymentMethodsEnabled(callback);
277
244
  this.listeners[event].set(callback, c);
278
245
  break;
279
246
  case "AUDIO_READY":
280
- c = new AudioReady_1.AudioReady(callback);
247
+ c = new AudioReady(callback);
281
248
  this.listeners[event].set(callback, c);
282
249
  break;
283
250
  case "AUDIO_PERMISSION_CHANGE":
284
- c = new AudioPermissionChange_1.AudioPermissionChange(callback);
251
+ c = new AudioPermissionChange(callback);
285
252
  this.listeners[event].set(callback, c);
286
253
  break;
287
254
  case "FULFILMENT_GET_ORDER":
288
255
  if (this.listeners[event].size !== 0) {
289
256
  throw new TypeError("Application already has 'FULFILMENT_GET_ORDER' event listener registered.");
290
257
  }
291
- c = new FulfilmentGetOrder_1.FulfilmentGetOrder(callback);
258
+ c = new FulfilmentGetOrder(callback);
292
259
  this.listeners[event].set(callback, c);
293
260
  break;
294
261
  case "FULFILMENT_VOID_ORDER":
295
- c = new FulfilmentVoidOrder_1.FulfilmentVoidOrder(callback);
262
+ c = new FulfilmentVoidOrder(callback);
296
263
  this.listeners[event].set(callback, c);
297
264
  break;
298
265
  case "FULFILMENT_PROCESS_ORDER":
299
- c = new FulfilmentProcessOrder_1.FulfilmentProcessOrder(callback);
266
+ c = new FulfilmentProcessOrder(callback);
300
267
  this.listeners[event].set(callback, c);
301
268
  break;
302
269
  case "FULFILMENT_ORDER_APPROVAL":
303
- c = new FulfilmentOrderApproval_1.FulfilmentOrderApproval(callback);
270
+ c = new FulfilmentOrderApproval(callback);
304
271
  this.listeners[event].set(callback, c);
305
272
  break;
306
273
  case "FULFILMENT_ORDER_COLLECTED":
307
- c = new FulfilmentCollectOrder_1.FulfilmentCollectOrder(callback);
274
+ c = new FulfilmentCollectOrder(callback);
308
275
  this.listeners[event].set(callback, c);
309
276
  break;
310
277
  case "FULFILMENT_ORDER_COMPLETED":
311
- c = new FulfilmentCompleteOrder_1.FulfilmentCompleteOrder(callback);
278
+ c = new FulfilmentCompleteOrder(callback);
312
279
  this.listeners[event].set(callback, c);
313
280
  break;
314
281
  case "GIFT_CARD_CODE_CHECK":
315
- c = new GiftCardCodeCheck_1.GiftCardCodeCheck(callback);
282
+ c = new GiftCardCodeCheck(callback);
316
283
  this.listeners[event].set(callback, c);
317
284
  break;
318
285
  }
@@ -328,65 +295,90 @@ class Application {
328
295
  });
329
296
  }
330
297
  }
298
+ /**
299
+ * @inheritDoc
300
+ */
331
301
  removeEventListener(event, callback) {
332
- if (ApplicationEvents_1.directShopfrontEvents.includes(event)) {
302
+ if (isDirectShopfrontEvent(event)) {
333
303
  this.directListeners[event]?.delete(callback);
334
304
  return;
335
305
  }
336
306
  this.listeners[event].delete(callback);
337
307
  }
308
+ /**
309
+ * @inheritDoc
310
+ */
338
311
  send(item) {
339
- if (item instanceof Button_1.Button) {
312
+ if (item instanceof Button) {
340
313
  throw new TypeError("You cannot send Buttons to Shopfront without Shopfront requesting them");
341
314
  }
342
- if (item instanceof BaseEmitableEvent_1.BaseEmitableEvent) {
315
+ if (item instanceof BaseEmitableEvent) {
343
316
  this.bridge.sendMessage(item.getEvent(), item.getData());
344
317
  }
345
318
  else {
346
319
  const serialized = item.serialize();
347
- this.bridge.sendMessage(ApplicationEvents_1.ToShopfront.SERIALIZED, serialized);
320
+ this.bridge.sendMessage(ToShopfront.SERIALIZED, serialized);
348
321
  }
349
322
  }
323
+ /**
324
+ * @inheritDoc
325
+ */
350
326
  download(file) {
351
- this.bridge.sendMessage(ApplicationEvents_1.ToShopfront.DOWNLOAD, file);
327
+ this.bridge.sendMessage(ToShopfront.DOWNLOAD, file);
352
328
  }
329
+ /**
330
+ * @inheritDoc
331
+ */
353
332
  redirect(toLocation, externalRedirect = true) {
354
- this.bridge.sendMessage(ApplicationEvents_1.ToShopfront.REDIRECT, {
333
+ this.bridge.sendMessage(ToShopfront.REDIRECT, {
355
334
  to: toLocation,
356
335
  external: externalRedirect,
357
336
  });
358
337
  }
338
+ /**
339
+ * @inheritDoc
340
+ */
359
341
  load() {
360
- this.bridge.sendMessage(ApplicationEvents_1.ToShopfront.LOAD, true);
361
- return () => this.bridge.sendMessage(ApplicationEvents_1.ToShopfront.LOAD, false);
342
+ this.bridge.sendMessage(ToShopfront.LOAD, true);
343
+ return () => this.bridge.sendMessage(ToShopfront.LOAD, false);
362
344
  }
345
+ /**
346
+ * Handles an event callback via the `ActionEventRegistrar`
347
+ */
363
348
  handleEventCallback(data) {
364
349
  if (typeof data.id === "undefined") {
365
350
  return;
366
351
  }
367
352
  const id = data.id;
368
- ActionEventRegistrar_1.default.fire(id, data.data);
353
+ ActionEventRegistrar.fire(id, data.data);
369
354
  }
355
+ /**
356
+ * Updates the cached location data
357
+ */
370
358
  handleLocationChanged(data) {
371
359
  this.register = data.register;
372
360
  this.outlet = data.outlet;
373
361
  this.user = data.user;
374
362
  }
363
+ /**
364
+ * @inheritDoc
365
+ */
375
366
  getAuthenticationKey() {
376
367
  return this.key;
377
368
  }
369
+ /**
370
+ * Checks whether `data` is formatted as a sale event
371
+ */
378
372
  dataIsSaleEvent(data) {
379
373
  return typeof data.requestId === "string" && (data.saleState === false || typeof data.saleState === "object");
380
374
  }
381
375
  /**
382
- * Get the current sale on the sell screen, if the current device is not a register
383
- * then this will return false.
384
- *
385
- * @returns {Promise<CurrentSale | boolean>}
376
+ * @inheritDoc
386
377
  */
387
378
  async getCurrentSale() {
388
379
  const saleRequest = `SaleRequest-${Date.now().toString()}`;
389
380
  const promise = new Promise(res => {
381
+ // eslint-disable-next-line jsdoc/require-jsdoc
390
382
  const listener = (event, data) => {
391
383
  if (event !== "RESPONSE_CURRENT_SALE") {
392
384
  return;
@@ -402,28 +394,30 @@ class Application {
402
394
  };
403
395
  this.bridge.addEventListener(listener);
404
396
  });
405
- this.bridge.sendMessage(ApplicationEvents_1.ToShopfront.REQUEST_CURRENT_SALE, {
397
+ this.bridge.sendMessage(ToShopfront.REQUEST_CURRENT_SALE, {
406
398
  requestId: saleRequest,
407
399
  });
408
400
  const saleState = await promise;
409
401
  if (saleState === false) {
410
402
  return saleState;
411
403
  }
412
- return new CurrentSale_1.CurrentSale(this, saleState);
404
+ return new CurrentSale(this, saleState);
413
405
  }
406
+ /**
407
+ * Checks whether `data` is formatted as response data from a 'create sale' request
408
+ */
414
409
  dataIsCreateEvent(data) {
415
410
  return typeof data.requestId === "string" &&
416
- typeof data.success === "boolean" && (typeof data.message === "undefined" ||
417
- typeof data.message === "string");
411
+ typeof data.success === "boolean" &&
412
+ (typeof data.message === "undefined" || typeof data.message === "string");
418
413
  }
419
414
  /**
420
- * Send the sale to be created on shopfront.
421
- *
422
- * @param sale
415
+ * @inheritDoc
423
416
  */
424
417
  async createSale(sale) {
425
418
  const createSaleRequest = `CreateSaleRequest-${Date.now().toString()}`;
426
419
  const promise = new Promise(res => {
420
+ // eslint-disable-next-line jsdoc/require-jsdoc
427
421
  const listener = (event, data) => {
428
422
  if (event !== "RESPONSE_CREATE_SALE") {
429
423
  return;
@@ -442,12 +436,15 @@ class Application {
442
436
  };
443
437
  this.bridge.addEventListener(listener);
444
438
  });
445
- this.bridge.sendMessage(ApplicationEvents_1.ToShopfront.CREATE_SALE, {
439
+ this.bridge.sendMessage(ToShopfront.CREATE_SALE, {
446
440
  requestId: createSaleRequest,
447
- sale: (0, SaleCreate_1.buildSaleData)(sale),
441
+ sale: buildSaleData(sale),
448
442
  });
449
443
  return promise;
450
444
  }
445
+ /**
446
+ * Checks whether `data` is formatted as location data
447
+ */
451
448
  dataIsLocation(data) {
452
449
  return typeof data.requestId === "string" &&
453
450
  (typeof data.register === "string" || data.register === null) &&
@@ -455,11 +452,12 @@ class Application {
455
452
  (typeof data.user === "string" || data.user === null);
456
453
  }
457
454
  /**
458
- * Get the location from Shopfront
455
+ * @inheritDoc
459
456
  */
460
457
  async getLocation() {
461
458
  const locationRequest = `LocationRequest-${Date.now().toString()}`;
462
459
  const promise = new Promise(res => {
460
+ // eslint-disable-next-line jsdoc/require-jsdoc
463
461
  const listener = (event, data) => {
464
462
  if (event !== "RESPONSE_LOCATION") {
465
463
  return;
@@ -475,7 +473,7 @@ class Application {
475
473
  };
476
474
  this.bridge.addEventListener(listener);
477
475
  });
478
- this.bridge.sendMessage(ApplicationEvents_1.ToShopfront.REQUEST_LOCATION, {
476
+ this.bridge.sendMessage(ToShopfront.REQUEST_LOCATION, {
479
477
  requestId: locationRequest,
480
478
  });
481
479
  const location = await promise;
@@ -485,30 +483,47 @@ class Application {
485
483
  user: location.user,
486
484
  };
487
485
  }
486
+ /**
487
+ * @inheritDoc
488
+ */
488
489
  printReceipt(content) {
489
- this.bridge.sendMessage(ApplicationEvents_1.ToShopfront.PRINT_RECEIPT, {
490
+ this.bridge.sendMessage(ToShopfront.PRINT_RECEIPT, {
490
491
  content,
491
492
  type: "text",
492
493
  });
493
494
  }
495
+ /**
496
+ * @inheritDoc
497
+ */
494
498
  changeSellScreenActionMode(mode) {
495
- this.bridge.sendMessage(ApplicationEvents_1.ToShopfront.CHANGE_SELL_SCREEN_ACTION_MODE, {
496
- mode
499
+ this.bridge.sendMessage(ToShopfront.CHANGE_SELL_SCREEN_ACTION_MODE, {
500
+ mode,
497
501
  });
498
502
  }
503
+ /**
504
+ * @inheritDoc
505
+ */
499
506
  changeSellScreenSummaryMode(mode) {
500
- this.bridge.sendMessage(ApplicationEvents_1.ToShopfront.CHANGE_SELL_SCREEN_SUMMARY_MODE, {
501
- mode
507
+ this.bridge.sendMessage(ToShopfront.CHANGE_SELL_SCREEN_SUMMARY_MODE, {
508
+ mode,
502
509
  });
503
510
  }
511
+ /**
512
+ * Checks whether `data` is formatted as an audio response
513
+ */
504
514
  dataIsAudioResponse(data) {
505
515
  return typeof data.requestId === "string" &&
506
- typeof data.success === "boolean" && (typeof data.message === "string" ||
507
- typeof data.message === "undefined");
516
+ typeof data.success === "boolean" &&
517
+ (typeof data.message === "string" ||
518
+ typeof data.message === "undefined");
508
519
  }
520
+ /**
521
+ * Sends an audio request to Shopfront
522
+ */
509
523
  sendAudioRequest(type, data) {
510
524
  const request = `AudioRequest-${type}-${Date.now().toString()}`;
511
525
  const promise = new Promise(res => {
526
+ // eslint-disable-next-line jsdoc/require-jsdoc
512
527
  const listener = (event, data) => {
513
528
  if (event !== "RESPONSE_AUDIO_REQUEST") {
514
529
  return;
@@ -534,35 +549,40 @@ class Application {
534
549
  return promise;
535
550
  }
536
551
  /**
537
- * Requests permission from the user to be able to play audio
552
+ * @inheritDoc
538
553
  */
539
554
  requestAudioPermission() {
540
- return this.sendAudioRequest(ApplicationEvents_1.ToShopfront.AUDIO_REQUEST_PERMISSION);
555
+ return this.sendAudioRequest(ToShopfront.AUDIO_REQUEST_PERMISSION);
541
556
  }
542
557
  /**
543
- * Requests shopfront to preload audio so that it can be pre-cached before being played
544
- * @param url
558
+ * @inheritDoc
545
559
  */
546
560
  audioPreload(url) {
547
- return this.sendAudioRequest(ApplicationEvents_1.ToShopfront.AUDIO_PRELOAD, {
548
- url
561
+ return this.sendAudioRequest(ToShopfront.AUDIO_PRELOAD, {
562
+ url,
549
563
  });
550
564
  }
551
565
  /**
552
- * Requests the sound to be played
553
- * @param url
566
+ * @inheritDoc
554
567
  */
555
568
  audioPlay(url) {
556
- return this.sendAudioRequest(ApplicationEvents_1.ToShopfront.AUDIO_PLAY, {
557
- url
569
+ return this.sendAudioRequest(ToShopfront.AUDIO_PLAY, {
570
+ url,
558
571
  });
559
572
  }
573
+ /**
574
+ * Checks whether `data` is formatted as response data to a 'get option' request
575
+ */
560
576
  dataIsOption(data) {
561
577
  return typeof data.requestId === "string" && typeof data.option === "string";
562
578
  }
579
+ /**
580
+ * @inheritDoc
581
+ */
563
582
  async getOption(option, defaultValue) {
564
583
  const request = `OptionRequest-${Date.now().toString()}`;
565
584
  const promise = new Promise(res => {
585
+ // eslint-disable-next-line jsdoc/require-jsdoc
566
586
  const listener = (event, data) => {
567
587
  if (event !== "RESPONSE_OPTION") {
568
588
  return;
@@ -578,7 +598,7 @@ class Application {
578
598
  };
579
599
  this.bridge.addEventListener(listener);
580
600
  });
581
- this.bridge.sendMessage(ApplicationEvents_1.ToShopfront.GET_OPTION, {
601
+ this.bridge.sendMessage(ToShopfront.GET_OPTION, {
582
602
  requestId: request,
583
603
  option,
584
604
  });
@@ -588,9 +608,15 @@ class Application {
588
608
  }
589
609
  return optionValue;
590
610
  }
611
+ /**
612
+ * Checks whether `data` is formatted as response data to an embedded token request
613
+ */
591
614
  dataIsEmbeddedToken(data) {
592
615
  return typeof data.requestId === "string" && typeof data.data === "object" && data.data !== null;
593
616
  }
617
+ /**
618
+ * Generates a signing key and sends it to Shopfront
619
+ */
594
620
  async generateSigningKey() {
595
621
  if (typeof this.signingKey !== "undefined") {
596
622
  return;
@@ -599,8 +625,11 @@ class Application {
599
625
  name: "ECDSA",
600
626
  namedCurve: "P-384",
601
627
  }, true, ["sign", "verify"]);
602
- this.bridge.sendMessage(ApplicationEvents_1.ToShopfront.ROTATE_SIGNING_KEY, await crypto.subtle.exportKey("jwk", this.signingKey.privateKey));
628
+ this.bridge.sendMessage(ToShopfront.ROTATE_SIGNING_KEY, await crypto.subtle.exportKey("jwk", this.signingKey.privateKey));
603
629
  }
630
+ /**
631
+ * Decodes the embedded token response from Shopfront using the signing key
632
+ */
604
633
  async decodeToken(signature, data, returnTokenObject) {
605
634
  if (typeof this.signingKey === "undefined") {
606
635
  // Not possible to decode
@@ -626,16 +655,23 @@ class Application {
626
655
  }
627
656
  return decoded.auth;
628
657
  }
658
+ /**
659
+ * Checks whether `data` is an error response from an embedded token request
660
+ */
629
661
  tokenDataContainsErrors(data) {
630
662
  if (!data || typeof data !== "object") {
631
663
  return false;
632
664
  }
633
665
  return "error" in data && "type" in data;
634
666
  }
667
+ /**
668
+ * @inheritDoc
669
+ */
635
670
  async getToken(returnTokenObject) {
636
671
  await this.generateSigningKey();
637
672
  const request = `TokenRequest-${Date.now().toString()}`;
638
673
  const promise = new Promise(res => {
674
+ // eslint-disable-next-line jsdoc/require-jsdoc
639
675
  const listener = (event, data) => {
640
676
  if (event !== "RESPONSE_SECURE_KEY") {
641
677
  return;
@@ -651,7 +687,7 @@ class Application {
651
687
  };
652
688
  this.bridge.addEventListener(listener);
653
689
  });
654
- this.bridge.sendMessage(ApplicationEvents_1.ToShopfront.REQUEST_SECURE_KEY, {
690
+ this.bridge.sendMessage(ToShopfront.REQUEST_SECURE_KEY, {
655
691
  requestId: request,
656
692
  });
657
693
  const [signature, data] = await promise;
@@ -662,4 +698,3 @@ class Application {
662
698
  return this.decodeToken(signature, data, returnTokenObject);
663
699
  }
664
700
  }
665
- exports.Application = Application;