@mocanetwork/airkit 1.0.0 → 1.1.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.
@@ -102,6 +102,8 @@ const AirAuthMessageTypes = {
102
102
  LOGIN_REQUEST: "air_auth_login_request",
103
103
  LOGIN_RESPONSE: "air_auth_login_response",
104
104
  LOGIN_WALLET_RESPONSE: "air_auth_login_wallet_response",
105
+ USER_INFO_REQUEST: "air_auth_user_info_request",
106
+ USER_INFO_RESPONSE: "air_auth_user_info_response",
105
107
  PARTNER_USER_INFO_REQUEST: "air_auth_partner_user_info_request",
106
108
  PARTNER_USER_INFO_RESPONSE: "air_auth_partner_user_info_response",
107
109
  REFRESH_TOKEN_REQUEST: "air_auth_refresh_token_request",
@@ -114,8 +116,11 @@ const AirAuthMessageTypes = {
114
116
  SETUP_WALLET_RESPONSE: "air_auth_setup_wallet_response",
115
117
  SIGN_SIWE_MESSAGE_REQUEST: "air_auth_sign_siwe_message_request",
116
118
  SIGN_SIWE_MESSAGE_RESPONSE: "air_auth_sign_siwe_message_response",
119
+ CROSS_PARTNER_TOKEN_REQUEST: "air_auth_cross_partner_token_request",
120
+ CROSS_PARTNER_TOKEN_RESPONSE: "air_auth_cross_partner_token_response",
117
121
  LOGOUT_REQUEST: "air_auth_logout_request",
118
- LOGOUT_RESPONSE: "air_auth_logout_response"
122
+ LOGOUT_RESPONSE: "air_auth_logout_response",
123
+ RESET_WALLET_COMMUNICATION: "air_auth_reset_wallet_communication"
119
124
  };
120
125
 
121
126
  const AirMessageTypes = {
@@ -138,9 +143,156 @@ const AirMessageTypes = {
138
143
  IS_SMART_ACCOUNT_DEPLOYED_REQUEST: "air_is_smart_account_deployed_request",
139
144
  IS_SMART_ACCOUNT_DEPLOYED_RESPONSE: "air_is_smart_account_deployed_response",
140
145
  LOGOUT_REQUEST: "air_logout_request",
141
- LOGOUT_RESPONSE: "air_logout_response"
146
+ LOGOUT_RESPONSE: "air_logout_response",
147
+ SETUP_MFA_REQUEST: "air_setup_mfa_request"
142
148
  };
143
149
 
150
+ class BaseError extends Error {
151
+ constructor(name, message, options = {}) {
152
+ const {
153
+ cause,
154
+ context
155
+ } = options;
156
+ super(message || name);
157
+ this.name = name;
158
+ this.stack = cause?.stack;
159
+ this.cause = cause;
160
+ this.context = context;
161
+ }
162
+ toJSON() {
163
+ return {
164
+ name: this.name,
165
+ message: this.message,
166
+ context: this.context,
167
+ cause: this.cause
168
+ };
169
+ }
170
+ }
171
+
172
+ class AirServiceError extends BaseError {
173
+ static from(error) {
174
+ if (error instanceof AirServiceError) {
175
+ return error;
176
+ }
177
+ else if (error instanceof Object && "message" in error) {
178
+ if (error.message === "User cancelled login") {
179
+ return new AirServiceError("USER_CANCELLED", error.message);
180
+ }
181
+ return new AirServiceError("UNKNOWN_ERROR", error.message.toString());
182
+ }
183
+ return new AirServiceError("UNKNOWN_ERROR");
184
+ }
185
+ }
186
+ class ProviderRpcError extends Error {
187
+ constructor(message) {
188
+ super(message);
189
+ }
190
+ }
191
+ class UserRejectedRequestError extends ProviderRpcError {
192
+ constructor() {
193
+ super(...arguments);
194
+ this.code = 4001;
195
+ this.name = "UserRejectedRequestError";
196
+ }
197
+ }
198
+ class UnauthorizedProviderError extends ProviderRpcError {
199
+ constructor() {
200
+ super(...arguments);
201
+ this.code = 4100;
202
+ this.name = "UnauthorizedProviderError";
203
+ }
204
+ }
205
+ class UnsupportedProviderMethodError extends ProviderRpcError {
206
+ constructor() {
207
+ super(...arguments);
208
+ this.code = 4200;
209
+ this.name = "UnsupportedProviderMethodError";
210
+ }
211
+ }
212
+ class ProviderDisconnectedError extends ProviderRpcError {
213
+ constructor() {
214
+ super(...arguments);
215
+ this.code = 4900;
216
+ this.name = "ProviderDisconnectedError";
217
+ }
218
+ }
219
+ class ChainDisconnectedError extends ProviderRpcError {
220
+ constructor() {
221
+ super(...arguments);
222
+ this.code = 4901;
223
+ this.name = "ChainDisconnectedError";
224
+ }
225
+ }
226
+ class SwitchChainError extends ProviderRpcError {
227
+ constructor() {
228
+ super(...arguments);
229
+ this.code = 4902;
230
+ this.name = "SwitchChainError";
231
+ }
232
+ }
233
+ class InvalidRequestRpcError extends ProviderRpcError {
234
+ constructor() {
235
+ super(...arguments);
236
+ this.code = -32600;
237
+ this.name = "InvalidRequestRpcError";
238
+ }
239
+ }
240
+ class MethodNotFoundRpcError extends ProviderRpcError {
241
+ constructor() {
242
+ super(...arguments);
243
+ this.code = -32601;
244
+ this.name = "MethodNotFoundRpcError";
245
+ }
246
+ }
247
+ class InvalidParamsRpcError extends ProviderRpcError {
248
+ constructor() {
249
+ super(...arguments);
250
+ this.code = -32602;
251
+ this.name = "InvalidParamsRpcError";
252
+ }
253
+ }
254
+ class InternalRpcError extends ProviderRpcError {
255
+ constructor() {
256
+ super(...arguments);
257
+ this.code = -32603;
258
+ this.name = "InternalRpcError";
259
+ }
260
+ }
261
+ function ensureProviderRpcError(value) {
262
+ if (value instanceof ProviderRpcError) {
263
+ return value;
264
+ }
265
+ if (typeof value === "object" &&
266
+ value !== null &&
267
+ "errorCode" in value &&
268
+ "errorMessage" in value) {
269
+ if (typeof value.errorCode === "number" && typeof value.errorMessage === "string") {
270
+ switch (value.errorCode) {
271
+ case 4001:
272
+ return new UserRejectedRequestError(value.errorMessage);
273
+ case 4100:
274
+ return new UnauthorizedProviderError(value.errorMessage);
275
+ case 4200:
276
+ return new UnsupportedProviderMethodError(value.errorMessage);
277
+ case 4900:
278
+ return new ProviderDisconnectedError(value.errorMessage);
279
+ case 4901:
280
+ return new ChainDisconnectedError(value.errorMessage);
281
+ case 4902:
282
+ return new SwitchChainError(value.errorMessage);
283
+ }
284
+ }
285
+ }
286
+ let stringified = "[Unable to stringify the thrown value]";
287
+ try {
288
+ stringified = JSON.stringify(value);
289
+ }
290
+ catch {
291
+ // ignoring failed stringify
292
+ }
293
+ return new InternalRpcError(`Invalid value for ProviderRpcError: ${stringified}`);
294
+ }
295
+
144
296
  function isFunction(value) {
145
297
  return typeof value === 'function';
146
298
  }
@@ -868,50 +1020,11 @@ function filter(predicate, thisArg) {
868
1020
  });
869
1021
  }
