@ksangkuk10/wallet-controller 1.7.14

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 (124) hide show
  1. package/README.md +7 -0
  2. package/_commonjs/controller.js +704 -0
  3. package/_commonjs/env.js +9 -0
  4. package/_commonjs/exception/isError.js +15 -0
  5. package/_commonjs/exception/mapExtensionTxError.js +46 -0
  6. package/_commonjs/exception/mapWalletConnectError.js +69 -0
  7. package/_commonjs/getChainOptions.js +57 -0
  8. package/_commonjs/index.js +22 -0
  9. package/_commonjs/modules/connect-modal/index.js +80 -0
  10. package/_commonjs/modules/connect-modal/style.js +161 -0
  11. package/_commonjs/modules/extension-router/ExtensionRouter.js +241 -0
  12. package/_commonjs/modules/extension-router/index.js +19 -0
  13. package/_commonjs/modules/extension-router/modal.js +80 -0
  14. package/_commonjs/modules/extension-router/modal.style.js +161 -0
  15. package/_commonjs/modules/extension-router/multiChannel.js +18 -0
  16. package/_commonjs/modules/extension-router/session.js +37 -0
  17. package/_commonjs/modules/extension-router/types.js +16 -0
  18. package/_commonjs/modules/legacy-extension/LegacyExtensionConnector.js +143 -0
  19. package/_commonjs/modules/legacy-extension/createFixedExtension.js +236 -0
  20. package/_commonjs/modules/legacy-extension/index.js +19 -0
  21. package/_commonjs/modules/readonly-wallet/connect.js +24 -0
  22. package/_commonjs/modules/readonly-wallet/index.js +20 -0
  23. package/_commonjs/modules/readonly-wallet/modal.js +123 -0
  24. package/_commonjs/modules/readonly-wallet/modal.style.js +204 -0
  25. package/_commonjs/modules/readonly-wallet/storage.js +40 -0
  26. package/_commonjs/modules/readonly-wallet/types.js +3 -0
  27. package/_commonjs/modules/walletconnect/connect.js +421 -0
  28. package/_commonjs/modules/walletconnect/errors.js +51 -0
  29. package/_commonjs/modules/walletconnect/impl/socket-transport/index.js +204 -0
  30. package/_commonjs/modules/walletconnect/impl/socket-transport/network.js +30 -0
  31. package/_commonjs/modules/walletconnect/index.js +22 -0
  32. package/_commonjs/modules/walletconnect/modal.js +147 -0
  33. package/_commonjs/modules/walletconnect/modal.style.js +138 -0
  34. package/_commonjs/modules/walletconnect/types.js +13 -0
  35. package/_commonjs/operators/getExtensions.js +55 -0
  36. package/_commonjs/operators/toConnectedWallet.js +24 -0
  37. package/_commonjs/operators/toLcdClient.js +15 -0
  38. package/_commonjs/utils/browser-check.js +47 -0
  39. package/_commonjs/utils/checkExtensionReady.js +28 -0
  40. package/_commonjs/utils/sortConnections.js +13 -0
  41. package/_commonjs/verifyBytes.js +19 -0
  42. package/controller.d.ts +220 -0
  43. package/controller.js +697 -0
  44. package/env.d.ts +2 -0
  45. package/env.js +5 -0
  46. package/exception/isError.d.ts +3 -0
  47. package/exception/isError.js +11 -0
  48. package/exception/mapExtensionTxError.d.ts +5 -0
  49. package/exception/mapExtensionTxError.js +41 -0
  50. package/exception/mapWalletConnectError.d.ts +6 -0
  51. package/exception/mapWalletConnectError.js +63 -0
  52. package/getChainOptions.d.ts +3 -0
  53. package/getChainOptions.js +53 -0
  54. package/index.d.ts +6 -0
  55. package/index.js +6 -0
  56. package/modules/connect-modal/index.d.ts +2 -0
  57. package/modules/connect-modal/index.js +76 -0
  58. package/modules/connect-modal/style.d.ts +1 -0
  59. package/modules/connect-modal/style.js +158 -0
  60. package/modules/extension-router/ExtensionRouter.d.ts +43 -0
  61. package/modules/extension-router/ExtensionRouter.js +237 -0
  62. package/modules/extension-router/index.d.ts +2 -0
  63. package/modules/extension-router/index.js +3 -0
  64. package/modules/extension-router/modal.d.ts +2 -0
  65. package/modules/extension-router/modal.js +76 -0
  66. package/modules/extension-router/modal.style.d.ts +1 -0
  67. package/modules/extension-router/modal.style.js +158 -0
  68. package/modules/extension-router/multiChannel.d.ts +13 -0
  69. package/modules/extension-router/multiChannel.js +14 -0
  70. package/modules/extension-router/session.d.ts +8 -0
  71. package/modules/extension-router/session.js +31 -0
  72. package/modules/extension-router/types.d.ts +35 -0
  73. package/modules/extension-router/types.js +13 -0
  74. package/modules/legacy-extension/LegacyExtensionConnector.d.ts +30 -0
  75. package/modules/legacy-extension/LegacyExtensionConnector.js +139 -0
  76. package/modules/legacy-extension/createFixedExtension.d.ts +46 -0
  77. package/modules/legacy-extension/createFixedExtension.js +232 -0
  78. package/modules/legacy-extension/index.d.ts +2 -0
  79. package/modules/legacy-extension/index.js +3 -0
  80. package/modules/readonly-wallet/connect.d.ts +8 -0
  81. package/modules/readonly-wallet/connect.js +19 -0
  82. package/modules/readonly-wallet/index.d.ts +3 -0
  83. package/modules/readonly-wallet/index.js +4 -0
  84. package/modules/readonly-wallet/modal.d.ts +7 -0
  85. package/modules/readonly-wallet/modal.js +119 -0
  86. package/modules/readonly-wallet/modal.style.d.ts +1 -0
  87. package/modules/readonly-wallet/modal.style.js +201 -0
  88. package/modules/readonly-wallet/storage.d.ts +4 -0
  89. package/modules/readonly-wallet/storage.js +34 -0
  90. package/modules/readonly-wallet/types.d.ts +5 -0
  91. package/modules/readonly-wallet/types.js +2 -0
  92. package/modules/walletconnect/connect.d.ts +42 -0
  93. package/modules/walletconnect/connect.js +390 -0
  94. package/modules/walletconnect/errors.d.ts +22 -0
  95. package/modules/walletconnect/errors.js +41 -0
  96. package/modules/walletconnect/impl/socket-transport/index.d.ts +39 -0
  97. package/modules/walletconnect/impl/socket-transport/index.js +199 -0
  98. package/modules/walletconnect/impl/socket-transport/network.d.ts +8 -0
  99. package/modules/walletconnect/impl/socket-transport/network.js +28 -0
  100. package/modules/walletconnect/index.d.ts +5 -0
  101. package/modules/walletconnect/index.js +6 -0
  102. package/modules/walletconnect/modal.d.ts +12 -0
  103. package/modules/walletconnect/modal.js +143 -0
  104. package/modules/walletconnect/modal.style.d.ts +1 -0
  105. package/modules/walletconnect/modal.style.js +135 -0
  106. package/modules/walletconnect/types.d.ts +24 -0
  107. package/modules/walletconnect/types.js +10 -0
  108. package/operators/getExtensions.d.ts +9 -0
  109. package/operators/getExtensions.js +51 -0
  110. package/operators/toConnectedWallet.d.ts +4 -0
  111. package/operators/toConnectedWallet.js +20 -0
  112. package/operators/toLcdClient.d.ts +4 -0
  113. package/operators/toLcdClient.js +11 -0
  114. package/package.json +550 -0
  115. package/utils/browser-check.d.ts +3 -0
  116. package/utils/browser-check.js +38 -0
  117. package/utils/checkExtensionReady.d.ts +6 -0
  118. package/utils/checkExtensionReady.js +24 -0
  119. package/utils/sortConnections.d.ts +2 -0
  120. package/utils/sortConnections.js +9 -0
  121. package/verifyBytes.d.ts +4 -0
  122. package/verifyBytes.js +15 -0
  123. package/~/.npm/_cacache/content-v2/sha512/ad/b5/8c87dfae7c208906a88f1997b323933e7efb4e481bcfdc559cb13199d077e1b40abcb161561a293ca59cd98aae224cd0877555e6e7a2e11021bc55ebedf4 +0 -0
  124. package/~/.npm/_cacache/index-v5/6a/39/c03f62d7353a7cc1411e180ec37c393f9fedcfd081fa567f67bf32e6fb68 +2 -0
