@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.
@@ -108,6 +108,8 @@
108
108
  LOGIN_REQUEST: "air_auth_login_request",
109
109
  LOGIN_RESPONSE: "air_auth_login_response",
110
110
  LOGIN_WALLET_RESPONSE: "air_auth_login_wallet_response",
111
+ USER_INFO_REQUEST: "air_auth_user_info_request",
112
+ USER_INFO_RESPONSE: "air_auth_user_info_response",
111
113
  PARTNER_USER_INFO_REQUEST: "air_auth_partner_user_info_request",
112
114
  PARTNER_USER_INFO_RESPONSE: "air_auth_partner_user_info_response",
113
115
  REFRESH_TOKEN_REQUEST: "air_auth_refresh_token_request",
@@ -120,8 +122,11 @@
120
122
  SETUP_WALLET_RESPONSE: "air_auth_setup_wallet_response",
121
123
  SIGN_SIWE_MESSAGE_REQUEST: "air_auth_sign_siwe_message_request",
122
124
  SIGN_SIWE_MESSAGE_RESPONSE: "air_auth_sign_siwe_message_response",
125
+ CROSS_PARTNER_TOKEN_REQUEST: "air_auth_cross_partner_token_request",
126
+ CROSS_PARTNER_TOKEN_RESPONSE: "air_auth_cross_partner_token_response",
123
127
  LOGOUT_REQUEST: "air_auth_logout_request",
124
- LOGOUT_RESPONSE: "air_auth_logout_response"
128
+ LOGOUT_RESPONSE: "air_auth_logout_response",
129
+ RESET_WALLET_COMMUNICATION: "air_auth_reset_wallet_communication"
125
130
  };
126
131
 
127
132
  const AirMessageTypes = {
@@ -144,9 +149,156 @@
144
149
  IS_SMART_ACCOUNT_DEPLOYED_REQUEST: "air_is_smart_account_deployed_request",
145
150
  IS_SMART_ACCOUNT_DEPLOYED_RESPONSE: "air_is_smart_account_deployed_response",
146
151
  LOGOUT_REQUEST: "air_logout_request",
147
- LOGOUT_RESPONSE: "air_logout_response"
152
+ LOGOUT_RESPONSE: "air_logout_response",
153
+ SETUP_MFA_REQUEST: "air_setup_mfa_request"
148
154
  };
149
155
 
156
+ class BaseError extends Error {
157
+ constructor(name, message, options = {}) {
158
+ const {
159
+ cause,
160
+ context
161
+ } = options;
162
+ super(message || name);
163
+ this.name = name;
164
+ this.stack = cause?.stack;
165
+ this.cause = cause;
166
+ this.context = context;
167
+ }
168
+ toJSON() {
169
+ return {
170
+ name: this.name,
171
+ message: this.message,
172
+ context: this.context,
173
+ cause: this.cause
174
+ };
175
+ }
176
+ }
177
+
178
+ class AirServiceError extends BaseError {
179
+ static from(error) {
180
+ if (error instanceof AirServiceError) {
181
+ return error;
182
+ }
183
+ else if (error instanceof Object && "message" in error) {
184
+ if (error.message === "User cancelled login") {
185
+ return new AirServiceError("USER_CANCELLED", error.message);
186
+ }
187
+ return new AirServiceError("UNKNOWN_ERROR", error.message.toString());
188
+ }
189
+ return new AirServiceError("UNKNOWN_ERROR");
190
+ }
191
+ }
192
+ class ProviderRpcError extends Error {
193
+ constructor(message) {
194
+ super(message);
195
+ }
196
+ }
197
+ class UserRejectedRequestError extends ProviderRpcError {
198
+ constructor() {
199
+ super(...arguments);
200
+ this.code = 4001;
201
+ this.name = "UserRejectedRequestError";
202
+ }
203
+ }
204
+ class UnauthorizedProviderError extends ProviderRpcError {
205
+ constructor() {
206
+ super(...arguments);
207
+ this.code = 4100;
208
+ this.name = "UnauthorizedProviderError";
209
+ }
210
+ }
211
+ class UnsupportedProviderMethodError extends ProviderRpcError {
212
+ constructor() {
213
+ super(...arguments);
214
+ this.code = 4200;
215
+ this.name = "UnsupportedProviderMethodError";
216
+ }
217
+ }
218
+ class ProviderDisconnectedError extends ProviderRpcError {
219
+ constructor() {
220
+ super(...arguments);
221
+ this.code = 4900;
222
+ this.name = "ProviderDisconnectedError";
223
+ }
224
+ }
225
+ class ChainDisconnectedError extends ProviderRpcError {
226
+ constructor() {
227
+ super(...arguments);
228
+ this.code = 4901;
229
+ this.name = "ChainDisconnectedError";
230
+ }
231
+ }
232
+ class SwitchChainError extends ProviderRpcError {
233
+ constructor() {
234
+ super(...arguments);
235
+ this.code = 4902;
236
+ this.name = "SwitchChainError";
237
+ }
238
+ }
239
+ class InvalidRequestRpcError extends ProviderRpcError {
240
+ constructor() {
241
+ super(...arguments);
242
+ this.code = -32600;
243
+ this.name = "InvalidRequestRpcError";
244
+ }
245
+ }
246
+ class MethodNotFoundRpcError extends ProviderRpcError {
247
+ constructor() {
248
+ super(...arguments);
249
+ this.code = -32601;
250
+ this.name = "MethodNotFoundRpcError";
251
+ }
252
+ }
253
+ class InvalidParamsRpcError extends ProviderRpcError {
254
+ constructor() {
255
+ super(...arguments);
256
+ this.code = -32602;
257
+ this.name = "InvalidParamsRpcError";
258
+ }
259
+ }
260
+ class InternalRpcError extends ProviderRpcError {
261
+ constructor() {
262
+ super(...arguments);
263
+ this.code = -32603;
264
+ this.name = "InternalRpcError";
265
+ }
266
+ }
267
+ function ensureProviderRpcError(value) {
268
+ if (value instanceof ProviderRpcError) {
269
+ return value;
270
+ }
271
+ if (typeof value === "object" &&
272
+ value !== null &&
273
+ "errorCode" in value &&
274
+ "errorMessage" in value) {
275
+ if (typeof value.errorCode === "number" && typeof value.errorMessage === "string") {
276
+ switch (value.errorCode) {
277
+ case 4001:
278
+ return new UserRejectedRequestError(value.errorMessage);
279
+ case 4100:
280
+ return new UnauthorizedProviderError(value.errorMessage);
281
+ case 4200:
282
+ return new UnsupportedProviderMethodError(value.errorMessage);
283
+ case 4900:
284
+ return new ProviderDisconnectedError(value.errorMessage);
285
+ case 4901:
286
+ return new ChainDisconnectedError(value.errorMessage);
287
+ case 4902:
288
+ return new SwitchChainError(value.errorMessage);
289
+ }
290
+ }
291
+ }
292
+ let stringified = "[Unable to stringify the thrown value]";
293
+ try {
294
+ stringified = JSON.stringify(value);
295
+ }
296
+ catch {
297
+ // ignoring failed stringify
298
+ }
299
+ return new InternalRpcError(`Invalid value for ProviderRpcError: ${stringified}`);
300
+ }
301
+
150
302
  function isFunction(value) {
151
303
  return typeof value === 'function';
152
304
  }
