@rango-dev/provider-okx 0.63.1-next.0 → 0.63.1-next.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.
@@ -0,0 +1,12 @@
1
+ import type { TonProviderApi } from '../namespaces/ton/types.js';
2
+ import type { Context, FunctionWithContext } from '@hub3js/core';
3
+ import { type TonActions } from '@rango-dev/wallets-core/namespaces/ton';
4
+ export declare function connect(getInstance: () => TonProviderApi): FunctionWithContext<TonActions['connect'], Context>;
5
+ export declare function canEagerConnect(getInstance: () => TonProviderApi): FunctionWithContext<TonActions['canEagerConnect'], Context>;
6
+ export declare function disconnect(getInstance: () => TonProviderApi): () => Promise<void>;
7
+ export declare const tonActions: {
8
+ connect: typeof connect;
9
+ canEagerConnect: typeof canEagerConnect;
10
+ disconnect: typeof disconnect;
11
+ };
12
+ //# sourceMappingURL=ton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ton.d.ts","sourceRoot":"","sources":["../../src/actions/ton.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,cAAc,EACf,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEjE,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,wCAAwC,CAAC;AAazE,wBAAgB,OAAO,CACrB,WAAW,EAAE,MAAM,cAAc,GAChC,mBAAmB,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAwCrD;AAED,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,cAAc,GAChC,mBAAmB,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAa7D;AAED,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,cAAc,uBAgB3D;AAED,eAAO,MAAM,UAAU;;;;CAA2C,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { TonProviderApi } from '../namespaces/ton/types.js';
2
+ import { ChangeAccountSubscriberBuilder } from '@hub3js/std/hooks';
3
+ import { type TonActions } from '@rango-dev/wallets-core/namespaces/ton';
4
+ export declare const changeAccountSubscriber: (getInstance: () => TonProviderApi) => ChangeAccountSubscriberBuilder<unknown, TonProviderApi, TonActions>;
5
+ export declare const disconnectSubscriber: (getInstance: () => TonProviderApi) => ChangeAccountSubscriberBuilder<unknown, TonProviderApi, TonActions>;
6
+ export declare const tonBuilders: {
7
+ changeAccountSubscriber: (getInstance: () => TonProviderApi) => ChangeAccountSubscriberBuilder<unknown, TonProviderApi, TonActions>;
8
+ disconnectSubscriber: (getInstance: () => TonProviderApi) => ChangeAccountSubscriberBuilder<unknown, TonProviderApi, TonActions>;
9
+ };
10
+ //# sourceMappingURL=ton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ton.d.ts","sourceRoot":"","sources":["../../src/builders/ton.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE,OAAO,EAAE,8BAA8B,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,KAAK,UAAU,EAAS,MAAM,wCAAwC,CAAC;AAUhF,eAAO,MAAM,uBAAuB,gBAAiB,MAAM,cAAc,wEAiBnE,CAAC;AAEP,eAAO,MAAM,oBAAoB,gBAAiB,MAAM,cAAc,wEAahE,CAAC;AAEP,eAAO,MAAM,WAAW;2CAlC6B,MAAM,cAAc;wCAmBvB,MAAM,cAAc;CAeM,CAAC"}
@@ -1,6 +1,8 @@
1
1
  import type { ProviderMetadata } from '@hub3js/core';
2
2
  import { LegacyNetworks } from '@rango-dev/wallets-core/legacy';
3
3
  export declare const WALLET_ID = "okx";
4
+ export declare const TON_CONNECT_PROTOCOL_VERSION = 2;
5
+ export declare const TON_CONNECT_USER_REJECTED_CODE = 300;
4
6
  export declare const OKX_WALLET_SUPPORTED_CHAINS: LegacyNetworks[];
5
7
  export declare const metadata: ProviderMetadata;
6
8
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAWhE,eAAO,MAAM,SAAS,QAAQ,CAAC;AAC/B,eAAO,MAAM,2BAA2B,kBAcvC,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,gBAqDtB,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAYhE,eAAO,MAAM,SAAS,QAAQ,CAAC;AAC/B,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAC9C,eAAO,MAAM,8BAA8B,MAAM,CAAC;AAElD,eAAO,MAAM,2BAA2B,kBAcvC,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,gBA4DtB,CAAC"}
package/dist/mod.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- declare const versions: () => readonly [readonly ["1.0.0", import("@hub3js/core").Provider<Record<"solana", import("@hub3js/solana").SolanaActions> & Record<"evm", import("@hub3js/evm").EvmActions> & Record<"utxo", import("@rango-dev/wallets-core/namespaces/utxo").UtxoActions>>]];
1
+ declare const versions: () => readonly [readonly ["1.0.0", import("@hub3js/core").Provider<Record<"solana", import("@hub3js/solana").SolanaActions> & Record<"evm", import("@hub3js/evm").EvmActions> & Record<"utxo", import("@rango-dev/wallets-core/namespaces/utxo").UtxoActions> & Record<"ton", import("@rango-dev/wallets-core/namespaces/ton").TonActions>>]];
2
2
  export { versions };
3
3
  //# sourceMappingURL=mod.d.ts.map