870
1022
 
871
- class BaseError extends Error {
872
- constructor(name, message, options = {}) {
873
- const {
874
- cause,
875
- context
876
- } = options;
877
- super(message || name);
878
- this.name = name;
879
- this.stack = cause?.stack;
880
- this.cause = cause;
881
- this.context = context;
882
- }
883
- toJSON() {
884
- return {
885
- name: this.name,
886
- message: this.message,
887
- context: this.context,
888
- cause: this.cause
889
- };
890
- }
891
- }
892
-
893
- class AirServiceError extends BaseError {
894
- static from(error) {
895
- if (error instanceof AirServiceError) {
896
- return error;
897
- }
898
- else if (error instanceof Object && "message" in error) {
899
- if (error.message === "User cancelled login") {
900
- return new AirServiceError("USER_CANCELLED", error.message);
901
- }
902
- return new AirServiceError("UNKNOWN_ERROR", error.message.toString());
903
- }
904
- return new AirServiceError("UNKNOWN_ERROR");
905
- }
906
- }
907
- class RealmEmbedError extends AirServiceError {
908
- }
909
-
910
1023
  function getDefaultExportFromCjs (x) {
911
1024
  return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
912
1025
  }
913
1026
 
914
- var loglevel$2 = {exports: {}};
1027
+ var loglevel$1 = {exports: {}};
915
1028
 
916
1029
  /*
917
1030
  * loglevel - https://github.com/pimterry/loglevel
@@ -919,10 +1032,10 @@ var loglevel$2 = {exports: {}};
919
1032
  * Copyright (c) 2013 Tim Perry
920
1033
  * Licensed under the MIT license.
921
1034
  */
922
- var loglevel$1 = loglevel$2.exports;
1035
+ var loglevel = loglevel$1.exports;
923
1036
  var hasRequiredLoglevel;
924
1037
  function requireLoglevel() {
925
- if (hasRequiredLoglevel) return loglevel$2.exports;
1038
+ if (hasRequiredLoglevel) return loglevel$1.exports;
926
1039
  hasRequiredLoglevel = 1;
927
1040
  (function (module) {
928
1041
  (function (root, definition) {
@@ -932,7 +1045,7 @@ function requireLoglevel() {
932
1045
  } else {
933
1046
  root.log = definition();
934
1047
  }
935
- })(loglevel$1, function () {
1048
+ })(loglevel, function () {
936
1049
 
937
1050
  // Slightly dubious tricks to cut down minimized file size
938
1051
  var noop = function () {};
@@ -1231,19 +1344,20 @@ function requireLoglevel() {
1231
1344
  defaultLogger['default'] = defaultLogger;
1232
1345
  return defaultLogger;
1233
1346
  });
1234
- })(loglevel$2);
1235
- return loglevel$2.exports;
1347
+ })(loglevel$1);
1348
+ return loglevel$1.exports;
1236
1349
  }
1237
1350
 
1238
1351
  var loglevelExports = requireLoglevel();
1239
- var loglevel = /*@__PURE__*/getDefaultExportFromCjs(loglevelExports);
1352
+ var log$1 = /*@__PURE__*/getDefaultExportFromCjs(loglevelExports);
1240
1353
 
1241
- var log = loglevel.getLogger("airkit");
1354
+ var log = log$1.getLogger("airkit");
1242
1355
 
1243
1356
  var AirWalletProviderMessageTypes;
1244
1357
  (function (AirWalletProviderMessageTypes) {
1245
1358
  AirWalletProviderMessageTypes["REQUEST"] = "JRPC_REQUEST";
1246
1359
  AirWalletProviderMessageTypes["RESPONSE"] = "JRPC_RESPONSE";
1360
+ AirWalletProviderMessageTypes["EVENT"] = "JRPC_EVENT";
1247
1361
  })(AirWalletProviderMessageTypes || (AirWalletProviderMessageTypes = {}));
1248
1362
 
