@mocanetwork/airkit 1.7.0 → 1.8.0-beta.2

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.
@@ -97,7 +97,7 @@ typeof SuppressedError === "function" ? SuppressedError : function (error, suppr
97
97
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
98
98
  };
99
99
 
100
- var version = "1.7.0";
100
+ var version = "1.8.0-beta.2";
101
101
  var airkitPackage = {
102
102
  version: version};
103
103
 
@@ -618,7 +618,8 @@ const mocaDevnet = {
618
618
  address: "0xcA11bde05977b3631167028862bE2a173976CA11",
619
619
  blockCreated: 3837540
620
620
  }
621
- }
621
+ },
622
+ testnet: true
622
623
  };
623
624
  const mocaTestnet = {
624
625
  id: 222888,
@@ -630,8 +631,8 @@ const mocaTestnet = {
630
631
  },
631
632
  rpcUrls: {
632
633
  default: {
633
- http: ["https://testnet-rpc.mocachain.org"],
634
- webSocket: ["wss://testnet-rpc.mocachain.org"]
634
+ http: ["https://rpc.testnet.mocachain.dev"],
635
+ webSocket: ["wss://rpc.testnet.mocachain.dev"]
635
636
  }
636
637
  },
637
638
  blockExplorers: {
@@ -645,7 +646,8 @@ const mocaTestnet = {
645
646
  address: "0xcA11bde05977b3631167028862bE2a173976CA11",
646
647
  blockCreated: 1330259
647
648
  }
648
- }
649
+ },
650
+ testnet: true
649
651
  };
650
652
 