package/dist/mod.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAIA,QAAA,MAAM,QAAQ,kQAC8C,CAAC;AAE7D,OAAO,EAAE,QAAQ,EAAE,CAAC"}
1
+ {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAIA,QAAA,MAAM,QAAQ,+UAC8C,CAAC;AAE7D,OAAO,EAAE,QAAQ,EAAE,CAAC"}
package/dist/mod.js CHANGED
@@ -1,2 +1,2 @@
1
- var H=Object.defineProperty;var t=(e,o)=>H(e,"name",{value:o,configurable:!0});import{defineVersions as Uo}from"@hub3js/core/utils";import{ProviderBuilder as Lo}from"@hub3js/core";import{LegacyNetworks as n}from"@rango-dev/wallets-core/legacy";import{Networks as Z}from"@rango-dev/wallets-shared";import{solanaBlockchain as oo}from"rango-types";import{EVM_NAMESPACE as q,SOLANA_NAMESPACE as Y,UTXO_NAMESPACE as $}from"@hub3js/namespaces";import{dynamicImportWithRefinedError as J,getNetworkInstance as b}from"@rango-dev/wallets-shared";import{DefaultSignerFactory as Q,TransactionType as w}from"rango-types";import{DefaultSolanaSigner as W}from"@rango-dev/signer-solana";import{SignerError as V,SignerErrorCode as F}from"rango-types";var f=class extends W{static{t(this,"OKXSolanaSigner")}constructor(o){super(o)}async signMessage(o){try{let{signature:r}=await this.provider.request({method:"signMessage",params:{message:o}});return r}catch(r){throw new V(F.SIGN_TX_ERROR,void 0,r)}}};import{Networks as z}from"@rango-dev/wallets-shared";import{SignerError as G}from"rango-types";var g=class{static{t(this,"OKXUTXOSigner")}provider;constructor(o){this.provider=o}async signMessage(){throw G.UnimplementedError("signMessage")}async signAndSendTx(o){let{asset:r,psbt:m}=o;if(!m)throw new Error("No PSBT found to sign. Ensure a valid PSBT is provided.");if(r.blockchain!==z.BTC)throw new Error(`Signing ${r.blockchain} transaction is not implemented by the signer.`);let a=Buffer.from(m.unsignedPsbtBase64,"base64").toString("hex"),h=m.inputsToSign.flatMap(({address:d,signingIndexes:S})=>S.map(K=>({index:K,address:d})));try{let d=await this.provider.signPsbt(a,{autoFinalized:!0,toSignInputs:h});return{hash:await this.provider.pushPsbt(d)}}catch(d){throw new Error(d?.message||"Error during signing transaction")}}};async function E(e){let o=b(e,q),r=b(e,Y),m=b(e,$),a=new Q,{DefaultEvmSigner:h}=await J(async()=>await import("@rango-dev/signer-evm"));return a.registerSigner(w.EVM,new h(o)),a.registerSigner(w.SOLANA,new f(r)),a.registerSigner(w.TRANSFER,new g(m)),a}t(E,"getSigners");import{EVM_NAMESPACE as v,SOLANA_NAMESPACE as x,UTXO_NAMESPACE as y}from"@hub3js/namespaces";function c(){let{okxwallet:e}=window;if(!e)return null;let o=new Map;return e&&o.set(v,e),e.solana&&o.set(x,e.solana),e.bitcoin&&o.set(y,e.bitcoin),o}t(c,"okx");function I(){let e=c();if(!e)throw new Error("OKX Wallet is not injected. Please check your wallet.");return e}t(I,"getInstanceOrThrow");function s(){let o=c()?.get(v);if(!o)throw new Error("OKX Wallet not injected or EVM not enabled. Please check your wallet.");return o}t(s,"evmOKX");function l(){let o=c()?.get(x);if(!o)throw new Error("OKX Wallet not injected or Solana not enabled. Please check your wallet.");return o}t(l,"solanaOKX");function u(){let o=c()?.get(y);if(!o)throw new Error("OKX Wallet not injected or Utxo not enabled. Please check your wallet.");return o}t(u,"bitcoinOKX");async function C(){let o=await u().connect();if(o.error?.message)throw new Error(o.error.message);return o}t(C,"getBitcoinAccounts");var i="okx",eo=[n.ETHEREUM,n.BSC,n.POLYGON,n.FANTOM,n.ARBITRUM,n.OPTIMISM,n.CRONOS,n.BOBA,n.GNOSIS,n.MOONBEAM,n.MOONRIVER,n.HARMONY,n.AVAX_CCHAIN],T={name:"OKX",icon:"https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/okx/icon.svg",extensions:{chrome:"https://chrome.google.com/webstore/detail/okx-wallet/mcohilncbfahbmgdjkbpemcciiolgcge",brave:"https://chrome.google.com/webstore/detail/okx-wallet/mcohilncbfahbmgdjkbpemcciiolgcge",firefox:"https://addons.mozilla.org/en-US/firefox/addon/okexwallet",homepage:"https://www.okx.com/web3"},properties:[{name:"namespaces",value:{selection:"multiple",data:[{label:"EVM",value:"EVM",id:"ETH",getSupportedChains:e=>e.filter(o=>eo.includes(o.name))},{label:"Solana",value:"Solana",id:"SOLANA",getSupportedChains:e=>oo(e)},{label:"BTC",value:"UTXO",id:"BTC",getSupportedChains:e=>e.filter(o=>o.name===Z.BTC)}]}},{name:"signers",value:{getSigners:async()=>E(I())}}]};import{NamespaceBuilder as to}from"@hub3js/core";import{actions as A,builders as p,utils as ro}from"@hub3js/evm";import*as B from"@hub3js/std/builders";import{standardizeAndThrowError as no}from"@hub3js/std/operators";var[io,O]=p.changeAccountSubscriber(s).onSwitchAccount(e=>{e.payload.length||e.preventDefault()}).format(async(e,o)=>{let r=await e.request({method:"eth_chainId"});return ro.formatAccountsToCAIP(o.filter(Boolean),r)}).build(),ao=p.connect().action(A.connect(s)).before(io).or(O).or(no).build(),co=B.disconnect().before(()=>{s().disconnect()}).after(O).build(),so=p.canSwitchNetwork().action(A.canSwitchNetwork()).build(),mo=p.canEagerConnect().action(A.canEagerConnect(s)).build(),lo=p.getChainId().action(A.getChainId(s)).build(),k=new to("EVM",i).action(ao).action(co).action(mo).action(so).action(lo).build();import{ActionBuilder as uo,NamespaceBuilder as po}from"@hub3js/core";import{actions as N,builders as M,utils as fo}from"@hub3js/solana";import*as _ from"@hub3js/std/builders";import{standardizeAndThrowError as go}from"@hub3js/std/operators";var[Ao,L]=M.changeAccountSubscriber(l).onSwitchAccount(e=>{e.payload||e.preventDefault()}).format(async(e,o)=>fo.formatAccountsToCAIP(o?[o]:[])).build(),ho=M.connect().action(N.connect(l)).before(Ao).or(L).or(go).build(),bo=_.disconnect().before(()=>{l().disconnect()}).after(L).build(),wo=new uo("canEagerConnect").action(N.canEagerConnect(l)).build(),U=new po("Solana",i).action(ho).action(bo).action(wo).build();import{NamespaceBuilder as Io}from"@hub3js/core";import*as X from"@hub3js/std/builders";import{standardizeAndThrowError as Co}from"@hub3js/std/operators";import{CAIP_BITCOIN_CHAIN_ID as To,utils as Bo}from"@rango-dev/wallets-core/namespaces/utxo";import{builders as Oo}from"@rango-dev/wallets-core/namespaces/utxo";import{ActionBuilder as Eo}from"@hub3js/core";import{ChangeAccountSubscriberBuilder as Po}from"@hub3js/std/hooks";import{CAIP_BITCOIN_CHAIN_ID as So,utils as vo}from"@rango-dev/wallets-core/namespaces/utxo";var xo=t(e=>new Po().getInstance(e).onSwitchAccount(o=>{o.payload?.address||o.preventDefault()}).format(async(o,r)=>vo.formatAccountsToCAIP(r?[r.address]:[],So)).addEventListener((o,r)=>o.addListener("accountChanged",r)).removeEventListener((o,r)=>o.removeListener("accountChanged",r)),"changeAccountSubscriber");function yo(e){return new Eo("canEagerConnect").action(async()=>{let o=e();try{return!!(await o.getAccounts()).length}catch{return!1}})}t(yo,"canEagerConnect");var P={changeAccountSubscriber:xo,canEagerConnect:yo};var[ko,R]=P.changeAccountSubscriber(u).build(),No=P.canEagerConnect(u).build(),Mo=Oo.connect().action(async function(){let e=await C();if(!e?.address)throw new Error("Couldn't find any address!");return Bo.formatAccountsToCAIP([e.address],To)}).before(ko).or(R).or(Co).build(),_o=X.disconnect().before(()=>{u().disconnect()}).after(R).build(),j=new Io("UTXO",i).action(Mo).action(_o).action(No).build();var D=t(()=>new Lo(i).init(function(e){let[,o]=e.state();c()&&(o("installed",!0),console.debug("[okx] instance detected.",e))}).config("metadata",T).add("solana",U).add("evm",k).add("utxo",j).build(),"buildProvider");var We=t(()=>Uo().version("1.0.0",D()).build(),"versions");export{We as versions};
1
+ var gn=Object.defineProperty;var e=(n,o)=>gn(n,"name",{value:o,configurable:!0});import{defineVersions as Io}from"@hub3js/core/utils";import{ProviderBuilder as Oo}from"@hub3js/core";import{LegacyNetworks as r}from"@rango-dev/wallets-core/legacy";import{Networks as Bn}from"@rango-dev/wallets-shared";import{solanaBlockchain as Rn,tonBlockchain as kn}from"rango-types";import{EVM_NAMESPACE as Pn,SOLANA_NAMESPACE as xn,UTXO_NAMESPACE as On,TON_NAMESPACE as In}from"@hub3js/namespaces";import{dynamicImportWithRefinedError as Nn,getNetworkInstance as P}from"@rango-dev/wallets-shared";import{DefaultSignerFactory as _n,TransactionType as x}from"rango-types";import{DefaultSolanaSigner as An}from"@rango-dev/signer-solana";import{SignerError as En,SignerErrorCode as hn}from"rango-types";var T=class extends An{static{e(this,"OKXSolanaSigner")}constructor(o){super(o)}async signMessage(o){try{let{signature:t}=await this.provider.request({method:"signMessage",params:{message:o}});return t}catch(t){throw new En(hn.SIGN_TX_ERROR,void 0,t)}}};import{dynamicImportWithRefinedError as vn}from"@rango-dev/wallets-shared";import{SignerError as C,SignerErrorCode as R,TonChainID as Cn}from"rango-types";import{utils as B}from"@rango-dev/wallets-core/namespaces/ton";import{dynamicImportWithRefinedError as Tn}from"@rango-dev/wallets-shared";function f(n){return!!n&&n.event==="connect"&&Array.isArray(n.payload?.items)}e(f,"isTonConnectEventSuccess");function wn(n){return typeof n=="object"&&n!==null&&"name"in n&&n.name==="ton_addr"&&"address"in n&&typeof n.address=="string"}e(wn,"isTonAddressItemReply");var D;function X(n){D=n}e(X,"setEnvironments");function j(){let n=D?.tonConnectManifestUrl;if(!n)throw new Error("OKX TON requires a TonConnect manifest URL. Please provide it through the provider environments.");return n}e(j,"getTonConnectManifestUrl");var U=0;function w(){return U+=1,U.toString()}e(w,"nextTonRequestId");async function v(n){if(!f(n))return B.formatAccountsToCAIP([]);let o=n.payload.items.find(wn);if(!o)return B.formatAccountsToCAIP([]);let{Address:t}=await Tn(async()=>await import("@ton/core")),i=t.parseRaw(o.address).toString({bounceable:!1,urlSafe:!0});return B.formatAccountsToCAIP([i])}e(v,"connectEventToCAIP");function bn(n){let o=n.error.code===S?R.REJECTED_BY_USER:R.SEND_TX_ERROR;return new C(o,n.error.message,n.error)}e(bn,"toSignerError");var b=class{static{e(this,"OKXTonSigner")}provider;constructor(o){this.provider=o}async signMessage(){throw C.UnimplementedError("signMessage")}async signAndSendTx(o){let{validUntil:t,network:i,from:p,messages:a}=o,{Address:m,Cell:h}=await vn(async()=>await import("@ton/core")),N={valid_until:t,network:i??Cn.MAINNET,...p&&{from:m.parse(p).toRawString()},messages:a.map(({stateInit:c,payload:_,...fn})=>({...fn,...c!=null&&{stateInit:c},..._!=null&&{payload:_}}))};try{let c=await this.provider.send({method:"sendTransaction",params:[JSON.stringify(N)],id:w()});if("error"in c)throw bn(c);return{hash:h.fromBase64(c.result).hash().toString("hex")}}catch(c){throw c instanceof C?c:new C(R.SEND_TX_ERROR,void 0,c)}}};import{Networks as Sn}from"@rango-dev/wallets-shared";import{SignerError as yn}from"rango-types";var y=class{static{e(this,"OKXUTXOSigner")}provider;constructor(o){this.provider=o}async signMessage(){throw yn.UnimplementedError("signMessage")}async signAndSendTx(o){let{asset:t,psbt:i}=o;if(!i)throw new Error("No PSBT found to sign. Ensure a valid PSBT is provided.");if(t.blockchain!==Sn.BTC)throw new Error(`Signing ${t.blockchain} transaction is not implemented by the signer.`);let p=Buffer.from(i.unsignedPsbtBase64,"base64").toString("hex"),a=i.inputsToSign.flatMap(({address:m,signingIndexes:h})=>h.map(N=>({index:N,address:m})));try{let m=await this.provider.signPsbt(p,{autoFinalized:!0,toSignInputs:a});return{hash:await this.provider.pushPsbt(m)}}catch(m){throw new Error(m?.message||"Error during signing transaction")}}};async function k(n){let o=P(n,Pn),t=P(n,xn),i=P(n,On),p=P(n,In),a=new _n,{DefaultEvmSigner:m}=await Nn(async()=>await import("@rango-dev/signer-evm"));return a.registerSigner(x.EVM,new m(o)),a.registerSigner(x.SOLANA,new T(t)),a.registerSigner(x.TRANSFER,new y(i)),a.registerSigner(x.TON,new b(p)),a}e(k,"getSigners");import{EVM_NAMESPACE as W,SOLANA_NAMESPACE as K,UTXO_NAMESPACE as V,TON_NAMESPACE as H}from"@hub3js/namespaces";function d(){let{okxwallet:n,okxTonWallet:o}=window;if(!n&&!o)return null;let t=new Map;return n&&t.set(W,n),n.solana&&t.set(K,n.solana),n.bitcoin&&t.set(V,n.bitcoin),o?.tonconnect&&t.set(H,o.tonconnect),t}e(d,"okx");function F(){let n=d();if(!n)throw new Error("OKX Wallet is not injected. Please check your wallet.");return n}e(F,"getInstanceOrThrow");function u(){let o=d()?.get(W);if(!o)throw new Error("OKX Wallet not injected or EVM not enabled. Please check your wallet.");return o}e(u,"evmOKX");function g(){let o=d()?.get(K);if(!o)throw new Error("OKX Wallet not injected or Solana not enabled. Please check your wallet.");return o}e(g,"solanaOKX");function A(){let o=d()?.get(V);if(!o)throw new Error("OKX Wallet not injected or Utxo not enabled. Please check your wallet.");return o}e(A,"bitcoinOKX");function l(){let o=d()?.get(H);if(!o)throw new Error("OKX Wallet not injected or TON not enabled. Please check your wallet.");return o}e(l,"tonOKX");async function q(){let o=await A().connect();if(o.error?.message)throw new Error(o.error.message);return o}e(q,"getBitcoinAccounts");var s="okx",G=2,S=300,Mn=[r.ETHEREUM,r.BSC,r.POLYGON,r.FANTOM,r.ARBITRUM,r.OPTIMISM,r.CRONOS,r.BOBA,r.GNOSIS,r.MOONBEAM,r.MOONRIVER,r.HARMONY,r.AVAX_CCHAIN],z={name:"OKX",icon:"https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/okx/icon.svg",extensions:{chrome:"https://chrome.google.com/webstore/detail/okx-wallet/mcohilncbfahbmgdjkbpemcciiolgcge",brave:"https://chrome.google.com/webstore/detail/okx-wallet/mcohilncbfahbmgdjkbpemcciiolgcge",firefox:"https://addons.mozilla.org/en-US/firefox/addon/okexwallet",homepage:"https://www.okx.com/web3"},properties:[{name:"namespaces",value:{selection:"multiple",data:[{label:"EVM",value:"EVM",id:"ETH",getSupportedChains:n=>n.filter(o=>Mn.includes(o.name))},{label:"Solana",value:"Solana",id:"SOLANA",getSupportedChains:n=>Rn(n)},{label:"BTC",value:"UTXO",id:"BTC",getSupportedChains:n=>n.filter(o=>o.name===Bn.BTC)},{label:"Ton",value:"Ton",id:"TON",getSupportedChains:n=>kn(n)}]}},{name:"signers",value:{getSigners:async()=>k(F())}}]};import{NamespaceBuilder as Ln}from"@hub3js/core";import{actions as O,builders as E,utils as Un}from"@hub3js/evm";import*as J from"@hub3js/std/builders";import{standardizeAndThrowError as Dn}from"@hub3js/std/operators";var[Xn,Y]=E.changeAccountSubscriber(u).onSwitchAccount(n=>{n.payload.length||n.preventDefault()}).format(async(n,o)=>{let t=await n.request({method:"eth_chainId"});return Un.formatAccountsToCAIP(o.filter(Boolean),t)}).build(),jn=E.connect().action(O.connect(u)).before(Xn).or(Y).or(Dn).build(),Wn=J.disconnect().before(()=>{u().disconnect()}).after(Y).build(),Kn=E.canSwitchNetwork().action(O.canSwitchNetwork()).build(),Vn=E.canEagerConnect().action(O.canEagerConnect(u)).build(),Hn=E.getChainId().action(O.getChainId(u)).build(),$=new Ln("EVM",s).action(jn).action(Wn).action(Vn).action(Kn).action(Hn).build();import{ActionBuilder as Fn,NamespaceBuilder as qn}from"@hub3js/core";import{actions as Q,builders as Z,utils as Gn}from"@hub3js/solana";import*as nn from"@hub3js/std/builders";import{standardizeAndThrowError as zn}from"@hub3js/std/operators";var[Jn,on]=Z.changeAccountSubscriber(g).onSwitchAccount(n=>{n.payload||n.preventDefault()}).format(async(n,o)=>Gn.formatAccountsToCAIP(o?[o]:[])).build(),Yn=Z.connect().action(Q.connect(g)).before(Jn).or(on).or(zn).build(),$n=nn.disconnect().before(()=>{g().disconnect()}).after(on).build(),Qn=new Fn("canEagerConnect").action(Q.canEagerConnect(g)).build(),tn=new qn("Solana",s).action(Yn).action($n).action(Qn).build();import{NamespaceBuilder as io}from"@hub3js/core";import*as rn from"@hub3js/std/builders";import{standardizeAndThrowError as co}from"@hub3js/std/operators";import{builders as cn}from"@rango-dev/wallets-core/namespaces/ton";import"@rango-dev/wallets-core/namespaces/ton";function Zn(n){return async()=>{let o=n(),t;try{t=await o.restoreConnection()}catch{}if((!t||!f(t))&&(t=await o.connect(G,{manifestUrl:j(),items:[{name:"ton_addr"}]})),!f(t))throw t.payload.code===S?new Error("User rejected the request."):new Error(`Couldn't connect to OKX TON. code: ${t.payload.code}, message: ${t.payload.message}`);let i=await v(t);if(!i.length)throw new Error("Couldn't find any TON address!");return i}}e(Zn,"connect");function no(n){return async()=>{try{let o=await n().restoreConnection();return f(o)}catch{return!1}}}e(no,"canEagerConnect");function oo(n){return async()=>{try{await n().send({method:"disconnect",params:[],id:w()})}catch{}}}e(oo,"disconnect");var I={connect:Zn,canEagerConnect:no,disconnect:oo};import{ChangeAccountSubscriberBuilder as en}from"@hub3js/std/hooks";import{utils as to}from"@rango-dev/wallets-core/namespaces/ton";var eo=e(n=>new en().getInstance(n).format(async o=>{try{let t=await o.restoreConnection();return await v(t)}catch{return to.formatAccountsToCAIP([])}}).addEventListener((o,t)=>{o.on("accountChanged",t)}).removeEventListener((o,t)=>{o.off("accountChanged",t)}),"changeAccountSubscriber"),ro=e(n=>new en().getInstance(n).onSwitchAccount((o,t)=>{o.preventDefault(),t.action("disconnect")}).format(async()=>[]).addEventListener((o,t)=>{o.on("disconnect",t)}).removeEventListener((o,t)=>{o.off("disconnect",t)}),"disconnectSubscriber"),M={changeAccountSubscriber:eo,disconnectSubscriber:ro};var[so,sn]=M.changeAccountSubscriber(l).build(),[ao,an]=M.disconnectSubscriber(l).build(),mo=cn.connect().action(I.connect(l)).before(so).before(ao).or(an).or(sn).or(co).build(),po=rn.disconnect().before(I.disconnect(l)).after(sn).after(an).build(),uo=cn.canEagerConnect().action(I.canEagerConnect(l)).build(),mn=new io("Ton",s).action(mo).action(po).action(uo).build();import{NamespaceBuilder as To}from"@hub3js/core";import*as dn from"@hub3js/std/builders";import{standardizeAndThrowError as wo}from"@hub3js/std/operators";import{CAIP_BITCOIN_CHAIN_ID as vo,utils as Co}from"@rango-dev/wallets-core/namespaces/utxo";import{builders as bo}from"@rango-dev/wallets-core/namespaces/utxo";import{ActionBuilder as lo}from"@hub3js/core";import{ChangeAccountSubscriberBuilder as fo}from"@hub3js/std/hooks";import{CAIP_BITCOIN_CHAIN_ID as go,utils as Ao}from"@rango-dev/wallets-core/namespaces/utxo";var Eo=e(n=>new fo().getInstance(n).onSwitchAccount(o=>{o.payload?.address||o.preventDefault()}).format(async(o,t)=>Ao.formatAccountsToCAIP(t?[t.address]:[],go)).addEventListener((o,t)=>o.addListener("accountChanged",t)).removeEventListener((o,t)=>o.removeListener("accountChanged",t)),"changeAccountSubscriber");function ho(n){return new lo("canEagerConnect").action(async()=>{let o=n();try{return!!(await o.getAccounts()).length}catch{return!1}})}e(ho,"canEagerConnect");var L={changeAccountSubscriber:Eo,canEagerConnect:ho};var[So,pn]=L.changeAccountSubscriber(A).build(),yo=L.canEagerConnect(A).build(),Po=bo.connect().action(async function(){let n=await q();if(!n?.address)throw new Error("Couldn't find any address!");return Co.formatAccountsToCAIP([n.address],vo)}).before(So).or(pn).or(wo).build(),xo=dn.disconnect().before(()=>{A().disconnect()}).after(pn).build(),un=new To("UTXO",s).action(Po).action(xo).action(yo).build();var ln=e(()=>new Oo(s).init(function(n,o){X(o);let[,t]=n.state();d()&&(t("installed",!0),console.debug("[okx] instance detected.",n))}).config("metadata",z).add("solana",tn).add("evm",$).add("utxo",un).add("ton",mn).build(),"buildProvider");var le=e(()=>Io().version("1.0.0",ln()).build(),"versions");export{le as versions};
2
2
  //# sourceMappingURL=mod.js.map
package/dist/mod.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/mod.ts", "../src/provider.ts", "../src/constants.ts", "../src/signer.ts", "../src/signers/solana.ts", "../src/signers/utxo.ts", "../src/utils.ts", "../src/namespaces/evm.ts", "../src/namespaces/solana.ts", "../src/namespaces/utxo.ts", "../src/builders/utxo.ts"],
4
- "sourcesContent": ["import { defineVersions } from '@hub3js/core/utils';\n\nimport { buildProvider } from './provider.js';\n\nconst versions = () =>\n defineVersions().version('1.0.0', buildProvider()).build();\n\nexport { versions };\n", "import { ProviderBuilder } from '@hub3js/core';\n\nimport { metadata, WALLET_ID } from './constants.js';\nimport { evm } from './namespaces/evm.js';\nimport { solana } from './namespaces/solana.js';\nimport { utxo } from './namespaces/utxo.js';\nimport { okx as okxInstance } from './utils.js';\n\nconst buildProvider = () =>\n new ProviderBuilder(WALLET_ID)\n .init(function (context) {\n const [, setState] = context.state();\n\n if (okxInstance()) {\n setState('installed', true);\n console.debug('[okx] instance detected.', context);\n }\n })\n .config('metadata', metadata)\n .add('solana', solana)\n .add('evm', evm)\n .add('utxo', utxo)\n\n .build();\n\nexport { buildProvider };\n", "import type { ProviderMetadata } from '@hub3js/core';\n\nimport { LegacyNetworks } from '@rango-dev/wallets-core/legacy';\nimport { Networks } from '@rango-dev/wallets-shared';\nimport {\n type BlockchainMeta,\n solanaBlockchain,\n type TransferBlockchainMeta,\n} from 'rango-types';\n\nimport getSigners from './signer.js';\nimport { getInstanceOrThrow } from './utils.js';\n\nexport const WALLET_ID = 'okx';\nexport const OKX_WALLET_SUPPORTED_CHAINS = [\n LegacyNetworks.ETHEREUM,\n LegacyNetworks.BSC,\n LegacyNetworks.POLYGON,\n LegacyNetworks.FANTOM,\n LegacyNetworks.ARBITRUM,\n LegacyNetworks.OPTIMISM,\n LegacyNetworks.CRONOS,\n LegacyNetworks.BOBA,\n LegacyNetworks.GNOSIS,\n LegacyNetworks.MOONBEAM,\n LegacyNetworks.MOONRIVER,\n LegacyNetworks.HARMONY,\n LegacyNetworks.AVAX_CCHAIN,\n];\n\nexport const metadata: ProviderMetadata = {\n name: 'OKX',\n icon: 'https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/okx/icon.svg',\n extensions: {\n chrome:\n 'https://chrome.google.com/webstore/detail/okx-wallet/mcohilncbfahbmgdjkbpemcciiolgcge',\n brave:\n 'https://chrome.google.com/webstore/detail/okx-wallet/mcohilncbfahbmgdjkbpemcciiolgcge',\n firefox: 'https://addons.mozilla.org/en-US/firefox/addon/okexwallet',\n homepage: 'https://www.okx.com/web3',\n },\n properties: [\n {\n name: 'namespaces',\n value: {\n selection: 'multiple',\n data: [\n {\n label: 'EVM',\n value: 'EVM',\n id: 'ETH',\n getSupportedChains: (allBlockchains: BlockchainMeta[]) =>\n allBlockchains.filter((blockchainMeta) =>\n OKX_WALLET_SUPPORTED_CHAINS.includes(\n blockchainMeta.name as LegacyNetworks\n )\n ),\n },\n {\n label: 'Solana',\n value: 'Solana',\n id: 'SOLANA',\n getSupportedChains: (allBlockchains: BlockchainMeta[]) =>\n solanaBlockchain(allBlockchains),\n },\n {\n label: 'BTC',\n value: 'UTXO',\n id: 'BTC',\n getSupportedChains: (allBlockchains: BlockchainMeta[]) =>\n allBlockchains.filter(\n (chain): chain is TransferBlockchainMeta =>\n chain.name === Networks.BTC\n ),\n },\n ],\n },\n },\n {\n name: 'signers',\n value: { getSigners: async () => getSigners(getInstanceOrThrow()) },\n },\n ],\n};\n", "import type { Provider } from './types.js';\nimport type { SignerFactory } from 'rango-types';\n\nimport {\n EVM_NAMESPACE,\n SOLANA_NAMESPACE,\n UTXO_NAMESPACE,\n} from '@hub3js/namespaces';\nimport {\n dynamicImportWithRefinedError,\n getNetworkInstance,\n} from '@rango-dev/wallets-shared';\nimport { DefaultSignerFactory, TransactionType as TxType } from 'rango-types';\n\nimport { OKXSolanaSigner } from './signers/solana.js';\nimport { OKXUTXOSigner } from './signers/utxo.js';\n\nexport default async function getSigners(\n provider: Provider\n): Promise<SignerFactory> {\n const ethProvider = getNetworkInstance(provider, EVM_NAMESPACE);\n const solProvider = getNetworkInstance(provider, SOLANA_NAMESPACE);\n const utxoProvider = getNetworkInstance(provider, UTXO_NAMESPACE);\n\n const signers = new DefaultSignerFactory();\n const { DefaultEvmSigner } = await dynamicImportWithRefinedError(\n async () => await import('@rango-dev/signer-evm')\n );\n signers.registerSigner(TxType.EVM, new DefaultEvmSigner(ethProvider));\n signers.registerSigner(TxType.SOLANA, new OKXSolanaSigner(solProvider));\n signers.registerSigner(TxType.TRANSFER, new OKXUTXOSigner(utxoProvider));\n\n return signers;\n}\n", "import {\n DefaultSolanaSigner,\n type SolanaExternalProvider,\n} from '@rango-dev/signer-solana';\nimport { SignerError, SignerErrorCode } from 'rango-types';\n\nexport class OKXSolanaSigner extends DefaultSolanaSigner {\n constructor(provider: SolanaExternalProvider) {\n super(provider);\n }\n\n async signMessage(msg: string): Promise<string> {\n try {\n const { signature } = await this.provider.request({\n method: 'signMessage',\n params: {\n message: msg,\n },\n });\n return signature;\n } catch (error) {\n throw new SignerError(SignerErrorCode.SIGN_TX_ERROR, undefined, error);\n }\n }\n}\n", "import type { ProviderAPI } from '@rango-dev/wallets-core/namespaces/utxo';\nimport type { GenericSigner, Transfer } from 'rango-types';\n\nimport { Networks } from '@rango-dev/wallets-shared';\nimport { SignerError } from 'rango-types';\n\nexport class OKXUTXOSigner implements GenericSigner<Transfer> {\n private provider: ProviderAPI;\n constructor(provider: ProviderAPI) {\n this.provider = provider;\n }\n\n async signMessage(): Promise<string> {\n throw SignerError.UnimplementedError('signMessage');\n }\n\n async signAndSendTx(tx: Transfer): Promise<{ hash: string }> {\n const { asset, psbt } = tx;\n if (!psbt) {\n throw new Error(\n 'No PSBT found to sign. Ensure a valid PSBT is provided.'\n );\n }\n\n if (asset.blockchain !== Networks.BTC) {\n throw new Error(\n `Signing ${asset.blockchain} transaction is not implemented by the signer.`\n );\n }\n // 1. Decode Base64 to hex\n const psbtHex = Buffer.from(psbt.unsignedPsbtBase64, 'base64').toString(\n 'hex'\n );\n\n // 2. Build UniSat inputs\n const toSignInputs = psbt.inputsToSign.flatMap(\n ({ address, signingIndexes }) =>\n signingIndexes.map((index) => ({ index, address }))\n );\n\n try {\n // 3. Sign (& auto-finalize)\n const signedPsbtHex = await this.provider.signPsbt(psbtHex, {\n autoFinalized: true,\n toSignInputs,\n });\n\n // 4. Push signed psbt\n const transactionHash = await this.provider.pushPsbt(signedPsbtHex);\n\n return { hash: transactionHash };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (error: any) {\n throw new Error(error?.message || 'Error during signing transaction');\n }\n }\n}\n", "import type { OkxBtcAddress, Provider } from './types.js';\nimport type { ProviderAPI as EvmProviderApi } from '@hub3js/evm';\nimport type { ProviderAPI as SolanaProviderApi } from '@hub3js/solana';\nimport type { ProviderAPI as UtxoProviderApi } from '@rango-dev/wallets-core/namespaces/utxo';\n\nimport {\n EVM_NAMESPACE,\n SOLANA_NAMESPACE,\n UTXO_NAMESPACE,\n} from '@hub3js/namespaces';\n\nexport function okx(): Provider | null {\n const { okxwallet } = window;\n if (!okxwallet) {\n return null;\n }\n const instances: Provider = new Map();\n if (okxwallet) {\n instances.set(EVM_NAMESPACE, okxwallet);\n }\n if (okxwallet.solana) {\n instances.set(SOLANA_NAMESPACE, okxwallet.solana);\n }\n if (okxwallet.bitcoin) {\n instances.set(UTXO_NAMESPACE, okxwallet.bitcoin);\n }\n return instances;\n}\n\nexport function getInstanceOrThrow(): Provider {\n const instances = okx();\n\n if (!instances) {\n throw new Error('OKX Wallet is not injected. Please check your wallet.');\n }\n\n return instances;\n}\n\nexport function evmOKX(): EvmProviderApi {\n const instances = okx();\n\n const evmInstance = instances?.get(EVM_NAMESPACE);\n\n if (!evmInstance) {\n throw new Error(\n 'OKX Wallet not injected or EVM not enabled. Please check your wallet.'\n );\n }\n\n return evmInstance as EvmProviderApi;\n}\n\nexport function solanaOKX(): SolanaProviderApi {\n const instance = okx();\n const solanaInstance = instance?.get(SOLANA_NAMESPACE);\n\n if (!solanaInstance) {\n throw new Error(\n 'OKX Wallet not injected or Solana not enabled. Please check your wallet.'\n );\n }\n\n return solanaInstance;\n}\nexport function bitcoinOKX(): UtxoProviderApi {\n const instance = okx();\n const bitcoinInstance = instance?.get(UTXO_NAMESPACE);\n\n if (!bitcoinInstance) {\n throw new Error(\n 'OKX Wallet not injected or Utxo not enabled. Please check your wallet.'\n );\n }\n\n return bitcoinInstance;\n}\nexport async function getBitcoinAccounts(): Promise<OkxBtcAddress> {\n const instance = bitcoinOKX();\n const requestResult = await instance.connect();\n\n if (requestResult.error?.message) {\n throw new Error(requestResult.error.message);\n }\n\n return requestResult;\n}\n", "import type { EvmActions } from '@hub3js/evm';\n\nimport { NamespaceBuilder } from '@hub3js/core';\nimport { actions, builders, utils } from '@hub3js/evm';\nimport * as commonBuilders from '@hub3js/std/builders';\nimport { standardizeAndThrowError } from '@hub3js/std/operators';\n\nimport { WALLET_ID } from '../constants.js';\nimport { evmOKX } from '../utils.js';\n\nconst [changeAccountSubscriber, changeAccountCleanup] = builders\n .changeAccountSubscriber(evmOKX)\n /*\n * Okx wallet may call the `changeAccount` event with `null` value\n * but we shouldn't disconnect in this case.\n */\n .onSwitchAccount((event) => {\n if (!event.payload.length) {\n event.preventDefault();\n }\n })\n .format(async (instance, event) => {\n const chainId = await instance.request({ method: 'eth_chainId' });\n // The wallet may emit a `null` value in its `sent` event.\n return utils.formatAccountsToCAIP(event.filter(Boolean), chainId);\n })\n .build();\nconst connect = builders\n .connect()\n .action(actions.connect(evmOKX))\n .before(changeAccountSubscriber)\n .or(changeAccountCleanup)\n .or(standardizeAndThrowError)\n .build();\n\nconst disconnect = commonBuilders\n .disconnect<EvmActions>()\n .before(() => {\n evmOKX().disconnect();\n })\n .after(changeAccountCleanup)\n .build();\n\nconst canSwitchNetwork = builders\n .canSwitchNetwork()\n .action(actions.canSwitchNetwork())\n .build();\n\nconst canEagerConnect = builders\n .canEagerConnect()\n .action(actions.canEagerConnect(evmOKX))\n .build();\n\nconst getChainId = builders\n .getChainId()\n .action(actions.getChainId(evmOKX))\n .build();\n\nconst evm = new NamespaceBuilder<EvmActions>('EVM', WALLET_ID)\n .action(connect)\n .action(disconnect)\n .action(canEagerConnect)\n .action(canSwitchNetwork)\n .action(getChainId)\n .build();\n\nexport { evm };\n", "import type { SolanaActions } from '@hub3js/solana';\n\nimport { ActionBuilder, NamespaceBuilder } from '@hub3js/core';\nimport { actions, builders, utils } from '@hub3js/solana';\nimport * as commonBuilders from '@hub3js/std/builders';\nimport { standardizeAndThrowError } from '@hub3js/std/operators';\n\nimport { WALLET_ID } from '../constants.js';\nimport { solanaOKX } from '../utils.js';\n\nconst [changeAccountSubscriber, changeAccountCleanup] = builders\n .changeAccountSubscriber(solanaOKX)\n /*\n * Okx wallet may call the `changeAccount` event with `null` value\n * but we shouldn't disconnect in this case.\n */\n .onSwitchAccount((event) => {\n if (!event.payload) {\n event.preventDefault();\n }\n })\n .format(async (_, event) => {\n // The wallet may emit a `null` value in its `sent` event.\n return utils.formatAccountsToCAIP(event ? [event] : []);\n })\n .build();\n\nconst connect = builders\n .connect()\n .action(actions.connect(solanaOKX))\n .before(changeAccountSubscriber)\n .or(changeAccountCleanup)\n .or(standardizeAndThrowError)\n .build();\n\nconst disconnect = commonBuilders\n .disconnect<SolanaActions>()\n .before(() => {\n solanaOKX().disconnect();\n })\n .after(changeAccountCleanup)\n .build();\n\nconst canEagerConnect = new ActionBuilder<SolanaActions, 'canEagerConnect'>(\n 'canEagerConnect'\n)\n .action(actions.canEagerConnect(solanaOKX))\n .build();\n\nconst solana = new NamespaceBuilder<SolanaActions>('Solana', WALLET_ID)\n .action(connect)\n .action(disconnect)\n .action(canEagerConnect)\n .build();\n\nexport { solana };\n", "import { NamespaceBuilder } from '@hub3js/core';\nimport * as commonBuilders from '@hub3js/std/builders';\nimport { standardizeAndThrowError } from '@hub3js/std/operators';\nimport {\n CAIP_BITCOIN_CHAIN_ID,\n utils,\n type UtxoActions,\n} from '@rango-dev/wallets-core/namespaces/utxo';\nimport { builders } from '@rango-dev/wallets-core/namespaces/utxo';\n\nimport { utxoBuilders } from '../builders/utxo.js';\nimport { WALLET_ID } from '../constants.js';\nimport { bitcoinOKX, getBitcoinAccounts } from '../utils.js';\n\nconst [changeAccountSubscriber, changeAccountCleanup] = utxoBuilders\n .changeAccountSubscriber(bitcoinOKX)\n .build();\n\nconst canEagerConnect = utxoBuilders.canEagerConnect(bitcoinOKX).build();\n\nconst connect = builders\n .connect()\n .action(async function () {\n const accountsResult = await getBitcoinAccounts();\n\n if (!accountsResult?.address) {\n throw new Error(\"Couldn't find any address!\");\n }\n return utils.formatAccountsToCAIP(\n [accountsResult.address],\n CAIP_BITCOIN_CHAIN_ID\n );\n })\n .before(changeAccountSubscriber)\n .or(changeAccountCleanup)\n .or(standardizeAndThrowError)\n .build();\n\nconst disconnect = commonBuilders\n .disconnect<UtxoActions>()\n .before(() => {\n bitcoinOKX().disconnect();\n })\n .after(changeAccountCleanup)\n .build();\n\nconst utxo = new NamespaceBuilder<UtxoActions>('UTXO', WALLET_ID)\n .action(connect)\n .action(disconnect)\n .action(canEagerConnect)\n .build();\n\nexport { utxo };\n", "import type { OkxBtcAddress } from '../types.js';\n\nimport { ActionBuilder } from '@hub3js/core';\nimport { ChangeAccountSubscriberBuilder } from '@hub3js/std/hooks';\nimport {\n CAIP_BITCOIN_CHAIN_ID,\n type ProviderAPI,\n utils,\n type UtxoActions,\n} from '@rango-dev/wallets-core/namespaces/utxo';\n\nexport const changeAccountSubscriber = (getInstance: () => ProviderAPI) =>\n new ChangeAccountSubscriberBuilder<OkxBtcAddress, ProviderAPI, UtxoActions>()\n .getInstance(getInstance)\n /*\n * Okx wallet may call the `changeAccount` event with `null` value\n * but we shouldn't disconnect in this case.\n */\n .onSwitchAccount((event) => {\n if (!event.payload?.address) {\n event.preventDefault();\n }\n })\n\n .format(async (_, event) => {\n return utils.formatAccountsToCAIP(\n event ? [event.address] : [],\n CAIP_BITCOIN_CHAIN_ID\n );\n })\n .addEventListener((instance, callback) => {\n return instance.addListener('accountChanged', callback);\n })\n .removeEventListener((instance, callback) => {\n return instance.removeListener('accountChanged', callback);\n });\n\nfunction canEagerConnect(getInstance: () => ProviderAPI) {\n return new ActionBuilder<UtxoActions, 'canEagerConnect'>(\n 'canEagerConnect'\n ).action(async () => {\n const instance = getInstance();\n try {\n const accounts = await instance.getAccounts();\n return !!accounts.length;\n } catch {\n return false;\n }\n });\n}\n\nexport const utxoBuilders = { changeAccountSubscriber, canEagerConnect };\n"],
5
- "mappings": "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",
6
- "names": ["defineVersions", "ProviderBuilder", "LegacyNetworks", "Networks", "solanaBlockchain", "EVM_NAMESPACE", "SOLANA_NAMESPACE", "UTXO_NAMESPACE", "dynamicImportWithRefinedError", "getNetworkInstance", "DefaultSignerFactory", "TxType", "DefaultSolanaSigner", "SignerError", "SignerErrorCode", "OKXSolanaSigner", "DefaultSolanaSigner", "__name", "provider", "msg", "signature", "error", "SignerError", "SignerErrorCode", "Networks", "SignerError", "OKXUTXOSigner", "__name", "provider", "SignerError", "tx", "asset", "psbt", "Networks", "psbtHex", "toSignInputs", "address", "signingIndexes", "index", "signedPsbtHex", "error", "getSigners", "provider", "ethProvider", "getNetworkInstance", "EVM_NAMESPACE", "solProvider", "SOLANA_NAMESPACE", "utxoProvider", "UTXO_NAMESPACE", "signers", "DefaultSignerFactory", "DefaultEvmSigner", "dynamicImportWithRefinedError", "TxType", "OKXSolanaSigner", "OKXUTXOSigner", "__name", "EVM_NAMESPACE", "SOLANA_NAMESPACE", "UTXO_NAMESPACE", "okx", "okxwallet", "instances", "EVM_NAMESPACE", "SOLANA_NAMESPACE", "UTXO_NAMESPACE", "__name", "getInstanceOrThrow", "evmOKX", "evmInstance", "solanaOKX", "solanaInstance", "bitcoinOKX", "bitcoinInstance", "getBitcoinAccounts", "requestResult", "WALLET_ID", "OKX_WALLET_SUPPORTED_CHAINS", "LegacyNetworks", "metadata", "allBlockchains", "blockchainMeta", "solanaBlockchain", "chain", "Networks", "getSigners", "getInstanceOrThrow", "NamespaceBuilder", "actions", "builders", "utils", "commonBuilders", "standardizeAndThrowError", "changeAccountSubscriber", "changeAccountCleanup", "builders", "evmOKX", "event", "instance", "chainId", "utils", "connect", "actions", "standardizeAndThrowError", "disconnect", "canSwitchNetwork", "canEagerConnect", "getChainId", "evm", "NamespaceBuilder", "WALLET_ID", "ActionBuilder", "NamespaceBuilder", "actions", "builders", "utils", "commonBuilders", "standardizeAndThrowError", "changeAccountSubscriber", "changeAccountCleanup", "builders", "solanaOKX", "event", "_", "utils", "connect", "actions", "standardizeAndThrowError", "disconnect", "canEagerConnect", "ActionBuilder", "solana", "NamespaceBuilder", "WALLET_ID", "NamespaceBuilder", "commonBuilders", "standardizeAndThrowError", "CAIP_BITCOIN_CHAIN_ID", "utils", "builders", "ActionBuilder", "ChangeAccountSubscriberBuilder", "CAIP_BITCOIN_CHAIN_ID", "utils", "changeAccountSubscriber", "__name", "getInstance", "ChangeAccountSubscriberBuilder", "event", "_", "utils", "CAIP_BITCOIN_CHAIN_ID", "instance", "callback", "canEagerConnect", "ActionBuilder", "utxoBuilders", "changeAccountSubscriber", "changeAccountCleanup", "utxoBuilders", "bitcoinOKX", "canEagerConnect", "connect", "builders", "accountsResult", "getBitcoinAccounts", "utils", "CAIP_BITCOIN_CHAIN_ID", "standardizeAndThrowError", "disconnect", "utxo", "NamespaceBuilder", "WALLET_ID", "buildProvider", "__name", "ProviderBuilder", "WALLET_ID", "context", "setState", "okx", "metadata", "solana", "evm", "utxo", "versions", "__name", "defineVersions", "buildProvider"]
3
+ "sources": ["../src/mod.ts", "../src/provider.ts", "../src/constants.ts", "../src/signer.ts", "../src/signers/solana.ts", "../src/signers/ton.ts", "../src/namespaces/ton/utils.ts", "../src/signers/utxo.ts", "../src/utils.ts", "../src/namespaces/evm.ts", "../src/namespaces/solana.ts", "../src/namespaces/ton/ton.ts", "../src/actions/ton.ts", "../src/builders/ton.ts", "../src/namespaces/utxo.ts", "../src/builders/utxo.ts"],
4
+ "sourcesContent": ["import { defineVersions } from '@hub3js/core/utils';\n\nimport { buildProvider } from './provider.js';\n\nconst versions = () =>\n defineVersions().version('1.0.0', buildProvider()).build();\n\nexport { versions };\n", "import type { Environments } from './namespaces/ton/types.js';\n\nimport { ProviderBuilder } from '@hub3js/core';\n\nimport { metadata, WALLET_ID } from './constants.js';\nimport { evm } from './namespaces/evm.js';\nimport { solana } from './namespaces/solana.js';\nimport { ton } from './namespaces/ton/ton.js';\nimport { setEnvironments } from './namespaces/ton/utils.js';\nimport { utxo } from './namespaces/utxo.js';\nimport { okx as okxInstance } from './utils.js';\n\nconst buildProvider = () =>\n new ProviderBuilder(WALLET_ID)\n .init(function (context, environments?: Environments) {\n setEnvironments(environments);\n const [, setState] = context.state();\n\n if (okxInstance()) {\n setState('installed', true);\n console.debug('[okx] instance detected.', context);\n }\n })\n .config('metadata', metadata)\n .add('solana', solana)\n .add('evm', evm)\n .add('utxo', utxo)\n .add('ton', ton)\n\n .build();\n\nexport { buildProvider };\n", "import type { ProviderMetadata } from '@hub3js/core';\n\nimport { LegacyNetworks } from '@rango-dev/wallets-core/legacy';\nimport { Networks } from '@rango-dev/wallets-shared';\nimport {\n type BlockchainMeta,\n solanaBlockchain,\n tonBlockchain,\n type TransferBlockchainMeta,\n} from 'rango-types';\n\nimport getSigners from './signer.js';\nimport { getInstanceOrThrow } from './utils.js';\n\nexport const WALLET_ID = 'okx';\nexport const TON_CONNECT_PROTOCOL_VERSION = 2;\nexport const TON_CONNECT_USER_REJECTED_CODE = 300;\n\nexport const OKX_WALLET_SUPPORTED_CHAINS = [\n LegacyNetworks.ETHEREUM,\n LegacyNetworks.BSC,\n LegacyNetworks.POLYGON,\n LegacyNetworks.FANTOM,\n LegacyNetworks.ARBITRUM,\n LegacyNetworks.OPTIMISM,\n LegacyNetworks.CRONOS,\n LegacyNetworks.BOBA,\n LegacyNetworks.GNOSIS,\n LegacyNetworks.MOONBEAM,\n LegacyNetworks.MOONRIVER,\n LegacyNetworks.HARMONY,\n LegacyNetworks.AVAX_CCHAIN,\n];\n\nexport const metadata: ProviderMetadata = {\n name: 'OKX',\n icon: 'https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/okx/icon.svg',\n extensions: {\n chrome:\n 'https://chrome.google.com/webstore/detail/okx-wallet/mcohilncbfahbmgdjkbpemcciiolgcge',\n brave:\n 'https://chrome.google.com/webstore/detail/okx-wallet/mcohilncbfahbmgdjkbpemcciiolgcge',\n firefox: 'https://addons.mozilla.org/en-US/firefox/addon/okexwallet',\n homepage: 'https://www.okx.com/web3',\n },\n properties: [\n {\n name: 'namespaces',\n value: {\n selection: 'multiple',\n data: [\n {\n label: 'EVM',\n value: 'EVM',\n id: 'ETH',\n getSupportedChains: (allBlockchains: BlockchainMeta[]) =>\n allBlockchains.filter((blockchainMeta) =>\n OKX_WALLET_SUPPORTED_CHAINS.includes(\n blockchainMeta.name as LegacyNetworks\n )\n ),\n },\n {\n label: 'Solana',\n value: 'Solana',\n id: 'SOLANA',\n getSupportedChains: (allBlockchains: BlockchainMeta[]) =>\n solanaBlockchain(allBlockchains),\n },\n {\n label: 'BTC',\n value: 'UTXO',\n id: 'BTC',\n getSupportedChains: (allBlockchains: BlockchainMeta[]) =>\n allBlockchains.filter(\n (chain): chain is TransferBlockchainMeta =>\n chain.name === Networks.BTC\n ),\n },\n {\n label: 'Ton',\n value: 'Ton',\n id: 'TON',\n getSupportedChains: (allBlockchains: BlockchainMeta[]) =>\n tonBlockchain(allBlockchains),\n },\n ],\n },\n },\n {\n name: 'signers',\n value: { getSigners: async () => getSigners(getInstanceOrThrow()) },\n },\n ],\n};\n", "import type { Provider } from './types.js';\nimport type { SignerFactory } from 'rango-types';\n\nimport {\n EVM_NAMESPACE,\n SOLANA_NAMESPACE,\n UTXO_NAMESPACE,\n TON_NAMESPACE,\n} from '@hub3js/namespaces';\nimport {\n dynamicImportWithRefinedError,\n getNetworkInstance,\n} from '@rango-dev/wallets-shared';\nimport { DefaultSignerFactory, TransactionType as TxType } from 'rango-types';\n\nimport { OKXSolanaSigner } from './signers/solana.js';\nimport { OKXTonSigner } from './signers/ton.js';\nimport { OKXUTXOSigner } from './signers/utxo.js';\n\nexport default async function getSigners(\n provider: Provider\n): Promise<SignerFactory> {\n const ethProvider = getNetworkInstance(provider, EVM_NAMESPACE);\n const solProvider = getNetworkInstance(provider, SOLANA_NAMESPACE);\n const utxoProvider = getNetworkInstance(provider, UTXO_NAMESPACE);\n const tonProvider = getNetworkInstance(provider, TON_NAMESPACE);\n\n const signers = new DefaultSignerFactory();\n const { DefaultEvmSigner } = await dynamicImportWithRefinedError(\n async () => await import('@rango-dev/signer-evm')\n );\n signers.registerSigner(TxType.EVM, new DefaultEvmSigner(ethProvider));\n signers.registerSigner(TxType.SOLANA, new OKXSolanaSigner(solProvider));\n signers.registerSigner(TxType.TRANSFER, new OKXUTXOSigner(utxoProvider));\n signers.registerSigner(TxType.TON, new OKXTonSigner(tonProvider));\n\n return signers;\n}\n", "import {\n DefaultSolanaSigner,\n type SolanaExternalProvider,\n} from '@rango-dev/signer-solana';\nimport { SignerError, SignerErrorCode } from 'rango-types';\n\nexport class OKXSolanaSigner extends DefaultSolanaSigner {\n constructor(provider: SolanaExternalProvider) {\n super(provider);\n }\n\n async signMessage(msg: string): Promise<string> {\n try {\n const { signature } = await this.provider.request({\n method: 'signMessage',\n params: {\n message: msg,\n },\n });\n return signature;\n } catch (error) {\n throw new SignerError(SignerErrorCode.SIGN_TX_ERROR, undefined, error);\n }\n }\n}\n", "import type {\n TonConnectWalletResponseError,\n TonProviderApi,\n} from '../namespaces/ton/types.js';\nimport type { GenericSigner, TonTransaction } from 'rango-types';\n\nimport { dynamicImportWithRefinedError } from '@rango-dev/wallets-shared';\nimport { SignerError, SignerErrorCode, TonChainID } from 'rango-types';\n\nimport { TON_CONNECT_USER_REJECTED_CODE } from '../constants.js';\nimport { nextTonRequestId } from '../namespaces/ton/utils.js';\n\nfunction toSignerError(response: TonConnectWalletResponseError): SignerError {\n const code =\n response.error.code === TON_CONNECT_USER_REJECTED_CODE\n ? SignerErrorCode.REJECTED_BY_USER\n : SignerErrorCode.SEND_TX_ERROR;\n return new SignerError(code, response.error.message, response.error);\n}\n\nexport class OKXTonSigner implements GenericSigner<TonTransaction> {\n private provider: TonProviderApi;\n\n constructor(provider: TonProviderApi) {\n this.provider = provider;\n }\n\n async signMessage(): Promise<string> {\n throw SignerError.UnimplementedError('signMessage');\n }\n\n async signAndSendTx(tx: TonTransaction): Promise<{ hash: string }> {\n const { validUntil, network, from, messages } = tx;\n\n const { Address, Cell } = await dynamicImportWithRefinedError(\n async () => await import('@ton/core')\n );\n\n const transactionPayload = {\n valid_until: validUntil,\n network: network ?? TonChainID.MAINNET,\n ...(from && { from: Address.parse(from).toRawString() }),\n messages: messages.map(({ stateInit, payload, ...message }) => ({\n ...message,\n ...(stateInit != null && { stateInit }),\n ...(payload != null && { payload }),\n })),\n };\n\n try {\n const response = await this.provider.send({\n method: 'sendTransaction',\n params: [JSON.stringify(transactionPayload)],\n id: nextTonRequestId(),\n });\n\n if ('error' in response) {\n throw toSignerError(response);\n }\n\n const hash = Cell.fromBase64(response.result).hash().toString('hex');\n return { hash };\n } catch (error) {\n if (error instanceof SignerError) {\n throw error;\n }\n throw new SignerError(SignerErrorCode.SEND_TX_ERROR, undefined, error);\n }\n }\n}\n", "import type {\n Environments,\n TonAddressItemReply,\n TonConnectEvent,\n TonConnectEventSuccess,\n} from './types.js';\nimport type { CaipAccount } from '@rango-dev/wallets-core/namespaces/common';\n\nimport { utils as tonCoreUtils } from '@rango-dev/wallets-core/namespaces/ton';\nimport { dynamicImportWithRefinedError } from '@rango-dev/wallets-shared';\n\nexport function isTonConnectEventSuccess(\n event: TonConnectEvent\n): event is TonConnectEventSuccess {\n return (\n !!event && event.event === 'connect' && Array.isArray(event.payload?.items)\n );\n}\n\nexport function isTonAddressItemReply(\n item: unknown\n): item is TonAddressItemReply {\n return (\n typeof item === 'object' &&\n item !== null &&\n 'name' in item &&\n item.name === 'ton_addr' &&\n 'address' in item &&\n typeof item.address === 'string'\n );\n}\n\nlet environments: Environments | undefined;\n\nexport function setEnvironments(env?: Environments) {\n environments = env;\n}\n\nexport function getTonConnectManifestUrl(): string {\n const manifestUrl = environments?.tonConnectManifestUrl;\n if (!manifestUrl) {\n throw new Error(\n 'OKX TON requires a TonConnect manifest URL. Please provide it through the provider environments.'\n );\n }\n return manifestUrl;\n}\n\nlet tonRequestId = 0;\n\n// TonConnect requires a unique string `id` on every request sent to the bridge.\nexport function nextTonRequestId(): string {\n tonRequestId += 1;\n return tonRequestId.toString();\n}\n\n// Convert a `ConnectEvent`'s raw `<workchain>:<hex>` address to user-friendly CAIP.\nexport async function connectEventToCAIP(\n connectEvent: TonConnectEvent\n): Promise<CaipAccount[]> {\n if (!isTonConnectEventSuccess(connectEvent)) {\n return tonCoreUtils.formatAccountsToCAIP([]);\n }\n\n const addressItem = connectEvent.payload.items.find(isTonAddressItemReply);\n if (!addressItem) {\n return tonCoreUtils.formatAccountsToCAIP([]);\n }\n\n const { Address } = await dynamicImportWithRefinedError(\n async () => await import('@ton/core')\n );\n const userFriendlyAddress = Address.parseRaw(addressItem.address).toString({\n bounceable: false,\n urlSafe: true,\n });\n\n return tonCoreUtils.formatAccountsToCAIP([userFriendlyAddress]);\n}\n", "import type { ProviderAPI } from '@rango-dev/wallets-core/namespaces/utxo';\nimport type { GenericSigner, Transfer } from 'rango-types';\n\nimport { Networks } from '@rango-dev/wallets-shared';\nimport { SignerError } from 'rango-types';\n\nexport class OKXUTXOSigner implements GenericSigner<Transfer> {\n private provider: ProviderAPI;\n constructor(provider: ProviderAPI) {\n this.provider = provider;\n }\n\n async signMessage(): Promise<string> {\n throw SignerError.UnimplementedError('signMessage');\n }\n\n async signAndSendTx(tx: Transfer): Promise<{ hash: string }> {\n const { asset, psbt } = tx;\n if (!psbt) {\n throw new Error(\n 'No PSBT found to sign. Ensure a valid PSBT is provided.'\n );\n }\n\n if (asset.blockchain !== Networks.BTC) {\n throw new Error(\n `Signing ${asset.blockchain} transaction is not implemented by the signer.`\n );\n }\n // 1. Decode Base64 to hex\n const psbtHex = Buffer.from(psbt.unsignedPsbtBase64, 'base64').toString(\n 'hex'\n );\n\n // 2. Build UniSat inputs\n const toSignInputs = psbt.inputsToSign.flatMap(\n ({ address, signingIndexes }) =>\n signingIndexes.map((index) => ({ index, address }))\n );\n\n try {\n // 3. Sign (& auto-finalize)\n const signedPsbtHex = await this.provider.signPsbt(psbtHex, {\n autoFinalized: true,\n toSignInputs,\n });\n\n // 4. Push signed psbt\n const transactionHash = await this.provider.pushPsbt(signedPsbtHex);\n\n return { hash: transactionHash };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (error: any) {\n throw new Error(error?.message || 'Error during signing transaction');\n }\n }\n}\n", "import type { TonProviderApi } from './namespaces/ton/types.js';\nimport type { OkxBtcAddress, Provider } from './types.js';\nimport type { ProviderAPI as EvmProviderApi } from '@hub3js/evm';\nimport type { ProviderAPI as SolanaProviderApi } from '@hub3js/solana';\nimport type { ProviderAPI as UtxoProviderApi } from '@rango-dev/wallets-core/namespaces/utxo';\n\nimport {\n EVM_NAMESPACE,\n SOLANA_NAMESPACE,\n UTXO_NAMESPACE,\n TON_NAMESPACE,\n} from '@hub3js/namespaces';\n\nexport function okx(): Provider | null {\n const { okxwallet, okxTonWallet } = window;\n if (!okxwallet && !okxTonWallet) {\n return null;\n }\n const instances: Provider = new Map();\n if (okxwallet) {\n instances.set(EVM_NAMESPACE, okxwallet);\n }\n if (okxwallet.solana) {\n instances.set(SOLANA_NAMESPACE, okxwallet.solana);\n }\n if (okxwallet.bitcoin) {\n instances.set(UTXO_NAMESPACE, okxwallet.bitcoin);\n }\n if (okxTonWallet?.tonconnect) {\n instances.set(TON_NAMESPACE, okxTonWallet.tonconnect);\n }\n return instances;\n}\n\nexport function getInstanceOrThrow(): Provider {\n const instances = okx();\n\n if (!instances) {\n throw new Error('OKX Wallet is not injected. Please check your wallet.');\n }\n\n return instances;\n}\n\nexport function evmOKX(): EvmProviderApi {\n const instances = okx();\n\n const evmInstance = instances?.get(EVM_NAMESPACE);\n\n if (!evmInstance) {\n throw new Error(\n 'OKX Wallet not injected or EVM not enabled. Please check your wallet.'\n );\n }\n\n return evmInstance as EvmProviderApi;\n}\n\nexport function solanaOKX(): SolanaProviderApi {\n const instance = okx();\n const solanaInstance = instance?.get(SOLANA_NAMESPACE);\n\n if (!solanaInstance) {\n throw new Error(\n 'OKX Wallet not injected or Solana not enabled. Please check your wallet.'\n );\n }\n\n return solanaInstance;\n}\nexport function bitcoinOKX(): UtxoProviderApi {\n const instance = okx();\n const bitcoinInstance = instance?.get(UTXO_NAMESPACE);\n\n if (!bitcoinInstance) {\n throw new Error(\n 'OKX Wallet not injected or Utxo not enabled. Please check your wallet.'\n );\n }\n\n return bitcoinInstance;\n}\n\nexport function tonOKX(): TonProviderApi {\n const instance = okx();\n const tonInstance = instance?.get(TON_NAMESPACE);\n\n if (!tonInstance) {\n throw new Error(\n 'OKX Wallet not injected or TON not enabled. Please check your wallet.'\n );\n }\n\n return tonInstance as TonProviderApi;\n}\n\nexport async function getBitcoinAccounts(): Promise<OkxBtcAddress> {\n const instance = bitcoinOKX();\n const requestResult = await instance.connect();\n\n if (requestResult.error?.message) {\n throw new Error(requestResult.error.message);\n }\n\n return requestResult;\n}\n", "import type { EvmActions } from '@hub3js/evm';\n\nimport { NamespaceBuilder } from '@hub3js/core';\nimport { actions, builders, utils } from '@hub3js/evm';\nimport * as commonBuilders from '@hub3js/std/builders';\nimport { standardizeAndThrowError } from '@hub3js/std/operators';\n\nimport { WALLET_ID } from '../constants.js';\nimport { evmOKX } from '../utils.js';\n\nconst [changeAccountSubscriber, changeAccountCleanup] = builders\n .changeAccountSubscriber(evmOKX)\n /*\n * Okx wallet may call the `changeAccount` event with `null` value\n * but we shouldn't disconnect in this case.\n */\n .onSwitchAccount((event) => {\n if (!event.payload.length) {\n event.preventDefault();\n }\n })\n .format(async (instance, event) => {\n const chainId = await instance.request({ method: 'eth_chainId' });\n // The wallet may emit a `null` value in its `sent` event.\n return utils.formatAccountsToCAIP(event.filter(Boolean), chainId);\n })\n .build();\nconst connect = builders\n .connect()\n .action(actions.connect(evmOKX))\n .before(changeAccountSubscriber)\n .or(changeAccountCleanup)\n .or(standardizeAndThrowError)\n .build();\n\nconst disconnect = commonBuilders\n .disconnect<EvmActions>()\n .before(() => {\n evmOKX().disconnect();\n })\n .after(changeAccountCleanup)\n .build();\n\nconst canSwitchNetwork = builders\n .canSwitchNetwork()\n .action(actions.canSwitchNetwork())\n .build();\n\nconst canEagerConnect = builders\n .canEagerConnect()\n .action(actions.canEagerConnect(evmOKX))\n .build();\n\nconst getChainId = builders\n .getChainId()\n .action(actions.getChainId(evmOKX))\n .build();\n\nconst evm = new NamespaceBuilder<EvmActions>('EVM', WALLET_ID)\n .action(connect)\n .action(disconnect)\n .action(canEagerConnect)\n .action(canSwitchNetwork)\n .action(getChainId)\n .build();\n\nexport { evm };\n", "import type { SolanaActions } from '@hub3js/solana';\n\nimport { ActionBuilder, NamespaceBuilder } from '@hub3js/core';\nimport { actions, builders, utils } from '@hub3js/solana';\nimport * as commonBuilders from '@hub3js/std/builders';\nimport { standardizeAndThrowError } from '@hub3js/std/operators';\n\nimport { WALLET_ID } from '../constants.js';\nimport { solanaOKX } from '../utils.js';\n\nconst [changeAccountSubscriber, changeAccountCleanup] = builders\n .changeAccountSubscriber(solanaOKX)\n /*\n * Okx wallet may call the `changeAccount` event with `null` value\n * but we shouldn't disconnect in this case.\n */\n .onSwitchAccount((event) => {\n if (!event.payload) {\n event.preventDefault();\n }\n })\n .format(async (_, event) => {\n // The wallet may emit a `null` value in its `sent` event.\n return utils.formatAccountsToCAIP(event ? [event] : []);\n })\n .build();\n\nconst connect = builders\n .connect()\n .action(actions.connect(solanaOKX))\n .before(changeAccountSubscriber)\n .or(changeAccountCleanup)\n .or(standardizeAndThrowError)\n .build();\n\nconst disconnect = commonBuilders\n .disconnect<SolanaActions>()\n .before(() => {\n solanaOKX().disconnect();\n })\n .after(changeAccountCleanup)\n .build();\n\nconst canEagerConnect = new ActionBuilder<SolanaActions, 'canEagerConnect'>(\n 'canEagerConnect'\n)\n .action(actions.canEagerConnect(solanaOKX))\n .build();\n\nconst solana = new NamespaceBuilder<SolanaActions>('Solana', WALLET_ID)\n .action(connect)\n .action(disconnect)\n .action(canEagerConnect)\n .build();\n\nexport { solana };\n", "import { NamespaceBuilder } from '@hub3js/core';\nimport * as commonBuilders from '@hub3js/std/builders';\nimport { standardizeAndThrowError } from '@hub3js/std/operators';\nimport {\n builders,\n type TonActions,\n} from '@rango-dev/wallets-core/namespaces/ton';\n\nimport { tonActions } from '../../actions/ton.js';\nimport { tonBuilders } from '../../builders/ton.js';\nimport { WALLET_ID } from '../../constants.js';\nimport { tonOKX } from '../../utils.js';\n\nconst [changeAccountSubscriber, changeAccountCleanup] = tonBuilders\n .changeAccountSubscriber(tonOKX)\n .build();\n\nconst [walletDisconnectSubscriber, walletDisconnectCleanup] = tonBuilders\n .disconnectSubscriber(tonOKX)\n .build();\n\nconst connect = builders\n .connect()\n .action(tonActions.connect(tonOKX))\n .before(changeAccountSubscriber)\n .before(walletDisconnectSubscriber)\n .or(walletDisconnectCleanup)\n .or(changeAccountCleanup)\n .or(standardizeAndThrowError)\n .build();\n\nconst disconnect = commonBuilders\n .disconnect<TonActions>()\n .before(tonActions.disconnect(tonOKX))\n .after(changeAccountCleanup)\n .after(walletDisconnectCleanup)\n .build();\n\nconst canEagerConnect = builders\n .canEagerConnect()\n .action(tonActions.canEagerConnect(tonOKX))\n .build();\n\nconst ton = new NamespaceBuilder<TonActions>('Ton', WALLET_ID)\n .action(connect)\n .action(disconnect)\n .action(canEagerConnect)\n .build();\n\nexport { ton };\n", "import type {\n TonConnectEvent,\n TonProviderApi,\n} from '../namespaces/ton/types.js';\nimport type { Context, FunctionWithContext } from '@hub3js/core';\n\nimport { type TonActions } from '@rango-dev/wallets-core/namespaces/ton';\n\nimport {\n TON_CONNECT_PROTOCOL_VERSION,\n TON_CONNECT_USER_REJECTED_CODE,\n} from '../constants.js';\nimport {\n connectEventToCAIP,\n getTonConnectManifestUrl,\n isTonConnectEventSuccess,\n nextTonRequestId,\n} from '../namespaces/ton/utils.js';\n\nexport function connect(\n getInstance: () => TonProviderApi\n): FunctionWithContext<TonActions['connect'], Context> {\n return async () => {\n const instance = getInstance();\n\n /*\n * If the dApp was approved before, `restoreConnection` resolves the current\n * session without prompting the user; otherwise fall back to a fresh\n * connect request.\n */\n let connectEvent: TonConnectEvent | undefined;\n try {\n connectEvent = await instance.restoreConnection();\n } catch {\n // No restorable session; a fresh connect request is made below.\n }\n\n if (!connectEvent || !isTonConnectEventSuccess(connectEvent)) {\n connectEvent = await instance.connect(TON_CONNECT_PROTOCOL_VERSION, {\n manifestUrl: getTonConnectManifestUrl(),\n items: [{ name: 'ton_addr' }],\n });\n }\n\n if (!isTonConnectEventSuccess(connectEvent)) {\n // The bridge reports a user-cancelled prompt as a `connect_error` event.\n if (connectEvent.payload.code === TON_CONNECT_USER_REJECTED_CODE) {\n throw new Error('User rejected the request.');\n }\n throw new Error(\n `Couldn't connect to OKX TON. code: ${connectEvent.payload.code}, message: ${connectEvent.payload.message}`\n );\n }\n\n const accounts = await connectEventToCAIP(connectEvent);\n if (!accounts.length) {\n throw new Error(\"Couldn't find any TON address!\");\n }\n\n return accounts;\n };\n}\n\nexport function canEagerConnect(\n getInstance: () => TonProviderApi\n): FunctionWithContext<TonActions['canEagerConnect'], Context> {\n return async () => {\n /*\n * Auto connect may run this before the wallet is injected; it should never\n * throw.\n */\n try {\n const connectEvent = await getInstance().restoreConnection();\n return isTonConnectEventSuccess(connectEvent);\n } catch {\n return false;\n }\n };\n}\n\nexport function disconnect(getInstance: () => TonProviderApi) {\n return async () => {\n /*\n * Revoking the session on the wallet side is best effort; local state\n * cleanup should proceed even if it fails.\n */\n try {\n await getInstance().send({\n method: 'disconnect',\n params: [],\n id: nextTonRequestId(),\n });\n } catch {\n // ignore\n }\n };\n}\n\nexport const tonActions = { connect, canEagerConnect, disconnect };\n", "import type { TonProviderApi } from '../namespaces/ton/types.js';\n\nimport { ChangeAccountSubscriberBuilder } from '@hub3js/std/hooks';\nimport { type TonActions, utils } from '@rango-dev/wallets-core/namespaces/ton';\n\nimport { connectEventToCAIP } from '../namespaces/ton/utils.js';\n\n/*\n * OKX emits its non-standard `accountChanged` event without a documented\n * payload, so the switched address can't be read from the event. Because the\n * bridge is standard TON Connect, `format` re-reads the active account from the\n * instance via `restoreConnection` instead\n */\nexport const changeAccountSubscriber = (getInstance: () => TonProviderApi) =>\n new ChangeAccountSubscriberBuilder<unknown, TonProviderApi, TonActions>()\n .getInstance(getInstance)\n .format(async (instance) => {\n try {\n const connectEvent = await instance.restoreConnection();\n return await connectEventToCAIP(connectEvent);\n } catch {\n // No active session after the switch \u2014 treat as disconnected.\n return utils.formatAccountsToCAIP([]);\n }\n })\n .addEventListener((instance, callback) => {\n instance.on('accountChanged', callback);\n })\n .removeEventListener((instance, callback) => {\n instance.off('accountChanged', callback);\n });\n\nexport const disconnectSubscriber = (getInstance: () => TonProviderApi) =>\n new ChangeAccountSubscriberBuilder<unknown, TonProviderApi, TonActions>()\n .getInstance(getInstance)\n .onSwitchAccount((event, context) => {\n event.preventDefault();\n void context.action('disconnect');\n })\n .format(async () => [])\n .addEventListener((instance, callback) => {\n instance.on('disconnect', callback);\n })\n .removeEventListener((instance, callback) => {\n instance.off('disconnect', callback);\n });\n\nexport const tonBuilders = { changeAccountSubscriber, disconnectSubscriber };\n", "import { NamespaceBuilder } from '@hub3js/core';\nimport * as commonBuilders from '@hub3js/std/builders';\nimport { standardizeAndThrowError } from '@hub3js/std/operators';\nimport {\n CAIP_BITCOIN_CHAIN_ID,\n utils,\n type UtxoActions,\n} from '@rango-dev/wallets-core/namespaces/utxo';\nimport { builders } from '@rango-dev/wallets-core/namespaces/utxo';\n\nimport { utxoBuilders } from '../builders/utxo.js';\nimport { WALLET_ID } from '../constants.js';\nimport { bitcoinOKX, getBitcoinAccounts } from '../utils.js';\n\nconst [changeAccountSubscriber, changeAccountCleanup] = utxoBuilders\n .changeAccountSubscriber(bitcoinOKX)\n .build();\n\nconst canEagerConnect = utxoBuilders.canEagerConnect(bitcoinOKX).build();\n\nconst connect = builders\n .connect()\n .action(async function () {\n const accountsResult = await getBitcoinAccounts();\n\n if (!accountsResult?.address) {\n throw new Error(\"Couldn't find any address!\");\n }\n return utils.formatAccountsToCAIP(\n [accountsResult.address],\n CAIP_BITCOIN_CHAIN_ID\n );\n })\n .before(changeAccountSubscriber)\n .or(changeAccountCleanup)\n .or(standardizeAndThrowError)\n .build();\n\nconst disconnect = commonBuilders\n .disconnect<UtxoActions>()\n .before(() => {\n bitcoinOKX().disconnect();\n })\n .after(changeAccountCleanup)\n .build();\n\nconst utxo = new NamespaceBuilder<UtxoActions>('UTXO', WALLET_ID)\n .action(connect)\n .action(disconnect)\n .action(canEagerConnect)\n .build();\n\nexport { utxo };\n", "import type { OkxBtcAddress } from '../types.js';\n\nimport { ActionBuilder } from '@hub3js/core';\nimport { ChangeAccountSubscriberBuilder } from '@hub3js/std/hooks';\nimport {\n CAIP_BITCOIN_CHAIN_ID,\n type ProviderAPI,\n utils,\n type UtxoActions,\n} from '@rango-dev/wallets-core/namespaces/utxo';\n\nexport const changeAccountSubscriber = (getInstance: () => ProviderAPI) =>\n new ChangeAccountSubscriberBuilder<OkxBtcAddress, ProviderAPI, UtxoActions>()\n .getInstance(getInstance)\n /*\n * Okx wallet may call the `changeAccount` event with `null` value\n * but we shouldn't disconnect in this case.\n */\n .onSwitchAccount((event) => {\n if (!event.payload?.address) {\n event.preventDefault();\n }\n })\n\n .format(async (_, event) => {\n return utils.formatAccountsToCAIP(\n event ? [event.address] : [],\n CAIP_BITCOIN_CHAIN_ID\n );\n })\n .addEventListener((instance, callback) => {\n return instance.addListener('accountChanged', callback);\n })\n .removeEventListener((instance, callback) => {\n return instance.removeListener('accountChanged', callback);\n });\n\nfunction canEagerConnect(getInstance: () => ProviderAPI) {\n return new ActionBuilder<UtxoActions, 'canEagerConnect'>(\n 'canEagerConnect'\n ).action(async () => {\n const instance = getInstance();\n try {\n const accounts = await instance.getAccounts();\n return !!accounts.length;\n } catch {\n return false;\n }\n });\n}\n\nexport const utxoBuilders = { changeAccountSubscriber, canEagerConnect };\n"],
5
+ "mappings": "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",
6
+ "names": ["defineVersions", "ProviderBuilder", "LegacyNetworks", "Networks", "solanaBlockchain", "tonBlockchain", "EVM_NAMESPACE", "SOLANA_NAMESPACE", "UTXO_NAMESPACE", "TON_NAMESPACE", "dynamicImportWithRefinedError", "getNetworkInstance", "DefaultSignerFactory", "TxType", "DefaultSolanaSigner", "SignerError", "SignerErrorCode", "OKXSolanaSigner", "DefaultSolanaSigner", "__name", "provider", "msg", "signature", "error", "SignerError", "SignerErrorCode", "dynamicImportWithRefinedError", "SignerError", "SignerErrorCode", "TonChainID", "tonCoreUtils", "dynamicImportWithRefinedError", "isTonConnectEventSuccess", "event", "__name", "isTonAddressItemReply", "item", "environments", "setEnvironments", "env", "getTonConnectManifestUrl", "manifestUrl", "tonRequestId", "nextTonRequestId", "connectEventToCAIP", "connectEvent", "tonCoreUtils", "addressItem", "Address", "dynamicImportWithRefinedError", "userFriendlyAddress", "toSignerError", "response", "code", "TON_CONNECT_USER_REJECTED_CODE", "SignerErrorCode", "SignerError", "__name", "OKXTonSigner", "provider", "tx", "validUntil", "network", "from", "messages", "Address", "Cell", "dynamicImportWithRefinedError", "transactionPayload", "TonChainID", "stateInit", "payload", "message", "nextTonRequestId", "error", "Networks", "SignerError", "OKXUTXOSigner", "__name", "provider", "SignerError", "tx", "asset", "psbt", "Networks", "psbtHex", "toSignInputs", "address", "signingIndexes", "index", "signedPsbtHex", "error", "getSigners", "provider", "ethProvider", "getNetworkInstance", "EVM_NAMESPACE", "solProvider", "SOLANA_NAMESPACE", "utxoProvider", "UTXO_NAMESPACE", "tonProvider", "TON_NAMESPACE", "signers", "DefaultSignerFactory", "DefaultEvmSigner", "dynamicImportWithRefinedError", "TxType", "OKXSolanaSigner", "OKXUTXOSigner", "OKXTonSigner", "__name", "EVM_NAMESPACE", "SOLANA_NAMESPACE", "UTXO_NAMESPACE", "TON_NAMESPACE", "okx", "okxwallet", "okxTonWallet", "instances", "EVM_NAMESPACE", "SOLANA_NAMESPACE", "UTXO_NAMESPACE", "TON_NAMESPACE", "__name", "getInstanceOrThrow", "evmOKX", "evmInstance", "solanaOKX", "solanaInstance", "bitcoinOKX", "bitcoinInstance", "tonOKX", "tonInstance", "getBitcoinAccounts", "requestResult", "WALLET_ID", "TON_CONNECT_PROTOCOL_VERSION", "TON_CONNECT_USER_REJECTED_CODE", "OKX_WALLET_SUPPORTED_CHAINS", "LegacyNetworks", "metadata", "allBlockchains", "blockchainMeta", "solanaBlockchain", "chain", "Networks", "tonBlockchain", "getSigners", "getInstanceOrThrow", "NamespaceBuilder", "actions", "builders", "utils", "commonBuilders", "standardizeAndThrowError", "changeAccountSubscriber", "changeAccountCleanup", "builders", "evmOKX", "event", "instance", "chainId", "utils", "connect", "actions", "standardizeAndThrowError", "disconnect", "canSwitchNetwork", "canEagerConnect", "getChainId", "evm", "NamespaceBuilder", "WALLET_ID", "ActionBuilder", "NamespaceBuilder", "actions", "builders", "utils", "commonBuilders", "standardizeAndThrowError", "changeAccountSubscriber", "changeAccountCleanup", "builders", "solanaOKX", "event", "_", "utils", "connect", "actions", "standardizeAndThrowError", "disconnect", "canEagerConnect", "ActionBuilder", "solana", "NamespaceBuilder", "WALLET_ID", "NamespaceBuilder", "commonBuilders", "standardizeAndThrowError", "builders", "connect", "getInstance", "instance", "connectEvent", "isTonConnectEventSuccess", "TON_CONNECT_PROTOCOL_VERSION", "getTonConnectManifestUrl", "TON_CONNECT_USER_REJECTED_CODE", "accounts", "connectEventToCAIP", "__name", "canEagerConnect", "disconnect", "nextTonRequestId", "tonActions", "ChangeAccountSubscriberBuilder", "utils", "changeAccountSubscriber", "__name", "getInstance", "ChangeAccountSubscriberBuilder", "instance", "connectEvent", "connectEventToCAIP", "utils", "callback", "disconnectSubscriber", "event", "context", "tonBuilders", "changeAccountSubscriber", "changeAccountCleanup", "tonBuilders", "tonOKX", "walletDisconnectSubscriber", "walletDisconnectCleanup", "connect", "builders", "tonActions", "standardizeAndThrowError", "disconnect", "canEagerConnect", "ton", "NamespaceBuilder", "WALLET_ID", "NamespaceBuilder", "commonBuilders", "standardizeAndThrowError", "CAIP_BITCOIN_CHAIN_ID", "utils", "builders", "ActionBuilder", "ChangeAccountSubscriberBuilder", "CAIP_BITCOIN_CHAIN_ID", "utils", "changeAccountSubscriber", "__name", "getInstance", "ChangeAccountSubscriberBuilder", "event", "_", "utils", "CAIP_BITCOIN_CHAIN_ID", "instance", "callback", "canEagerConnect", "ActionBuilder", "utxoBuilders", "changeAccountSubscriber", "changeAccountCleanup", "utxoBuilders", "bitcoinOKX", "canEagerConnect", "connect", "builders", "accountsResult", "getBitcoinAccounts", "utils", "CAIP_BITCOIN_CHAIN_ID", "standardizeAndThrowError", "disconnect", "utxo", "NamespaceBuilder", "WALLET_ID", "buildProvider", "__name", "ProviderBuilder", "WALLET_ID", "context", "environments", "setEnvironments", "setState", "okx", "metadata", "solana", "evm", "utxo", "ton", "versions", "__name", "defineVersions", "buildProvider"]
7
7
  }
