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