@tuwaio/orbit-core 0.2.4 → 0.2.6

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.
package/README.md CHANGED
@@ -35,14 +35,8 @@ Its primary goal is to establish a **unified interface** for interacting with di
35
35
  ## 💾 Installation
36
36
 
37
37
  ```bash
38
- # Using pnpm (recommended)
38
+ # Using pnpm (recommended), but you can use npm, yarn or bun as well
39
39
  pnpm add @tuwaio/orbit-core
40
-
41
- # Using npm
42
- npm install @tuwaio/orbit-core
43
-
44
- # Using yarn
45
- yarn add @tuwaio/orbit-core
46
40
  ````
47
41
 
48
42
  *Note: `@tuwaio/orbit-core` provides the core logic. You will typically install chain-specific packages like `@tuwaio/orbit-evm` or `@tuwaio/orbit-solana` alongside it.*
package/dist/index.d.mts CHANGED
@@ -304,6 +304,22 @@ declare const impersonatedHelpers: {
304
304
  removeImpersonated: () => void;
305
305
  };
306
306
 
307
+ /**
308
+ * Checks if the current window is running inside a Safe App iframe
309
+ * by attempting postMessage communication with the parent window.
310
+ *
311
+ * @returns Promise that resolves to true if running inside Safe Wallet, false otherwise
312
+ */
313
+ declare function detectSafeApp(timeout?: number): Promise<boolean>;
314
+ /**
315
+ * Synchronous check - less reliable but instant
316
+ * Only checks if we're in an HTTPS iframe
317
+ */
318
+ declare const isInSecureIframe: boolean;
319
+ /**
320
+ * @deprecated Use detectSafeApp() for accurate detection
321
+ * This synchronous constant only checks if we're in an iframe
322
+ */
307
323
  declare const isSafeApp: boolean;
308
324
 
309
325
  type LastConnectedConnector = {
@@ -647,4 +663,4 @@ declare function isSolanaChain(chainId: number | string): boolean;
647
663
  */
648
664
  declare function setChainId(chainId: number | string): string | number;
649
665
 
650
- export { type BaseAdapter, type ChainIdentifierArray, type ConnectorType, OrbitAdapter, type OrbitGenericAdapter, type RecentlyConnectedConnectorData, type RecentlyConnectedConnectorsList, delay, filterUniqueByKey, formatConnectorChainId, formatConnectorName, getAdapterFromConnectorType, getConnectorTypeFromName, getNetworkData, getParsedStorageItem, impersonatedHelpers, isAddress, isSafeApp, isSolanaChain, lastConnectedConnectorHelpers, recentlyConnectedConnectorsListHelpers, selectAdapterByKey, setChainId, waitFor };
666
+ export { type BaseAdapter, type ChainIdentifierArray, type ConnectorType, OrbitAdapter, type OrbitGenericAdapter, type RecentlyConnectedConnectorData, type RecentlyConnectedConnectorsList, delay, detectSafeApp, filterUniqueByKey, formatConnectorChainId, formatConnectorName, getAdapterFromConnectorType, getConnectorTypeFromName, getNetworkData, getParsedStorageItem, impersonatedHelpers, isAddress, isInSecureIframe, isSafeApp, isSolanaChain, lastConnectedConnectorHelpers, recentlyConnectedConnectorsListHelpers, selectAdapterByKey, setChainId, waitFor };
package/dist/index.d.ts CHANGED
@@ -304,6 +304,22 @@ declare const impersonatedHelpers: {
304
304
  removeImpersonated: () => void;
305
305
  };
306
306
 
307
+ /**
308
+ * Checks if the current window is running inside a Safe App iframe
309
+ * by attempting postMessage communication with the parent window.
310
+ *
311
+ * @returns Promise that resolves to true if running inside Safe Wallet, false otherwise
312
+ */
313
+ declare function detectSafeApp(timeout?: number): Promise<boolean>;
314
+ /**
315
+ * Synchronous check - less reliable but instant
316
+ * Only checks if we're in an HTTPS iframe
317
+ */
318
+ declare const isInSecureIframe: boolean;
319
+ /**
320
+ * @deprecated Use detectSafeApp() for accurate detection
321
+ * This synchronous constant only checks if we're in an iframe
322
+ */
307
323
  declare const isSafeApp: boolean;
308
324
 
309
325
  type LastConnectedConnector = {
@@ -647,4 +663,4 @@ declare function isSolanaChain(chainId: number | string): boolean;
647
663
  */
648
664
  declare function setChainId(chainId: number | string): string | number;
649
665
 
650
- export { type BaseAdapter, type ChainIdentifierArray, type ConnectorType, OrbitAdapter, type OrbitGenericAdapter, type RecentlyConnectedConnectorData, type RecentlyConnectedConnectorsList, delay, filterUniqueByKey, formatConnectorChainId, formatConnectorName, getAdapterFromConnectorType, getConnectorTypeFromName, getNetworkData, getParsedStorageItem, impersonatedHelpers, isAddress, isSafeApp, isSolanaChain, lastConnectedConnectorHelpers, recentlyConnectedConnectorsListHelpers, selectAdapterByKey, setChainId, waitFor };
666
+ export { type BaseAdapter, type ChainIdentifierArray, type ConnectorType, OrbitAdapter, type OrbitGenericAdapter, type RecentlyConnectedConnectorData, type RecentlyConnectedConnectorsList, delay, detectSafeApp, filterUniqueByKey, formatConnectorChainId, formatConnectorName, getAdapterFromConnectorType, getConnectorTypeFromName, getNetworkData, getParsedStorageItem, impersonatedHelpers, isAddress, isInSecureIframe, isSafeApp, isSolanaChain, lastConnectedConnectorHelpers, recentlyConnectedConnectorsListHelpers, selectAdapterByKey, setChainId, waitFor };
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- 'use strict';var d=(r=>(r.EVM="evm",r.SOLANA="solana",r.Starknet="starknet",r))(d||{});function a(e){return /^0x[a-fA-F0-9]{40}$/.test(e.trim())}function l(e){return /^[1-9A-HJ-NP-Za-km-z]{32,44}$/.test(e.trim())}function m(e,t="auto"){if(!e)return false;let n=e.trim();switch(t){case "evm":return a(n);case "solana":return l(n);case "auto":default:return a(n)||l(n)}}var y=(e,t)=>new Promise(n=>{let r=()=>{setTimeout(()=>n(e),t);};typeof window<"u"?r():setTimeout(r,0);});function w(e,t){let n=new Set;return e.filter(r=>{let s=r[t];return n.has(s)?false:(n.add(s),true)})}function b(e,t){return typeof e=="string"?`${t}:${e}`:e}var u=new Map([["Impersonated Connector","impersonatedwallet"],["Safe","safe"],["Trust","trust"],["Trust Wallet","trust"],["Brave \u041A\u043E\u0448\u0435\u043B\u0435\u043A","brave"],["Brave Wallet","brave"],["Base Account","coinbase"]]),x=e=>u.get(e)??e.replace(/\s+/g,"").toLowerCase();function R(e){return e?.split(":")[0]??"evm"}function h(e,t){return `${e}:${t.replace(/\s+/g,"").toLowerCase()}`}var N=e=>{switch(e){case "evm":return {chain:{chainId:1,name:"Ethereum"},links:{aboutNetwork:"https://ethereum.org/developers/docs/intro-to-ethereum/",choseWallet:"https://ethereum.org/wallets/find-wallet/",about:"https://ethereum.org/wallets/"}};case "solana":return {chain:{chainId:"solana:mainnet",name:"Solana"},links:{aboutNetwork:"https://solana.com/en/learn/what-is-solana",choseWallet:"https://solana.com/en/solana-wallets",about:"https://solana.com/en/learn/what-is-a-wallet"}}}};function i(e){if(typeof window>"u")return;let t=window.localStorage.getItem(e);if(t)try{return JSON.parse(t)}catch(n){console.error(`Error parsing ${e} from localStorage:`,n);return}}var K={impersonatedAddress:typeof window<"u"?window.localStorage.getItem("satellite-connect:impersonatedAddress")??"":"",setImpersonated:e=>typeof window<"u"?window.localStorage.setItem("satellite-connect:impersonatedAddress",e):void 0,getImpersonated:()=>typeof window<"u"?window.localStorage.getItem("satellite-connect:impersonatedAddress"):void 0,removeImpersonated:()=>typeof window<"u"?window.localStorage.removeItem("satellite-connect:impersonatedAddress"):void 0};var _=typeof window<"u"&&window!==window.parent;var c={STORAGE_KEY:"orbit-core:lastConnectedConnector",lastConnectedConnector:i("orbit-core:lastConnectedConnector"),setLastConnectedConnector:({connectorType:e,chainId:t,address:n})=>typeof window<"u"?window.localStorage.setItem(c.STORAGE_KEY,JSON.stringify({connectorType:e,chainId:t,address:n})):void 0,getLastConnectedConnector:()=>i(c.STORAGE_KEY),removeLastConnectedConnector:()=>typeof window<"u"?window.localStorage.removeItem(c.STORAGE_KEY):void 0};var o={STORAGE_KEY:"orbit-core:recentlyConnectedConnectorsListHelpers",recentlyConnectedConnectorsList:i("orbit-core:recentlyConnectedConnectorsListHelpers"),setRecentlyConnectedConnectorsList:e=>typeof window<"u"?window.localStorage.setItem(o.STORAGE_KEY,JSON.stringify(e)):void 0,getRecentlyConnectedConnectorsList:()=>i(o.STORAGE_KEY),addConnector:(e,t)=>{if(typeof window>"u")return;let r={...o.getRecentlyConnectedConnectorsList()||{},[e]:t};window.localStorage.setItem(o.STORAGE_KEY,JSON.stringify(r));},removeConnector:e=>{if(typeof window>"u")return;let t=o.getRecentlyConnectedConnectorsList();if(!t||!(e in t))return;let{[e]:n,...r}=t;window.localStorage.setItem(o.STORAGE_KEY,JSON.stringify(r));},hasConnector:e=>{if(typeof window>"u")return;let t=o.getRecentlyConnectedConnectorsList();return t?e in t:false},getConnector:e=>typeof window>"u"?void 0:o.getRecentlyConnectedConnectorsList()?.[e],getConnectorCount:()=>{if(typeof window>"u")return 0;let e=o.getRecentlyConnectedConnectorsList();return e?Object.keys(e).length:0},getConnectorsSortedByTime:()=>{if(typeof window>"u")return [];let e=o.getRecentlyConnectedConnectorsList();return e?Object.entries(e).sort(([,t],[,n])=>n.disconnectedTimestamp-t.disconnectedTimestamp):[]},removeConnectorsOlderThan:e=>{if(typeof window>"u")return;let t=o.getRecentlyConnectedConnectorsList();if(!t)return;let n=Object.fromEntries(Object.entries(t).filter(([,r])=>r.disconnectedTimestamp>=e));window.localStorage.setItem(o.STORAGE_KEY,JSON.stringify(n));},removeRecentlyConnectedConnectorsList:()=>typeof window<"u"?window.localStorage.removeItem(o.STORAGE_KEY):void 0};var V=({adapterKey:e,adapter:t})=>{if(Array.isArray(t)){if(t.length===0){console.error("Adapter selection failed: The provided adapters array is empty.");return}let n=t.find(r=>r.key===e);return n||(console.warn(`No adapter found for key: "${e}". Falling back to the first available adapter: "${t[0].key}".`),t[0])}return t};async function M(e,t=50,n=200){for(let r=0;r<t;r++){if(e())return;await new Promise(s=>setTimeout(s,n));}throw new Error("Predicate not fulfilled in time")}function f(e){return typeof e=="string"?["devnet","testnet","mainnet-beta","mainnet"].includes(e):false}function j(e){return f(e)?`solana:${e}`:e}
2
- exports.OrbitAdapter=d;exports.delay=y;exports.filterUniqueByKey=w;exports.formatConnectorChainId=b;exports.formatConnectorName=x;exports.getAdapterFromConnectorType=R;exports.getConnectorTypeFromName=h;exports.getNetworkData=N;exports.getParsedStorageItem=i;exports.impersonatedHelpers=K;exports.isAddress=m;exports.isSafeApp=_;exports.isSolanaChain=f;exports.lastConnectedConnectorHelpers=c;exports.recentlyConnectedConnectorsListHelpers=o;exports.selectAdapterByKey=V;exports.setChainId=j;exports.waitFor=M;
1
+ 'use strict';var d=(o=>(o.EVM="evm",o.SOLANA="solana",o.Starknet="starknet",o))(d||{});function f(e){return /^0x[a-fA-F0-9]{40}$/.test(e.trim())}function u(e){return /^[1-9A-HJ-NP-Za-km-z]{32,44}$/.test(e.trim())}function C(e,t="auto"){if(!e)return false;let n=e.trim();switch(t){case "evm":return f(n);case "solana":return u(n);default:return f(n)||u(n)}}var g=(e,t)=>new Promise(n=>{let o=()=>{setTimeout(()=>n(e),t);};typeof window<"u"?o():setTimeout(o,0);});function b(e,t){let n=new Set;return e.filter(o=>{let s=o[t];return n.has(s)?false:(n.add(s),true)})}function x(e,t){return typeof e=="string"?`${t}:${e}`:e}var l=new Map([["Impersonated Connector","impersonatedwallet"],["Safe","safe"],["Trust","trust"],["Trust Wallet","trust"],["Brave \u041A\u043E\u0448\u0435\u043B\u0435\u043A","brave"],["Brave Wallet","brave"],["Base Account","coinbase"]]),L=e=>l.get(e)??e.replace(/\s+/g,"").toLowerCase();function E(e){return e?.split(":")[0]??"evm"}function v(e,t){return `${e}:${t.replace(/\s+/g,"").toLowerCase()}`}var G=e=>{switch(e){case "evm":return {chain:{chainId:1,name:"Ethereum"},links:{aboutNetwork:"https://ethereum.org/developers/docs/intro-to-ethereum/",choseWallet:"https://ethereum.org/wallets/find-wallet/",about:"https://ethereum.org/wallets/"}};case "solana":return {chain:{chainId:"solana:mainnet",name:"Solana"},links:{aboutNetwork:"https://solana.com/en/learn/what-is-solana",choseWallet:"https://solana.com/en/solana-wallets",about:"https://solana.com/en/learn/what-is-a-wallet"}}}};function a(e){if(typeof window>"u")return;let t=window.localStorage.getItem(e);if(t)try{return JSON.parse(t)}catch(n){console.error(`Error parsing ${e} from localStorage:`,n);return}}var _={impersonatedAddress:typeof window<"u"?window.localStorage.getItem("satellite-connect:impersonatedAddress")??"":"",setImpersonated:e=>typeof window<"u"?window.localStorage.setItem("satellite-connect:impersonatedAddress",e):void 0,getImpersonated:()=>typeof window<"u"?window.localStorage.getItem("satellite-connect:impersonatedAddress"):void 0,removeImpersonated:()=>typeof window<"u"?window.localStorage.removeItem("satellite-connect:impersonatedAddress"):void 0};async function M(e=1e3){return typeof window>"u"||window===window.parent||window.location.protocol!=="https:"?false:new Promise(t=>{let n=setTimeout(()=>{window.removeEventListener("message",o),t(false);},e);function o(i){i.data&&typeof i.data=="object"&&("safeAddress"in i.data||i.data.data&&"safeAddress"in i.data.data||i.data.method==="getInfo")&&(clearTimeout(n),window.removeEventListener("message",o),t(true));}window.addEventListener("message",o);let s=Math.trunc(Math.random()*1e6);window.parent.postMessage({id:s,method:"getSafeInfo",env:{sdkVersion:"1.0.0"}},"*");})}var p=typeof window<"u"&&window!==window.parent&&window.location.protocol==="https:",Y=p;var c={STORAGE_KEY:"orbit-core:lastConnectedConnector",lastConnectedConnector:a("orbit-core:lastConnectedConnector"),setLastConnectedConnector:({connectorType:e,chainId:t,address:n})=>typeof window<"u"?window.localStorage.setItem(c.STORAGE_KEY,JSON.stringify({connectorType:e,chainId:t,address:n})):void 0,getLastConnectedConnector:()=>a(c.STORAGE_KEY),removeLastConnectedConnector:()=>typeof window<"u"?window.localStorage.removeItem(c.STORAGE_KEY):void 0};var r={STORAGE_KEY:"orbit-core:recentlyConnectedConnectorsListHelpers",recentlyConnectedConnectorsList:a("orbit-core:recentlyConnectedConnectorsListHelpers"),setRecentlyConnectedConnectorsList:e=>typeof window<"u"?window.localStorage.setItem(r.STORAGE_KEY,JSON.stringify(e)):void 0,getRecentlyConnectedConnectorsList:()=>a(r.STORAGE_KEY),addConnector:(e,t)=>{if(typeof window>"u")return;let o={...r.getRecentlyConnectedConnectorsList()||{},[e]:t};window.localStorage.setItem(r.STORAGE_KEY,JSON.stringify(o));},removeConnector:e=>{if(typeof window>"u")return;let t=r.getRecentlyConnectedConnectorsList();if(!t||!(e in t))return;let{[e]:n,...o}=t;window.localStorage.setItem(r.STORAGE_KEY,JSON.stringify(o));},hasConnector:e=>{if(typeof window>"u")return;let t=r.getRecentlyConnectedConnectorsList();return t?e in t:false},getConnector:e=>typeof window>"u"?void 0:r.getRecentlyConnectedConnectorsList()?.[e],getConnectorCount:()=>{if(typeof window>"u")return 0;let e=r.getRecentlyConnectedConnectorsList();return e?Object.keys(e).length:0},getConnectorsSortedByTime:()=>{if(typeof window>"u")return [];let e=r.getRecentlyConnectedConnectorsList();return e?Object.entries(e).sort(([,t],[,n])=>n.disconnectedTimestamp-t.disconnectedTimestamp):[]},removeConnectorsOlderThan:e=>{if(typeof window>"u")return;let t=r.getRecentlyConnectedConnectorsList();if(!t)return;let n=Object.fromEntries(Object.entries(t).filter(([,o])=>o.disconnectedTimestamp>=e));window.localStorage.setItem(r.STORAGE_KEY,JSON.stringify(n));},removeRecentlyConnectedConnectorsList:()=>typeof window<"u"?window.localStorage.removeItem(r.STORAGE_KEY):void 0};var j=({adapterKey:e,adapter:t})=>{if(Array.isArray(t)){if(t.length===0){console.error("Adapter selection failed: The provided adapters array is empty.");return}let n=t.find(o=>o.key===e);return n||(console.warn(`No adapter found for key: "${e}". Falling back to the first available adapter: "${t[0].key}".`),t[0])}return t};async function W(e,t=50,n=200){for(let o=0;o<t;o++){if(e())return;await new Promise(s=>setTimeout(s,n));}throw new Error("Predicate not fulfilled in time")}function m(e){return typeof e=="string"?["devnet","testnet","mainnet-beta","mainnet"].includes(e):false}function U(e){return m(e)?`solana:${e}`:e}
2
+ exports.OrbitAdapter=d;exports.delay=g;exports.detectSafeApp=M;exports.filterUniqueByKey=b;exports.formatConnectorChainId=x;exports.formatConnectorName=L;exports.getAdapterFromConnectorType=E;exports.getConnectorTypeFromName=v;exports.getNetworkData=G;exports.getParsedStorageItem=a;exports.impersonatedHelpers=_;exports.isAddress=C;exports.isInSecureIframe=p;exports.isSafeApp=Y;exports.isSolanaChain=m;exports.lastConnectedConnectorHelpers=c;exports.recentlyConnectedConnectorsListHelpers=r;exports.selectAdapterByKey=j;exports.setChainId=U;exports.waitFor=W;
package/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- var d=(r=>(r.EVM="evm",r.SOLANA="solana",r.Starknet="starknet",r))(d||{});function a(e){return /^0x[a-fA-F0-9]{40}$/.test(e.trim())}function l(e){return /^[1-9A-HJ-NP-Za-km-z]{32,44}$/.test(e.trim())}function m(e,t="auto"){if(!e)return false;let n=e.trim();switch(t){case "evm":return a(n);case "solana":return l(n);case "auto":default:return a(n)||l(n)}}var y=(e,t)=>new Promise(n=>{let r=()=>{setTimeout(()=>n(e),t);};typeof window<"u"?r():setTimeout(r,0);});function w(e,t){let n=new Set;return e.filter(r=>{let s=r[t];return n.has(s)?false:(n.add(s),true)})}function b(e,t){return typeof e=="string"?`${t}:${e}`:e}var u=new Map([["Impersonated Connector","impersonatedwallet"],["Safe","safe"],["Trust","trust"],["Trust Wallet","trust"],["Brave \u041A\u043E\u0448\u0435\u043B\u0435\u043A","brave"],["Brave Wallet","brave"],["Base Account","coinbase"]]),x=e=>u.get(e)??e.replace(/\s+/g,"").toLowerCase();function R(e){return e?.split(":")[0]??"evm"}function h(e,t){return `${e}:${t.replace(/\s+/g,"").toLowerCase()}`}var N=e=>{switch(e){case "evm":return {chain:{chainId:1,name:"Ethereum"},links:{aboutNetwork:"https://ethereum.org/developers/docs/intro-to-ethereum/",choseWallet:"https://ethereum.org/wallets/find-wallet/",about:"https://ethereum.org/wallets/"}};case "solana":return {chain:{chainId:"solana:mainnet",name:"Solana"},links:{aboutNetwork:"https://solana.com/en/learn/what-is-solana",choseWallet:"https://solana.com/en/solana-wallets",about:"https://solana.com/en/learn/what-is-a-wallet"}}}};function i(e){if(typeof window>"u")return;let t=window.localStorage.getItem(e);if(t)try{return JSON.parse(t)}catch(n){console.error(`Error parsing ${e} from localStorage:`,n);return}}var K={impersonatedAddress:typeof window<"u"?window.localStorage.getItem("satellite-connect:impersonatedAddress")??"":"",setImpersonated:e=>typeof window<"u"?window.localStorage.setItem("satellite-connect:impersonatedAddress",e):void 0,getImpersonated:()=>typeof window<"u"?window.localStorage.getItem("satellite-connect:impersonatedAddress"):void 0,removeImpersonated:()=>typeof window<"u"?window.localStorage.removeItem("satellite-connect:impersonatedAddress"):void 0};var _=typeof window<"u"&&window!==window.parent;var c={STORAGE_KEY:"orbit-core:lastConnectedConnector",lastConnectedConnector:i("orbit-core:lastConnectedConnector"),setLastConnectedConnector:({connectorType:e,chainId:t,address:n})=>typeof window<"u"?window.localStorage.setItem(c.STORAGE_KEY,JSON.stringify({connectorType:e,chainId:t,address:n})):void 0,getLastConnectedConnector:()=>i(c.STORAGE_KEY),removeLastConnectedConnector:()=>typeof window<"u"?window.localStorage.removeItem(c.STORAGE_KEY):void 0};var o={STORAGE_KEY:"orbit-core:recentlyConnectedConnectorsListHelpers",recentlyConnectedConnectorsList:i("orbit-core:recentlyConnectedConnectorsListHelpers"),setRecentlyConnectedConnectorsList:e=>typeof window<"u"?window.localStorage.setItem(o.STORAGE_KEY,JSON.stringify(e)):void 0,getRecentlyConnectedConnectorsList:()=>i(o.STORAGE_KEY),addConnector:(e,t)=>{if(typeof window>"u")return;let r={...o.getRecentlyConnectedConnectorsList()||{},[e]:t};window.localStorage.setItem(o.STORAGE_KEY,JSON.stringify(r));},removeConnector:e=>{if(typeof window>"u")return;let t=o.getRecentlyConnectedConnectorsList();if(!t||!(e in t))return;let{[e]:n,...r}=t;window.localStorage.setItem(o.STORAGE_KEY,JSON.stringify(r));},hasConnector:e=>{if(typeof window>"u")return;let t=o.getRecentlyConnectedConnectorsList();return t?e in t:false},getConnector:e=>typeof window>"u"?void 0:o.getRecentlyConnectedConnectorsList()?.[e],getConnectorCount:()=>{if(typeof window>"u")return 0;let e=o.getRecentlyConnectedConnectorsList();return e?Object.keys(e).length:0},getConnectorsSortedByTime:()=>{if(typeof window>"u")return [];let e=o.getRecentlyConnectedConnectorsList();return e?Object.entries(e).sort(([,t],[,n])=>n.disconnectedTimestamp-t.disconnectedTimestamp):[]},removeConnectorsOlderThan:e=>{if(typeof window>"u")return;let t=o.getRecentlyConnectedConnectorsList();if(!t)return;let n=Object.fromEntries(Object.entries(t).filter(([,r])=>r.disconnectedTimestamp>=e));window.localStorage.setItem(o.STORAGE_KEY,JSON.stringify(n));},removeRecentlyConnectedConnectorsList:()=>typeof window<"u"?window.localStorage.removeItem(o.STORAGE_KEY):void 0};var V=({adapterKey:e,adapter:t})=>{if(Array.isArray(t)){if(t.length===0){console.error("Adapter selection failed: The provided adapters array is empty.");return}let n=t.find(r=>r.key===e);return n||(console.warn(`No adapter found for key: "${e}". Falling back to the first available adapter: "${t[0].key}".`),t[0])}return t};async function M(e,t=50,n=200){for(let r=0;r<t;r++){if(e())return;await new Promise(s=>setTimeout(s,n));}throw new Error("Predicate not fulfilled in time")}function f(e){return typeof e=="string"?["devnet","testnet","mainnet-beta","mainnet"].includes(e):false}function j(e){return f(e)?`solana:${e}`:e}
2
- export{d as OrbitAdapter,y as delay,w as filterUniqueByKey,b as formatConnectorChainId,x as formatConnectorName,R as getAdapterFromConnectorType,h as getConnectorTypeFromName,N as getNetworkData,i as getParsedStorageItem,K as impersonatedHelpers,m as isAddress,_ as isSafeApp,f as isSolanaChain,c as lastConnectedConnectorHelpers,o as recentlyConnectedConnectorsListHelpers,V as selectAdapterByKey,j as setChainId,M as waitFor};
1
+ var d=(o=>(o.EVM="evm",o.SOLANA="solana",o.Starknet="starknet",o))(d||{});function f(e){return /^0x[a-fA-F0-9]{40}$/.test(e.trim())}function u(e){return /^[1-9A-HJ-NP-Za-km-z]{32,44}$/.test(e.trim())}function C(e,t="auto"){if(!e)return false;let n=e.trim();switch(t){case "evm":return f(n);case "solana":return u(n);default:return f(n)||u(n)}}var g=(e,t)=>new Promise(n=>{let o=()=>{setTimeout(()=>n(e),t);};typeof window<"u"?o():setTimeout(o,0);});function b(e,t){let n=new Set;return e.filter(o=>{let s=o[t];return n.has(s)?false:(n.add(s),true)})}function x(e,t){return typeof e=="string"?`${t}:${e}`:e}var l=new Map([["Impersonated Connector","impersonatedwallet"],["Safe","safe"],["Trust","trust"],["Trust Wallet","trust"],["Brave \u041A\u043E\u0448\u0435\u043B\u0435\u043A","brave"],["Brave Wallet","brave"],["Base Account","coinbase"]]),L=e=>l.get(e)??e.replace(/\s+/g,"").toLowerCase();function E(e){return e?.split(":")[0]??"evm"}function v(e,t){return `${e}:${t.replace(/\s+/g,"").toLowerCase()}`}var G=e=>{switch(e){case "evm":return {chain:{chainId:1,name:"Ethereum"},links:{aboutNetwork:"https://ethereum.org/developers/docs/intro-to-ethereum/",choseWallet:"https://ethereum.org/wallets/find-wallet/",about:"https://ethereum.org/wallets/"}};case "solana":return {chain:{chainId:"solana:mainnet",name:"Solana"},links:{aboutNetwork:"https://solana.com/en/learn/what-is-solana",choseWallet:"https://solana.com/en/solana-wallets",about:"https://solana.com/en/learn/what-is-a-wallet"}}}};function a(e){if(typeof window>"u")return;let t=window.localStorage.getItem(e);if(t)try{return JSON.parse(t)}catch(n){console.error(`Error parsing ${e} from localStorage:`,n);return}}var _={impersonatedAddress:typeof window<"u"?window.localStorage.getItem("satellite-connect:impersonatedAddress")??"":"",setImpersonated:e=>typeof window<"u"?window.localStorage.setItem("satellite-connect:impersonatedAddress",e):void 0,getImpersonated:()=>typeof window<"u"?window.localStorage.getItem("satellite-connect:impersonatedAddress"):void 0,removeImpersonated:()=>typeof window<"u"?window.localStorage.removeItem("satellite-connect:impersonatedAddress"):void 0};async function M(e=1e3){return typeof window>"u"||window===window.parent||window.location.protocol!=="https:"?false:new Promise(t=>{let n=setTimeout(()=>{window.removeEventListener("message",o),t(false);},e);function o(i){i.data&&typeof i.data=="object"&&("safeAddress"in i.data||i.data.data&&"safeAddress"in i.data.data||i.data.method==="getInfo")&&(clearTimeout(n),window.removeEventListener("message",o),t(true));}window.addEventListener("message",o);let s=Math.trunc(Math.random()*1e6);window.parent.postMessage({id:s,method:"getSafeInfo",env:{sdkVersion:"1.0.0"}},"*");})}var p=typeof window<"u"&&window!==window.parent&&window.location.protocol==="https:",Y=p;var c={STORAGE_KEY:"orbit-core:lastConnectedConnector",lastConnectedConnector:a("orbit-core:lastConnectedConnector"),setLastConnectedConnector:({connectorType:e,chainId:t,address:n})=>typeof window<"u"?window.localStorage.setItem(c.STORAGE_KEY,JSON.stringify({connectorType:e,chainId:t,address:n})):void 0,getLastConnectedConnector:()=>a(c.STORAGE_KEY),removeLastConnectedConnector:()=>typeof window<"u"?window.localStorage.removeItem(c.STORAGE_KEY):void 0};var r={STORAGE_KEY:"orbit-core:recentlyConnectedConnectorsListHelpers",recentlyConnectedConnectorsList:a("orbit-core:recentlyConnectedConnectorsListHelpers"),setRecentlyConnectedConnectorsList:e=>typeof window<"u"?window.localStorage.setItem(r.STORAGE_KEY,JSON.stringify(e)):void 0,getRecentlyConnectedConnectorsList:()=>a(r.STORAGE_KEY),addConnector:(e,t)=>{if(typeof window>"u")return;let o={...r.getRecentlyConnectedConnectorsList()||{},[e]:t};window.localStorage.setItem(r.STORAGE_KEY,JSON.stringify(o));},removeConnector:e=>{if(typeof window>"u")return;let t=r.getRecentlyConnectedConnectorsList();if(!t||!(e in t))return;let{[e]:n,...o}=t;window.localStorage.setItem(r.STORAGE_KEY,JSON.stringify(o));},hasConnector:e=>{if(typeof window>"u")return;let t=r.getRecentlyConnectedConnectorsList();return t?e in t:false},getConnector:e=>typeof window>"u"?void 0:r.getRecentlyConnectedConnectorsList()?.[e],getConnectorCount:()=>{if(typeof window>"u")return 0;let e=r.getRecentlyConnectedConnectorsList();return e?Object.keys(e).length:0},getConnectorsSortedByTime:()=>{if(typeof window>"u")return [];let e=r.getRecentlyConnectedConnectorsList();return e?Object.entries(e).sort(([,t],[,n])=>n.disconnectedTimestamp-t.disconnectedTimestamp):[]},removeConnectorsOlderThan:e=>{if(typeof window>"u")return;let t=r.getRecentlyConnectedConnectorsList();if(!t)return;let n=Object.fromEntries(Object.entries(t).filter(([,o])=>o.disconnectedTimestamp>=e));window.localStorage.setItem(r.STORAGE_KEY,JSON.stringify(n));},removeRecentlyConnectedConnectorsList:()=>typeof window<"u"?window.localStorage.removeItem(r.STORAGE_KEY):void 0};var j=({adapterKey:e,adapter:t})=>{if(Array.isArray(t)){if(t.length===0){console.error("Adapter selection failed: The provided adapters array is empty.");return}let n=t.find(o=>o.key===e);return n||(console.warn(`No adapter found for key: "${e}". Falling back to the first available adapter: "${t[0].key}".`),t[0])}return t};async function W(e,t=50,n=200){for(let o=0;o<t;o++){if(e())return;await new Promise(s=>setTimeout(s,n));}throw new Error("Predicate not fulfilled in time")}function m(e){return typeof e=="string"?["devnet","testnet","mainnet-beta","mainnet"].includes(e):false}function U(e){return m(e)?`solana:${e}`:e}
2
+ export{d as OrbitAdapter,g as delay,M as detectSafeApp,b as filterUniqueByKey,x as formatConnectorChainId,L as formatConnectorName,E as getAdapterFromConnectorType,v as getConnectorTypeFromName,G as getNetworkData,a as getParsedStorageItem,_ as impersonatedHelpers,C as isAddress,p as isInSecureIframe,Y as isSafeApp,m as isSolanaChain,c as lastConnectedConnectorHelpers,r as recentlyConnectedConnectorsListHelpers,j as selectAdapterByKey,U as setChainId,W as waitFor};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tuwaio/orbit-core",
3
- "version": "0.2.4",
3
+ "version": "0.2.6",
4
4
  "private": false,
5
5
  "author": "Oleksandr Tkach",
6
6
  "license": "Apache-2.0",