1249
1363
  const ACCOUNT_MESSAGES = [
@@ -1266,6 +1380,7 @@ const AUTH_MESSAGES = [
1266
1380
  AirAuthMessageTypes.SETUP_WALLET_REQUEST,
1267
1381
  AirAuthMessageTypes.LOGOUT_RESPONSE,
1268
1382
  AirAuthMessageTypes.PARTNER_USER_INFO_RESPONSE,
1383
+ AirAuthMessageTypes.CROSS_PARTNER_TOKEN_RESPONSE,
1269
1384
  AirAuthMessageTypes.IFRAME_VISIBILITY_REQUEST,
1270
1385
  ];
1271
1386
  class AirMessageService {
@@ -1289,6 +1404,9 @@ class AirMessageService {
1289
1404
  get providerMessage$() {
1290
1405
  return this._providerMessage$.asObservable();
1291
1406
  }
1407
+ get providerEvent$() {
1408
+ return this._providerEvent$.asObservable();
1409
+ }
1292
1410
  async openAuthObservables({ authIframeOrigin }) {
1293
1411
  this.closeAuthObservables();
1294
1412
  this.setupAuthObservables();
@@ -1329,13 +1447,16 @@ class AirMessageService {
1329
1447
  if (ev.data.type === AirWalletProviderMessageTypes.RESPONSE) {
1330
1448
  this._providerMessage$.next(ev.data);
1331
1449
  }
1450
+ if (ev.data.type === AirWalletProviderMessageTypes.EVENT) {
1451
+ this._providerEvent$.next(ev.data);
1452
+ }
1332
1453
  };
1333
1454
  window.addEventListener("message", handleWalletMessage);
1334
1455
  this.closeWalletMessageListeners = () => {
1335
1456
  window.removeEventListener("message", handleWalletMessage);
1336
1457
  };
1337
1458
  }
1338
- setupIframeCommunication(authIframe, walletIframe) {
1459
+ setupIframeCommunication(authIframe, walletIframe, skipWalletLogin) {
1339
1460
  const channel = new MessageChannel();
1340
1461
  const authOrigin = new URL(authIframe.src).origin;
1341
1462
  authIframe.contentWindow.postMessage({
@@ -1344,6 +1465,9 @@ class AirMessageService {
1344
1465
  const walletOrigin = new URL(walletIframe.src).origin;
1345
1466
  walletIframe.contentWindow.postMessage({
1346
1467
  type: AirMessageTypes.INIT_AUTH_COMMUNICATION,
1468
+ payload: {
1469
+ skipWalletLogin,
1470
+ },
1347
1471
  }, walletOrigin, [channel.port2]);
1348
1472
  }
1349
1473
  async sendGrantPermissionRequest(walletIframe, policies) {
@@ -1357,7 +1481,7 @@ class AirMessageService {
1357
1481
  }, origin);
1358
1482
  const result = await response;
1359
1483
  if (result.payload.success === false) {
1360
- throw new RealmEmbedError(result.payload.errorName, result.payload.errorMessage);
1484
+ throw new AirServiceError(result.payload.errorName, result.payload.errorMessage);
1361
1485
  }
1362
1486
  return result.payload.sessionData;
1363
1487
  }
@@ -1378,7 +1502,7 @@ class AirMessageService {
1378
1502
  }, origin);
1379
1503
  const result = await response;
1380
1504
  if (result.payload.success === false) {
1381
- throw new RealmEmbedError(result.payload.errorName, result.payload.errorMessage);
1505
+ throw new AirServiceError(result.payload.errorName, result.payload.errorMessage);
1382
1506
  }
1383
1507
  return result.payload.txHash;
1384
1508
  }
@@ -1393,7 +1517,7 @@ class AirMessageService {
1393
1517
  }, origin);
1394
1518
  const result = await response;
1395
1519
  if (result.payload.success === false) {
1396
- throw new RealmEmbedError(result.payload.errorName, result.payload.errorMessage);
1520
+ throw new AirServiceError(result.payload.errorName, result.payload.errorMessage);
1397
1521
  }
1398
1522
  return result.payload.txHash;
1399
1523
  }
@@ -1437,6 +1561,10 @@ class AirMessageService {
1437
1561
  walletIframe.contentWindow.postMessage({ type: AirMessageTypes.LOGOUT_REQUEST }, origin);
1438
1562
  return response;
1439
1563
  }
1564
+ sendResetAuthServiceWalletCommunication(authIframe) {
1565
+ const { origin: authOrigin } = new URL(authIframe.src);
1566
+ authIframe.contentWindow.postMessage({ type: AirAuthMessageTypes.RESET_WALLET_COMMUNICATION }, authOrigin);
1567
+ }
1440
1568
  async sendAuthInitializationRequest(authIframe, payload) {
1441
1569
  const response = firstValueFrom(this._authMessage$.pipe(filter((msg) => msg.type === AirAuthMessageTypes.INITIALIZATION_RESPONSE)));
1442
1570
  const { origin } = new URL(authIframe.src);
@@ -1449,6 +1577,17 @@ class AirMessageService {
1449
1577
  walletIframe.contentWindow.postMessage({ type: AirMessageTypes.INITIALIZATION_REQUEST, payload }, origin);
1450
1578
  return response;
1451
1579
  }
1580
+ async sendCrossPartnerTokenRequest(authIframe, targetPartnerUrl) {
1581
+ const response = firstValueFrom(this.authMessage$.pipe(filter((msg) => msg.type === AirAuthMessageTypes.CROSS_PARTNER_TOKEN_RESPONSE)));
1582
+ const { origin } = new URL(authIframe.src);
1583
+ authIframe.contentWindow.postMessage({
1584
+ type: AirAuthMessageTypes.CROSS_PARTNER_TOKEN_REQUEST,
1585
+ payload: {
1586
+ targetPartnerUrl,
1587
+ },
1588
+ }, origin);
1589
+ return response;
1590
+ }
1452
1591
  async sendGrantPermissionsRequest(walletIframe, payload) {
1453
1592
  const response = firstValueFrom(this.messages$.pipe(filter((msg) => msg.type === AirMessageTypes.GRANT_PERMISSIONS_RESPONSE)));
1454
1593
  const { origin } = new URL(walletIframe.src);
@@ -1489,6 +1628,8 @@ class AirMessageService {
1489
1628
  closeWalletObservables() {
1490
1629
  if (this._providerMessage$ && !this._providerMessage$.closed)
1491
1630
  this._providerMessage$.complete();
1631
+ if (this._providerEvent$ && !this._providerEvent$.closed)
1632
+ this._providerEvent$.complete();
1492
1633
  if (this.closeWalletMessageListeners)
1493
1634
  this.closeWalletMessageListeners();
1494
1635
  }
@@ -1500,38 +1641,11 @@ class AirMessageService {
1500
1641
  }
1501
1642
  setupWalletObservables() {
1502
1643
  this._providerMessage$ = new Subject();
1644
+ this._providerEvent$ = new Subject();
1503
1645
  }
1504
1646
  }
1505
1647
  var AirMessageService$1 = AirMessageService.instance;
1506
1648
 
1507
- class ProviderRpcError extends Error {
1508
- constructor(message, code, data) {
1509
- super(message);
1510
- this.code = code;
1511
- this.data = data;
1512
- }
1513
- }
1514
- new ProviderRpcError("Invalid JSON", -32700);
1515
- const ProviderRpcInvalidRequestError = new ProviderRpcError("Invalid request", -32600);
1516
- const ProviderRpcMethodNotFoundError = new ProviderRpcError("Method not found", -32601);
1517
- const ProviderRpcInvalidParamsError = new ProviderRpcError("Invalid params", -32602);
1518
- new ProviderRpcError("Internal error", -32603);
1519
- new ProviderRpcError("User rejected request", 4001);
1520
- new ProviderRpcError("Unauthorized", 4100);
1521
- new ProviderRpcError("Unsupported method", 4200);
1522
- new ProviderRpcError("Disconnected", 4900);
1523
- new ProviderRpcError("Chain Disconnected", 4901);
1524
- function ensureProviderRpcError(value) {
1525
- if (value instanceof ProviderRpcError) return value;
1526
- let stringified = "[Unable to stringify the thrown value]";
1527
- try {
1528
- stringified = JSON.stringify(value);
1529
- } catch {
1530
- // ignoring failed stringify
1531
- }
1532
- return new ProviderRpcError(`This value was not thrown as type ProviderRpcError: ${stringified}`, -32603);
1533
- }
1534
-
1535
1649
  const BUILD_ENV = {
1536
1650
  PRODUCTION: "production",
1537
1651
  STAGING: "staging",
@@ -1542,66 +1656,113 @@ const AIR_URLS = {
1542
1656
  [BUILD_ENV.DEVELOPMENT]: {
1543
1657
  authUrl: "http://localhost:8100",
1544
1658
  walletUrl: "http://localhost:8200",
1545
- legacyWalletUrl: "https://localhost:4050",
1546
1659
  logLevel: "debug",
1547
1660
  },
1548
1661
  [BUILD_ENV.STAGING]: {
1549
1662
  authUrl: "https://auth.staging.air3.com",
1550
1663
  walletUrl: "https://account.staging.air3.com",
1551
- legacyWalletUrl: "https://account.staging.realmnetwork.io",
1552
1664
  logLevel: "info",
1553
1665
  },
1554
1666
  [BUILD_ENV.PRODUCTION]: {
1555
1667
  authUrl: "https://auth.air3.com",
1556
1668
  walletUrl: "https://account.air3.com",
1557
- legacyWalletUrl: "https://account.realmnetwork.io",
1558
1669
  logLevel: "error",
1559
1670
  },
1560
1671
  };
1561
1672
  const isElement = (element) => element instanceof Element || element instanceof Document;
1562
1673
  const randomId = () => Math.random().toString(36).slice(2);
1563
1674
 
1564
- var _AirWalletProvider_walletIframe;
1675
+ var _AirWalletProvider_instances, _AirWalletProvider_isLoggedIn, _AirWalletProvider_ensureWallet, _AirWalletProvider_getWalletIframeController, _AirWalletProvider_eventListeners, _AirWalletProvider_emit;
1565
1676
  class AirWalletProvider {
1566
- constructor(walletIframe) {
1567
- _AirWalletProvider_walletIframe.set(this, undefined);
1568
- __classPrivateFieldSet(this, _AirWalletProvider_walletIframe, walletIframe, "f");
1677
+ constructor({ isLoggedIn, ensureWallet, getWalletIframeController, }) {
1678
+ _AirWalletProvider_instances.add(this);
1679
+ _AirWalletProvider_isLoggedIn.set(this, undefined);
1680
+ _AirWalletProvider_ensureWallet.set(this, undefined);
1681
+ _AirWalletProvider_getWalletIframeController.set(this, undefined);
1682
+ _AirWalletProvider_eventListeners.set(this, undefined);
1683
+ this.listenProviderEventMessage = () => {
1684
+ AirMessageService$1.providerEvent$.subscribe((message) => {
1685
+ __classPrivateFieldGet(this, _AirWalletProvider_instances, "m", _AirWalletProvider_emit).call(this, message.payload.event, ...[message.payload.data]);
1686
+ });
1687
+ };
1688
+ __classPrivateFieldSet(this, _AirWalletProvider_isLoggedIn, isLoggedIn, "f");
1689
+ __classPrivateFieldSet(this, _AirWalletProvider_ensureWallet, ensureWallet, "f");
1690
+ __classPrivateFieldSet(this, _AirWalletProvider_getWalletIframeController, getWalletIframeController, "f");
1691
+ __classPrivateFieldSet(this, _AirWalletProvider_eventListeners, {
1692
+ connect: [],
1693
+ disconnect: [],
1694
+ accountsChanged: [],
1695
+ chainChanged: [],
1696
+ message: [],
1697
+ }, "f");
1569
1698
  }
1570
1699
  async request(request) {
1571
1700
  // Check if the request is valid
1572
1701
  if (!request || typeof request !== "object" || Array.isArray(request)) {
1573
- throw ProviderRpcInvalidRequestError;
1702
+ throw new InvalidRequestRpcError("Invalid request");
1574
1703
  }
1575
1704
  const { method, params } = request;
1576
1705
  // Check if the method is valid
1577
1706
  if (typeof method !== "string" || method.length === 0) {
1578
- throw ProviderRpcMethodNotFoundError;
1707
+ throw new MethodNotFoundRpcError("Invalid method");
1579
1708
  }
1580
1709
  // Check if the params are valid
1581
1710
  if (params !== undefined &&
1582
1711
  !Array.isArray(params) &&
1583
1712
  (typeof params !== "object" || params === null)) {
1584
- throw ProviderRpcInvalidParamsError;
1713
+ throw new InvalidParamsRpcError("Invalid params");
1714
+ }
1715
+ // Check if the user is logged in
1716
+ if (!__classPrivateFieldGet(this, _AirWalletProvider_isLoggedIn, "f").call(this)) {
1717
+ throw new UnauthorizedProviderError("User is not logged in");
1718
+ }
1719
+ try {
1720
+ await __classPrivateFieldGet(this, _AirWalletProvider_ensureWallet, "f").call(this);
1721
+ }
1722
+ catch (error) {
1723
+ throw ensureProviderRpcError(error);
1585
1724
  }
1586
1725
  const requestId = randomId();
1587
- const response = await AirMessageService$1.sendWalletProviderRequest(__classPrivateFieldGet(this, _AirWalletProvider_walletIframe, "f"), {
1726
+ const response = await AirMessageService$1.sendWalletProviderRequest(__classPrivateFieldGet(this, _AirWalletProvider_getWalletIframeController, "f").call(this).iframeElement, {
1588
1727
  requestId,
1589
1728
  ...request,
1590
1729
  });
1591
1730
  if (!response.success) {
1592
- const error = ensureProviderRpcError(response.payload);
1593
- throw error;
1731
+ throw ensureProviderRpcError(response.payload);
1594
1732
  }
1595
1733
  return response.payload.response;
1596
1734
  }
1597
1735
  on(eventName, listener) {
1598
- console.log("on", eventName, listener);
1736
+ __classPrivateFieldGet(this, _AirWalletProvider_eventListeners, "f")[eventName] = __classPrivateFieldGet(this, _AirWalletProvider_eventListeners, "f")[eventName] || [];
1737
+ __classPrivateFieldGet(this, _AirWalletProvider_eventListeners, "f")[eventName].push(listener);
1599
1738
  }
1600
1739
  removeListener(eventName, listener) {
1601
- console.log("removeListener", eventName, listener);
1740
+ __classPrivateFieldGet(this, _AirWalletProvider_eventListeners, "f")[eventName] = __classPrivateFieldGet(this, _AirWalletProvider_eventListeners, "f")[eventName] || [];
1741
+ const index = __classPrivateFieldGet(this, _AirWalletProvider_eventListeners, "f")[eventName].indexOf(listener);
1742
+ if (index >= 0) {
1743
+ __classPrivateFieldGet(this, _AirWalletProvider_eventListeners, "f")[eventName].splice(index, 1);
1744
+ }
1745
+ }
1746
+ removeAllListeners() {
1747
+ __classPrivateFieldSet(this, _AirWalletProvider_eventListeners, {
1748
+ connect: [],
1749
+ disconnect: [],
1750
+ accountsChanged: [],
1751
+ chainChanged: [],
1752
+ message: [],
1753
+ }, "f");
1602
1754
  }
1603
1755
  }
1604
- _AirWalletProvider_walletIframe = new WeakMap();
1756
+ _AirWalletProvider_isLoggedIn = new WeakMap(), _AirWalletProvider_ensureWallet = new WeakMap(), _AirWalletProvider_getWalletIframeController = new WeakMap(), _AirWalletProvider_eventListeners = new WeakMap(), _AirWalletProvider_instances = new WeakSet(), _AirWalletProvider_emit = function _AirWalletProvider_emit(eventName, ...args) {
1757
+ (__classPrivateFieldGet(this, _AirWalletProvider_eventListeners, "f")[eventName] || []).forEach((listener) => {
1758
+ try {
1759
+ return listener(...args);
1760
+ }
1761
+ catch (error) {
1762
+ log$1.error(error);
1763
+ }
1764
+ });
1765
+ };
1605
1766
 
1606
1767
  class IframeController {
1607
1768
  constructor(iframeUrl, iframeId, state) {
@@ -1666,9 +1827,8 @@ IframeController.defaultState = {
1666
1827
  isVisible: false,
1667
1828
  };
1668
1829
 
1669
- var _AirService_instances, _AirService_loginResult, _AirService_buildEnv, _AirService_enableLogging, _AirService_partnerId, _AirService_authIframeController, _AirService_isAuthInitialized, _AirService_airAuthListener, _AirService_walletIframeController, _AirService_walletInitialization, _AirService_isWalletInitialized, _AirService_airWalletProvider, _AirService_ensureWallet, _AirService_initializeWallet, _AirService_triggerEventListeners, _AirService_triggerAirAuthInitialized, _AirService_triggerAirAuthLoggedIn, _AirService_triggerAirAuthLoggedOut, _AirService_triggerWalletInitialized, _AirService_createLoginResult, _AirService_cleanUpAuth, _AirService_cleanUpWallet;
1830
+ var _AirService_instances, _AirService_loginResult, _AirService_buildEnv, _AirService_enableLogging, _AirService_partnerId, _AirService_authIframeController, _AirService_isAuthInitialized, _AirService_airAuthListener, _AirService_walletIframeController, _AirService_walletInitialization, _AirService_isWalletInitialized, _AirService_walletLoggedInResult, _AirService_airWalletProvider, _AirService_ensureWallet, _AirService_initializeWallet, _AirService_triggerEventListeners, _AirService_triggerAirAuthInitialized, _AirService_triggerAirAuthLoggedIn, _AirService_triggerAirAuthLoggedOut, _AirService_triggerWalletInitialized, _AirService_createLoginResult, _AirService_createWalletInitializedResult, _AirService_cleanUpAuth, _AirService_cleanUpWallet, _AirService_cleanUpAuthWalletCommunication;
1670
1831
  class AirService {
1671
- // #walletRehydrationState: AirRehydrationResult;
1672
1832
  constructor({ partnerId }) {
1673
1833
  _AirService_instances.add(this);
1674
1834
  _AirService_loginResult.set(this, undefined);
@@ -1682,8 +1842,14 @@ class AirService {
1682
1842
  _AirService_walletIframeController.set(this, undefined);
1683
1843
  _AirService_walletInitialization.set(this, undefined);
1684
1844
  _AirService_isWalletInitialized.set(this, false);
1845
+ _AirService_walletLoggedInResult.set(this, undefined);
1685
1846
  _AirService_airWalletProvider.set(this, undefined);
1686
1847
  __classPrivateFieldSet(this, _AirService_partnerId, partnerId, "f");
1848
+ __classPrivateFieldSet(this, _AirService_airWalletProvider, new AirWalletProvider({
1849
+ isLoggedIn: () => this.isLoggedIn,
1850
+ ensureWallet: __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_ensureWallet).bind(this),
1851
+ getWalletIframeController: () => __classPrivateFieldGet(this, _AirService_walletIframeController, "f"),
1852
+ }), "f");
1687
1853
  // this.#modalZIndex = modalZIndex ?? 99999;
1688
1854
  }
1689
1855
  get buildEnv() {
@@ -1696,7 +1862,15 @@ class AirService {
1696
1862
  return !!__classPrivateFieldGet(this, _AirService_loginResult, "f");
1697
1863
  }
1698
1864
  get isWalletInitialized() {
1699
- return __classPrivateFieldGet(this, _AirService_isWalletInitialized, "f");
1865
+ return !!__classPrivateFieldGet(this, _AirService_walletLoggedInResult, "f");
1866
+ }
1867
+ get provider() {
1868
+ const provider = __classPrivateFieldGet(this, _AirService_airWalletProvider, "f");
1869
+ return {
1870
+ request: provider.request.bind(provider),
1871
+ on: provider.on.bind(provider),
1872
+ removeListener: provider.removeListener.bind(provider),
1873
+ };
1700
1874
  }
1701
1875
  async init({ buildEnv = BUILD_ENV.PRODUCTION, enableLogging = false, skipRehydration = false, }) {
1702
1876
  if (!__classPrivateFieldGet(this, _AirService_partnerId, "f"))
@@ -1724,7 +1898,7 @@ class AirService {
1724
1898
  }
1725
1899
  case AirAuthMessageTypes.SETUP_WALLET_REQUEST: {
1726
1900
  try {
1727
- await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_ensureWallet).call(this);
1901
+ await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_ensureWallet).call(this, { skipWalletLogin: true });
1728
1902
  __classPrivateFieldGet(this, _AirService_authIframeController, "f").postMessage({
1729
1903
  type: AirAuthMessageTypes.SETUP_WALLET_RESPONSE,
1730
1904
  payload: {
@@ -1759,6 +1933,7 @@ class AirService {
1759
1933
  const { payload } = await AirMessageService$1.sendAuthInitializationRequest(__classPrivateFieldGet(this, _AirService_authIframeController, "f").iframeElement, {
1760
1934
  partnerId: __classPrivateFieldGet(this, _AirService_partnerId, "f"),
1761
1935
  skipRehydration,
1936
+ partnerDAppUrl: window.location.href,
1762
1937
  });
1763
1938
  if (payload.success === true) {
1764
1939
  resolve(payload);
@@ -1786,11 +1961,6 @@ class AirService {
1786
1961
  }
1787
1962
  return null;
1788
1963
  }
1789
- async cleanUp() {
1790
- await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_cleanUpWallet).call(this);
1791
- await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_cleanUpAuth).call(this);
1792
- this.clearEventListeners();
1793
- }
1794
1964
  async login(options) {
1795
1965
  if (!__classPrivateFieldGet(this, _AirService_isAuthInitialized, "f"))
1796
1966
  throw new Error("Service is not initialized");
@@ -1895,25 +2065,13 @@ class AirService {
1895
2065
  throw AirServiceError.from(error);
1896
2066
  }
1897
2067
  }
1898
- async logout() {
1899
- if (!__classPrivateFieldGet(this, _AirService_isAuthInitialized, "f"))
1900
- throw new Error("Service is not initialized");
1901
- if (!this.isLoggedIn)
1902
- throw new Error("No active session to logout");
1903
- // Clear up wallet
1904
- await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_cleanUpWallet).call(this);
1905
- await AirMessageService$1.logoutAuth(__classPrivateFieldGet(this, _AirService_authIframeController, "f").iframeElement);
1906
- __classPrivateFieldSet(this, _AirService_loginResult, undefined, "f");
1907
- __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_triggerAirAuthLoggedOut).call(this);
1908
- }
1909
- async getProvider() {
1910
- if (!this.isLoggedIn)
1911
- return null;
1912
- await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_ensureWallet).call(this);
1913
- return __classPrivateFieldGet(this, _AirService_airWalletProvider, "f");
2068
+ getProvider() {
2069
+ return this.provider;
1914
2070
  }
1915
2071
  async preloadWallet() {
1916
- return __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_ensureWallet).call(this);
2072
+ if (__classPrivateFieldGet(this, _AirService_walletLoggedInResult, "f"))
2073
+ return __classPrivateFieldGet(this, _AirService_walletLoggedInResult, "f");
2074
+ return await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_ensureWallet).call(this);
1917
2075
  }
1918
2076
  async claimAirId(options) {
1919
2077
  await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_ensureWallet).call(this);
@@ -1938,9 +2096,39 @@ class AirService {
1938
2096
  id: info.payload.user.id,
1939
2097
  abstractAccountAddress: info.payload.user.abstractAccountAddress,
1940
2098
  email: info.payload.user.email,
2099
+ isMFASetup: info.payload.user.isMFASetup,
1941
2100
  },
1942
2101
  };
1943
2102
  }
2103
+ async goToPartner(partnerUrl) {
2104
+ if (!__classPrivateFieldGet(this, _AirService_isAuthInitialized, "f"))
2105
+ throw new Error("Service is not initialized");
2106
+ if (!this.isLoggedIn)
2107
+ throw new Error("No active session to generate token");
2108
+ const result = await AirMessageService$1.sendCrossPartnerTokenRequest(__classPrivateFieldGet(this, _AirService_authIframeController, "f").iframeElement, partnerUrl);
2109
+ if (result.payload.success === false) {
2110
+ throw new AirServiceError(result.payload.errorName, result.payload.errorMessage);
2111
+ }
2112
+ return {
2113
+ urlWithToken: result.payload.urlWithToken,
2114
+ };
2115
+ }
2116
+ async logout() {
2117
+ if (!__classPrivateFieldGet(this, _AirService_isAuthInitialized, "f"))
2118
+ throw new Error("Service is not initialized");
2119
+ if (!this.isLoggedIn)
2120
+ throw new Error("No active session to logout");
2121
+ // Clear up wallet
2122
+ await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_cleanUpWallet).call(this);
2123
+ await AirMessageService$1.logoutAuth(__classPrivateFieldGet(this, _AirService_authIframeController, "f").iframeElement);
2124
+ __classPrivateFieldSet(this, _AirService_loginResult, undefined, "f");
2125
+ __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_triggerAirAuthLoggedOut).call(this);
2126
+ }
2127
+ async cleanUp() {
2128
+ await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_cleanUpWallet).call(this);
2129
+ await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_cleanUpAuth).call(this);
2130
+ this.clearEventListeners();
2131
+ }
1944
2132
  on(listener) {
1945
2133
  if (__classPrivateFieldGet(this, _AirService_airAuthListener, "f").indexOf(listener) < 0)
1946
2134
  __classPrivateFieldGet(this, _AirService_airAuthListener, "f").push(listener);
@@ -1961,24 +2149,39 @@ class AirService {
1961
2149
  return null;
1962
2150
  }
1963
2151
  }
1964
- _AirService_loginResult = new WeakMap(), _AirService_buildEnv = new WeakMap(), _AirService_enableLogging = new WeakMap(), _AirService_partnerId = new WeakMap(), _AirService_authIframeController = new WeakMap(), _AirService_isAuthInitialized = new WeakMap(), _AirService_airAuthListener = new WeakMap(), _AirService_walletIframeController = new WeakMap(), _AirService_walletInitialization = new WeakMap(), _AirService_isWalletInitialized = new WeakMap(), _AirService_airWalletProvider = new WeakMap(), _AirService_instances = new WeakSet(), _AirService_ensureWallet = async function _AirService_ensureWallet() {
2152
+ _AirService_loginResult = new WeakMap(), _AirService_buildEnv = new WeakMap(), _AirService_enableLogging = new WeakMap(), _AirService_partnerId = new WeakMap(), _AirService_authIframeController = new WeakMap(), _AirService_isAuthInitialized = new WeakMap(), _AirService_airAuthListener = new WeakMap(), _AirService_walletIframeController = new WeakMap(), _AirService_walletInitialization = new WeakMap(), _AirService_isWalletInitialized = new WeakMap(), _AirService_walletLoggedInResult = new WeakMap(), _AirService_airWalletProvider = new WeakMap(), _AirService_instances = new WeakSet(), _AirService_ensureWallet =
2153
+ // Result of this.#walletInitialization:
2154
+ // - If skipWalletLogin is true, it returns the result of empty abstractAccountAddress
2155
+ // - If skipWalletLogin is false, it returns the result of abstractAccountAddress from wallet initialization
2156
+ // - If #ensureWallet is called again, it returns the result of abstractAccountAddress from the second
2157
+ // wallet initialization if this first wallet initialization doesn't have abstractAccountAddress
2158
+ async function _AirService_ensureWallet(option) {
1965
2159
  if (!this.isInitialized)
1966
2160
  throw new Error("Service not initialized");
1967
- if (!__classPrivateFieldGet(this, _AirService_walletInitialization, "f")) {
1968
- try {
1969
- __classPrivateFieldSet(this, _AirService_walletInitialization, __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_initializeWallet).call(this), "f");
1970
- return await __classPrivateFieldGet(this, _AirService_walletInitialization, "f");
2161
+ if (!this.isLoggedIn && !option?.skipWalletLogin)
2162
+ throw new Error("User not logged in");
2163
+ if (!__classPrivateFieldGet(this, _AirService_walletInitialization, "f"))
2164
+ __classPrivateFieldSet(this, _AirService_walletInitialization, __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_initializeWallet).call(this, option), "f");
2165
+ try {
2166
+ const result = await __classPrivateFieldGet(this, _AirService_walletInitialization, "f");
2167
+ // Note: Checking for abstractAccountAddress from the result and this.#walletLoggedInResult to avoid race condition
2168
+ if (option?.skipWalletLogin ||
2169
+ result?.abstractAccountAddress ||
2170
+ __classPrivateFieldGet(this, _AirService_walletLoggedInResult, "f")?.abstractAccountAddress) {
2171
+ return result || __classPrivateFieldGet(this, _AirService_walletLoggedInResult, "f");
1971
2172
  }
1972
- catch (error) {
1973
- __classPrivateFieldSet(this, _AirService_walletInitialization, null, "f");
1974
- log.error("Error initializing wallet", error);
1975
- throw error;
2173
+ const walletInitResult = await AirMessageService$1.onWalletInitialized();
2174
+ if (walletInitResult.payload.success !== true) {
2175
+ throw new AirServiceError(walletInitResult.payload.errorName, walletInitResult.payload.errorMessage);
1976
2176
  }
2177
+ return __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_createWalletInitializedResult).call(this, walletInitResult.payload);
1977
2178
  }
1978
- else {
1979
- return __classPrivateFieldGet(this, _AirService_walletInitialization, "f");
2179
+ catch (error) {
2180
+ __classPrivateFieldSet(this, _AirService_walletInitialization, null, "f");
2181
+ log.error("Error initializing wallet", error);
2182
+ throw error;
1980
2183
  }
1981
- }, _AirService_initializeWallet = async function _AirService_initializeWallet() {
2184
+ }, _AirService_initializeWallet = async function _AirService_initializeWallet(option) {
1982
2185
  if (__classPrivateFieldGet(this, _AirService_isWalletInitialized, "f"))
1983
2186
  throw new AirServiceError("ALREADY_INITIALISED", "Already initialized");
1984
2187
  const { walletUrl } = AIR_URLS[__classPrivateFieldGet(this, _AirService_buildEnv, "f")];
@@ -1996,6 +2199,23 @@ _AirService_loginResult = new WeakMap(), _AirService_buildEnv = new WeakMap(), _
1996
2199
  walletIframeController.updateIframeState();
1997
2200
  break;
1998
2201
  }
2202
+ case AirMessageTypes.WALLET_INITIALIZED: {
2203
+ if (msg.payload.success === true && msg.payload.addresses?.aa) {
2204
+ __classPrivateFieldSet(this, _AirService_walletLoggedInResult, __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_createWalletInitializedResult).call(this, msg.payload), "f");
2205
+ __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_triggerWalletInitialized).call(this, __classPrivateFieldGet(this, _AirService_walletLoggedInResult, "f"));
2206
+ }
2207
+ if (msg.payload.success === false) {
2208
+ if (!__classPrivateFieldGet(this, _AirService_isWalletInitialized, "f")) {
2209
+ // MFA fail case, also reset wallet port
2210
+ __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_cleanUpAuthWalletCommunication).call(this);
2211
+ }
2212
+ else {
2213
+ // Logout wallet and destroy the wallet iframe
2214
+ await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_cleanUpWallet).call(this);
2215
+ }
2216
+ }
2217
+ break;
2218
+ }
1999
2219
  }
2000
2220
  });
