@shopfront/bridge 2.0.0 → 2.0.2

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