@@ -0,0 +1,4 @@
1
+ import { type TonActions } from '@rango-dev/wallets-core/namespaces/ton';
2
+ declare const ton: import("@hub3js/core").ProxiedNamespace<TonActions>;
3
+ export { ton };
4
+ //# sourceMappingURL=ton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ton.d.ts","sourceRoot":"","sources":["../../../src/namespaces/ton/ton.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,UAAU,EAChB,MAAM,wCAAwC,CAAC;AAqChD,QAAA,MAAM,GAAG,qDAIC,CAAC;AAEX,OAAO,EAAE,GAAG,EAAE,CAAC"}
@@ -0,0 +1,65 @@
1
+ export type Environments = {
2
+ tonConnectManifestUrl?: string;
3
+ };
4
+ export type TonAddressItemReply = {
5
+ name: 'ton_addr';
6
+ address: string;
7
+ network: string;
8
+ walletStateInit: string;
9
+ publicKey: string;
10
+ };
11
+ export type TonConnectEventSuccess = {
12
+ event: 'connect';
13
+ id: number;
14
+ payload: {
15
+ items: Array<TonAddressItemReply | {
16
+ name: string;
17
+ }>;
18
+ device: unknown;
19
+ };
20
+ };
21
+ export type TonConnectEventError = {
22
+ event: 'connect_error';
23
+ id: number;
24
+ payload: {
25
+ code: number;
26
+ message: string;
27
+ };
28
+ };
29
+ export type TonConnectEvent = TonConnectEventSuccess | TonConnectEventError;
30
+ export type TonConnectRequest = {
31
+ manifestUrl: string;
32
+ items: Array<{
33
+ name: 'ton_addr';
34
+ }>;
35
+ };
36
+ export type TonConnectAppRequest = {
37
+ method: 'sendTransaction' | 'disconnect';
38
+ params: string[];
39
+ id: string;
40
+ };
41
+ export type TonConnectWalletResponseSuccess = {
42
+ result: string;
43
+ id: string;
44
+ };
45
+ export type TonConnectWalletResponseError = {
46
+ error: {
47
+ code: number;
48
+ message: string;
49
+ data?: unknown;
50
+ };
51
+ id: string;
52
+ };
53
+ export type TonConnectWalletResponse = TonConnectWalletResponseSuccess | TonConnectWalletResponseError;
54
+ export interface TonProviderApi {
55
+ deviceInfo: unknown;
56
+ walletInfo?: unknown;
57
+ protocolVersion: number;
58
+ connect(protocolVersion: number, message: TonConnectRequest): Promise<TonConnectEvent>;
59
+ restoreConnection(): Promise<TonConnectEvent>;
60
+ send(message: TonConnectAppRequest): Promise<TonConnectWalletResponse>;
61
+ listen(callback: (event: unknown) => void): () => void;
62
+ on(event: 'accountChanged' | 'connect' | 'disconnect', callback: (payload?: unknown) => void): void;
63
+ off(event: 'accountChanged' | 'connect' | 'disconnect', callback: (payload?: unknown) => void): void;
64
+ }
65
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/namespaces/ton/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG;IACzB,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC,CAAC;AAOF,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,UAAU,CAAC;IAEjB,OAAO,EAAE,MAAM,CAAC;IAEhB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,KAAK,EAAE,SAAS,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE;QACP,KAAK,EAAE,KAAK,CAAC,mBAAmB,GAAG;YAAE,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACrD,MAAM,EAAE,OAAO,CAAC;KACjB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,eAAe,CAAC;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,sBAAsB,GAAG,oBAAoB,CAAC;AAE5E,MAAM,MAAM,iBAAiB,GAAG;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,UAAU,CAAA;KAAE,CAAC,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,iBAAiB,GAAG,YAAY,CAAC;IACzC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACzD,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAChC,+BAA+B,GAC/B,6BAA6B,CAAC;AAElC,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,CACL,eAAe,EAAE,MAAM,EACvB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,eAAe,CAAC,CAAC;IAC5B,iBAAiB,IAAI,OAAO,CAAC,eAAe,CAAC,CAAC;IAC9C,IAAI,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACvE,MAAM,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAMvD,EAAE,CACA,KAAK,EAAE,gBAAgB,GAAG,SAAS,GAAG,YAAY,EAClD,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,GACpC,IAAI,CAAC;IACR,GAAG,CACD,KAAK,EAAE,gBAAgB,GAAG,SAAS,GAAG,YAAY,EAClD,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,GACpC,IAAI,CAAC;CACT"}
@@ -0,0 +1,9 @@
1
+ import type { Environments, TonAddressItemReply, TonConnectEvent, TonConnectEventSuccess } from './types.js';
2
+ import type { CaipAccount } from '@rango-dev/wallets-core/namespaces/common';
3
+ export declare function isTonConnectEventSuccess(event: TonConnectEvent): event is TonConnectEventSuccess;
4
+ export declare function isTonAddressItemReply(item: unknown): item is TonAddressItemReply;
5
+ export declare function setEnvironments(env?: Environments): void;
6
+ export declare function getTonConnectManifestUrl(): string;
7
+ export declare function nextTonRequestId(): string;
8
+ export declare function connectEventToCAIP(connectEvent: TonConnectEvent): Promise<CaipAccount[]>;
9
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/namespaces/ton/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,eAAe,EACf,sBAAsB,EACvB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2CAA2C,CAAC;AAK7E,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,eAAe,GACrB,KAAK,IAAI,sBAAsB,CAIjC;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,OAAO,GACZ,IAAI,IAAI,mBAAmB,CAS7B;AAID,wBAAgB,eAAe,CAAC,GAAG,CAAC,EAAE,YAAY,QAEjD;AAED,wBAAgB,wBAAwB,IAAI,MAAM,CAQjD;AAKD,wBAAgB,gBAAgB,IAAI,MAAM,CAGzC;AAGD,wBAAsB,kBAAkB,CACtC,YAAY,EAAE,eAAe,GAC5B,OAAO,CAAC,WAAW,EAAE,CAAC,CAmBxB"}
@@ -1,3 +1,3 @@
1
- declare const buildProvider: () => import("@hub3js/core").Provider<Record<"solana", import("@hub3js/solana").SolanaActions> & Record<"evm", import("@hub3js/evm").EvmActions> & Record<"utxo", import("@rango-dev/wallets-core/namespaces/utxo").UtxoActions>>;
1
+ declare const buildProvider: () => import("@hub3js/core").Provider<Record<"solana", import("@hub3js/solana").SolanaActions> & Record<"evm", import("@hub3js/evm").EvmActions> & Record<"utxo", import("@rango-dev/wallets-core/namespaces/utxo").UtxoActions> & Record<"ton", import("@rango-dev/wallets-core/namespaces/ton").TonActions>>;
2
2
  export { buildProvider };
