@mocanetwork/airkit 1.2.0-beta.2 → 1.2.0-beta.3

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.
@@ -125,7 +125,7 @@ const AirAuthMessageTypes = {
125
125
  RESET_WALLET_COMMUNICATION: "air_auth_reset_wallet_communication"
126
126
  };
127
127
 
128
- const AirMessageTypes = {
128
+ const AirWalletMessageTypes = {
129
129
  SERVICE_STARTED: "air_service_started",
130
130
  INITIALIZATION_REQUEST: "air_initialization_request",
131
131
  INITIALIZATION_RESPONSE: "air_initialization_response",
@@ -133,8 +133,8 @@ const AirMessageTypes = {
133
133
  WALLET_INITIALIZED: "air_wallet_initialized",
134
134
  WALLET_LOGIN_REQUEST: "air_wallet_login_request",
135
135
  WALLET_LOGIN_RESPONSE: "air_wallet_login_response",
136
- SETUP_MFA_REQUEST: "air_setup_mfa_request",
137
- SETUP_MFA_RESPONSE: "air_setup_mfa_response",
136
+ SETUP_OR_UPDATE_MFA_REQUEST: "air_setup_mfa_request",
137
+ SETUP_OR_UPDATE_MFA_RESPONSE: "air_setup_mfa_response",
138
138
  CLAIM_ID_REQUEST: "air_claim_id_request",
139
139
  CLAIM_ID_RESPONSE: "air_claim_id_response",
140
140
  DEPLOY_SMART_ACCOUNT_REQUEST: "air_deploy_smart_account_request",
@@ -150,6 +150,8 @@ const AirMessageTypes = {
150
150
  WALLET_IFRAME_VISIBILITY_REQUEST: "air_wallet_iframe_visibility_request",
151
151
  OPEN_WINDOW_REQUEST: "air_open_window_request",
152
152
  OPEN_WINDOW_RESPONSE: "air_open_window_response",
153
+ OPEN_WINDOW_RETRY_REQUEST: "air_open_window_retry_request",
154
+ OPEN_WINDOW_RETRY_RESPONSE: "air_open_window_retry_response",
153
155
  WINDOW_CLOSED: "air_window_closed",
154
156
  IS_SMART_ACCOUNT_DEPLOYED_REQUEST: "air_is_smart_account_deployed_request",
155
157
  IS_SMART_ACCOUNT_DEPLOYED_RESPONSE: "air_is_smart_account_deployed_response",
@@ -189,6 +191,50 @@ function ensureError(value) {
189
191
  return new Error(`This value was not thrown as type Error: ${stringified}`);
190
192
  }
191
193
 
194
+ const BUILD_ENV = {
195
+ PRODUCTION: "production",
196
+ UAT: "uat",
197
+ STAGING: "staging",
198
+ DEVELOPMENT: "development",
199
+ };
200
+
201
+ const AIR_URLS = {
202
+ [BUILD_ENV.DEVELOPMENT]: {
203
+ authUrl: "http://localhost:8100",
204
+ walletUrl: "http://localhost:8200",
205
+ },
206
+ [BUILD_ENV.UAT]: {
207
+ authUrl: "https://auth.uat.air3.com",
208
+ walletUrl: "https://account.uat.air3.com",
209
+ },
210
+ [BUILD_ENV.STAGING]: {
211
+ authUrl: "https://auth.staging.air3.com",
212
+ walletUrl: "https://account.staging.air3.com",
213
+ },
214
+ [BUILD_ENV.PRODUCTION]: {
215
+ authUrl: "https://auth.air3.com",
216
+ walletUrl: "https://account.air3.com",
217
+ },
218
+ };
219
+ const isElement = (element) => element instanceof Element || element instanceof Document;
220
+ const randomId = () => Math.random().toString(36).slice(2);
221
+ const extractErrorHash = (message) => {
222
+ if (!message)
223
+ return "";
224
+ // Format: "reason: 0x..."
225
+ if (message.includes("reason:")) {
226
+ return message.split("reason:")[1].trim();
227
+ }
228
+ // Format: "UserOperation reverted during simulation with reason: 0x..."
229
+ if (message.includes("with reason:")) {
230
+ const match = message.match(/with reason: (0x[a-fA-F0-9]+)/);
231
+ return match ? match[1].trim() : "";
232
+ }
233
+ // Look for any 0x pattern that could be a hash
234
+ const hexMatch = message.match(/(0x[a-fA-F0-9]{8,})/);
235
+ return hexMatch ? hexMatch[1].trim() : "";
236
+ };
237
+
192
238
  class AirServiceError extends BaseError {
193
239
  static from(error) {
194
240
  if (error instanceof AirServiceError) {
@@ -206,6 +252,7 @@ class AirServiceError extends BaseError {
206
252
  class ProviderRpcError extends Error {
207
253
  constructor(message) {
208
254
  super(message);
255
+ this.metaMessages = [];
209
256
  }
210
257
  }
211
258
  class UserRejectedRequestError extends ProviderRpcError {
@@ -251,10 +298,14 @@ class SwitchChainError extends ProviderRpcError {
251
298
  }
252
299
  }
253
300
  class TransactionRejectedRpcError extends ProviderRpcError {
254
- constructor() {
255
- super(...arguments);
301
+ constructor(message) {
302
+ // Remove the "Version: viem@x.x.x" suffix if present
303
+ const cleanMessage = message.replace(/\nVersion:.*$/, '');
304
+ super(cleanMessage);
256
305
  this.code = -32003;
257
306
  this.name = "TransactionRejectedRpcError";
307
+ // Parse the error hash from the message
308
+ this.metaMessages.push(extractErrorHash(cleanMessage));
258
309
  }
259
310
  }
260
311
  class InvalidRequestRpcError extends ProviderRpcError {
@@ -322,149 +373,480 @@ function ensureProviderRpcError(value) {
322
373
  return new InternalRpcError(`Invalid value for ProviderRpcError: ${stringified}`);
323
374
  }
324
375
 
325
- function isFunction(value) {
326
- return typeof value === 'function';
376
+ function getDefaultExportFromCjs (x) {
377
+ return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
327
378
  }
328
379
 
329
- function createErrorClass(createImpl) {
330
- var _super = function (instance) {
331
- Error.call(instance);
332
- instance.stack = new Error().stack;
333
- };
334
- var ctorFunc = createImpl(_super);
335
- ctorFunc.prototype = Object.create(Error.prototype);
336
- ctorFunc.prototype.constructor = ctorFunc;
337
- return ctorFunc;
338
- }
380
+ var loglevel$1 = {exports: {}};
339
381
 
340
- var UnsubscriptionError = createErrorClass(function (_super) {
341
- return function UnsubscriptionErrorImpl(errors) {
342
- _super(this);
343
- this.message = errors ? errors.length + " errors occurred during unsubscription:\n" + errors.map(function (err, i) {
344
- return i + 1 + ") " + err.toString();
345
- }).join('\n ') : '';
346
- this.name = 'UnsubscriptionError';
347
- this.errors = errors;
348
- };
349
- });
382
+ /*
383
+ * loglevel - https://github.com/pimterry/loglevel
384
+ *
385
+ * Copyright (c) 2013 Tim Perry
386
+ * Licensed under the MIT license.
387
+ */
388
+ var loglevel = loglevel$1.exports;
389
+ var hasRequiredLoglevel;
390
+ function requireLoglevel() {
391
+ if (hasRequiredLoglevel) return loglevel$1.exports;
392
+ hasRequiredLoglevel = 1;
393
+ (function (module) {
394
+ (function (root, definition) {
350
395
 
351
- function arrRemove(arr, item) {
352
- if (arr) {
353
- var index = arr.indexOf(item);
354
- 0 <= index && arr.splice(index, 1);
355
- }
356
- }
396
+ if (module.exports) {
397
+ module.exports = definition();
398
+ } else {
399
+ root.log = definition();
400
+ }
401
+ })(loglevel, function () {
357
402
 
358
- var Subscription = function () {
359
- function Subscription(initialTeardown) {
360
- this.initialTeardown = initialTeardown;
361
- this.closed = false;
362
- this._parentage = null;
363
- this._finalizers = null;
364
- }
365
- Subscription.prototype.unsubscribe = function () {
366
- var e_1, _a, e_2, _b;
367
- var errors;
368
- if (!this.closed) {
369
- this.closed = true;
370
- var _parentage = this._parentage;
371
- if (_parentage) {
372
- this._parentage = null;
373
- if (Array.isArray(_parentage)) {
403
+ // Slightly dubious tricks to cut down minimized file size
404
+ var noop = function () {};
405
+ var undefinedType = "undefined";
406
+ var isIE = typeof window !== undefinedType && typeof window.navigator !== undefinedType && /Trident\/|MSIE /.test(window.navigator.userAgent);
407
+ var logMethods = ["trace", "debug", "info", "warn", "error"];
408
+ var _loggersByName = {};
409
+ var defaultLogger = null;
410
+
411
+ // Cross-browser bind equivalent that works at least back to IE6
412
+ function bindMethod(obj, methodName) {
413
+ var method = obj[methodName];
414
+ if (typeof method.bind === 'function') {
415
+ return method.bind(obj);
416
+ } else {
374
417
  try {
375
- for (var _parentage_1 = __values(_parentage), _parentage_1_1 = _parentage_1.next(); !_parentage_1_1.done; _parentage_1_1 = _parentage_1.next()) {
376
- var parent_1 = _parentage_1_1.value;
377
- parent_1.remove(this);
378
- }
379
- } catch (e_1_1) {
380
- e_1 = {
381
- error: e_1_1
418
+ return Function.prototype.bind.call(method, obj);
419
+ } catch (e) {
420
+ // Missing bind shim or IE8 + Modernizr, fallback to wrapping
421
+ return function () {
422
+ return Function.prototype.apply.apply(method, [obj, arguments]);
382
423
  };
383
- } finally {
384
- try {
385
- if (_parentage_1_1 && !_parentage_1_1.done && (_a = _parentage_1.return)) _a.call(_parentage_1);
386
- } finally {
387
- if (e_1) throw e_1.error;
388
- }
389
424
  }
390
- } else {
391
- _parentage.remove(this);
392
425
  }
393
426
  }
394
- var initialFinalizer = this.initialTeardown;
395
- if (isFunction(initialFinalizer)) {
396
- try {
397
- initialFinalizer();
398
- } catch (e) {
399
- errors = e instanceof UnsubscriptionError ? e.errors : [e];
427
+
428
+ // Trace() doesn't print the message in IE, so for that case we need to wrap it
429
+ function traceForIE() {
430
+ if (console.log) {
431
+ if (console.log.apply) {
432
+ console.log.apply(console, arguments);
433
+ } else {
434
+ // In old IE, native console methods themselves don't have apply().
435
+ Function.prototype.apply.apply(console.log, [console, arguments]);
436
+ }
400
437
  }
438
+ if (console.trace) console.trace();
401
439
  }
402
- var _finalizers = this._finalizers;
403
- if (_finalizers) {
404
- this._finalizers = null;
405
- try {
406
- for (var _finalizers_1 = __values(_finalizers), _finalizers_1_1 = _finalizers_1.next(); !_finalizers_1_1.done; _finalizers_1_1 = _finalizers_1.next()) {
407
- var finalizer = _finalizers_1_1.value;
408
- try {
409
- execFinalizer(finalizer);
410
- } catch (err) {
411
- errors = errors !== null && errors !== void 0 ? errors : [];
412
- if (err instanceof UnsubscriptionError) {
413
- errors = __spreadArray(__spreadArray([], __read(errors)), __read(err.errors));
414
- } else {
415
- errors.push(err);
416
- }
417
- }
418
- }
419
- } catch (e_2_1) {
420
- e_2 = {
421
- error: e_2_1
422
- };
423
- } finally {
424
- try {
425
- if (_finalizers_1_1 && !_finalizers_1_1.done && (_b = _finalizers_1.return)) _b.call(_finalizers_1);
426
- } finally {
427
- if (e_2) throw e_2.error;
428
- }
440
+
441
+ // Build the best logging method possible for this env
442
+ // Wherever possible we want to bind, not wrap, to preserve stack traces
443
+ function realMethod(methodName) {
444
+ if (methodName === 'debug') {
445
+ methodName = 'log';
446
+ }
447
+ if (typeof console === undefinedType) {
448
+ return false; // No method possible, for now - fixed later by enableLoggingWhenConsoleArrives
449
+ } else if (methodName === 'trace' && isIE) {
450
+ return traceForIE;
451
+ } else if (console[methodName] !== undefined) {
452
+ return bindMethod(console, methodName);
453
+ } else if (console.log !== undefined) {
454
+ return bindMethod(console, 'log');
455
+ } else {
456
+ return noop;
429
457
  }
430
458
  }
431
- if (errors) {
432
- throw new UnsubscriptionError(errors);
459
+
460
+ // These private functions always need `this` to be set properly
461
+
462
+ function replaceLoggingMethods() {
463
+ /*jshint validthis:true */
464
+ var level = this.getLevel();
465
+
466
+ // Replace the actual methods.
467
+ for (var i = 0; i < logMethods.length; i++) {
468
+ var methodName = logMethods[i];
469
+ this[methodName] = i < level ? noop : this.methodFactory(methodName, level, this.name);
470
+ }
471
+
472
+ // Define log.log as an alias for log.debug
473
+ this.log = this.debug;
474
+
475
+ // Return any important warnings.
476
+ if (typeof console === undefinedType && level < this.levels.SILENT) {
477
+ return "No console available for logging";
478
+ }
433
479
  }
434
- }
435
- };
436
- Subscription.prototype.add = function (teardown) {
437
- var _a;
438
- if (teardown && teardown !== this) {
439
- if (this.closed) {
440
- execFinalizer(teardown);
441
- } else {
442
- if (teardown instanceof Subscription) {
443
- if (teardown.closed || teardown._hasParent(this)) {
444
- return;
480
+
481
+ // In old IE versions, the console isn't present until you first open it.
482
+ // We build realMethod() replacements here that regenerate logging methods
483
+ function enableLoggingWhenConsoleArrives(methodName) {
484
+ return function () {
485
+ if (typeof console !== undefinedType) {
486
+ replaceLoggingMethods.call(this);
487
+ this[methodName].apply(this, arguments);
445
488
  }
446
- teardown._addParent(this);
447
- }
448
- (this._finalizers = (_a = this._finalizers) !== null && _a !== undefined ? _a : []).push(teardown);
489
+ };
449
490
  }
450
- }
451
- };
452
- Subscription.prototype._hasParent = function (parent) {
453
- var _parentage = this._parentage;
454
- return _parentage === parent || Array.isArray(_parentage) && _parentage.includes(parent);
455
- };
456
- Subscription.prototype._addParent = function (parent) {
457
- var _parentage = this._parentage;
458
- this._parentage = Array.isArray(_parentage) ? (_parentage.push(parent), _parentage) : _parentage ? [_parentage, parent] : parent;
459
- };
460
- Subscription.prototype._removeParent = function (parent) {
461
- var _parentage = this._parentage;
462
- if (_parentage === parent) {
463
- this._parentage = null;
464
- } else if (Array.isArray(_parentage)) {
465
- arrRemove(_parentage, parent);
466
- }
467
- };
491
+
492
+ // By default, we use closely bound real methods wherever possible, and
493
+ // otherwise we wait for a console to appear, and then try again.
494
+ function defaultMethodFactory(methodName, _level, _loggerName) {
495
+ /*jshint validthis:true */
496
+ return realMethod(methodName) || enableLoggingWhenConsoleArrives.apply(this, arguments);
497
+ }
498
+ function Logger(name, factory) {
499
+ // Private instance variables.
500
+ var self = this;
501
+ /**
502
+ * The level inherited from a parent logger (or a global default). We
503
+ * cache this here rather than delegating to the parent so that it stays
504
+ * in sync with the actual logging methods that we have installed (the
505
+ * parent could change levels but we might not have rebuilt the loggers
506
+ * in this child yet).
507
+ * @type {number}
508
+ */
509
+ var inheritedLevel;
510
+ /**
511
+ * The default level for this logger, if any. If set, this overrides
512
+ * `inheritedLevel`.
513
+ * @type {number|null}
514
+ */
515
+ var defaultLevel;
516
+ /**
517
+ * A user-specific level for this logger. If set, this overrides
518
+ * `defaultLevel`.
519
+ * @type {number|null}
520
+ */
521
+ var userLevel;
522
+ var storageKey = "loglevel";
523
+ if (typeof name === "string") {
524
+ storageKey += ":" + name;
525
+ } else if (typeof name === "symbol") {
526
+ storageKey = undefined;
527
+ }
528
+ function persistLevelIfPossible(levelNum) {
529
+ var levelName = (logMethods[levelNum] || 'silent').toUpperCase();
530
+ if (typeof window === undefinedType || !storageKey) return;
531
+
532
+ // Use localStorage if available
533
+ try {
534
+ window.localStorage[storageKey] = levelName;
535
+ return;
536
+ } catch (ignore) {}
537
+
538
+ // Use session cookie as fallback
539
+ try {
540
+ window.document.cookie = encodeURIComponent(storageKey) + "=" + levelName + ";";
541
+ } catch (ignore) {}
542
+ }
543
+ function getPersistedLevel() {
544
+ var storedLevel;
545
+ if (typeof window === undefinedType || !storageKey) return;
546
+ try {
547
+ storedLevel = window.localStorage[storageKey];
548
+ } catch (ignore) {}
549
+
550
+ // Fallback to cookies if local storage gives us nothing
551
+ if (typeof storedLevel === undefinedType) {
552
+ try {
553
+ var cookie = window.document.cookie;
554
+ var cookieName = encodeURIComponent(storageKey);
555
+ var location = cookie.indexOf(cookieName + "=");
556
+ if (location !== -1) {
557
+ storedLevel = /^([^;]+)/.exec(cookie.slice(location + cookieName.length + 1))[1];
558
+ }
559
+ } catch (ignore) {}
560
+ }
561
+
562
+ // If the stored level is not valid, treat it as if nothing was stored.
563
+ if (self.levels[storedLevel] === undefined) {
564
+ storedLevel = undefined;
565
+ }
566
+ return storedLevel;
567
+ }
568
+ function clearPersistedLevel() {
569
+ if (typeof window === undefinedType || !storageKey) return;
570
+
571
+ // Use localStorage if available
572
+ try {
573
+ window.localStorage.removeItem(storageKey);
574
+ } catch (ignore) {}
575
+
576
+ // Use session cookie as fallback
577
+ try {
578
+ window.document.cookie = encodeURIComponent(storageKey) + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC";
579
+ } catch (ignore) {}
580
+ }
581
+ function normalizeLevel(input) {
582
+ var level = input;
583
+ if (typeof level === "string" && self.levels[level.toUpperCase()] !== undefined) {
584
+ level = self.levels[level.toUpperCase()];
585
+ }
586
+ if (typeof level === "number" && level >= 0 && level <= self.levels.SILENT) {
587
+ return level;
588
+ } else {
589
+ throw new TypeError("log.setLevel() called with invalid level: " + input);
590
+ }
591
+ }
592
+
593
+ /*
594
+ *
595
+ * Public logger API - see https://github.com/pimterry/loglevel for details
596
+ *
597
+ */
598
+
599
+ self.name = name;
600
+ self.levels = {
601
+ "TRACE": 0,
602
+ "DEBUG": 1,
603
+ "INFO": 2,
604
+ "WARN": 3,
605
+ "ERROR": 4,
606
+ "SILENT": 5
607
+ };
608
+ self.methodFactory = factory || defaultMethodFactory;
609
+ self.getLevel = function () {
610
+ if (userLevel != null) {
611
+ return userLevel;
612
+ } else if (defaultLevel != null) {
613
+ return defaultLevel;
614
+ } else {
615
+ return inheritedLevel;
616
+ }
617
+ };
618
+ self.setLevel = function (level, persist) {
619
+ userLevel = normalizeLevel(level);
620
+ if (persist !== false) {
621
+ // defaults to true
622
+ persistLevelIfPossible(userLevel);
623
+ }
624
+
625
+ // NOTE: in v2, this should call rebuild(), which updates children.
626
+ return replaceLoggingMethods.call(self);
627
+ };
628
+ self.setDefaultLevel = function (level) {
629
+ defaultLevel = normalizeLevel(level);
630
+ if (!getPersistedLevel()) {
631
+ self.setLevel(level, false);
632
+ }
633
+ };
634
+ self.resetLevel = function () {
635
+ userLevel = null;
636
+ clearPersistedLevel();
637
+ replaceLoggingMethods.call(self);
638
+ };
639
+ self.enableAll = function (persist) {
640
+ self.setLevel(self.levels.TRACE, persist);
641
+ };
642
+ self.disableAll = function (persist) {
643
+ self.setLevel(self.levels.SILENT, persist);
644
+ };
645
+ self.rebuild = function () {
646
+ if (defaultLogger !== self) {
647
+ inheritedLevel = normalizeLevel(defaultLogger.getLevel());
648
+ }
649
+ replaceLoggingMethods.call(self);
650
+ if (defaultLogger === self) {
651
+ for (var childName in _loggersByName) {
652
+ _loggersByName[childName].rebuild();
653
+ }
654
+ }
655
+ };
656
+
657
+ // Initialize all the internal levels.
658
+ inheritedLevel = normalizeLevel(defaultLogger ? defaultLogger.getLevel() : "WARN");
659
+ var initialLevel = getPersistedLevel();
660
+ if (initialLevel != null) {
661
+ userLevel = normalizeLevel(initialLevel);
662
+ }
663
+ replaceLoggingMethods.call(self);
664
+ }
665
+
666
+ /*
667
+ *
668
+ * Top-level API
669
+ *
670
+ */
671
+
672
+ defaultLogger = new Logger();
673
+ defaultLogger.getLogger = function getLogger(name) {
674
+ if (typeof name !== "symbol" && typeof name !== "string" || name === "") {
675
+ throw new TypeError("You must supply a name when creating a logger.");
676
+ }
677
+ var logger = _loggersByName[name];
678
+ if (!logger) {
679
+ logger = _loggersByName[name] = new Logger(name, defaultLogger.methodFactory);
680
+ }
681
+ return logger;
682
+ };
683
+
684
+ // Grab the current global log variable in case of overwrite
685
+ var _log = typeof window !== undefinedType ? window.log : undefined;
686
+ defaultLogger.noConflict = function () {
687
+ if (typeof window !== undefinedType && window.log === defaultLogger) {
688
+ window.log = _log;
689
+ }
690
+ return defaultLogger;
691
+ };
692
+ defaultLogger.getLoggers = function getLoggers() {
693
+ return _loggersByName;
694
+ };
695
+
696
+ // ES6 default export, for compatibility
697
+ defaultLogger['default'] = defaultLogger;
698
+ return defaultLogger;
699
+ });
700
+ })(loglevel$1);
701
+ return loglevel$1.exports;
702
+ }
703
+
704
+ var loglevelExports = requireLoglevel();
705
+ var log = /*@__PURE__*/getDefaultExportFromCjs(loglevelExports);
706
+
707
+ function isFunction(value) {
708
+ return typeof value === 'function';
709
+ }
710
+
711
+ function createErrorClass(createImpl) {
712
+ var _super = function (instance) {
713
+ Error.call(instance);
714
+ instance.stack = new Error().stack;
715
+ };
716
+ var ctorFunc = createImpl(_super);
717
+ ctorFunc.prototype = Object.create(Error.prototype);
718
+ ctorFunc.prototype.constructor = ctorFunc;
719
+ return ctorFunc;
720
+ }
721
+
722
+ var UnsubscriptionError = createErrorClass(function (_super) {
723
+ return function UnsubscriptionErrorImpl(errors) {
724
+ _super(this);
725
+ this.message = errors ? errors.length + " errors occurred during unsubscription:\n" + errors.map(function (err, i) {
726
+ return i + 1 + ") " + err.toString();
727
+ }).join('\n ') : '';
728
+ this.name = 'UnsubscriptionError';
729
+ this.errors = errors;
730
+ };
731
+ });
732
+
733
+ function arrRemove(arr, item) {
734
+ if (arr) {
735
+ var index = arr.indexOf(item);
736
+ 0 <= index && arr.splice(index, 1);
737
+ }
738
+ }
739
+
740
+ var Subscription = function () {
741
+ function Subscription(initialTeardown) {
742
+ this.initialTeardown = initialTeardown;
743
+ this.closed = false;
744
+ this._parentage = null;
745
+ this._finalizers = null;
746
+ }
747
+ Subscription.prototype.unsubscribe = function () {
748
+ var e_1, _a, e_2, _b;
749
+ var errors;
750
+ if (!this.closed) {
751
+ this.closed = true;
752
+ var _parentage = this._parentage;
753
+ if (_parentage) {
754
+ this._parentage = null;
755
+ if (Array.isArray(_parentage)) {
756
+ try {
757
+ for (var _parentage_1 = __values(_parentage), _parentage_1_1 = _parentage_1.next(); !_parentage_1_1.done; _parentage_1_1 = _parentage_1.next()) {
758
+ var parent_1 = _parentage_1_1.value;
759
+ parent_1.remove(this);
760
+ }
761
+ } catch (e_1_1) {
762
+ e_1 = {
763
+ error: e_1_1
764
+ };
765
+ } finally {
766
+ try {
767
+ if (_parentage_1_1 && !_parentage_1_1.done && (_a = _parentage_1.return)) _a.call(_parentage_1);
768
+ } finally {
769
+ if (e_1) throw e_1.error;
770
+ }
771
+ }
772
+ } else {
773
+ _parentage.remove(this);
774
+ }
775
+ }
776
+ var initialFinalizer = this.initialTeardown;
777
+ if (isFunction(initialFinalizer)) {
778
+ try {
779
+ initialFinalizer();
780
+ } catch (e) {
781
+ errors = e instanceof UnsubscriptionError ? e.errors : [e];
782
+ }
783
+ }
784
+ var _finalizers = this._finalizers;
785
+ if (_finalizers) {
786
+ this._finalizers = null;
787
+ try {
788
+ for (var _finalizers_1 = __values(_finalizers), _finalizers_1_1 = _finalizers_1.next(); !_finalizers_1_1.done; _finalizers_1_1 = _finalizers_1.next()) {
789
+ var finalizer = _finalizers_1_1.value;
790
+ try {
791
+ execFinalizer(finalizer);
792
+ } catch (err) {
793
+ errors = errors !== null && errors !== void 0 ? errors : [];
794
+ if (err instanceof UnsubscriptionError) {
795
+ errors = __spreadArray(__spreadArray([], __read(errors)), __read(err.errors));
796
+ } else {
797
+ errors.push(err);
798
+ }
799
+ }
800
+ }
801
+ } catch (e_2_1) {
802
+ e_2 = {
803
+ error: e_2_1
804
+ };
805
+ } finally {
806
+ try {
807
+ if (_finalizers_1_1 && !_finalizers_1_1.done && (_b = _finalizers_1.return)) _b.call(_finalizers_1);
808
+ } finally {
809
+ if (e_2) throw e_2.error;
810
+ }
811
+ }
812
+ }
813
+ if (errors) {
814
+ throw new UnsubscriptionError(errors);
815
+ }
816
+ }
817
+ };
818
+ Subscription.prototype.add = function (teardown) {
819
+ var _a;
820
+ if (teardown && teardown !== this) {
821
+ if (this.closed) {
822
+ execFinalizer(teardown);
823
+ } else {
824
+ if (teardown instanceof Subscription) {
825
+ if (teardown.closed || teardown._hasParent(this)) {
826
+ return;
827
+ }
828
+ teardown._addParent(this);
829
+ }
830
+ (this._finalizers = (_a = this._finalizers) !== null && _a !== undefined ? _a : []).push(teardown);
831
+ }
832
+ }
833
+ };
834
+ Subscription.prototype._hasParent = function (parent) {
835
+ var _parentage = this._parentage;
836
+ return _parentage === parent || Array.isArray(_parentage) && _parentage.includes(parent);
837
+ };
838
+ Subscription.prototype._addParent = function (parent) {
839
+ var _parentage = this._parentage;
840
+ this._parentage = Array.isArray(_parentage) ? (_parentage.push(parent), _parentage) : _parentage ? [_parentage, parent] : parent;
841
+ };
842
+ Subscription.prototype._removeParent = function (parent) {
843
+ var _parentage = this._parentage;
844
+ if (_parentage === parent) {
845
+ this._parentage = null;
846
+ } else if (Array.isArray(_parentage)) {
847
+ arrRemove(_parentage, parent);
848
+ }
849
+ };
468
850
  Subscription.prototype.remove = function (teardown) {
469
851
  var _finalizers = this._finalizers;
470
852
  _finalizers && arrRemove(_finalizers, teardown);
@@ -627,1180 +1009,719 @@ var ConsumerObserver = function () {
627
1009
  }
628
1010
  };
629
1011
  return ConsumerObserver;
630
- }();
631
- var SafeSubscriber = function (_super) {
632
- __extends(SafeSubscriber, _super);
633
- function SafeSubscriber(observerOrNext, error, complete) {
634
- var _this = _super.call(this) || this;
635
- var partialObserver;
636
- if (isFunction(observerOrNext) || !observerOrNext) {
637
- partialObserver = {
638
- next: observerOrNext !== null && observerOrNext !== undefined ? observerOrNext : undefined,
639
- error: error !== null && error !== undefined ? error : undefined,
640
- complete: complete !== null && complete !== undefined ? complete : undefined
641
- };
642
- } else {
643
- {
644
- partialObserver = observerOrNext;
645
- }
646
- }
647
- _this.destination = new ConsumerObserver(partialObserver);
648
- return _this;
649
- }
650
- return SafeSubscriber;
651
- }(Subscriber);
652
- function handleUnhandledError(error) {
653
- {
654
- reportUnhandledError(error);
655
- }
656
- }
657
- function defaultErrorHandler(err) {
658
- throw err;
659
- }
660
- var EMPTY_OBSERVER = {
661
- closed: true,
662
- next: noop,
663
- error: defaultErrorHandler,
664
- complete: noop
665
- };
666
-
667
- var observable = function () {
668
- return typeof Symbol === 'function' && Symbol.observable || '@@observable';
669
- }();
670
-
671
- function identity(x) {
672
- return x;
673
- }
674
-
675
- function pipeFromArray(fns) {
676
- if (fns.length === 0) {
677
- return identity;
678
- }
679
- if (fns.length === 1) {
680
- return fns[0];
681
- }
682
- return function piped(input) {
683
- return fns.reduce(function (prev, fn) {
684
- return fn(prev);
685
- }, input);
686
- };
687
- }
688
-
689
- var Observable = function () {
690
- function Observable(subscribe) {
691
- if (subscribe) {
692
- this._subscribe = subscribe;
693
- }
694
- }
695
- Observable.prototype.lift = function (operator) {
696
- var observable = new Observable();
697
- observable.source = this;
698
- observable.operator = operator;
699
- return observable;
700
- };
701
- Observable.prototype.subscribe = function (observerOrNext, error, complete) {
702
- var _this = this;
703
- var subscriber = isSubscriber(observerOrNext) ? observerOrNext : new SafeSubscriber(observerOrNext, error, complete);
704
- errorContext(function () {
705
- var _a = _this,
706
- operator = _a.operator,
707
- source = _a.source;
708
- subscriber.add(operator ? operator.call(subscriber, source) : source ? _this._subscribe(subscriber) : _this._trySubscribe(subscriber));
709
- });
710
- return subscriber;
711
- };
712
- Observable.prototype._trySubscribe = function (sink) {
713
- try {
714
- return this._subscribe(sink);
715
- } catch (err) {
716
- sink.error(err);
717
- }
718
- };
719
- Observable.prototype.forEach = function (next, promiseCtor) {
720
- var _this = this;
721
- promiseCtor = getPromiseCtor(promiseCtor);
722
- return new promiseCtor(function (resolve, reject) {
723
- var subscriber = new SafeSubscriber({
724
- next: function (value) {
725
- try {
726
- next(value);
727
- } catch (err) {
728
- reject(err);
729
- subscriber.unsubscribe();
730
- }
731
- },
732
- error: reject,
733
- complete: resolve
734
- });
735
- _this.subscribe(subscriber);
736
- });
737
- };
738
- Observable.prototype._subscribe = function (subscriber) {
739
- var _a;
740
- return (_a = this.source) === null || _a === undefined ? undefined : _a.subscribe(subscriber);
741
- };
742
- Observable.prototype[observable] = function () {
743
- return this;
744
- };
745
- Observable.prototype.pipe = function () {
746
- var operations = [];
747
- for (var _i = 0; _i < arguments.length; _i++) {
748
- operations[_i] = arguments[_i];
749
- }
750
- return pipeFromArray(operations)(this);
751
- };
752
- Observable.prototype.toPromise = function (promiseCtor) {
753
- var _this = this;
754
- promiseCtor = getPromiseCtor(promiseCtor);
755
- return new promiseCtor(function (resolve, reject) {
756
- var value;
757
- _this.subscribe(function (x) {
758
- return value = x;
759
- }, function (err) {
760
- return reject(err);
761
- }, function () {
762
- return resolve(value);
763
- });
764
- });
765
- };
766
- Observable.create = function (subscribe) {
767
- return new Observable(subscribe);
768
- };
769
- return Observable;
770
- }();
771
- function getPromiseCtor(promiseCtor) {
772
- var _a;
773
- return (_a = promiseCtor !== null && promiseCtor !== undefined ? promiseCtor : config.Promise) !== null && _a !== undefined ? _a : Promise;
774
- }
775
- function isObserver(value) {
776
- return value && isFunction(value.next) && isFunction(value.error) && isFunction(value.complete);
777
- }
778
- function isSubscriber(value) {
779
- return value && value instanceof Subscriber || isObserver(value) && isSubscription(value);
780
- }
781
-
782
- function hasLift(source) {
783
- return isFunction(source === null || source === undefined ? undefined : source.lift);
784
- }
785
- function operate(init) {
786
- return function (source) {
787
- if (hasLift(source)) {
788
- return source.lift(function (liftedSource) {
789
- try {
790
- return init(liftedSource, this);
791
- } catch (err) {
792
- this.error(err);
793
- }
794
- });
795
- }
796
- throw new TypeError('Unable to lift unknown Observable type');
797
- };
798
- }
799
-
800
- function createOperatorSubscriber(destination, onNext, onComplete, onError, onFinalize) {
801
- return new OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize);
802
- }
803
- var OperatorSubscriber = function (_super) {
804
- __extends(OperatorSubscriber, _super);
805
- function OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize, shouldUnsubscribe) {
806
- var _this = _super.call(this, destination) || this;
807
- _this.onFinalize = onFinalize;
808
- _this.shouldUnsubscribe = shouldUnsubscribe;
809
- _this._next = onNext ? function (value) {
810
- try {
811
- onNext(value);
812
- } catch (err) {
813
- destination.error(err);
814
- }
815
- } : _super.prototype._next;
816
- _this._error = onError ? function (err) {
817
- try {
818
- onError(err);
819
- } catch (err) {
820
- destination.error(err);
821
- } finally {
822
- this.unsubscribe();
823
- }
824
- } : _super.prototype._error;
825
- _this._complete = onComplete ? function () {
826
- try {
827
- onComplete();
828
- } catch (err) {
829
- destination.error(err);
830
- } finally {
831
- this.unsubscribe();
1012
+ }();
1013
+ var SafeSubscriber = function (_super) {
1014
+ __extends(SafeSubscriber, _super);
1015
+ function SafeSubscriber(observerOrNext, error, complete) {
1016
+ var _this = _super.call(this) || this;
1017
+ var partialObserver;
1018
+ if (isFunction(observerOrNext) || !observerOrNext) {
1019
+ partialObserver = {
1020
+ next: observerOrNext !== null && observerOrNext !== undefined ? observerOrNext : undefined,
1021
+ error: error !== null && error !== undefined ? error : undefined,
1022
+ complete: complete !== null && complete !== undefined ? complete : undefined
1023
+ };
1024
+ } else {
1025
+ {
1026
+ partialObserver = observerOrNext;
832
1027
  }
833
- } : _super.prototype._complete;
1028
+ }
1029
+ _this.destination = new ConsumerObserver(partialObserver);
834
1030
  return _this;
835
1031
  }
836
- OperatorSubscriber.prototype.unsubscribe = function () {
837
- var _a;
838
- if (!this.shouldUnsubscribe || this.shouldUnsubscribe()) {
839
- var closed_1 = this.closed;
840
- _super.prototype.unsubscribe.call(this);
841
- !closed_1 && ((_a = this.onFinalize) === null || _a === undefined ? undefined : _a.call(this));
842
- }
843
- };
844
- return OperatorSubscriber;
1032
+ return SafeSubscriber;
845
1033
  }(Subscriber);
1034
+ function handleUnhandledError(error) {
1035
+ {
1036
+ reportUnhandledError(error);
1037
+ }
1038
+ }
1039
+ function defaultErrorHandler(err) {
1040
+ throw err;
1041
+ }
1042
+ var EMPTY_OBSERVER = {
1043
+ closed: true,
1044
+ next: noop,
1045
+ error: defaultErrorHandler,
1046
+ complete: noop
1047
+ };
846
1048
 
847
- var ObjectUnsubscribedError = createErrorClass(function (_super) {
848
- return function ObjectUnsubscribedErrorImpl() {
849
- _super(this);
850
- this.name = 'ObjectUnsubscribedError';
851
- this.message = 'object unsubscribed';
852
- };
853
- });
1049
+ var observable = function () {
1050
+ return typeof Symbol === 'function' && Symbol.observable || '@@observable';
1051
+ }();
854
1052
 
855
- var Subject = function (_super) {
856
- __extends(Subject, _super);
857
- function Subject() {
858
- var _this = _super.call(this) || this;
859
- _this.closed = false;
860
- _this.currentObservers = null;
861
- _this.observers = [];
862
- _this.isStopped = false;
863
- _this.hasError = false;
864
- _this.thrownError = null;
865
- return _this;
1053
+ function identity(x) {
1054
+ return x;
1055
+ }
1056
+
1057
+ function pipeFromArray(fns) {
1058
+ if (fns.length === 0) {
1059
+ return identity;
866
1060
  }
867
- Subject.prototype.lift = function (operator) {
868
- var subject = new AnonymousSubject(this, this);
869
- subject.operator = operator;
870
- return subject;
1061
+ if (fns.length === 1) {
1062
+ return fns[0];
1063
+ }
1064
+ return function piped(input) {
1065
+ return fns.reduce(function (prev, fn) {
1066
+ return fn(prev);
1067
+ }, input);
871
1068
  };
872
- Subject.prototype._throwIfClosed = function () {
873
- if (this.closed) {
874
- throw new ObjectUnsubscribedError();
1069
+ }
1070
+
1071
+ var Observable = function () {
1072
+ function Observable(subscribe) {
1073
+ if (subscribe) {
1074
+ this._subscribe = subscribe;
875
1075
  }
1076
+ }
1077
+ Observable.prototype.lift = function (operator) {
1078
+ var observable = new Observable();
1079
+ observable.source = this;
1080
+ observable.operator = operator;
1081
+ return observable;
876
1082
  };
877
- Subject.prototype.next = function (value) {
878
- var _this = this;
879
- errorContext(function () {
880
- var e_1, _a;
881
- _this._throwIfClosed();
882
- if (!_this.isStopped) {
883
- if (!_this.currentObservers) {
884
- _this.currentObservers = Array.from(_this.observers);
885
- }
886
- try {
887
- for (var _b = __values(_this.currentObservers), _c = _b.next(); !_c.done; _c = _b.next()) {
888
- var observer = _c.value;
889
- observer.next(value);
890
- }
891
- } catch (e_1_1) {
892
- e_1 = {
893
- error: e_1_1
894
- };
895
- } finally {
896
- try {
897
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
898
- } finally {
899
- if (e_1) throw e_1.error;
900
- }
901
- }
902
- }
903
- });
904
- };
905
- Subject.prototype.error = function (err) {
906
- var _this = this;
907
- errorContext(function () {
908
- _this._throwIfClosed();
909
- if (!_this.isStopped) {
910
- _this.hasError = _this.isStopped = true;
911
- _this.thrownError = err;
912
- var observers = _this.observers;
913
- while (observers.length) {
914
- observers.shift().error(err);
915
- }
916
- }
917
- });
918
- };
919
- Subject.prototype.complete = function () {
1083
+ Observable.prototype.subscribe = function (observerOrNext, error, complete) {
920
1084
  var _this = this;
1085
+ var subscriber = isSubscriber(observerOrNext) ? observerOrNext : new SafeSubscriber(observerOrNext, error, complete);
921
1086
  errorContext(function () {
922
- _this._throwIfClosed();
923
- if (!_this.isStopped) {
924
- _this.isStopped = true;
925
- var observers = _this.observers;
926
- while (observers.length) {
927
- observers.shift().complete();
928
- }
929
- }
1087
+ var _a = _this,
1088
+ operator = _a.operator,
1089
+ source = _a.source;
1090
+ subscriber.add(operator ? operator.call(subscriber, source) : source ? _this._subscribe(subscriber) : _this._trySubscribe(subscriber));
930
1091
  });
1092
+ return subscriber;
931
1093
  };
932
- Subject.prototype.unsubscribe = function () {
933
- this.isStopped = this.closed = true;
934
- this.observers = this.currentObservers = null;
935
- };
936
- Object.defineProperty(Subject.prototype, "observed", {
937
- get: function () {
938
- var _a;
939
- return ((_a = this.observers) === null || _a === undefined ? undefined : _a.length) > 0;
940
- },
941
- enumerable: false,
942
- configurable: true
943
- });
944
- Subject.prototype._trySubscribe = function (subscriber) {
945
- this._throwIfClosed();
946
- return _super.prototype._trySubscribe.call(this, subscriber);
947
- };
948
- Subject.prototype._subscribe = function (subscriber) {
949
- this._throwIfClosed();
950
- this._checkFinalizedStatuses(subscriber);
951
- return this._innerSubscribe(subscriber);
1094
+ Observable.prototype._trySubscribe = function (sink) {
1095
+ try {
1096
+ return this._subscribe(sink);
1097
+ } catch (err) {
1098
+ sink.error(err);
1099
+ }
952
1100
  };
953
- Subject.prototype._innerSubscribe = function (subscriber) {
1101
+ Observable.prototype.forEach = function (next, promiseCtor) {
954
1102
  var _this = this;
955
- var _a = this,
956
- hasError = _a.hasError,
957
- isStopped = _a.isStopped,
958
- observers = _a.observers;
959
- if (hasError || isStopped) {
960
- return EMPTY_SUBSCRIPTION;
961
- }
962
- this.currentObservers = null;
963
- observers.push(subscriber);
964
- return new Subscription(function () {
965
- _this.currentObservers = null;
966
- arrRemove(observers, subscriber);
1103
+ promiseCtor = getPromiseCtor(promiseCtor);
1104
+ return new promiseCtor(function (resolve, reject) {
1105
+ var subscriber = new SafeSubscriber({
1106
+ next: function (value) {
1107
+ try {
1108
+ next(value);
1109
+ } catch (err) {
1110
+ reject(err);
1111
+ subscriber.unsubscribe();
1112
+ }
1113
+ },
1114
+ error: reject,
1115
+ complete: resolve
1116
+ });
1117
+ _this.subscribe(subscriber);
967
1118
  });
968
1119
  };
969
- Subject.prototype._checkFinalizedStatuses = function (subscriber) {
970
- var _a = this,
971
- hasError = _a.hasError,
972
- thrownError = _a.thrownError,
973
- isStopped = _a.isStopped;
974
- if (hasError) {
975
- subscriber.error(thrownError);
976
- } else if (isStopped) {
977
- subscriber.complete();
978
- }
979
- };
980
- Subject.prototype.asObservable = function () {
981
- var observable = new Observable();
982
- observable.source = this;
983
- return observable;
984
- };
985
- Subject.create = function (destination, source) {
986
- return new AnonymousSubject(destination, source);
987
- };
988
- return Subject;
989
- }(Observable);
990
- var AnonymousSubject = function (_super) {
991
- __extends(AnonymousSubject, _super);
992
- function AnonymousSubject(destination, source) {
993
- var _this = _super.call(this) || this;
994
- _this.destination = destination;
995
- _this.source = source;
996
- return _this;
997
- }
998
- AnonymousSubject.prototype.next = function (value) {
999
- var _a, _b;
1000
- (_b = (_a = this.destination) === null || _a === undefined ? undefined : _a.next) === null || _b === undefined ? undefined : _b.call(_a, value);
1120
+ Observable.prototype._subscribe = function (subscriber) {
1121
+ var _a;
1122
+ return (_a = this.source) === null || _a === undefined ? undefined : _a.subscribe(subscriber);
1001
1123
  };
1002
- AnonymousSubject.prototype.error = function (err) {
1003
- var _a, _b;
1004
- (_b = (_a = this.destination) === null || _a === undefined ? undefined : _a.error) === null || _b === undefined ? undefined : _b.call(_a, err);
1124
+ Observable.prototype[observable] = function () {
1125
+ return this;
1005
1126
  };
1006
- AnonymousSubject.prototype.complete = function () {
1007
- var _a, _b;
1008
- (_b = (_a = this.destination) === null || _a === undefined ? undefined : _a.complete) === null || _b === undefined ? undefined : _b.call(_a);
1127
+ Observable.prototype.pipe = function () {
1128
+ var operations = [];
1129
+ for (var _i = 0; _i < arguments.length; _i++) {
1130
+ operations[_i] = arguments[_i];
1131
+ }
1132
+ return pipeFromArray(operations)(this);
1009
1133
  };
1010
- AnonymousSubject.prototype._subscribe = function (subscriber) {
1011
- var _a, _b;
1012
- return (_b = (_a = this.source) === null || _a === undefined ? undefined : _a.subscribe(subscriber)) !== null && _b !== undefined ? _b : EMPTY_SUBSCRIPTION;
1134
+ Observable.prototype.toPromise = function (promiseCtor) {
1135
+ var _this = this;
1136
+ promiseCtor = getPromiseCtor(promiseCtor);
1137
+ return new promiseCtor(function (resolve, reject) {
1138
+ var value;
1139
+ _this.subscribe(function (x) {
1140
+ return value = x;
1141
+ }, function (err) {
1142
+ return reject(err);
1143
+ }, function () {
1144
+ return resolve(value);
1145
+ });
1146
+ });
1013
1147
  };
1014
- return AnonymousSubject;
1015
- }(Subject);
1016
-
1017
- var EmptyError = createErrorClass(function (_super) {
1018
- return function EmptyErrorImpl() {
1019
- _super(this);
1020
- this.name = 'EmptyError';
1021
- this.message = 'no elements in sequence';
1148
+ Observable.create = function (subscribe) {
1149
+ return new Observable(subscribe);
1022
1150
  };
1023
- });
1024
-
1025
- function firstValueFrom(source, config) {
1026
- return new Promise(function (resolve, reject) {
1027
- var subscriber = new SafeSubscriber({
1028
- next: function (value) {
1029
- resolve(value);
1030
- subscriber.unsubscribe();
1031
- },
1032
- error: reject,
1033
- complete: function () {
1034
- {
1035
- reject(new EmptyError());
1036
- }
1037
- }
1038
- });
1039
- source.subscribe(subscriber);
1040
- });
1151
+ return Observable;
1152
+ }();
1153
+ function getPromiseCtor(promiseCtor) {
1154
+ var _a;
1155
+ return (_a = promiseCtor !== null && promiseCtor !== undefined ? promiseCtor : config.Promise) !== null && _a !== undefined ? _a : Promise;
1041
1156
  }
1042
-
1043
- function filter(predicate, thisArg) {
1044
- return operate(function (source, subscriber) {
1045
- var index = 0;
1046
- source.subscribe(createOperatorSubscriber(subscriber, function (value) {
1047
- return predicate.call(thisArg, value, index++) && subscriber.next(value);
1048
- }));
1049
- });
1157
+ function isObserver(value) {
1158
+ return value && isFunction(value.next) && isFunction(value.error) && isFunction(value.complete);
1050
1159
  }
1051
-
1052
- function getDefaultExportFromCjs (x) {
1053
- return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
1160
+ function isSubscriber(value) {
1161
+ return value && value instanceof Subscriber || isObserver(value) && isSubscription(value);
1054
1162
  }
1055
1163
 
1056
- var loglevel$1 = {exports: {}};
1057
-
1058
- /*
1059
- * loglevel - https://github.com/pimterry/loglevel
1060
- *
1061
- * Copyright (c) 2013 Tim Perry
1062
- * Licensed under the MIT license.
1063
- */
1064
- var loglevel = loglevel$1.exports;
1065
- var hasRequiredLoglevel;
1066
- function requireLoglevel() {
1067
- if (hasRequiredLoglevel) return loglevel$1.exports;
1068
- hasRequiredLoglevel = 1;
1069
- (function (module) {
1070
- (function (root, definition) {
1071
-
1072
- if (module.exports) {
1073
- module.exports = definition();
1074
- } else {
1075
- root.log = definition();
1076
- }
1077
- })(loglevel, function () {
1078
-
1079
- // Slightly dubious tricks to cut down minimized file size
1080
- var noop = function () {};
1081
- var undefinedType = "undefined";
1082
- var isIE = typeof window !== undefinedType && typeof window.navigator !== undefinedType && /Trident\/|MSIE /.test(window.navigator.userAgent);
1083
- var logMethods = ["trace", "debug", "info", "warn", "error"];
1084
- var _loggersByName = {};
1085
- var defaultLogger = null;
1086
-
1087
- // Cross-browser bind equivalent that works at least back to IE6
1088
- function bindMethod(obj, methodName) {
1089
- var method = obj[methodName];
1090
- if (typeof method.bind === 'function') {
1091
- return method.bind(obj);
1092
- } else {
1093
- try {
1094
- return Function.prototype.bind.call(method, obj);
1095
- } catch (e) {
1096
- // Missing bind shim or IE8 + Modernizr, fallback to wrapping
1097
- return function () {
1098
- return Function.prototype.apply.apply(method, [obj, arguments]);
1099
- };
1100
- }
1101
- }
1102
- }
1103
-
1104
- // Trace() doesn't print the message in IE, so for that case we need to wrap it
1105
- function traceForIE() {
1106
- if (console.log) {
1107
- if (console.log.apply) {
1108
- console.log.apply(console, arguments);
1109
- } else {
1110
- // In old IE, native console methods themselves don't have apply().
1111
- Function.prototype.apply.apply(console.log, [console, arguments]);
1112
- }
1113
- }
1114
- if (console.trace) console.trace();
1115
- }
1116
-
1117
- // Build the best logging method possible for this env
1118
- // Wherever possible we want to bind, not wrap, to preserve stack traces
1119
- function realMethod(methodName) {
1120
- if (methodName === 'debug') {
1121
- methodName = 'log';
1122
- }
1123
- if (typeof console === undefinedType) {
1124
- return false; // No method possible, for now - fixed later by enableLoggingWhenConsoleArrives
1125
- } else if (methodName === 'trace' && isIE) {
1126
- return traceForIE;
1127
- } else if (console[methodName] !== undefined) {
1128
- return bindMethod(console, methodName);
1129
- } else if (console.log !== undefined) {
1130
- return bindMethod(console, 'log');
1131
- } else {
1132
- return noop;
1133
- }
1134
- }
1135
-
1136
- // These private functions always need `this` to be set properly
1137
-
1138
- function replaceLoggingMethods() {
1139
- /*jshint validthis:true */
1140
- var level = this.getLevel();
1141
-
1142
- // Replace the actual methods.
1143
- for (var i = 0; i < logMethods.length; i++) {
1144
- var methodName = logMethods[i];
1145
- this[methodName] = i < level ? noop : this.methodFactory(methodName, level, this.name);
1146
- }
1147
-
1148
- // Define log.log as an alias for log.debug
1149
- this.log = this.debug;
1150
-
1151
- // Return any important warnings.
1152
- if (typeof console === undefinedType && level < this.levels.SILENT) {
1153
- return "No console available for logging";
1164
+ function hasLift(source) {
1165
+ return isFunction(source === null || source === undefined ? undefined : source.lift);
1166
+ }
1167
+ function operate(init) {
1168
+ return function (source) {
1169
+ if (hasLift(source)) {
1170
+ return source.lift(function (liftedSource) {
1171
+ try {
1172
+ return init(liftedSource, this);
1173
+ } catch (err) {
1174
+ this.error(err);
1154
1175
  }
1155
- }
1176
+ });
1177
+ }
1178
+ throw new TypeError('Unable to lift unknown Observable type');
1179
+ };
1180
+ }
1156
1181
 
1157
- // In old IE versions, the console isn't present until you first open it.
1158
- // We build realMethod() replacements here that regenerate logging methods
1159
- function enableLoggingWhenConsoleArrives(methodName) {
1160
- return function () {
1161
- if (typeof console !== undefinedType) {
1162
- replaceLoggingMethods.call(this);
1163
- this[methodName].apply(this, arguments);
1164
- }
1165
- };
1182
+ function createOperatorSubscriber(destination, onNext, onComplete, onError, onFinalize) {
1183
+ return new OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize);
1184
+ }
1185
+ var OperatorSubscriber = function (_super) {
1186
+ __extends(OperatorSubscriber, _super);
1187
+ function OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize, shouldUnsubscribe) {
1188
+ var _this = _super.call(this, destination) || this;
1189
+ _this.onFinalize = onFinalize;
1190
+ _this.shouldUnsubscribe = shouldUnsubscribe;
1191
+ _this._next = onNext ? function (value) {
1192
+ try {
1193
+ onNext(value);
1194
+ } catch (err) {
1195
+ destination.error(err);
1166
1196
  }
1167
-
1168
- // By default, we use closely bound real methods wherever possible, and
1169
- // otherwise we wait for a console to appear, and then try again.
1170
- function defaultMethodFactory(methodName, _level, _loggerName) {
1171
- /*jshint validthis:true */
1172
- return realMethod(methodName) || enableLoggingWhenConsoleArrives.apply(this, arguments);
1197
+ } : _super.prototype._next;
1198
+ _this._error = onError ? function (err) {
1199
+ try {
1200
+ onError(err);
1201
+ } catch (err) {
1202
+ destination.error(err);
1203
+ } finally {
1204
+ this.unsubscribe();
1173
1205
  }
1174
- function Logger(name, factory) {
1175
- // Private instance variables.
1176
- var self = this;
1177
- /**
1178
- * The level inherited from a parent logger (or a global default). We
1179
- * cache this here rather than delegating to the parent so that it stays
1180
- * in sync with the actual logging methods that we have installed (the
1181
- * parent could change levels but we might not have rebuilt the loggers
1182
- * in this child yet).
1183
- * @type {number}
1184
- */
1185
- var inheritedLevel;
1186
- /**
1187
- * The default level for this logger, if any. If set, this overrides
1188
- * `inheritedLevel`.
1189
- * @type {number|null}
1190
- */
1191
- var defaultLevel;
1192
- /**
1193
- * A user-specific level for this logger. If set, this overrides
1194
- * `defaultLevel`.
1195
- * @type {number|null}
1196
- */
1197
- var userLevel;
1198
- var storageKey = "loglevel";
1199
- if (typeof name === "string") {
1200
- storageKey += ":" + name;
1201
- } else if (typeof name === "symbol") {
1202
- storageKey = undefined;
1203
- }
1204
- function persistLevelIfPossible(levelNum) {
1205
- var levelName = (logMethods[levelNum] || 'silent').toUpperCase();
1206
- if (typeof window === undefinedType || !storageKey) return;
1206
+ } : _super.prototype._error;
1207
+ _this._complete = onComplete ? function () {
1208
+ try {
1209
+ onComplete();
1210
+ } catch (err) {
1211
+ destination.error(err);
1212
+ } finally {
1213
+ this.unsubscribe();
1214
+ }
1215
+ } : _super.prototype._complete;
1216
+ return _this;
1217
+ }
1218
+ OperatorSubscriber.prototype.unsubscribe = function () {
1219
+ var _a;
1220
+ if (!this.shouldUnsubscribe || this.shouldUnsubscribe()) {
1221
+ var closed_1 = this.closed;
1222
+ _super.prototype.unsubscribe.call(this);
1223
+ !closed_1 && ((_a = this.onFinalize) === null || _a === undefined ? undefined : _a.call(this));
1224
+ }
1225
+ };
1226
+ return OperatorSubscriber;
1227
+ }(Subscriber);
1207
1228
 
1208
- // Use localStorage if available
1209
- try {
1210
- window.localStorage[storageKey] = levelName;
1211
- return;
1212
- } catch (ignore) {}
1229
+ var ObjectUnsubscribedError = createErrorClass(function (_super) {
1230
+ return function ObjectUnsubscribedErrorImpl() {
1231
+ _super(this);
1232
+ this.name = 'ObjectUnsubscribedError';
1233
+ this.message = 'object unsubscribed';
1234
+ };
1235
+ });
1213
1236
 
1214
- // Use session cookie as fallback
1215
- try {
1216
- window.document.cookie = encodeURIComponent(storageKey) + "=" + levelName + ";";
1217
- } catch (ignore) {}
1237
+ var Subject = function (_super) {
1238
+ __extends(Subject, _super);
1239
+ function Subject() {
1240
+ var _this = _super.call(this) || this;
1241
+ _this.closed = false;
1242
+ _this.currentObservers = null;
1243
+ _this.observers = [];
1244
+ _this.isStopped = false;
1245
+ _this.hasError = false;
1246
+ _this.thrownError = null;
1247
+ return _this;
1248
+ }
1249
+ Subject.prototype.lift = function (operator) {
1250
+ var subject = new AnonymousSubject(this, this);
1251
+ subject.operator = operator;
1252
+ return subject;
1253
+ };
1254
+ Subject.prototype._throwIfClosed = function () {
1255
+ if (this.closed) {
1256
+ throw new ObjectUnsubscribedError();
1257
+ }
1258
+ };
1259
+ Subject.prototype.next = function (value) {
1260
+ var _this = this;
1261
+ errorContext(function () {
1262
+ var e_1, _a;
1263
+ _this._throwIfClosed();
1264
+ if (!_this.isStopped) {
1265
+ if (!_this.currentObservers) {
1266
+ _this.currentObservers = Array.from(_this.observers);
1218
1267
  }
1219
- function getPersistedLevel() {
1220
- var storedLevel;
1221
- if (typeof window === undefinedType || !storageKey) return;
1222
- try {
1223
- storedLevel = window.localStorage[storageKey];
1224
- } catch (ignore) {}
1225
-
1226
- // Fallback to cookies if local storage gives us nothing
1227
- if (typeof storedLevel === undefinedType) {
1228
- try {
1229
- var cookie = window.document.cookie;
1230
- var cookieName = encodeURIComponent(storageKey);
1231
- var location = cookie.indexOf(cookieName + "=");
1232
- if (location !== -1) {
1233
- storedLevel = /^([^;]+)/.exec(cookie.slice(location + cookieName.length + 1))[1];
1234
- }
1235
- } catch (ignore) {}
1268
+ try {
1269
+ for (var _b = __values(_this.currentObservers), _c = _b.next(); !_c.done; _c = _b.next()) {
1270
+ var observer = _c.value;
1271
+ observer.next(value);
1236
1272
  }
1237
-
1238
- // If the stored level is not valid, treat it as if nothing was stored.
1239
- if (self.levels[storedLevel] === undefined) {
1240
- storedLevel = undefined;
1273
+ } catch (e_1_1) {
1274
+ e_1 = {
1275
+ error: e_1_1
1276
+ };
1277
+ } finally {
1278
+ try {
1279
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
1280
+ } finally {
1281
+ if (e_1) throw e_1.error;
1241
1282
  }
1242
- return storedLevel;
1243
1283
  }
1244
- function clearPersistedLevel() {
1245
- if (typeof window === undefinedType || !storageKey) return;
1246
-
1247
- // Use localStorage if available
1248
- try {
1249
- window.localStorage.removeItem(storageKey);
1250
- } catch (ignore) {}
1251
-
1252
- // Use session cookie as fallback
1253
- try {
1254
- window.document.cookie = encodeURIComponent(storageKey) + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC";
1255
- } catch (ignore) {}
1284
+ }
1285
+ });
1286
+ };
1287
+ Subject.prototype.error = function (err) {
1288
+ var _this = this;
1289
+ errorContext(function () {
1290
+ _this._throwIfClosed();
1291
+ if (!_this.isStopped) {
1292
+ _this.hasError = _this.isStopped = true;
1293
+ _this.thrownError = err;
1294
+ var observers = _this.observers;
1295
+ while (observers.length) {
1296
+ observers.shift().error(err);
1256
1297
  }
1257
- function normalizeLevel(input) {
1258
- var level = input;
1259
- if (typeof level === "string" && self.levels[level.toUpperCase()] !== undefined) {
1260
- level = self.levels[level.toUpperCase()];
1261
- }
1262
- if (typeof level === "number" && level >= 0 && level <= self.levels.SILENT) {
1263
- return level;
1264
- } else {
1265
- throw new TypeError("log.setLevel() called with invalid level: " + input);
1266
- }
1298
+ }
1299
+ });
1300
+ };
1301
+ Subject.prototype.complete = function () {
1302
+ var _this = this;
1303
+ errorContext(function () {
1304
+ _this._throwIfClosed();
1305
+ if (!_this.isStopped) {
1306
+ _this.isStopped = true;
1307
+ var observers = _this.observers;
1308
+ while (observers.length) {
1309
+ observers.shift().complete();
1267
1310
  }
1311
+ }
1312
+ });
1313
+ };
1314
+ Subject.prototype.unsubscribe = function () {
1315
+ this.isStopped = this.closed = true;
1316
+ this.observers = this.currentObservers = null;
1317
+ };
1318
+ Object.defineProperty(Subject.prototype, "observed", {
1319
+ get: function () {
1320
+ var _a;
1321
+ return ((_a = this.observers) === null || _a === undefined ? undefined : _a.length) > 0;
1322
+ },
1323
+ enumerable: false,
1324
+ configurable: true
1325
+ });
1326
+ Subject.prototype._trySubscribe = function (subscriber) {
1327
+ this._throwIfClosed();
1328
+ return _super.prototype._trySubscribe.call(this, subscriber);
1329
+ };
1330
+ Subject.prototype._subscribe = function (subscriber) {
1331
+ this._throwIfClosed();
1332
+ this._checkFinalizedStatuses(subscriber);
1333
+ return this._innerSubscribe(subscriber);
1334
+ };
1335
+ Subject.prototype._innerSubscribe = function (subscriber) {
1336
+ var _this = this;
1337
+ var _a = this,
1338
+ hasError = _a.hasError,
1339
+ isStopped = _a.isStopped,
1340
+ observers = _a.observers;
1341
+ if (hasError || isStopped) {
1342
+ return EMPTY_SUBSCRIPTION;
1343
+ }
1344
+ this.currentObservers = null;
1345
+ observers.push(subscriber);
1346
+ return new Subscription(function () {
1347
+ _this.currentObservers = null;
1348
+ arrRemove(observers, subscriber);
1349
+ });
1350
+ };
1351
+ Subject.prototype._checkFinalizedStatuses = function (subscriber) {
1352
+ var _a = this,
1353
+ hasError = _a.hasError,
1354
+ thrownError = _a.thrownError,
1355
+ isStopped = _a.isStopped;
1356
+ if (hasError) {
1357
+ subscriber.error(thrownError);
1358
+ } else if (isStopped) {
1359
+ subscriber.complete();
1360
+ }
1361
+ };
1362
+ Subject.prototype.asObservable = function () {
1363
+ var observable = new Observable();
1364
+ observable.source = this;
1365
+ return observable;
1366
+ };
1367
+ Subject.create = function (destination, source) {
1368
+ return new AnonymousSubject(destination, source);
1369
+ };
1370
+ return Subject;
1371
+ }(Observable);
1372
+ var AnonymousSubject = function (_super) {
1373
+ __extends(AnonymousSubject, _super);
1374
+ function AnonymousSubject(destination, source) {
1375
+ var _this = _super.call(this) || this;
1376
+ _this.destination = destination;
1377
+ _this.source = source;
1378
+ return _this;
1379
+ }
1380
+ AnonymousSubject.prototype.next = function (value) {
1381
+ var _a, _b;
1382
+ (_b = (_a = this.destination) === null || _a === undefined ? undefined : _a.next) === null || _b === undefined ? undefined : _b.call(_a, value);
1383
+ };
1384
+ AnonymousSubject.prototype.error = function (err) {
1385
+ var _a, _b;
1386
+ (_b = (_a = this.destination) === null || _a === undefined ? undefined : _a.error) === null || _b === undefined ? undefined : _b.call(_a, err);
1387
+ };
1388
+ AnonymousSubject.prototype.complete = function () {
1389
+ var _a, _b;
1390
+ (_b = (_a = this.destination) === null || _a === undefined ? undefined : _a.complete) === null || _b === undefined ? undefined : _b.call(_a);
1391
+ };
1392
+ AnonymousSubject.prototype._subscribe = function (subscriber) {
1393
+ var _a, _b;
1394
+ return (_b = (_a = this.source) === null || _a === undefined ? undefined : _a.subscribe(subscriber)) !== null && _b !== undefined ? _b : EMPTY_SUBSCRIPTION;
1395
+ };
1396
+ return AnonymousSubject;
1397
+ }(Subject);
1268
1398
 
1269
- /*
1270
- *
1271
- * Public logger API - see https://github.com/pimterry/loglevel for details
1272
- *
1273
- */
1274
-
1275
- self.name = name;
1276
- self.levels = {
1277
- "TRACE": 0,
1278
- "DEBUG": 1,
1279
- "INFO": 2,
1280
- "WARN": 3,
1281
- "ERROR": 4,
1282
- "SILENT": 5
1283
- };
1284
- self.methodFactory = factory || defaultMethodFactory;
1285
- self.getLevel = function () {
1286
- if (userLevel != null) {
1287
- return userLevel;
1288
- } else if (defaultLevel != null) {
1289
- return defaultLevel;
1290
- } else {
1291
- return inheritedLevel;
1292
- }
1293
- };
1294
- self.setLevel = function (level, persist) {
1295
- userLevel = normalizeLevel(level);
1296
- if (persist !== false) {
1297
- // defaults to true
1298
- persistLevelIfPossible(userLevel);
1299
- }
1300
-
1301
- // NOTE: in v2, this should call rebuild(), which updates children.
1302
- return replaceLoggingMethods.call(self);
1303
- };
1304
- self.setDefaultLevel = function (level) {
1305
- defaultLevel = normalizeLevel(level);
1306
- if (!getPersistedLevel()) {
1307
- self.setLevel(level, false);
1308
- }
1309
- };
1310
- self.resetLevel = function () {
1311
- userLevel = null;
1312
- clearPersistedLevel();
1313
- replaceLoggingMethods.call(self);
1314
- };
1315
- self.enableAll = function (persist) {
1316
- self.setLevel(self.levels.TRACE, persist);
1317
- };
1318
- self.disableAll = function (persist) {
1319
- self.setLevel(self.levels.SILENT, persist);
1320
- };
1321
- self.rebuild = function () {
1322
- if (defaultLogger !== self) {
1323
- inheritedLevel = normalizeLevel(defaultLogger.getLevel());
1324
- }
1325
- replaceLoggingMethods.call(self);
1326
- if (defaultLogger === self) {
1327
- for (var childName in _loggersByName) {
1328
- _loggersByName[childName].rebuild();
1329
- }
1330
- }
1331
- };
1399
+ var EmptyError = createErrorClass(function (_super) {
1400
+ return function EmptyErrorImpl() {
1401
+ _super(this);
1402
+ this.name = 'EmptyError';
1403
+ this.message = 'no elements in sequence';
1404
+ };
1405
+ });
1332
1406
 
1333
- // Initialize all the internal levels.
1334
- inheritedLevel = normalizeLevel(defaultLogger ? defaultLogger.getLevel() : "WARN");
1335
- var initialLevel = getPersistedLevel();
1336
- if (initialLevel != null) {
1337
- userLevel = normalizeLevel(initialLevel);
1407
+ function firstValueFrom(source, config) {
1408
+ return new Promise(function (resolve, reject) {
1409
+ var subscriber = new SafeSubscriber({
1410
+ next: function (value) {
1411
+ resolve(value);
1412
+ subscriber.unsubscribe();
1413
+ },
1414
+ error: reject,
1415
+ complete: function () {
1416
+ {
1417
+ reject(new EmptyError());
1338
1418
  }
1339
- replaceLoggingMethods.call(self);
1340
1419
  }
1420
+ });
1421
+ source.subscribe(subscriber);
1422
+ });
1423
+ }
1341
1424
 
1342
- /*
1343
- *
1344
- * Top-level API
1345
- *
1346
- */
1347
-
1348
- defaultLogger = new Logger();
1349
- defaultLogger.getLogger = function getLogger(name) {
1350
- if (typeof name !== "symbol" && typeof name !== "string" || name === "") {
1351
- throw new TypeError("You must supply a name when creating a logger.");
1352
- }
1353
- var logger = _loggersByName[name];
1354
- if (!logger) {
1355
- logger = _loggersByName[name] = new Logger(name, defaultLogger.methodFactory);
1356
- }
1357
- return logger;
1358
- };
1359
-
1360
- // Grab the current global log variable in case of overwrite
1361
- var _log = typeof window !== undefinedType ? window.log : undefined;
1362
- defaultLogger.noConflict = function () {
1363
- if (typeof window !== undefinedType && window.log === defaultLogger) {
1364
- window.log = _log;
1365
- }
1366
- return defaultLogger;
1367
- };
1368
- defaultLogger.getLoggers = function getLoggers() {
1369
- return _loggersByName;
1370
- };
1425
+ function map(project, thisArg) {
1426
+ return operate(function (source, subscriber) {
1427
+ var index = 0;
1428
+ source.subscribe(createOperatorSubscriber(subscriber, function (value) {
1429
+ subscriber.next(project.call(thisArg, value, index++));
1430
+ }));
1431
+ });
1432
+ }
1371
1433
 
1372
- // ES6 default export, for compatibility
1373
- defaultLogger['default'] = defaultLogger;
1374
- return defaultLogger;
1375
- });
1376
- })(loglevel$1);
1377
- return loglevel$1.exports;
1434
+ function filter(predicate, thisArg) {
1435
+ return operate(function (source, subscriber) {
1436
+ var index = 0;
1437
+ source.subscribe(createOperatorSubscriber(subscriber, function (value) {
1438
+ return predicate.call(thisArg, value, index++) && subscriber.next(value);
1439
+ }));
1440
+ });
1378
1441
  }
1379
1442
 
1380
- var loglevelExports = requireLoglevel();
1381
- var log$1 = /*@__PURE__*/getDefaultExportFromCjs(loglevelExports);
1443
+ // refer to realm-network-api/src/common/enums/error-codes.enum.ts
1444
+ /*** Authentication Errors ***/
1445
+ var AuthErrorName;
1446
+ (function (AuthErrorName) {
1447
+ AuthErrorName["UNAUTHORIZED"] = "UNAUTHORIZED";
1448
+ AuthErrorName["INVALID_TOKEN"] = "INVALID_TOKEN";
1449
+ AuthErrorName["TOKEN_EXPIRED"] = "TOKEN_EXPIRED";
1450
+ AuthErrorName["INVALID_CREDENTIALS"] = "INVALID_CREDENTIALS";
1451
+ })(AuthErrorName || (AuthErrorName = {}));
1452
+ /*** Partner Access Token Errors ***/
1453
+ var PartnerAccessTokenErrorName;
1454
+ (function (PartnerAccessTokenErrorName) {
1455
+ PartnerAccessTokenErrorName["PARTNER_ACCESS_TOKEN_INVALID"] = "PARTNER_ACCESS_TOKEN_INVALID";
1456
+ PartnerAccessTokenErrorName["USER_MISMATCH"] = "USER_MISMATCH";
1457
+ })(PartnerAccessTokenErrorName || (PartnerAccessTokenErrorName = {}));
1458
+ /*** Realm ID Errors ***/
1459
+ var RealmIDErrorName;
1460
+ (function (RealmIDErrorName) {
1461
+ RealmIDErrorName["REALM_ID_NOT_FOUND"] = "REALM_ID_NOT_FOUND";
1462
+ RealmIDErrorName["REALM_ID_INVALID_NAME"] = "REALM_ID_INVALID_NAME";
1463
+ RealmIDErrorName["REALM_ID_ALREADY_EXISTS"] = "REALM_ID_ALREADY_EXISTS";
1464
+ RealmIDErrorName["REALM_ID_DUPLICATE_PARTNER_USER"] = "REALM_ID_DUPLICATE_PARTNER_USER";
1465
+ })(RealmIDErrorName || (RealmIDErrorName = {}));
1466
+ /*** Parameter Errors ***/
1467
+ var ParameterErrorName;
1468
+ (function (ParameterErrorName) {
1469
+ ParameterErrorName["INVALID_PARAMETER"] = "INVALID_PARAMETER";
1470
+ })(ParameterErrorName || (ParameterErrorName = {}));
1471
+ /*** Server Errors ***/
1472
+ var ServerErrorName;
1473
+ (function (ServerErrorName) {
1474
+ ServerErrorName["INTERNAL_SERVER_ERROR"] = "INTERNAL_SERVER_ERROR";
1475
+ })(ServerErrorName || (ServerErrorName = {}));
1476
+ /*** Passkey Errors ***/
1477
+ var PasskeyErrorName;
1478
+ (function (PasskeyErrorName) {
1479
+ PasskeyErrorName["PASSKEY_REGISTRATION_FAILED"] = "PASSKEY_REGISTRATION_FAILED";
1480
+ PasskeyErrorName["PASSKEY_AUTHENTICATION_FAILED"] = "PASSKEY_AUTHENTICATION_FAILED";
1481
+ PasskeyErrorName["PASSKEY_LIMIT_EXCEEDED"] = "PASSKEY_LIMIT_EXCEEDED";
1482
+ PasskeyErrorName["PASSKEY_NOT_FOUND"] = "PASSKEY_NOT_FOUND";
1483
+ PasskeyErrorName["PASSKEY_UNAUTHORIZED"] = "PASSKEY_UNAUTHORIZED";
1484
+ PasskeyErrorName["PASSKEY_CHALLENGE_INVALID"] = "PASSKEY_CHALLENGE_INVALID";
1485
+ })(PasskeyErrorName || (PasskeyErrorName = {}));
1486
+ /*** Passwordless Authentication Errors ***/
1487
+ var PasswordlessErrorName;
1488
+ (function (PasswordlessErrorName) {
1489
+ PasswordlessErrorName["PASSWORDLESS_CODE_EXPIRED"] = "PASSWORDLESS_CODE_EXPIRED";
1490
+ PasswordlessErrorName["PASSWORDLESS_INVALID_CODE"] = "PASSWORDLESS_INVALID_CODE";
1491
+ PasswordlessErrorName["PASSWORDLESS_MAX_ATTEMPTS"] = "PASSWORDLESS_MAX_ATTEMPTS";
1492
+ PasswordlessErrorName["PASSWORDLESS_HOURLY_LIMIT"] = "PASSWORDLESS_HOURLY_LIMIT";
1493
+ PasswordlessErrorName["PASSWORDLESS_LOCK_EXCEEDED"] = "PASSWORDLESS_LOCK_EXCEEDED";
1494
+ })(PasswordlessErrorName || (PasswordlessErrorName = {}));
1495
+ /*** Authentication Wallet Errors ***/
1496
+ var AuthWalletErrorName;
1497
+ (function (AuthWalletErrorName) {
1498
+ AuthWalletErrorName["AUTH_WALLET_LOCK_EXCEEDED"] = "AUTH_WALLET_LOCK_EXCEEDED";
1499
+ AuthWalletErrorName["AUTH_WALLET_NONCE_EXPIRED_OR_INVALID"] = "AUTH_WALLET_NONCE_EXPIRED_OR_INVALID";
1500
+ AuthWalletErrorName["AUTH_WALLET_ADDRESS_MISMATCH"] = "AUTH_WALLET_ADDRESS_MISMATCH";
1501
+ AuthWalletErrorName["AUTH_WALLET_SIGNATURE_VERIFICATION_FAILED"] = "AUTH_WALLET_SIGNATURE_VERIFICATION_FAILED";
1502
+ })(AuthWalletErrorName || (AuthWalletErrorName = {}));
1503
+ /*** Wallet Linking Errors ***/
1504
+ var WalletLinkErrorName;
1505
+ (function (WalletLinkErrorName) {
1506
+ WalletLinkErrorName["LINK_WALLET_ALREADY_LINKED"] = "LINK_WALLET_ALREADY_LINKED";
1507
+ WalletLinkErrorName["LINK_WALLET_LINKED_OTHER_ACCOUNT"] = "LINK_WALLET_LINKED_OTHER_ACCOUNT";
1508
+ WalletLinkErrorName["LINK_EMAIL_LINKED_OTHER_ACCOUNT"] = "LINK_EMAIL_LINKED_OTHER_ACCOUNT";
1509
+ })(WalletLinkErrorName || (WalletLinkErrorName = {}));
1510
+ /*** Intent Errors ***/
1511
+ var IntentErrorName;
1512
+ (function (IntentErrorName) {
1513
+ IntentErrorName["INTENT_INVALID"] = "INTENT_INVALID";
1514
+ IntentErrorName["INTENT_LOCK_EXCEEDED"] = "INTENT_LOCK_EXCEEDED";
1515
+ IntentErrorName["INTENT_REQUIRED"] = "INTENT_REQUIRED";
1516
+ IntentErrorName["INTENT_UNSUPPORTED_TYPE"] = "INTENT_UNSUPPORTED_TYPE";
1517
+ })(IntentErrorName || (IntentErrorName = {}));
1518
+ /*** Privy Errors ***/
1519
+ var PrivyErrorName;
1520
+ (function (PrivyErrorName) {
1521
+ PrivyErrorName["WALLET_PROVIDER_ERROR"] = "WALLET_PROVIDER_ERROR";
1522
+ })(PrivyErrorName || (PrivyErrorName = {}));
1523
+ /*** Air ID Errors ***/
1524
+ var AirIDErrorName;
1525
+ (function (AirIDErrorName) {
1526
+ AirIDErrorName["AIR_ID_MINT_TRANSACTION_NOT_FOUND"] = "AIR_ID_MINT_TRANSACTION_NOT_FOUND";
1527
+ AirIDErrorName["AIR_ID_ON_CHAIN_TRANSACTION_NOT_FOUND"] = "AIR_ID_ON_CHAIN_TRANSACTION_NOT_FOUND";
1528
+ AirIDErrorName["AIR_ID_NOT_FOUND"] = "AIR_ID_NOT_FOUND";
1529
+ AirIDErrorName["AIR_ID_INVALID_OR_DISABLED_CONFIGURATION"] = "AIR_ID_INVALID_OR_DISABLED_CONFIGURATION";
1530
+ AirIDErrorName["AIR_ID_RPC_URL_NOT_CONFIGURED"] = "AIR_ID_RPC_URL_NOT_CONFIGURED";
1531
+ AirIDErrorName["AIR_ID_INVALID_STATUS"] = "AIR_ID_INVALID_STATUS";
1532
+ AirIDErrorName["AIR_ID_PARTNER_ELIGIBILITY_CHECK_FAILED"] = "AIR_ID_PARTNER_ELIGIBILITY_CHECK_FAILED";
1533
+ AirIDErrorName["AIR_ID_PARTNER_ELIGIBILITY_CHECK_TIMEOUT"] = "AIR_ID_PARTNER_ELIGIBILITY_CHECK_TIMEOUT";
1534
+ AirIDErrorName["AIR_ID_MULTIPLE_AIR_IDS_FOUND"] = "AIR_ID_MULTIPLE_AIR_IDS_FOUND";
1535
+ AirIDErrorName["AIR_ID_NAME_RESERVED"] = "AIR_ID_NAME_RESERVED";
1536
+ AirIDErrorName["AIR_ID_NAME_PROFANITY"] = "AIR_ID_NAME_PROFANITY";
1537
+ AirIDErrorName["AIR_ID_USER_ALREADY_HAS_AIR_ID"] = "AIR_ID_USER_ALREADY_HAS_AIR_ID";
1538
+ AirIDErrorName["AIR_ID_NAME_ALREADY_EXISTS"] = "AIR_ID_NAME_ALREADY_EXISTS";
1539
+ AirIDErrorName["AIR_ID_INVALID_MINT_NAME"] = "AIR_ID_INVALID_MINT_NAME";
1540
+ AirIDErrorName["AIR_ID_MINT_TRANSACTION_HASH_MISMATCH"] = "AIR_ID_MINT_TRANSACTION_HASH_MISMATCH";
1541
+ })(AirIDErrorName || (AirIDErrorName = {}));
1542
+ /*** Window Errors ***/
1543
+ var WindowErrorName;
1544
+ (function (WindowErrorName) {
1545
+ WindowErrorName["WINDOW_BLOCKED"] = "WINDOW_BLOCKED";
1546
+ WindowErrorName["WINDOW_CLOSED"] = "WINDOW_CLOSED";
1547
+ })(WindowErrorName || (WindowErrorName = {}));
1548
+ const Codes = {
1549
+ ...AuthErrorName,
1550
+ ...PartnerAccessTokenErrorName,
1551
+ ...RealmIDErrorName,
1552
+ ...ParameterErrorName,
1553
+ ...ServerErrorName,
1554
+ ...PasskeyErrorName,
1555
+ ...PasswordlessErrorName,
1556
+ ...AuthWalletErrorName,
1557
+ ...WalletLinkErrorName,
1558
+ ...IntentErrorName,
1559
+ ...PrivyErrorName,
1560
+ ...AirIDErrorName,
1561
+ ...WindowErrorName
1562
+ };
1382
1563
 
1383
- var log = log$1.getLogger("airkit");
1564
+ const AirClientUserErrors = ["USER_CANCELLED", "CONFIG_ERROR", "CLIENT_ERROR", "UNKNOWN_ERROR", "PERMISSION_NOT_ENABLED", "SMART_ACCOUNT_NOT_DEPLOYED"];
1384
1565
 
1385
- var AirWalletProviderMessageTypes;
1386
- (function (AirWalletProviderMessageTypes) {
1387
- AirWalletProviderMessageTypes["REQUEST"] = "JRPC_REQUEST";
1388
- AirWalletProviderMessageTypes["RESPONSE"] = "JRPC_RESPONSE";
1389
- AirWalletProviderMessageTypes["EVENT"] = "JRPC_EVENT";
1390
- })(AirWalletProviderMessageTypes || (AirWalletProviderMessageTypes = {}));
1566
+ class AirError extends BaseError {}
1567
+ new Set(AirClientUserErrors);
1568
+ new Set(Object.values(Codes));
1391
1569
 
1392
- const ACCOUNT_MESSAGES = [
1393
- AirMessageTypes.INITIALIZATION_RESPONSE,
1394
- AirMessageTypes.WALLET_INITIALIZED,
1395
- AirMessageTypes.WALLET_LOGIN_RESPONSE,
1396
- AirMessageTypes.SETUP_MFA_RESPONSE,
1397
- AirMessageTypes.CLAIM_ID_RESPONSE,
1398
- AirMessageTypes.IS_SMART_ACCOUNT_DEPLOYED_RESPONSE,
1399
- AirMessageTypes.DEPLOY_SMART_ACCOUNT_RESPONSE,
1400
- AirMessageTypes.EXECUTE_ACTION_RESPONSE,
1401
- AirMessageTypes.REVOKE_PERMISSIONS_RESPONSE,
1402
- AirMessageTypes.GRANT_PERMISSIONS_RESPONSE,
1403
- AirMessageTypes.LIST_ALL_SESSION_KEY_SCOPES_RESPONSE,
1404
- AirMessageTypes.WALLET_INITIALIZED,
1405
- AirMessageTypes.WALLET_IFRAME_VISIBILITY_REQUEST,
1406
- AirMessageTypes.LOGOUT_RESPONSE,
1407
- AirMessageTypes.OPEN_WINDOW_REQUEST,
1408
- ];
1409
- const AUTH_MESSAGES = [
1410
- AirAuthMessageTypes.INITIALIZATION_RESPONSE,
1411
- AirAuthMessageTypes.LOGIN_RESPONSE,
1412
- AirAuthMessageTypes.REFRESH_TOKEN_RESPONSE,
1413
- AirAuthMessageTypes.SETUP_WALLET_REQUEST,
1414
- AirAuthMessageTypes.LOGOUT_RESPONSE,
1415
- AirAuthMessageTypes.PARTNER_USER_INFO_RESPONSE,
1416
- AirAuthMessageTypes.CROSS_PARTNER_TOKEN_RESPONSE,
1417
- AirAuthMessageTypes.PARTNER_ACCESS_TOKEN_RESPONSE,
1418
- AirAuthMessageTypes.IFRAME_VISIBILITY_REQUEST,
1419
- ];
1420
- class AirMessageService {
1421
- constructor() {
1422
- this.closeAuthMessageListeners = null;
1423
- this.closeRealmMessageListeners = null;
1424
- this.closeWalletMessageListeners = null;
1425
- }
1426
- static get instance() {
1427
- if (!AirMessageService._instance) {
1428
- AirMessageService._instance = new AirMessageService();
1429
- }
1430
- return AirMessageService._instance;
1431
- }
1432
- get messages$() {
1433
- return this.airMessages$.asObservable();
1434
- }
1435
- get authMessage$() {
1436
- return this._authMessage$.asObservable();
1437
- }
1438
- get providerMessage$() {
1439
- return this._providerMessage$.asObservable();
1440
- }
1441
- get providerEvent$() {
1442
- return this._providerEvent$.asObservable();
1443
- }
1444
- async openAuthObservables({ authIframeOrigin }) {
1445
- this.closeAuthObservables();
1446
- this.setupAuthObservables();
1447
- const handleAuthMessage = async (ev) => {
1448
- if (ev.origin !== authIframeOrigin || !ev.data || !(ev.data instanceof Object))
1449
- return;
1450
- log.debug("Embed auth message received from auth", ev.data);
1451
- if (AUTH_MESSAGES.includes(ev.data.type)) {
1452
- this._authMessage$.next(ev.data);
1453
- }
1454
- };
1455
- window.addEventListener("message", handleAuthMessage);
1456
- this.closeAuthMessageListeners = () => {
1457
- window.removeEventListener("message", handleAuthMessage);
1458
- };
1459
- }
1460
- async openWalletObservables({ walletIframeOrigin }) {
1461
- this.closeAirObservables();
1462
- this.setupAirObservables();
1463
- const handleMessage = async (ev) => {
1464
- if (ev.origin !== walletIframeOrigin || !ev.data || !(ev.data instanceof Object))
1465
- return;
1466
- log.debug("Account messages received from wallet frontend", ev.data);
1467
- if (ACCOUNT_MESSAGES.includes(ev.data.type)) {
1468
- this.airMessages$.next(ev.data);
1469
- }
1470
- };
1471
- window.addEventListener("message", handleMessage);
1472
- this.closeRealmMessageListeners = () => {
1473
- window.removeEventListener("message", handleMessage);
1474
- };
1475
- this.closeWalletObservables();
1476
- this.setupWalletObservables();
1477
- const handleWalletMessage = async (ev) => {
1478
- if (ev.origin !== walletIframeOrigin || !ev.data || !(ev.data instanceof Object))
1479
- return;
1480
- log.debug("Wallet provider messages received from wallet frontend", ev.data);
1481
- if (ev.data.type === AirWalletProviderMessageTypes.RESPONSE) {
1482
- this._providerMessage$.next(ev.data);
1483
- }
1484
- if (ev.data.type === AirWalletProviderMessageTypes.EVENT) {
1485
- this._providerEvent$.next(ev.data);
1486
- }
1487
- };
1488
- window.addEventListener("message", handleWalletMessage);
1489
- this.closeWalletMessageListeners = () => {
1490
- window.removeEventListener("message", handleWalletMessage);
1491
- };
1492
- }
1493
- setupIframeCommunication(authIframe, walletIframe, skipWalletLogin) {
1494
- const channel = new MessageChannel();
1495
- const authOrigin = new URL(authIframe.src).origin;
1496
- authIframe.contentWindow.postMessage({
1497
- type: AirAuthMessageTypes.INIT_WALLET_COMMUNICATION,
1498
- }, authOrigin, [channel.port1]);
1499
- const walletOrigin = new URL(walletIframe.src).origin;
1500
- walletIframe.contentWindow.postMessage({
1501
- type: AirMessageTypes.INIT_AUTH_COMMUNICATION,
1502
- payload: {
1503
- skipWalletLogin,
1504
- },
1505
- }, walletOrigin, [channel.port2]);
1506
- }
1507
- async sendGrantPermissionRequest(walletIframe, policies) {
1508
- const response = firstValueFrom(this.messages$.pipe(filter((msg) => msg.type === AirMessageTypes.GRANT_PERMISSIONS_RESPONSE)));
1509
- const { origin } = new URL(walletIframe.src);
1510
- walletIframe.contentWindow.postMessage({
1511
- type: AirMessageTypes.GRANT_PERMISSIONS_REQUEST,
1512
- payload: {
1513
- policies,
1514
- },
1515
- }, origin);
1516
- const result = await response;
1517
- if (result.payload.success === false) {
1518
- throw new AirServiceError(result.payload.errorName, result.payload.errorMessage);
1519
- }
1520
- return result.payload.sessionData;
1521
- }
1522
- async sendExecuteActionRequest(walletIframe, params) {
1523
- const response = firstValueFrom(this.messages$.pipe(filter((msg) => msg.type === AirMessageTypes.EXECUTE_ACTION_RESPONSE)));
1524
- const { origin } = new URL(walletIframe.src);
1525
- walletIframe.contentWindow.postMessage({
1526
- type: AirMessageTypes.EXECUTE_ACTION_REQUEST,
1527
- payload: {
1528
- sessionData: params.sessionData,
1529
- call: {
1530
- to: params.call.to,
1531
- value: params.call.value,
1532
- data: params.call.data,
1533
- },
1534
- sessionOwnerPrivateKey: params.sessionOwnerPrivateKey,
1535
- },
1536
- }, origin);
1537
- const result = await response;
1538
- if (result.payload.success === false) {
1539
- throw new AirServiceError(result.payload.errorName, result.payload.errorMessage);
1540
- }
1541
- return result.payload.txHash;
1542
- }
1543
- async sendRevokePermissionsRequest(walletIframe, permissionId) {
1544
- const response = firstValueFrom(this.messages$.pipe(filter((msg) => msg.type === AirMessageTypes.REVOKE_PERMISSIONS_RESPONSE)));
1545
- const { origin } = new URL(walletIframe.src);
1546
- walletIframe.contentWindow.postMessage({
1547
- type: AirMessageTypes.REVOKE_PERMISSIONS_REQUEST,
1548
- payload: {
1549
- permissionId,
1550
- },
1551
- }, origin);
1552
- const result = await response;
1553
- if (result.payload.success === false) {
1554
- throw new AirServiceError(result.payload.errorName, result.payload.errorMessage);
1555
- }
1556
- return result.payload.txHash;
1557
- }
1558
- sendDeploySmartAccountRequest(walletIframe) {
1559
- const response = firstValueFrom(this.messages$.pipe(filter((msg) => msg.type === AirMessageTypes.DEPLOY_SMART_ACCOUNT_RESPONSE)));
1560
- const { origin } = new URL(walletIframe.src);
1561
- walletIframe.contentWindow.postMessage({
1562
- type: AirMessageTypes.DEPLOY_SMART_ACCOUNT_REQUEST,
1563
- }, origin);
1564
- return response;
1565
- }
1566
- async sendIsSmartAccountDeployedRequest(walletIframe) {
1567
- const response = firstValueFrom(this.messages$.pipe(filter((msg) => msg.type === AirMessageTypes.IS_SMART_ACCOUNT_DEPLOYED_RESPONSE)));
1568
- const { origin } = new URL(walletIframe.src);
1569
- walletIframe.contentWindow.postMessage({
1570
- type: AirMessageTypes.IS_SMART_ACCOUNT_DEPLOYED_REQUEST,
1571
- }, origin);
1572
- return response;
1573
- }
1574
- async sendPartnerUserInfoRequest(authIframe) {
1575
- const response = firstValueFrom(this.authMessage$.pipe(filter((msg) => msg.type === AirAuthMessageTypes.PARTNER_USER_INFO_RESPONSE)));
1576
- const { origin } = new URL(authIframe.src);
1577
- authIframe.contentWindow.postMessage({ type: AirAuthMessageTypes.PARTNER_USER_INFO_REQUEST }, origin);
1578
- return response;
1579
- }
1580
- async sendAuthLoginRequest(authIframe, payload) {
1581
- const response = firstValueFrom(this.authMessage$.pipe(filter((msg) => msg.type === AirAuthMessageTypes.LOGIN_RESPONSE)));
1582
- const { origin } = new URL(authIframe.src);
1583
- authIframe.contentWindow.postMessage({ type: AirAuthMessageTypes.LOGIN_REQUEST, payload }, origin);
1584
- return response;
1585
- }
1586
- async logoutAuth(authIframe) {
1587
- const response = firstValueFrom(this.authMessage$.pipe(filter((msg) => msg.type === AirAuthMessageTypes.LOGOUT_RESPONSE)));
1588
- const { origin } = new URL(authIframe.src);
1589
- authIframe.contentWindow.postMessage({ type: AirAuthMessageTypes.LOGOUT_REQUEST }, origin);
1590
- return response;
1591
- }
1592
- async logoutWallet(walletIframe) {
1593
- const response = firstValueFrom(this.messages$.pipe(filter((msg) => msg.type === AirMessageTypes.LOGOUT_RESPONSE)));
1594
- const { origin } = new URL(walletIframe.src);
1595
- walletIframe.contentWindow.postMessage({ type: AirMessageTypes.LOGOUT_REQUEST }, origin);
1596
- return response;
1597
- }
1598
- sendResetAuthServiceWalletCommunication(authIframe) {
1599
- const { origin: authOrigin } = new URL(authIframe.src);
1600
- authIframe.contentWindow.postMessage({ type: AirAuthMessageTypes.RESET_WALLET_COMMUNICATION }, authOrigin);
1601
- }
1602
- async sendAuthInitializationRequest(authIframe, payload) {
1603
- const response = firstValueFrom(this._authMessage$.pipe(filter((msg) => msg.type === AirAuthMessageTypes.INITIALIZATION_RESPONSE)));
1604
- const { origin } = new URL(authIframe.src);
1605
- authIframe.contentWindow.postMessage({ type: AirAuthMessageTypes.INITIALIZATION_REQUEST, payload }, origin);
1606
- return response;
1607
- }
1608
- async sendWalletInitializationRequest(walletIframe, payload) {
1609
- const response = firstValueFrom(this.messages$.pipe(filter((msg) => msg.type === AirMessageTypes.INITIALIZATION_RESPONSE)));
1610
- const { origin } = new URL(walletIframe.src);
1611
- walletIframe.contentWindow.postMessage({ type: AirMessageTypes.INITIALIZATION_REQUEST, payload }, origin);
1612
- return response;
1613
- }
1614
- async sendCrossPartnerTokenRequest(authIframe, targetPartnerUrl) {
1615
- const response = firstValueFrom(this.authMessage$.pipe(filter((msg) => msg.type === AirAuthMessageTypes.CROSS_PARTNER_TOKEN_RESPONSE)));
1616
- const { origin } = new URL(authIframe.src);
1617
- authIframe.contentWindow.postMessage({
1618
- type: AirAuthMessageTypes.CROSS_PARTNER_TOKEN_REQUEST,
1619
- payload: {
1620
- targetPartnerUrl,
1621
- },
1622
- }, origin);
1623
- return response;
1624
- }
1625
- async sendGrantPermissionsRequest(walletIframe, payload) {
1626
- const response = firstValueFrom(this.messages$.pipe(filter((msg) => msg.type === AirMessageTypes.GRANT_PERMISSIONS_RESPONSE)));
1627
- const { origin } = new URL(walletIframe.src);
1628
- walletIframe.contentWindow.postMessage({ type: AirMessageTypes.GRANT_PERMISSIONS_REQUEST, payload }, origin);
1629
- return response;
1630
- }
1631
- async sendListAllSessionKeyScopesRequest(walletIframe) {
1632
- const response = firstValueFrom(this.messages$.pipe(filter((msg) => msg.type === AirMessageTypes.LIST_ALL_SESSION_KEY_SCOPES_RESPONSE)));
1633
- const { origin } = new URL(walletIframe.src);
1634
- walletIframe.contentWindow.postMessage({ type: AirMessageTypes.LIST_ALL_SESSION_KEY_SCOPES_REQUEST }, origin);
1635
- return response;
1636
- }
1637
- onWalletInitialized() {
1638
- return firstValueFrom(this.messages$.pipe(filter((msg) => msg.type === AirMessageTypes.WALLET_INITIALIZED)));
1639
- }
1640
- sendWalletLoginRequest(walletIframe) {
1641
- const response = firstValueFrom(this.messages$.pipe(filter((msg) => msg.type === AirMessageTypes.WALLET_LOGIN_RESPONSE)));
1642
- const { origin } = new URL(walletIframe.src);
1643
- walletIframe.contentWindow.postMessage({ type: AirMessageTypes.WALLET_LOGIN_REQUEST }, origin);
1644
- return response;
1645
- }
1646
- async sendSetupMfaRequest(walletIframe) {
1647
- const response = firstValueFrom(this.messages$.pipe(filter((msg) => msg.type === AirMessageTypes.SETUP_MFA_RESPONSE)));
1648
- const { origin } = new URL(walletIframe.src);
1649
- walletIframe.contentWindow.postMessage({ type: AirMessageTypes.SETUP_MFA_REQUEST }, origin);
1650
- return response;
1570
+ class MessageServiceBase {
1571
+ get events$() {
1572
+ return this._events$;
1573
+ }
1574
+ get messages$() {
1575
+ return this._messages$;
1576
+ }
1577
+ get isOpen() {
1578
+ return !!this.closeListener;
1579
+ }
1580
+ constructor(name, allowedMessageTypes) {
1581
+ this.name = name;
1582
+ this.allowedMessageTypes = allowedMessageTypes;
1583
+ this.closeListener = null;
1584
+ }
1585
+ async _open(target) {
1586
+ await this.close();
1587
+ this.eventSubject = new Subject();
1588
+ this._events$ = this.eventSubject.asObservable();
1589
+ this._messages$ = this.eventSubject.pipe(map(ev => ev.data));
1590
+ this._events$.subscribe(event => {
1591
+ const sentOrReceived = event.origin === window.origin ? "sent" : "received";
1592
+ log.debug(`[${this.name}] Message ${sentOrReceived}:`, event.data);
1593
+ });
1594
+ const handleMessage = async ev => {
1595
+ if (this.targetOrigin && ev.origin !== this.targetOrigin || !ev.data || !(ev.data instanceof Object)) return;
1596
+ if (this.isMessageAllowed(ev.data)) {
1597
+ await this.onBeforeEvent(ev);
1598
+ this.eventSubject.next(ev);
1599
+ }
1600
+ };
1601
+ if (target instanceof MessagePort) {
1602
+ this.messagePort = target;
1603
+ target.onmessage = handleMessage;
1604
+ this.closeListener = async () => {
1605
+ target.close();
1606
+ };
1607
+ } else {
1608
+ this.targetWindow = target.window;
1609
+ this.targetOrigin = target.origin;
1610
+ window.addEventListener("message", handleMessage);
1611
+ this.closeListener = async () => {
1612
+ window.removeEventListener("message", handleMessage);
1613
+ };
1651
1614
  }
1652
- sendOpenWindowSuccessResponse(walletIframe, windowId, port) {
1653
- const { origin: walletOrigin } = new URL(walletIframe.src);
1654
- walletIframe.contentWindow.postMessage({
1655
- type: AirMessageTypes.OPEN_WINDOW_RESPONSE,
1656
- payload: {
1657
- success: true,
1658
- windowId,
1659
- },
1660
- }, walletOrigin, [port]);
1615
+ }
1616
+ isMessageAllowed(message) {
1617
+ return this.allowedMessageTypes.includes(message.type);
1618
+ }
1619
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
1620
+ async onBeforeEvent(_event) {
1621
+ // by default not used
1622
+ }
1623
+ async close() {
1624
+ if (this.closeListener) {
1625
+ await this.closeListener();
1661
1626
  }
1662
- sendOpenWindowErrorResponse(walletIframe, windowId, error) {
1663
- const { origin: walletOrigin } = new URL(walletIframe.src);
1664
- walletIframe.contentWindow.postMessage({
1665
- type: AirMessageTypes.OPEN_WINDOW_RESPONSE,
1666
- payload: {
1667
- success: false,
1668
- windowId,
1669
- errorName: "UNKNOWN_ERROR",
1670
- errorMessage: error.message,
1671
- },
1672
- }, walletOrigin);
1627
+ if (this.eventSubject && !this.eventSubject.closed) {
1628
+ this.eventSubject.complete();
1673
1629
  }
1674
- sendWindowClosed(walletIframe, windowId) {
1675
- const { origin: walletOrigin } = new URL(walletIframe.src);
1676
- walletIframe.contentWindow.postMessage({
1677
- type: AirMessageTypes.WINDOW_CLOSED,
1678
- payload: {
1679
- windowId,
1680
- },
1681
- }, walletOrigin);
1630
+ }
1631
+ createErrorResponseMessage(type, error) {
1632
+ return {
1633
+ type,
1634
+ payload: {
1635
+ success: false,
1636
+ errorName: error instanceof AirError ? error.name : "UNKNOWN_ERROR",
1637
+ errorMessage: error.message
1638
+ }
1639
+ };
1640
+ }
1641
+ async sendMessage(message, transfer) {
1642
+ // To prevent any non-cloneable objects causing errors in postMessage
1643
+ const clonedMessage = this.deepClone(message);
1644
+ if (this.messagePort) {
1645
+ this.messagePort.postMessage(clonedMessage);
1646
+ this.eventSubject.next(new MessageEvent("message", {
1647
+ data: clonedMessage,
1648
+ origin: window.origin
1649
+ }));
1650
+ } else if (this.targetWindow && this.targetOrigin) {
1651
+ this.targetWindow.postMessage(clonedMessage, this.targetOrigin, transfer);
1652
+ this.eventSubject.next(new MessageEvent("message", {
1653
+ data: clonedMessage,
1654
+ origin: window.origin
1655
+ }));
1656
+ } else {
1657
+ log.debug(`[${this.name}] Not opened yet`);
1682
1658
  }
1683
- async sendClaimIdRequest(walletIframe, payload) {
1684
- const response = firstValueFrom(this.messages$.pipe(filter((msg) => msg.type === AirMessageTypes.CLAIM_ID_RESPONSE)));
1685
- const { origin } = new URL(walletIframe.src);
1686
- walletIframe.contentWindow.postMessage({ type: AirMessageTypes.CLAIM_ID_REQUEST, payload }, origin);
1687
- return response;
1659
+ }
1660
+ deepClone(message) {
1661
+ try {
1662
+ return JSON.parse(JSON.stringify(message));
1663
+ } catch (e) {
1664
+ log.error("Error generating cloneable message", e);
1665
+ return message;
1688
1666
  }
1689
- async sendWalletProviderRequest(walletIframe, payload) {
1690
- const response = firstValueFrom(this.providerMessage$.pipe(filter((msg) => msg.type === AirWalletProviderMessageTypes.RESPONSE &&
1691
- msg.payload.requestId === payload.requestId)));
1692
- const { origin } = new URL(walletIframe.src);
1693
- walletIframe.contentWindow.postMessage({
1667
+ }
1668
+ }
1669
+
1670
+ var AirWalletProviderMessageTypes;
1671
+ (function (AirWalletProviderMessageTypes) {
1672
+ AirWalletProviderMessageTypes["REQUEST"] = "JRPC_REQUEST";
1673
+ AirWalletProviderMessageTypes["RESPONSE"] = "JRPC_RESPONSE";
1674
+ AirWalletProviderMessageTypes["EVENT"] = "JRPC_EVENT";
1675
+ })(AirWalletProviderMessageTypes || (AirWalletProviderMessageTypes = {}));
1676
+
1677
+ var _a$2, _ProviderMessageService_instance;
1678
+ const ALLOWED_PROVIDER_MESSAGES = [
1679
+ AirWalletProviderMessageTypes.RESPONSE,
1680
+ AirWalletProviderMessageTypes.EVENT,
1681
+ ];
1682
+ class ProviderMessageService extends MessageServiceBase {
1683
+ static create() {
1684
+ if (__classPrivateFieldGet(this, _a$2, "f", _ProviderMessageService_instance))
1685
+ throw new Error("ProviderMessageService already created");
1686
+ __classPrivateFieldSet(this, _a$2, new _a$2("Embed Service: Provider Channel", ALLOWED_PROVIDER_MESSAGES), "f", _ProviderMessageService_instance);
1687
+ return __classPrivateFieldGet(this, _a$2, "f", _ProviderMessageService_instance);
1688
+ }
1689
+ async open(walletIframe) {
1690
+ const origin = new URL(walletIframe.src).origin;
1691
+ const window = walletIframe.contentWindow;
1692
+ await super._open({ window, origin });
1693
+ }
1694
+ async sendWalletProviderRequest(payload) {
1695
+ const response = firstValueFrom(this.messages$.pipe(filter((msg) => msg.type === AirWalletProviderMessageTypes.RESPONSE), filter((msg) => msg.payload.method === payload.method)));
1696
+ await this.sendMessage({
1694
1697
  type: AirWalletProviderMessageTypes.REQUEST,
1695
1698
  payload,
1696
- }, origin);
1697
- return response;
1698
- }
1699
- closeAuthObservables() {
1700
- if (this._authMessage$ && !this._authMessage$.closed)
1701
- this._authMessage$.complete();
1702
- if (this.closeAuthMessageListeners)
1703
- this.closeAuthMessageListeners();
1704
- }
1705
- closeAirObservables() {
1706
- if (this.airMessages$ && !this.airMessages$.closed)
1707
- this.airMessages$.complete();
1708
- if (this.closeRealmMessageListeners)
1709
- this.closeRealmMessageListeners();
1710
- }
1711
- closeWalletObservables() {
1712
- if (this._providerMessage$ && !this._providerMessage$.closed)
1713
- this._providerMessage$.complete();
1714
- if (this._providerEvent$ && !this._providerEvent$.closed)
1715
- this._providerEvent$.complete();
1716
- if (this.closeWalletMessageListeners)
1717
- this.closeWalletMessageListeners();
1718
- }
1719
- setupAuthObservables() {
1720
- this._authMessage$ = new Subject();
1721
- }
1722
- setupAirObservables() {
1723
- this.airMessages$ = new Subject();
1724
- }
1725
- setupWalletObservables() {
1726
- this._providerMessage$ = new Subject();
1727
- this._providerEvent$ = new Subject();
1728
- }
1729
- async sendPartnerAccessTokenRequest(authIframe) {
1730
- const response = firstValueFrom(this.authMessage$.pipe(filter((msg) => msg.type === AirAuthMessageTypes.PARTNER_ACCESS_TOKEN_RESPONSE)));
1731
- const { origin } = new URL(authIframe.src);
1732
- authIframe.contentWindow.postMessage({ type: AirAuthMessageTypes.PARTNER_ACCESS_TOKEN_REQUEST }, origin);
1699
+ });
1733
1700
  return response;
1734
1701
  }
1735
1702
  }
1736
- var AirMessageService$1 = AirMessageService.instance;
1737
-
1738
- const BUILD_ENV = {
1739
- PRODUCTION: "production",
1740
- UAT: "uat",
1741
- STAGING: "staging",
1742
- DEVELOPMENT: "development",
1743
- };
1744
-
1745
- const AIR_URLS = {
1746
- [BUILD_ENV.DEVELOPMENT]: {
1747
- authUrl: "http://localhost:8100",
1748
- walletUrl: "http://localhost:8200",
1749
- logLevel: "debug",
1750
- },
1751
- [BUILD_ENV.UAT]: {
1752
- authUrl: "https://auth.uat.air3.com",
1753
- walletUrl: "https://account.uat.air3.com",
1754
- logLevel: "info",
1755
- },
1756
- [BUILD_ENV.STAGING]: {
1757
- authUrl: "https://auth.staging.air3.com",
1758
- walletUrl: "https://account.staging.air3.com",
1759
- logLevel: "info",
1760
- },
1761
- [BUILD_ENV.PRODUCTION]: {
1762
- authUrl: "https://auth.air3.com",
1763
- walletUrl: "https://account.air3.com",
1764
- logLevel: "error",
1765
- },
1766
- };
1767
- const isElement = (element) => element instanceof Element || element instanceof Document;
1768
- const randomId = () => Math.random().toString(36).slice(2);
1769
- const getWindowFeatures = (width, height) => {
1770
- const dualScreenLeft = window.screenLeft !== undefined ? window.screenLeft : window.screenX;
1771
- const dualScreenTop = window.screenTop !== undefined ? window.screenTop : window.screenY;
1772
- const w = window.innerWidth
1773
- ? window.innerWidth
1774
- : document.documentElement.clientWidth
1775
- ? document.documentElement.clientWidth
1776
- : window.screen.width;
1777
- const h = window.innerHeight
1778
- ? window.innerHeight
1779
- : document.documentElement.clientHeight
1780
- ? document.documentElement.clientHeight
1781
- : window.screen.height;
1782
- const systemZoom = 1; // No reliable estimate
1783
- const left = Math.abs((w - width) / 2 / systemZoom + dualScreenLeft);
1784
- const top = Math.abs((h - height) / 2 / systemZoom + dualScreenTop);
1785
- return `titlebar=0,toolbar=0,status=0,location=0,menubar=0,height=${height / systemZoom},width=${width / systemZoom},top=${top},left=${left}`;
1786
- };
1703
+ _a$2 = ProviderMessageService;
1704
+ _ProviderMessageService_instance = { value: undefined };
1787
1705
 
1788
- var _AirWalletProvider_instances, _AirWalletProvider_isLoggedIn, _AirWalletProvider_ensureWallet, _AirWalletProvider_getWalletIframeController, _AirWalletProvider_eventListeners, _AirWalletProvider_emit;
1706
+ var _AirWalletProvider_instances, _AirWalletProvider_providerMessageService, _AirWalletProvider_isLoggedIn, _AirWalletProvider_ensureWallet, _AirWalletProvider_eventListeners, _AirWalletProvider_emit;
1789
1707
  class AirWalletProvider {
1790
- constructor({ isLoggedIn, ensureWallet, getWalletIframeController, }) {
1708
+ constructor({ isLoggedIn, ensureWallet, }) {
1791
1709
  _AirWalletProvider_instances.add(this);
1710
+ _AirWalletProvider_providerMessageService.set(this, undefined);
1792
1711
  _AirWalletProvider_isLoggedIn.set(this, undefined);
1793
1712
  _AirWalletProvider_ensureWallet.set(this, undefined);
1794
- _AirWalletProvider_getWalletIframeController.set(this, undefined);
1795
1713
  _AirWalletProvider_eventListeners.set(this, undefined);
1796
- this.startEventMessageListening = () => {
1797
- AirMessageService$1.providerEvent$.subscribe((message) => {
1714
+ this.startEventMessageListening = async (walletIframe) => {
1715
+ await __classPrivateFieldGet(this, _AirWalletProvider_providerMessageService, "f").open(walletIframe);
1716
+ __classPrivateFieldGet(this, _AirWalletProvider_providerMessageService, "f").messages$
1717
+ .pipe(filter((msg) => msg.type === AirWalletProviderMessageTypes.EVENT))
1718
+ .subscribe((message) => {
1798
1719
  __classPrivateFieldGet(this, _AirWalletProvider_instances, "m", _AirWalletProvider_emit).call(this, message.payload.event, ...[message.payload.data]);
1799
1720
  });
1800
1721
  };
1722
+ __classPrivateFieldSet(this, _AirWalletProvider_providerMessageService, ProviderMessageService.create(), "f");
1801
1723
  __classPrivateFieldSet(this, _AirWalletProvider_isLoggedIn, isLoggedIn, "f");
1802
1724
  __classPrivateFieldSet(this, _AirWalletProvider_ensureWallet, ensureWallet, "f");
1803
- __classPrivateFieldSet(this, _AirWalletProvider_getWalletIframeController, getWalletIframeController, "f");
1804
1725
  __classPrivateFieldSet(this, _AirWalletProvider_eventListeners, {
1805
1726
  connect: [],
1806
1727
  disconnect: [],
@@ -1836,7 +1757,7 @@ class AirWalletProvider {
1836
1757
  throw ensureProviderRpcError(error);
1837
1758
  }
1838
1759
  const requestId = randomId();
1839
- const response = await AirMessageService$1.sendWalletProviderRequest(__classPrivateFieldGet(this, _AirWalletProvider_getWalletIframeController, "f").call(this).iframeElement, {
1760
+ const response = await __classPrivateFieldGet(this, _AirWalletProvider_providerMessageService, "f").sendWalletProviderRequest({
1840
1761
  requestId,
1841
1762
  ...request,
1842
1763
  });
@@ -1866,13 +1787,13 @@ class AirWalletProvider {
1866
1787
  }, "f");
1867
1788
  }
1868
1789
  }
1869
- _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) {
1790
+ _AirWalletProvider_providerMessageService = new WeakMap(), _AirWalletProvider_isLoggedIn = new WeakMap(), _AirWalletProvider_ensureWallet = new WeakMap(), _AirWalletProvider_eventListeners = new WeakMap(), _AirWalletProvider_instances = new WeakSet(), _AirWalletProvider_emit = function _AirWalletProvider_emit(eventName, ...args) {
1870
1791
  (__classPrivateFieldGet(this, _AirWalletProvider_eventListeners, "f")[eventName] || []).forEach((listener) => {
1871
1792
  try {
1872
1793
  return listener(...args);
1873
1794
  }
1874
1795
  catch (error) {
1875
- log$1.error(error);
1796
+ log.warn(error);
1876
1797
  }
1877
1798
  });
1878
1799
  };
@@ -1940,85 +1861,137 @@ IframeController.defaultState = {
1940
1861
  isVisible: false,
1941
1862
  };
1942
1863
 
1864
+ /**
1865
+ * Creates a window features string for `window.open`, based on the current screen size.
1866
+ * It tries to center the window and limits the size to the given max width and height.
1867
+ * Slightly reduces the size to avoid browser auto-resizing.
1868
+ */
1869
+ const getWindowFeatures = (maxWidth, maxHeight) => {
1870
+ const dualScreenLeft = window.screenLeft !== undefined ? window.screenLeft : window.screenX;
1871
+ const dualScreenTop = window.screenTop !== undefined ? window.screenTop : window.screenY;
1872
+ const w = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth ? document.documentElement.clientWidth : window.screen.width;
1873
+ const h = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight ? document.documentElement.clientHeight : window.screen.height;
1874
+ // 95% adjustment for mobile devices, some browser might resize the window
1875
+ const finalWidth = Math.min(w, maxWidth) * 0.95;
1876
+ const finalHeight = Math.min(h, maxHeight) * 0.95;
1877
+ const systemZoom = 1; // No reliable estimate
1878
+ const left = Math.abs((w - finalWidth) / 2 / systemZoom + dualScreenLeft);
1879
+ const top = Math.abs((h - finalHeight) / 2 / systemZoom + dualScreenTop);
1880
+ return `titlebar=0,toolbar=0,status=0,location=0,menubar=0,height=${finalHeight / systemZoom},width=${finalWidth / systemZoom},top=${top},left=${left}`;
1881
+ };
1882
+
1943
1883
  class WindowController {
1944
- get messages$() {
1945
- return this._messages$.asObservable();
1946
- }
1947
- constructor(windowUrl, windowId) {
1948
- this._windowInstance = null;
1949
- this._messageHandler = null;
1950
- this._messages$ = new Subject();
1951
- this.windowUrl = windowUrl;
1952
- this.windowOrigin = new URL(windowUrl).origin;
1953
- this.windowId = windowId;
1954
- }
1955
- get windowInstance() {
1956
- return this._windowInstance;
1957
- }
1958
- openWindow() {
1959
- if (this._windowInstance && !this._windowInstance.closed) {
1960
- this._windowInstance.focus();
1961
- return this._windowInstance;
1962
- }
1963
- const windowInstance = window.open(this.windowUrl, this.windowId, getWindowFeatures(425, 680));
1964
- if (!windowInstance) {
1965
- throw new Error("Failed to open window. Popup might be blocked by the browser.");
1966
- }
1967
- this._windowInstance = windowInstance;
1968
- this._messageHandler = (ev) => {
1969
- if (ev.source !== windowInstance ||
1970
- ev.origin !== this.windowOrigin ||
1971
- !ev.data ||
1972
- !(ev.data instanceof Object)) {
1973
- return;
1974
- }
1975
- this._messages$.next(ev);
1976
- };
1977
- window.addEventListener("message", this._messageHandler);
1978
- const checkWindow = setInterval(() => {
1979
- if (!this._windowInstance || this._windowInstance?.closed) {
1980
- this.cleanup();
1981
- clearInterval(checkWindow);
1982
- }
1983
- }, 500);
1984
- return windowInstance;
1884
+ get messages$() {
1885
+ return this._messages$.asObservable();
1886
+ }
1887
+ constructor(windowId, windowUrl) {
1888
+ this._windowInstance = null;
1889
+ this._messageHandler = null;
1890
+ this._messages$ = new Subject();
1891
+ this.windowId = windowId;
1892
+ this.windowUrl = windowUrl;
1893
+ this.windowOrigin = new URL(windowUrl).origin;
1894
+ this._messageHandler = ev => {
1895
+ if (ev.source !== this._windowInstance || ev.origin !== this.windowOrigin || !ev.data || !(ev.data instanceof Object)) {
1896
+ return;
1897
+ }
1898
+ this._messages$.next(ev);
1899
+ };
1900
+ window.addEventListener("message", this._messageHandler);
1901
+ }
1902
+ get windowInstance() {
1903
+ return this._windowInstance;
1904
+ }
1905
+ async openWindow(onRetry) {
1906
+ let windowInstance = this.tryOpenWindow();
1907
+ if (!windowInstance) {
1908
+ await onRetry();
1909
+ windowInstance = this.tryOpenWindow();
1910
+ if (!windowInstance) {
1911
+ throw new AirError(WindowErrorName.WINDOW_BLOCKED);
1912
+ }
1985
1913
  }
1986
- postMessage(message, transfer) {
1987
- if (!this._windowInstance)
1988
- return;
1989
- this._windowInstance.postMessage(message, this.windowOrigin, transfer);
1914
+ const pendingWindowOpenCheck = new Promise((resolve, reject) => {
1915
+ setTimeout(() => {
1916
+ if (this.isWindowOpen(windowInstance)) {
1917
+ // only now are we scheduling the close event check since we're sure the window is open
1918
+ this.scheduleWindowClosedChecks(windowInstance);
1919
+ resolve("opened");
1920
+ } else {
1921
+ onRetry().then(() => {
1922
+ windowInstance = this.tryOpenWindow();
1923
+ if (windowInstance) {
1924
+ this._windowInstance = windowInstance;
1925
+ windowInstance.focus();
1926
+ this.scheduleWindowClosedChecks(windowInstance);
1927
+ resolve("retry");
1928
+ } else {
1929
+ reject(new AirError(WindowErrorName.WINDOW_BLOCKED));
1930
+ }
1931
+ }).catch(reject);
1932
+ }
1933
+ }, 1000);
1934
+ });
1935
+ this._windowInstance = windowInstance;
1936
+ windowInstance.focus();
1937
+ return {
1938
+ pendingWindowOpenCheck
1939
+ };
1940
+ }
1941
+ postMessage(message, transfer) {
1942
+ if (!this._windowInstance) return;
1943
+ this._windowInstance.postMessage(message, this.windowOrigin, transfer);
1944
+ }
1945
+ onMessage(callback) {
1946
+ const listener = ev => {
1947
+ if (ev.source !== this._windowInstance || ev.origin !== this.windowOrigin) return;
1948
+ callback(ev);
1949
+ };
1950
+ window.addEventListener("message", listener);
1951
+ const close = () => window.removeEventListener("message", listener);
1952
+ this.onClose(close);
1953
+ return {
1954
+ close
1955
+ };
1956
+ }
1957
+ cleanup() {
1958
+ if (this._windowInstance && !this._windowInstance.closed) {
1959
+ this._windowInstance.close();
1990
1960
  }
1991
- onMessage(callback) {
1992
- const listener = (ev) => {
1993
- if (ev.source !== this._windowInstance)
1994
- return;
1995
- callback(ev);
1996
- };
1997
- window.addEventListener("message", listener);
1998
- const close = () => window.removeEventListener("message", listener);
1999
- this.onClose(close);
2000
- return {
2001
- close,
2002
- };
1961
+ this._windowInstance = null;
1962
+ if (this._messageHandler) {
1963
+ window.removeEventListener("message", this._messageHandler);
1964
+ this._messageHandler = null;
2003
1965
  }
2004
- cleanup() {
2005
- if (this._windowInstance && !this._windowInstance.closed) {
2006
- this._windowInstance.close();
2007
- }
2008
- if (this._messageHandler) {
2009
- window.removeEventListener("message", this._messageHandler);
2010
- this._messageHandler = null;
2011
- }
2012
- if (this._messages$ && !this._messages$.closed) {
2013
- this._messages$.complete();
2014
- }
2015
- this._windowInstance = null;
1966
+ if (this._messages$ && !this._messages$.closed) {
1967
+ this._messages$.complete();
2016
1968
  }
2017
- onClose(callback) {
2018
- return this._messages$.subscribe({
2019
- complete: callback,
2020
- });
1969
+ }
1970
+ onClose(callback) {
1971
+ return this._messages$.subscribe({
1972
+ complete: callback
1973
+ });
1974
+ }
1975
+ isWindowOpen(windowInstance) {
1976
+ return !(!windowInstance || windowInstance.closed || typeof windowInstance.closed == "undefined");
1977
+ }
1978
+ tryOpenWindow() {
1979
+ const windowInstance = window.open(this.windowUrl, this.windowId, getWindowFeatures(425, 680));
1980
+ if (this.isWindowOpen(windowInstance)) {
1981
+ return windowInstance;
2021
1982
  }
1983
+ return null;
1984
+ }
1985
+ scheduleWindowClosedChecks(windowInstance) {
1986
+ const checkWindow = setInterval(() => {
1987
+ if (!windowInstance || windowInstance.closed) {
1988
+ clearInterval(checkWindow);
1989
+ if (windowInstance === this._windowInstance) {
1990
+ this.cleanup();
1991
+ }
1992
+ }
1993
+ }, 500);
1994
+ }
2022
1995
  }
2023
1996
 
2024
1997
  class WindowService {
@@ -2037,37 +2010,58 @@ class WindowService {
2037
2010
  if (!windowInstance) {
2038
2011
  throw new Error("Window instance not found");
2039
2012
  }
2040
- const response = firstValueFrom(windowController.messages$.pipe(filter((event) => event.data.type === AirMessageTypes.INITIALIZATION_RESPONSE)));
2041
- windowController.postMessage({ type: AirMessageTypes.INITIALIZATION_REQUEST, payload }, [port]);
2013
+ const response = firstValueFrom(windowController.messages$.pipe(filter((event) => event.data.type ===
2014
+ AirWalletMessageTypes.INITIALIZATION_RESPONSE)));
2015
+ windowController.postMessage({ type: AirWalletMessageTypes.INITIALIZATION_REQUEST, payload }, [
2016
+ port,
2017
+ ]);
2042
2018
  return (await response).data;
2043
2019
  }
2044
- async openAndInitializeWalletServiceWindow({ url, windowId, partnerId, enableLogging, port, }) {
2020
+ async openAndInitializeWalletServiceWindow({ url, windowId, partnerId, enableLogging, onRetry, }) {
2045
2021
  if (this.windowControllers.has(windowId)) {
2046
2022
  throw new Error("Window controller already exists");
2047
2023
  }
2048
- const windowController = new WindowController(url, windowId);
2049
- this.windowControllers.set(windowId, windowController);
2050
- windowController.openWindow();
2024
+ const windowController = new WindowController(windowId, url);
2025
+ const { pendingWindowOpenCheck } = await windowController.openWindow(onRetry);
2051
2026
  windowController.onClose(() => {
2052
2027
  this.removeWindowController(windowId);
2053
2028
  });
2054
- await new Promise((resolve, reject) => {
2055
- windowController.onMessage(async (ev) => {
2056
- if (ev.data === AirMessageTypes.SERVICE_STARTED) {
2057
- const { payload } = await this.sendWindowInitializationRequest(windowId, {
2058
- partnerId,
2059
- enableLogging,
2060
- }, port);
2061
- if (payload.success === false) {
2062
- reject(new AirServiceError(payload.errorName, payload.errorMessage));
2063
- }
2064
- else {
2065
- resolve();
2029
+ this.windowControllers.set(windowId, windowController);
2030
+ let channel = null;
2031
+ const initializeWindow = () => {
2032
+ return new Promise((resolve, reject) => {
2033
+ windowController.onMessage(async (ev) => {
2034
+ if (ev.data === AirWalletMessageTypes.SERVICE_STARTED) {
2035
+ try {
2036
+ channel = new MessageChannel();
2037
+ const { payload } = await this.sendWindowInitializationRequest(windowId, {
2038
+ partnerId,
2039
+ enableLogging,
2040
+ }, channel.port1);
2041
+ if (payload.success === false) {
2042
+ reject(new AirServiceError(payload.errorName, payload.errorMessage));
2043
+ }
2044
+ else {
2045
+ resolve();
2046
+ }
2047
+ }
2048
+ catch (e) {
2049
+ reject(e);
2050
+ }
2066
2051
  }
2067
- }
2052
+ });
2068
2053
  });
2069
- });
2070
- return windowController;
2054
+ };
2055
+ const initializeWindowPromise = initializeWindow();
2056
+ const result = await pendingWindowOpenCheck;
2057
+ if (result === "retry") {
2058
+ // we can ignore previous initialization attempt since a new window was opened
2059
+ await initializeWindow();
2060
+ }
2061
+ else {
2062
+ await initializeWindowPromise;
2063
+ }
2064
+ return { windowController, port: channel.port2 };
2071
2065
  }
2072
2066
  getWindowController(windowId) {
2073
2067
  return this.windowControllers.get(windowId);
@@ -2078,7 +2072,380 @@ class WindowService {
2078
2072
  }
2079
2073
  var WindowService$1 = WindowService.instance;
2080
2074
 
2081
- var _AirService_instances, _AirService_loginResult, _AirService_buildEnv, _AirService_enableLogging, _AirService_partnerId, _AirService_authIframeController, _AirService_isAuthInitialized, _AirService_airAuthListener, _AirService_walletIframeController, _AirService_walletInitialization, _AirService_walletLoggedInResult, _AirService_airWalletProvider, _AirService_ensureWallet, _AirService_initializeWallet, _AirService_subscribeToWalletEvents, _AirService_triggerEventListeners, _AirService_triggerAirAuthInitialized, _AirService_triggerAirAuthLoggedIn, _AirService_triggerAirAuthLoggedOut, _AirService_triggerWalletInitialized, _AirService_createLoginResult, _AirService_createWalletInitializedResult, _AirService_cleanUpAuth, _AirService_cleanUpWallet;
2075
+ var _a$1, _AuthMessageService_instance;
2076
+ const ALLOWED_AUTH_MESSAGES = [
2077
+ AirAuthMessageTypes.INITIALIZATION_RESPONSE,
2078
+ AirAuthMessageTypes.LOGIN_RESPONSE,
2079
+ AirAuthMessageTypes.SETUP_WALLET_REQUEST,
2080
+ AirAuthMessageTypes.LOGOUT_RESPONSE,
2081
+ AirAuthMessageTypes.PARTNER_USER_INFO_RESPONSE,
2082
+ AirAuthMessageTypes.CROSS_PARTNER_TOKEN_RESPONSE,
2083
+ AirAuthMessageTypes.PARTNER_ACCESS_TOKEN_RESPONSE,
2084
+ AirAuthMessageTypes.IFRAME_VISIBILITY_REQUEST,
2085
+ ];
2086
+ class AuthMessageService extends MessageServiceBase {
2087
+ static create() {
2088
+ if (__classPrivateFieldGet(this, _a$1, "f", _AuthMessageService_instance))
2089
+ throw new Error("AuthMessageService already created");
2090
+ __classPrivateFieldSet(this, _a$1, new _a$1("Embed Service: Auth Channel", ALLOWED_AUTH_MESSAGES), "f", _AuthMessageService_instance);
2091
+ return __classPrivateFieldGet(this, _a$1, "f", _AuthMessageService_instance);
2092
+ }
2093
+ async open(authIframe) {
2094
+ const origin = new URL(authIframe.src).origin;
2095
+ const window = authIframe.contentWindow;
2096
+ await super._open({ window, origin });
2097
+ }
2098
+ async initWalletCommunication(port) {
2099
+ await this.sendMessage({
2100
+ type: AirAuthMessageTypes.INIT_WALLET_COMMUNICATION,
2101
+ }, [port]);
2102
+ }
2103
+ async sendPartnerUserInfoRequest() {
2104
+ const response = firstValueFrom(this.messages$.pipe(filter((msg) => msg.type === AirAuthMessageTypes.PARTNER_USER_INFO_RESPONSE)));
2105
+ await this.sendMessage({
2106
+ type: AirAuthMessageTypes.PARTNER_USER_INFO_REQUEST,
2107
+ payload: { allowCache: false },
2108
+ });
2109
+ return response;
2110
+ }
2111
+ async sendLoginRequest(payload) {
2112
+ const response = firstValueFrom(this.messages$.pipe(filter((msg) => msg.type === AirAuthMessageTypes.LOGIN_RESPONSE)));
2113
+ await this.sendMessage({ type: AirAuthMessageTypes.LOGIN_REQUEST, payload });
2114
+ return response;
2115
+ }
2116
+ async logout() {
2117
+ const response = firstValueFrom(this.messages$.pipe(filter((msg) => msg.type === AirAuthMessageTypes.LOGOUT_RESPONSE)));
2118
+ await this.sendMessage({ type: AirAuthMessageTypes.LOGOUT_REQUEST });
2119
+ return response;
2120
+ }
2121
+ async resetWalletCommunication() {
2122
+ await this.sendMessage({ type: AirAuthMessageTypes.RESET_WALLET_COMMUNICATION });
2123
+ }
2124
+ async sendInitializationRequest(payload) {
2125
+ const response = firstValueFrom(this.messages$.pipe(filter((msg) => msg.type === AirAuthMessageTypes.INITIALIZATION_RESPONSE)));
2126
+ await this.sendMessage({ type: AirAuthMessageTypes.INITIALIZATION_REQUEST, payload });
2127
+ return response;
2128
+ }
2129
+ async sendSetupWalletSuccessResponse() {
2130
+ await this.sendMessage({
2131
+ type: AirAuthMessageTypes.SETUP_WALLET_RESPONSE,
2132
+ payload: {
2133
+ success: true,
2134
+ },
2135
+ });
2136
+ }
2137
+ async sendSetupWalletErrorResponse(error) {
2138
+ await this.sendMessage(this.createErrorResponseMessage(AirAuthMessageTypes.SETUP_WALLET_RESPONSE, error));
2139
+ }
2140
+ async sendCrossPartnerTokenRequest(targetPartnerUrl) {
2141
+ const response = firstValueFrom(this.messages$.pipe(filter((msg) => msg.type === AirAuthMessageTypes.CROSS_PARTNER_TOKEN_RESPONSE)));
2142
+ await this.sendMessage({
2143
+ type: AirAuthMessageTypes.CROSS_PARTNER_TOKEN_REQUEST,
2144
+ payload: {
2145
+ targetPartnerUrl,
2146
+ },
2147
+ });
2148
+ return response;
2149
+ }
2150
+ async sendPartnerAccessTokenRequest() {
2151
+ const response = firstValueFrom(this.messages$.pipe(filter((msg) => msg.type === AirAuthMessageTypes.PARTNER_ACCESS_TOKEN_RESPONSE)));
2152
+ await this.sendMessage({ type: AirAuthMessageTypes.PARTNER_ACCESS_TOKEN_REQUEST });
2153
+ return response;
2154
+ }
2155
+ }
2156
+ _a$1 = AuthMessageService;
2157
+ _AuthMessageService_instance = { value: undefined };
2158
+
2159
+ var _a, _WalletMessageService_instance;
2160
+ const ALLOWED_WALLET_MESSAGES = [
2161
+ AirWalletMessageTypes.INITIALIZATION_RESPONSE,
2162
+ AirWalletMessageTypes.WALLET_INITIALIZED,
2163
+ AirWalletMessageTypes.WALLET_LOGIN_RESPONSE,
2164
+ AirWalletMessageTypes.SETUP_OR_UPDATE_MFA_RESPONSE,
2165
+ AirWalletMessageTypes.CLAIM_ID_RESPONSE,
2166
+ AirWalletMessageTypes.IS_SMART_ACCOUNT_DEPLOYED_RESPONSE,
2167
+ AirWalletMessageTypes.DEPLOY_SMART_ACCOUNT_RESPONSE,
2168
+ AirWalletMessageTypes.EXECUTE_ACTION_RESPONSE,
2169
+ AirWalletMessageTypes.REVOKE_PERMISSIONS_RESPONSE,
2170
+ AirWalletMessageTypes.GRANT_PERMISSIONS_RESPONSE,
2171
+ AirWalletMessageTypes.LIST_ALL_SESSION_KEY_SCOPES_RESPONSE,
2172
+ AirWalletMessageTypes.WALLET_INITIALIZED,
2173
+ AirWalletMessageTypes.WALLET_IFRAME_VISIBILITY_REQUEST,
2174
+ AirWalletMessageTypes.LOGOUT_RESPONSE,
2175
+ AirWalletMessageTypes.OPEN_WINDOW_REQUEST,
2176
+ AirWalletMessageTypes.OPEN_WINDOW_RETRY_RESPONSE,
2177
+ ];
2178
+ class WalletMessageService extends MessageServiceBase {
2179
+ static create() {
2180
+ if (__classPrivateFieldGet(this, _a, "f", _WalletMessageService_instance))
2181
+ throw new Error("WalletMessageService already created");
2182
+ __classPrivateFieldSet(this, _a, new _a("Embed Service: Wallet Channel", ALLOWED_WALLET_MESSAGES), "f", _WalletMessageService_instance);
2183
+ return __classPrivateFieldGet(this, _a, "f", _WalletMessageService_instance);
2184
+ }
2185
+ async open(walletIframe) {
2186
+ const origin = new URL(walletIframe.src).origin;
2187
+ const window = walletIframe.contentWindow;
2188
+ await super._open({ window, origin });
2189
+ }
2190
+ async initAuthCommunication(skipWalletLogin, port) {
2191
+ await this.sendMessage({
2192
+ type: AirWalletMessageTypes.INIT_AUTH_COMMUNICATION,
2193
+ payload: {
2194
+ skipWalletLogin,
2195
+ },
2196
+ }, [port]);
2197
+ }
2198
+ async sendGrantPermissionRequest(policies) {
2199
+ const response = firstValueFrom(this.messages$.pipe(filter((msg) => msg.type === AirWalletMessageTypes.GRANT_PERMISSIONS_RESPONSE)));
2200
+ await this.sendMessage({
2201
+ type: AirWalletMessageTypes.GRANT_PERMISSIONS_REQUEST,
2202
+ payload: {
2203
+ policies,
2204
+ },
2205
+ });
2206
+ const result = await response;
2207
+ if (result.payload.success === false) {
2208
+ throw new AirServiceError(result.payload.errorName, result.payload.errorMessage);
2209
+ }
2210
+ return result.payload.sessionData;
2211
+ }
2212
+ async sendExecuteActionRequest(params) {
2213
+ const response = firstValueFrom(this.messages$.pipe(filter((msg) => msg.type === AirWalletMessageTypes.EXECUTE_ACTION_RESPONSE)));
2214
+ await this.sendMessage({
2215
+ type: AirWalletMessageTypes.EXECUTE_ACTION_REQUEST,
2216
+ payload: {
2217
+ sessionData: params.sessionData,
2218
+ call: {
2219
+ to: params.call.to,
2220
+ value: params.call.value,
2221
+ data: params.call.data,
2222
+ },
2223
+ sessionOwnerPrivateKey: params.sessionOwnerPrivateKey,
2224
+ },
2225
+ });
2226
+ const result = await response;
2227
+ if (result.payload.success === false) {
2228
+ throw new AirServiceError(result.payload.errorName, result.payload.errorMessage);
2229
+ }
2230
+ return result.payload.txHash;
2231
+ }
2232
+ async sendRevokePermissionsRequest(permissionId) {
2233
+ const response = firstValueFrom(this.messages$.pipe(filter((msg) => msg.type === AirWalletMessageTypes.REVOKE_PERMISSIONS_RESPONSE)));
2234
+ await this.sendMessage({
2235
+ type: AirWalletMessageTypes.REVOKE_PERMISSIONS_REQUEST,
2236
+ payload: {
2237
+ permissionId,
2238
+ },
2239
+ });
2240
+ const result = await response;
2241
+ if (result.payload.success === false) {
2242
+ throw new AirServiceError(result.payload.errorName, result.payload.errorMessage);
2243
+ }
2244
+ return result.payload.txHash;
2245
+ }
2246
+ async sendDeploySmartAccountRequest() {
2247
+ const response = firstValueFrom(this.messages$.pipe(filter((msg) => msg.type === AirWalletMessageTypes.DEPLOY_SMART_ACCOUNT_RESPONSE)));
2248
+ await this.sendMessage({
2249
+ type: AirWalletMessageTypes.DEPLOY_SMART_ACCOUNT_REQUEST,
2250
+ });
2251
+ return response;
2252
+ }
2253
+ async sendIsSmartAccountDeployedRequest() {
2254
+ const response = firstValueFrom(this.messages$.pipe(filter((msg) => msg.type === AirWalletMessageTypes.IS_SMART_ACCOUNT_DEPLOYED_RESPONSE)));
2255
+ await this.sendMessage({
2256
+ type: AirWalletMessageTypes.IS_SMART_ACCOUNT_DEPLOYED_REQUEST,
2257
+ });
2258
+ return response;
2259
+ }
2260
+ async logout() {
2261
+ const response = firstValueFrom(this.messages$.pipe(filter((msg) => msg.type === AirWalletMessageTypes.LOGOUT_RESPONSE)));
2262
+ await this.sendMessage({ type: AirWalletMessageTypes.LOGOUT_REQUEST });
2263
+ return response;
2264
+ }
2265
+ async sendInitializationRequest(payload) {
2266
+ const response = firstValueFrom(this.messages$.pipe(filter((msg) => msg.type === AirWalletMessageTypes.INITIALIZATION_RESPONSE)));
2267
+ await this.sendMessage({ type: AirWalletMessageTypes.INITIALIZATION_REQUEST, payload });
2268
+ return response;
2269
+ }
2270
+ async sendGrantPermissionsRequest(payload) {
2271
+ const response = firstValueFrom(this.messages$.pipe(filter((msg) => msg.type === AirWalletMessageTypes.GRANT_PERMISSIONS_RESPONSE)));
2272
+ await this.sendMessage({ type: AirWalletMessageTypes.GRANT_PERMISSIONS_REQUEST, payload });
2273
+ return response;
2274
+ }
2275
+ async sendListAllSessionKeyScopesRequest() {
2276
+ const response = firstValueFrom(this.messages$.pipe(filter((msg) => msg.type === AirWalletMessageTypes.LIST_ALL_SESSION_KEY_SCOPES_RESPONSE)));
2277
+ await this.sendMessage({ type: AirWalletMessageTypes.LIST_ALL_SESSION_KEY_SCOPES_REQUEST });
2278
+ return response;
2279
+ }
2280
+ onInitialized() {
2281
+ return firstValueFrom(this.messages$.pipe(filter((msg) => msg.type === AirWalletMessageTypes.WALLET_INITIALIZED)));
2282
+ }
2283
+ async sendLoginRequest() {
2284
+ const response = firstValueFrom(this.messages$.pipe(filter((msg) => msg.type === AirWalletMessageTypes.WALLET_LOGIN_RESPONSE)));
2285
+ await this.sendMessage({
2286
+ type: AirWalletMessageTypes.WALLET_LOGIN_REQUEST,
2287
+ });
2288
+ return response;
2289
+ }
2290
+ async sendSetupMfaRequest() {
2291
+ const response = firstValueFrom(this.messages$.pipe(filter((msg) => msg.type === AirWalletMessageTypes.SETUP_OR_UPDATE_MFA_RESPONSE)));
2292
+ await this.sendMessage({
2293
+ type: AirWalletMessageTypes.SETUP_OR_UPDATE_MFA_REQUEST,
2294
+ });
2295
+ return response;
2296
+ }
2297
+ async sendOpenWindowSuccessResponse(windowId, port) {
2298
+ await this.sendMessage({
2299
+ type: AirWalletMessageTypes.OPEN_WINDOW_RESPONSE,
2300
+ payload: {
2301
+ success: true,
2302
+ windowId,
2303
+ },
2304
+ }, [port]);
2305
+ }
2306
+ async sendOpenWindowErrorResponse(windowId, error) {
2307
+ const errorResponse = this.createErrorResponseMessage(AirWalletMessageTypes.OPEN_WINDOW_RESPONSE, error);
2308
+ await this.sendMessage({
2309
+ ...errorResponse,
2310
+ payload: { ...errorResponse.payload, windowId },
2311
+ });
2312
+ }
2313
+ async sendOpenWindowRetryRequest(windowId) {
2314
+ const response = firstValueFrom(this.messages$.pipe(filter((msg) => msg.type === AirWalletMessageTypes.OPEN_WINDOW_RETRY_RESPONSE), filter((msg) => msg.payload.windowId === windowId)));
2315
+ await this.sendMessage({
2316
+ type: AirWalletMessageTypes.OPEN_WINDOW_RETRY_REQUEST,
2317
+ payload: { windowId },
2318
+ });
2319
+ return response;
2320
+ }
2321
+ async sendWindowClosed(windowId) {
2322
+ await this.sendMessage({
2323
+ type: AirWalletMessageTypes.WINDOW_CLOSED,
2324
+ payload: {
2325
+ windowId,
2326
+ },
2327
+ });
2328
+ }
2329
+ async sendClaimIdRequest(payload) {
2330
+ const response = firstValueFrom(this.messages$.pipe(filter((msg) => msg.type === AirWalletMessageTypes.CLAIM_ID_RESPONSE)));
2331
+ await this.sendMessage({ type: AirWalletMessageTypes.CLAIM_ID_REQUEST, payload });
2332
+ return response;
2333
+ }
2334
+ }
2335
+ _a = WalletMessageService;
2336
+ _WalletMessageService_instance = { value: undefined };
2337
+
2338
+ function getLevelName(levelNum) {
2339
+ const levelNames = Object.keys(log.levels);
2340
+ if (levelNum >= 0 && levelNum < levelNames.length) {
2341
+ return levelNames[levelNum];
2342
+ }
2343
+ return "UNKNOWN";
2344
+ }
2345
+ const configureLogLevel = (environment, enableLogging) => {
2346
+ let level = log.levels.ERROR;
2347
+ if (environment === "development") {
2348
+ level = enableLogging ? log.levels.TRACE : log.levels.DEBUG;
2349
+ } else if (environment === "staging") {
2350
+ level = enableLogging ? log.levels.DEBUG : log.levels.INFO;
2351
+ } else if (environment === "uat") {
2352
+ level = enableLogging ? log.levels.INFO : log.levels.WARN;
2353
+ } else if (environment === "production") {
2354
+ // Be cautious with enabling more than WARN in prod
2355
+ level = enableLogging ? log.levels.WARN : log.levels.ERROR;
2356
+ }
2357
+ log.setLevel(level);
2358
+ log.info(`[${window?.location?.origin}] Log level set to: ${getLevelName(log.getLevel())}`);
2359
+ };
2360
+
2361
+ var name = "@mocanetwork/airkit";
2362
+ var version = "1.2.0-beta.3";
2363
+ var description = "Air kit to interact with the Moca Network";
2364
+ var main = "dist/airkit.cjs.js";
2365
+ var module = "dist/airkit.esm.js";
2366
+ var unpkg = "dist/airkit.umd.min.js";
2367
+ var jsdelivr = "dist/airkit.umd.min.js";
2368
+ var types = "dist/types/index.d.ts";
2369
+ var files = [
2370
+ "dist"
2371
+ ];
2372
+ var scripts = {
2373
+ build: "rollup --config",
2374
+ prepack: "npm run build && npm run postbuild",
2375
+ lint: "eslint --fix 'src/**/*.ts'",
2376
+ format: "prettier --write 'src/**/*.ts'",
2377
+ postbuild: "node scripts/copyAndAdjustDtsFiles.js '../common/src' 'common'"
2378
+ };
2379
+ var dependencies = {
2380
+ "fast-deep-equal": "^3.1.3",
2381
+ loglevel: "^1.9.2",
2382
+ pump: "^3.0.0",
2383
+ "readable-stream": "^4.5.2",
2384
+ rxjs: "^7.8.1"
2385
+ };
2386
+ var devDependencies = {
2387
+ "@babel/runtime": "^7.25.6",
2388
+ "@rushstack/eslint-patch": "^1.10.2",
2389
+ "@types/pump": "^1.1.3",
2390
+ "@types/readable-stream": "^4.0.15",
2391
+ "fs-extra": "^11.2.0",
2392
+ glob: "^11.0.0",
2393
+ process: "^0.11.10",
2394
+ "typescript-eslint": "^8.21.0"
2395
+ };
2396
+ var mocha = {
2397
+ timeout: 0
2398
+ };
2399
+ var keywords = [
2400
+ "airkit",
2401
+ "mocaverse",
2402
+ "wallet",
2403
+ "embed",
2404
+ "login",
2405
+ "OAuth",
2406
+ "crypto"
2407
+ ];
2408
+ var author = "Mocaverse";
2409
+ var license = "ISC";
2410
+ var engines = {
2411
+ node: ">=18.x",
2412
+ npm: ">=9.x"
2413
+ };
2414
+ var publishConfig = {
2415
+ access: "restricted"
2416
+ };
2417
+ var airkitPackage = {
2418
+ name: name,
2419
+ version: version,
2420
+ description: description,
2421
+ main: main,
2422
+ module: module,
2423
+ unpkg: unpkg,
2424
+ jsdelivr: jsdelivr,
2425
+ types: types,
2426
+ files: files,
2427
+ scripts: scripts,
2428
+ dependencies: dependencies,
2429
+ devDependencies: devDependencies,
2430
+ mocha: mocha,
2431
+ keywords: keywords,
2432
+ author: author,
2433
+ license: license,
2434
+ "lint-staged": {
2435
+ "!(*d).{js,ts}": [
2436
+ "eslint --cache --fix",
2437
+ "prettier --write"
2438
+ ],
2439
+ "*.{json, md}": [
2440
+ "prettier --write"
2441
+ ]
2442
+ },
2443
+ engines: engines,
2444
+ publishConfig: publishConfig
2445
+ };
2446
+
2447
+ var _AirService_instances, _AirService_loginResult, _AirService_buildEnv, _AirService_enableLogging, _AirService_partnerId, _AirService_authMessagingService, _AirService_authIframeController, _AirService_isAuthInitialized, _AirService_airAuthListener, _AirService_walletMessagingService, _AirService_walletIframeController, _AirService_walletInitialization, _AirService_walletLoggedInResult, _AirService_airWalletProvider, _AirService_ensureWallet, _AirService_initializeWallet, _AirService_subscribeToWalletEvents, _AirService_triggerEventListeners, _AirService_triggerAirAuthInitialized, _AirService_triggerAirAuthLoggedIn, _AirService_triggerAirAuthLoggedOut, _AirService_triggerWalletInitialized, _AirService_createLoginResult, _AirService_createWalletInitializedResult, _AirService_cleanUpAuth, _AirService_cleanUpWallet;
2448
+ const airKitVersion = airkitPackage.version;
2082
2449
  class AirService {
2083
2450
  constructor({ partnerId }) {
2084
2451
  _AirService_instances.add(this);
@@ -2087,18 +2454,21 @@ class AirService {
2087
2454
  _AirService_enableLogging.set(this, false);
2088
2455
  _AirService_partnerId.set(this, undefined);
2089
2456
  //#modalZIndex: number; TODO implement z index overwrite
2457
+ _AirService_authMessagingService.set(this, undefined);
2090
2458
  _AirService_authIframeController.set(this, undefined);
2091
2459
  _AirService_isAuthInitialized.set(this, false);
2092
2460
  _AirService_airAuthListener.set(this, []);
2461
+ _AirService_walletMessagingService.set(this, undefined);
2093
2462
  _AirService_walletIframeController.set(this, undefined);
2094
2463
  _AirService_walletInitialization.set(this, undefined);
2095
2464
  _AirService_walletLoggedInResult.set(this, undefined);
2096
2465
  _AirService_airWalletProvider.set(this, undefined);
2097
2466
  __classPrivateFieldSet(this, _AirService_partnerId, partnerId, "f");
2467
+ __classPrivateFieldSet(this, _AirService_authMessagingService, AuthMessageService.create(), "f");
2468
+ __classPrivateFieldSet(this, _AirService_walletMessagingService, WalletMessageService.create(), "f");
2098
2469
  __classPrivateFieldSet(this, _AirService_airWalletProvider, new AirWalletProvider({
2099
2470
  isLoggedIn: () => this.isLoggedIn,
2100
2471
  ensureWallet: __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_ensureWallet).bind(this),
2101
- getWalletIframeController: () => __classPrivateFieldGet(this, _AirService_walletIframeController, "f"),
2102
2472
  }), "f");
2103
2473
  // this.#modalZIndex = modalZIndex ?? 99999;
2104
2474
  }
@@ -2129,61 +2499,46 @@ class AirService {
2129
2499
  return;
2130
2500
  __classPrivateFieldSet(this, _AirService_buildEnv, buildEnv, "f");
2131
2501
  __classPrivateFieldSet(this, _AirService_enableLogging, enableLogging, "f");
2132
- const { authUrl, logLevel } = AIR_URLS[buildEnv];
2133
- log.setDefaultLevel(logLevel);
2134
- if (__classPrivateFieldGet(this, _AirService_enableLogging, "f"))
2135
- log.enableAll();
2136
- else
2137
- log.disableAll();
2502
+ const { authUrl } = AIR_URLS[buildEnv];
2503
+ configureLogLevel(buildEnv, enableLogging);
2138
2504
  const authIframeOrigin = new URL(authUrl).origin;
2139
- await AirMessageService$1.openAuthObservables({ authIframeOrigin });
2140
2505
  __classPrivateFieldSet(this, _AirService_authIframeController, new IframeController(authUrl, `air-auth-${randomId()}`), "f");
2141
- AirMessageService$1.authMessage$.subscribe(async (msg) => {
2142
- switch (msg.type) {
2143
- case AirAuthMessageTypes.IFRAME_VISIBILITY_REQUEST: {
2144
- const authIframeController = __classPrivateFieldGet(this, _AirService_authIframeController, "f");
2145
- authIframeController.setIframeVisibility(msg.payload.visible);
2146
- authIframeController.updateIframeState();
2147
- break;
2148
- }
2149
- case AirAuthMessageTypes.SETUP_WALLET_REQUEST: {
2150
- try {
2151
- await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_ensureWallet).call(this, { skipWalletLogin: true });
2152
- __classPrivateFieldGet(this, _AirService_authIframeController, "f").postMessage({
2153
- type: AirAuthMessageTypes.SETUP_WALLET_RESPONSE,
2154
- payload: {
2155
- success: true,
2156
- },
2157
- });
2506
+ try {
2507
+ __classPrivateFieldGet(this, _AirService_authIframeController, "f").createIframe();
2508
+ await __classPrivateFieldGet(this, _AirService_authMessagingService, "f").open(__classPrivateFieldGet(this, _AirService_authIframeController, "f").iframeElement);
2509
+ __classPrivateFieldGet(this, _AirService_authMessagingService, "f").messages$.subscribe(async (msg) => {
2510
+ switch (msg.type) {
2511
+ case AirAuthMessageTypes.IFRAME_VISIBILITY_REQUEST: {
2512
+ const authIframeController = __classPrivateFieldGet(this, _AirService_authIframeController, "f");
2513
+ authIframeController.setIframeVisibility(msg.payload.visible);
2514
+ authIframeController.updateIframeState();
2515
+ break;
2158
2516
  }
2159
- catch (err) {
2160
- log.error("Error initializing wallet", err);
2161
- const error = AirServiceError.from(err);
2162
- __classPrivateFieldGet(this, _AirService_authIframeController, "f").postMessage({
2163
- type: AirAuthMessageTypes.SETUP_WALLET_RESPONSE,
2164
- payload: {
2165
- success: false,
2166
- errorName: error.name ?? "UNKNOWN_ERROR",
2167
- errorMessage: error.message ?? "Unknown error occurred",
2168
- },
2169
- });
2517
+ case AirAuthMessageTypes.SETUP_WALLET_REQUEST: {
2518
+ try {
2519
+ await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_ensureWallet).call(this, { skipWalletLogin: true });
2520
+ await __classPrivateFieldGet(this, _AirService_authMessagingService, "f").sendSetupWalletSuccessResponse();
2521
+ }
2522
+ catch (err) {
2523
+ const error = ensureError(err);
2524
+ await __classPrivateFieldGet(this, _AirService_authMessagingService, "f").sendSetupWalletErrorResponse(error);
2525
+ }
2526
+ break;
2170
2527
  }
2171
- break;
2172
2528
  }
2173
- }
2174
- });
2175
- try {
2176
- __classPrivateFieldGet(this, _AirService_authIframeController, "f").createIframe();
2529
+ });
2177
2530
  const result = await new Promise((resolve, reject) => {
2178
2531
  const handleAuthMessage = async (ev) => {
2179
2532
  if (ev.origin !== authIframeOrigin)
2180
2533
  return;
2181
2534
  if (ev.data === AirAuthMessageTypes.AUTH_SETUP_COMPLETED) {
2182
2535
  window.removeEventListener("message", handleAuthMessage);
2183
- const { payload } = await AirMessageService$1.sendAuthInitializationRequest(__classPrivateFieldGet(this, _AirService_authIframeController, "f").iframeElement, {
2536
+ const { payload } = await __classPrivateFieldGet(this, _AirService_authMessagingService, "f").sendInitializationRequest({
2184
2537
  partnerId: __classPrivateFieldGet(this, _AirService_partnerId, "f"),
2185
2538
  skipRehydration,
2186
2539
  partnerDAppUrl: window.location.href,
2540
+ sdkVersion: airKitVersion,
2541
+ enableLogging: __classPrivateFieldGet(this, _AirService_enableLogging, "f"),
2187
2542
  });
2188
2543
  if (payload.success === true) {
2189
2544
  resolve(payload);
@@ -2216,8 +2571,7 @@ class AirService {
2216
2571
  throw new Error("Service is not initialized");
2217
2572
  if (__classPrivateFieldGet(this, _AirService_loginResult, "f"))
2218
2573
  return __classPrivateFieldGet(this, _AirService_loginResult, "f");
2219
- const iframeController = __classPrivateFieldGet(this, _AirService_authIframeController, "f");
2220
- const { payload } = await AirMessageService$1.sendAuthLoginRequest(iframeController.iframeElement, {
2574
+ const { payload } = await __classPrivateFieldGet(this, _AirService_authMessagingService, "f").sendLoginRequest({
2221
2575
  partnerLoginToken: options?.authToken,
2222
2576
  });
2223
2577
  if (payload.success === true) {
@@ -2236,7 +2590,7 @@ class AirService {
2236
2590
  await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_ensureWallet).call(this);
2237
2591
  try {
2238
2592
  log.info("deploySmartAccount");
2239
- const { payload } = await AirMessageService$1.sendDeploySmartAccountRequest(__classPrivateFieldGet(this, _AirService_walletIframeController, "f").iframeElement);
2593
+ const { payload } = await __classPrivateFieldGet(this, _AirService_walletMessagingService, "f").sendDeploySmartAccountRequest();
2240
2594
  if (payload.success === false) {
2241
2595
  throw new AirServiceError(payload.errorName, payload.errorMessage);
2242
2596
  }
@@ -2255,7 +2609,9 @@ class AirService {
2255
2609
  await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_ensureWallet).call(this);
2256
2610
  try {
2257
2611
  log.info("grantPermission", policies);
2258
- const { payload } = await AirMessageService$1.sendGrantPermissionsRequest(__classPrivateFieldGet(this, _AirService_walletIframeController, "f").iframeElement, { policies });
2612
+ const { payload } = await __classPrivateFieldGet(this, _AirService_walletMessagingService, "f").sendGrantPermissionsRequest({
2613
+ policies,
2614
+ });
2259
2615
  if (payload.success === false) {
2260
2616
  throw new AirServiceError(payload.errorName, payload.errorMessage);
2261
2617
  }
@@ -2273,7 +2629,7 @@ class AirService {
2273
2629
  throw new Error("Service is not initialized");
2274
2630
  await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_ensureWallet).call(this);
2275
2631
  try {
2276
- const { payload } = await AirMessageService$1.sendListAllSessionKeyScopesRequest(__classPrivateFieldGet(this, _AirService_walletIframeController, "f").iframeElement);
2632
+ const { payload } = await __classPrivateFieldGet(this, _AirService_walletMessagingService, "f").sendListAllSessionKeyScopesRequest();
2277
2633
  if (payload.success === false) {
2278
2634
  throw new AirServiceError(payload.errorName, payload.errorMessage);
2279
2635
  }
@@ -2292,7 +2648,7 @@ class AirService {
2292
2648
  await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_ensureWallet).call(this);
2293
2649
  try {
2294
2650
  log.info("executeAction", params);
2295
- const txHash = await AirMessageService$1.sendExecuteActionRequest(__classPrivateFieldGet(this, _AirService_walletIframeController, "f").iframeElement, params);
2651
+ const txHash = await __classPrivateFieldGet(this, _AirService_walletMessagingService, "f").sendExecuteActionRequest(params);
2296
2652
  return txHash;
2297
2653
  }
2298
2654
  catch (error) {
@@ -2308,7 +2664,7 @@ class AirService {
2308
2664
  await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_ensureWallet).call(this);
2309
2665
  try {
2310
2666
  log.info("revokePermission", permissionId);
2311
- const txHash = await AirMessageService$1.sendRevokePermissionsRequest(__classPrivateFieldGet(this, _AirService_walletIframeController, "f").iframeElement, permissionId);
2667
+ const txHash = await __classPrivateFieldGet(this, _AirService_walletMessagingService, "f").sendRevokePermissionsRequest(permissionId);
2312
2668
  return txHash;
2313
2669
  }
2314
2670
  catch (error) {
@@ -2323,7 +2679,7 @@ class AirService {
2323
2679
  throw new Error("Service is not initialized");
2324
2680
  await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_ensureWallet).call(this);
2325
2681
  try {
2326
- const { payload } = await AirMessageService$1.sendIsSmartAccountDeployedRequest(__classPrivateFieldGet(this, _AirService_walletIframeController, "f").iframeElement);
2682
+ const { payload } = await __classPrivateFieldGet(this, _AirService_walletMessagingService, "f").sendIsSmartAccountDeployedRequest();
2327
2683
  if (payload.success === false) {
2328
2684
  throw new AirServiceError(payload.errorName, payload.errorMessage);
2329
2685
  }
@@ -2341,14 +2697,18 @@ class AirService {
2341
2697
  }
2342
2698
  async setupOrUpdateMfa() {
2343
2699
  await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_ensureWallet).call(this, { skipWalletLogin: true });
2344
- const result = await AirMessageService$1.sendSetupMfaRequest(__classPrivateFieldGet(this, _AirService_walletIframeController, "f").iframeElement);
2700
+ const result = await __classPrivateFieldGet(this, _AirService_walletMessagingService, "f").sendSetupMfaRequest();
2345
2701
  if (result.payload.success === false) {
2346
2702
  throw new AirServiceError(result.payload.errorName, result.payload.errorMessage);
2347
2703
  }
2704
+ __classPrivateFieldSet(this, _AirService_loginResult, {
2705
+ ...__classPrivateFieldGet(this, _AirService_loginResult, "f"),
2706
+ isMFASetup: true,
2707
+ }, "f");
2348
2708
  }
2349
2709
  async claimAirId(options) {
2350
2710
  await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_ensureWallet).call(this);
2351
- const result = await AirMessageService$1.sendClaimIdRequest(__classPrivateFieldGet(this, _AirService_walletIframeController, "f").iframeElement, options ?? {});
2711
+ const result = await __classPrivateFieldGet(this, _AirService_walletMessagingService, "f").sendClaimIdRequest(options ?? {});
2352
2712
  if (result.payload.success === true) {
2353
2713
  return { airId: result.payload.airId };
2354
2714
  }
@@ -2357,7 +2717,7 @@ class AirService {
2357
2717
  async getUserInfo() {
2358
2718
  if (!this.isLoggedIn)
2359
2719
  throw new Error("User not logged in");
2360
- const info = await AirMessageService$1.sendPartnerUserInfoRequest(__classPrivateFieldGet(this, _AirService_authIframeController, "f").iframeElement);
2720
+ const info = await __classPrivateFieldGet(this, _AirService_authMessagingService, "f").sendPartnerUserInfoRequest();
2361
2721
  if (info.payload.success === false) {
2362
2722
  throw new AirServiceError(info.payload.errorName, info.payload.errorMessage);
2363
2723
  }
@@ -2378,7 +2738,7 @@ class AirService {
2378
2738
  throw new Error("Service is not initialized");
2379
2739
  if (!this.isLoggedIn)
2380
2740
  throw new Error("No active session to generate token");
2381
- const result = await AirMessageService$1.sendCrossPartnerTokenRequest(__classPrivateFieldGet(this, _AirService_authIframeController, "f").iframeElement, partnerUrl);
2741
+ const result = await __classPrivateFieldGet(this, _AirService_authMessagingService, "f").sendCrossPartnerTokenRequest(partnerUrl);
2382
2742
  if (result.payload.success === false) {
2383
2743
  throw new AirServiceError(result.payload.errorName, result.payload.errorMessage);
2384
2744
  }
@@ -2391,7 +2751,7 @@ class AirService {
2391
2751
  throw new Error("Service is not initialized");
2392
2752
  if (!this.isLoggedIn)
2393
2753
  throw new Error("No active session to get partner access token");
2394
- const result = await AirMessageService$1.sendPartnerAccessTokenRequest(__classPrivateFieldGet(this, _AirService_authIframeController, "f").iframeElement);
2754
+ const result = await __classPrivateFieldGet(this, _AirService_authMessagingService, "f").sendPartnerAccessTokenRequest();
2395
2755
  if (result.payload.success !== true) {
2396
2756
  throw new AirServiceError(result.payload.errorName, result.payload.errorMessage);
2397
2757
  }
@@ -2407,7 +2767,7 @@ class AirService {
2407
2767
  throw new Error("No active session to logout");
2408
2768
  // Clear up wallet
2409
2769
  await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_cleanUpWallet).call(this);
2410
- await AirMessageService$1.logoutAuth(__classPrivateFieldGet(this, _AirService_authIframeController, "f").iframeElement);
2770
+ await __classPrivateFieldGet(this, _AirService_authMessagingService, "f").logout();
2411
2771
  __classPrivateFieldSet(this, _AirService_loginResult, undefined, "f");
2412
2772
  __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_triggerAirAuthLoggedOut).call(this);
2413
2773
  }
@@ -2428,7 +2788,7 @@ class AirService {
2428
2788
  __classPrivateFieldSet(this, _AirService_airAuthListener, [], "f");
2429
2789
  }
2430
2790
  }
2431
- _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_walletLoggedInResult = new WeakMap(), _AirService_airWalletProvider = new WeakMap(), _AirService_instances = new WeakSet(), _AirService_ensureWallet = async function _AirService_ensureWallet(option) {
2791
+ _AirService_loginResult = new WeakMap(), _AirService_buildEnv = new WeakMap(), _AirService_enableLogging = new WeakMap(), _AirService_partnerId = new WeakMap(), _AirService_authMessagingService = new WeakMap(), _AirService_authIframeController = new WeakMap(), _AirService_isAuthInitialized = new WeakMap(), _AirService_airAuthListener = new WeakMap(), _AirService_walletMessagingService = new WeakMap(), _AirService_walletIframeController = new WeakMap(), _AirService_walletInitialization = new WeakMap(), _AirService_walletLoggedInResult = new WeakMap(), _AirService_airWalletProvider = new WeakMap(), _AirService_instances = new WeakSet(), _AirService_ensureWallet = async function _AirService_ensureWallet(option) {
2432
2792
  if (!this.isInitialized)
2433
2793
  throw new Error("Service not initialized");
2434
2794
  if (!this.isLoggedIn && !option?.skipWalletLogin)
@@ -2450,7 +2810,7 @@ _AirService_loginResult = new WeakMap(), _AirService_buildEnv = new WeakMap(), _
2450
2810
  }
2451
2811
  if (__classPrivateFieldGet(this, _AirService_walletLoggedInResult, "f"))
2452
2812
  return __classPrivateFieldGet(this, _AirService_walletLoggedInResult, "f");
2453
- const walletLoginResult = await AirMessageService$1.sendWalletLoginRequest(__classPrivateFieldGet(this, _AirService_walletIframeController, "f").iframeElement);
2813
+ const walletLoginResult = await __classPrivateFieldGet(this, _AirService_walletMessagingService, "f").sendLoginRequest();
2454
2814
  if (walletLoginResult.payload.success !== true) {
2455
2815
  throw new AirServiceError(walletLoginResult.payload.errorName, walletLoginResult.payload.errorMessage);
2456
2816
  }
@@ -2461,20 +2821,17 @@ _AirService_loginResult = new WeakMap(), _AirService_buildEnv = new WeakMap(), _
2461
2821
  const { walletUrl } = AIR_URLS[__classPrivateFieldGet(this, _AirService_buildEnv, "f")];
2462
2822
  log.info(walletUrl, "url loaded");
2463
2823
  const walletIframeOrigin = new URL(walletUrl).origin;
2464
- await AirMessageService$1.openWalletObservables({ walletIframeOrigin });
2465
2824
  try {
2466
- __classPrivateFieldSet(this, _AirService_walletIframeController, new IframeController(walletUrl, `air-wallet-${randomId()}`), "f");
2467
- __classPrivateFieldGet(this, _AirService_walletIframeController, "f").createIframe();
2468
- __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_subscribeToWalletEvents).call(this);
2469
- await new Promise((resolve, reject) => {
2470
- const handleAuthMessage = async (ev) => {
2825
+ const walletInitRequestPromise = new Promise((resolve, reject) => {
2826
+ const handleWalletMessage = async (ev) => {
2471
2827
  if (ev.origin !== walletIframeOrigin)
2472
2828
  return;
2473
- if (ev.data === AirMessageTypes.SERVICE_STARTED) {
2474
- window.removeEventListener("message", handleAuthMessage);
2475
- const { payload } = await AirMessageService$1.sendWalletInitializationRequest(__classPrivateFieldGet(this, _AirService_walletIframeController, "f").iframeElement, {
2829
+ if (ev.data === AirWalletMessageTypes.SERVICE_STARTED) {
2830
+ window.removeEventListener("message", handleWalletMessage);
2831
+ const { payload } = await __classPrivateFieldGet(this, _AirService_walletMessagingService, "f").sendInitializationRequest({
2476
2832
  partnerId: __classPrivateFieldGet(this, _AirService_partnerId, "f"),
2477
2833
  enableLogging: __classPrivateFieldGet(this, _AirService_enableLogging, "f"),
2834
+ sdkVersion: airKitVersion,
2478
2835
  });
2479
2836
  if (payload.success === true) {
2480
2837
  resolve();
@@ -2484,11 +2841,18 @@ _AirService_loginResult = new WeakMap(), _AirService_buildEnv = new WeakMap(), _
2484
2841
  }
2485
2842
  }
2486
2843
  };
2487
- window.addEventListener("message", handleAuthMessage);
2844
+ window.addEventListener("message", handleWalletMessage);
2488
2845
  });
2489
- __classPrivateFieldGet(this, _AirService_airWalletProvider, "f").startEventMessageListening();
2490
- const walletInitPromise = AirMessageService$1.onWalletInitialized();
2491
- AirMessageService$1.setupIframeCommunication(__classPrivateFieldGet(this, _AirService_authIframeController, "f").iframeElement, __classPrivateFieldGet(this, _AirService_walletIframeController, "f").iframeElement, option?.skipWalletLogin ?? false);
2846
+ __classPrivateFieldSet(this, _AirService_walletIframeController, new IframeController(walletUrl, `air-wallet-${randomId()}`), "f");
2847
+ __classPrivateFieldGet(this, _AirService_walletIframeController, "f").createIframe();
2848
+ await __classPrivateFieldGet(this, _AirService_walletMessagingService, "f").open(__classPrivateFieldGet(this, _AirService_walletIframeController, "f").iframeElement);
2849
+ __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_subscribeToWalletEvents).call(this);
2850
+ await __classPrivateFieldGet(this, _AirService_airWalletProvider, "f").startEventMessageListening(__classPrivateFieldGet(this, _AirService_walletIframeController, "f").iframeElement);
2851
+ const walletInitPromise = __classPrivateFieldGet(this, _AirService_walletMessagingService, "f").onInitialized();
2852
+ await walletInitRequestPromise;
2853
+ const channel = new MessageChannel();
2854
+ await __classPrivateFieldGet(this, _AirService_authMessagingService, "f").initWalletCommunication(channel.port1);
2855
+ await __classPrivateFieldGet(this, _AirService_walletMessagingService, "f").initAuthCommunication(option?.skipWalletLogin ?? false, channel.port2);
2492
2856
  const walletInitResult = await walletInitPromise;
2493
2857
  if (walletInitResult.payload.success !== true) {
2494
2858
  throw new AirServiceError(walletInitResult.payload.errorName, walletInitResult.payload.errorMessage);
@@ -2505,37 +2869,42 @@ _AirService_loginResult = new WeakMap(), _AirService_buildEnv = new WeakMap(), _
2505
2869
  throw error;
2506
2870
  }
2507
2871
  }, _AirService_subscribeToWalletEvents = function _AirService_subscribeToWalletEvents() {
2508
- AirMessageService$1.messages$.subscribe(async (msg) => {
2872
+ __classPrivateFieldGet(this, _AirService_walletMessagingService, "f").messages$.subscribe(async (msg) => {
2509
2873
  switch (msg.type) {
2510
- case AirMessageTypes.WALLET_IFRAME_VISIBILITY_REQUEST: {
2874
+ case AirWalletMessageTypes.WALLET_IFRAME_VISIBILITY_REQUEST: {
2511
2875
  const walletIframeController = __classPrivateFieldGet(this, _AirService_walletIframeController, "f");
2512
2876
  walletIframeController.setIframeVisibility(msg.payload.visible);
2513
2877
  walletIframeController.updateIframeState();
2514
2878
  break;
2515
2879
  }
2516
- case AirMessageTypes.WALLET_LOGIN_RESPONSE: {
2880
+ case AirWalletMessageTypes.WALLET_LOGIN_RESPONSE: {
2517
2881
  if (msg.payload.success === true && !__classPrivateFieldGet(this, _AirService_walletLoggedInResult, "f")) {
2518
2882
  __classPrivateFieldSet(this, _AirService_walletLoggedInResult, __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_createWalletInitializedResult).call(this, msg.payload), "f");
2519
2883
  __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_triggerWalletInitialized).call(this, __classPrivateFieldGet(this, _AirService_walletLoggedInResult, "f"));
2520
2884
  }
2521
2885
  break;
2522
2886
  }
2523
- case AirMessageTypes.OPEN_WINDOW_REQUEST: {
2887
+ case AirWalletMessageTypes.OPEN_WINDOW_REQUEST: {
2524
2888
  try {
2525
- const channel = new MessageChannel();
2526
- const windowController = await WindowService$1.openAndInitializeWalletServiceWindow({
2889
+ const onRetry = async () => {
2890
+ const { payload } = await __classPrivateFieldGet(this, _AirService_walletMessagingService, "f").sendOpenWindowRetryRequest(msg.payload.windowId);
2891
+ if (payload.success === false) {
2892
+ throw new AirServiceError(payload.errorName, payload.errorMessage);
2893
+ }
2894
+ };
2895
+ const { windowController, port } = await WindowService$1.openAndInitializeWalletServiceWindow({
2527
2896
  url: msg.payload.url,
2528
2897
  windowId: msg.payload.windowId,
2529
2898
  partnerId: __classPrivateFieldGet(this, _AirService_partnerId, "f"),
2530
2899
  enableLogging: __classPrivateFieldGet(this, _AirService_enableLogging, "f"),
2531
- port: channel.port1,
2900
+ onRetry,
2532
2901
  });
2533
- windowController.onClose(() => AirMessageService$1.sendWindowClosed(__classPrivateFieldGet(this, _AirService_walletIframeController, "f").iframeElement, msg.payload.windowId));
2534
- AirMessageService$1.sendOpenWindowSuccessResponse(__classPrivateFieldGet(this, _AirService_walletIframeController, "f").iframeElement, msg.payload.windowId, channel.port2);
2902
+ windowController.onClose(async () => await __classPrivateFieldGet(this, _AirService_walletMessagingService, "f").sendWindowClosed(msg.payload.windowId));
2903
+ await __classPrivateFieldGet(this, _AirService_walletMessagingService, "f").sendOpenWindowSuccessResponse(msg.payload.windowId, port);
2535
2904
  }
2536
2905
  catch (err) {
2537
2906
  const error = ensureError(err);
2538
- AirMessageService$1.sendOpenWindowErrorResponse(__classPrivateFieldGet(this, _AirService_walletIframeController, "f").iframeElement, msg.payload.windowId, error);
2907
+ await __classPrivateFieldGet(this, _AirService_walletMessagingService, "f").sendOpenWindowErrorResponse(msg.payload.windowId, error);
2539
2908
  }
2540
2909
  break;
2541
2910
  }
@@ -2580,7 +2949,7 @@ _AirService_loginResult = new WeakMap(), _AirService_buildEnv = new WeakMap(), _
2580
2949
  };
2581
2950
  }, _AirService_cleanUpAuth = async function _AirService_cleanUpAuth() {
2582
2951
  // Logout auth session
2583
- await AirMessageService$1.logoutAuth(__classPrivateFieldGet(this, _AirService_authIframeController, "f").iframeElement);
2952
+ await __classPrivateFieldGet(this, _AirService_authMessagingService, "f").logout();
2584
2953
  // Destroy the auth iframe
2585
2954
  const authIframeElement = __classPrivateFieldGet(this, _AirService_authIframeController, "f")?.iframeElement;
2586
2955
  if (isElement(authIframeElement) && window.document.body.contains(authIframeElement)) {
@@ -2588,7 +2957,7 @@ _AirService_loginResult = new WeakMap(), _AirService_buildEnv = new WeakMap(), _
2588
2957
  __classPrivateFieldSet(this, _AirService_authIframeController, undefined, "f");
2589
2958
  }
2590
2959
  // Close the message service
2591
- AirMessageService$1.closeAuthObservables();
2960
+ await __classPrivateFieldGet(this, _AirService_authMessagingService, "f").close();
2592
2961
  __classPrivateFieldSet(this, _AirService_isAuthInitialized, false, "f");
2593
2962
  }, _AirService_cleanUpWallet = async function _AirService_cleanUpWallet() {
2594
2963
  if (!__classPrivateFieldGet(this, _AirService_isAuthInitialized, "f"))
@@ -2596,18 +2965,18 @@ _AirService_loginResult = new WeakMap(), _AirService_buildEnv = new WeakMap(), _
2596
2965
  // Logout wallet and destroy the wallet iframe
2597
2966
  const walletIframeElement = __classPrivateFieldGet(this, _AirService_walletIframeController, "f")?.iframeElement;
2598
2967
  if (isElement(walletIframeElement) && window.document.body.contains(walletIframeElement)) {
2599
- await AirMessageService$1.logoutWallet(walletIframeElement);
2968
+ await __classPrivateFieldGet(this, _AirService_walletMessagingService, "f").logout();
2600
2969
  __classPrivateFieldGet(this, _AirService_walletIframeController, "f").destroy();
2601
2970
  __classPrivateFieldSet(this, _AirService_walletIframeController, undefined, "f");
2602
2971
  }
2603
2972
  const authIframeElement = __classPrivateFieldGet(this, _AirService_authIframeController, "f")?.iframeElement;
2604
2973
  if (isElement(authIframeElement) && window.document.body.contains(authIframeElement)) {
2605
- AirMessageService$1.sendResetAuthServiceWalletCommunication(authIframeElement);
2974
+ await __classPrivateFieldGet(this, _AirService_authMessagingService, "f").resetWalletCommunication();
2606
2975
  }
2607
2976
  // Close the message service
2608
- AirMessageService$1.closeAirObservables();
2977
+ await __classPrivateFieldGet(this, _AirService_walletMessagingService, "f").close();
2609
2978
  __classPrivateFieldSet(this, _AirService_walletLoggedInResult, undefined, "f");
2610
2979
  __classPrivateFieldSet(this, _AirService_walletInitialization, undefined, "f");
2611
2980
  };
2612
2981
 
2613
- export { AirService, AirServiceError, BUILD_ENV, ChainDisconnectedError, InternalRpcError, InvalidParamsRpcError, InvalidRequestRpcError, MethodNotFoundRpcError, ProviderDisconnectedError, SwitchChainError, TransactionRejectedRpcError, UnauthorizedProviderError, UnsupportedProviderMethodError, UserRejectedRequestError, ensureProviderRpcError };
2982
+ export { AirService, AirServiceError, BUILD_ENV, ChainDisconnectedError, InternalRpcError, InvalidParamsRpcError, InvalidRequestRpcError, MethodNotFoundRpcError, ProviderDisconnectedError, ProviderRpcError, SwitchChainError, TransactionRejectedRpcError, UnauthorizedProviderError, UnsupportedProviderMethodError, UserRejectedRequestError, ensureProviderRpcError };