@@ -874,50 +1026,11 @@
874
1026
  });
875
1027
  }
876
1028
 
877
- class BaseError extends Error {
878
- constructor(name, message, options = {}) {
879
- const {
880
- cause,
881
- context
882
- } = options;
883
- super(message || name);
884
- this.name = name;
885
- this.stack = cause?.stack;
886
- this.cause = cause;
887
- this.context = context;
888
- }
889
- toJSON() {
890
- return {
891
- name: this.name,
892
- message: this.message,
893
- context: this.context,
894
- cause: this.cause
895
- };
896
- }
897
- }
898
-
899
- class AirServiceError extends BaseError {
900
- static from(error) {
901
- if (error instanceof AirServiceError) {
902
- return error;
903
- }
904
- else if (error instanceof Object && "message" in error) {
905
- if (error.message === "User cancelled login") {
906
- return new AirServiceError("USER_CANCELLED", error.message);
907
- }
908
- return new AirServiceError("UNKNOWN_ERROR", error.message.toString());
909
- }
910
- return new AirServiceError("UNKNOWN_ERROR");
911
- }
912
- }
913
- class RealmEmbedError extends AirServiceError {
914
- }
915
-
916
1029
  function getDefaultExportFromCjs (x) {
917
1030
  return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
918
1031
  }
919
1032
 
920
- var loglevel$2 = {exports: {}};
1033
+ var loglevel$1 = {exports: {}};
921
1034
 
922
1035
  /*
923
1036
  * loglevel - https://github.com/pimterry/loglevel
@@ -925,10 +1038,10 @@
925
1038
  * Copyright (c) 2013 Tim Perry
926
1039
  * Licensed under the MIT license.
927
1040
  */
928
- var loglevel$1 = loglevel$2.exports;
1041
+ var loglevel = loglevel$1.exports;
929
1042
  var hasRequiredLoglevel;
930
1043
  function requireLoglevel() {
931
- if (hasRequiredLoglevel) return loglevel$2.exports;
1044
+ if (hasRequiredLoglevel) return loglevel$1.exports;
932
1045
  hasRequiredLoglevel = 1;
933
1046
  (function (module) {
934
1047
  (function (root, definition) {
@@ -938,7 +1051,7 @@
938
1051
  } else {
939
1052
  root.log = definition();
940
1053
  }
941
- })(loglevel$1, function () {
1054
+ })(loglevel, function () {
942
1055
 
943
1056
  // Slightly dubious tricks to cut down minimized file size
944
1057
  var noop = function () {};
@@ -1237,19 +1350,20 @@
1237
1350
  defaultLogger['default'] = defaultLogger;
1238
1351
  return defaultLogger;
1239
1352
  });
1240
- })(loglevel$2);
1241
- return loglevel$2.exports;
1353
+ })(loglevel$1);
1354
+ return loglevel$1.exports;
1242
1355
  }
1243
1356
 
1244
1357
  var loglevelExports = requireLoglevel();
1245
- var loglevel = /*@__PURE__*/getDefaultExportFromCjs(loglevelExports);
1358
+ var log$1 = /*@__PURE__*/getDefaultExportFromCjs(loglevelExports);
1246
1359
 
1247
- var log = loglevel.getLogger("airkit");
1360
+ var log = log$1.getLogger("airkit");
1248
1361
 
1249
1362
  var AirWalletProviderMessageTypes;
1250
1363
  (function (AirWalletProviderMessageTypes) {
1251
1364
  AirWalletProviderMessageTypes["REQUEST"] = "JRPC_REQUEST";
1252
1365
  AirWalletProviderMessageTypes["RESPONSE"] = "JRPC_RESPONSE";
1366
+ AirWalletProviderMessageTypes["EVENT"] = "JRPC_EVENT";
1253
1367
  })(AirWalletProviderMessageTypes || (AirWalletProviderMessageTypes = {}));