3
3
  //# sourceMappingURL=provider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAQA,QAAA,MAAM,aAAa,mOAeP,CAAC;AAEb,OAAO,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAYA,QAAA,MAAM,aAAa,gTAiBP,CAAC;AAEb,OAAO,EAAE,aAAa,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../src/signer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAgBjD,wBAA8B,UAAU,CACtC,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,aAAa,CAAC,CAcxB"}
1
+ {"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../src/signer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAkBjD,wBAA8B,UAAU,CACtC,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,aAAa,CAAC,CAgBxB"}
@@ -0,0 +1,11 @@
1
+ import type { TonProviderApi } from '../namespaces/ton/types.js';
2
+ import type { GenericSigner, TonTransaction } from 'rango-types';
3
+ export declare class OKXTonSigner implements GenericSigner<TonTransaction> {
4
+ private provider;
5
+ constructor(provider: TonProviderApi);
6
+ signMessage(): Promise<string>;
7
+ signAndSendTx(tx: TonTransaction): Promise<{
8
+ hash: string;
9
+ }>;
10
+ }
11
+ //# sourceMappingURL=ton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ton.d.ts","sourceRoot":"","sources":["../../src/signers/ton.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,cAAc,EACf,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAgBjE,qBAAa,YAAa,YAAW,aAAa,CAAC,cAAc,CAAC;IAChE,OAAO,CAAC,QAAQ,CAAiB;gBAErB,QAAQ,EAAE,cAAc;IAI9B,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAI9B,aAAa,CAAC,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAsCnE"}
package/dist/types.d.ts CHANGED
@@ -1,5 +1,6 @@
1
+ import type { TonProviderApi } from './namespaces/ton/types.js';
1
2
  import type { ProviderAPI as EvmProviderApi } from '@hub3js/evm';
