@mocanetwork/airkit 1.7.0 → 1.8.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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.0";
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()}`;
@@ -2665,7 +2708,7 @@ class WindowService {
2665
2708
  }
2666
2709
  var WindowService$1 = WindowService.instance;
2667
2710
 
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;
2711
+ 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
2712
  const airKitVersion = airkitPackage.version;
2670
2713
  class AirService {
2671
2714
  constructor({ partnerId }) {
@@ -2692,6 +2735,7 @@ class AirService {
2692
2735
  _AirService_credentialsInitialization.set(this, void 0);
2693
2736
  _AirService_credentialMessagingService.set(this, void 0);
2694
2737
  _AirService_credentialIframeController.set(this, void 0);
2738
+ _AirService_credentialNetwork.set(this, void 0);
2695
2739
  __classPrivateFieldSet(this, _AirService_partnerId, partnerId, "f");
2696
2740
  __classPrivateFieldSet(this, _AirService_authMessagingService, AuthMessageService.create(), "f");
2697
2741
  __classPrivateFieldSet(this, _AirService_walletMessagingService, WalletMessageService.create(), "f");
@@ -2730,13 +2774,15 @@ class AirService {
2730
2774
  shouldEnableAutomation() {
2731
2775
  return localStorage.getItem("automation") === "true" && __classPrivateFieldGet(this, _AirService_buildEnv, "f") !== BUILD_ENV.PRODUCTION;
2732
2776
  }
2733
- async init({ buildEnv = BUILD_ENV.PRODUCTION, enableLogging = false, skipRehydration = false, sessionConfig = undefined, preloadWallet = false, preloadCredential = false, }) {
2777
+ async init(config) {
2778
+ const { buildEnv = BUILD_ENV.PRODUCTION, enableLogging = false, skipRehydration = false, sessionConfig = undefined, preloadWallet = false, preloadCredential = false, credentialNetwork = "testnet", } = config;
2734
2779
  if (!__classPrivateFieldGet(this, _AirService_partnerId, "f"))
2735
2780
  throw new AirServiceError("CLIENT_ERROR", "Partner ID is required to initialize the service");
2736
2781
  if (__classPrivateFieldGet(this, _AirService_isAuthInitialized, "f"))
2737
2782
  return __classPrivateFieldGet(this, _AirService_loginResult, "f") ?? null;
2783
+ __classPrivateFieldSet(this, _AirService_credentialNetwork, buildEnv === BUILD_ENV.SANDBOX ? credentialNetwork : undefined, "f");
2738
2784
  configureLogLevel(buildEnv, enableLogging);
2739
- const { authUrl, walletUrl, credentialUrl } = AIR_URLS[buildEnv];
2785
+ const { authUrl, walletUrl, credentialUrl } = getAirUrls(buildEnv, __classPrivateFieldGet(this, _AirService_credentialNetwork, "f"));
2740
2786
  addResourceHints(authUrl);
2741
2787
  if (preloadWallet) {
2742
2788
  addResourceHints(walletUrl);
@@ -3028,20 +3074,25 @@ class AirService {
3028
3074
  async preloadCredential() {
3029
3075
  await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_ensureCredential).call(this);
3030
3076
  }
3031
- async issueCredential({ authToken, issuerDid, credentialId, credentialSubject, }) {
3077
+ async issueCredential({ authToken, issuerDid, credentialId, credentialSubject, curve, }) {
3032
3078
  await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_ensureCredential).call(this);
3033
- const { payload } = await __classPrivateFieldGet(this, _AirService_credentialMessagingService, "f").sendIssueCredentialRequest({
3079
+ const response = await __classPrivateFieldGet(this, _AirService_credentialMessagingService, "f").sendIssueCredentialRequest({
3034
3080
  partnerToken: authToken,
3035
3081
  issuerDid,
3036
3082
  credentialId,
3037
3083
  credentialSubject,
3084
+ curve,
3038
3085
  });
3086
+ const { payload } = response;
3039
3087
  if (payload.closeDApp) {
3040
3088
  window.close();
3041
3089
  }
3042
3090
  if (payload.success === false) {
3043
3091
  throw new AirServiceError(payload.errorName, payload.errorMessage);
3044
3092
  }
3093
+ return {
3094
+ cakPublicKey: payload.cakPublicKey,
3095
+ };
3045
3096
  }
3046
3097
  async verifyCredential({ authToken, programId, redirectUrl, }) {
3047
3098
  await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_ensureCredential).call(this);
@@ -3056,7 +3107,7 @@ class AirService {
3056
3107
  return payload.verificationResult;
3057
3108
  }
3058
3109
  }
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() {
3110
+ _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
3111
  if (!__classPrivateFieldGet(this, _AirService_isAuthInitialized, "f"))
3061
3112
  throw new AirServiceError("NOT_INITIALIZED", "Service is not initialized");
3062
3113
  }, _AirService_assertLoggedIn = function _AirService_assertLoggedIn() {
@@ -3080,7 +3131,7 @@ _AirService_loginResult = new WeakMap(), _AirService_buildEnv = new WeakMap(), _
3080
3131
  if (__classPrivateFieldGet(this, _AirService_credentialsInitialization, "f")) {
3081
3132
  throw new AirServiceError("ALREADY_INITIALIZING", "Already initializing credentials");
3082
3133
  }
3083
- const { credentialUrl } = AIR_URLS[__classPrivateFieldGet(this, _AirService_buildEnv, "f")];
3134
+ const { credentialUrl } = getAirUrls(__classPrivateFieldGet(this, _AirService_buildEnv, "f"), __classPrivateFieldGet(this, _AirService_credentialNetwork, "f"));
3084
3135
  const credentialIframeOrigin = new URL(credentialUrl).origin;
3085
3136
  let closeDApp = false;
3086
3137
  try {
@@ -3098,6 +3149,7 @@ _AirService_loginResult = new WeakMap(), _AirService_buildEnv = new WeakMap(), _
3098
3149
  partnerDAppUrl: window.location.href,
3099
3150
  enableAutomation: this.shouldEnableAutomation(),
3100
3151
  sessionConfig: __classPrivateFieldGet(this, _AirService_sessionConfig, "f"),
3152
+ ...(__classPrivateFieldGet(this, _AirService_credentialNetwork, "f") && { credentialNetwork: __classPrivateFieldGet(this, _AirService_credentialNetwork, "f") }),
3101
3153
  });
3102
3154
  if (payload.success === true) {
3103
3155
  resolve();
@@ -3177,7 +3229,7 @@ _AirService_loginResult = new WeakMap(), _AirService_buildEnv = new WeakMap(), _
3177
3229
  }, _AirService_initializeWallet = async function _AirService_initializeWallet(option) {
3178
3230
  if (__classPrivateFieldGet(this, _AirService_walletInitialization, "f"))
3179
3231
  throw new AirServiceError("ALREADY_INITIALIZING", "Already initializing");
3180
- const { walletUrl } = AIR_URLS[__classPrivateFieldGet(this, _AirService_buildEnv, "f")];
3232
+ const { walletUrl } = getAirUrls(__classPrivateFieldGet(this, _AirService_buildEnv, "f"), __classPrivateFieldGet(this, _AirService_credentialNetwork, "f"));
3181
3233
  const walletIframeOrigin = new URL(walletUrl).origin;
3182
3234
  try {
3183
3235
  const walletInitRequestPromise = new Promise((resolve, reject) => {
@@ -3354,7 +3406,7 @@ _AirService_loginResult = new WeakMap(), _AirService_buildEnv = new WeakMap(), _
3354
3406
  }, _AirService_initializeRecovery = async function _AirService_initializeRecovery() {
3355
3407
  if (__classPrivateFieldGet(this, _AirService_recoveryInitialization, "f"))
3356
3408
  throw new AirServiceError("ALREADY_INITIALIZING", "Already initializing");
3357
- const { recoveryUrl } = AIR_URLS[__classPrivateFieldGet(this, _AirService_buildEnv, "f")];
3409
+ const { recoveryUrl } = getAirUrls(__classPrivateFieldGet(this, _AirService_buildEnv, "f"), __classPrivateFieldGet(this, _AirService_credentialNetwork, "f"));
3358
3410
  const recoveryIframeOrigin = new URL(recoveryUrl).origin;
3359
3411
  try {
3360
3412
  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.0";
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()}`;
@@ -2663,7 +2706,7 @@ class WindowService {
2663
2706
  }