1254
1368
 
1255
1369
  const ACCOUNT_MESSAGES = [
@@ -1272,6 +1386,7 @@
1272
1386
  AirAuthMessageTypes.SETUP_WALLET_REQUEST,
1273
1387
  AirAuthMessageTypes.LOGOUT_RESPONSE,
1274
1388
  AirAuthMessageTypes.PARTNER_USER_INFO_RESPONSE,
1389
+ AirAuthMessageTypes.CROSS_PARTNER_TOKEN_RESPONSE,
1275
1390
  AirAuthMessageTypes.IFRAME_VISIBILITY_REQUEST,
1276
1391
  ];
1277
1392
  class AirMessageService {
@@ -1295,6 +1410,9 @@
1295
1410
  get providerMessage$() {
1296
1411
  return this._providerMessage$.asObservable();
1297
1412
  }
1413
+ get providerEvent$() {
1414
+ return this._providerEvent$.asObservable();
1415
+ }
1298
1416
  async openAuthObservables({ authIframeOrigin }) {
1299
1417
  this.closeAuthObservables();
1300
1418
  this.setupAuthObservables();
@@ -1335,13 +1453,16 @@
1335
1453
  if (ev.data.type === AirWalletProviderMessageTypes.RESPONSE) {
1336
1454
  this._providerMessage$.next(ev.data);
1337
1455
  }
1456
+ if (ev.data.type === AirWalletProviderMessageTypes.EVENT) {
1457
+ this._providerEvent$.next(ev.data);
1458
+ }
1338
1459
  };
1339
1460
  window.addEventListener("message", handleWalletMessage);
1340
1461
  this.closeWalletMessageListeners = () => {
1341
1462
  window.removeEventListener("message", handleWalletMessage);
1342
1463
  };
1343
1464
  }
1344
- setupIframeCommunication(authIframe, walletIframe) {
1465
+ setupIframeCommunication(authIframe, walletIframe, skipWalletLogin) {
1345
1466
  const channel = new MessageChannel();
1346
1467
  const authOrigin = new URL(authIframe.src).origin;
1347
1468
  authIframe.contentWindow.postMessage({
@@ -1350,6 +1471,9 @@
1350
1471
  const walletOrigin = new URL(walletIframe.src).origin;
1351
1472
  walletIframe.contentWindow.postMessage({
1352
1473
  type: AirMessageTypes.INIT_AUTH_COMMUNICATION,
1474
+ payload: {
1475
+ skipWalletLogin,
1476
+ },
1353
1477
  }, walletOrigin, [channel.port2]);
1354
1478
  }
1355
1479
  async sendGrantPermissionRequest(walletIframe, policies) {
@@ -1363,7 +1487,7 @@
1363
1487
  }, origin);
1364
1488
  const result = await response;
1365
1489
  if (result.payload.success === false) {
1366
- throw new RealmEmbedError(result.payload.errorName, result.payload.errorMessage);
1490
+ throw new AirServiceError(result.payload.errorName, result.payload.errorMessage);
1367
1491
  }
1368
1492
  return result.payload.sessionData;
1369
1493
  }
@@ -1384,7 +1508,7 @@
1384
1508
  }, origin);
1385
1509
  const result = await response;
1386
1510
  if (result.payload.success === false) {
1387
- throw new RealmEmbedError(result.payload.errorName, result.payload.errorMessage);
1511
+ throw new AirServiceError(result.payload.errorName, result.payload.errorMessage);
1388
1512
  }
1389
1513
  return result.payload.txHash;
1390
1514
  }
@@ -1399,7 +1523,7 @@
1399
1523
  }, origin);
1400
1524
  const result = await response;
1401
1525
  if (result.payload.success === false) {
1402
- throw new RealmEmbedError(result.payload.errorName, result.payload.errorMessage);
1526
+ throw new AirServiceError(result.payload.errorName, result.payload.errorMessage);
1403
1527
  }
1404
1528
  return result.payload.txHash;
1405
1529
  }
@@ -1443,6 +1567,10 @@
1443
1567
  walletIframe.contentWindow.postMessage({ type: AirMessageTypes.LOGOUT_REQUEST }, origin);
1444
1568
  return response;
1445
1569
  }
1570
+ sendResetAuthServiceWalletCommunication(authIframe) {
1571
+ const { origin: authOrigin } = new URL(authIframe.src);
1572
+ authIframe.contentWindow.postMessage({ type: AirAuthMessageTypes.RESET_WALLET_COMMUNICATION }, authOrigin);
1573
+ }
1446
1574
  async sendAuthInitializationRequest(authIframe, payload) {
1447
1575
  const response = firstValueFrom(this._authMessage$.pipe(filter((msg) => msg.type === AirAuthMessageTypes.INITIALIZATION_RESPONSE)));
1448
1576
  const { origin } = new URL(authIframe.src);
@@ -1455,6 +1583,17 @@
1455
1583
  walletIframe.contentWindow.postMessage({ type: AirMessageTypes.INITIALIZATION_REQUEST, payload }, origin);
1456
1584
  return response;
1457
1585
  }