651
653
  const BUILD_ENV = {
@@ -663,6 +665,12 @@ const IFRAME_NAME_PREFIX_SET = [
663
665
  ]; // order defines the z-index from highest to lowest
664
666
 
665
667
  const FONT_CDNS = ["https://fonts.googleapis.com", "https://fonts.gstatic.com"];
668
+ const SANDBOX_TESTNET_URLS = {
669
+ authUrl: "https://account.sandbox-testnet.air3.com/auth/",
670
+ walletUrl: "https://account.sandbox-testnet.air3.com/wallet/",
671
+ recoveryUrl: "https://account.sandbox-testnet.air3.com/recovery/",
672
+ credentialUrl: "https://account.sandbox-testnet.air3.com/credential/",
673
+ };
666
674
  const AIR_URLS = {
667
675
  [BUILD_ENV.DEVELOPMENT]: {
668
676
  authUrl: "https://localhost:8200/auth/",
@@ -695,6 +703,12 @@ const AIR_URLS = {
695
703
  credentialUrl: "https://account.air3.com/credential/",
696
704
  },
697
705
  };
706
+ const getAirUrls = (buildEnv, credentialNetwork) => {
707
+ if (buildEnv === BUILD_ENV.SANDBOX && credentialNetwork === "testnet") {
708
+ return SANDBOX_TESTNET_URLS;
709
+ }
710
+ return AIR_URLS[buildEnv];
711
+ };
698
712
  /**
699
713
  * Injects dns-prefetch, preconnect, and prefetch link tags
700
714
  * for a given resource or page URL.
@@ -717,7 +731,7 @@ const addResourceHints = (url, options) => {
717
731
  link.rel = rel;
718
732
  link.href = href;
719
733
  if (as)
720
- link.as = as;
734
+ ;
721
735
  if (crossOrigin)
722
736
  link.crossOrigin = "anonymous";
723
737
  head.appendChild(link);
@@ -728,8 +742,32 @@ const addResourceHints = (url, options) => {
728
742
  // Preconnect (TCP + TLS warm-up)
729
743
  addLink("preconnect", parsed.origin, undefined, isCrossOrigin);
730
744
  // Prefetch (optional — caches the resource or HTML document)
731
- if (options?.prefetch !== false) {
732
- addLink("prefetch", parsed.href, options?.as ?? "document", isCrossOrigin);
745
+ if (options?.prefetch !== false &&
746
+ HTMLScriptElement.supports &&
747
+ HTMLScriptElement.supports("speculationrules")) {
748
+ const scriptId = `speculation-${btoa(parsed.href)
749
+ .replace(/\+/g, "-")
750
+ .replace(/\//g, "_")
751
+ .replace(/=/g, "")}`;
752
+ if (!document.getElementById(scriptId)) {
753
+ const script = document.createElement("script");
754
+ script.id = scriptId;
755
+ script.type = "speculationrules";
756
+ const sources = [
757
+ {
758
+ source: "list",
759
+ urls: [parsed.href],
760
+ eagerness: "immediate",
761
+ },
762
+ ];
763
+ const rules = {
764
+ ...((options?.as ?? "document") === "document"
765
+ ? { prerender: sources }
766
+ : { prefetch: sources }),
767
+ };
768
+ script.textContent = JSON.stringify(rules);
769
+ document.body.appendChild(script);
770
+ }
733
771
  }
734
772
  }
735
773
  catch (err) {
@@ -2237,7 +2275,12 @@ class IframeController {
2237
2275
  return this._iframeElement;
2238
2276
  const iframe = document.createElement("iframe");
2239
2277
  iframe.id = this.iframeId;
2240
- iframe.allow = "publickey-credentials-get *; publickey-credentials-create *";
2278
+ iframe.allow = [
2279
+ "publickey-credentials-get *",
2280
+ "publickey-credentials-create *",
2281
+ "ch-ua-model",
2282
+ "ch-ua-platform-version",
2283
+ ].join("; ");
2241
2284
  iframe.src = this.iframeUrl;
2242
2285
  iframe.style.position = "fixed";
2243
2286
  iframe.style.zIndex = `${this.getZIndex()}`;
@@ -2454,7 +2497,12 @@ class WalletMessageService extends MessageServiceBase {
2454
2497
  const response = firstValueFrom(this.messages$.pipe(filter((msg) => msg.type === AirWalletMessageTypes.SHOW_SWAP_UI_RESPONSE)));
2455
2498
  await this.sendMessage({
2456
2499
  type: AirWalletMessageTypes.SHOW_SWAP_UI_REQUEST,
2457
- payload
2500
+ payload: {
2501
+ initialFromToken: payload?.initialFromToken,
2502
+ fallbackFromToken: payload?.fallbackFromToken,
2503
+ initialToToken: payload?.initialToToken,
2504
+ defaultSlippage: payload?.defaultSlippage?.toString(), // TODO refactor to all be numbers
2505
+ },
2458
2506
  });
2459
2507
  return response;
2460
2508
  }
@@ -2665,7 +2713,7 @@ class WindowService {
2665
2713
  }
2666
2714
  var WindowService$1 = WindowService.instance;
2667
2715
 
2668
- var _AirService_instances, _AirService_loginResult, _AirService_buildEnv, _AirService_enableLogging, _AirService_partnerId, _AirService_sessionId, _AirService_sessionConfig, _AirService_authMessagingService, _AirService_authIframeController, _AirService_isAuthInitialized, _AirService_airEventListener, _AirService_walletMessagingService, _AirService_walletIframeController, _AirService_walletInitialization, _AirService_walletLoggedInResult, _AirService_airWalletProvider, _AirService_recoveryInitialization, _AirService_recoveryMessagingService, _AirService_recoveryIframeController, _AirService_credentialsInitialization, _AirService_credentialMessagingService, _AirService_credentialIframeController, _AirService_assertInitialized, _AirService_assertLoggedIn, _AirService_ensureCredential, _AirService_initializeCredentials, _AirService_subscribeToCredentialEvents, _AirService_cleanUpCredential, _AirService_ensureWallet, _AirService_initializeWallet, _AirService_subscribeToWalletEvents, _AirService_triggerEventListeners, _AirService_triggerAirAuthInitialized, _AirService_triggerAirAuthLoggedIn, _AirService_triggerAirAuthLoggedOut, _AirService_triggerWalletInitialized, _AirService_createLoginResult, _AirService_createWalletInitializedResult, _AirService_cleanUpAuth, _AirService_cleanUpWallet, _AirService_ensureRecovery, _AirService_initializeRecovery, _AirService_subscribeToRecoveryEvents, _AirService_cleanUpRecovery;
2716
+ var _AirService_instances, _AirService_loginResult, _AirService_buildEnv, _AirService_enableLogging, _AirService_partnerId, _AirService_sessionId, _AirService_sessionConfig, _AirService_authMessagingService, _AirService_authIframeController, _AirService_isAuthInitialized, _AirService_airEventListener, _AirService_walletMessagingService, _AirService_walletIframeController, _AirService_walletInitialization, _AirService_walletLoggedInResult, _AirService_airWalletProvider, _AirService_recoveryInitialization, _AirService_recoveryMessagingService, _AirService_recoveryIframeController, _AirService_credentialsInitialization, _AirService_credentialMessagingService, _AirService_credentialIframeController, _AirService_credentialNetwork, _AirService_assertInitialized, _AirService_assertLoggedIn, _AirService_ensureCredential, _AirService_initializeCredentials, _AirService_subscribeToCredentialEvents, _AirService_cleanUpCredential, _AirService_ensureWallet, _AirService_initializeWallet, _AirService_subscribeToWalletEvents, _AirService_triggerEventListeners, _AirService_triggerAirAuthInitialized, _AirService_triggerAirAuthLoggedIn, _AirService_triggerAirAuthLoggedOut, _AirService_triggerWalletInitialized, _AirService_createLoginResult, _AirService_createWalletInitializedResult, _AirService_cleanUpAuth, _AirService_cleanUpWallet, _AirService_ensureRecovery, _AirService_initializeRecovery, _AirService_subscribeToRecoveryEvents, _AirService_cleanUpRecovery;
2669
2717
  const airKitVersion = airkitPackage.version;
2670
2718
  class AirService {
2671
2719
  constructor({ partnerId }) {
@@ -2692,6 +2740,7 @@ class AirService {
2692
2740
  _AirService_credentialsInitialization.set(this, void 0);
2693
2741
  _AirService_credentialMessagingService.set(this, void 0);
2694
2742
  _AirService_credentialIframeController.set(this, void 0);
2743
+ _AirService_credentialNetwork.set(this, void 0);
2695
2744
  __classPrivateFieldSet(this, _AirService_partnerId, partnerId, "f");
2696
2745
  __classPrivateFieldSet(this, _AirService_authMessagingService, AuthMessageService.create(), "f");
2697
2746
  __classPrivateFieldSet(this, _AirService_walletMessagingService, WalletMessageService.create(), "f");
@@ -2730,13 +2779,15 @@ class AirService {
2730
2779
  shouldEnableAutomation() {
2731
2780
  return localStorage.getItem("automation") === "true" && __classPrivateFieldGet(this, _AirService_buildEnv, "f") !== BUILD_ENV.PRODUCTION;
2732
2781
  }
2733
- async init({ buildEnv = BUILD_ENV.PRODUCTION, enableLogging = false, skipRehydration = false, sessionConfig = undefined, preloadWallet = false, preloadCredential = false, }) {
2782
+ async init(config) {
2783
+ const { buildEnv = BUILD_ENV.PRODUCTION, enableLogging = false, skipRehydration = false, sessionConfig = undefined, preloadWallet = false, preloadCredential = false, credentialNetwork = "testnet", } = config;
2734
2784
  if (!__classPrivateFieldGet(this, _AirService_partnerId, "f"))
2735
2785
  throw new AirServiceError("CLIENT_ERROR", "Partner ID is required to initialize the service");
2736
2786
  if (__classPrivateFieldGet(this, _AirService_isAuthInitialized, "f"))
2737
2787
  return __classPrivateFieldGet(this, _AirService_loginResult, "f") ?? null;
2788
+ __classPrivateFieldSet(this, _AirService_credentialNetwork, buildEnv === BUILD_ENV.SANDBOX ? credentialNetwork : undefined, "f");
2738
2789
  configureLogLevel(buildEnv, enableLogging);
2739
- const { authUrl, walletUrl, credentialUrl } = AIR_URLS[buildEnv];
2790
+ const { authUrl, walletUrl, credentialUrl } = getAirUrls(buildEnv, __classPrivateFieldGet(this, _AirService_credentialNetwork, "f"));
2740
2791
  addResourceHints(authUrl);
2741
2792
  if (preloadWallet) {
2742
2793
  addResourceHints(walletUrl);
@@ -2910,7 +2961,7 @@ class AirService {
2910
2961
  if (result.payload.success === false) {
2911
2962
  throw new AirServiceError(result.payload.errorName, result.payload.errorMessage);
2912
2963
  }
2913
- return { txHash: result.payload.txHash };
2964
+ return result.payload;
2914
2965
  }
2915
2966
  /**
2916
2967
  * @experimental This feature has not been officially released and might change in the future.
@@ -2965,7 +3016,10 @@ class AirService {
2965
3016
  throw new AirServiceError(result.payload.errorName, result.payload.errorMessage);
2966
3017
  }
2967
3018
  }
2968
- const sessionConfig = { locale: results[0].payload.locale };
3019
+ const sessionConfig = {
3020
+ locale: results[0].payload.locale,
3021
+ currency: results[0].payload.currency,
3022
+ };
2969
3023
  __classPrivateFieldSet(this, _AirService_sessionConfig, sessionConfig, "f");
2970
3024
  return sessionConfig;
2971
3025
  }
@@ -3028,20 +3082,25 @@ class AirService {
3028
3082
  async preloadCredential() {
3029
3083
  await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_ensureCredential).call(this);
3030
3084
  }
3031
- async issueCredential({ authToken, issuerDid, credentialId, credentialSubject, }) {
3085
+ async issueCredential({ authToken, issuerDid, credentialId, credentialSubject, curve, }) {
3032
3086
  await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_ensureCredential).call(this);
3033
- const { payload } = await __classPrivateFieldGet(this, _AirService_credentialMessagingService, "f").sendIssueCredentialRequest({
3087
+ const response = await __classPrivateFieldGet(this, _AirService_credentialMessagingService, "f").sendIssueCredentialRequest({
3034
3088
  partnerToken: authToken,
3035
3089
  issuerDid,
3036
3090
  credentialId,
3037
3091
  credentialSubject,
3092
+ curve,
3038
3093
  });
3094
+ const { payload } = response;
3039
3095
  if (payload.closeDApp) {
3040
3096
  window.close();
3041
3097
  }
3042
3098
  if (payload.success === false) {
3043
3099
  throw new AirServiceError(payload.errorName, payload.errorMessage);
3044
3100
  }
3101
+ return {
3102
+ cakPublicKey: payload.cakPublicKey,
3103
+ };
3045
3104
  }
3046
3105
  async verifyCredential({ authToken, programId, redirectUrl, }) {
3047
3106
  await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_ensureCredential).call(this);
@@ -3056,7 +3115,7 @@ class AirService {
3056
3115
  return payload.verificationResult;
3057
3116
  }
3058
3117
  }
3059
- _AirService_loginResult = new WeakMap(), _AirService_buildEnv = new WeakMap(), _AirService_enableLogging = new WeakMap(), _AirService_partnerId = new WeakMap(), _AirService_sessionId = new WeakMap(), _AirService_sessionConfig = new WeakMap(), _AirService_authMessagingService = new WeakMap(), _AirService_authIframeController = new WeakMap(), _AirService_isAuthInitialized = new WeakMap(), _AirService_airEventListener = new WeakMap(), _AirService_walletMessagingService = new WeakMap(), _AirService_walletIframeController = new WeakMap(), _AirService_walletInitialization = new WeakMap(), _AirService_walletLoggedInResult = new WeakMap(), _AirService_airWalletProvider = new WeakMap(), _AirService_recoveryInitialization = new WeakMap(), _AirService_recoveryMessagingService = new WeakMap(), _AirService_recoveryIframeController = new WeakMap(), _AirService_credentialsInitialization = new WeakMap(), _AirService_credentialMessagingService = new WeakMap(), _AirService_credentialIframeController = new WeakMap(), _AirService_instances = new WeakSet(), _AirService_assertInitialized = function _AirService_assertInitialized() {
3118
+ _AirService_loginResult = new WeakMap(), _AirService_buildEnv = new WeakMap(), _AirService_enableLogging = new WeakMap(), _AirService_partnerId = new WeakMap(), _AirService_sessionId = new WeakMap(), _AirService_sessionConfig = new WeakMap(), _AirService_authMessagingService = new WeakMap(), _AirService_authIframeController = new WeakMap(), _AirService_isAuthInitialized = new WeakMap(), _AirService_airEventListener = new WeakMap(), _AirService_walletMessagingService = new WeakMap(), _AirService_walletIframeController = new WeakMap(), _AirService_walletInitialization = new WeakMap(), _AirService_walletLoggedInResult = new WeakMap(), _AirService_airWalletProvider = new WeakMap(), _AirService_recoveryInitialization = new WeakMap(), _AirService_recoveryMessagingService = new WeakMap(), _AirService_recoveryIframeController = new WeakMap(), _AirService_credentialsInitialization = new WeakMap(), _AirService_credentialMessagingService = new WeakMap(), _AirService_credentialIframeController = new WeakMap(), _AirService_credentialNetwork = new WeakMap(), _AirService_instances = new WeakSet(), _AirService_assertInitialized = function _AirService_assertInitialized() {
3060
3119
  if (!__classPrivateFieldGet(this, _AirService_isAuthInitialized, "f"))
3061
3120
  throw new AirServiceError("NOT_INITIALIZED", "Service is not initialized");
3062
3121
  }, _AirService_assertLoggedIn = function _AirService_assertLoggedIn() {
@@ -3080,7 +3139,7 @@ _AirService_loginResult = new WeakMap(), _AirService_buildEnv = new WeakMap(), _
3080
3139
  if (__classPrivateFieldGet(this, _AirService_credentialsInitialization, "f")) {
3081
3140
  throw new AirServiceError("ALREADY_INITIALIZING", "Already initializing credentials");
3082
3141
  }
3083
- const { credentialUrl } = AIR_URLS[__classPrivateFieldGet(this, _AirService_buildEnv, "f")];
3142
+ const { credentialUrl } = getAirUrls(__classPrivateFieldGet(this, _AirService_buildEnv, "f"), __classPrivateFieldGet(this, _AirService_credentialNetwork, "f"));
3084
3143
  const credentialIframeOrigin = new URL(credentialUrl).origin;
3085
3144
  let closeDApp = false;
3086
3145
  try {
@@ -3098,6 +3157,7 @@ _AirService_loginResult = new WeakMap(), _AirService_buildEnv = new WeakMap(), _
3098
3157
  partnerDAppUrl: window.location.href,
3099
3158
  enableAutomation: this.shouldEnableAutomation(),
3100
3159
  sessionConfig: __classPrivateFieldGet(this, _AirService_sessionConfig, "f"),
3160
+ ...(__classPrivateFieldGet(this, _AirService_credentialNetwork, "f") && { credentialNetwork: __classPrivateFieldGet(this, _AirService_credentialNetwork, "f") }),
3101
3161
  });
3102
3162
  if (payload.success === true) {
3103
3163
  resolve();
@@ -3177,7 +3237,7 @@ _AirService_loginResult = new WeakMap(), _AirService_buildEnv = new WeakMap(), _
3177
3237
  }, _AirService_initializeWallet = async function _AirService_initializeWallet(option) {
3178
3238
  if (__classPrivateFieldGet(this, _AirService_walletInitialization, "f"))
3179
3239
  throw new AirServiceError("ALREADY_INITIALIZING", "Already initializing");
3180
- const { walletUrl } = AIR_URLS[__classPrivateFieldGet(this, _AirService_buildEnv, "f")];
3240
+ const { walletUrl } = getAirUrls(__classPrivateFieldGet(this, _AirService_buildEnv, "f"), __classPrivateFieldGet(this, _AirService_credentialNetwork, "f"));
3181
3241
  const walletIframeOrigin = new URL(walletUrl).origin;
3182
3242
  try {
3183
3243
  const walletInitRequestPromise = new Promise((resolve, reject) => {
@@ -3354,7 +3414,7 @@ _AirService_loginResult = new WeakMap(), _AirService_buildEnv = new WeakMap(), _
3354
3414
  }, _AirService_initializeRecovery = async function _AirService_initializeRecovery() {
3355
3415
  if (__classPrivateFieldGet(this, _AirService_recoveryInitialization, "f"))
3356
3416
  throw new AirServiceError("ALREADY_INITIALIZING", "Already initializing");
3357
- const { recoveryUrl } = AIR_URLS[__classPrivateFieldGet(this, _AirService_buildEnv, "f")];
3417
+ const { recoveryUrl } = getAirUrls(__classPrivateFieldGet(this, _AirService_buildEnv, "f"), __classPrivateFieldGet(this, _AirService_credentialNetwork, "f"));
3358
3418
  const recoveryIframeOrigin = new URL(recoveryUrl).origin;
3359
3419
  try {
3360
3420
  const recoveryInitRequestPromise = new Promise((resolve, reject) => {
@@ -95,7 +95,7 @@ typeof SuppressedError === "function" ? SuppressedError : function (error, suppr
95
95
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
96
96
  };
97
97
 
98
- var version = "1.7.0";
98
+ var version = "1.8.0-beta.2";
99
99
  var airkitPackage = {
100
100
  version: version};
101
101
 
@@ -616,7 +616,8 @@ const mocaDevnet = {
616
616
  address: "0xcA11bde05977b3631167028862bE2a173976CA11",
617
617
  blockCreated: 3837540
618
618
  }
619
- }
619
+ },
620
+ testnet: true
620
621
  };
621
622
  const mocaTestnet = {
622
623
  id: 222888,
@@ -628,8 +629,8 @@ const mocaTestnet = {
628
629
  },
629
630
  rpcUrls: {
630
631
  default: {
631
- http: ["https://testnet-rpc.mocachain.org"],
632
- webSocket: ["wss://testnet-rpc.mocachain.org"]
632
+ http: ["https://rpc.testnet.mocachain.dev"],
633
+ webSocket: ["wss://rpc.testnet.mocachain.dev"]
633
634
  }
634
635
  },
635
636
  blockExplorers: {
@@ -643,7 +644,8 @@ const mocaTestnet = {
643
644
  address: "0xcA11bde05977b3631167028862bE2a173976CA11",
644
645
  blockCreated: 1330259
645
646
  }
646
- }
647
+ },
648
+ testnet: true
647
649
  };
648
650
 
649
651
  const BUILD_ENV = {
@@ -661,6 +663,12 @@ const IFRAME_NAME_PREFIX_SET = [
661
663
  ]; // order defines the z-index from highest to lowest
662
664
 
663
665
  const FONT_CDNS = ["https://fonts.googleapis.com", "https://fonts.gstatic.com"];
666
+ const SANDBOX_TESTNET_URLS = {
667
+ authUrl: "https://account.sandbox-testnet.air3.com/auth/",
668
+ walletUrl: "https://account.sandbox-testnet.air3.com/wallet/",
669
+ recoveryUrl: "https://account.sandbox-testnet.air3.com/recovery/",
670
+ credentialUrl: "https://account.sandbox-testnet.air3.com/credential/",
671
+ };
664
672
  const AIR_URLS = {
665
673
  [BUILD_ENV.DEVELOPMENT]: {
666
674
  authUrl: "https://localhost:8200/auth/",
@@ -693,6 +701,12 @@ const AIR_URLS = {
693
701
  credentialUrl: "https://account.air3.com/credential/",
694
702
  },
695
703
  };
704
+ const getAirUrls = (buildEnv, credentialNetwork) => {
705
+ if (buildEnv === BUILD_ENV.SANDBOX && credentialNetwork === "testnet") {
706
+ return SANDBOX_TESTNET_URLS;
707
+ }
708
+ return AIR_URLS[buildEnv];
709
+ };
696
710
  /**
697
711
  * Injects dns-prefetch, preconnect, and prefetch link tags
698
712
  * for a given resource or page URL.
@@ -715,7 +729,7 @@ const addResourceHints = (url, options) => {
715
729
  link.rel = rel;
716
730
  link.href = href;
717
731
  if (as)
718
- link.as = as;
732
+ ;
719
733
  if (crossOrigin)
720
734
  link.crossOrigin = "anonymous";
721
735
  head.appendChild(link);
@@ -726,8 +740,32 @@ const addResourceHints = (url, options) => {
726
740
  // Preconnect (TCP + TLS warm-up)
727
741
  addLink("preconnect", parsed.origin, undefined, isCrossOrigin);
728
742
  // Prefetch (optional — caches the resource or HTML document)
729
- if (options?.prefetch !== false) {
730
- addLink("prefetch", parsed.href, options?.as ?? "document", isCrossOrigin);
743
+ if (options?.prefetch !== false &&
744
+ HTMLScriptElement.supports &&
745
+ HTMLScriptElement.supports("speculationrules")) {
746
+ const scriptId = `speculation-${btoa(parsed.href)
747
+ .replace(/\+/g, "-")
748
+ .replace(/\//g, "_")
749
+ .replace(/=/g, "")}`;
750
+ if (!document.getElementById(scriptId)) {
751
+ const script = document.createElement("script");
752
+ script.id = scriptId;
753
+ script.type = "speculationrules";
754
+ const sources = [
755
+ {
756
+ source: "list",
757
+ urls: [parsed.href],
758
+ eagerness: "immediate",
759
+ },
760
+ ];
761
+ const rules = {
762
+ ...((options?.as ?? "document") === "document"
763
+ ? { prerender: sources }
764
+ : { prefetch: sources }),
765
+ };
766
+ script.textContent = JSON.stringify(rules);
767
+ document.body.appendChild(script);
768
+ }
731
769
  }
732
770
  }
733
771
  catch (err) {
@@ -2235,7 +2273,12 @@ class IframeController {
2235
2273
  return this._iframeElement;
2236
2274
  const iframe = document.createElement("iframe");
2237
2275
  iframe.id = this.iframeId;
2238
- iframe.allow = "publickey-credentials-get *; publickey-credentials-create *";
2276
+ iframe.allow = [
2277
+ "publickey-credentials-get *",
2278
+ "publickey-credentials-create *",
2279
+ "ch-ua-model",
2280
+ "ch-ua-platform-version",
2281
+ ].join("; ");
2239
2282
  iframe.src = this.iframeUrl;
2240
2283
  iframe.style.position = "fixed";
2241
2284
  iframe.style.zIndex = `${this.getZIndex()}`;
@@ -2452,7 +2495,12 @@ class WalletMessageService extends MessageServiceBase {
2452
2495
  const response = firstValueFrom(this.messages$.pipe(filter((msg) => msg.type === AirWalletMessageTypes.SHOW_SWAP_UI_RESPONSE)));
2453
2496
  await this.sendMessage({
2454
2497
  type: AirWalletMessageTypes.SHOW_SWAP_UI_REQUEST,
2455
- payload
2498
+ payload: {
2499
+ initialFromToken: payload?.initialFromToken,
2500
+ fallbackFromToken: payload?.fallbackFromToken,
2501
+ initialToToken: payload?.initialToToken,
2502
+ defaultSlippage: payload?.defaultSlippage?.toString(), // TODO refactor to all be numbers
2503
+ },
2456
2504
  });
2457
2505
  return response;
2458
2506
  }
@@ -2663,7 +2711,7 @@ class WindowService {
2663
2711
  }
2664
2712
  var WindowService$1 = WindowService.instance;
2665
2713
 
2666
- var _AirService_instances, _AirService_loginResult, _AirService_buildEnv, _AirService_enableLogging, _AirService_partnerId, _AirService_sessionId, _AirService_sessionConfig, _AirService_authMessagingService, _AirService_authIframeController, _AirService_isAuthInitialized, _AirService_airEventListener, _AirService_walletMessagingService, _AirService_walletIframeController, _AirService_walletInitialization, _AirService_walletLoggedInResult, _AirService_airWalletProvider, _AirService_recoveryInitialization, _AirService_recoveryMessagingService, _AirService_recoveryIframeController, _AirService_credentialsInitialization, _AirService_credentialMessagingService, _AirService_credentialIframeController, _AirService_assertInitialized, _AirService_assertLoggedIn, _AirService_ensureCredential, _AirService_initializeCredentials, _AirService_subscribeToCredentialEvents, _AirService_cleanUpCredential, _AirService_ensureWallet, _AirService_initializeWallet, _AirService_subscribeToWalletEvents, _AirService_triggerEventListeners, _AirService_triggerAirAuthInitialized, _AirService_triggerAirAuthLoggedIn, _AirService_triggerAirAuthLoggedOut, _AirService_triggerWalletInitialized, _AirService_createLoginResult, _AirService_createWalletInitializedResult, _AirService_cleanUpAuth, _AirService_cleanUpWallet, _AirService_ensureRecovery, _AirService_initializeRecovery, _AirService_subscribeToRecoveryEvents, _AirService_cleanUpRecovery;
2714
+ var _AirService_instances, _AirService_loginResult, _AirService_buildEnv, _AirService_enableLogging, _AirService_partnerId, _AirService_sessionId, _AirService_sessionConfig, _AirService_authMessagingService, _AirService_authIframeController, _AirService_isAuthInitialized, _AirService_airEventListener, _AirService_walletMessagingService, _AirService_walletIframeController, _AirService_walletInitialization, _AirService_walletLoggedInResult, _AirService_airWalletProvider, _AirService_recoveryInitialization, _AirService_recoveryMessagingService, _AirService_recoveryIframeController, _AirService_credentialsInitialization, _AirService_credentialMessagingService, _AirService_credentialIframeController, _AirService_credentialNetwork, _AirService_assertInitialized, _AirService_assertLoggedIn, _AirService_ensureCredential, _AirService_initializeCredentials, _AirService_subscribeToCredentialEvents, _AirService_cleanUpCredential, _AirService_ensureWallet, _AirService_initializeWallet, _AirService_subscribeToWalletEvents, _AirService_triggerEventListeners, _AirService_triggerAirAuthInitialized, _AirService_triggerAirAuthLoggedIn, _AirService_triggerAirAuthLoggedOut, _AirService_triggerWalletInitialized, _AirService_createLoginResult, _AirService_createWalletInitializedResult, _AirService_cleanUpAuth, _AirService_cleanUpWallet, _AirService_ensureRecovery, _AirService_initializeRecovery, _AirService_subscribeToRecoveryEvents, _AirService_cleanUpRecovery;
2667
2715
  const airKitVersion = airkitPackage.version;
2668
2716
  class AirService {
2669
2717
  constructor({ partnerId }) {
@@ -2690,6 +2738,7 @@ class AirService {
2690
2738
  _AirService_credentialsInitialization.set(this, void 0);
2691
2739
  _AirService_credentialMessagingService.set(this, void 0);
2692
2740
  _AirService_credentialIframeController.set(this, void 0);
2741
+ _AirService_credentialNetwork.set(this, void 0);
2693
2742
  __classPrivateFieldSet(this, _AirService_partnerId, partnerId, "f");
2694
2743
  __classPrivateFieldSet(this, _AirService_authMessagingService, AuthMessageService.create(), "f");
2695
2744
  __classPrivateFieldSet(this, _AirService_walletMessagingService, WalletMessageService.create(), "f");
@@ -2728,13 +2777,15 @@ class AirService {
2728
2777
  shouldEnableAutomation() {
2729
2778
  return localStorage.getItem("automation") === "true" && __classPrivateFieldGet(this, _AirService_buildEnv, "f") !== BUILD_ENV.PRODUCTION;
2730
2779
  }
2731
- async init({ buildEnv = BUILD_ENV.PRODUCTION, enableLogging = false, skipRehydration = false, sessionConfig = undefined, preloadWallet = false, preloadCredential = false, }) {
2780
+ async init(config) {
2781
+ const { buildEnv = BUILD_ENV.PRODUCTION, enableLogging = false, skipRehydration = false, sessionConfig = undefined, preloadWallet = false, preloadCredential = false, credentialNetwork = "testnet", } = config;
2732
2782
  if (!__classPrivateFieldGet(this, _AirService_partnerId, "f"))
2733
2783
  throw new AirServiceError("CLIENT_ERROR", "Partner ID is required to initialize the service");
2734
2784
  if (__classPrivateFieldGet(this, _AirService_isAuthInitialized, "f"))
2735
2785
  return __classPrivateFieldGet(this, _AirService_loginResult, "f") ?? null;
2786
+ __classPrivateFieldSet(this, _AirService_credentialNetwork, buildEnv === BUILD_ENV.SANDBOX ? credentialNetwork : undefined, "f");
2736
2787
  configureLogLevel(buildEnv, enableLogging);
2737
- const { authUrl, walletUrl, credentialUrl } = AIR_URLS[buildEnv];
2788
+ const { authUrl, walletUrl, credentialUrl } = getAirUrls(buildEnv, __classPrivateFieldGet(this, _AirService_credentialNetwork, "f"));
2738
2789
  addResourceHints(authUrl);
2739
2790
  if (preloadWallet) {
2740
2791
  addResourceHints(walletUrl);
@@ -2908,7 +2959,7 @@ class AirService {
2908
2959
  if (result.payload.success === false) {
2909
2960
  throw new AirServiceError(result.payload.errorName, result.payload.errorMessage);
2910
2961
  }
2911
- return { txHash: result.payload.txHash };
2962
+ return result.payload;
2912
2963
  }
2913
2964
  /**
2914
2965
  * @experimental This feature has not been officially released and might change in the future.
@@ -2963,7 +3014,10 @@ class AirService {
2963
3014
  throw new AirServiceError(result.payload.errorName, result.payload.errorMessage);
2964
3015
  }
2965
3016
  }
2966
- const sessionConfig = { locale: results[0].payload.locale };
3017
+ const sessionConfig = {
3018
+ locale: results[0].payload.locale,
3019
+ currency: results[0].payload.currency,
3020
+ };
2967
3021
  __classPrivateFieldSet(this, _AirService_sessionConfig, sessionConfig, "f");
2968
3022
  return sessionConfig;
2969
3023
  }
@@ -3026,20 +3080,25 @@ class AirService {
3026
3080
  async preloadCredential() {
3027
3081
  await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_ensureCredential).call(this);
3028
3082
  }
3029
- async issueCredential({ authToken, issuerDid, credentialId, credentialSubject, }) {
3083
+ async issueCredential({ authToken, issuerDid, credentialId, credentialSubject, curve, }) {
3030
3084
  await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_ensureCredential).call(this);
3031
- const { payload } = await __classPrivateFieldGet(this, _AirService_credentialMessagingService, "f").sendIssueCredentialRequest({
3085
+ const response = await __classPrivateFieldGet(this, _AirService_credentialMessagingService, "f").sendIssueCredentialRequest({
3032
3086
  partnerToken: authToken,
3033
3087
  issuerDid,
3034
3088
  credentialId,
3035
3089
  credentialSubject,
3090
+ curve,
3036
3091
  });
3092
+ const { payload } = response;
3037
3093
  if (payload.closeDApp) {
3038
3094
  window.close();
3039
3095
  }
3040
3096
  if (payload.success === false) {
3041
3097
  throw new AirServiceError(payload.errorName, payload.errorMessage);
3042
3098
  }
3099
+ return {
3100
+ cakPublicKey: payload.cakPublicKey,
3101
+ };
3043
3102
  }
3044
3103
  async verifyCredential({ authToken, programId, redirectUrl, }) {
3045
3104
  await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_ensureCredential).call(this);
@@ -3054,7 +3113,7 @@ class AirService {
3054
3113
  return payload.verificationResult;
3055
3114
  }
3056
3115
  }
3057
- _AirService_loginResult = new WeakMap(), _AirService_buildEnv = new WeakMap(), _AirService_enableLogging = new WeakMap(), _AirService_partnerId = new WeakMap(), _AirService_sessionId = new WeakMap(), _AirService_sessionConfig = new WeakMap(), _AirService_authMessagingService = new WeakMap(), _AirService_authIframeController = new WeakMap(), _AirService_isAuthInitialized = new WeakMap(), _AirService_airEventListener = new WeakMap(), _AirService_walletMessagingService = new WeakMap(), _AirService_walletIframeController = new WeakMap(), _AirService_walletInitialization = new WeakMap(), _AirService_walletLoggedInResult = new WeakMap(), _AirService_airWalletProvider = new WeakMap(), _AirService_recoveryInitialization = new WeakMap(), _AirService_recoveryMessagingService = new WeakMap(), _AirService_recoveryIframeController = new WeakMap(), _AirService_credentialsInitialization = new WeakMap(), _AirService_credentialMessagingService = new WeakMap(), _AirService_credentialIframeController = new WeakMap(), _AirService_instances = new WeakSet(), _AirService_assertInitialized = function _AirService_assertInitialized() {
3116
+ _AirService_loginResult = new WeakMap(), _AirService_buildEnv = new WeakMap(), _AirService_enableLogging = new WeakMap(), _AirService_partnerId = new WeakMap(), _AirService_sessionId = new WeakMap(), _AirService_sessionConfig = new WeakMap(), _AirService_authMessagingService = new WeakMap(), _AirService_authIframeController = new WeakMap(), _AirService_isAuthInitialized = new WeakMap(), _AirService_airEventListener = new WeakMap(), _AirService_walletMessagingService = new WeakMap(), _AirService_walletIframeController = new WeakMap(), _AirService_walletInitialization = new WeakMap(), _AirService_walletLoggedInResult = new WeakMap(), _AirService_airWalletProvider = new WeakMap(), _AirService_recoveryInitialization = new WeakMap(), _AirService_recoveryMessagingService = new WeakMap(), _AirService_recoveryIframeController = new WeakMap(), _AirService_credentialsInitialization = new WeakMap(), _AirService_credentialMessagingService = new WeakMap(), _AirService_credentialIframeController = new WeakMap(), _AirService_credentialNetwork = new WeakMap(), _AirService_instances = new WeakSet(), _AirService_assertInitialized = function _AirService_assertInitialized() {
3058
3117
  if (!__classPrivateFieldGet(this, _AirService_isAuthInitialized, "f"))
3059
3118
  throw new AirServiceError("NOT_INITIALIZED", "Service is not initialized");
3060
3119
  }, _AirService_assertLoggedIn = function _AirService_assertLoggedIn() {
@@ -3078,7 +3137,7 @@ _AirService_loginResult = new WeakMap(), _AirService_buildEnv = new WeakMap(), _
3078
3137
  if (__classPrivateFieldGet(this, _AirService_credentialsInitialization, "f")) {
3079
3138
  throw new AirServiceError("ALREADY_INITIALIZING", "Already initializing credentials");
3080
3139
  }
3081
- const { credentialUrl } = AIR_URLS[__classPrivateFieldGet(this, _AirService_buildEnv, "f")];
3140
+ const { credentialUrl } = getAirUrls(__classPrivateFieldGet(this, _AirService_buildEnv, "f"), __classPrivateFieldGet(this, _AirService_credentialNetwork, "f"));
3082
3141
  const credentialIframeOrigin = new URL(credentialUrl).origin;
3083
3142
  let closeDApp = false;
3084
3143
  try {
@@ -3096,6 +3155,7 @@ _AirService_loginResult = new WeakMap(), _AirService_buildEnv = new WeakMap(), _
3096
3155
  partnerDAppUrl: window.location.href,
3097
3156
  enableAutomation: this.shouldEnableAutomation(),
3098
3157
  sessionConfig: __classPrivateFieldGet(this, _AirService_sessionConfig, "f"),
3158
+ ...(__classPrivateFieldGet(this, _AirService_credentialNetwork, "f") && { credentialNetwork: __classPrivateFieldGet(this, _AirService_credentialNetwork, "f") }),
3099
3159
  });
3100
3160
  if (payload.success === true) {
3101
3161
  resolve();
@@ -3175,7 +3235,7 @@ _AirService_loginResult = new WeakMap(), _AirService_buildEnv = new WeakMap(), _
3175
3235
  }, _AirService_initializeWallet = async function _AirService_initializeWallet(option) {
3176
3236
  if (__classPrivateFieldGet(this, _AirService_walletInitialization, "f"))
3177
3237
  throw new AirServiceError("ALREADY_INITIALIZING", "Already initializing");
3178
- const { walletUrl } = AIR_URLS[__classPrivateFieldGet(this, _AirService_buildEnv, "f")];
3238
+ const { walletUrl } = getAirUrls(__classPrivateFieldGet(this, _AirService_buildEnv, "f"), __classPrivateFieldGet(this, _AirService_credentialNetwork, "f"));
3179
3239
  const walletIframeOrigin = new URL(walletUrl).origin;
3180
3240
  try {
3181
3241
  const walletInitRequestPromise = new Promise((resolve, reject) => {
@@ -3352,7 +3412,7 @@ _AirService_loginResult = new WeakMap(), _AirService_buildEnv = new WeakMap(), _
3352
3412
  }, _AirService_initializeRecovery = async function _AirService_initializeRecovery() {
3353
3413
  if (__classPrivateFieldGet(this, _AirService_recoveryInitialization, "f"))
3354
3414
  throw new AirServiceError("ALREADY_INITIALIZING", "Already initializing");
3355
- const { recoveryUrl } = AIR_URLS[__classPrivateFieldGet(this, _AirService_buildEnv, "f")];
3415
+ const { recoveryUrl } = getAirUrls(__classPrivateFieldGet(this, _AirService_buildEnv, "f"), __classPrivateFieldGet(this, _AirService_credentialNetwork, "f"));
3356
3416
  const recoveryIframeOrigin = new URL(recoveryUrl).origin;
3357
3417
  try {
3358
3418
  const recoveryInitRequestPromise = new Promise((resolve, reject) => {
@@ -101,7 +101,7 @@
101
101
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
102
102
  };
103
103
 
104
- var version = "1.7.0";
104
+ var version = "1.8.0-beta.2";
105
105
  var airkitPackage = {
106
106
  version: version};
107
107
 
@@ -622,7 +622,8 @@
622
622
  address: "0xcA11bde05977b3631167028862bE2a173976CA11",
623
623
  blockCreated: 3837540
624
624
  }
625
- }
625
+ },
626
+ testnet: true
626
627
  };
627
628
  const mocaTestnet = {
628
629
  id: 222888,
@@ -634,8 +635,8 @@
634
635
  },
635
636
  rpcUrls: {
636
637
  default: {
637
- http: ["https://testnet-rpc.mocachain.org"],
638
- webSocket: ["wss://testnet-rpc.mocachain.org"]
638
+ http: ["https://rpc.testnet.mocachain.dev"],
639
+ webSocket: ["wss://rpc.testnet.mocachain.dev"]
639
640
  }
640
641
  },
641
642
  blockExplorers: {
@@ -649,7 +650,8 @@
649
650
  address: "0xcA11bde05977b3631167028862bE2a173976CA11",
650
651
  blockCreated: 1330259
651
652
  }
652
- }
653
+ },
654
+ testnet: true
653
655
  };
654
656
 
655
657
  const BUILD_ENV = {
@@ -667,6 +669,12 @@
667
669
  ]; // order defines the z-index from highest to lowest
668
670
 
669
671
  const FONT_CDNS = ["https://fonts.googleapis.com", "https://fonts.gstatic.com"];
672
+ const SANDBOX_TESTNET_URLS = {
673
+ authUrl: "https://account.sandbox-testnet.air3.com/auth/",
674
+ walletUrl: "https://account.sandbox-testnet.air3.com/wallet/",
675
+ recoveryUrl: "https://account.sandbox-testnet.air3.com/recovery/",
676
+ credentialUrl: "https://account.sandbox-testnet.air3.com/credential/",
677
+ };
670
678
  const AIR_URLS = {
671
679
  [BUILD_ENV.DEVELOPMENT]: {
672
680
  authUrl: "https://localhost:8200/auth/",
@@ -699,6 +707,12 @@
699
707
  credentialUrl: "https://account.air3.com/credential/",
700
708
  },
701
709
  };
710
+ const getAirUrls = (buildEnv, credentialNetwork) => {
711
+ if (buildEnv === BUILD_ENV.SANDBOX && credentialNetwork === "testnet") {
712
+ return SANDBOX_TESTNET_URLS;
713
+ }
714
+ return AIR_URLS[buildEnv];
715
+ };
702
716
  /**
703
717
  * Injects dns-prefetch, preconnect, and prefetch link tags
704
718
  * for a given resource or page URL.
@@ -721,7 +735,7 @@
721
735
  link.rel = rel;
722
736
  link.href = href;
723
737
  if (as)
724
- link.as = as;
738
+ ;
725
739
  if (crossOrigin)
726
740
  link.crossOrigin = "anonymous";
727
741
  head.appendChild(link);
@@ -732,8 +746,32 @@
732
746
  // Preconnect (TCP + TLS warm-up)
733
747
  addLink("preconnect", parsed.origin, undefined, isCrossOrigin);
734
748
  // Prefetch (optional — caches the resource or HTML document)
735
- if (options?.prefetch !== false) {
736
- addLink("prefetch", parsed.href, options?.as ?? "document", isCrossOrigin);
749
+ if (options?.prefetch !== false &&
750
+ HTMLScriptElement.supports &&
751
+ HTMLScriptElement.supports("speculationrules")) {
752
+ const scriptId = `speculation-${btoa(parsed.href)
753
+ .replace(/\+/g, "-")
754
+ .replace(/\//g, "_")
755
+ .replace(/=/g, "")}`;
756
+ if (!document.getElementById(scriptId)) {
757
+ const script = document.createElement("script");
758
+ script.id = scriptId;
759
+ script.type = "speculationrules";
760
+ const sources = [
761
+ {
762
+ source: "list",
763
+ urls: [parsed.href],
764
+ eagerness: "immediate",
765
+ },
766
+ ];
767
+ const rules = {
768
+ ...((options?.as ?? "document") === "document"
769
+ ? { prerender: sources }
770
+ : { prefetch: sources }),
771
+ };
772
+ script.textContent = JSON.stringify(rules);
773
+ document.body.appendChild(script);
774
+ }
737
775
  }
738
776
  }
739
777
  catch (err) {
@@ -2241,7 +2279,12 @@
2241
2279
  return this._iframeElement;
2242
2280
  const iframe = document.createElement("iframe");
2243
2281
  iframe.id = this.iframeId;
2244
- iframe.allow = "publickey-credentials-get *; publickey-credentials-create *";
2282
+ iframe.allow = [
2283
+ "publickey-credentials-get *",
2284
+ "publickey-credentials-create *",
2285
+ "ch-ua-model",
2286
+ "ch-ua-platform-version",
2287
+ ].join("; ");
2245
2288
  iframe.src = this.iframeUrl;
2246
2289
  iframe.style.position = "fixed";
2247
2290
  iframe.style.zIndex = `${this.getZIndex()}`;
@@ -2458,7 +2501,12 @@
2458
2501
  const response = firstValueFrom(this.messages$.pipe(filter((msg) => msg.type === AirWalletMessageTypes.SHOW_SWAP_UI_RESPONSE)));
2459
2502
  await this.sendMessage({
2460
2503
  type: AirWalletMessageTypes.SHOW_SWAP_UI_REQUEST,
2461
- payload
2504
+ payload: {
2505
+ initialFromToken: payload?.initialFromToken,
2506
+ fallbackFromToken: payload?.fallbackFromToken,
2507
+ initialToToken: payload?.initialToToken,
2508
+ defaultSlippage: payload?.defaultSlippage?.toString(), // TODO refactor to all be numbers
2509
+ },
2462
2510
  });
2463
2511
  return response;
2464
2512
  }
@@ -2669,7 +2717,7 @@
2669
2717
  }
2670
2718
  var WindowService$1 = WindowService.instance;
2671
2719
 
2672
- var _AirService_instances, _AirService_loginResult, _AirService_buildEnv, _AirService_enableLogging, _AirService_partnerId, _AirService_sessionId, _AirService_sessionConfig, _AirService_authMessagingService, _AirService_authIframeController, _AirService_isAuthInitialized, _AirService_airEventListener, _AirService_walletMessagingService, _AirService_walletIframeController, _AirService_walletInitialization, _AirService_walletLoggedInResult, _AirService_airWalletProvider, _AirService_recoveryInitialization, _AirService_recoveryMessagingService, _AirService_recoveryIframeController, _AirService_credentialsInitialization, _AirService_credentialMessagingService, _AirService_credentialIframeController, _AirService_assertInitialized, _AirService_assertLoggedIn, _AirService_ensureCredential, _AirService_initializeCredentials, _AirService_subscribeToCredentialEvents, _AirService_cleanUpCredential, _AirService_ensureWallet, _AirService_initializeWallet, _AirService_subscribeToWalletEvents, _AirService_triggerEventListeners, _AirService_triggerAirAuthInitialized, _AirService_triggerAirAuthLoggedIn, _AirService_triggerAirAuthLoggedOut, _AirService_triggerWalletInitialized, _AirService_createLoginResult, _AirService_createWalletInitializedResult, _AirService_cleanUpAuth, _AirService_cleanUpWallet, _AirService_ensureRecovery, _AirService_initializeRecovery, _AirService_subscribeToRecoveryEvents, _AirService_cleanUpRecovery;
2720
+ var _AirService_instances, _AirService_loginResult, _AirService_buildEnv, _AirService_enableLogging, _AirService_partnerId, _AirService_sessionId, _AirService_sessionConfig, _AirService_authMessagingService, _AirService_authIframeController, _AirService_isAuthInitialized, _AirService_airEventListener, _AirService_walletMessagingService, _AirService_walletIframeController, _AirService_walletInitialization, _AirService_walletLoggedInResult, _AirService_airWalletProvider, _AirService_recoveryInitialization, _AirService_recoveryMessagingService, _AirService_recoveryIframeController, _AirService_credentialsInitialization, _AirService_credentialMessagingService, _AirService_credentialIframeController, _AirService_credentialNetwork, _AirService_assertInitialized, _AirService_assertLoggedIn, _AirService_ensureCredential, _AirService_initializeCredentials, _AirService_subscribeToCredentialEvents, _AirService_cleanUpCredential, _AirService_ensureWallet, _AirService_initializeWallet, _AirService_subscribeToWalletEvents, _AirService_triggerEventListeners, _AirService_triggerAirAuthInitialized, _AirService_triggerAirAuthLoggedIn, _AirService_triggerAirAuthLoggedOut, _AirService_triggerWalletInitialized, _AirService_createLoginResult, _AirService_createWalletInitializedResult, _AirService_cleanUpAuth, _AirService_cleanUpWallet, _AirService_ensureRecovery, _AirService_initializeRecovery, _AirService_subscribeToRecoveryEvents, _AirService_cleanUpRecovery;
2673
2721
  const airKitVersion = airkitPackage.version;
2674
2722
  class AirService {
2675
2723
  constructor({ partnerId }) {
@@ -2696,6 +2744,7 @@
2696
2744
  _AirService_credentialsInitialization.set(this, void 0);
2697
2745
  _AirService_credentialMessagingService.set(this, void 0);
2698
2746
  _AirService_credentialIframeController.set(this, void 0);
2747
+ _AirService_credentialNetwork.set(this, void 0);
2699
2748
  __classPrivateFieldSet(this, _AirService_partnerId, partnerId, "f");
2700
2749
  __classPrivateFieldSet(this, _AirService_authMessagingService, AuthMessageService.create(), "f");
2701
2750
  __classPrivateFieldSet(this, _AirService_walletMessagingService, WalletMessageService.create(), "f");
@@ -2734,13 +2783,15 @@
2734
2783
  shouldEnableAutomation() {
2735
2784
  return localStorage.getItem("automation") === "true" && __classPrivateFieldGet(this, _AirService_buildEnv, "f") !== BUILD_ENV.PRODUCTION;
2736
2785
  }
2737
- async init({ buildEnv = BUILD_ENV.PRODUCTION, enableLogging = false, skipRehydration = false, sessionConfig = undefined, preloadWallet = false, preloadCredential = false, }) {
2786
+ async init(config) {
2787
+ const { buildEnv = BUILD_ENV.PRODUCTION, enableLogging = false, skipRehydration = false, sessionConfig = undefined, preloadWallet = false, preloadCredential = false, credentialNetwork = "testnet", } = config;
2738
2788
  if (!__classPrivateFieldGet(this, _AirService_partnerId, "f"))
2739
2789
  throw new AirServiceError("CLIENT_ERROR", "Partner ID is required to initialize the service");
2740
2790
  if (__classPrivateFieldGet(this, _AirService_isAuthInitialized, "f"))
2741
2791
  return __classPrivateFieldGet(this, _AirService_loginResult, "f") ?? null;
2792
+ __classPrivateFieldSet(this, _AirService_credentialNetwork, buildEnv === BUILD_ENV.SANDBOX ? credentialNetwork : undefined, "f");
2742
2793
  configureLogLevel(buildEnv, enableLogging);
2743
- const { authUrl, walletUrl, credentialUrl } = AIR_URLS[buildEnv];
2794
+ const { authUrl, walletUrl, credentialUrl } = getAirUrls(buildEnv, __classPrivateFieldGet(this, _AirService_credentialNetwork, "f"));
2744
2795
  addResourceHints(authUrl);
2745
2796
  if (preloadWallet) {
2746
2797
  addResourceHints(walletUrl);
@@ -2914,7 +2965,7 @@
2914
2965
  if (result.payload.success === false) {
2915
2966
  throw new AirServiceError(result.payload.errorName, result.payload.errorMessage);
2916
2967
  }
2917
- return { txHash: result.payload.txHash };
2968
+ return result.payload;
2918
2969
  }
2919
2970
  /**
2920
2971
  * @experimental This feature has not been officially released and might change in the future.
@@ -2969,7 +3020,10 @@
2969
3020
  throw new AirServiceError(result.payload.errorName, result.payload.errorMessage);
2970
3021
  }
2971
3022
  }
2972
- const sessionConfig = { locale: results[0].payload.locale };
3023
+ const sessionConfig = {
3024
+ locale: results[0].payload.locale,
3025
+ currency: results[0].payload.currency,
3026
+ };
2973
3027
  __classPrivateFieldSet(this, _AirService_sessionConfig, sessionConfig, "f");
2974
3028
  return sessionConfig;
2975
3029
  }
@@ -3032,20 +3086,25 @@
3032
3086
  async preloadCredential() {
3033
3087
  await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_ensureCredential).call(this);
3034
3088
  }
3035
- async issueCredential({ authToken, issuerDid, credentialId, credentialSubject, }) {
3089
+ async issueCredential({ authToken, issuerDid, credentialId, credentialSubject, curve, }) {
3036
3090
  await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_ensureCredential).call(this);
3037
- const { payload } = await __classPrivateFieldGet(this, _AirService_credentialMessagingService, "f").sendIssueCredentialRequest({
3091
+ const response = await __classPrivateFieldGet(this, _AirService_credentialMessagingService, "f").sendIssueCredentialRequest({
3038
3092
  partnerToken: authToken,
3039
3093
  issuerDid,
3040
3094
  credentialId,
3041
3095
  credentialSubject,
3096
+ curve,
3042
3097
  });
3098
+ const { payload } = response;
3043
3099
  if (payload.closeDApp) {
3044
3100
  window.close();
3045
3101
  }
3046
3102
  if (payload.success === false) {
3047
3103
  throw new AirServiceError(payload.errorName, payload.errorMessage);
3048
3104
  }
3105
+ return {
3106
+ cakPublicKey: payload.cakPublicKey,
3107
+ };
3049
3108
  }
3050
3109
  async verifyCredential({ authToken, programId, redirectUrl, }) {
3051
3110
  await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_ensureCredential).call(this);
@@ -3060,7 +3119,7 @@
3060
3119
  return payload.verificationResult;
3061
3120
  }
3062
3121
  }
3063
- _AirService_loginResult = new WeakMap(), _AirService_buildEnv = new WeakMap(), _AirService_enableLogging = new WeakMap(), _AirService_partnerId = new WeakMap(), _AirService_sessionId = new WeakMap(), _AirService_sessionConfig = new WeakMap(), _AirService_authMessagingService = new WeakMap(), _AirService_authIframeController = new WeakMap(), _AirService_isAuthInitialized = new WeakMap(), _AirService_airEventListener = new WeakMap(), _AirService_walletMessagingService = new WeakMap(), _AirService_walletIframeController = new WeakMap(), _AirService_walletInitialization = new WeakMap(), _AirService_walletLoggedInResult = new WeakMap(), _AirService_airWalletProvider = new WeakMap(), _AirService_recoveryInitialization = new WeakMap(), _AirService_recoveryMessagingService = new WeakMap(), _AirService_recoveryIframeController = new WeakMap(), _AirService_credentialsInitialization = new WeakMap(), _AirService_credentialMessagingService = new WeakMap(), _AirService_credentialIframeController = new WeakMap(), _AirService_instances = new WeakSet(), _AirService_assertInitialized = function _AirService_assertInitialized() {
3122
+ _AirService_loginResult = new WeakMap(), _AirService_buildEnv = new WeakMap(), _AirService_enableLogging = new WeakMap(), _AirService_partnerId = new WeakMap(), _AirService_sessionId = new WeakMap(), _AirService_sessionConfig = new WeakMap(), _AirService_authMessagingService = new WeakMap(), _AirService_authIframeController = new WeakMap(), _AirService_isAuthInitialized = new WeakMap(), _AirService_airEventListener = new WeakMap(), _AirService_walletMessagingService = new WeakMap(), _AirService_walletIframeController = new WeakMap(), _AirService_walletInitialization = new WeakMap(), _AirService_walletLoggedInResult = new WeakMap(), _AirService_airWalletProvider = new WeakMap(), _AirService_recoveryInitialization = new WeakMap(), _AirService_recoveryMessagingService = new WeakMap(), _AirService_recoveryIframeController = new WeakMap(), _AirService_credentialsInitialization = new WeakMap(), _AirService_credentialMessagingService = new WeakMap(), _AirService_credentialIframeController = new WeakMap(), _AirService_credentialNetwork = new WeakMap(), _AirService_instances = new WeakSet(), _AirService_assertInitialized = function _AirService_assertInitialized() {
3064
3123
  if (!__classPrivateFieldGet(this, _AirService_isAuthInitialized, "f"))
3065
3124
  throw new AirServiceError("NOT_INITIALIZED", "Service is not initialized");
3066
3125
  }, _AirService_assertLoggedIn = function _AirService_assertLoggedIn() {
@@ -3084,7 +3143,7 @@
3084
3143
  if (__classPrivateFieldGet(this, _AirService_credentialsInitialization, "f")) {
3085
3144
  throw new AirServiceError("ALREADY_INITIALIZING", "Already initializing credentials");
3086
3145
  }
3087
- const { credentialUrl } = AIR_URLS[__classPrivateFieldGet(this, _AirService_buildEnv, "f")];
3146
+ const { credentialUrl } = getAirUrls(__classPrivateFieldGet(this, _AirService_buildEnv, "f"), __classPrivateFieldGet(this, _AirService_credentialNetwork, "f"));
3088
3147
  const credentialIframeOrigin = new URL(credentialUrl).origin;
3089
3148
  let closeDApp = false;
3090
3149
  try {
@@ -3102,6 +3161,7 @@
3102
3161
  partnerDAppUrl: window.location.href,
3103
3162
  enableAutomation: this.shouldEnableAutomation(),
3104
3163
  sessionConfig: __classPrivateFieldGet(this, _AirService_sessionConfig, "f"),
3164
+ ...(__classPrivateFieldGet(this, _AirService_credentialNetwork, "f") && { credentialNetwork: __classPrivateFieldGet(this, _AirService_credentialNetwork, "f") }),
3105
3165
  });
3106
3166
  if (payload.success === true) {
3107
3167
  resolve();
@@ -3181,7 +3241,7 @@
3181
3241
  }, _AirService_initializeWallet = async function _AirService_initializeWallet(option) {
3182
3242
  if (__classPrivateFieldGet(this, _AirService_walletInitialization, "f"))
3183
3243
  throw new AirServiceError("ALREADY_INITIALIZING", "Already initializing");
3184
- const { walletUrl } = AIR_URLS[__classPrivateFieldGet(this, _AirService_buildEnv, "f")];
3244
+ const { walletUrl } = getAirUrls(__classPrivateFieldGet(this, _AirService_buildEnv, "f"), __classPrivateFieldGet(this, _AirService_credentialNetwork, "f"));
3185
3245
  const walletIframeOrigin = new URL(walletUrl).origin;
3186
3246
  try {
3187
3247
  const walletInitRequestPromise = new Promise((resolve, reject) => {
@@ -3358,7 +3418,7 @@
3358
3418
  }, _AirService_initializeRecovery = async function _AirService_initializeRecovery() {
3359
3419
  if (__classPrivateFieldGet(this, _AirService_recoveryInitialization, "f"))
3360
3420
  throw new AirServiceError("ALREADY_INITIALIZING", "Already initializing");
3361
- const { recoveryUrl } = AIR_URLS[__classPrivateFieldGet(this, _AirService_buildEnv, "f")];
3421
+ const { recoveryUrl } = getAirUrls(__classPrivateFieldGet(this, _AirService_buildEnv, "f"), __classPrivateFieldGet(this, _AirService_credentialNetwork, "f"));
3362
3422
  const recoveryIframeOrigin = new URL(recoveryUrl).origin;
3363
3423
  try {
3364
3424
  const recoveryInitRequestPromise = new Promise((resolve, reject) => {
@@ -1,5 +1,6 @@
1
1
  import { AirAuthStartRecoveryRequestPayload } from "@mocanetwork/common/src/air/messaging/auth";
2
- import { AirEventListener, AirLoginResult, AirSessionConfig, AirUserDetails, BUILD_ENV_TYPE, ClaimAirIdOptions, ClaimAirIdResult, CredentialVerificationResult, EIP1193Provider } from "./interfaces";
2
+ import { AirEventListener, AirLoginResult, AirSessionConfig, AirUserDetails, BUILD_ENV, BUILD_ENV_TYPE, ClaimAirIdOptions, ClaimAirIdResult, CredentialNetwork, CredentialVerificationResult, EIP1193Provider, ShowSwapUIOptions } from "./interfaces";
3
+ import { Token } from "packages/common/src/types";
3
4
  declare class AirService {
4
5
  #private;
5
6
  constructor({ partnerId }: {
@@ -12,10 +13,15 @@ declare class AirService {
12
13
  get isWalletInitialized(): boolean;
13
14
  get provider(): EIP1193Provider;
14
15
  private shouldEnableAutomation;
15
- init({ buildEnv, enableLogging, skipRehydration, sessionConfig, preloadWallet, preloadCredential, }: {
16
- buildEnv: BUILD_ENV_TYPE;
17
- enableLogging: boolean;
18
- skipRehydration: boolean;
16
+ init(config: ({
17
+ buildEnv?: Exclude<BUILD_ENV_TYPE, typeof BUILD_ENV.SANDBOX>;
18
+ credentialNetwork?: never;
19
+ } | {
20
+ buildEnv?: typeof BUILD_ENV.SANDBOX;
21
+ credentialNetwork?: CredentialNetwork;
22
+ }) & {
23
+ enableLogging?: boolean;
24
+ skipRehydration?: boolean;
19
25
  preloadWallet?: boolean;
20
26
  preloadCredential?: boolean;
21
27
  sessionConfig?: Partial<AirSessionConfig>;
@@ -43,12 +49,14 @@ declare class AirService {
43
49
  /**
44
50
  * @experimental This feature has not been officially released and might change in the future.
45
51
  */
46
- showSwapUI(options?: {
47
- initialFromToken?: string;
48
- fallbackFromToken?: string;
49
- initialToToken?: string;
50
- }): Promise<{
52
+ showSwapUI(options?: ShowSwapUIOptions): Promise<{
51
53
  txHash: `0x${string}`;
54
+ from: Token & {
55
+ amount: string;
56
+ };
57
+ to: Token & {
58
+ amount: string;
59
+ };
52
60
  }>;
53
61
  /**
54
62
  * @experimental This feature has not been officially released and might change in the future.
@@ -71,12 +79,15 @@ declare class AirService {
71
79
  on(listener: AirEventListener): void;
72
80
  off(listener: AirEventListener): void;
73
81
  preloadCredential(): Promise<void>;
74
- issueCredential({ authToken, issuerDid, credentialId, credentialSubject, }: {
82
+ issueCredential({ authToken, issuerDid, credentialId, credentialSubject, curve, }: {
75
83
  authToken: string;
76
84
  issuerDid: string;
77
85
  credentialId: string;
78
86
  credentialSubject: Record<string, unknown>;
79
- }): Promise<void>;
87
+ curve?: "secp256r1" | "secp256k1";
88
+ }): Promise<{
89
+ cakPublicKey?: string;
90
+ }>;
80
91
  verifyCredential({ authToken, programId, redirectUrl, }: {
81
92
  authToken: string;
82
93
  programId: string;
@@ -24,6 +24,7 @@ export type AirInitializationRequestMessage = AirCredentialMessageBase<"air_cred
24
24
  partnerDAppUrl: string;
25
25
  enableAutomation: boolean;
26
26
  sessionConfig?: Partial<SessionConfig>;
27
+ credentialNetwork?: "devnet" | "testnet";
27
28
  }>;
28
29
  type AirInitializationSuccessResponseMessage = AirCredentialMessageBase<"air_credential_initialization_response", AirMessageSuccessPayload>;
29
30
  export type AirInitializationErrorResponseMessage = AirCredentialMessageBase<"air_credential_initialization_response", AirMessageErrorPayload & {
@@ -42,6 +43,7 @@ export type AirIssueCredentialRequestMessage = AirCredentialMessageBase<"air_cre
42
43
  issuerDid: string;
43
44
  credentialId: string;
44
45
  credentialSubject: Record<string, unknown>;
46
+ curve?: "secp256r1" | "secp256k1";
45
47
  }>;
46
48
  export type AirVerifyCredentialRequestMessage = AirCredentialMessageBase<"air_credential_verify_request", {
47
49
  partnerToken: string;
@@ -50,6 +52,7 @@ export type AirVerifyCredentialRequestMessage = AirCredentialMessageBase<"air_cr
50
52
  }>;
51
53
  export type AirIssueCredentialResponseMessage = AirCredentialMessageBase<"air_credential_issue_response", ((AirMessageSuccessPayload & {
52
54
  result: Record<string, unknown>;
55
+ cakPublicKey?: string;
53
56
  }) | AirMessageErrorPayload) & {
54
57
  closeDApp?: boolean;
55
58
  }>;
@@ -60,6 +63,7 @@ export type AirVerifyCredentialSuccessResponsePayload = {
60
63
  status: "Compliant";
61
64
  zkProofs: Record<string, string>;
62
65
  transactionHash: string;
66
+ cakPrivateKey?: string;
63
67
  };
64
68
  } & AirMessageSuccessPayload;
65
69
  export type AirVerifyCredentialResponseMessage = AirCredentialMessageBase<"air_credential_verify_response", AirVerifyCredentialSuccessResponsePayload | AirMessageErrorPayload>;
@@ -1,3 +1,4 @@
1
+ import { SupportedCurrencyCode } from "../../currency";
1
2
  import { AirErrorName } from "../error/types";
2
3
  export type AirMessageBase<TType extends string = string, TPayload extends object = object> = {
3
4
  type: TType;
@@ -16,4 +17,5 @@ export type AirMessageErrorPayload = {
16
17
  };
17
18
  export type SessionConfig = {
18
19
  locale: string;
20
+ currency: SupportedCurrencyCode;
19
21
  };
@@ -1,3 +1,4 @@
1
+ import { TokenSymbol, Token } from "../../types";
1
2
  import { AirIdDetails, MFASetup } from "../../realm/user/types";
2
3
  import { AirWalletProviderMessageErrorResponse, AirWalletProviderMessageRequest, AirWalletProviderMessageSuccessResponse } from "./provider";
3
4
  import { AirMessageBase, AirMessageBaseWithoutPayload, AirMessageErrorPayload, AirMessageSuccessPayload, SessionConfig } from "./types";
@@ -76,12 +77,19 @@ export type AirClaimIdSuccess = AirMessageSuccessPayload & {
76
77
  export type AirClaimIdResponsePayload = AirClaimIdSuccess | AirMessageErrorPayload;
77
78
  export type AirClaimIdResponseMessage = AirWalletMessageBase<"air_claim_id_response", AirClaimIdResponsePayload>;
78
79
  export type AirShowSwapUIRequestMessage = AirWalletMessageBase<"air_show_swap_ui_request", {
79
- initialFromToken?: string;
80
- fallbackFromToken?: string;
81
- initialToToken?: string;
80
+ initialFromToken?: TokenSymbol;
81
+ initialToToken?: TokenSymbol;
82
+ fallbackFromToken?: TokenSymbol;
83
+ defaultSlippage?: string;
82
84
  }>;
83
85
  export type AirShowSwapUISuccess = AirMessageSuccessPayload & {
84
86
  txHash: `0x${string}`;
87
+ from: Token & {
88
+ amount: string;
89
+ };
90
+ to: Token & {
91
+ amount: string;
92
+ };
85
93
  };
86
94
  export type AirShowSwapUIResponseMessage = AirWalletMessageBase<"air_show_swap_ui_response", AirShowSwapUISuccess | AirMessageErrorPayload>;
87
95
  export type AirShowOnRampUIRequestMessage = AirWalletMessageBase<"air_show_on_ramp_ui_request", {
@@ -24,6 +24,7 @@ export declare const mocaDevnet: {
24
24
  readonly blockCreated: 3837540;
25
25
  };
26
26
  };
27
+ readonly testnet: true;
27
28
  };
28
29
  export declare const mocaTestnet: {
29
30
  readonly id: 222888;
@@ -35,8 +36,8 @@ export declare const mocaTestnet: {
35
36
  };
36
37
  readonly rpcUrls: {
37
38
  readonly default: {
38
- readonly http: readonly ["https://testnet-rpc.mocachain.org"];
39
- readonly webSocket: readonly ["wss://testnet-rpc.mocachain.org"];
39
+ readonly http: readonly ["https://rpc.testnet.mocachain.dev"];
40
+ readonly webSocket: readonly ["wss://rpc.testnet.mocachain.dev"];
40
41
  };
41
42
  };
42
43
  readonly blockExplorers: {
@@ -51,4 +52,33 @@ export declare const mocaTestnet: {
51
52
  readonly blockCreated: 1330259;
52
53
  };
53
54
  };
55
+ readonly testnet: true;
56
+ };
57
+ export declare const mocaMainnet: {
58
+ readonly id: 2288;
59
+ readonly name: "Moca Mainnet";
60
+ readonly nativeCurrency: {
61
+ readonly decimals: 18;
62
+ readonly name: "Moca Network";
63
+ readonly symbol: "MOCA";
64
+ };
65
+ readonly rpcUrls: {
66
+ readonly default: {
67
+ readonly http: readonly ["https://rpc.mocachain.org"];
68
+ readonly webSocket: readonly ["wss://rpc.mocachain.org/ws"];
69
+ };
70
+ };
71
+ readonly blockExplorers: {
72
+ readonly default: {
73
+ readonly name: "Moca Mainnet";
74
+ readonly url: "https://scan.mocachain.org";
75
+ };
76
+ };
77
+ readonly contracts: {
78
+ readonly multicall3: {
79
+ readonly address: "0xcA11bde05977b3631167028862bE2a173976CA11";
80
+ readonly blockCreated: 1;
81
+ };
82
+ };
83
+ readonly testnet: false;
54
84
  };
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Supported fiat currency codes
3
+ * Use these typed constants instead of raw strings for better type safety
4
+ */
5
+ export declare const SUPPORTED_CURRENCY_CODES: {
6
+ readonly EUR: "EUR";
7
+ readonly USD: "USD";
8
+ readonly CNY: "CNY";
9
+ readonly KRW: "KRW";
10
+ readonly TRY: "TRY";
11
+ };
12
+ export type SupportedCurrencyCode = (typeof SUPPORTED_CURRENCY_CODES)[keyof typeof SUPPORTED_CURRENCY_CODES];
13
+ /**
14
+ * Default currency code (USD)
15
+ */
16
+ export declare const DEFAULT_CURRENCY_CODE: "USD";
17
+ /**
18
+ * Currency information including symbol, decimals, and localized names
19
+ */
20
+ export type CurrencyInfo = {
21
+ readonly type: 'fiat';
22
+ readonly code: SupportedCurrencyCode;
23
+ readonly symbol: string;
24
+ readonly name: {
25
+ readonly [key: string]: string;
26
+ };
27
+ readonly decimals: number;
28
+ readonly floatingPoint: number;
29
+ readonly image: string;
30
+ };
31
+ /**
32
+ * Supported fiat currencies with full metadata
33
+ * This is the source of truth for all supported currencies
34
+ */
35
+ export declare const SUPPORTED_CURRENCIES: readonly CurrencyInfo[];
@@ -34,6 +34,15 @@ export type EIP1193Event = keyof EIP1193EventMap;
34
34
  * Custom RPC schema for Air-specific provider methods
35
35
  */
36
36
  export type AirCustomRpcSchema = [
37
+ {
38
+ Method: "air_accounts";
39
+ Parameters: [includeTestnets?: boolean];
40
+ ReturnType: {
41
+ chainId: number;
42
+ isDeployed: boolean;
43
+ address: Address;
44
+ }[];
45
+ },
37
46
  {
38
47
  Method: "air_listSessionKeyScopes";
39
48
  Parameters: [chainId?: number];
@@ -102,10 +111,12 @@ export type StandardRpcSchema = [
102
111
  RpcMethod<"eth_sendTransaction", unknown[], string>,
103
112
  RpcMethod<"eth_sign", unknown[], string>,
104
113
  RpcMethod<"personal_sign", unknown[], string>,
114
+ RpcMethod<"eth_signTypedData_v4", unknown[], string>,
105
115
  RpcMethod<"wallet_switchEthereumChain", [{
106
116
  chainId: `0x${string}`;
107
117
  }], null>,
108
- RpcMethod<"wallet_addEthereumChain", unknown[], null>
118
+ RpcMethod<"wallet_addEthereumChain", unknown[], null>,
119
+ RpcMethod<"wallet_sendCalls", unknown[], string>
109
120
  ];
110
121
  /**
111
122
  * Combined schema including Air custom methods and standard methods
@@ -44,6 +44,7 @@ export type CredentialConfigResponse = {
44
44
  credentialConfig: {
45
45
  globalVersion: number;
46
46
  userVersion: number;
47
+ signingMethod?: "personal_sign" | "eth_signTypedData_v4";
47
48
  };
48
49
  };
49
50
  export type UserResponse = {
@@ -12,3 +12,11 @@ export type IntersectionToUnion<T> = {
12
12
  [K in keyof T]: (x: T[K]) => void;
13
13
  }[keyof T] extends (x: infer U) => void ? U : never;
14
14
  export type FixedArray<T, N extends number, Acc extends T[] = []> = Acc["length"] extends N ? Acc : FixedArray<T, N, [...Acc, T]>;
15
+ export type TokenSymbol = {
16
+ symbol: string;
17
+ chainId: number;
18
+ };
19
+ export type Token = TokenSymbol & {
20
+ decimals: number;
21
+ address: `0x${string}`;
22
+ };
@@ -1,7 +1,9 @@
1
1
  import { AirVerifyCredentialSuccessResponsePayload } from "@mocanetwork/common/src/air/messaging/credential";
2
2
  import { mocaDevnet, mocaTestnet } from "@mocanetwork/common/src/const";
3
+ import { SupportedCurrencyCode } from "@mocanetwork/common/src/currency";
3
4
  import { EIP1193Provider as EIP1193ProviderInterface } from "./common/provider/types";
4
5
  import { AirIdDetails } from "./common/realm/user/types";
6
+ import { TokenSymbol } from "packages/common/src/types";
5
7
  export declare const BUILD_ENV: {
6
8
  readonly PRODUCTION: "production";
7
9
  readonly UAT: "uat";
@@ -34,7 +36,9 @@ export type AirUserDetails = {
34
36
  };
35
37
  export type AirSessionConfig = {
36
38
  locale: string;
39
+ currency: SupportedCurrencyCode;
37
40
  };
41
+ export type CredentialNetwork = "devnet" | "testnet";
38
42
  export type AirLoginResult = {
39
43
  isLoggedIn: boolean;
40
44
  id: string;
@@ -76,5 +80,11 @@ export type ClaimAirIdOptions = {
76
80
  background: true;
77
81
  offchain?: boolean;
78
82
  };
83
+ export type ShowSwapUIOptions = {
84
+ initialFromToken?: TokenSymbol;
85
+ fallbackFromToken?: TokenSymbol;
86
+ initialToToken?: TokenSymbol;
87
+ defaultSlippage?: number;
88
+ };
79
89
  export type EIP1193Provider = EIP1193ProviderInterface;
80
90
  export { mocaDevnet, mocaTestnet };
@@ -1,6 +1,7 @@
1
- import { AirUrlConfig, BUILD_ENV_TYPE } from "./interfaces";
1
+ import { AirUrlConfig, BUILD_ENV_TYPE, CredentialNetwork } from "./interfaces";
2
2
  export declare const FONT_CDNS: string[];
3
3
  export declare const AIR_URLS: Record<BUILD_ENV_TYPE, AirUrlConfig>;
4
+ export declare const getAirUrls: (buildEnv: BUILD_ENV_TYPE, credentialNetwork?: CredentialNetwork) => AirUrlConfig;
4
5
  /**
5
6
  * Injects dns-prefetch, preconnect, and prefetch link tags
6
7
  * for a given resource or page URL.
@@ -14,8 +15,6 @@ export declare const addResourceHints: (url: string, options?: {
14
15
  prefetch?: boolean;
15
16
  as?: string;
16
17
  }) => void;
17
- export declare const handleEvent: (handle: EventTarget, eventName: string, handler: (...args: unknown[]) => void, ...handlerArgs: unknown[]) => void;
18
- export declare const htmlToElement: <T extends Element>(html: string) => T;
19
- export declare const isElement: (element: unknown) => element is Element | Document;
18
+ export declare const isElement: (element: unknown) => element is Document | Element;
20
19
  export declare const randomId: () => string;
21
20
  export declare const extractErrorHash: (message: string) => string;
@@ -1,4 +1,5 @@
1
1
  import { AirWindowMessage } from "@mocanetwork/common/src/air/messaging/window";
2
+ import { TokenSymbol } from "@mocanetwork/common/src/types";
2
3
  import { MessageServiceBase } from "./common/air/messaging/messageServiceBase";
3
4
  import { AirClaimIdRequestMessage, AirInitializationRequestMessage, AirWalletMessage, AirWalletUpdateSessionConfigRequestMessage } from "./common/air/messaging/wallet";
4
5
  export declare class WalletMessageService extends MessageServiceBase<AirWalletMessage | AirWindowMessage> {
@@ -19,9 +20,10 @@ export declare class WalletMessageService extends MessageServiceBase<AirWalletMe
19
20
  sendWindowClosed(windowId: string): Promise<void>;
20
21
  sendClaimIdRequest(payload: AirClaimIdRequestMessage["payload"]): Promise<import("./common/air/messaging/wallet").AirClaimIdResponseMessage>;
21
22
  sendShowSwapUIRequest(payload?: {
22
- initialFromToken?: string;
23
- fallbackFromToken?: string;
24
- initialToToken?: string;
23
+ initialFromToken?: TokenSymbol;
24
+ initialToToken?: TokenSymbol;
25
+ fallbackFromToken?: TokenSymbol;
26
+ defaultSlippage?: number;
25
27
  }): Promise<import("./common/air/messaging/wallet").AirShowSwapUIResponseMessage>;
26
28
  sendShowOnRampUIRequest(payload: {
27
29
  displayCurrencyCode: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mocanetwork/airkit",
3
- "version": "1.7.0",
3
+ "version": "1.8.0-beta.2",
4
4
  "description": "Air kit to interact with the Moca Network",
5
5
  "main": "dist/airkit.cjs.js",
6
6
  "module": "dist/airkit.esm.js",
@@ -33,7 +33,7 @@
33
33
  "@types/pump": "^1.1.3",
34
34
  "@types/readable-stream": "^4.0.15",
35
35
  "fs-extra": "^11.2.0",
36
- "glob": "^11.0.0",
36
+ "glob": "^11.1.0",
37
37
  "process": "^0.11.10",
38
38
  "typescript-eslint": "^8.21.0"
39
39
  },