2664
2707
  var WindowService$1 = WindowService.instance;
2665
2708
 
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;
2709
+ 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
2710
  const airKitVersion = airkitPackage.version;
2668
2711
  class AirService {
2669
2712
  constructor({ partnerId }) {
@@ -2690,6 +2733,7 @@ class AirService {
2690
2733
  _AirService_credentialsInitialization.set(this, void 0);
2691
2734
  _AirService_credentialMessagingService.set(this, void 0);
2692
2735
  _AirService_credentialIframeController.set(this, void 0);
2736
+ _AirService_credentialNetwork.set(this, void 0);
2693
2737
  __classPrivateFieldSet(this, _AirService_partnerId, partnerId, "f");
2694
2738
  __classPrivateFieldSet(this, _AirService_authMessagingService, AuthMessageService.create(), "f");
2695
2739
  __classPrivateFieldSet(this, _AirService_walletMessagingService, WalletMessageService.create(), "f");
@@ -2728,13 +2772,15 @@ class AirService {
2728
2772
  shouldEnableAutomation() {
2729
2773
  return localStorage.getItem("automation") === "true" && __classPrivateFieldGet(this, _AirService_buildEnv, "f") !== BUILD_ENV.PRODUCTION;
2730
2774
  }
2731
- async init({ buildEnv = BUILD_ENV.PRODUCTION, enableLogging = false, skipRehydration = false, sessionConfig = undefined, preloadWallet = false, preloadCredential = false, }) {
2775
+ async init(config) {
2776
+ const { buildEnv = BUILD_ENV.PRODUCTION, enableLogging = false, skipRehydration = false, sessionConfig = undefined, preloadWallet = false, preloadCredential = false, credentialNetwork = "testnet", } = config;
2732
2777
  if (!__classPrivateFieldGet(this, _AirService_partnerId, "f"))
2733
2778
  throw new AirServiceError("CLIENT_ERROR", "Partner ID is required to initialize the service");
2734
2779
  if (__classPrivateFieldGet(this, _AirService_isAuthInitialized, "f"))
2735
2780
  return __classPrivateFieldGet(this, _AirService_loginResult, "f") ?? null;
2781
+ __classPrivateFieldSet(this, _AirService_credentialNetwork, buildEnv === BUILD_ENV.SANDBOX ? credentialNetwork : undefined, "f");
2736
2782
  configureLogLevel(buildEnv, enableLogging);
2737
- const { authUrl, walletUrl, credentialUrl } = AIR_URLS[buildEnv];
2783
+ const { authUrl, walletUrl, credentialUrl } = getAirUrls(buildEnv, __classPrivateFieldGet(this, _AirService_credentialNetwork, "f"));
2738
2784
  addResourceHints(authUrl);
2739
2785
  if (preloadWallet) {
2740
2786
  addResourceHints(walletUrl);
@@ -3026,20 +3072,25 @@ class AirService {
3026
3072
  async preloadCredential() {
3027
3073
  await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_ensureCredential).call(this);
3028
3074
  }
3029
- async issueCredential({ authToken, issuerDid, credentialId, credentialSubject, }) {
3075
+ async issueCredential({ authToken, issuerDid, credentialId, credentialSubject, curve, }) {
3030
3076
  await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_ensureCredential).call(this);
3031
- const { payload } = await __classPrivateFieldGet(this, _AirService_credentialMessagingService, "f").sendIssueCredentialRequest({
3077
+ const response = await __classPrivateFieldGet(this, _AirService_credentialMessagingService, "f").sendIssueCredentialRequest({
3032
3078
  partnerToken: authToken,
3033
3079
  issuerDid,
3034
3080
  credentialId,
3035
3081
  credentialSubject,
3082
+ curve,
3036
3083
  });
3084
+ const { payload } = response;
3037
3085
  if (payload.closeDApp) {
3038
3086
  window.close();
3039
3087
  }
3040
3088
  if (payload.success === false) {
3041
3089
  throw new AirServiceError(payload.errorName, payload.errorMessage);
3042
3090
  }
3091
+ return {
3092
+ cakPublicKey: payload.cakPublicKey,
3093
+ };
3043
3094
  }
3044
3095
  async verifyCredential({ authToken, programId, redirectUrl, }) {
3045
3096
  await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_ensureCredential).call(this);
@@ -3054,7 +3105,7 @@ class AirService {
3054
3105
  return payload.verificationResult;
3055
3106
  }
3056
3107
  }
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() {
3108
+ _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
3109
  if (!__classPrivateFieldGet(this, _AirService_isAuthInitialized, "f"))
3059
3110
  throw new AirServiceError("NOT_INITIALIZED", "Service is not initialized");
3060
3111
  }, _AirService_assertLoggedIn = function _AirService_assertLoggedIn() {
@@ -3078,7 +3129,7 @@ _AirService_loginResult = new WeakMap(), _AirService_buildEnv = new WeakMap(), _
3078
3129
  if (__classPrivateFieldGet(this, _AirService_credentialsInitialization, "f")) {
3079
3130
  throw new AirServiceError("ALREADY_INITIALIZING", "Already initializing credentials");
3080
3131
  }
3081
- const { credentialUrl } = AIR_URLS[__classPrivateFieldGet(this, _AirService_buildEnv, "f")];
3132
+ const { credentialUrl } = getAirUrls(__classPrivateFieldGet(this, _AirService_buildEnv, "f"), __classPrivateFieldGet(this, _AirService_credentialNetwork, "f"));
3082
3133
  const credentialIframeOrigin = new URL(credentialUrl).origin;
3083
3134
  let closeDApp = false;
3084
3135
  try {
@@ -3096,6 +3147,7 @@ _AirService_loginResult = new WeakMap(), _AirService_buildEnv = new WeakMap(), _
3096
3147
  partnerDAppUrl: window.location.href,
3097
3148
  enableAutomation: this.shouldEnableAutomation(),
3098
3149
  sessionConfig: __classPrivateFieldGet(this, _AirService_sessionConfig, "f"),
3150
+ ...(__classPrivateFieldGet(this, _AirService_credentialNetwork, "f") && { credentialNetwork: __classPrivateFieldGet(this, _AirService_credentialNetwork, "f") }),
3099
3151
  });
3100
3152
  if (payload.success === true) {
3101
3153
  resolve();
@@ -3175,7 +3227,7 @@ _AirService_loginResult = new WeakMap(), _AirService_buildEnv = new WeakMap(), _
3175
3227
  }, _AirService_initializeWallet = async function _AirService_initializeWallet(option) {
3176
3228
  if (__classPrivateFieldGet(this, _AirService_walletInitialization, "f"))
3177
3229
  throw new AirServiceError("ALREADY_INITIALIZING", "Already initializing");
3178
- const { walletUrl } = AIR_URLS[__classPrivateFieldGet(this, _AirService_buildEnv, "f")];
3230
+ const { walletUrl } = getAirUrls(__classPrivateFieldGet(this, _AirService_buildEnv, "f"), __classPrivateFieldGet(this, _AirService_credentialNetwork, "f"));
3179
3231
  const walletIframeOrigin = new URL(walletUrl).origin;
3180
3232
  try {
3181
3233
  const walletInitRequestPromise = new Promise((resolve, reject) => {
@@ -3352,7 +3404,7 @@ _AirService_loginResult = new WeakMap(), _AirService_buildEnv = new WeakMap(), _
3352
3404
  }, _AirService_initializeRecovery = async function _AirService_initializeRecovery() {
3353
3405
  if (__classPrivateFieldGet(this, _AirService_recoveryInitialization, "f"))
3354
3406
  throw new AirServiceError("ALREADY_INITIALIZING", "Already initializing");
3355
- const { recoveryUrl } = AIR_URLS[__classPrivateFieldGet(this, _AirService_buildEnv, "f")];
3407
+ const { recoveryUrl } = getAirUrls(__classPrivateFieldGet(this, _AirService_buildEnv, "f"), __classPrivateFieldGet(this, _AirService_credentialNetwork, "f"));
3356
3408
  const recoveryIframeOrigin = new URL(recoveryUrl).origin;
3357
3409
  try {
3358
3410
  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.0";
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()}`;
@@ -2669,7 +2712,7 @@
2669
2712
  }
2670
2713
  var WindowService$1 = WindowService.instance;
2671
2714
 
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;
2715
+ 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
2716
  const airKitVersion = airkitPackage.version;
2674
2717
  class AirService {
2675
2718
  constructor({ partnerId }) {
@@ -2696,6 +2739,7 @@
2696
2739
  _AirService_credentialsInitialization.set(this, void 0);
2697
2740
  _AirService_credentialMessagingService.set(this, void 0);
2698
2741
  _AirService_credentialIframeController.set(this, void 0);
2742
+ _AirService_credentialNetwork.set(this, void 0);
2699
2743
  __classPrivateFieldSet(this, _AirService_partnerId, partnerId, "f");
2700
2744
  __classPrivateFieldSet(this, _AirService_authMessagingService, AuthMessageService.create(), "f");
2701
2745
  __classPrivateFieldSet(this, _AirService_walletMessagingService, WalletMessageService.create(), "f");
@@ -2734,13 +2778,15 @@
2734
2778
  shouldEnableAutomation() {
2735
2779
  return localStorage.getItem("automation") === "true" && __classPrivateFieldGet(this, _AirService_buildEnv, "f") !== BUILD_ENV.PRODUCTION;
2736
2780
  }
2737
- async init({ buildEnv = BUILD_ENV.PRODUCTION, enableLogging = false, skipRehydration = false, sessionConfig = undefined, preloadWallet = false, preloadCredential = false, }) {
2781
+ async init(config) {
2782
+ const { buildEnv = BUILD_ENV.PRODUCTION, enableLogging = false, skipRehydration = false, sessionConfig = undefined, preloadWallet = false, preloadCredential = false, credentialNetwork = "testnet", } = config;
2738
2783
  if (!__classPrivateFieldGet(this, _AirService_partnerId, "f"))
2739
2784
  throw new AirServiceError("CLIENT_ERROR", "Partner ID is required to initialize the service");
2740
2785
  if (__classPrivateFieldGet(this, _AirService_isAuthInitialized, "f"))
2741
2786
  return __classPrivateFieldGet(this, _AirService_loginResult, "f") ?? null;
2787
+ __classPrivateFieldSet(this, _AirService_credentialNetwork, buildEnv === BUILD_ENV.SANDBOX ? credentialNetwork : undefined, "f");
2742
2788
  configureLogLevel(buildEnv, enableLogging);
2743
- const { authUrl, walletUrl, credentialUrl } = AIR_URLS[buildEnv];
2789
+ const { authUrl, walletUrl, credentialUrl } = getAirUrls(buildEnv, __classPrivateFieldGet(this, _AirService_credentialNetwork, "f"));
2744
2790
  addResourceHints(authUrl);
2745
2791
  if (preloadWallet) {
2746
2792
  addResourceHints(walletUrl);
@@ -3032,20 +3078,25 @@
3032
3078
  async preloadCredential() {
3033
3079
  await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_ensureCredential).call(this);
3034
3080
  }
3035
- async issueCredential({ authToken, issuerDid, credentialId, credentialSubject, }) {
3081
+ async issueCredential({ authToken, issuerDid, credentialId, credentialSubject, curve, }) {
3036
3082
  await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_ensureCredential).call(this);
3037
- const { payload } = await __classPrivateFieldGet(this, _AirService_credentialMessagingService, "f").sendIssueCredentialRequest({
3083
+ const response = await __classPrivateFieldGet(this, _AirService_credentialMessagingService, "f").sendIssueCredentialRequest({
3038
3084
  partnerToken: authToken,
3039
3085
  issuerDid,
3040
3086
  credentialId,
3041
3087
  credentialSubject,
3088
+ curve,
3042
3089
  });
3090
+ const { payload } = response;
3043
3091
  if (payload.closeDApp) {
3044
3092
  window.close();
3045
3093
  }
3046
3094
  if (payload.success === false) {
3047
3095
  throw new AirServiceError(payload.errorName, payload.errorMessage);
3048
3096
  }
3097
+ return {
3098
+ cakPublicKey: payload.cakPublicKey,
3099
+ };
3049
3100
  }
3050
3101
  async verifyCredential({ authToken, programId, redirectUrl, }) {
3051
3102
  await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_ensureCredential).call(this);
@@ -3060,7 +3111,7 @@
3060
3111
  return payload.verificationResult;
3061
3112
  }
3062
3113
  }
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() {
3114
+ _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
3115
  if (!__classPrivateFieldGet(this, _AirService_isAuthInitialized, "f"))
3065
3116
  throw new AirServiceError("NOT_INITIALIZED", "Service is not initialized");
3066
3117
  }, _AirService_assertLoggedIn = function _AirService_assertLoggedIn() {
@@ -3084,7 +3135,7 @@
3084
3135
  if (__classPrivateFieldGet(this, _AirService_credentialsInitialization, "f")) {
3085
3136
  throw new AirServiceError("ALREADY_INITIALIZING", "Already initializing credentials");
3086
3137
  }
3087
- const { credentialUrl } = AIR_URLS[__classPrivateFieldGet(this, _AirService_buildEnv, "f")];
3138
+ const { credentialUrl } = getAirUrls(__classPrivateFieldGet(this, _AirService_buildEnv, "f"), __classPrivateFieldGet(this, _AirService_credentialNetwork, "f"));
3088
3139
  const credentialIframeOrigin = new URL(credentialUrl).origin;
3089
3140
  let closeDApp = false;
3090
3141
  try {
@@ -3102,6 +3153,7 @@
3102
3153
  partnerDAppUrl: window.location.href,
3103
3154
  enableAutomation: this.shouldEnableAutomation(),
3104
3155
  sessionConfig: __classPrivateFieldGet(this, _AirService_sessionConfig, "f"),
3156
+ ...(__classPrivateFieldGet(this, _AirService_credentialNetwork, "f") && { credentialNetwork: __classPrivateFieldGet(this, _AirService_credentialNetwork, "f") }),
3105
3157
  });
3106
3158
  if (payload.success === true) {
3107
3159
  resolve();
@@ -3181,7 +3233,7 @@
3181
3233
  }, _AirService_initializeWallet = async function _AirService_initializeWallet(option) {
3182
3234
  if (__classPrivateFieldGet(this, _AirService_walletInitialization, "f"))
3183
3235
  throw new AirServiceError("ALREADY_INITIALIZING", "Already initializing");
3184
- const { walletUrl } = AIR_URLS[__classPrivateFieldGet(this, _AirService_buildEnv, "f")];
3236
+ const { walletUrl } = getAirUrls(__classPrivateFieldGet(this, _AirService_buildEnv, "f"), __classPrivateFieldGet(this, _AirService_credentialNetwork, "f"));
3185
3237
  const walletIframeOrigin = new URL(walletUrl).origin;
3186
3238
  try {
3187
3239
  const walletInitRequestPromise = new Promise((resolve, reject) => {
@@ -3358,7 +3410,7 @@
3358
3410
  }, _AirService_initializeRecovery = async function _AirService_initializeRecovery() {
3359
3411
  if (__classPrivateFieldGet(this, _AirService_recoveryInitialization, "f"))
3360
3412
  throw new AirServiceError("ALREADY_INITIALIZING", "Already initializing");
3361
- const { recoveryUrl } = AIR_URLS[__classPrivateFieldGet(this, _AirService_buildEnv, "f")];
3413
+ const { recoveryUrl } = getAirUrls(__classPrivateFieldGet(this, _AirService_buildEnv, "f"), __classPrivateFieldGet(this, _AirService_credentialNetwork, "f"));
3362
3414
  const recoveryIframeOrigin = new URL(recoveryUrl).origin;
3363
3415
  try {
3364
3416
  const recoveryInitRequestPromise = new Promise((resolve, reject) => {
@@ -1,5 +1,5 @@
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 } from "./interfaces";
3
3
  declare class AirService {
4
4
  #private;
5
5
  constructor({ partnerId }: {
@@ -12,10 +12,15 @@ declare class AirService {
12
12
  get isWalletInitialized(): boolean;
13
13
  get provider(): EIP1193Provider;
14
14
  private shouldEnableAutomation;
15
- init({ buildEnv, enableLogging, skipRehydration, sessionConfig, preloadWallet, preloadCredential, }: {
16
- buildEnv: BUILD_ENV_TYPE;
17
- enableLogging: boolean;
18
- skipRehydration: boolean;
15
+ init(config: ({
16
+ buildEnv?: Exclude<BUILD_ENV_TYPE, typeof BUILD_ENV.SANDBOX>;
17
+ credentialNetwork?: never;
18
+ } | {
19
+ buildEnv?: typeof BUILD_ENV.SANDBOX;
20
+ credentialNetwork?: CredentialNetwork;
21
+ }) & {
22
+ enableLogging?: boolean;
23
+ skipRehydration?: boolean;
19
24
  preloadWallet?: boolean;
20
25
  preloadCredential?: boolean;
21
26
  sessionConfig?: Partial<AirSessionConfig>;
@@ -71,12 +76,15 @@ declare class AirService {
71
76
  on(listener: AirEventListener): void;
72
77
  off(listener: AirEventListener): void;
73
78
  preloadCredential(): Promise<void>;
74
- issueCredential({ authToken, issuerDid, credentialId, credentialSubject, }: {
79
+ issueCredential({ authToken, issuerDid, credentialId, credentialSubject, curve, }: {
75
80
  authToken: string;
76
81
  issuerDid: string;
77
82
  credentialId: string;
78
83
  credentialSubject: Record<string, unknown>;
79
- }): Promise<void>;
84
+ curve?: "secp256r1" | "secp256k1";
85
+ }): Promise<{
86
+ cakPublicKey?: string;
87
+ }>;
80
88
  verifyCredential({ authToken, programId, redirectUrl, }: {
81
89
  authToken: string;
82
90
  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>;
@@ -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,5 @@ export declare const mocaTestnet: {
51
52
  readonly blockCreated: 1330259;
52
53
  };
53
54
  };
55
+ readonly testnet: true;
54
56
  };
@@ -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 = {
@@ -35,6 +35,7 @@ export type AirUserDetails = {
35
35
  export type AirSessionConfig = {
36
36
  locale: string;
37
37
  };
38
+ export type CredentialNetwork = "devnet" | "testnet";
38
39
  export type AirLoginResult = {
39
40
  isLoggedIn: boolean;
40
41
  id: string;
@@ -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;
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.0",
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
  },