2001
2221
  await new Promise((resolve, reject) => {
@@ -2018,18 +2238,15 @@ _AirService_loginResult = new WeakMap(), _AirService_buildEnv = new WeakMap(), _
2018
2238
  };
2019
2239
  window.addEventListener("message", handleAuthMessage);
2020
2240
  });
2241
+ __classPrivateFieldGet(this, _AirService_airWalletProvider, "f").listenProviderEventMessage();
2021
2242
  const walletInitPromise = AirMessageService$1.onWalletInitialized();
2022
- AirMessageService$1.setupIframeCommunication(__classPrivateFieldGet(this, _AirService_authIframeController, "f").iframeElement, __classPrivateFieldGet(this, _AirService_walletIframeController, "f").iframeElement);
2243
+ AirMessageService$1.setupIframeCommunication(__classPrivateFieldGet(this, _AirService_authIframeController, "f").iframeElement, __classPrivateFieldGet(this, _AirService_walletIframeController, "f").iframeElement, option?.skipWalletLogin ?? false);
2023
2244
  const walletInitResult = await walletInitPromise;
2024
2245
  if (walletInitResult.payload.success !== true) {
2025
2246
  throw new AirServiceError(walletInitResult.payload.errorName, walletInitResult.payload.errorMessage);
2026
2247
  }
