@mocanetwork/airkit 0.5.0 → 0.6.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/dist/airkit.cjs.js +2637 -2565
  2. package/dist/airkit.esm.js +2645 -2383
  3. package/dist/airkit.umd.js +2852 -0
  4. package/dist/types/airService.d.ts +12 -11
  5. package/dist/types/airWalletProvider.d.ts +13 -0
  6. package/dist/types/common/air/error.d.ts +8 -0
  7. package/dist/types/common/custom.d.ts +6 -0
  8. package/dist/types/common/provider/error.d.ts +16 -0
  9. package/dist/types/common/provider/types.d.ts +24 -0
  10. package/dist/types/common/realm/error.d.ts +0 -0
  11. package/dist/types/common/realm/messaging/auth.d.ts +14 -15
  12. package/dist/types/common/realm/messaging/provider.d.ts +32 -0
  13. package/dist/types/common/realm/messaging/types.d.ts +29 -10
  14. package/dist/types/common/realm/partner/config.d.ts +0 -32
  15. package/dist/types/common/realm/smart-session/types.d.ts +1 -1
  16. package/dist/types/common/realm/user/types.d.ts +0 -28
  17. package/dist/types/common/utils.d.ts +16 -0
  18. package/dist/types/error.d.ts +1 -1
  19. package/dist/types/index.d.ts +1 -2
  20. package/dist/types/interfaces.d.ts +18 -181
  21. package/dist/types/messageService.d.ts +18 -20
  22. package/dist/types/utils.d.ts +3 -21
  23. package/package.json +7 -15
  24. package/dist/airkit.umd.min.js +0 -2
  25. package/dist/airkit.umd.min.js.LICENSE.txt +0 -12
  26. package/dist/lib.cjs/common/src/error.js +0 -25
  27. package/dist/lib.cjs/common/src/realm/messaging/auth.js +0 -28
  28. package/dist/lib.cjs/common/src/realm/messaging/types.js +0 -21
  29. package/dist/lib.cjs/ws-embed/src/PopupHandler.js +0 -64
  30. package/dist/lib.cjs/ws-embed/src/airService.js +0 -398
  31. package/dist/lib.cjs/ws-embed/src/baseProvider.js +0 -178
  32. package/dist/lib.cjs/ws-embed/src/communicationProvider.js +0 -346
  33. package/dist/lib.cjs/ws-embed/src/embed.js +0 -750
  34. package/dist/lib.cjs/ws-embed/src/error.js +0 -21
  35. package/dist/lib.cjs/ws-embed/src/iframeController.js +0 -68
  36. package/dist/lib.cjs/ws-embed/src/inPageProvider.js +0 -307
  37. package/dist/lib.cjs/ws-embed/src/index.js +0 -20
  38. package/dist/lib.cjs/ws-embed/src/interfaces.js +0 -29
  39. package/dist/lib.cjs/ws-embed/src/isStream.js +0 -20
  40. package/dist/lib.cjs/ws-embed/src/loglevel.js +0 -7
  41. package/dist/lib.cjs/ws-embed/src/messageService.js +0 -269
  42. package/dist/lib.cjs/ws-embed/src/messages.js +0 -22
  43. package/dist/lib.cjs/ws-embed/src/siteMetadata.js +0 -77
  44. package/dist/lib.cjs/ws-embed/src/utils.js +0 -95
  45. package/dist/lib.esm/common/src/error.js +0 -23
  46. package/dist/lib.esm/common/src/realm/messaging/auth.js +0 -26
  47. package/dist/lib.esm/common/src/realm/messaging/types.js +0 -19
  48. package/dist/lib.esm/ws-embed/src/PopupHandler.js +0 -62
  49. package/dist/lib.esm/ws-embed/src/airService.js +0 -396
  50. package/dist/lib.esm/ws-embed/src/baseProvider.js +0 -176
  51. package/dist/lib.esm/ws-embed/src/communicationProvider.js +0 -344
  52. package/dist/lib.esm/ws-embed/src/embed.js +0 -745
  53. package/dist/lib.esm/ws-embed/src/error.js +0 -18
  54. package/dist/lib.esm/ws-embed/src/iframeController.js +0 -66
  55. package/dist/lib.esm/ws-embed/src/inPageProvider.js +0 -302
  56. package/dist/lib.esm/ws-embed/src/index.js +0 -5
  57. package/dist/lib.esm/ws-embed/src/interfaces.js +0 -21
  58. package/dist/lib.esm/ws-embed/src/isStream.js +0 -15
  59. package/dist/lib.esm/ws-embed/src/loglevel.js +0 -5
  60. package/dist/lib.esm/ws-embed/src/messageService.js +0 -267
  61. package/dist/lib.esm/ws-embed/src/messages.js +0 -20
  62. package/dist/lib.esm/ws-embed/src/siteMetadata.js +0 -75
  63. package/dist/lib.esm/ws-embed/src/utils.js +0 -88
  64. package/dist/types/PopupHandler.d.ts +0 -24
  65. package/dist/types/baseProvider.d.ts +0 -66
  66. package/dist/types/communicationProvider.d.ts +0 -82
  67. package/dist/types/embed.d.ts +0 -55
  68. package/dist/types/inPageProvider.d.ts +0 -106
  69. package/dist/types/isStream.d.ts +0 -4
  70. package/dist/types/messages.d.ts +0 -19