2
- import type { EVM_NAMESPACE, SOLANA_NAMESPACE, UTXO_NAMESPACE } from '@hub3js/namespaces';
3
+ import type { EVM_NAMESPACE, SOLANA_NAMESPACE, UTXO_NAMESPACE, TON_NAMESPACE } from '@hub3js/namespaces';
3
4
  import type { ProviderAPI as SolanaProviderApi } from '@hub3js/solana';
4
5
  import type { ProviderAPI as UtxoProviderApi } from '@rango-dev/wallets-core/namespaces/utxo';
5
6
  export type OkxBtcAddress = {
@@ -11,6 +12,7 @@ export type ProviderObject = {
11
12
  [EVM_NAMESPACE]: EvmProviderApi;
12
13
  [SOLANA_NAMESPACE]: SolanaProviderApi;
13
14
  [UTXO_NAMESPACE]: UtxoProviderApi;
15
+ [TON_NAMESPACE]: TonProviderApi;
14
16
  };
15
17
  export type Provider = Map<keyof ProviderObject, ProviderObject[keyof ProviderObject]>;
16
18
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,IAAI,cAAc,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,KAAK,EACV,aAAa,EACb,gBAAgB,EAChB,cAAc,EACf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,WAAW,IAAI,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,IAAI,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAE9F,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,EAAE,MAAM,CAAC;CAC7B,CAAC;AACF,MAAM,MAAM,cAAc,GAAG;IAC3B,CAAC,aAAa,CAAC,EAAE,cAAc,CAAC;IAChC,CAAC,gBAAgB,CAAC,EAAE,iBAAiB,CAAC;IACtC,CAAC,cAAc,CAAC,EAAE,eAAe,CAAC;CACnC,CAAC;AACF,MAAM,MAAM,QAAQ,GAAG,GAAG,CACxB,MAAM,cAAc,EACpB,cAAc,CAAC,MAAM,cAAc,CAAC,CACrC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,IAAI,cAAc,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,KAAK,EACV,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,aAAa,EACd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,WAAW,IAAI,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,IAAI,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAE9F,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,CAAC,aAAa,CAAC,EAAE,cAAc,CAAC;IAChC,CAAC,gBAAgB,CAAC,EAAE,iBAAiB,CAAC;IACtC,CAAC,cAAc,CAAC,EAAE,eAAe,CAAC;IAClC,CAAC,aAAa,CAAC,EAAE,cAAc,CAAC;CACjC,CAAC;AACF,MAAM,MAAM,QAAQ,GAAG,GAAG,CACxB,MAAM,cAAc,EACpB,cAAc,CAAC,MAAM,cAAc,CAAC,CACrC,CAAC"}
package/dist/utils.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import type { TonProviderApi } from './namespaces/ton/types.js';
1
2
  import type { OkxBtcAddress, Provider } from './types.js';
2
3
  import type { ProviderAPI as EvmProviderApi } from '@hub3js/evm';
3
4
  import type { ProviderAPI as SolanaProviderApi } from '@hub3js/solana';
@@ -7,5 +8,6 @@ export declare function getInstanceOrThrow(): Provider;
7
8
  export declare function evmOKX(): EvmProviderApi;
8
9
  export declare function solanaOKX(): SolanaProviderApi;
9
10
  export declare function bitcoinOKX(): UtxoProviderApi;
11
+ export declare function tonOKX(): TonProviderApi;
10
12
  export declare function getBitcoinAccounts(): Promise<OkxBtcAddress>;
11
13
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,IAAI,cAAc,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,IAAI,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,IAAI,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAQ9F,wBAAgB,GAAG,IAAI,QAAQ,GAAG,IAAI,CAgBrC;AAED,wBAAgB,kBAAkB,IAAI,QAAQ,CAQ7C;AAED,wBAAgB,MAAM,IAAI,cAAc,CAYvC;AAED,wBAAgB,SAAS,IAAI,iBAAiB,CAW7C;AACD,wBAAgB,UAAU,IAAI,eAAe,CAW5C;AACD,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,aAAa,CAAC,CASjE"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,IAAI,cAAc,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,IAAI,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,IAAI,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAS9F,wBAAgB,GAAG,IAAI,QAAQ,GAAG,IAAI,CAmBrC;AAED,wBAAgB,kBAAkB,IAAI,QAAQ,CAQ7C;AAED,wBAAgB,MAAM,IAAI,cAAc,CAYvC;AAED,wBAAgB,SAAS,IAAI,iBAAiB,CAW7C;AACD,wBAAgB,UAAU,IAAI,eAAe,CAW5C;AAED,wBAAgB,MAAM,IAAI,cAAc,CAWvC;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,aAAa,CAAC,CASjE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rango-dev/provider-okx",
3
- "version": "0.63.1-next.0",
3
+ "version": "0.63.1-next.2",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "source": "./src/mod.ts",
@@ -14,7 +14,7 @@
14
14
  "src"
15
15
  ],