1586
+ async sendCrossPartnerTokenRequest(authIframe, targetPartnerUrl) {
1587
+ const response = firstValueFrom(this.authMessage$.pipe(filter((msg) => msg.type === AirAuthMessageTypes.CROSS_PARTNER_TOKEN_RESPONSE)));
1588
+ const { origin } = new URL(authIframe.src);
1589
+ authIframe.contentWindow.postMessage({
1590
+ type: AirAuthMessageTypes.CROSS_PARTNER_TOKEN_REQUEST,
1591
+ payload: {
1592
+ targetPartnerUrl,
1593
+ },
1594
+ }, origin);
1595
+ return response;
1596
+ }
1458
1597
  async sendGrantPermissionsRequest(walletIframe, payload) {
1459
1598
  const response = firstValueFrom(this.messages$.pipe(filter((msg) => msg.type === AirMessageTypes.GRANT_PERMISSIONS_RESPONSE)));
1460
1599
  const { origin } = new URL(walletIframe.src);
@@ -1495,6 +1634,8 @@
1495
1634
  closeWalletObservables() {
1496
1635
  if (this._providerMessage$ && !this._providerMessage$.closed)
1497
1636
  this._providerMessage$.complete();
1637
+ if (this._providerEvent$ && !this._providerEvent$.closed)
1638
+ this._providerEvent$.complete();
1498
1639
  if (this.closeWalletMessageListeners)
1499
1640
  this.closeWalletMessageListeners();
1500
1641
  }
@@ -1506,38 +1647,11 @@
1506
1647
  }
1507
1648
  setupWalletObservables() {
1508
1649
  this._providerMessage$ = new Subject();
1650
+ this._providerEvent$ = new Subject();
1509
1651
  }
1510
1652
  }
1511
1653
  var AirMessageService$1 = AirMessageService.instance;
1512
1654
 
1513
- class ProviderRpcError extends Error {
1514
- constructor(message, code, data) {
1515
- super(message);
1516
- this.code = code;
1517
- this.data = data;
1518
- }
1519
- }
1520
- new ProviderRpcError("Invalid JSON", -32700);
1521
- const ProviderRpcInvalidRequestError = new ProviderRpcError("Invalid request", -32600);
1522
- const ProviderRpcMethodNotFoundError = new ProviderRpcError("Method not found", -32601);
1523
- const ProviderRpcInvalidParamsError = new ProviderRpcError("Invalid params", -32602);
1524
- new ProviderRpcError("Internal error", -32603);
1525
- new ProviderRpcError("User rejected request", 4001);
1526
- new ProviderRpcError("Unauthorized", 4100);
1527
- new ProviderRpcError("Unsupported method", 4200);
1528
- new ProviderRpcError("Disconnected", 4900);
1529
- new ProviderRpcError("Chain Disconnected", 4901);
1530
- function ensureProviderRpcError(value) {
1531
- if (value instanceof ProviderRpcError) return value;
1532
- let stringified = "[Unable to stringify the thrown value]";
1533
- try {
1534
- stringified = JSON.stringify(value);
1535
- } catch {
1536
- // ignoring failed stringify
1537
- }
1538
- return new ProviderRpcError(`This value was not thrown as type ProviderRpcError: ${stringified}`, -32603);
1539
- }
1540
-
1541
1655
  const BUILD_ENV = {
1542
1656
  PRODUCTION: "production",
1543
1657
  STAGING: "staging",
@@ -1548,66 +1662,113 @@
1548
1662
  [BUILD_ENV.DEVELOPMENT]: {
1549
1663
  authUrl: "http://localhost:8100",
1550
1664
  walletUrl: "http://localhost:8200",
1551
- legacyWalletUrl: "https://localhost:4050",
1552
1665
  logLevel: "debug",
1553
1666
  },
1554
1667
  [BUILD_ENV.STAGING]: {
1555
1668
  authUrl: "https://auth.staging.air3.com",
1556
1669
  walletUrl: "https://account.staging.air3.com",
1557
- legacyWalletUrl: "https://account.staging.realmnetwork.io",
1558
1670
  logLevel: "info",
1559
1671
  },
1560
1672
  [BUILD_ENV.PRODUCTION]: {
1561
1673
  authUrl: "https://auth.air3.com",
1562
1674
  walletUrl: "https://account.air3.com",
1563
- legacyWalletUrl: "https://account.realmnetwork.io",
1564
1675
  logLevel: "error",
1565
1676
  },
1566
1677
  };
1567
1678
  const isElement = (element) => element instanceof Element || element instanceof Document;
1568
1679
  const randomId = () => Math.random().toString(36).slice(2);
1569
1680
 