@@ -0,0 +1,237 @@
1
+ import { WebExtensionStatus, } from '@ksangkuk10/web-extension-interface';
2
+ import { BehaviorSubject } from 'rxjs';
3
+ import { LegacyExtensionConnector } from '../legacy-extension';
4
+ import { selectModal } from './modal';
5
+ import { getXplaExtensions } from './multiChannel';
6
+ import { clearSession, getStoredSession, storeSession } from './session';
7
+ import { ExtensionRouterConnectorType, ExtensionRouterStatus, } from './types';
8
+ export class ExtensionRouter {
9
+ constructor(options) {
10
+ this.options = options;
11
+ this._connector = null;
12
+ // ---------------------------------------------
13
+ // states
14
+ // ---------------------------------------------
15
+ this.states = () => {
16
+ return this._states.asObservable();
17
+ };
18
+ this.getLastStates = () => {
19
+ return this._states.getValue();
20
+ };
21
+ // ---------------------------------------------
22
+ // behaviors
23
+ // ---------------------------------------------
24
+ this.connect = async (identifier) => {
25
+ var _a;
26
+ const extensionInfos = getXplaExtensions();
27
+ if (extensionInfos.length === 0) {
28
+ throw new Error(`[ExtensionRouter] Can't find connectors`);
29
+ }
30
+ let extensionInfo;
31
+ if (identifier) {
32
+ extensionInfo = extensionInfos.find((item) => item.identifier === identifier);
33
+ }
34
+ else if (extensionInfos.length === 1) {
35
+ extensionInfo = extensionInfos[0];
36
+ }
37
+ else {
38
+ const select = (_a = this.options.selectExtension) !== null && _a !== void 0 ? _a : selectModal;
39
+ const selectedExtensionInfo = await select(extensionInfos);
40
+ if (selectedExtensionInfo) {
41
+ extensionInfo = selectedExtensionInfo;
42
+ }
43
+ }
44
+ if (extensionInfo) {
45
+ this.createConnector(extensionInfo);
46
+ }
47
+ };
48
+ this.disconnect = () => {
49
+ var _a;
50
+ clearSession();
51
+ this._states.next({
52
+ type: ExtensionRouterStatus.WALLET_NOT_CONNECTED,
53
+ network: this.options.defaultNetwork,
54
+ });
55
+ (_a = this._connector) === null || _a === void 0 ? void 0 : _a.close();
56
+ this._connector = null;
57
+ };
58
+ this.requestApproval = () => {
59
+ if (!this._connector) {
60
+ throw new Error('[ExtensionRouter] No connector');
61
+ }
62
+ this._connector.requestApproval();
63
+ };
64
+ this.refetchStates = () => {
65
+ if (!this._connector) {
66
+ throw new Error('[ExtensionRouter] No connector');
67
+ }
68
+ this._connector.refetchStates();
69
+ };
70
+ this.post = (tx, xplaAddress) => {
71
+ if (!this._connector) {
72
+ throw new Error('[ExtensionRouter] No connector');
73
+ }
74
+ const latestStates = this.getLastStates();
75
+ if (latestStates.type !== ExtensionRouterStatus.WALLET_CONNECTED) {
76
+ throw new Error(`[ExtensionRouter] Wallet is not connected`);
77
+ }
78
+ return this._connector.post(xplaAddress !== null && xplaAddress !== void 0 ? xplaAddress : latestStates.wallet.xplaAddress, tx);
79
+ };
80
+ this.sign = (tx, xplaAddress) => {
81
+ if (!this._connector) {
82
+ throw new Error('[ExtensionRouter] No connector');
83
+ }
84
+ const latestStates = this.getLastStates();
85
+ if (latestStates.type !== ExtensionRouterStatus.WALLET_CONNECTED) {
86
+ throw new Error(`[ExtensionRouter] Wallet is not connected`);
87
+ }
88
+ return this._connector.sign(xplaAddress !== null && xplaAddress !== void 0 ? xplaAddress : latestStates.wallet.xplaAddress, tx);
89
+ };
90
+ this.signBytes = (bytes, xplaAddress) => {
91
+ if (!this._connector) {
92
+ throw new Error('[ExtensionRouter] No connector');
93
+ }
94
+ const latestStates = this.getLastStates();
95
+ if (latestStates.type !== ExtensionRouterStatus.WALLET_CONNECTED) {
96
+ throw new Error(`[ExtensionRouter] Wallet is not connected`);
97
+ }
98
+ return this._connector.signBytes(xplaAddress !== null && xplaAddress !== void 0 ? xplaAddress : latestStates.wallet.xplaAddress, bytes);
99
+ };
100
+ this.hasCW20Tokens = (chainID, ...tokenAddrs) => {
101
+ if (!this._connector) {
102
+ throw new Error('[ExtensionRouter] No connector');
103
+ }
104
+ else if (this._connector instanceof LegacyExtensionConnector) {
105
+ throw new Error('[ExtensionRouter] Legacy extension does not support hasCW20Tokens() ');
106
+ }
107
+ return this._connector.hasCW20Tokens(chainID, ...tokenAddrs);
108
+ };
109
+ this.addCW20Tokens = (chainID, ...tokenAddrs) => {
110
+ if (!this._connector) {
111
+ throw new Error('[ExtensionRouter] No connector');
112
+ }
113
+ else if (this._connector instanceof LegacyExtensionConnector) {
114
+ throw new Error('[ExtensionRouter] Legacy extension does not support addCW20Tokens() ');
115
+ }
116
+ return this._connector.addCW20Tokens(chainID, ...tokenAddrs);
117
+ };
118
+ this.hasNetwork = (network) => {
119
+ if (!this._connector) {
120
+ throw new Error('[ExtensionRouter] No connector');
121
+ }
122
+ else if (this._connector instanceof LegacyExtensionConnector) {
123
+ throw new Error('[ExtensionRouter] Legacy extension does not support hasNetwork() ');
124
+ }
125
+ return this._connector.hasNetwork(network);
126
+ };
127
+ this.addNetwork = (network) => {
128
+ if (!this._connector) {
129
+ throw new Error('[ExtensionRouter] No connector');
130
+ }
131
+ else if (this._connector instanceof LegacyExtensionConnector) {
132
+ throw new Error('[ExtensionRouter] Legacy extension does not support addNetwork() ');
133
+ }
134
+ return this._connector.addNetwork(network);
135
+ };
136
+ // ---------------------------------------------
137
+ // internal
138
+ // ---------------------------------------------
139
+ this.createConnector = (extensionInfo) => {
140
+ var _a;
141
+ (_a = this._connector) === null || _a === void 0 ? void 0 : _a.close();
142
+ const connectorPromise = extensionInfo.connector
143
+ ? Promise.resolve(extensionInfo.connector())
144
+ : Promise.resolve(new LegacyExtensionConnector(extensionInfo.identifier));
145
+ connectorPromise.then((connector) => {
146
+ var _a;
147
+ connector.open((_a = this.options.hostWindow) !== null && _a !== void 0 ? _a : window, {
148
+ next: (nextStates) => {
149
+ var _a;
150
+ if (nextStates.type === WebExtensionStatus.INITIALIZING) {
151
+ this._states.next({
152
+ type: ExtensionRouterStatus.INITIALIZING,
153
+ network: this.options.defaultNetwork,
154
+ });
155
+ }
156
+ else if (nextStates.type === WebExtensionStatus.NO_AVAILABLE) {
157
+ this._states.next({
158
+ type: ExtensionRouterStatus.NO_AVAILABLE,
159
+ network: this.options.defaultNetwork,
160
+ isConnectorExists: true,
161
+ isApproved: nextStates.isApproved,
162
+ });
163
+ }
164
+ else if (nextStates.wallets.length === 0) {
165
+ this._states.next({
166
+ type: ExtensionRouterStatus.WALLET_NOT_CONNECTED,
167
+ network: nextStates.network,
168
+ });
169
+ }
170
+ else {
171
+ this._states.next({
172
+ type: ExtensionRouterStatus.WALLET_CONNECTED,
173
+ network: nextStates.network,
174
+ wallet: nextStates.focusedWalletAddress
175
+ ? (_a = nextStates.wallets.find((itemWallet) => itemWallet.xplaAddress ===
176
+ nextStates.focusedWalletAddress)) !== null && _a !== void 0 ? _a : nextStates.wallets[0]
177
+ : nextStates.wallets[0],
178
+ connectorType: connector instanceof LegacyExtensionConnector
179
+ ? ExtensionRouterConnectorType.LEGACY
180
+ : ExtensionRouterConnectorType.WEB_EXTENSION,
181
+ supportFeatures: new Set(connector.supportFeatures()),
182
+ extensionInfo,
183
+ });
184
+ }
185
+ },
186
+ error: (error) => {
187
+ console.error(error);
188
+ },
189
+ complete: () => { },
190
+ });
191
+ this._connector = connector;
192
+ storeSession({
193
+ identifier: extensionInfo.identifier,
194
+ });
195
+ });
196
+ };
197
+ this._states = new BehaviorSubject({
198
+ type: ExtensionRouterStatus.INITIALIZING,
199
+ network: options.defaultNetwork,
200
+ });
201
+ this._extensionInfos = getXplaExtensions();
202
+ if (this._extensionInfos.length === 0) {
203
+ this._states.next({
204
+ type: ExtensionRouterStatus.NO_AVAILABLE,
205
+ network: options.defaultNetwork,
206
+ isConnectorExists: false,
207
+ });
208
+ return;
209
+ }
210
+ // ---------------------------------------------
211
+ // initialize session
212
+ // ---------------------------------------------
213
+ const session = getStoredSession();
214
+ if (session) {
215
+ const extensionInfo = this._extensionInfos.find((item) => item.identifier === session.identifier);
216
+ if (extensionInfo) {
217
+ this.createConnector(extensionInfo);
218
+ return;
219
+ }
220
+ else {
221
+ console.warn(`Can't find an extension for the session "${session.identifier}"`);
222
+ clearSession();
223
+ this._states.next({
224
+ type: ExtensionRouterStatus.WALLET_NOT_CONNECTED,
225
+ network: options.defaultNetwork,
226
+ });
227
+ }
228
+ }
229
+ else {
230
+ this._states.next({
231
+ type: ExtensionRouterStatus.WALLET_NOT_CONNECTED,
232
+ network: options.defaultNetwork,
233
+ });
234
+ }
235
+ }
236
+ }
237
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXh0ZW5zaW9uUm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL0Brc2FuZ2t1azEwL3dhbGxldC1jb250cm9sbGVyL21vZHVsZXMvZXh0ZW5zaW9uLXJvdXRlci9FeHRlbnNpb25Sb3V0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQU9MLGtCQUFrQixHQUVuQixNQUFNLHFDQUFxQyxDQUFDO0FBRTdDLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ3JELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDdEMsT0FBTyxFQUFpQixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3pFLE9BQU8sRUFDTCw0QkFBNEIsRUFFNUIscUJBQXFCLEdBQ3RCLE1BQU0sU0FBUyxDQUFDO0FBa0JqQixNQUFNLE9BQU8sZUFBZTtJQU0xQixZQUE2QixPQUErQjtRQUEvQixZQUFPLEdBQVAsT0FBTyxDQUF3QjtRQUZwRCxlQUFVLEdBQXFDLElBQUksQ0FBQztRQW9ENUQsZ0RBQWdEO1FBQ2hELFNBQVM7UUFDVCxnREFBZ0Q7UUFDaEQsV0FBTSxHQUFHLEdBQUcsRUFBRTtZQUNaLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNyQyxDQUFDLENBQUM7UUFFRixrQkFBYSxHQUFHLEdBQUcsRUFBRTtZQUNuQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakMsQ0FBQyxDQUFDO1FBRUYsZ0RBQWdEO1FBQ2hELFlBQVk7UUFDWixnREFBZ0Q7UUFDaEQsWUFBTyxHQUFHLEtBQUssRUFBRSxVQUFtQixF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QUFNO2dCQUNMLE9BQU8sQ0FBQyxJQUFJLENBQ1YsNENBQTRDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsQ0FDbEUsQ0FBQztnQkFDRixZQUFZLEVBQUUsQ0FBQztnQkFFZixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztvQkFDaEIsSUFBSSxFQUFFLHFCQUFxQixDQUFDLG9CQUFvQjtvQkFDaEQsT0FBTyxFQUFFLE9BQU8sQ0FBQyxjQUFjO2lCQUNoQyxDQUFDLENBQUM7YUFDSjtTQUNGO2FBQU07WUFDTCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDaEIsSUFBSSxFQUFFLHFCQUFxQixDQUFDLG9CQUFvQjtnQkFDaEQsT0FBTyxFQUFFLE9BQU8sQ0FBQyxjQUFjO2FBQ2hDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztDQW1RRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5ldHdvcmtJbmZvIH0gZnJvbSAnQGtzYW5na3VrMTAvd2FsbGV0LXR5cGVzJztcbmltcG9ydCB7XG4gIFhwbGFXZWJFeHRlbnNpb25Db25uZWN0b3IsXG4gIFdlYkV4dGVuc2lvbk5ldHdvcmtJbmZvLFxuICBXZWJFeHRlbnNpb25Qb3N0UGF5bG9hZCxcbiAgV2ViRXh0ZW5zaW9uU2lnbkJ5dGVzUGF5bG9hZCxcbiAgV2ViRXh0ZW5zaW9uU2lnblBheWxvYWQsXG4gIFdlYkV4dGVuc2lvblN0YXRlcyxcbiAgV2ViRXh0ZW5zaW9uU3RhdHVzLFxuICBXZWJFeHRlbnNpb25UeFJlc3VsdCxcbn0gZnJvbSAnQGtzYW5na3VrMTAvd2ViLWV4dGVuc2lvbi1pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ3JlYXRlVHhPcHRpb25zLCBTaWduTW9kZSB9IGZyb20gJ0B4cGxhL3hwbGEuanMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpYmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IExlZ2FjeUV4dGVuc2lvbkNvbm5lY3RvciB9IGZyb20gJy4uL2xlZ2FjeS1leHRlbnNpb24nO1xuaW1wb3J0IHsgc2VsZWN0TW9kYWwgfSBmcm9tICcuL21vZGFsJztcbmltcG9ydCB7IEV4dGVuc2lvbkluZm8sIGdldFhwbGFFeHRlbnNpb25zIH0gZnJvbSAnLi9tdWx0aUNoYW5uZWwnO1xuaW1wb3J0IHsgY2xlYXJTZXNzaW9uLCBnZXRTdG9yZWRTZXNzaW9uLCBzdG9yZVNlc3Npb24gfSBmcm9tICcuL3Nlc3Npb24nO1xuaW1wb3J0IHtcbiAgRXh0ZW5zaW9uUm91dGVyQ29ubmVjdG9yVHlwZSxcbiAgRXh0ZW5zaW9uUm91dGVyU3RhdGVzLFxuICBFeHRlbnNpb25Sb3V0ZXJTdGF0dXMsXG59IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV4dGVuc2lvblJvdXRlck9wdGlvbnMge1xuICBkZWZhdWx0TmV0d29yazogTmV0d29ya0luZm87XG4gIHNlbGVjdEV4dGVuc2lvbj86IChcbiAgICBleHRlbnNpb25JbmZvczogRXh0ZW5zaW9uSW5mb1tdLFxuICApID0+IFByb21pc2U8RXh0ZW5zaW9uSW5mbyB8IG51bGw+O1xuXG4gIGhvc3RXaW5kb3c/OiBXaW5kb3c7XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIGRldmVsb3BtZW50IGZlYXR1cmVzXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBkYW5nZXJvdXNseV9fY2hyb21lRXh0ZW5zaW9uQ29tcGF0aWJsZUJyb3dzZXJDaGVjazogKFxuICAgIHVzZXJBZ2VudDogc3RyaW5nLFxuICApID0+IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBFeHRlbnNpb25Sb3V0ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdGF0ZXM6IEJlaGF2aW9yU3ViamVjdDxFeHRlbnNpb25Sb3V0ZXJTdGF0ZXM+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9leHRlbnNpb25JbmZvczogRXh0ZW5zaW9uSW5mb1tdO1xuXG4gIHByaXZhdGUgX2Nvbm5lY3RvcjogWHBsYVdlYkV4dGVuc2lvbkNvbm5lY3RvciB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogRXh0ZW5zaW9uUm91dGVyT3B0aW9ucykge1xuICAgIHRoaXMuX3N0YXRlcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RXh0ZW5zaW9uUm91dGVyU3RhdGVzPih7XG4gICAgICB0eXBlOiBFeHRlbnNpb25Sb3V0ZXJTdGF0dXMuSU5JVElBTElaSU5HLFxuICAgICAgbmV0d29yazogb3B0aW9ucy5kZWZhdWx0TmV0d29yayxcbiAgICB9KTtcblxuICAgIHRoaXMuX2V4dGVuc2lvbkluZm9zID0gZ2V0WHBsYUV4dGVuc2lvbnMoKTtcblxuICAgIGlmICh0aGlzLl9leHRlbnNpb25JbmZvcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuX3N0YXRlcy5uZXh0KHtcbiAgICAgICAgdHlwZTogRXh0ZW5zaW9uUm91dGVyU3RhdHVzLk5PX0FWQUlMQUJMRSxcbiAgICAgICAgbmV0d29yazogb3B0aW9ucy5kZWZhdWx0TmV0d29yayxcbiAgICAgICAgaXNDb25uZWN0b3JFeGlzdHM6IGZhbHNlLFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBpbml0aWFsaXplIHNlc3Npb25cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCBzZXNzaW9uID0gZ2V0U3RvcmVkU2Vzc2lvbigpO1xuXG4gICAgaWYgKHNlc3Npb24pIHtcbiAgICAgIGNvbnN0IGV4dGVuc2lvbkluZm8gPSB0aGlzLl9leHRlbnNpb25JbmZvcy5maW5kKFxuICAgICAgICAoaXRlbSkgPT4gaXRlbS5pZGVudGlmaWVyID09PSBzZXNzaW9uLmlkZW50aWZpZXIsXG4gICAgICApO1xuXG4gICAgICBpZiAoZXh0ZW5zaW9uSW5mbykge1xuICAgICAgICB0aGlzLmNyZWF0ZUNvbm5lY3RvcihleHRlbnNpb25JbmZvKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGBDYW4ndCBmaW5kIGFuIGV4dGVuc2lvbiBmb3IgdGhlIHNlc3Npb24gXCIke3Nlc3Npb24uaWRlbnRpZmllcn1cImAsXG4gICAgICAgICk7XG4gICAgICAgIGNsZWFyU2Vzc2lvbigpO1xuXG4gICAgICAgIHRoaXMuX3N0YXRlcy5uZXh0KHtcbiAgICAgICAgICB0eXBlOiBFeHRlbnNpb25Sb3V0ZXJTdGF0dXMuV0FMTEVUX05PVF9DT05ORUNURUQsXG4gICAgICAgICAgbmV0d29yazogb3B0aW9ucy5kZWZhdWx0TmV0d29yayxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3N0YXRlcy5uZXh0KHtcbiAgICAgICAgdHlwZTogRXh0ZW5zaW9uUm91dGVyU3RhdHVzLldBTExFVF9OT1RfQ09OTkVDVEVELFxuICAgICAgICBuZXR3b3JrOiBvcHRpb25zLmRlZmF1bHROZXR3b3JrLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHN0YXRlc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgc3RhdGVzID0gKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLl9zdGF0ZXMuYXNPYnNlcnZhYmxlKCk7XG4gIH07XG5cbiAgZ2V0TGFzdFN0YXRlcyA9ICgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGVzLmdldFZhbHVlKCk7XG4gIH07XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIGJlaGF2aW9yc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgY29ubmVjdCA9IGFzeW5jIChpZGVudGlmaWVyPzogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgZXh0ZW5zaW9uSW5mb3MgPSBnZXRYcGxhRXh0ZW5zaW9ucygpO1xuXG4gICAgaWYgKGV4dGVuc2lvbkluZm9zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBbRXh0ZW5zaW9uUm91dGVyXSBDYW4ndCBmaW5kIGNvbm5lY3RvcnNgKTtcbiAgICB9XG5cbiAgICBsZXQgZXh0ZW5zaW9uSW5mbzogRXh0ZW5zaW9uSW5mbyB8IHVuZGVmaW5lZDtcblxuICAgIGlmIChpZGVudGlmaWVyKSB7XG4gICAgICBleHRlbnNpb25JbmZvID0gZXh0ZW5zaW9uSW5mb3MuZmluZChcbiAgICAgICAgKGl0ZW0pID0+IGl0ZW0uaWRlbnRpZmllciA9PT0gaWRlbnRpZmllcixcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChleHRlbnNpb25JbmZvcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIGV4dGVuc2lvbkluZm8gPSBleHRlbnNpb25JbmZvc1swXTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2VsZWN0ID0gdGhpcy5vcHRpb25zLnNlbGVjdEV4dGVuc2lvbiA/PyBzZWxlY3RNb2RhbDtcbiAgICAgIGNvbnN0IHNlbGVjdGVkRXh0ZW5zaW9uSW5mbyA9IGF3YWl0IHNlbGVjdChleHRlbnNpb25JbmZvcyk7XG5cbiAgICAgIGlmIChzZWxlY3RlZEV4dGVuc2lvbkluZm8pIHtcbiAgICAgICAgZXh0ZW5zaW9uSW5mbyA9IHNlbGVjdGVkRXh0ZW5zaW9uSW5mbztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZXh0ZW5zaW9uSW5mbykge1xuICAgICAgdGhpcy5jcmVhdGVDb25uZWN0b3IoZXh0ZW5zaW9uSW5mbyk7XG4gICAgfVxuICB9O1xuXG4gIGRpc2Nvbm5lY3QgPSAoKSA9PiB7XG4gICAgY2xlYXJTZXNzaW9uKCk7XG5cbiAgICB0aGlzLl9zdGF0ZXMubmV4dCh7XG4gICAgICB0eXBlOiBFeHRlbnNpb25Sb3V0ZXJTdGF0dXMuV0FMTEVUX05PVF9DT05ORUNURUQsXG4gICAgICBuZXR3b3JrOiB0aGlzLm9wdGlvbnMuZGVmYXVsdE5ldHdvcmssXG4gICAgfSk7XG5cbiAgICB0aGlzLl9jb25uZWN0b3I/LmNsb3NlKCk7XG4gICAgdGhpcy5fY29ubmVjdG9yID0gbnVsbDtcbiAgfTtcblxuICByZXF1ZXN0QXBwcm92YWwgPSAoKSA9PiB7XG4gICAgaWYgKCF0aGlzLl9jb25uZWN0b3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignW0V4dGVuc2lvblJvdXRlcl0gTm8gY29ubmVjdG9yJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fY29ubmVjdG9yLnJlcXVlc3RBcHByb3ZhbCgpO1xuICB9O1xuXG4gIHJlZmV0Y2hTdGF0ZXMgPSAoKSA9PiB7XG4gICAgaWYgKCF0aGlzLl9jb25uZWN0b3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignW0V4dGVuc2lvblJvdXRlcl0gTm8gY29ubmVjdG9yJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fY29ubmVjdG9yLnJlZmV0Y2hTdGF0ZXMoKTtcbiAgfTtcblxuICBwb3N0ID0gKFxuICAgIHR4OiBDcmVhdGVUeE9wdGlvbnMsXG4gICAgeHBsYUFkZHJlc3M/OiBzdHJpbmcsXG4gICk6IFN1YnNjcmliYWJsZTxXZWJFeHRlbnNpb25UeFJlc3VsdDxXZWJFeHRlbnNpb25Qb3N0UGF5bG9hZD4+ID0+IHtcbiAgICBpZiAoIXRoaXMuX2Nvbm5lY3Rvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdbRXh0ZW5zaW9uUm91dGVyXSBObyBjb25uZWN0b3InKTtcbiAgICB9XG5cbiAgICBjb25zdCBsYXRlc3RTdGF0ZXMgPSB0aGlzLmdldExhc3RTdGF0ZXMoKTtcblxuICAgIGlmIChsYXRlc3RTdGF0ZXMudHlwZSAhPT0gRXh0ZW5zaW9uUm91dGVyU3RhdHVzLldBTExFVF9DT05ORUNURUQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgW0V4dGVuc2lvblJvdXRlcl0gV2FsbGV0IGlzIG5vdCBjb25uZWN0ZWRgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY29ubmVjdG9yLnBvc3QoXG4gICAgICB4cGxhQWRkcmVzcyA/PyBsYXRlc3RTdGF0ZXMud2FsbGV0LnhwbGFBZGRyZXNzLFxuICAgICAgdHgsXG4gICAgKTtcbiAgfTtcblxuICBzaWduID0gKFxuICAgIHR4OiBDcmVhdGVUeE9wdGlvbnMgJiB7XG4gICAgICBzZXF1ZW5jZT86IG51bWJlcjtcbiAgICAgIGFjY291bnROdW1iZXI/OiBudW1iZXI7XG4gICAgICBzaWduTW9kZT86IFNpZ25Nb2RlO1xuICAgIH0sXG4gICAgeHBsYUFkZHJlc3M/OiBzdHJpbmcsXG4gICk6IFN1YnNjcmliYWJsZTxXZWJFeHRlbnNpb25UeFJlc3VsdDxXZWJFeHRlbnNpb25TaWduUGF5bG9hZD4+ID0+IHtcbiAgICBpZiAoIXRoaXMuX2Nvbm5lY3Rvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdbRXh0ZW5zaW9uUm91dGVyXSBObyBjb25uZWN0b3InKTtcbiAgICB9XG5cbiAgICBjb25zdCBsYXRlc3RTdGF0ZXMgPSB0aGlzLmdldExhc3RTdGF0ZXMoKTtcblxuICAgIGlmIChsYXRlc3RTdGF0ZXMudHlwZSAhPT0gRXh0ZW5zaW9uUm91dGVyU3RhdHVzLldBTExFVF9DT05ORUNURUQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgW0V4dGVuc2lvblJvdXRlcl0gV2FsbGV0IGlzIG5vdCBjb25uZWN0ZWRgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY29ubmVjdG9yLnNpZ24oXG4gICAgICB4cGxhQWRkcmVzcyA/PyBsYXRlc3RTdGF0ZXMud2FsbGV0LnhwbGFBZGRyZXNzLFxuICAgICAgdHgsXG4gICAgKTtcbiAgfTtcblxuICBzaWduQnl0ZXMgPSAoXG4gICAgYnl0ZXM6IEJ1ZmZlcixcbiAgICB4cGxhQWRkcmVzcz86IHN0cmluZyxcbiAgKTogU3Vic2NyaWJhYmxlPFdlYkV4dGVuc2lvblR4UmVzdWx0PFdlYkV4dGVuc2lvblNpZ25CeXRlc1BheWxvYWQ+PiA9PiB7XG4gICAgaWYgKCF0aGlzLl9jb25uZWN0b3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignW0V4dGVuc2lvblJvdXRlcl0gTm8gY29ubmVjdG9yJyk7XG4gICAgfVxuXG4gICAgY29uc3QgbGF0ZXN0U3RhdGVzID0gdGhpcy5nZXRMYXN0U3RhdGVzKCk7XG5cbiAgICBpZiAobGF0ZXN0U3RhdGVzLnR5cGUgIT09IEV4dGVuc2lvblJvdXRlclN0YXR1cy5XQUxMRVRfQ09OTkVDVEVEKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFtFeHRlbnNpb25Sb3V0ZXJdIFdhbGxldCBpcyBub3QgY29ubmVjdGVkYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3Rvci5zaWduQnl0ZXMoXG4gICAgICB4cGxhQWRkcmVzcyA/PyBsYXRlc3RTdGF0ZXMud2FsbGV0LnhwbGFBZGRyZXNzLFxuICAgICAgYnl0ZXMsXG4gICAgKTtcbiAgfTtcblxuICBoYXNDVzIwVG9rZW5zID0gKFxuICAgIGNoYWluSUQ6IHN0cmluZyxcbiAgICAuLi50b2tlbkFkZHJzOiBzdHJpbmdbXVxuICApOiBQcm9taXNlPHsgW3Rva2VuQWRkcjogc3RyaW5nXTogYm9vbGVhbiB9PiA9PiB7XG4gICAgaWYgKCF0aGlzLl9jb25uZWN0b3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignW0V4dGVuc2lvblJvdXRlcl0gTm8gY29ubmVjdG9yJyk7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9jb25uZWN0b3IgaW5zdGFuY2VvZiBMZWdhY3lFeHRlbnNpb25Db25uZWN0b3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1tFeHRlbnNpb25Sb3V0ZXJdIExlZ2FjeSBleHRlbnNpb24gZG9lcyBub3Qgc3VwcG9ydCBoYXNDVzIwVG9rZW5zKCkgJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3Rvci5oYXNDVzIwVG9rZW5zKGNoYWluSUQsIC4uLnRva2VuQWRkcnMpO1xuICB9O1xuXG4gIGFkZENXMjBUb2tlbnMgPSAoXG4gICAgY2hhaW5JRDogc3RyaW5nLFxuICAgIC4uLnRva2VuQWRkcnM6IHN0cmluZ1tdXG4gICk6IFByb21pc2U8eyBbdG9rZW5BZGRyOiBzdHJpbmddOiBib29sZWFuIH0+ID0+IHtcbiAgICBpZiAoIXRoaXMuX2Nvbm5lY3Rvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdbRXh0ZW5zaW9uUm91dGVyXSBObyBjb25uZWN0b3InKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2Nvbm5lY3RvciBpbnN0YW5jZW9mIExlZ2FjeUV4dGVuc2lvbkNvbm5lY3Rvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnW0V4dGVuc2lvblJvdXRlcl0gTGVnYWN5IGV4dGVuc2lvbiBkb2VzIG5vdCBzdXBwb3J0IGFkZENXMjBUb2tlbnMoKSAnLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY29ubmVjdG9yLmFkZENXMjBUb2tlbnMoY2hhaW5JRCwgLi4udG9rZW5BZGRycyk7XG4gIH07XG5cbiAgaGFzTmV0d29yayA9IChcbiAgICBuZXR3b3JrOiBPbWl0PFdlYkV4dGVuc2lvbk5ldHdvcmtJbmZvLCAnbmFtZSc+LFxuICApOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgICBpZiAoIXRoaXMuX2Nvbm5lY3Rvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdbRXh0ZW5zaW9uUm91dGVyXSBObyBjb25uZWN0b3InKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2Nvbm5lY3RvciBpbnN0YW5jZW9mIExlZ2FjeUV4dGVuc2lvbkNvbm5lY3Rvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnW0V4dGVuc2lvblJvdXRlcl0gTGVnYWN5IGV4dGVuc2lvbiBkb2VzIG5vdCBzdXBwb3J0IGhhc05ldHdvcmsoKSAnLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY29ubmVjdG9yLmhhc05ldHdvcmsobmV0d29yayk7XG4gIH07XG5cbiAgYWRkTmV0d29yayA9IChuZXR3b3JrOiBXZWJFeHRlbnNpb25OZXR3b3JrSW5mbyk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgIGlmICghdGhpcy5fY29ubmVjdG9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1tFeHRlbnNpb25Sb3V0ZXJdIE5vIGNvbm5lY3RvcicpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fY29ubmVjdG9yIGluc3RhbmNlb2YgTGVnYWN5RXh0ZW5zaW9uQ29ubmVjdG9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdbRXh0ZW5zaW9uUm91dGVyXSBMZWdhY3kgZXh0ZW5zaW9uIGRvZXMgbm90IHN1cHBvcnQgYWRkTmV0d29yaygpICcsXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jb25uZWN0b3IuYWRkTmV0d29yayhuZXR3b3JrKTtcbiAgfTtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gaW50ZXJuYWxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIHByaXZhdGUgY3JlYXRlQ29ubmVjdG9yID0gKGV4dGVuc2lvbkluZm86IEV4dGVuc2lvbkluZm8pID0+IHtcbiAgICB0aGlzLl9jb25uZWN0b3I/LmNsb3NlKCk7XG5cbiAgICBjb25zdCBjb25uZWN0b3JQcm9taXNlOiBQcm9taXNlPFhwbGFXZWJFeHRlbnNpb25Db25uZWN0b3I+ID1cbiAgICAgIGV4dGVuc2lvbkluZm8uY29ubmVjdG9yXG4gICAgICAgID8gUHJvbWlzZS5yZXNvbHZlKGV4dGVuc2lvbkluZm8uY29ubmVjdG9yKCkpXG4gICAgICAgIDogUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgICAgbmV3IExlZ2FjeUV4dGVuc2lvbkNvbm5lY3RvcihleHRlbnNpb25JbmZvLmlkZW50aWZpZXIpLFxuICAgICAgICAgICk7XG5cbiAgICBjb25uZWN0b3JQcm9taXNlLnRoZW4oKGNvbm5lY3RvcikgPT4ge1xuICAgICAgY29ubmVjdG9yLm9wZW4odGhpcy5vcHRpb25zLmhvc3RXaW5kb3cgPz8gd2luZG93LCB7XG4gICAgICAgIG5leHQ6IChuZXh0U3RhdGVzOiBXZWJFeHRlbnNpb25TdGF0ZXMpID0+IHtcbiAgICAgICAgICBpZiAobmV4dFN0YXRlcy50eXBlID09PSBXZWJFeHRlbnNpb25TdGF0dXMuSU5JVElBTElaSU5HKSB7XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZXMubmV4dCh7XG4gICAgICAgICAgICAgIHR5cGU6IEV4dGVuc2lvblJvdXRlclN0YXR1cy5JTklUSUFMSVpJTkcsXG4gICAgICAgICAgICAgIG5ldHdvcms6IHRoaXMub3B0aW9ucy5kZWZhdWx0TmV0d29yayxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmV4dFN0YXRlcy50eXBlID09PSBXZWJFeHRlbnNpb25TdGF0dXMuTk9fQVZBSUxBQkxFKSB7XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZXMubmV4dCh7XG4gICAgICAgICAgICAgIHR5cGU6IEV4dGVuc2lvblJvdXRlclN0YXR1cy5OT19BVkFJTEFCTEUsXG4gICAgICAgICAgICAgIG5ldHdvcms6IHRoaXMub3B0aW9ucy5kZWZhdWx0TmV0d29yayxcbiAgICAgICAgICAgICAgaXNDb25uZWN0b3JFeGlzdHM6IHRydWUsXG4gICAgICAgICAgICAgIGlzQXBwcm92ZWQ6IG5leHRTdGF0ZXMuaXNBcHByb3ZlZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmV4dFN0YXRlcy53YWxsZXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5fc3RhdGVzLm5leHQoe1xuICAgICAgICAgICAgICB0eXBlOiBFeHRlbnNpb25Sb3V0ZXJTdGF0dXMuV0FMTEVUX05PVF9DT05ORUNURUQsXG4gICAgICAgICAgICAgIG5ldHdvcms6IG5leHRTdGF0ZXMubmV0d29yayxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZXMubmV4dCh7XG4gICAgICAgICAgICAgIHR5cGU6IEV4dGVuc2lvblJvdXRlclN0YXR1cy5XQUxMRVRfQ09OTkVDVEVELFxuICAgICAgICAgICAgICBuZXR3b3JrOiBuZXh0U3RhdGVzLm5ldHdvcmssXG4gICAgICAgICAgICAgIHdhbGxldDogbmV4dFN0YXRlcy5mb2N1c2VkV2FsbGV0QWRkcmVzc1xuICAgICAgICAgICAgICAgID8gbmV4dFN0YXRlcy53YWxsZXRzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgIChpdGVtV2FsbGV0KSA9PlxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW1XYWxsZXQueHBsYUFkZHJlc3MgPT09XG4gICAgICAgICAgICAgICAgICAgICAgbmV4dFN0YXRlcy5mb2N1c2VkV2FsbGV0QWRkcmVzcyxcbiAgICAgICAgICAgICAgICAgICkgPz8gbmV4dFN0YXRlcy53YWxsZXRzWzBdXG4gICAgICAgICAgICAgICAgOiBuZXh0U3RhdGVzLndhbGxldHNbMF0sXG4gICAgICAgICAgICAgIGNvbm5lY3RvclR5cGU6XG4gICAgICAgICAgICAgICAgY29ubmVjdG9yIGluc3RhbmNlb2YgTGVnYWN5RXh0ZW5zaW9uQ29ubmVjdG9yXG4gICAgICAgICAgICAgICAgICA/IEV4dGVuc2lvblJvdXRlckNvbm5lY3RvclR5cGUuTEVHQUNZXG4gICAgICAgICAgICAgICAgICA6IEV4dGVuc2lvblJvdXRlckNvbm5lY3RvclR5cGUuV0VCX0VYVEVOU0lPTixcbiAgICAgICAgICAgICAgc3VwcG9ydEZlYXR1cmVzOiBuZXcgU2V0KGNvbm5lY3Rvci5zdXBwb3J0RmVhdHVyZXMoKSksXG4gICAgICAgICAgICAgIGV4dGVuc2lvbkluZm8sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgfSxcbiAgICAgICAgY29tcGxldGU6ICgpID0+IHt9LFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuX2Nvbm5lY3RvciA9IGNvbm5lY3RvcjtcblxuICAgICAgc3RvcmVTZXNzaW9uKHtcbiAgICAgICAgaWRlbnRpZmllcjogZXh0ZW5zaW9uSW5mby5pZGVudGlmaWVyLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export * from './ExtensionRouter';
2
+ export * from './types';
@@ -0,0 +1,3 @@
1
+ export * from './ExtensionRouter';
2
+ export * from './types';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvQGtzYW5na3VrMTAvd2FsbGV0LWNvbnRyb2xsZXIvbW9kdWxlcy9leHRlbnNpb24tcm91dGVyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL0V4dGVuc2lvblJvdXRlcic7XG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJztcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ import { ExtensionInfo } from './multiChannel';
2
+ export declare function selectModal(extensionInfos: ExtensionInfo[]): Promise<ExtensionInfo | null>;
@@ -0,0 +1,76 @@
1
+ import { modalStyle } from './modal.style';
2
+ export function selectModal(extensionInfos) {
3
+ return new Promise((resolve) => {
4
+ var _a, _b;
5
+ const modalContainer = document.createElement('div');
6
+ const styleContainer = document.createElement('style');
7
+ function onComplete(extensionInfo) {
8
+ var _a, _b;
9
+ resolve(extensionInfo);
10
+ (_a = modalContainer.parentElement) === null || _a === void 0 ? void 0 : _a.removeChild(modalContainer);
11
+ (_b = styleContainer.parentElement) === null || _b === void 0 ? void 0 : _b.removeChild(styleContainer);
12
+ }
13
+ const element = createModalElement({
14
+ extensionInfos,
15
+ onComplete,
16
+ });
17
+ styleContainer.textContent = modalStyle;
18
+ modalContainer.appendChild(element);
19
+ (_a = document.querySelector('head')) === null || _a === void 0 ? void 0 : _a.appendChild(styleContainer);
20
+ (_b = document.querySelector('body')) === null || _b === void 0 ? void 0 : _b.appendChild(modalContainer);
21
+ });
22
+ }
23
+ function createModalElement({ extensionInfos, onComplete, }) {
24
+ // ---------------------------------------------
25
+ // container
26
+ // ---------------------------------------------
27
+ const container = document.createElement('div');
28
+ container.setAttribute('class', 'wallet-select-modal');
29
+ // ---------------------------------------------
30
+ // container > div.wallet-select-modal--dim
31
+ // ---------------------------------------------
32
+ const dim = document.createElement('div');
33
+ dim.setAttribute('class', 'wallet-select-modal--dim');
34
+ container.appendChild(dim);
35
+ // ---------------------------------------------
36
+ // content > div.wallet-select-modal--content
37
+ // ---------------------------------------------
38
+ const content = document.createElement('section');
39
+ content.setAttribute('class', 'wallet-select-modal--content');
40
+ container.appendChild(content);
41
+ // h1
42
+ const title = document.createElement('h1');
43
+ title.textContent = 'Select a Wallet';
44
+ content.appendChild(title);
45
+ // ul
46
+ const list = document.createElement('ul');
47
+ content.appendChild(list);
48
+ for (const extensionInfo of extensionInfos) {
49
+ const item = document.createElement('li');
50
+ const button = document.createElement('button');
51
+ button.addEventListener('click', () => onComplete(extensionInfo));
52
+ item.appendChild(button);
53
+ const icon = document.createElement('span');
54
+ icon.setAttribute('class', 'wallet-select-modal--icon');
55
+ button.appendChild(icon);
56
+ const iconImg = document.createElement('img');
57
+ iconImg.setAttribute('src', extensionInfo.icon);
58
+ iconImg.setAttribute('alt', `${extensionInfo.name} [${extensionInfo.identifier}]`);
59
+ icon.appendChild(iconImg);
60
+ const description = document.createElement('span');
61
+ description.setAttribute('class', 'wallet-select-modal--description');
62
+ description.textContent = extensionInfo.name;
63
+ button.appendChild(description);
64
+ const arrow = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
65
+ arrow.setAttribute('viewBox', '0 0 24 24');
66
+ button.appendChild(arrow);
67
+ const path = document.createElementNS('http://www.w3.org/2000/svg', 'path');
68
+ path.setAttribute('d', 'M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z');
69
+ arrow.appendChild(path);
70
+ list.appendChild(item);
71
+ }
72
+ // events
73
+ dim.addEventListener('click', () => onComplete(null));
74
+ return container;
75
+ }
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvQGtzYW5na3VrMTAvd2FsbGV0LWNvbnRyb2xsZXIvbW9kdWxlcy9leHRlbnNpb24tcm91dGVyL21vZGFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsTUFBTSxVQUFVLFdBQVcsQ0FDekIsY0FBK0I7SUFFL0IsT0FBTyxJQUFJLE9BQU8sQ0FBdUIsQ0FBQyxPQUFPLEVBQUUsRUFBRTs7UUFDbkQsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyRCxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXZELFNBQVMsVUFBVSxDQUFDLGFBQW1DOztZQUNyRCxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDdkIsTUFBQSxjQUFjLENBQUMsYUFBYSwwQ0FBRSxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDMUQsTUFBQSxjQUFjLENBQUMsYUFBYSwwQ0FBRSxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDNUQsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLGtCQUFrQixDQUFDO1lBQ2pDLGNBQWM7WUFDZCxVQUFVO1NBQ1gsQ0FBQyxDQUFDO1FBRUgsY0FBYyxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7UUFDeEMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVwQyxNQUFBLFFBQVEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLDBDQUFFLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM1RCxNQUFBLFFBQVEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLDBDQUFFLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM5RCxDQUFDLENBQUMsQ0FBQztBQUNMLENB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VyxDQUFDLENBQUM7UUFFM0MsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUxQixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDLDRCQUE0QixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLGdEQUFnRCxDQUFDLENBQUM7UUFFekUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV4QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3hCO0lBRUQsU0FBUztJQUNULEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFFdEQsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV4dGVuc2lvbkluZm8gfSBmcm9tICcuL211bHRpQ2hhbm5lbCc7XG5pbXBvcnQgeyBtb2RhbFN0eWxlIH0gZnJvbSAnLi9tb2RhbC5zdHlsZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWxlY3RNb2RhbChcbiAgZXh0ZW5zaW9uSW5mb3M6IEV4dGVuc2lvbkluZm9bXSxcbik6IFByb21pc2U8RXh0ZW5zaW9uSW5mbyB8IG51bGw+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPEV4dGVuc2lvbkluZm8gfCBudWxsPigocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IG1vZGFsQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgY29uc3Qgc3R5bGVDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuXG4gICAgZnVuY3Rpb24gb25Db21wbGV0ZShleHRlbnNpb25JbmZvOiBFeHRlbnNpb25JbmZvIHwgbnVsbCkge1xuICAgICAgcmVzb2x2ZShleHRlbnNpb25JbmZvKTtcbiAgICAgIG1vZGFsQ29udGFpbmVyLnBhcmVudEVsZW1lbnQ/LnJlbW92ZUNoaWxkKG1vZGFsQ29udGFpbmVyKTtcbiAgICAgIHN0eWxlQ29udGFpbmVyLnBhcmVudEVsZW1lbnQ/LnJlbW92ZUNoaWxkKHN0eWxlQ29udGFpbmVyKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gY3JlYXRlTW9kYWxFbGVtZW50KHtcbiAgICAgIGV4dGVuc2lvbkluZm9zLFxuICAgICAgb25Db21wbGV0ZSxcbiAgICB9KTtcblxuICAgIHN0eWxlQ29udGFpbmVyLnRleHRDb250ZW50ID0gbW9kYWxTdHlsZTtcbiAgICBtb2RhbENvbnRhaW5lci5hcHBlbmRDaGlsZChlbGVtZW50KTtcblxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2hlYWQnKT8uYXBwZW5kQ2hpbGQoc3R5bGVDb250YWluZXIpO1xuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2JvZHknKT8uYXBwZW5kQ2hpbGQobW9kYWxDb250YWluZXIpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTW9kYWxFbGVtZW50KHtcbiAgZXh0ZW5zaW9uSW5mb3MsXG4gIG9uQ29tcGxldGUsXG59OiB7XG4gIGV4dGVuc2lvbkluZm9zOiBFeHRlbnNpb25JbmZvW107XG4gIG9uQ29tcGxldGU6IChleHRlbnNpb25JbmZvOiBFeHRlbnNpb25JbmZvIHwgbnVsbCkgPT4gdm9pZDtcbn0pOiBIVE1MRWxlbWVudCB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBjb250YWluZXJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBjb250YWluZXIuc2V0QXR0cmlidXRlKCdjbGFzcycsICd3YWxsZXQtc2VsZWN0LW1vZGFsJyk7XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIGNvbnRhaW5lciA+IGRpdi53YWxsZXQtc2VsZWN0LW1vZGFsLS1kaW1cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIGNvbnN0IGRpbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBkaW0uc2V0QXR0cmlidXRlKCdjbGFzcycsICd3YWxsZXQtc2VsZWN0LW1vZGFsLS1kaW0nKTtcblxuICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZGltKTtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gY29udGVudCA+IGRpdi53YWxsZXQtc2VsZWN0LW1vZGFsLS1jb250ZW50XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBjb25zdCBjb250ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2VjdGlvbicpO1xuICBjb250ZW50LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAnd2FsbGV0LXNlbGVjdC1tb2RhbC0tY29udGVudCcpO1xuXG4gIGNvbnRhaW5lci5hcHBlbmRDaGlsZChjb250ZW50KTtcblxuICAvLyBoMVxuICBjb25zdCB0aXRsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2gxJyk7XG4gIHRpdGxlLnRleHRDb250ZW50ID0gJ1NlbGVjdCBhIFdhbGxldCc7XG4gIGNvbnRlbnQuYXBwZW5kQ2hpbGQodGl0bGUpO1xuXG4gIC8vIHVsXG4gIGNvbnN0IGxpc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd1bCcpO1xuICBjb250ZW50LmFwcGVuZENoaWxkKGxpc3QpO1xuXG4gIGZvciAoY29uc3QgZXh0ZW5zaW9uSW5mbyBvZiBleHRlbnNpb25JbmZvcykge1xuICAgIGNvbnN0IGl0ZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaScpO1xuXG4gICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gb25Db21wbGV0ZShleHRlbnNpb25JbmZvKSk7XG5cbiAgICBpdGVtLmFwcGVuZENoaWxkKGJ1dHRvbik7XG5cbiAgICBjb25zdCBpY29uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgIGljb24uc2V0QXR0cmlidXRlKCdjbGFzcycsICd3YWxsZXQtc2VsZWN0LW1vZGFsLS1pY29uJyk7XG5cbiAgICBidXR0b24uYXBwZW5kQ2hpbGQoaWNvbik7XG5cbiAgICBjb25zdCBpY29uSW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XG4gICAgaWNvbkltZy5zZXRBdHRyaWJ1dGUoJ3NyYycsIGV4dGVuc2lvbkluZm8uaWNvbik7XG4gICAgaWNvbkltZy5zZXRBdHRyaWJ1dGUoXG4gICAgICAnYWx0JyxcbiAgICAgIGAke2V4dGVuc2lvbkluZm8ubmFtZX0gWyR7ZXh0ZW5zaW9uSW5mby5pZGVudGlmaWVyfV1gLFxuICAgICk7XG5cbiAgICBpY29uLmFwcGVuZENoaWxkKGljb25JbWcpO1xuXG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgZGVzY3JpcHRpb24uc2V0QXR0cmlidXRlKCdjbGFzcycsICd3YWxsZXQtc2VsZWN0LW1vZGFsLS1kZXNjcmlwdGlvbicpO1xuICAgIGRlc2NyaXB0aW9uLnRleHRDb250ZW50ID0gZXh0ZW5zaW9uSW5mby5uYW1lO1xuXG4gICAgYnV0dG9uLmFwcGVuZENoaWxkKGRlc2NyaXB0aW9uKTtcblxuICAgIGNvbnN0IGFycm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdzdmcnKTtcbiAgICBhcnJvdy5zZXRBdHRyaWJ1dGUoJ3ZpZXdCb3gnLCAnMCAwIDI0IDI0Jyk7XG5cbiAgICBidXR0b24uYXBwZW5kQ2hpbGQoYXJyb3cpO1xuXG4gICAgY29uc3QgcGF0aCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAncGF0aCcpO1xuICAgIHBhdGguc2V0QXR0cmlidXRlKCdkJywgJ00xMCA2TDguNTkgNy40MSAxMy4xNyAxMmwtNC41OCA0LjU5TDEwIDE4bDYtNnonKTtcblxuICAgIGFycm93LmFwcGVuZENoaWxkKHBhdGgpO1xuXG4gICAgbGlzdC5hcHBlbmRDaGlsZChpdGVtKTtcbiAgfVxuXG4gIC8vIGV2ZW50c1xuICBkaW0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiBvbkNvbXBsZXRlKG51bGwpKTtcblxuICByZXR1cm4gY29udGFpbmVyO1xufVxuIl19
@@ -0,0 +1 @@
1
+ export declare const modalStyle = "\n@keyframes wallet-select-modal--dim-enter {\n 0% {\n opacity: 0;\n }\n \n 100% {\n opacity: 1;\n }\n}\n\n@keyframes wallet-select-modal--content-enter {\n 0% {\n opacity: 0;\n transform: scale(0.4);\n }\n \n 100% {\n opacity: 1;\n transform: scale(1);\n }\n}\n\n.wallet-select-modal {\n position: fixed;\n z-index: 100000;\n \n color: #212121;\n \n left: 0;\n top: 0;\n width: 100vw;\n height: 100vh;\n \n font-family: sans-serif;\n \n display: grid;\n place-content: center;\n}\n\n.wallet-select-modal > .wallet-select-modal--dim {\n position: fixed;\n z-index: -1;\n \n left: 0;\n top: 0;\n width: 100vw;\n height: 100vh;\n background-color: rgba(0, 0, 0, 0.3);\n \n animation: wallet-select-modal--dim-enter 0.2s ease-in-out;\n}\n\n.wallet-select-modal > .wallet-select-modal--content {\n box-sizing: border-box;\n \n border-radius: 8px;\n \n background-color: #ffffff;\n box-shadow: 0 4px 18px 3px rgba(0, 0, 0, 0.43);\n \n animation: wallet-select-modal--content-enter 0.2s ease-in-out;\n \n width: 100vw;\n max-width: 480px;\n padding: 40px;\n}\n\n.wallet-select-modal > .wallet-select-modal--content h1 {\n font-size: 20px;\n font-weight: bold;\n \n margin: 0 0 32px 0;\n \n text-align: center;\n}\n\n.wallet-select-modal > .wallet-select-modal--content ul {\n padding: 0;\n margin: 0;\n list-style: none;\n \n display: flex;\n flex-direction: column;\n}\n\n.wallet-select-modal > .wallet-select-modal--content ul li {\n border-top: 1px solid #cfd8ea;\n}\n\n.wallet-select-modal > .wallet-select-modal--content ul li:last-child {\n border-bottom: 1px solid #cfd8ea;\n}\n\n.wallet-select-modal > .wallet-select-modal--content ul button {\n width: 100%;\n height: 66px;\n \n border: none;\n background-color: transparent;\n outline: none;\n cursor: pointer;\n \n display: flex;\n gap: 10px;\n align-items: center;\n}\n\n.wallet-select-modal > .wallet-select-modal--content ul button:hover {\n background-color: hsl(220, 39%, 86%, 0.25);\n}\n\n.wallet-select-modal > .wallet-select-modal--content ul button .wallet-select-modal--icon {\n display: inline-grid;\n width: 50px;\n height: 50px;\n \n place-content: center;\n}\n\n.wallet-select-modal > .wallet-select-modal--content ul button .wallet-select-modal--icon img {\n width: 30px;\n height: 30px;\n}\n\n.wallet-select-modal > .wallet-select-modal--content ul button .wallet-select-modal--description {\n flex: 1;\n text-align: left;\n \n font-size: 16px;\n font-weight: 600;\n color: #212121;\n}\n\n.wallet-select-modal > .wallet-select-modal--content ul button svg {\n width: 18px;\n height: 18px;\n \n fill: #cfd8ea;\n}\n\n.wallet-select-modal > .wallet-select-modal--content ul button:hover svg {\n fill: #2043b5;\n}\n\n@media (max-width: 450px) {\n .wallet-select-modal {\n place-content: flex-end;\n }\n \n .wallet-select-modal > .wallet-select-modal--content {\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n }\n}\n";
@@ -0,0 +1,158 @@
1
+ // language=css
2
+ export const modalStyle = `
3
+ @keyframes wallet-select-modal--dim-enter {
4
+ 0% {
5
+ opacity: 0;
6
+ }
7
+
8
+ 100% {
9
+ opacity: 1;
10
+ }
11
+ }
12
+
13
+ @keyframes wallet-select-modal--content-enter {
14
+ 0% {
15
+ opacity: 0;
16
+ transform: scale(0.4);
17
+ }
18
+
19
+ 100% {
20
+ opacity: 1;
21
+ transform: scale(1);
22
+ }
23
+ }
24
+
25
+ .wallet-select-modal {
26
+ position: fixed;
27
+ z-index: 100000;
28
+
29
+ color: #212121;
30
+
31
+ left: 0;
32
+ top: 0;
33
+ width: 100vw;
34
+ height: 100vh;
35
+
36
+ font-family: sans-serif;
37
+
38
+ display: grid;
39
+ place-content: center;
40
+ }
41
+
42
+ .wallet-select-modal > .wallet-select-modal--dim {
43
+ position: fixed;
44
+ z-index: -1;
45
+
46
+ left: 0;
47
+ top: 0;
48
+ width: 100vw;
49
+ height: 100vh;
50
+ background-color: rgba(0, 0, 0, 0.3);
51
+
52
+ animation: wallet-select-modal--dim-enter 0.2s ease-in-out;
53
+ }
54
+
55
+ .wallet-select-modal > .wallet-select-modal--content {
56
+ box-sizing: border-box;
57
+
58
+ border-radius: 8px;
59
+
60
+ background-color: #ffffff;
61
+ box-shadow: 0 4px 18px 3px rgba(0, 0, 0, 0.43);
62
+
63
+ animation: wallet-select-modal--content-enter 0.2s ease-in-out;
64
+
65
+ width: 100vw;
66
+ max-width: 480px;
67
+ padding: 40px;
68
+ }
69
+
70
+ .wallet-select-modal > .wallet-select-modal--content h1 {
71
+ font-size: 20px;
72
+ font-weight: bold;
73
+
74
+ margin: 0 0 32px 0;
75
+
76
+ text-align: center;
77
+ }
78
+
79
+ .wallet-select-modal > .wallet-select-modal--content ul {
80
+ padding: 0;
81
+ margin: 0;
82
+ list-style: none;
83
+
84
+ display: flex;
85
+ flex-direction: column;
86
+ }
87
+
88
+ .wallet-select-modal > .wallet-select-modal--content ul li {
89
+ border-top: 1px solid #cfd8ea;
90
+ }
91
+
92
+ .wallet-select-modal > .wallet-select-modal--content ul li:last-child {
93
+ border-bottom: 1px solid #cfd8ea;
94
+ }
95
+
96
+ .wallet-select-modal > .wallet-select-modal--content ul button {
97
+ width: 100%;
98
+ height: 66px;
99
+
100
+ border: none;
101
+ background-color: transparent;
102
+ outline: none;
103
+ cursor: pointer;
104
+
105
+ display: flex;
106
+ gap: 10px;
107
+ align-items: center;
108
+ }
109
+
110
+ .wallet-select-modal > .wallet-select-modal--content ul button:hover {
111
+ background-color: hsl(220, 39%, 86%, 0.25);
112
+ }
113
+
114
+ .wallet-select-modal > .wallet-select-modal--content ul button .wallet-select-modal--icon {
115
+ display: inline-grid;
116
+ width: 50px;
117
+ height: 50px;
118
+
119
+ place-content: center;
120
+ }
121
+
122
+ .wallet-select-modal > .wallet-select-modal--content ul button .wallet-select-modal--icon img {
123
+ width: 30px;
124
+ height: 30px;
125
+ }
126
+
127
+ .wallet-select-modal > .wallet-select-modal--content ul button .wallet-select-modal--description {
128
+ flex: 1;
129
+ text-align: left;
130
+
131
+ font-size: 16px;
132
+ font-weight: 600;
133
+ color: #212121;
134
+ }
135
+
136
+ .wallet-select-modal > .wallet-select-modal--content ul button svg {
137
+ width: 18px;
138
+ height: 18px;
139
+
140
+ fill: #cfd8ea;
141
+ }
142
+
143
+ .wallet-select-modal > .wallet-select-modal--content ul button:hover svg {
144
+ fill: #2043b5;
145
+ }
146
+
147
+ @media (max-width: 450px) {
148
+ .wallet-select-modal {
149
+ place-content: flex-end;
150
+ }
151
+
152
+ .wallet-select-modal > .wallet-select-modal--content {
153
+ border-bottom-left-radius: 0;
154
+ border-bottom-right-radius: 0;
155
+ }
156
+ }
157
+ `;
158
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuc3R5bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvQGtzYW5na3VrMTAvd2FsbGV0LWNvbnRyb2xsZXIvbW9kdWxlcy9leHRlbnNpb24tcm91dGVyL21vZGFsLnN0eWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWU7QUFDZixNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBMkp6QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gbGFuZ3VhZ2U9Y3NzXG5leHBvcnQgY29uc3QgbW9kYWxTdHlsZSA9IGBcbkBrZXlmcmFtZXMgd2FsbGV0LXNlbGVjdC1tb2RhbC0tZGltLWVudGVyIHtcbiAgMCUge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbiAgXG4gIDEwMCUge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbn1cblxuQGtleWZyYW1lcyB3YWxsZXQtc2VsZWN0LW1vZGFsLS1jb250ZW50LWVudGVyIHtcbiAgMCUge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjQpO1xuICB9XG4gIFxuICAxMDAlIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cbn1cblxuLndhbGxldC1zZWxlY3QtbW9kYWwge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHotaW5kZXg6IDEwMDAwMDtcbiAgXG4gIGNvbG9yOiAjMjEyMTIxO1xuICBcbiAgbGVmdDogMDtcbiAgdG9wOiAwO1xuICB3aWR0aDogMTAwdnc7XG4gIGhlaWdodDogMTAwdmg7XG4gIFxuICBmb250LWZhbWlseTogc2Fucy1zZXJpZjtcbiAgXG4gIGRpc3BsYXk6IGdyaWQ7XG4gIHBsYWNlLWNvbnRlbnQ6IGNlbnRlcjtcbn1cblxuLndhbGxldC1zZWxlY3QtbW9kYWwgPiAud2FsbGV0LXNlbGVjdC1tb2RhbC0tZGltIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB6LWluZGV4OiAtMTtcbiAgXG4gIGxlZnQ6IDA7XG4gIHRvcDogMDtcbiAgd2lkdGg6IDEwMHZ3O1xuICBoZWlnaHQ6IDEwMHZoO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMyk7XG4gIFxuICBhbmltYXRpb246IHdhbGxldC1zZWxlY3QtbW9kYWwtLWRpbS1lbnRlciAwLjJzIGVhc2UtaW4tb3V0O1xufVxuXG4ud2FsbGV0LXNlbGVjdC1tb2RhbCA+IC53YWxsZXQtc2VsZWN0LW1vZGFsLS1jb250ZW50IHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgXG4gIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XG4gIGJveC1zaGFkb3c6IDAgNHB4IDE4cHggM3B4IHJnYmEoMCwgMCwgMCwgMC40Myk7XG4gIFxuICBhbmltYXRpb246IHdhbGxldC1zZWxlY3QtbW9kYWwtLWNvbnRlbnQtZW50ZXIgMC4ycyBlYXNlLWluLW91dDtcbiAgXG4gIHdpZHRoOiAxMDB2dztcbiAgbWF4LXdpZHRoOiA0ODBweDtcbiAgcGFkZGluZzogNDBweDtcbn1cblxuLndhbGxldC1zZWxlY3QtbW9kYWwgPiAud2FsbGV0LXNlbGVjdC1tb2RhbC0tY29udGVudCBoMSB7XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIFxuICBtYXJnaW46IDAgMCAzMnB4IDA7XG4gIFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi53YWxsZXQtc2VsZWN0LW1vZGFsID4gLndhbGxldC1zZWxlY3QtbW9kYWwtLWNvbnRlbnQgdWwge1xuICBwYWRkaW5nOiAwO1xuICBtYXJnaW46IDA7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xufVxuXG4ud2FsbGV0LXNlbGVjdC1tb2RhbCA+IC53YWxsZXQtc2VsZWN0LW1vZGFsLS1jb250ZW50IHVsIGxpIHtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNjZmQ4ZWE7XG59XG5cbi53YWxsZXQtc2VsZWN0LW1vZGFsID4gLndhbGxldC1zZWxlY3QtbW9kYWwtLWNvbnRlbnQgdWwgbGk6bGFzdC1jaGlsZCB7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjY2ZkOGVhO1xufVxuXG4ud2FsbGV0LXNlbGVjdC1tb2RhbCA+IC53YWxsZXQtc2VsZWN0LW1vZGFsLS1jb250ZW50IHVsIGJ1dHRvbiB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDY2cHg7XG4gIFxuICBib3JkZXI6IG5vbmU7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBvdXRsaW5lOiBub25lO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIFxuICBkaXNwbGF5OiBmbGV4O1xuICBnYXA6IDEwcHg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi53YWxsZXQtc2VsZWN0LW1vZGFsID4gLndhbGxldC1zZWxlY3QtbW9kYWwtLWNvbnRlbnQgdWwgYnV0dG9uOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogaHNsKDIyMCwgMzklLCA4NiUsIDAuMjUpO1xufVxuXG4ud2FsbGV0LXNlbGVjdC1tb2RhbCA+IC53YWxsZXQtc2VsZWN0LW1vZGFsLS1jb250ZW50IHVsIGJ1dHRvbiAud2FsbGV0LXNlbGVjdC1tb2RhbC0taWNvbiB7XG4gIGRpc3BsYXk6IGlubGluZS1ncmlkO1xuICB3aWR0aDogNTBweDtcbiAgaGVpZ2h0OiA1MHB4O1xuICBcbiAgcGxhY2UtY29udGVudDogY2VudGVyO1xufVxuXG4ud2FsbGV0LXNlbGVjdC1tb2RhbCA+IC53YWxsZXQtc2VsZWN0LW1vZGFsLS1jb250ZW50IHVsIGJ1dHRvbiAud2FsbGV0LXNlbGVjdC1tb2RhbC0taWNvbiBpbWcge1xuICB3aWR0aDogMzBweDtcbiAgaGVpZ2h0OiAzMHB4O1xufVxuXG4ud2FsbGV0LXNlbGVjdC1tb2RhbCA+IC53YWxsZXQtc2VsZWN0LW1vZGFsLS1jb250ZW50IHVsIGJ1dHRvbiAud2FsbGV0LXNlbGVjdC1tb2RhbC0tZGVzY3JpcHRpb24ge1xuICBmbGV4OiAxO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBcbiAgZm9udC1zaXplOiAxNnB4O1xuICBmb250LXdlaWdodDogNjAwO1xuICBjb2xvcjogIzIxMjEyMTtcbn1cblxuLndhbGxldC1zZWxlY3QtbW9kYWwgPiAud2FsbGV0LXNlbGVjdC1tb2RhbC0tY29udGVudCB1bCBidXR0b24gc3ZnIHtcbiAgd2lkdGg6IDE4cHg7XG4gIGhlaWdodDogMThweDtcbiAgXG4gIGZpbGw6ICNjZmQ4ZWE7XG59XG5cbi53YWxsZXQtc2VsZWN0LW1vZGFsID4gLndhbGxldC1zZWxlY3QtbW9kYWwtLWNvbnRlbnQgdWwgYnV0dG9uOmhvdmVyIHN2ZyB7XG4gIGZpbGw6ICMyMDQzYjU7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA0NTBweCkge1xuICAud2FsbGV0LXNlbGVjdC1tb2RhbCB7XG4gICAgcGxhY2UtY29udGVudDogZmxleC1lbmQ7XG4gIH1cbiAgXG4gIC53YWxsZXQtc2VsZWN0LW1vZGFsID4gLndhbGxldC1zZWxlY3QtbW9kYWwtLWNvbnRlbnQge1xuICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XG4gICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XG4gIH1cbn1cbmA7XG4iXX0=
@@ -0,0 +1,13 @@
1
+ import { XplaWebExtensionConnector } from '@ksangkuk10/web-extension-interface';
2
+ export interface ExtensionInfo {
3
+ name: string;
4
+ identifier: string;
5
+ icon: string;
6
+ connector?: () => XplaWebExtensionConnector | Promise<XplaWebExtensionConnector>;
7
+ }
8
+ declare global {
9
+ interface Window {
10
+ xplaWallets: ExtensionInfo[] | undefined;
11
+ }
12
+ }
13
+ export declare function getXplaExtensions(): ExtensionInfo[];
@@ -0,0 +1,14 @@
1
+ export function getXplaExtensions() {
2
+ return Array.isArray(window.xplaWallets)
3
+ ? window.xplaWallets
4
+ : window.isXplaExtensionAvailable
5
+ ? [
6
+ {
7
+ name: 'Xpla Valut Wallet',
8
+ identifier: 'xplavault',
9
+ icon: 'https://assets.xpla.io/icon/extension/icon.png',
10
+ },
11
+ ]
12
+ : [];
13
+ }
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGlDaGFubmVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL0Brc2FuZ2t1azEwL3dhbGxldC1jb250cm9sbGVyL21vZHVsZXMvZXh0ZW5zaW9uLXJvdXRlci9tdWx0aUNoYW5uZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBaUJBLE1BQU0sVUFBVSxpQkFBaUI7SUFDL0IsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7UUFDdEMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXO1FBQ3BCLENBQUMsQ0FBQyxNQUFNLENBQUMsd0JBQXdCO1lBQ2pDLENBQUMsQ0FBQztnQkFDRTtvQkFDRSxJQUFJLEVBQUUsbUJBQW1CO29CQUN6QixVQUFVLEVBQUUsV0FBVztvQkFDdkIsSUFBSSxFQUFFLGdEQUFnRDtpQkFDdkQ7YUFDRjtZQUNILENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDVCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgWHBsYVdlYkV4dGVuc2lvbkNvbm5lY3RvciB9IGZyb20gJ0Brc2FuZ2t1azEwL3dlYi1leHRlbnNpb24taW50ZXJmYWNlJztcblxuZXhwb3J0IGludGVyZmFjZSBFeHRlbnNpb25JbmZvIHtcbiAgbmFtZTogc3RyaW5nO1xuICBpZGVudGlmaWVyOiBzdHJpbmc7XG4gIGljb246IHN0cmluZztcbiAgY29ubmVjdG9yPzogKCkgPT5cbiAgICB8IFhwbGFXZWJFeHRlbnNpb25Db25uZWN0b3JcbiAgICB8IFByb21pc2U8WHBsYVdlYkV4dGVuc2lvbkNvbm5lY3Rvcj47XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgeHBsYVdhbGxldHM6IEV4dGVuc2lvbkluZm9bXSB8IHVuZGVmaW5lZDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0WHBsYUV4dGVuc2lvbnMoKTogRXh0ZW5zaW9uSW5mb1tdIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkod2luZG93LnhwbGFXYWxsZXRzKVxuICAgID8gd2luZG93LnhwbGFXYWxsZXRzXG4gICAgOiB3aW5kb3cuaXNYcGxhRXh0ZW5zaW9uQXZhaWxhYmxlXG4gICAgPyBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnWHBsYSBWYWx1dCBXYWxsZXQnLFxuICAgICAgICAgIGlkZW50aWZpZXI6ICd4cGxhdmF1bHQnLFxuICAgICAgICAgIGljb246ICdodHRwczovL2Fzc2V0cy54cGxhLmlvL2ljb24vZXh0ZW5zaW9uL2ljb24ucG5nJyxcbiAgICAgICAgfSxcbiAgICAgIF1cbiAgICA6IFtdO1xufVxuIl19
@@ -0,0 +1,8 @@
1
+ export declare const storage: Storage | undefined;
2
+ interface Session {
3
+ identifier: string;
4
+ }
5
+ export declare function getStoredSession(): Session | undefined;
6
+ export declare function storeSession(session: Session): void;
7
+ export declare function clearSession(): void;
8
+ export {};
@@ -0,0 +1,31 @@
1
+ export const storage = typeof window === 'undefined' ? undefined : localStorage;
2
+ const SESSION_KEY = '__xpla_extension_router_session__';
3
+ export function getStoredSession() {
4
+ const data = storage === null || storage === void 0 ? void 0 : storage.getItem(SESSION_KEY);
5
+ if (!data) {
6
+ return undefined;
7
+ }
8
+ try {
9
+ const object = JSON.parse(data);
10
+ if ('identifier' in object) {
11
+ return {
12
+ identifier: object['identifier'],
13
+ };
14
+ }
15
+ else {
16
+ storage === null || storage === void 0 ? void 0 : storage.removeItem(SESSION_KEY);
17
+ return undefined;
18
+ }
19
+ }
20
+ catch (_a) {
21
+ storage === null || storage === void 0 ? void 0 : storage.removeItem(SESSION_KEY);
22
+ return undefined;
23
+ }
24
+ }
25
+ export function storeSession(session) {
26
+ storage === null || storage === void 0 ? void 0 : storage.setItem(SESSION_KEY, JSON.stringify(session));
27
+ }
28
+ export function clearSession() {
29
+ storage === null || storage === void 0 ? void 0 : storage.removeItem(SESSION_KEY);
30
+ }
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9Aa3NhbmdrdWsxMC93YWxsZXQtY29udHJvbGxlci9tb2R1bGVzL2V4dGVuc2lvbi1yb3V0ZXIvc2Vzc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsT0FBTyxNQUFNLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztBQU1oRixNQUFNLFdBQVcsR0FBRyxtQ0FBbUMsQ0FBQztBQUV4RCxNQUFNLFVBQVUsZ0JBQWdCO0lBQzlCLE1BQU0sSUFBSSxHQUFHLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFM0MsSUFBSSxDQUFDLElBQUksRUFBRTtRQUNULE9BQU8sU0FBUyxDQUFDO0tBQ2xCO0lBRUQsSUFBSTtRQUNGLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFaEMsSUFBSSxZQUFZLElBQUksTUFBTSxFQUFFO1lBQzFCLE9BQU87Z0JBQ0wsVUFBVSxFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUM7YUFDakMsQ0FBQztTQUNIO2FBQU07WUFDTCxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2pDLE9BQU8sU0FBUyxDQUFDO1NBQ2xCO0tBQ0Y7SUFBQyxXQUFNO1FBQ04sT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNqQyxPQUFPLFNBQVMsQ0FBQztLQUNsQjtBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLE9BQWdCO0lBQzNDLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxPQUFPLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUN6RCxDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVk7SUFDMUIsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNuQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IHN0b3JhZ2UgPSB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IGxvY2FsU3RvcmFnZTtcblxuaW50ZXJmYWNlIFNlc3Npb24ge1xuICBpZGVudGlmaWVyOiBzdHJpbmc7XG59XG5cbmNvbnN0IFNFU1NJT05fS0VZID0gJ19feHBsYV9leHRlbnNpb25fcm91dGVyX3Nlc3Npb25fXyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdG9yZWRTZXNzaW9uKCk6IFNlc3Npb24gfCB1bmRlZmluZWQge1xuICBjb25zdCBkYXRhID0gc3RvcmFnZT8uZ2V0SXRlbShTRVNTSU9OX0tFWSk7XG5cbiAgaWYgKCFkYXRhKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3Qgb2JqZWN0ID0gSlNPTi5wYXJzZShkYXRhKTtcblxuICAgIGlmICgnaWRlbnRpZmllcicgaW4gb2JqZWN0KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZGVudGlmaWVyOiBvYmplY3RbJ2lkZW50aWZpZXInXSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0b3JhZ2U/LnJlbW92ZUl0ZW0oU0VTU0lPTl9LRVkpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIHN0b3JhZ2U/LnJlbW92ZUl0ZW0oU0VTU0lPTl9LRVkpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0b3JlU2Vzc2lvbihzZXNzaW9uOiBTZXNzaW9uKSB7XG4gIHN0b3JhZ2U/LnNldEl0ZW0oU0VTU0lPTl9LRVksIEpTT04uc3RyaW5naWZ5KHNlc3Npb24pKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyU2Vzc2lvbigpIHtcbiAgc3RvcmFnZT8ucmVtb3ZlSXRlbShTRVNTSU9OX0tFWSk7XG59XG4iXX0=