2027
- __classPrivateFieldSet(this, _AirService_airWalletProvider, new AirWalletProvider(__classPrivateFieldGet(this, _AirService_walletIframeController, "f").iframeElement), "f");
2028
- const result = {
2029
- abstractAccountAddress: walletInitResult.payload.addresses.aa,
2030
- };
2031
- __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_triggerWalletInitialized).call(this, result);
2032
- return result;
2248
+ __classPrivateFieldSet(this, _AirService_isWalletInitialized, true, "f");
2249
+ return __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_createWalletInitializedResult).call(this, walletInitResult.payload);
2033
2250
  }
2034
2251
  catch (error) {
2035
2252
  log.error("Error initializing wallet", error);
@@ -2060,6 +2277,12 @@ _AirService_loginResult = new WeakMap(), _AirService_buildEnv = new WeakMap(), _
2060
2277
  id: payload.id,
2061
2278
  abstractAccountAddress: payload.abstractAccountAddress,
2062
2279
  token: payload.partnerAccessToken,
2280
+ isMFASetup: payload.isMFASetup,
2281
+ };
2282
+ }, _AirService_createWalletInitializedResult = function _AirService_createWalletInitializedResult(payload) {
2283
+ return {
2284
+ abstractAccountAddress: payload.addresses?.aa ?? null,
2285
+ isMFASetup: payload.isMFASetup,
2063
2286
  };
2064
2287
  }, _AirService_cleanUpAuth = async function _AirService_cleanUpAuth() {
2065
2288
  // Logout auth session
@@ -2085,8 +2308,16 @@ _AirService_loginResult = new WeakMap(), _AirService_buildEnv = new WeakMap(), _
2085
2308
  }