16
16
  "scripts": {
17
- "build": "node ../../scripts/build/command.mjs --path wallets/provider-okx --inputs src/mod.ts",
17
+ "build": "yarn run rangutopia library build",
18
18
  "ts-check": "tsc --declaration --emitDeclarationOnly -p ./tsconfig.json",
19
19
  "clean": "rimraf dist",
20
20
  "format": "prettier --write '{.,src}/**/*.{ts,tsx}'",
@@ -26,13 +26,14 @@
26
26
  "@hub3js/namespaces": "^0.2.2",
27
27
  "@hub3js/solana": "^0.3.0",
28
28
  "@hub3js/std": "^0.2.0",
29
- "@rango-dev/signer-evm": "^0.44.0",
30
- "@rango-dev/signer-solana": "^0.48.0",
31
- "@rango-dev/wallets-core": "^0.60.1-next.2",
32
- "@rango-dev/wallets-shared": "^0.61.1-next.3",
29
+ "@rango-dev/signer-evm": "^0.44.1-next.0",
30
+ "@rango-dev/signer-solana": "^0.48.1-next.0",
31
+ "@rango-dev/wallets-core": "^0.60.1-next.3",
32
+ "@rango-dev/wallets-shared": "^0.61.1-next.4",
33
+ "@ton/core": "^0.59.0",
33
34
  "rango-types": "^0.5.0"
34
35
  },