@@ -1,396 +0,0 @@
1
- import _objectSpread from '@babel/runtime/helpers/objectSpread2';
2
- import _classPrivateMethodInitSpec from '@babel/runtime/helpers/classPrivateMethodInitSpec';
3
- import _classPrivateFieldInitSpec from '@babel/runtime/helpers/classPrivateFieldInitSpec';
4
- import { randomId } from '@toruslabs/base-controllers';
5
- import { AirAuthMessageTypes } from '../../common/src/realm/messaging/auth.js';
6
- import RealmEmbed from './embed.js';
7
- import { AirServiceError } from './error.js';
8
- import { IframeController } from './iframeController.js';
9
- import { EMBED_BUILD_ENV } from './interfaces.js';
10
- import log from './loglevel.js';
11
- import AirMessageService from './messageService.js';
12
- import { AIR_URLS, isElement } from './utils.js';
13
-
14
- function _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }
15
- function _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }
16
- function _assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
17
- var _authIframeController = /*#__PURE__*/new WeakMap();
18
- var _loginResult = /*#__PURE__*/new WeakMap();
19
- var _buildEnv = /*#__PURE__*/new WeakMap();
20
- var _embedNonce = /*#__PURE__*/new WeakMap();
21
- var _enableLogging = /*#__PURE__*/new WeakMap();
22
- var _isInitialized = /*#__PURE__*/new WeakMap();
23
- var _partnerId = /*#__PURE__*/new WeakMap();
24
- var _realmEmbed = /*#__PURE__*/new WeakMap();
25
- var _walletInitialization = /*#__PURE__*/new WeakMap();
26
- var _airAuthListener = /*#__PURE__*/new WeakMap();
27
- var _AirService_brand = /*#__PURE__*/new WeakSet();
28
- class AirService {
29
- constructor({
30
- partnerId
31
- }) {
32
- _classPrivateMethodInitSpec(this, _AirService_brand);
33
- _classPrivateFieldInitSpec(this, _authIframeController, void 0);
34
- _classPrivateFieldInitSpec(this, _loginResult, void 0);
35
- _classPrivateFieldInitSpec(this, _buildEnv, void 0);
36
- _classPrivateFieldInitSpec(this, _embedNonce, randomId());
37
- _classPrivateFieldInitSpec(this, _enableLogging, false);
38
- _classPrivateFieldInitSpec(this, _isInitialized, false);
39
- _classPrivateFieldInitSpec(this, _partnerId, void 0);
40
- // Realm Embed related
41
- _classPrivateFieldInitSpec(this, _realmEmbed, void 0);
42
- _classPrivateFieldInitSpec(this, _walletInitialization, void 0);
43
- _classPrivateFieldInitSpec(this, _airAuthListener, []);
44
- _classPrivateFieldSet(_partnerId, this, partnerId);
45
- _classPrivateFieldSet(_realmEmbed, this, new RealmEmbed({
46
- partnerId: _classPrivateFieldGet(_partnerId, this)
47
- }));
48
- }
49
- get buildEnv() {
50
- return _classPrivateFieldGet(_buildEnv, this);
51
- }
52
- get isAirAuth() {
53
- return true;
54
- }
55
- get isInitialized() {
56
- return _classPrivateFieldGet(_isInitialized, this);
57
- }
58
- get isLoggedIn() {
59
- return !!_classPrivateFieldGet(_loginResult, this);
60
- }
61
- get isWalletLoaded() {
62
- var _classPrivateFieldGet2;
63
- return (_classPrivateFieldGet2 = _classPrivateFieldGet(_realmEmbed, this)) === null || _classPrivateFieldGet2 === void 0 ? void 0 : _classPrivateFieldGet2.isInitialized;
64
- }
65
- async init({
66
- buildEnv = EMBED_BUILD_ENV.PRODUCTION,
67
- enableLogging = false,
68
- skipRehydration = false
69
- }) {
70
- if (!_classPrivateFieldGet(_partnerId, this)) throw new Error("Partner ID is required to initialize auth service");
71
- if (_classPrivateFieldGet(_isInitialized, this)) return;
72
- _classPrivateFieldSet(_buildEnv, this, buildEnv);
73
- _classPrivateFieldSet(_enableLogging, this, enableLogging);
74
- const {
75
- authUrl,
76
- logLevel
77
- } = AIR_URLS[buildEnv];
78
- log.setDefaultLevel(logLevel);
79
- if (_classPrivateFieldGet(_enableLogging, this)) log.enableAll();else log.disableAll();
80
- const authIframeOrigin = new URL(authUrl).origin;
81
- await AirMessageService.openAuthObservables({
82
- authIframeOrigin
83
- });
84
- _classPrivateFieldSet(_authIframeController, this, new IframeController(authUrl, `air-login-${_classPrivateFieldGet(_embedNonce, this)}`));
85
- AirMessageService.authMessage$.subscribe(async msg => {
86
- switch (msg.type) {
87
- case AirAuthMessageTypes.IFRAME_VISIBILITY_REQUEST:
88
- {
89
- const authIframeController = _classPrivateFieldGet(_authIframeController, this);
90
- authIframeController.setIframeVisibility(msg.payload.visible);
91
- authIframeController.updateIframeState();
92
- break;
93
- }
94
- case AirAuthMessageTypes.SETUP_WALLET_REQUEST:
95
- {
96
- await _assertClassBrand(_AirService_brand, this, _initializeWallet).call(this);
97
- break;
98
- }
99
- }
100
- });
101
- try {
102
- _classPrivateFieldGet(_authIframeController, this).createIframe();
103
- const initializationPromise = new Promise((resolve, reject) => {
104
- const handleAuthMessage = ev => {
105
- try {
106
- if (ev.origin !== authIframeOrigin) return;
107
- if (ev.data === AirAuthMessageTypes.SETUP_COMPLETED) {
108
- window.removeEventListener("message", handleAuthMessage);
109
- _classPrivateFieldGet(_authIframeController, this).postMessage({
110
- type: AirAuthMessageTypes.INITIALIZATION_REQUEST,
111
- payload: {
112
- partnerId: _classPrivateFieldGet(_partnerId, this),
113
- skipRehydration
114
- }
115
- });
116
- resolve();
117
- }
118
- } catch (err) {
119
- reject(err);
120
- }
121
- };
122
- window.addEventListener("message", handleAuthMessage);
123
- });
124
- const authServiceInitialization = AirMessageService.waitForAuthInitialization();
125
- const result = await Promise.all([initializationPromise, authServiceInitialization]);
126
- _classPrivateFieldSet(_isInitialized, this, true);
127
- _assertClassBrand(_AirService_brand, this, _triggerAirAuthInitialized).call(this, {
128
- rehydrated: result[1].rehydrated
129
- });
130
- _assertClassBrand(_AirService_brand, this, _prepareRealmEmbedListeners).call(this);
131
-
132
- // rehydrated auth session
133
- if (result[1].rehydrated) {
134
- _classPrivateFieldSet(_loginResult, this, _assertClassBrand(_AirService_brand, this, _createLoginResult).call(this, result[1]));
135
- _assertClassBrand(_AirService_brand, this, _triggerAirAuthLoggedIn).call(this);
136
- return _classPrivateFieldGet(_loginResult, this);
137
- }
138
- } catch (error) {
139
- log.debug("Error initializing auth service", error);
140
- await this.cleanUp();
141
- throw error;
142
- }
143
- return null;
144
- }
145
- async cleanUp() {
146
- var _classPrivateFieldGet3;
147
- // Clear up wallet service iframe if exists
148
- await _assertClassBrand(_AirService_brand, this, _cleanUpWallet).call(this);
149
-
150
- // Logout auth session
151
- await AirMessageService.logoutAuth(_classPrivateFieldGet(_authIframeController, this).iframeElement);
152
-
153
- // Destroy the auth iframe
154
- const authIframeElement = (_classPrivateFieldGet3 = _classPrivateFieldGet(_authIframeController, this)) === null || _classPrivateFieldGet3 === void 0 ? void 0 : _classPrivateFieldGet3.iframeElement;
155
- if (isElement(authIframeElement) && window.document.body.contains(authIframeElement)) {
156
- _classPrivateFieldGet(_authIframeController, this).destroy();
157
- _classPrivateFieldSet(_authIframeController, this, undefined);
158
- }
159
-
160
- // Close the message service
161
- AirMessageService.closeAuthObservables();
162
- this.clearEventListeners();
163
- _classPrivateFieldSet(_isInitialized, this, false);
164
- }
165
- async login(options) {
166
- if (!_classPrivateFieldGet(_isInitialized, this)) throw new Error("Service is not initialized");
167
- if (_classPrivateFieldGet(_loginResult, this)) return _classPrivateFieldGet(_loginResult, this);
168
- const iframeController = _classPrivateFieldGet(_authIframeController, this);
169
- const {
170
- payload
171
- } = await AirMessageService.sendAuthLoginRequest(iframeController.iframeElement, {
172
- partnerLoginToken: options === null || options === void 0 ? void 0 : options.authToken
173
- });
174
- if (payload.success === true) {
175
- _classPrivateFieldSet(_loginResult, this, _assertClassBrand(_AirService_brand, this, _createLoginResult).call(this, payload));
176
- _assertClassBrand(_AirService_brand, this, _triggerAirAuthLoggedIn).call(this);
177
- return _classPrivateFieldGet(_loginResult, this);
178
- }
179
- throw new AirServiceError("UNKNOWN_ERROR", "Unknown error occurred");
180
- }
181
-
182
- /**
183
- * @experimental This method is experimental and will change in the future.
184
- */
185
- async deploySmartAccount() {
186
- if (!_classPrivateFieldGet(_isInitialized, this)) throw new Error("Service is not initialized");
187
- await _assertClassBrand(_AirService_brand, this, _ensureWallet).call(this);
188
- return _classPrivateFieldGet(_realmEmbed, this)._deploySmartAccount();
189
- }
190
-
191
- /**
192
- * @experimental This method is experimental and will change in the future.
193
- */
194
- async grantPermission(policies) {
195
- if (!_classPrivateFieldGet(_isInitialized, this)) throw new Error("AirAuth is not initialized");
196
- await _assertClassBrand(_AirService_brand, this, _ensureWallet).call(this);
197
- return _classPrivateFieldGet(_realmEmbed, this)._grantPermission(policies);
198
- }
199
-
200
- /**
201
- * @experimental This method is experimental and will change in the future.
202
- */
203
- async executeAction(params) {
204
- if (!_classPrivateFieldGet(_isInitialized, this)) throw new Error("AirAuth is not initialized");
205
- await _assertClassBrand(_AirService_brand, this, _ensureWallet).call(this);
206
- return _classPrivateFieldGet(_realmEmbed, this)._executeAction(params);
207
- }
208
-
209
- /**
210
- * @experimental This method is experimental and will change in the future.
211
- */
212
- async revokePermission(permissionId) {
213
- if (!_classPrivateFieldGet(_isInitialized, this)) throw new Error("AirAuth is not initialized");
214
- await _assertClassBrand(_AirService_brand, this, _ensureWallet).call(this);
215
- return _classPrivateFieldGet(_realmEmbed, this)._revokePermission(permissionId);
216
- }
217
- async logout() {
218
- if (!_classPrivateFieldGet(_isInitialized, this)) throw new Error("Service is not initialized");
219
- if (!this.isLoggedIn) throw new Error("No active session to logout");
220
-
221
- // Clear up wallet
222
- await _assertClassBrand(_AirService_brand, this, _cleanUpWallet).call(this);
223
- await AirMessageService.logoutAuth(_classPrivateFieldGet(_authIframeController, this).iframeElement);
224
- _classPrivateFieldSet(_loginResult, this, undefined);
225
- _assertClassBrand(_AirService_brand, this, _triggerAirAuthLoggedOut).call(this);
226
- }
227
- async getProvider() {
228
- if (!this.isLoggedIn) return null;
229
- await _assertClassBrand(_AirService_brand, this, _ensureWallet).call(this);
230
- return _classPrivateFieldGet(_realmEmbed, this).provider;
231
- }
232
- async preloadWallet() {
233
- return _assertClassBrand(_AirService_brand, this, _ensureWallet).call(this);
234
- }
235
- async claimAirId(options) {
236
- await _assertClassBrand(_AirService_brand, this, _ensureWallet).call(this);
237
- return _classPrivateFieldGet(_realmEmbed, this).claimRealmId(options);
238
- }
239
- async getUserInfo() {
240
- if (!this.isLoggedIn) throw new Error("User not logged in");
241
- const info = await AirMessageService.sendUserInfoRequest(_classPrivateFieldGet(_authIframeController, this).iframeElement);
242
- if (info.payload.success === false) {
243
- throw new AirServiceError(info.payload.errorName, info.payload.errorMessage);
244
- }
245
- return {
246
- id: info.payload.id,
247
- abstractAccountAddress: info.payload.abstractAccountAddress,
248
- email: info.payload.email,
249
- airIds: info.payload.airIds
250
- };
251
- }
252
- async getPartnerUserInfo() {
253
- if (!this.isLoggedIn) throw new Error("User not logged in");
254
- const info = await AirMessageService.sendPartnerUserInfoRequest(_classPrivateFieldGet(_authIframeController, this).iframeElement);
255
- if (info.payload.success === false) {
256
- throw new AirServiceError(info.payload.errorName, info.payload.errorMessage);
257
- }
258
- return {
259
- partnerId: info.payload.partnerId,
260
- partnerUserId: info.payload.partnerUserId,
261
- airId: info.payload.airId
262
- };
263
- }
264
- on(listener) {
265
- if (_classPrivateFieldGet(_airAuthListener, this).indexOf(listener) < 0) _classPrivateFieldGet(_airAuthListener, this).push(listener);
266
- }
267
- off(listener) {
268
- if (_classPrivateFieldGet(_airAuthListener, this).indexOf(listener) >= 0) _classPrivateFieldGet(_airAuthListener, this).splice(_classPrivateFieldGet(_airAuthListener, this).indexOf(listener), 1);
269
- }
270
- clearEventListeners() {
271
- _classPrivateFieldSet(_airAuthListener, this, []);
272
- }
273
-
274
- // This is for internal use only
275
- // @ts-expect-error for unused function
276
- async _showWalletWidget() {
277
- await _assertClassBrand(_AirService_brand, this, _ensureWallet).call(this);
278
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
279
- return _classPrivateFieldGet(_realmEmbed, this)._showWalletWidget();
280
- }
281
- }
282
- async function _createWallet() {
283
- return _classPrivateFieldGet(_realmEmbed, this).login({
284
- skipClaiming: true,
285
- legacy: false
286
- });
287
- }
288
- async function _ensureWallet() {
289
- if (!this.isLoggedIn) throw new Error("No active session to create wallet");
290
- if (!_classPrivateFieldGet(_walletInitialization, this)) {
291
- AirMessageService.setupAuthIframe(_classPrivateFieldGet(_authIframeController, this).iframeElement);
292
- _classPrivateFieldSet(_walletInitialization, this, (async () => {
293
- try {
294
- await _assertClassBrand(_AirService_brand, this, _initializeWallet).call(this);
295
- return await _assertClassBrand(_AirService_brand, this, _createWallet).call(this);
296
- } catch (error) {
297
- log.error("Error initializing wallet", error);
298
- throw error;
299
- }
300
- })());
301
- }
302
- return _classPrivateFieldGet(_walletInitialization, this);
303
- }
304
- async function _cleanUpWallet() {
305
- if (_classPrivateFieldGet(_walletInitialization, this) || _classPrivateFieldGet(_realmEmbed, this)) {
306
- await _classPrivateFieldGet(_walletInitialization, this);
307
- await _classPrivateFieldGet(_realmEmbed, this).cleanUp();
308
- _classPrivateFieldSet(_walletInitialization, this, undefined);
309
- }
310
- }
311
- async function _initializeWallet() {
312
- if (!_classPrivateFieldGet(_realmEmbed, this).isInitialized) {
313
- try {
314
- await _classPrivateFieldGet(_realmEmbed, this).init({
315
- buildEnv: _classPrivateFieldGet(_buildEnv, this),
316
- skipRehydration: true,
317
- enableLogging: _classPrivateFieldGet(_enableLogging, this) || false
318
- });
319
- _classPrivateFieldGet(_authIframeController, this).postMessage({
320
- type: AirAuthMessageTypes.SETUP_WALLET_RESPONSE,
321
- payload: {
322
- success: true
323
- }
324
- });
325
- } catch (error) {
326
- log.error("Error initializing wallet", error);
327
- _classPrivateFieldGet(_authIframeController, this).postMessage({
328
- type: AirAuthMessageTypes.SETUP_WALLET_RESPONSE,
329
- payload: {
330
- success: false,
331
- errorName: "UNKNOWN_ERROR",
332
- errorMessage: "Unknown error occurred"
333
- }
334
- });
335
- throw error;
336
- }
337
- }
338
- }
339
- async function _triggerEventListeners(data) {
340
- _classPrivateFieldGet(_airAuthListener, this).forEach(listener => {
341
- listener(data);
342
- });
343
- }
344
- async function _triggerAirAuthInitialized(result) {
345
- await _assertClassBrand(_AirService_brand, this, _triggerEventListeners).call(this, {
346
- event: "initialized",
347
- result
348
- });
349
- }
350
- async function _triggerAirAuthLoggedIn() {
351
- await _assertClassBrand(_AirService_brand, this, _triggerEventListeners).call(this, {
352
- event: "logged_in",
353
- result: _classPrivateFieldGet(_loginResult, this)
354
- });
355
- }
356
- async function _triggerAirAuthLoggedOut() {
357
- await _assertClassBrand(_AirService_brand, this, _triggerEventListeners).call(this, {
358
- event: "logged_out"
359
- });
360
- }
361
- function _createLoginResult(payload) {
362
- return {
363
- isLoggedIn: true,
364
- id: payload.id,
365
- abstractAccountAddress: payload.abstractAccountAddress,
366
- token: payload.partnerAccessToken
367
- };
368
- }
369
- async function _prepareRealmEmbedListeners() {
370
- _classPrivateFieldGet(_realmEmbed, this).on(data => {
371
- if (data.event === "connected" || data.event === "logged_in") {
372
- var _data$result$addresse;
373
- const result = _objectSpread(_objectSpread({}, data.result), {}, {
374
- addresses: {
375
- eoa: data.result.addresses.eoa,
376
- aa: (_data$result$addresse = data.result.addresses.aa) !== null && _data$result$addresse !== void 0 ? _data$result$addresse : ""
377
- }
378
- });
379
- _assertClassBrand(_AirService_brand, this, _triggerEventListeners).call(this, {
380
- event: "wallet_loaded",
381
- result
382
- });
383
- } else if (data.event === "minting_started") {
384
- _assertClassBrand(_AirService_brand, this, _triggerEventListeners).call(this, {
385
- event: "minting_started"
386
- });
387
- } else if (data.event === "minting_failed") {
388
- _assertClassBrand(_AirService_brand, this, _triggerEventListeners).call(this, {
389
- event: "minting_failed",
390
- errorMessage: data.errorMessage
391
- });
392
- }
393
- });
394
- }
395
-
396
- export { AirService as default };
@@ -1,176 +0,0 @@
1
- import _objectSpread from '@babel/runtime/helpers/objectSpread2';
2
- import _defineProperty from '@babel/runtime/helpers/defineProperty';
3
- import { createLoggerMiddleware } from '@toruslabs/base-controllers';
4
- import { SafeEventEmitter, ObjectMultiplex, createStreamMiddleware, JRPCEngine, createIdRemapMiddleware, rpcErrors, getRpcPromiseCallback } from '@web3auth/auth';
5
- import pump from 'pump';
6
- import { isDuplexStream } from './isStream.js';
7
- import messages from './messages.js';
8
- import { createErrorMiddleware, logStreamDisconnectWarning } from './utils.js';
9
-
10
- /**
11
- * @param connectionStream - A Node.js duplex stream
12
- * @param opts - An options bag
13
- */
14
- class BaseProvider extends SafeEventEmitter {
15
- constructor(connectionStream, {
16
- maxEventListeners = 100,
17
- jsonRpcStreamName = "provider"
18
- }) {
19
- super();
20
- _defineProperty(this, "rpcEngine", void 0);
21
- _defineProperty(this, "jsonRpcConnectionEvents", void 0);
22
- /**
23
- * Indicating that this provider is a Web3Auth provider.
24
- */
25
- _defineProperty(this, "isWeb3Auth", void 0);
26
- _defineProperty(this, "state", void 0);
27
- if (!isDuplexStream(connectionStream)) {
28
- throw new Error(messages.errors.invalidDuplexStream());
29
- }
30
- this.isWeb3Auth = true;
31
- this.setMaxListeners(maxEventListeners);
32
- this.handleConnect = this.handleConnect.bind(this);
33
- this.handleDisconnect = this.handleDisconnect.bind(this);
34
- this.handleStreamDisconnect = this.handleStreamDisconnect.bind(this);
35
- this.rpcRequest = this.rpcRequest.bind(this);
36
- this.initializeState = this.initializeState.bind(this);
37
- this.request = this.request.bind(this);
38
- this.sendAsync = this.sendAsync.bind(this);
39
- this.send = this.send.bind(this);
40
- // this.enable = this.enable.bind(this);
41
-
42
- // setup connectionStream multiplexing
43
- const mux = new ObjectMultiplex();
44
- pump(connectionStream, mux, connectionStream, this.handleStreamDisconnect.bind(this, "Web3Auth"));
45
-
46
- // ignore phishing warning message (handled elsewhere)
47
- mux.ignoreStream("phishing");
48
-
49
- // setup own event listeners
50
- // connect to async provider
51
-
52
- const jsonRpcConnection = createStreamMiddleware();
53
- pump(jsonRpcConnection.stream, mux.createStream(jsonRpcStreamName), jsonRpcConnection.stream, this.handleStreamDisconnect.bind(this, "Web3Auth RpcProvider"));
54
-
55
- // handle RPC requests via dapp-side rpc engine
56
- const rpcEngine = new JRPCEngine();
57
- rpcEngine.push(createIdRemapMiddleware());
58
- rpcEngine.push(createErrorMiddleware());
59
- rpcEngine.push(createLoggerMiddleware({
60
- origin: location.origin
61
- }));
62
- rpcEngine.push(jsonRpcConnection.middleware);
63
- this.rpcEngine = rpcEngine;
64
- this.jsonRpcConnectionEvents = jsonRpcConnection.events;
65
- }
66
-
67
- /**
68
- * Submits an RPC request for the given method, with the given params.
69
- * Resolves with the result of the method call, or rejects on error.
70
- *
71
- * @param args - The RPC request arguments.
72
- * @returns A Promise that resolves with the result of the RPC method,
73
- * or rejects if an error is encountered.
74
- */
75
- async request(args) {
76
- if (!args || typeof args !== "object" || Array.isArray(args)) {
77
- throw rpcErrors.invalidRequest({
78
- message: messages.errors.invalidRequestArgs(),
79
- data: _objectSpread(_objectSpread({}, args || {}), {}, {
80
- cause: messages.errors.invalidRequestArgs()
81
- })
82
- });
83
- }
84
- const {
85
- method,
86
- params
87
- } = args;
88
- if (typeof method !== "string" || method.length === 0) {
89
- throw rpcErrors.invalidRequest({
90
- message: messages.errors.invalidRequestMethod(),
91
- data: _objectSpread(_objectSpread({}, args || {}), {}, {
92
- cause: messages.errors.invalidRequestArgs()
93
- })
94
- });
95
- }
96
- if (params !== undefined && !Array.isArray(params) && (typeof params !== "object" || params === null)) {
97
- throw rpcErrors.invalidRequest({
98
- message: messages.errors.invalidRequestParams(),
99
- data: _objectSpread(_objectSpread({}, args || {}), {}, {
100
- cause: messages.errors.invalidRequestArgs()
101
- })
102
- });
103
- }
104
- return new Promise((resolve, reject) => {
105
- this.rpcRequest({
106
- method,
107
- params
108
- }, getRpcPromiseCallback(resolve, reject));
109
- });
110
- }
111
- /**
112
- * Submits an RPC request per the given JSON-RPC request object.
113
- *
114
- * @param payload - The RPC request object.
115
- * @param cb - The callback function.
116
- */
117
- send(payload, callback) {
118
- this.rpcRequest(payload, callback);
119
- }
120
- /**
121
- * Submits an RPC request per the given JSON-RPC request object.
122
- *
123
- * @param payload - The RPC request object.
124
- * @param cb - The callback function.
125
- */
126
- sendAsync(payload) {
127
- return new Promise((resolve, reject) => {
128
- this.rpcRequest(payload, getRpcPromiseCallback(resolve, reject));
129
- });
130
- }
131
-
132
- /**
133
- * Called when connection is lost to critical streams.
134
- *
135
- * emits InpageProvider#disconnect
136
- */
137
- handleStreamDisconnect(streamName, error) {
138
- logStreamDisconnectWarning(streamName, error, this);
139
- this.handleDisconnect(false, error ? error.message : undefined);
140
- }
141
-
142
- // Private Methods
143
- //= ===================
144
- /**
145
- * Constructor helper.
146
- * Populates initial state by calling 'wallet_getProviderState' and emits
147
- * necessary events.
148
- */
149
-
150
- /**
151
- * Internal RPC method. Forwards requests to background via the RPC engine.
152
- * Also remap ids inbound and outbound
153
- */
154
-
155
- /**
156
- * When the provider becomes connected, updates internal state and emits
157
- * required events. Idempotent.
158
- *
159
- * @param chainId - The ID of the newly connected chain.
160
- * emits InPageProvider#connect
161
- */
162
-
163
- /**
164
- * When the provider becomes disconnected, updates internal state and emits
165
- * required events. Idempotent with respect to the isRecoverable parameter.
166
- *
167
- * Error codes per the CloseEvent status codes as required by EIP-1193:
168
- * https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent#Status_codes
169
- *
170
- * @param isRecoverable - Whether the disconnection is recoverable.
171
- * @param errorMessage - A custom error message.
172
- * emits InpageProvider#disconnect
173
- */
174
- }
175
-
176
- export { BaseProvider as default };