2086
2309
  // Close the message service
2087
2310
  AirMessageService$1.closeAirObservables();
2088
- __classPrivateFieldSet(this, _AirService_walletInitialization, null, "f");
2311
+ __classPrivateFieldSet(this, _AirService_walletLoggedInResult, undefined, "f");
2312
+ __classPrivateFieldSet(this, _AirService_walletInitialization, undefined, "f");
2089
2313
  __classPrivateFieldSet(this, _AirService_isWalletInitialized, false, "f");
2314
+ }, _AirService_cleanUpAuthWalletCommunication = function _AirService_cleanUpAuthWalletCommunication() {
2315
+ if (!__classPrivateFieldGet(this, _AirService_isAuthInitialized, "f"))
2316
+ return;
2317
+ const authIframeElement = __classPrivateFieldGet(this, _AirService_authIframeController, "f")?.iframeElement;
2318
+ if (isElement(authIframeElement) && window.document.body.contains(authIframeElement)) {
2319
+ AirMessageService$1.sendResetAuthServiceWalletCommunication(authIframeElement);
2320
+ }
2090
2321
  };
2091
2322
 
2092
- export { AirService, AirServiceError, AirWalletProvider, BUILD_ENV, RealmEmbedError };
2323
+ export { AirService, AirServiceError, BUILD_ENV, ChainDisconnectedError, InternalRpcError, InvalidParamsRpcError, InvalidRequestRpcError, MethodNotFoundRpcError, ProviderDisconnectedError, SwitchChainError, UnauthorizedProviderError, UnsupportedProviderMethodError, UserRejectedRequestError, ensureProviderRpcError };