1570
- var _AirWalletProvider_walletIframe;
1681
+ var _AirWalletProvider_instances, _AirWalletProvider_isLoggedIn, _AirWalletProvider_ensureWallet, _AirWalletProvider_getWalletIframeController, _AirWalletProvider_eventListeners, _AirWalletProvider_emit;
1571
1682
  class AirWalletProvider {
1572
- constructor(walletIframe) {
1573
- _AirWalletProvider_walletIframe.set(this, undefined);
1574
- __classPrivateFieldSet(this, _AirWalletProvider_walletIframe, walletIframe, "f");
1683
+ constructor({ isLoggedIn, ensureWallet, getWalletIframeController, }) {
1684
+ _AirWalletProvider_instances.add(this);
1685
+ _AirWalletProvider_isLoggedIn.set(this, undefined);
1686
+ _AirWalletProvider_ensureWallet.set(this, undefined);
1687
+ _AirWalletProvider_getWalletIframeController.set(this, undefined);
1688
+ _AirWalletProvider_eventListeners.set(this, undefined);
1689
+ this.listenProviderEventMessage = () => {
1690
+ AirMessageService$1.providerEvent$.subscribe((message) => {
1691
+ __classPrivateFieldGet(this, _AirWalletProvider_instances, "m", _AirWalletProvider_emit).call(this, message.payload.event, ...[message.payload.data]);
1692
+ });
1693
+ };
1694
+ __classPrivateFieldSet(this, _AirWalletProvider_isLoggedIn, isLoggedIn, "f");
1695
+ __classPrivateFieldSet(this, _AirWalletProvider_ensureWallet, ensureWallet, "f");
1696
+ __classPrivateFieldSet(this, _AirWalletProvider_getWalletIframeController, getWalletIframeController, "f");
1697
+ __classPrivateFieldSet(this, _AirWalletProvider_eventListeners, {
1698
+ connect: [],
1699
+ disconnect: [],
1700
+ accountsChanged: [],
1701
+ chainChanged: [],
1702
+ message: [],
1703
+ }, "f");
1575
1704
  }
1576
1705
  async request(request) {
1577
1706
  // Check if the request is valid
1578
1707
  if (!request || typeof request !== "object" || Array.isArray(request)) {
1579
- throw ProviderRpcInvalidRequestError;
1708
+ throw new InvalidRequestRpcError("Invalid request");
1580
1709
  }
1581
1710
  const { method, params } = request;
1582
1711
  // Check if the method is valid
1583
1712
  if (typeof method !== "string" || method.length === 0) {
1584
- throw ProviderRpcMethodNotFoundError;
1713
+ throw new MethodNotFoundRpcError("Invalid method");
1585
1714
  }
1586
1715
  // Check if the params are valid
1587
1716
  if (params !== undefined &&
1588
1717
  !Array.isArray(params) &&
1589
1718
  (typeof params !== "object" || params === null)) {
1590
- throw ProviderRpcInvalidParamsError;
1719
+ throw new InvalidParamsRpcError("Invalid params");
1720
+ }
1721
+ // Check if the user is logged in
1722
+ if (!__classPrivateFieldGet(this, _AirWalletProvider_isLoggedIn, "f").call(this)) {
1723
+ throw new UnauthorizedProviderError("User is not logged in");
1724
+ }
1725
+ try {
1726
+ await __classPrivateFieldGet(this, _AirWalletProvider_ensureWallet, "f").call(this);
1727
+ }
1728
+ catch (error) {
1729
+ throw ensureProviderRpcError(error);
1591
1730
  }
1592
1731
  const requestId = randomId();
1593
- const response = await AirMessageService$1.sendWalletProviderRequest(__classPrivateFieldGet(this, _AirWalletProvider_walletIframe, "f"), {
1732
+ const response = await AirMessageService$1.sendWalletProviderRequest(__classPrivateFieldGet(this, _AirWalletProvider_getWalletIframeController, "f").call(this).iframeElement, {
1594
1733
  requestId,
1595
1734
  ...request,
1596
1735
  });
1597
1736
  if (!response.success) {
1598
- const error = ensureProviderRpcError(response.payload);
1599
- throw error;
1737
+ throw ensureProviderRpcError(response.payload);
1600
1738
  }
1601
1739
  return response.payload.response;
1602
1740
  }
1603
1741
  on(eventName, listener) {
1604
- console.log("on", eventName, listener);
1742
+ __classPrivateFieldGet(this, _AirWalletProvider_eventListeners, "f")[eventName] = __classPrivateFieldGet(this, _AirWalletProvider_eventListeners, "f")[eventName] || [];
1743
+ __classPrivateFieldGet(this, _AirWalletProvider_eventListeners, "f")[eventName].push(listener);
1605
1744
  }
1606
1745
  removeListener(eventName, listener) {
1607
- console.log("removeListener", eventName, listener);
1746
+ __classPrivateFieldGet(this, _AirWalletProvider_eventListeners, "f")[eventName] = __classPrivateFieldGet(this, _AirWalletProvider_eventListeners, "f")[eventName] || [];
1747
+ const index = __classPrivateFieldGet(this, _AirWalletProvider_eventListeners, "f")[eventName].indexOf(listener);
1748
+ if (index >= 0) {
1749
+ __classPrivateFieldGet(this, _AirWalletProvider_eventListeners, "f")[eventName].splice(index, 1);
1750
+ }
1751
+ }
1752
+ removeAllListeners() {
1753
+ __classPrivateFieldSet(this, _AirWalletProvider_eventListeners, {
1754
+ connect: [],
1755
+ disconnect: [],
1756
+ accountsChanged: [],
1757
+ chainChanged: [],
1758
+ message: [],
1759
+ }, "f");
1608
1760
  }
1609
1761
  }
1610
- _AirWalletProvider_walletIframe = new WeakMap();
1762
+ _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) {
1763
+ (__classPrivateFieldGet(this, _AirWalletProvider_eventListeners, "f")[eventName] || []).forEach((listener) => {
1764
+ try {
1765
+ return listener(...args);
1766
+ }
1767
+ catch (error) {
1768
+ log$1.error(error);
1769
+ }
1770
+ });
1771
+ };
1611
1772
 
1612
1773
  class IframeController {
1613
1774
  constructor(iframeUrl, iframeId, state) {
@@ -1672,9 +1833,8 @@
1672
1833
  isVisible: false,
1673
1834
  };
1674
1835
 
1675
- 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;
1836
+ 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;
1676
1837
  class AirService {
1677
- // #walletRehydrationState: AirRehydrationResult;
1678
1838
  constructor({ partnerId }) {
1679
1839
  _AirService_instances.add(this);
1680
1840
  _AirService_loginResult.set(this, undefined);
@@ -1688,8 +1848,14 @@
1688
1848
  _AirService_walletIframeController.set(this, undefined);
1689
1849
  _AirService_walletInitialization.set(this, undefined);
1690
1850
  _AirService_isWalletInitialized.set(this, false);
1851
+ _AirService_walletLoggedInResult.set(this, undefined);
1691
1852
  _AirService_airWalletProvider.set(this, undefined);
1692
1853
  __classPrivateFieldSet(this, _AirService_partnerId, partnerId, "f");
1854
+ __classPrivateFieldSet(this, _AirService_airWalletProvider, new AirWalletProvider({
1855
+ isLoggedIn: () => this.isLoggedIn,
1856
+ ensureWallet: __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_ensureWallet).bind(this),
1857
+ getWalletIframeController: () => __classPrivateFieldGet(this, _AirService_walletIframeController, "f"),
1858
+ }), "f");
1693
1859
  // this.#modalZIndex = modalZIndex ?? 99999;
1694
1860
  }
1695
1861
  get buildEnv() {
@@ -1702,7 +1868,15 @@
1702
1868
  return !!__classPrivateFieldGet(this, _AirService_loginResult, "f");
1703
1869
  }
1704
1870
  get isWalletInitialized() {
1705
- return __classPrivateFieldGet(this, _AirService_isWalletInitialized, "f");
1871
+ return !!__classPrivateFieldGet(this, _AirService_walletLoggedInResult, "f");
1872
+ }
1873
+ get provider() {
1874
+ const provider = __classPrivateFieldGet(this, _AirService_airWalletProvider, "f");
1875
+ return {
1876
+ request: provider.request.bind(provider),
1877
+ on: provider.on.bind(provider),
1878
+ removeListener: provider.removeListener.bind(provider),
1879
+ };
1706
1880
  }
1707
1881
  async init({ buildEnv = BUILD_ENV.PRODUCTION, enableLogging = false, skipRehydration = false, }) {
1708
1882
  if (!__classPrivateFieldGet(this, _AirService_partnerId, "f"))
@@ -1730,7 +1904,7 @@
1730
1904
  }
1731
1905
  case AirAuthMessageTypes.SETUP_WALLET_REQUEST: {
1732
1906
  try {
1733
- await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_ensureWallet).call(this);
1907
+ await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_ensureWallet).call(this, { skipWalletLogin: true });
1734
1908
  __classPrivateFieldGet(this, _AirService_authIframeController, "f").postMessage({
1735
1909
  type: AirAuthMessageTypes.SETUP_WALLET_RESPONSE,
1736
1910
  payload: {
@@ -1765,6 +1939,7 @@
1765
1939
  const { payload } = await AirMessageService$1.sendAuthInitializationRequest(__classPrivateFieldGet(this, _AirService_authIframeController, "f").iframeElement, {
1766
1940
  partnerId: __classPrivateFieldGet(this, _AirService_partnerId, "f"),
1767
1941
  skipRehydration,
1942
+ partnerDAppUrl: window.location.href,
1768
1943
  });
1769
1944
  if (payload.success === true) {
1770
1945
  resolve(payload);
@@ -1792,11 +1967,6 @@
1792
1967
  }
1793
1968
  return null;
1794
1969
  }
1795
- async cleanUp() {
1796
- await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_cleanUpWallet).call(this);
1797
- await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_cleanUpAuth).call(this);
1798
- this.clearEventListeners();
1799
- }
1800
1970
  async login(options) {
1801
1971
  if (!__classPrivateFieldGet(this, _AirService_isAuthInitialized, "f"))
1802
1972
  throw new Error("Service is not initialized");
@@ -1901,25 +2071,13 @@
1901
2071
  throw AirServiceError.from(error);
1902
2072
  }
1903
2073
  }
1904
- async logout() {
1905
- if (!__classPrivateFieldGet(this, _AirService_isAuthInitialized, "f"))
1906
- throw new Error("Service is not initialized");
1907
- if (!this.isLoggedIn)
1908
- throw new Error("No active session to logout");
1909
- // Clear up wallet
1910
- await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_cleanUpWallet).call(this);
1911
- await AirMessageService$1.logoutAuth(__classPrivateFieldGet(this, _AirService_authIframeController, "f").iframeElement);
1912
- __classPrivateFieldSet(this, _AirService_loginResult, undefined, "f");
1913
- __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_triggerAirAuthLoggedOut).call(this);
1914
- }
1915
- async getProvider() {
1916
- if (!this.isLoggedIn)
1917
- return null;
1918
- await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_ensureWallet).call(this);
1919
- return __classPrivateFieldGet(this, _AirService_airWalletProvider, "f");
2074
+ getProvider() {
2075
+ return this.provider;
1920
2076
  }