35
36
  "publishConfig": {
36
37
  "access": "public"
37
38
  }
38
- }
39
+ }
package/readme.md CHANGED
@@ -39,10 +39,6 @@ Supported networks :
39
39
  The wallet only supports bitcoin.
40
40
 
41
41
 
42
- #### 🚧 TON
43
-
44
- The wallet supports TON, but it is **not implemented** in the current integration.
45
-
46
42
  #### 🚧 Sui
47
43
 
48
44
  The wallet supports Sui, but it is **not implemented** in the current integration.
@@ -0,0 +1,99 @@
1
+ import type {
2
+ TonConnectEvent,
3
+ TonProviderApi,
4
+ } from '../namespaces/ton/types.js';
5
+ import type { Context, FunctionWithContext } from '@hub3js/core';
6
+
7
+ import { type TonActions } from '@rango-dev/wallets-core/namespaces/ton';
8
+
9
+ import {
10
+ TON_CONNECT_PROTOCOL_VERSION,
11
+ TON_CONNECT_USER_REJECTED_CODE,
12
+ } from '../constants.js';
13
+ import {
14
+ connectEventToCAIP,
15
+ getTonConnectManifestUrl,
16
+ isTonConnectEventSuccess,
17
+ nextTonRequestId,
18
+ } from '../namespaces/ton/utils.js';
19
+
20
+ export function connect(
21
+ getInstance: () => TonProviderApi
22
+ ): FunctionWithContext<TonActions['connect'], Context> {
23
+ return async () => {
24
+ const instance = getInstance();
25
+
26
+ /*
27
+ * If the dApp was approved before, `restoreConnection` resolves the current
28
+ * session without prompting the user; otherwise fall back to a fresh
29
+ * connect request.
30
+ */
31
+ let connectEvent: TonConnectEvent | undefined;
32
+ try {
33
+ connectEvent = await instance.restoreConnection();
34
+ } catch {
35
+ // No restorable session; a fresh connect request is made below.
36
+ }
37
+
38
+ if (!connectEvent || !isTonConnectEventSuccess(connectEvent)) {
39
+ connectEvent = await instance.connect(TON_CONNECT_PROTOCOL_VERSION, {
40
+ manifestUrl: getTonConnectManifestUrl(),
41
+ items: [{ name: 'ton_addr' }],
42
+ });
43
+ }
44
+
45
+ if (!isTonConnectEventSuccess(connectEvent)) {
46
+ // The bridge reports a user-cancelled prompt as a `connect_error` event.
47
+ if (connectEvent.payload.code === TON_CONNECT_USER_REJECTED_CODE) {
48
+ throw new Error('User rejected the request.');
49
+ }
50
+ throw new Error(
51
+ `Couldn't connect to OKX TON. code: ${connectEvent.payload.code}, message: ${connectEvent.payload.message}`
52
+ );
53
+ }
54
+
55
+ const accounts = await connectEventToCAIP(connectEvent);
56
+ if (!accounts.length) {
57
+ throw new Error("Couldn't find any TON address!");
58
+ }
59
+
60
+ return accounts;
61
+ };
62
+ }
63
+
64
+ export function canEagerConnect(
65
+ getInstance: () => TonProviderApi
66
+ ): FunctionWithContext<TonActions['canEagerConnect'], Context> {
67
+ return async () => {
68
+ /*
69
+ * Auto connect may run this before the wallet is injected; it should never
70
+ * throw.
71
+ */
72
+ try {
73
+ const connectEvent = await getInstance().restoreConnection();
74
+ return isTonConnectEventSuccess(connectEvent);
75
+ } catch {
76
+ return false;
77
+ }
78
+ };
79
+ }
80
+
81
+ export function disconnect(getInstance: () => TonProviderApi) {
82
+ return async () => {
83
+ /*
84
+ * Revoking the session on the wallet side is best effort; local state
85
+ * cleanup should proceed even if it fails.
86
+ */
87
+ try {
88
+ await getInstance().send({
89
+ method: 'disconnect',
90
+ params: [],
91
+ id: nextTonRequestId(),
92
+ });
93
+ } catch {
94
+ // ignore
95
+ }
96
+ };
97
+ }
98
+
99
+ export const tonActions = { connect, canEagerConnect, disconnect };
@@ -0,0 +1,48 @@
1
+ import type { TonProviderApi } from '../namespaces/ton/types.js';
2
+
3
+ import { ChangeAccountSubscriberBuilder } from '@hub3js/std/hooks';
4
+ import { type TonActions, utils } from '@rango-dev/wallets-core/namespaces/ton';
5
+
6
+ import { connectEventToCAIP } from '../namespaces/ton/utils.js';
7
+
8
+ /*
9
+ * OKX emits its non-standard `accountChanged` event without a documented
10
+ * payload, so the switched address can't be read from the event. Because the
11
+ * bridge is standard TON Connect, `format` re-reads the active account from the
12
+ * instance via `restoreConnection` instead
13
+ */
14
+ export const changeAccountSubscriber = (getInstance: () => TonProviderApi) =>
15
+ new ChangeAccountSubscriberBuilder<unknown, TonProviderApi, TonActions>()
16
+ .getInstance(getInstance)
17
+ .format(async (instance) => {
18
+ try {
19
+ const connectEvent = await instance.restoreConnection();
20
+ return await connectEventToCAIP(connectEvent);
21
+ } catch {
22
+ // No active session after the switch — treat as disconnected.
23
+ return utils.formatAccountsToCAIP([]);
24
+ }
25
+ })
26
+ .addEventListener((instance, callback) => {
27
+ instance.on('accountChanged', callback);
28
+ })
29
+ .removeEventListener((instance, callback) => {
30
+ instance.off('accountChanged', callback);
31
+ });
32
+
33
+ export const disconnectSubscriber = (getInstance: () => TonProviderApi) =>
34
+ new ChangeAccountSubscriberBuilder<unknown, TonProviderApi, TonActions>()
35
+ .getInstance(getInstance)
36
+ .onSwitchAccount((event, context) => {
37
+ event.preventDefault();
38
+ void context.action('disconnect');
39
+ })
40
+ .format(async () => [])
41
+ .addEventListener((instance, callback) => {
42
+ instance.on('disconnect', callback);
43
+ })
44
+ .removeEventListener((instance, callback) => {
45
+ instance.off('disconnect', callback);
46
+ });
47
+
48
+ export const tonBuilders = { changeAccountSubscriber, disconnectSubscriber };
package/src/constants.ts CHANGED
@@ -5,6 +5,7 @@ import { Networks } from '@rango-dev/wallets-shared';
5
5
  import {
6
6
  type BlockchainMeta,
7
7
  solanaBlockchain,
8
+ tonBlockchain,
8
9
  type TransferBlockchainMeta,
9
10
  } from 'rango-types';
10
11
 
@@ -12,6 +13,9 @@ import getSigners from './signer.js';
12
13
  import { getInstanceOrThrow } from './utils.js';
13
14
 
14
15
  export const WALLET_ID = 'okx';
16
+ export const TON_CONNECT_PROTOCOL_VERSION = 2;
17
+ export const TON_CONNECT_USER_REJECTED_CODE = 300;
18
+
15
19
  export const OKX_WALLET_SUPPORTED_CHAINS = [
16
20
  LegacyNetworks.ETHEREUM,
17
21
  LegacyNetworks.BSC,
@@ -73,6 +77,13 @@ export const metadata: ProviderMetadata = {
73
77
  chain.name === Networks.BTC
74
78
  ),
75
79
  },
80
+ {
81
+ label: 'Ton',
82
+ value: 'Ton',
83
+ id: 'TON',
84
+ getSupportedChains: (allBlockchains: BlockchainMeta[]) =>
85
+ tonBlockchain(allBlockchains),
86
+ },
76
87
  ],
77
88
  },
78
89
  },
@@ -0,0 +1,50 @@
1
+ import { NamespaceBuilder } from '@hub3js/core';
2
+ import * as commonBuilders from '@hub3js/std/builders';
3
+ import { standardizeAndThrowError } from '@hub3js/std/operators';
4
+ import {
5
+ builders,
6
+ type TonActions,
7
+ } from '@rango-dev/wallets-core/namespaces/ton';
8
+
9
+ import { tonActions } from '../../actions/ton.js';
10
+ import { tonBuilders } from '../../builders/ton.js';
11
+ import { WALLET_ID } from '../../constants.js';
12
+ import { tonOKX } from '../../utils.js';
13
+
14
+ const [changeAccountSubscriber, changeAccountCleanup] = tonBuilders
15
+ .changeAccountSubscriber(tonOKX)
16
+ .build();
17
+
18
+ const [walletDisconnectSubscriber, walletDisconnectCleanup] = tonBuilders
19
+ .disconnectSubscriber(tonOKX)
20
+ .build();
21
+
22
+ const connect = builders
23
+ .connect()
24
+ .action(tonActions.connect(tonOKX))
25
+ .before(changeAccountSubscriber)
26
+ .before(walletDisconnectSubscriber)
27
+ .or(walletDisconnectCleanup)
28
+ .or(changeAccountCleanup)
29
+ .or(standardizeAndThrowError)
30
+ .build();
31
+
32
+ const disconnect = commonBuilders
33
+ .disconnect<TonActions>()
34
+ .before(tonActions.disconnect(tonOKX))
35
+ .after(changeAccountCleanup)
36
+ .after(walletDisconnectCleanup)
37
+ .build();
38
+
39
+ const canEagerConnect = builders
40
+ .canEagerConnect()
41
+ .action(tonActions.canEagerConnect(tonOKX))
42
+ .build();
43
+
44
+ const ton = new NamespaceBuilder<TonActions>('Ton', WALLET_ID)
45
+ .action(connect)
46
+ .action(disconnect)
47
+ .action(canEagerConnect)
48
+ .build();
49
+
50
+ export { ton };
@@ -0,0 +1,89 @@
1
+ export type Environments = {
2
+ tonConnectManifestUrl?: string;
3
+ };
4
+
5
+ /*
6
+ * OKX injects a standard TonConnect JS bridge at `window.okxTonWallet.tonconnect`.
7
+ * The types below describe the subset of the TonConnect protocol we rely on,
8
+ * plus OKX's non-standard `on`/`off` event API.
9
+ */
10
+ export type TonAddressItemReply = {
11
+ name: 'ton_addr';
12
+ // Raw format: `<workchain>:<hex>`
13
+ address: string;
14
+ // '-239' for mainnet, '-3' for testnet
15
+ network: string;
16
+ walletStateInit: string;
17
+ publicKey: string;
18
+ };
19
+
20
+ export type TonConnectEventSuccess = {
21
+ event: 'connect';
22
+ id: number;
23
+ payload: {
24
+ items: Array<TonAddressItemReply | { name: string }>;
25
+ device: unknown;
26
+ };
27
+ };
28
+
29
+ export type TonConnectEventError = {
30
+ event: 'connect_error';
31
+ id: number;
32
+ payload: {
33
+ code: number;
34
+ message: string;
35
+ };
36
+ };
37
+
38
+ export type TonConnectEvent = TonConnectEventSuccess | TonConnectEventError;
39
+
40
+ export type TonConnectRequest = {
41
+ manifestUrl: string;
42
+ items: Array<{ name: 'ton_addr' }>;
43
+ };
44
+
45
+ export type TonConnectAppRequest = {
46
+ method: 'sendTransaction' | 'disconnect';
47
+ params: string[];
48
+ id: string;
49
+ };
50
+
51
+ export type TonConnectWalletResponseSuccess = {
52
+ result: string;
53
+ id: string;
54
+ };
55
+
56
+ export type TonConnectWalletResponseError = {
57
+ error: { code: number; message: string; data?: unknown };
58
+ id: string;
59
+ };
60
+
61
+ export type TonConnectWalletResponse =
62
+ | TonConnectWalletResponseSuccess
63
+ | TonConnectWalletResponseError;
64
+
65
+ export interface TonProviderApi {
66
+ deviceInfo: unknown;
67
+ walletInfo?: unknown;
68
+ protocolVersion: number;
69
+ connect(
70
+ protocolVersion: number,
71
+ message: TonConnectRequest
72
+ ): Promise<TonConnectEvent>;
73
+ restoreConnection(): Promise<TonConnectEvent>;
74
+ send(message: TonConnectAppRequest): Promise<TonConnectWalletResponse>;
75
+ listen(callback: (event: unknown) => void): () => void;
76
+ /*
77
+ * Non-standard OKX-specific event API. `accountChanged` fires when the user
78
+ * switches the active account inside the wallet; its payload is undocumented
79
+ * and must not be relied on.
80
+ */
81
+ on(
82
+ event: 'accountChanged' | 'connect' | 'disconnect',
83
+ callback: (payload?: unknown) => void
84
+ ): void;
85
+ off(
86
+ event: 'accountChanged' | 'connect' | 'disconnect',
87
+ callback: (payload?: unknown) => void
88
+ ): void;
89
+ }
@@ -0,0 +1,79 @@
1
+ import type {
2
+ Environments,
3
+ TonAddressItemReply,
4
+ TonConnectEvent,
5
+ TonConnectEventSuccess,
6
+ } from './types.js';
7
+ import type { CaipAccount } from '@rango-dev/wallets-core/namespaces/common';
8
+
9
+ import { utils as tonCoreUtils } from '@rango-dev/wallets-core/namespaces/ton';
10
+ import { dynamicImportWithRefinedError } from '@rango-dev/wallets-shared';
11
+
12
+ export function isTonConnectEventSuccess(
13
+ event: TonConnectEvent
14
+ ): event is TonConnectEventSuccess {
15
+ return (
16
+ !!event && event.event === 'connect' && Array.isArray(event.payload?.items)
17
+ );
18
+ }
19
+
20
+ export function isTonAddressItemReply(
21
+ item: unknown
22
+ ): item is TonAddressItemReply {
23
+ return (
24
+ typeof item === 'object' &&
25
+ item !== null &&
26
+ 'name' in item &&
27
+ item.name === 'ton_addr' &&
28
+ 'address' in item &&
29
+ typeof item.address === 'string'
30
+ );
31
+ }
32
+
33
+ let environments: Environments | undefined;
34
+
35
+ export function setEnvironments(env?: Environments) {
36
+ environments = env;
37
+ }
38
+
39
+ export function getTonConnectManifestUrl(): string {
40
+ const manifestUrl = environments?.tonConnectManifestUrl;
41
+ if (!manifestUrl) {
42
+ throw new Error(
43
+ 'OKX TON requires a TonConnect manifest URL. Please provide it through the provider environments.'
44
+ );
45
+ }
46
+ return manifestUrl;
47
+ }
48
+
49
+ let tonRequestId = 0;
50
+
51
+ // TonConnect requires a unique string `id` on every request sent to the bridge.
52
+ export function nextTonRequestId(): string {
53
+ tonRequestId += 1;
54
+ return tonRequestId.toString();
55
+ }
56
+
57
+ // Convert a `ConnectEvent`'s raw `<workchain>:<hex>` address to user-friendly CAIP.
58
+ export async function connectEventToCAIP(
59
+ connectEvent: TonConnectEvent
60
+ ): Promise<CaipAccount[]> {
61
+ if (!isTonConnectEventSuccess(connectEvent)) {
62
+ return tonCoreUtils.formatAccountsToCAIP([]);
63
+ }
64
+
65
+ const addressItem = connectEvent.payload.items.find(isTonAddressItemReply);
66
+ if (!addressItem) {
67
+ return tonCoreUtils.formatAccountsToCAIP([]);
68
+ }
69
+
70
+ const { Address } = await dynamicImportWithRefinedError(
71
+ async () => await import('@ton/core')
72
+ );
73
+ const userFriendlyAddress = Address.parseRaw(addressItem.address).toString({
74
+ bounceable: false,
75
+ urlSafe: true,
76
+ });
77
+
78
+ return tonCoreUtils.formatAccountsToCAIP([userFriendlyAddress]);
79
+ }
package/src/provider.ts CHANGED
@@ -1,14 +1,19 @@
1
+ import type { Environments } from './namespaces/ton/types.js';
2
+
1
3
  import { ProviderBuilder } from '@hub3js/core';