1921
2077
  async preloadWallet() {
1922
- return __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_ensureWallet).call(this);
2078
+ if (__classPrivateFieldGet(this, _AirService_walletLoggedInResult, "f"))
2079
+ return __classPrivateFieldGet(this, _AirService_walletLoggedInResult, "f");
2080
+ return await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_ensureWallet).call(this);
1923
2081
  }
1924
2082
  async claimAirId(options) {
1925
2083
  await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_ensureWallet).call(this);
@@ -1944,9 +2102,39 @@
1944
2102
  id: info.payload.user.id,
1945
2103
  abstractAccountAddress: info.payload.user.abstractAccountAddress,
1946
2104
  email: info.payload.user.email,
2105
+ isMFASetup: info.payload.user.isMFASetup,
1947
2106
  },
1948
2107
  };
1949
2108
  }
2109
+ async goToPartner(partnerUrl) {
2110
+ if (!__classPrivateFieldGet(this, _AirService_isAuthInitialized, "f"))
2111
+ throw new Error("Service is not initialized");
2112
+ if (!this.isLoggedIn)
2113
+ throw new Error("No active session to generate token");
2114
+ const result = await AirMessageService$1.sendCrossPartnerTokenRequest(__classPrivateFieldGet(this, _AirService_authIframeController, "f").iframeElement, partnerUrl);
2115
+ if (result.payload.success === false) {
2116
+ throw new AirServiceError(result.payload.errorName, result.payload.errorMessage);
2117
+ }
2118
+ return {
2119
+ urlWithToken: result.payload.urlWithToken,
2120
+ };
2121
+ }
2122
+ async logout() {
2123
+ if (!__classPrivateFieldGet(this, _AirService_isAuthInitialized, "f"))
2124
+ throw new Error("Service is not initialized");
2125
+ if (!this.isLoggedIn)
2126
+ throw new Error("No active session to logout");
2127
+ // Clear up wallet
2128
+ await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_cleanUpWallet).call(this);
2129
+ await AirMessageService$1.logoutAuth(__classPrivateFieldGet(this, _AirService_authIframeController, "f").iframeElement);
2130
+ __classPrivateFieldSet(this, _AirService_loginResult, undefined, "f");
2131
+ __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_triggerAirAuthLoggedOut).call(this);
2132
+ }
2133
+ async cleanUp() {
2134
+ await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_cleanUpWallet).call(this);
2135
+ await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_cleanUpAuth).call(this);
2136
+ this.clearEventListeners();
2137
+ }
1950
2138
  on(listener) {
1951
2139
  if (__classPrivateFieldGet(this, _AirService_airAuthListener, "f").indexOf(listener) < 0)
1952
2140
  __classPrivateFieldGet(this, _AirService_airAuthListener, "f").push(listener);
@@ -1967,24 +2155,39 @@
1967
2155
  return null;
1968
2156
  }
1969
2157
  }
1970
- _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() {
2158
+ _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 =
2159
+ // Result of this.#walletInitialization:
2160
+ // - If skipWalletLogin is true, it returns the result of empty abstractAccountAddress
2161
+ // - If skipWalletLogin is false, it returns the result of abstractAccountAddress from wallet initialization
2162
+ // - If #ensureWallet is called again, it returns the result of abstractAccountAddress from the second
2163
+ // wallet initialization if this first wallet initialization doesn't have abstractAccountAddress
2164
+ async function _AirService_ensureWallet(option) {
1971
2165
  if (!this.isInitialized)
1972
2166
  throw new Error("Service not initialized");
1973
- if (!__classPrivateFieldGet(this, _AirService_walletInitialization, "f")) {
1974
- try {
1975
- __classPrivateFieldSet(this, _AirService_walletInitialization, __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_initializeWallet).call(this), "f");
1976
- return await __classPrivateFieldGet(this, _AirService_walletInitialization, "f");
2167
+ if (!this.isLoggedIn && !option?.skipWalletLogin)
2168
+ throw new Error("User not logged in");
2169
+ if (!__classPrivateFieldGet(this, _AirService_walletInitialization, "f"))
2170
+ __classPrivateFieldSet(this, _AirService_walletInitialization, __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_initializeWallet).call(this, option), "f");
2171
+ try {
2172
+ const result = await __classPrivateFieldGet(this, _AirService_walletInitialization, "f");
2173
+ // Note: Checking for abstractAccountAddress from the result and this.#walletLoggedInResult to avoid race condition
2174
+ if (option?.skipWalletLogin ||
2175
+ result?.abstractAccountAddress ||
2176
+ __classPrivateFieldGet(this, _AirService_walletLoggedInResult, "f")?.abstractAccountAddress) {
2177
+ return result || __classPrivateFieldGet(this, _AirService_walletLoggedInResult, "f");
1977
2178
  }
1978
- catch (error) {
1979
- __classPrivateFieldSet(this, _AirService_walletInitialization, null, "f");
1980
- log.error("Error initializing wallet", error);
1981
- throw error;
2179
+ const walletInitResult = await AirMessageService$1.onWalletInitialized();
2180
+ if (walletInitResult.payload.success !== true) {
2181
+ throw new AirServiceError(walletInitResult.payload.errorName, walletInitResult.payload.errorMessage);
1982
2182
  }
2183
+ return __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_createWalletInitializedResult).call(this, walletInitResult.payload);
1983
2184
  }
1984
- else {
1985
- return __classPrivateFieldGet(this, _AirService_walletInitialization, "f");
2185
+ catch (error) {
2186
+ __classPrivateFieldSet(this, _AirService_walletInitialization, null, "f");
2187
+ log.error("Error initializing wallet", error);
2188
+ throw error;
1986
2189
  }
1987
- }, _AirService_initializeWallet = async function _AirService_initializeWallet() {
2190
+ }, _AirService_initializeWallet = async function _AirService_initializeWallet(option) {
1988
2191
  if (__classPrivateFieldGet(this, _AirService_isWalletInitialized, "f"))
1989
2192
  throw new AirServiceError("ALREADY_INITIALISED", "Already initialized");
1990
2193
  const { walletUrl } = AIR_URLS[__classPrivateFieldGet(this, _AirService_buildEnv, "f")];
@@ -2002,6 +2205,23 @@
2002
2205
  walletIframeController.updateIframeState();
2003
2206
  break;
2004
2207
  }
2208
+ case AirMessageTypes.WALLET_INITIALIZED: {
2209
+ if (msg.payload.success === true && msg.payload.addresses?.aa) {
2210
+ __classPrivateFieldSet(this, _AirService_walletLoggedInResult, __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_createWalletInitializedResult).call(this, msg.payload), "f");
2211
+ __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_triggerWalletInitialized).call(this, __classPrivateFieldGet(this, _AirService_walletLoggedInResult, "f"));
2212
+ }
2213
+ if (msg.payload.success === false) {
2214
+ if (!__classPrivateFieldGet(this, _AirService_isWalletInitialized, "f")) {
2215
+ // MFA fail case, also reset wallet port
2216
+ __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_cleanUpAuthWalletCommunication).call(this);
2217
+ }
2218
+ else {
2219
+ // Logout wallet and destroy the wallet iframe
2220
+ await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_cleanUpWallet).call(this);
2221
+ }
2222
+ }
2223
+ break;
2224
+ }
2005
2225
  }