2
4
 
3
5
  import { metadata, WALLET_ID } from './constants.js';
4
6
  import { evm } from './namespaces/evm.js';
5
7
  import { solana } from './namespaces/solana.js';
8
+ import { ton } from './namespaces/ton/ton.js';
9
+ import { setEnvironments } from './namespaces/ton/utils.js';
6
10
  import { utxo } from './namespaces/utxo.js';
7
11
  import { okx as okxInstance } from './utils.js';
8
12
 
9
13
  const buildProvider = () =>
10
14
  new ProviderBuilder(WALLET_ID)
11
- .init(function (context) {
15
+ .init(function (context, environments?: Environments) {
16
+ setEnvironments(environments);
12
17
  const [, setState] = context.state();
13
18
 
14
19
  if (okxInstance()) {
@@ -20,6 +25,7 @@ const buildProvider = () =>
20
25
  .add('solana', solana)
21
26
  .add('evm', evm)
22
27
  .add('utxo', utxo)
28
+ .add('ton', ton)
23
29
 
24
30
  .build();
25
31
 
package/src/signer.ts CHANGED
@@ -5,6 +5,7 @@ import {
5
5
  EVM_NAMESPACE,
6
6
  SOLANA_NAMESPACE,
7
7
  UTXO_NAMESPACE,
8
+ TON_NAMESPACE,
8
9
  } from '@hub3js/namespaces';
9
10
  import {
10
11
  dynamicImportWithRefinedError,
@@ -13,6 +14,7 @@ import {
13
14
  import { DefaultSignerFactory, TransactionType as TxType } from 'rango-types';
14
15
 
15
16
  import { OKXSolanaSigner } from './signers/solana.js';
17
+ import { OKXTonSigner } from './signers/ton.js';
16
18
  import { OKXUTXOSigner } from './signers/utxo.js';
17
19
 
18
20
  export default async function getSigners(
@@ -21,6 +23,7 @@ export default async function getSigners(
21
23
  const ethProvider = getNetworkInstance(provider, EVM_NAMESPACE);
22
24
  const solProvider = getNetworkInstance(provider, SOLANA_NAMESPACE);
23
25
  const utxoProvider = getNetworkInstance(provider, UTXO_NAMESPACE);
26
+ const tonProvider = getNetworkInstance(provider, TON_NAMESPACE);
24
27
 
25
28
  const signers = new DefaultSignerFactory();
26
29
  const { DefaultEvmSigner } = await dynamicImportWithRefinedError(
@@ -29,6 +32,7 @@ export default async function getSigners(
29
32
  signers.registerSigner(TxType.EVM, new DefaultEvmSigner(ethProvider));
30
33
  signers.registerSigner(TxType.SOLANA, new OKXSolanaSigner(solProvider));
31
34
  signers.registerSigner(TxType.TRANSFER, new OKXUTXOSigner(utxoProvider));
35
+ signers.registerSigner(TxType.TON, new OKXTonSigner(tonProvider));
32
36
 
33
37
  return signers;
34
38
  }
@@ -0,0 +1,70 @@
1
+ import type {
2
+ TonConnectWalletResponseError,
3
+ TonProviderApi,
4
+ } from '../namespaces/ton/types.js';
5
+ import type { GenericSigner, TonTransaction } from 'rango-types';
6
+
7
+ import { dynamicImportWithRefinedError } from '@rango-dev/wallets-shared';
8
+ import { SignerError, SignerErrorCode, TonChainID } from 'rango-types';
9
+
10
+ import { TON_CONNECT_USER_REJECTED_CODE } from '../constants.js';
11
+ import { nextTonRequestId } from '../namespaces/ton/utils.js';
12
+
13
+ function toSignerError(response: TonConnectWalletResponseError): SignerError {
14
+ const code =
15
+ response.error.code === TON_CONNECT_USER_REJECTED_CODE
16
+ ? SignerErrorCode.REJECTED_BY_USER
17
+ : SignerErrorCode.SEND_TX_ERROR;
18
+ return new SignerError(code, response.error.message, response.error);
19
+ }
20
+
21
+ export class OKXTonSigner implements GenericSigner<TonTransaction> {
22
+ private provider: TonProviderApi;
23
+
24
+ constructor(provider: TonProviderApi) {
25
+ this.provider = provider;
26
+ }
27
+
28
+ async signMessage(): Promise<string> {
29
+ throw SignerError.UnimplementedError('signMessage');
30
+ }
31
+
32
+ async signAndSendTx(tx: TonTransaction): Promise<{ hash: string }> {
33
+ const { validUntil, network, from, messages } = tx;
34
+
35
+ const { Address, Cell } = await dynamicImportWithRefinedError(
36
+ async () => await import('@ton/core')
37
+ );
38
+
39
+ const transactionPayload = {
40
+ valid_until: validUntil,
41
+ network: network ?? TonChainID.MAINNET,
42
+ ...(from && { from: Address.parse(from).toRawString() }),
43
+ messages: messages.map(({ stateInit, payload, ...message }) => ({
44
+ ...message,
45
+ ...(stateInit != null && { stateInit }),
46
+ ...(payload != null && { payload }),
47
+ })),
48
+ };
49
+
50
+ try {
51
+ const response = await this.provider.send({
52
+ method: 'sendTransaction',
53
+ params: [JSON.stringify(transactionPayload)],
54
+ id: nextTonRequestId(),
55
+ });
56
+
57
+ if ('error' in response) {
58
+ throw toSignerError(response);
59
+ }
60
+
61
+ const hash = Cell.fromBase64(response.result).hash().toString('hex');
62
+ return { hash };
63
+ } catch (error) {
64
+ if (error instanceof SignerError) {
65
+ throw error;
66
+ }
67
+ throw new SignerError(SignerErrorCode.SEND_TX_ERROR, undefined, error);
68
+ }
69
+ }
70
+ }
package/src/types.ts CHANGED
@@ -1,8 +1,10 @@
1
+ import type { TonProviderApi } from './namespaces/ton/types.js';
1
2
  import type { ProviderAPI as EvmProviderApi } from '@hub3js/evm';
2
3
  import type {
3
4
  EVM_NAMESPACE,
4
5
  SOLANA_NAMESPACE,
5
6
  UTXO_NAMESPACE,
7
+ TON_NAMESPACE,
6
8
  } from '@hub3js/namespaces';
7
9
  import type { ProviderAPI as SolanaProviderApi } from '@hub3js/solana';
8
10
  import type { ProviderAPI as UtxoProviderApi } from '@rango-dev/wallets-core/namespaces/utxo';
@@ -12,10 +14,12 @@ export type OkxBtcAddress = {
12
14
  publicKey: string;
13
15
  compressedPublicKey: string;
14
16
  };
17
+
15
18
  export type ProviderObject = {
16
19
  [EVM_NAMESPACE]: EvmProviderApi;
17
20
  [SOLANA_NAMESPACE]: SolanaProviderApi;
18
21
  [UTXO_NAMESPACE]: UtxoProviderApi;
22
+ [TON_NAMESPACE]: TonProviderApi;
19
23
  };
20
24
  export type Provider = Map<
21
25
  keyof ProviderObject,
package/src/utils.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import type { TonProviderApi } from './namespaces/ton/types.js';
1
2
  import type { OkxBtcAddress, Provider } from './types.js';
2
3
  import type { ProviderAPI as EvmProviderApi } from '@hub3js/evm';
3
4
  import type { ProviderAPI as SolanaProviderApi } from '@hub3js/solana';
@@ -7,11 +8,12 @@ import {
7
8
  EVM_NAMESPACE,
8
9
  SOLANA_NAMESPACE,
9
10
  UTXO_NAMESPACE,
11
+ TON_NAMESPACE,
10
12
  } from '@hub3js/namespaces';
11
13
 
12
14
  export function okx(): Provider | null {
13
- const { okxwallet } = window;
14
- if (!okxwallet) {
15
+ const { okxwallet, okxTonWallet } = window;
16
+ if (!okxwallet && !okxTonWallet) {
15
17
  return null;
16
18
  }
17
19
  const instances: Provider = new Map();
@@ -24,6 +26,9 @@ export function okx(): Provider | null {
24
26
  if (okxwallet.bitcoin) {
25
27
  instances.set(UTXO_NAMESPACE, okxwallet.bitcoin);
26
28
  }
29
+ if (okxTonWallet?.tonconnect) {
30
+ instances.set(TON_NAMESPACE, okxTonWallet.tonconnect);
31
+ }
27
32
  return instances;
28
33
  }
29
34
 
@@ -75,6 +80,20 @@ export function bitcoinOKX(): UtxoProviderApi {
75
80
 
76
81
  return bitcoinInstance;
77
82
  }
83
+
84
+ export function tonOKX(): TonProviderApi {
85
+ const instance = okx();
86
+ const tonInstance = instance?.get(TON_NAMESPACE);
87
+
88
+ if (!tonInstance) {
89
+ throw new Error(
90
+ 'OKX Wallet not injected or TON not enabled. Please check your wallet.'
91
+ );
92
+ }
93
+
94
+ return tonInstance as TonProviderApi;
95
+ }
96
+
78
97
  export async function getBitcoinAccounts(): Promise<OkxBtcAddress> {
79
98
  const instance = bitcoinOKX();
80
99
  const requestResult = await instance.connect();
@@ -1 +0,0 @@
1
- {"inputs":{"src/signers/solana.ts":{"bytes":644,"imports":[{"path":"@rango-dev/signer-solana","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/signers/utxo.ts":{"bytes":1717,"imports":[{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/signer.ts":{"bytes":1191,"imports":[{"path":"@hub3js/namespaces","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"src/signers/solana.ts","kind":"import-statement","original":"./signers/solana.js"},{"path":"src/signers/utxo.ts","kind":"import-statement","original":"./signers/utxo.js"},{"path":"@rango-dev/signer-evm","kind":"dynamic-import","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/utils.ts":{"bytes":2177,"imports":[{"path":"@hub3js/namespaces","kind":"import-statement","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/constants.ts":{"bytes":2474,"imports":[{"path":"@rango-dev/wallets-core/legacy","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"src/signer.ts","kind":"import-statement","original":"./signer.js"},{"path":"src/utils.ts","kind":"import-statement","original":"./utils.js"}],"format":"esm"},"src/namespaces/evm.ts":{"bytes":1813,"imports":[{"path":"@hub3js/core","kind":"import-statement","external":true},{"path":"@hub3js/evm","kind":"import-statement","external":true},{"path":"@hub3js/std/builders","kind":"import-statement","external":true},{"path":"@hub3js/std/operators","kind":"import-statement","external":true},{"path":"src/constants.ts","kind":"import-statement","original":"../constants.js"},{"path":"src/utils.ts","kind":"import-statement","original":"../utils.js"}],"format":"esm"},"src/namespaces/solana.ts":{"bytes":1566,"imports":[{"path":"@hub3js/core","kind":"import-statement","external":true},{"path":"@hub3js/solana","kind":"import-statement","external":true},{"path":"@hub3js/std/builders","kind":"import-statement","external":true},{"path":"@hub3js/std/operators","kind":"import-statement","external":true},{"path":"src/constants.ts","kind":"import-statement","original":"../constants.js"},{"path":"src/utils.ts","kind":"import-statement","original":"../utils.js"}],"format":"esm"},"src/builders/utxo.ts":{"bytes":1561,"imports":[{"path":"@hub3js/core","kind":"import-statement","external":true},{"path":"@hub3js/std/hooks","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-core/namespaces/utxo","kind":"import-statement","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/namespaces/utxo.ts":{"bytes":1472,"imports":[{"path":"@hub3js/core","kind":"import-statement","external":true},{"path":"@hub3js/std/builders","kind":"import-statement","external":true},{"path":"@hub3js/std/operators","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-core/namespaces/utxo","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-core/namespaces/utxo","kind":"import-statement","external":true},{"path":"src/builders/utxo.ts","kind":"import-statement","original":"../builders/utxo.js"},{"path":"src/constants.ts","kind":"import-statement","original":"../constants.js"},{"path":"src/utils.ts","kind":"import-statement","original":"../utils.js"}],"format":"esm"},"src/provider.ts":{"bytes":713,"imports":[{"path":"@hub3js/core","kind":"import-statement","external":true},{"path":"src/constants.ts","kind":"import-statement","original":"./constants.js"},{"path":"src/namespaces/evm.ts","kind":"import-statement","original":"./namespaces/evm.js"},{"path":"src/namespaces/solana.ts","kind":"import-statement","original":"./namespaces/solana.js"},{"path":"src/namespaces/utxo.ts","kind":"import-statement","original":"./namespaces/utxo.js"},{"path":"src/utils.ts","kind":"import-statement","original":"./utils.js"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/mod.ts":{"bytes":209,"imports":[{"path":"@hub3js/core/utils","kind":"import-statement","external":true},{"path":"src/provider.ts","kind":"import-statement","original":"./provider.js"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"}},"outputs":{"dist/mod.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":26285},"dist/mod.js":{"imports":[{"path":"@hub3js/core/utils","kind":"import-statement","external":true},{"path":"@hub3js/core","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-core/legacy","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"@hub3js/namespaces","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"@rango-dev/signer-solana","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"@rango-dev/signer-evm","kind":"dynamic-import","external":true},{"path":"@hub3js/namespaces","kind":"import-statement","external":true},{"path":"@hub3js/core","kind":"import-statement","external":true},{"path":"@hub3js/evm","kind":"import-statement","external":true},{"path":"@hub3js/std/builders","kind":"import-statement","external":true},{"path":"@hub3js/std/operators","kind":"import-statement","external":true},{"path":"@hub3js/core","kind":"import-statement","external":true},{"path":"@hub3js/solana","kind":"import-statement","external":true},{"path":"@hub3js/std/builders","kind":"import-statement","external":true},{"path":"@hub3js/std/operators","kind":"import-statement","external":true},{"path":"@hub3js/core","kind":"import-statement","external":true},{"path":"@hub3js/std/builders","kind":"import-statement","external":true},{"path":"@hub3js/std/operators","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-core/namespaces/utxo","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-core/namespaces/utxo","kind":"import-statement","external":true},{"path":"@hub3js/core","kind":"import-statement","external":true},{"path":"@hub3js/std/hooks","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-core/namespaces/utxo","kind":"import-statement","external":true}],"exports":["versions"],"entryPoint":"src/mod.ts","inputs":{"src/mod.ts":{"bytesInOutput":112},"src/provider.ts":{"bytesInOutput":265},"src/constants.ts":{"bytesInOutput":1091},"src/signer.ts":{"bytesInOutput":533},"src/signers/solana.ts":{"bytesInOutput":377},"src/signers/utxo.ts":{"bytesInOutput":831},"src/utils.ts":{"bytesInOutput":982},"src/namespaces/evm.ts":{"bytesInOutput":830},"src/namespaces/solana.ts":{"bytesInOutput":656},"src/namespaces/utxo.ts":{"bytesInOutput":718},"src/builders/utxo.ts":{"bytesInOutput":734}},"bytes":7264}}}