2006
2226
  });
2007
2227
  await new Promise((resolve, reject) => {
@@ -2024,18 +2244,15 @@
2024
2244
  };
2025
2245
  window.addEventListener("message", handleAuthMessage);
2026
2246
  });
2247
+ __classPrivateFieldGet(this, _AirService_airWalletProvider, "f").listenProviderEventMessage();
2027
2248
  const walletInitPromise = AirMessageService$1.onWalletInitialized();
2028
- AirMessageService$1.setupIframeCommunication(__classPrivateFieldGet(this, _AirService_authIframeController, "f").iframeElement, __classPrivateFieldGet(this, _AirService_walletIframeController, "f").iframeElement);
2249
+ AirMessageService$1.setupIframeCommunication(__classPrivateFieldGet(this, _AirService_authIframeController, "f").iframeElement, __classPrivateFieldGet(this, _AirService_walletIframeController, "f").iframeElement, option?.skipWalletLogin ?? false);
2029
2250
  const walletInitResult = await walletInitPromise;
2030
2251
  if (walletInitResult.payload.success !== true) {
2031
2252
  throw new AirServiceError(walletInitResult.payload.errorName, walletInitResult.payload.errorMessage);
2032
2253
  }
2033
- __classPrivateFieldSet(this, _AirService_airWalletProvider, new AirWalletProvider(__classPrivateFieldGet(this, _AirService_walletIframeController, "f").iframeElement), "f");
2034
- const result = {
2035
- abstractAccountAddress: walletInitResult.payload.addresses.aa,
2036
- };
2037
- __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_triggerWalletInitialized).call(this, result);
2038
- return result;
2254
+ __classPrivateFieldSet(this, _AirService_isWalletInitialized, true, "f");
2255
+ return __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_createWalletInitializedResult).call(this, walletInitResult.payload);
2039
2256
  }
2040
2257
  catch (error) {
2041
2258
  log.error("Error initializing wallet", error);
@@ -2066,6 +2283,12 @@
2066
2283
  id: payload.id,
2067
2284
  abstractAccountAddress: payload.abstractAccountAddress,
2068
2285
  token: payload.partnerAccessToken,
2286
+ isMFASetup: payload.isMFASetup,
2287
+ };
2288
+ }, _AirService_createWalletInitializedResult = function _AirService_createWalletInitializedResult(payload) {
2289
+ return {
2290
+ abstractAccountAddress: payload.addresses?.aa ?? null,
2291
+ isMFASetup: payload.isMFASetup,
2069
2292
  };
2070
2293
  }, _AirService_cleanUpAuth = async function _AirService_cleanUpAuth() {
2071
2294
  // Logout auth session
@@ -2091,14 +2314,31 @@
2091
2314
  }
2092
2315
  // Close the message service
2093
2316
  AirMessageService$1.closeAirObservables();
2094
- __classPrivateFieldSet(this, _AirService_walletInitialization, null, "f");
2317
+ __classPrivateFieldSet(this, _AirService_walletLoggedInResult, undefined, "f");
2318
+ __classPrivateFieldSet(this, _AirService_walletInitialization, undefined, "f");
2095
2319
  __classPrivateFieldSet(this, _AirService_isWalletInitialized, false, "f");
2320
+ }, _AirService_cleanUpAuthWalletCommunication = function _AirService_cleanUpAuthWalletCommunication() {
2321
+ if (!__classPrivateFieldGet(this, _AirService_isAuthInitialized, "f"))
2322
+ return;
2323
+ const authIframeElement = __classPrivateFieldGet(this, _AirService_authIframeController, "f")?.iframeElement;
2324
+ if (isElement(authIframeElement) && window.document.body.contains(authIframeElement)) {
2325
+ AirMessageService$1.sendResetAuthServiceWalletCommunication(authIframeElement);
2326
+ }
2096
2327
  };
2097
2328
 
2098
2329
  exports.AirService = AirService;
2099
2330
  exports.AirServiceError = AirServiceError;
2100
- exports.AirWalletProvider = AirWalletProvider;
2101
2331
  exports.BUILD_ENV = BUILD_ENV;
2102
- exports.RealmEmbedError = RealmEmbedError;
2332
+ exports.ChainDisconnectedError = ChainDisconnectedError;
2333
+ exports.InternalRpcError = InternalRpcError;
2334
+ exports.InvalidParamsRpcError = InvalidParamsRpcError;
2335
+ exports.InvalidRequestRpcError = InvalidRequestRpcError;
2336
+ exports.MethodNotFoundRpcError = MethodNotFoundRpcError;
2337
+ exports.ProviderDisconnectedError = ProviderDisconnectedError;
2338
+ exports.SwitchChainError = SwitchChainError;
2339
+ exports.UnauthorizedProviderError = UnauthorizedProviderError;
2340
+ exports.UnsupportedProviderMethodError = UnsupportedProviderMethodError;
2341
+ exports.UserRejectedRequestError = UserRejectedRequestError;
2342
+ exports.ensureProviderRpcError = ensureProviderRpcError;
2103
2343
 
2104
2344
  }));