@avalabs/evm-module 0.4.2 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,14 +2,14 @@
2
2
 
3
3
  var chunkTKL4UUHE_cjs = require('../chunk-TKL4UUHE.cjs');
4
4
  var rpcErrors = require('@metamask/rpc-errors');
5
- var b = require('events');
5
+ var V = require('events');
6
6
  var vmModuleTypes = require('@avalabs/vm-module-types');
7
7
 
8
8
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
9
9
 
10
- var b__default = /*#__PURE__*/_interopDefault(b);
10
+ var V__default = /*#__PURE__*/_interopDefault(V);
11
11
 
12
- var d,l,g=class{constructor(r){chunkTKL4UUHE_cjs.c(this,d,new Map);chunkTKL4UUHE_cjs.c(this,l,[]);chunkTKL4UUHE_cjs.a(this,"check",r=>{chunkTKL4UUHE_cjs.b(this,d).has(r)&&chunkTKL4UUHE_cjs.b(this,d).delete(r),this._proceed();});chunkTKL4UUHE_cjs.a(this,"uncheck",r=>{chunkTKL4UUHE_cjs.b(this,d).set(r,!0);});chunkTKL4UUHE_cjs.a(this,"_proceed",()=>{if(!chunkTKL4UUHE_cjs.b(this,d).size)for(;chunkTKL4UUHE_cjs.b(this,l).length;){let r=chunkTKL4UUHE_cjs.b(this,l).shift();r?.resolve(r?.fn());}});chunkTKL4UUHE_cjs.a(this,"call",r=>new Promise(e=>{chunkTKL4UUHE_cjs.b(this,l).push({fn:r,resolve:e}),this._proceed();}));r.map(e=>chunkTKL4UUHE_cjs.b(this,d).set(e,!0));}};d=new WeakMap,l=new WeakMap;var m,c,v,S,A,p,y,P,u,C,I,_,f,D=class extends b__default.default{constructor({maxListeners:e=100,info:s}){super();chunkTKL4UUHE_cjs.c(this,v);chunkTKL4UUHE_cjs.c(this,m,new g(["provider_state_loaded"]));chunkTKL4UUHE_cjs.c(this,c,void 0);chunkTKL4UUHE_cjs.a(this,"info");chunkTKL4UUHE_cjs.a(this,"chainId",null);chunkTKL4UUHE_cjs.a(this,"selectedAddress",null);chunkTKL4UUHE_cjs.a(this,"networkVersion",null);chunkTKL4UUHE_cjs.a(this,"isAvalanche",!0);chunkTKL4UUHE_cjs.a(this,"isMetaMask",!0);chunkTKL4UUHE_cjs.a(this,"_isReady",!1);chunkTKL4UUHE_cjs.a(this,"_isConnected",!1);chunkTKL4UUHE_cjs.a(this,"_initialized",!1);chunkTKL4UUHE_cjs.a(this,"_isUnlocked",!1);chunkTKL4UUHE_cjs.a(this,"_sessionId",crypto.randomUUID());chunkTKL4UUHE_cjs.a(this,"_state",{accounts:null,isConnected:!1,isUnlocked:!1,initialized:!1});chunkTKL4UUHE_cjs.a(this,"_metamask",{isUnlocked:()=>Promise.resolve(this._isUnlocked)});chunkTKL4UUHE_cjs.c(this,A,async()=>{try{let e=await chunkTKL4UUHE_cjs.b(this,p).call(this,{method:"avalanche_getProviderState"}),{chainId:s,accounts:a,networkVersion:o,isUnlocked:E}=e??{};E&&(this._isUnlocked=!0,this._state.isUnlocked=!0),s&&s!=="0x0"&&o&&o!=="loading"&&(this.chainId=s,this.networkVersion=o,chunkTKL4UUHE_cjs.b(this,u).call(this,{chainId:s}),chunkTKL4UUHE_cjs.b(this,f).call(this,{chainId:s,networkVersion:o})),chunkTKL4UUHE_cjs.b(this,_).call(this,a||[]),chunkTKL4UUHE_cjs.b(this,m).check("provider_state_loaded");}catch{}finally{this._initialized=!0,this._state.initialized=!0,this._isReady=!0,this.emit("_initialized");}});chunkTKL4UUHE_cjs.c(this,p,async e=>chunkTKL4UUHE_cjs.b(this,c)?.request({data:e,chainId:this.chainId,sessionId:this._sessionId}));chunkTKL4UUHE_cjs.c(this,y,e=>({connect:chunkTKL4UUHE_cjs.b(this,u),disconnect:chunkTKL4UUHE_cjs.b(this,I),accountsChanged:chunkTKL4UUHE_cjs.b(this,_),chainChanged:chunkTKL4UUHE_cjs.b(this,f),avalanche_unlockStateChanged:chunkTKL4UUHE_cjs.b(this,C)})[e]);chunkTKL4UUHE_cjs.c(this,P,({method:e,params:s})=>{let a=chunkTKL4UUHE_cjs.b(this,y).call(this,e);if(a)return a(s);this.emit(e,s);});chunkTKL4UUHE_cjs.a(this,"isConnected",()=>!0);chunkTKL4UUHE_cjs.a(this,"request",async e=>chunkTKL4UUHE_cjs.b(this,m).call(()=>chunkTKL4UUHE_cjs.b(this,p).call(this,e)));chunkTKL4UUHE_cjs.a(this,"sendAsync",(e,s)=>{if(Array.isArray(e))return Promise.all(e.map(h=>new Promise(U=>{this.sendAsync(h,(z,q)=>{U(q);});}))).then(h=>s(null,h));let{method:a,params:o,...E}=e;this.request({method:a,params:o}).then(h=>s(null,{...E,method:a,result:h})).catch(h=>s(h,{...E,method:a,error:h}));});chunkTKL4UUHE_cjs.a(this,"send",(e,s)=>{if(typeof e=="string"&&(!s||Array.isArray(s)))return this.request({method:e,params:s}).then(o=>({id:void 0,jsonrpc:"2.0",result:o}));if(typeof e=="object"&&typeof s=="function")return this.sendAsync(e,s);let a;switch(e.method){case"eth_accounts":a=this.selectedAddress?[this.selectedAddress]:[];break;case"eth_coinbase":a=this.selectedAddress||null;break;default:throw new Error("Sync method not supported. Please provide a callback or use the `request` function.")}return {id:e.id,jsonrpc:e.jsonrpc,result:a}});chunkTKL4UUHE_cjs.a(this,"enable",()=>this.request({method:"eth_requestAccounts"}));chunkTKL4UUHE_cjs.a(this,"net_version",()=>this.request({method:"net_version"}));chunkTKL4UUHE_cjs.c(this,u,e=>{this._isConnected||(this._isConnected=!0,this._state.isConnected=!0,this.emit("connect",e));});chunkTKL4UUHE_cjs.c(this,C,({accounts:e,isUnlocked:s})=>{s?(this._isUnlocked=!0,this._state.isUnlocked=!0,chunkTKL4UUHE_cjs.b(this,_).call(this,e)):this._isUnlocked=!1;});chunkTKL4UUHE_cjs.c(this,I,()=>{this._isConnected=!1,this._state.isConnected=!1,this._state.accounts=null,this.selectedAddress=null;let e=rpcErrors.providerErrors.disconnected();this.emit("accountsChanged",[]),this.emit("disconnect",e),this.emit("close",e);});chunkTKL4UUHE_cjs.c(this,_,e=>{e?.[0]!==this.selectedAddress&&(this.selectedAddress=e?.[0]??null,this._state.accounts=e,this.emit("accountsChanged",e));});chunkTKL4UUHE_cjs.c(this,f,({chainId:e,networkVersion:s})=>{chunkTKL4UUHE_cjs.b(this,u).call(this,{chainId:e}),e!==this.chainId&&(this.chainId=e,this.emit("chainChanged",e)),s!==this.networkVersion&&(this.networkVersion=s,this.emit("networkChanged",s));});this.info=s,this.setMaxListeners(e),chunkTKL4UUHE_cjs.e(this,v,S).call(this);}};m=new WeakMap,c=new WeakMap,v=new WeakSet,S=function(){window.addEventListener(vmModuleTypes.EventNames.CORE_WALLET_ANNOUNCE_PROVIDER,e=>{chunkTKL4UUHE_cjs.b(this,c)||(chunkTKL4UUHE_cjs.d(this,c,e.detail.provider),chunkTKL4UUHE_cjs.b(this,c)?.subscribeToMessage(chunkTKL4UUHE_cjs.b(this,P)),chunkTKL4UUHE_cjs.b(this,A).call(this));}),window.dispatchEvent(new Event(vmModuleTypes.EventNames.CORE_WALLET_REQUEST_PROVIDER));},A=new WeakMap,p=new WeakMap,y=new WeakMap,P=new WeakMap,u=new WeakMap,C=new WeakMap,I=new WeakMap,_=new WeakMap,f=new WeakMap;
12
+ var d,l,E=class{constructor(a){chunkTKL4UUHE_cjs.c(this,d,new Map);chunkTKL4UUHE_cjs.c(this,l,[]);chunkTKL4UUHE_cjs.a(this,"check",a=>{chunkTKL4UUHE_cjs.b(this,d).has(a)&&chunkTKL4UUHE_cjs.b(this,d).delete(a),this._proceed();});chunkTKL4UUHE_cjs.a(this,"uncheck",a=>{chunkTKL4UUHE_cjs.b(this,d).set(a,!0);});chunkTKL4UUHE_cjs.a(this,"_proceed",()=>{if(!chunkTKL4UUHE_cjs.b(this,d).size)for(;chunkTKL4UUHE_cjs.b(this,l).length;){let a=chunkTKL4UUHE_cjs.b(this,l).shift();a?.resolve(a?.fn());}});chunkTKL4UUHE_cjs.a(this,"call",a=>new Promise(e=>{chunkTKL4UUHE_cjs.b(this,l).push({fn:a,resolve:e}),this._proceed();}));a.map(e=>chunkTKL4UUHE_cjs.b(this,d).set(e,!0));}};d=new WeakMap,l=new WeakMap;var m,c,v,S,A,p,y,P,u,C,I,_,f,D=class extends V__default.default{constructor({maxListeners:e=100,info:s,walletVersion:r}){super();chunkTKL4UUHE_cjs.c(this,v);chunkTKL4UUHE_cjs.c(this,m,new E(["provider_state_loaded"]));chunkTKL4UUHE_cjs.c(this,c,void 0);chunkTKL4UUHE_cjs.a(this,"info");chunkTKL4UUHE_cjs.a(this,"chainId",null);chunkTKL4UUHE_cjs.a(this,"selectedAddress",null);chunkTKL4UUHE_cjs.a(this,"networkVersion",null);chunkTKL4UUHE_cjs.a(this,"isAvalanche",!0);chunkTKL4UUHE_cjs.a(this,"isMetaMask",!0);chunkTKL4UUHE_cjs.a(this,"walletVersion",null);chunkTKL4UUHE_cjs.a(this,"_isReady",!1);chunkTKL4UUHE_cjs.a(this,"_isConnected",!1);chunkTKL4UUHE_cjs.a(this,"_initialized",!1);chunkTKL4UUHE_cjs.a(this,"_isUnlocked",!1);chunkTKL4UUHE_cjs.a(this,"_sessionId",crypto.randomUUID());chunkTKL4UUHE_cjs.a(this,"_state",{accounts:null,isConnected:!1,isUnlocked:!1,initialized:!1});chunkTKL4UUHE_cjs.a(this,"_metamask",{isUnlocked:()=>Promise.resolve(this._isUnlocked)});chunkTKL4UUHE_cjs.c(this,A,async()=>{try{let e=await chunkTKL4UUHE_cjs.b(this,p).call(this,{method:"avalanche_getProviderState"}),{chainId:s,accounts:r,networkVersion:o,isUnlocked:g}=e??{};g&&(this._isUnlocked=!0,this._state.isUnlocked=!0),s&&s!=="0x0"&&o&&o!=="loading"&&(this.chainId=s,this.networkVersion=o,chunkTKL4UUHE_cjs.b(this,u).call(this,{chainId:s}),chunkTKL4UUHE_cjs.b(this,f).call(this,{chainId:s,networkVersion:o})),chunkTKL4UUHE_cjs.b(this,_).call(this,r||[]),chunkTKL4UUHE_cjs.b(this,m).check("provider_state_loaded");}catch{}finally{this._initialized=!0,this._state.initialized=!0,this._isReady=!0,this.emit("_initialized");}});chunkTKL4UUHE_cjs.c(this,p,async e=>chunkTKL4UUHE_cjs.b(this,c)?.request({data:e,chainId:this.chainId,sessionId:this._sessionId}));chunkTKL4UUHE_cjs.c(this,y,e=>({connect:chunkTKL4UUHE_cjs.b(this,u),disconnect:chunkTKL4UUHE_cjs.b(this,I),accountsChanged:chunkTKL4UUHE_cjs.b(this,_),chainChanged:chunkTKL4UUHE_cjs.b(this,f),avalanche_unlockStateChanged:chunkTKL4UUHE_cjs.b(this,C)})[e]);chunkTKL4UUHE_cjs.c(this,P,({method:e,params:s})=>{let r=chunkTKL4UUHE_cjs.b(this,y).call(this,e);if(r)return r(s);this.emit(e,s);});chunkTKL4UUHE_cjs.a(this,"isConnected",()=>!0);chunkTKL4UUHE_cjs.a(this,"request",async e=>chunkTKL4UUHE_cjs.b(this,m).call(()=>chunkTKL4UUHE_cjs.b(this,p).call(this,e)));chunkTKL4UUHE_cjs.a(this,"sendAsync",(e,s)=>{if(Array.isArray(e))return Promise.all(e.map(h=>new Promise(U=>{this.sendAsync(h,(b,q)=>{U(q);});}))).then(h=>s(null,h));let{method:r,params:o,...g}=e;this.request({method:r,params:o}).then(h=>s(null,{...g,method:r,result:h})).catch(h=>s(h,{...g,method:r,error:h}));});chunkTKL4UUHE_cjs.a(this,"send",(e,s)=>{if(typeof e=="string"&&(!s||Array.isArray(s)))return this.request({method:e,params:s}).then(o=>({id:void 0,jsonrpc:"2.0",result:o}));if(typeof e=="object"&&typeof s=="function")return this.sendAsync(e,s);let r;switch(e.method){case"eth_accounts":r=this.selectedAddress?[this.selectedAddress]:[];break;case"eth_coinbase":r=this.selectedAddress||null;break;default:throw new Error("Sync method not supported. Please provide a callback or use the `request` function.")}return {id:e.id,jsonrpc:e.jsonrpc,result:r}});chunkTKL4UUHE_cjs.a(this,"enable",()=>this.request({method:"eth_requestAccounts"}));chunkTKL4UUHE_cjs.a(this,"net_version",()=>this.request({method:"net_version"}));chunkTKL4UUHE_cjs.c(this,u,e=>{this._isConnected||(this._isConnected=!0,this._state.isConnected=!0,this.emit("connect",e));});chunkTKL4UUHE_cjs.c(this,C,({accounts:e,isUnlocked:s})=>{s?(this._isUnlocked=!0,this._state.isUnlocked=!0,chunkTKL4UUHE_cjs.b(this,_).call(this,e)):this._isUnlocked=!1;});chunkTKL4UUHE_cjs.c(this,I,()=>{this._isConnected=!1,this._state.isConnected=!1,this._state.accounts=null,this.selectedAddress=null;let e=rpcErrors.providerErrors.disconnected();this.emit("accountsChanged",[]),this.emit("disconnect",e),this.emit("close",e);});chunkTKL4UUHE_cjs.c(this,_,e=>{e?.[0]!==this.selectedAddress&&(this.selectedAddress=e?.[0]??null,this._state.accounts=e,this.emit("accountsChanged",e));});chunkTKL4UUHE_cjs.c(this,f,({chainId:e,networkVersion:s})=>{chunkTKL4UUHE_cjs.b(this,u).call(this,{chainId:e}),e!==this.chainId&&(this.chainId=e,this.emit("chainChanged",e)),s!==this.networkVersion&&(this.networkVersion=s,this.emit("networkChanged",s));});this.info=s,this.walletVersion=r??null,this.setMaxListeners(e),chunkTKL4UUHE_cjs.e(this,v,S).call(this);}};m=new WeakMap,c=new WeakMap,v=new WeakSet,S=function(){window.addEventListener(vmModuleTypes.EventNames.CORE_WALLET_ANNOUNCE_PROVIDER,e=>{chunkTKL4UUHE_cjs.b(this,c)||(chunkTKL4UUHE_cjs.d(this,c,e.detail.provider),chunkTKL4UUHE_cjs.b(this,c)?.subscribeToMessage(chunkTKL4UUHE_cjs.b(this,P)),chunkTKL4UUHE_cjs.b(this,A).call(this));}),window.dispatchEvent(new Event(vmModuleTypes.EventNames.CORE_WALLET_REQUEST_PROVIDER));},A=new WeakMap,p=new WeakMap,y=new WeakMap,P=new WeakMap,u=new WeakMap,C=new WeakMap,I=new WeakMap,_=new WeakMap,f=new WeakMap;
13
13
 
14
14
  exports.EVMProvider = D;
15
15
  //# sourceMappingURL=out.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/provider/provider.ts","../../src/utils/provider-ready-promise.ts"],"names":["providerErrors","EventEmitter","EventNames","_unpreparedSteps","_inflightRequests","ProviderReadyPromise","steps","__privateAdd","__publicField","step","__privateGet","request","fn","resolve","_providerReadyPromise","_chainagnosticProvider","_subscribe","subscribe_fn","_init","_request","_getEventHandler","_handleBackgroundMessage","_connect","_unlockStateChanged","_disconnect","_accountsChanged","_chainChanged","EVMProvider","maxListeners","info","response","chainId","accounts","networkVersion","isUnlocked","data","method","params","eventHandler","payload","callback","item","_","res","result","rest","error","disconnectError","__privateMethod","event","__privateSet"],"mappings":"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","sourcesContent":["import { providerErrors } from '@metamask/rpc-errors';\nimport EventEmitter from 'events';\nimport {\n EventNames,\n type AccountsChangedEventData,\n type ChainAgnosticProvider,\n type ChainChangedEventData,\n type JsonRpcRequestPayload,\n type PartialBy,\n type UnlockStateChangedEventData,\n type EIP6963ProviderInfo,\n} from '@avalabs/vm-module-types';\nimport { InitializationStep, ProviderReadyPromise } from '../utils/provider-ready-promise';\n\ninterface ProviderState {\n accounts: string[] | null;\n isConnected: boolean;\n isUnlocked: boolean;\n initialized: boolean;\n}\n\nenum DAppProviderRequest {\n INIT_DAPP_STATE = 'avalanche_getProviderState',\n}\n\nexport class EVMProvider extends EventEmitter {\n #providerReadyPromise = new ProviderReadyPromise([InitializationStep.PROVIDER_STATE_LOADED]);\n #chainagnosticProvider?: ChainAgnosticProvider;\n\n readonly info: EIP6963ProviderInfo;\n\n chainId: string | null = null;\n selectedAddress: string | null = null;\n /**\n * The network ID of the currently connected Ethereum chain.\n * @deprecated\n */\n networkVersion: string | null = null;\n isAvalanche = true;\n isMetaMask = true;\n\n _isReady = false;\n _isConnected = false;\n _initialized = false;\n _isUnlocked = false;\n _sessionId = crypto.randomUUID();\n\n _state: ProviderState = {\n accounts: null,\n isConnected: false,\n isUnlocked: false,\n initialized: false,\n };\n\n // Metamask compatibility\n _metamask = {\n isUnlocked: () => Promise.resolve(this._isUnlocked),\n };\n\n constructor({ maxListeners = 100, info }: { maxListeners?: number; info: EIP6963ProviderInfo }) {\n super();\n this.info = info;\n this.setMaxListeners(maxListeners);\n this.#subscribe();\n }\n\n #subscribe() {\n window.addEventListener(EventNames.CORE_WALLET_ANNOUNCE_PROVIDER, (event) => {\n if (this.#chainagnosticProvider) {\n return;\n }\n this.#chainagnosticProvider = (<CustomEvent>event).detail.provider;\n\n this.#chainagnosticProvider?.subscribeToMessage(this.#handleBackgroundMessage);\n\n this.#init();\n });\n\n window.dispatchEvent(new Event(EventNames.CORE_WALLET_REQUEST_PROVIDER));\n }\n /**\n * Initializes provider state, and collects dApp information\n */\n #init = async () => {\n try {\n const response = await this.#request({\n method: DAppProviderRequest.INIT_DAPP_STATE,\n });\n\n const { chainId, accounts, networkVersion, isUnlocked } =\n (response as {\n isUnlocked: boolean;\n chainId: string | null;\n networkVersion: string | null;\n accounts: string[];\n }) ?? {};\n\n if (isUnlocked) {\n this._isUnlocked = true;\n this._state.isUnlocked = true;\n }\n\n if (chainId && chainId !== '0x0' && networkVersion && networkVersion !== 'loading') {\n this.chainId = chainId;\n this.networkVersion = networkVersion;\n this.#connect({ chainId });\n this.#chainChanged({\n chainId,\n networkVersion,\n });\n }\n\n this.#accountsChanged(accounts || []);\n\n this.#providerReadyPromise.check(InitializationStep.PROVIDER_STATE_LOADED);\n } catch (e) {\n // the provider will have a partial state, but still should be able to function\n } finally {\n this._initialized = true;\n this._state.initialized = true;\n this._isReady = true;\n this.emit('_initialized');\n }\n };\n\n #request = async (data: PartialBy<JsonRpcRequestPayload<string>, 'id' | 'params'>) => {\n return this.#chainagnosticProvider?.request({\n data,\n chainId: this.chainId,\n sessionId: this._sessionId,\n });\n };\n\n #getEventHandler = (method: string): ((params: unknown) => void) => {\n const handlerMap = {\n connect: this.#connect,\n disconnect: this.#disconnect,\n accountsChanged: this.#accountsChanged,\n chainChanged: this.#chainChanged,\n avalanche_unlockStateChanged: this.#unlockStateChanged,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } as any;\n return handlerMap[method];\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n #handleBackgroundMessage = ({ method, params }: any) => {\n const eventHandler = this.#getEventHandler(method);\n if (eventHandler) {\n return eventHandler(params);\n }\n\n this.emit(method, params);\n };\n\n isConnected = () => {\n return true;\n };\n\n request = async (data: PartialBy<JsonRpcRequestPayload<string>, 'id' | 'params'>) => {\n return this.#providerReadyPromise.call(() => {\n return this.#request(data);\n });\n };\n\n // shim to matamask legacy api\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n sendAsync = (payload: any, callback: any) => {\n if (Array.isArray(payload)) {\n return Promise.all(\n payload.map(\n (item) =>\n new Promise((resolve) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.sendAsync(item, (_: any, res: any) => {\n // ignore error\n resolve(res);\n });\n }),\n ),\n ).then((result) => callback(null, result));\n }\n const { method, params, ...rest } = payload;\n this.request({ method, params })\n .then((result) => callback(null, { ...rest, method, result }))\n .catch((error) => callback(error, { ...rest, method, error }));\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n send = (payload: any, callback?: any) => {\n if (typeof payload === 'string' && (!callback || Array.isArray(callback))) {\n return this.request({\n method: payload,\n params: callback,\n }).then((result) => ({\n id: undefined,\n jsonrpc: '2.0',\n result,\n }));\n }\n\n if (typeof payload === 'object' && typeof callback === 'function') {\n return this.sendAsync(payload, callback);\n }\n\n let result;\n switch (payload.method) {\n case 'eth_accounts':\n result = this.selectedAddress ? [this.selectedAddress] : [];\n break;\n\n case 'eth_coinbase':\n result = this.selectedAddress || null;\n break;\n\n default:\n throw new Error('Sync method not supported. Please provide a callback or use the `request` function.');\n }\n\n return {\n id: payload.id,\n jsonrpc: payload.jsonrpc,\n result,\n };\n };\n\n enable = () => {\n return this.request({ method: 'eth_requestAccounts' });\n };\n\n net_version = () => {\n return this.request({ method: 'net_version' });\n };\n\n #connect = (data: { chainId: string }) => {\n if (!this._isConnected) {\n this._isConnected = true;\n this._state.isConnected = true;\n this.emit('connect', data);\n }\n };\n\n #unlockStateChanged = ({ accounts, isUnlocked }: UnlockStateChangedEventData) => {\n if (isUnlocked) {\n this._isUnlocked = true;\n this._state.isUnlocked = true;\n this.#accountsChanged(accounts);\n } else {\n this._isUnlocked = false;\n }\n };\n\n #disconnect = () => {\n this._isConnected = false;\n this._state.isConnected = false;\n this._state.accounts = null;\n this.selectedAddress = null;\n const disconnectError = providerErrors.disconnected();\n\n this.emit('accountsChanged', []);\n this.emit('disconnect', disconnectError);\n this.emit('close', disconnectError);\n };\n\n #accountsChanged = (accounts: AccountsChangedEventData) => {\n if (accounts?.[0] === this.selectedAddress) {\n return;\n }\n\n this.selectedAddress = accounts?.[0] ?? null;\n this._state.accounts = accounts;\n this.emit('accountsChanged', accounts);\n };\n\n #chainChanged = ({ chainId, networkVersion }: ChainChangedEventData) => {\n this.#connect({ chainId });\n\n if (chainId !== this.chainId) {\n this.chainId = chainId;\n this.emit('chainChanged', chainId);\n }\n\n if (networkVersion !== this.networkVersion) {\n this.networkVersion = networkVersion;\n this.emit('networkChanged', networkVersion);\n }\n };\n}\n","export enum InitializationStep {\n DOMAIN_METADATA_SENT = 'domain_metadata_sent',\n PROVIDER_STATE_LOADED = 'provider_state_loaded',\n}\n\nexport class ProviderReadyPromise {\n #unpreparedSteps: Map<InitializationStep, boolean> = new Map();\n #inflightRequests: {\n resolve(value: unknown): void;\n fn(): Promise<unknown>;\n }[] = [];\n\n constructor(steps: InitializationStep[]) {\n steps.map((step) => this.#unpreparedSteps.set(step, true));\n }\n\n check = (step: InitializationStep) => {\n const hasStep = this.#unpreparedSteps.has(step);\n\n if (hasStep) {\n this.#unpreparedSteps.delete(step);\n }\n\n this._proceed();\n };\n\n uncheck = (step: InitializationStep) => {\n this.#unpreparedSteps.set(step, true);\n };\n\n private _proceed = () => {\n if (this.#unpreparedSteps.size) {\n return;\n }\n\n while (this.#inflightRequests.length) {\n const request = this.#inflightRequests.shift();\n request?.resolve(request?.fn());\n }\n };\n\n call = (fn: () => Promise<unknown>) => {\n return new Promise((resolve) => {\n this.#inflightRequests.push({\n fn,\n resolve,\n });\n\n this._proceed();\n });\n };\n}\n"]}
1
+ {"version":3,"sources":["../../src/provider/provider.ts","../../src/utils/provider-ready-promise.ts"],"names":["providerErrors","EventEmitter","EventNames","_unpreparedSteps","_inflightRequests","ProviderReadyPromise","steps","__privateAdd","__publicField","step","__privateGet","request","fn","resolve","_providerReadyPromise","_chainagnosticProvider","_subscribe","subscribe_fn","_init","_request","_getEventHandler","_handleBackgroundMessage","_connect","_unlockStateChanged","_disconnect","_accountsChanged","_chainChanged","EVMProvider","maxListeners","info","walletVersion","response","chainId","accounts","networkVersion","isUnlocked","data","method","params","eventHandler","payload","callback","item","_","res","result","rest","error","disconnectError","__privateMethod","event","__privateSet"],"mappings":"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","sourcesContent":["import { providerErrors } from '@metamask/rpc-errors';\nimport EventEmitter from 'events';\nimport {\n EventNames,\n type AccountsChangedEventData,\n type ChainAgnosticProvider,\n type ChainChangedEventData,\n type JsonRpcRequestPayload,\n type PartialBy,\n type UnlockStateChangedEventData,\n type EIP6963ProviderInfo,\n} from '@avalabs/vm-module-types';\nimport { InitializationStep, ProviderReadyPromise } from '../utils/provider-ready-promise';\n\ninterface ProviderState {\n accounts: string[] | null;\n isConnected: boolean;\n isUnlocked: boolean;\n initialized: boolean;\n}\n\nenum DAppProviderRequest {\n INIT_DAPP_STATE = 'avalanche_getProviderState',\n}\n\nexport class EVMProvider extends EventEmitter {\n #providerReadyPromise = new ProviderReadyPromise([InitializationStep.PROVIDER_STATE_LOADED]);\n #chainagnosticProvider?: ChainAgnosticProvider;\n\n readonly info: EIP6963ProviderInfo;\n\n chainId: string | null = null;\n selectedAddress: string | null = null;\n /**\n * The network ID of the currently connected Ethereum chain.\n * @deprecated\n */\n networkVersion: string | null = null;\n isAvalanche = true;\n isMetaMask = true;\n walletVersion: string | null = null;\n\n _isReady = false;\n _isConnected = false;\n _initialized = false;\n _isUnlocked = false;\n _sessionId = crypto.randomUUID();\n\n _state: ProviderState = {\n accounts: null,\n isConnected: false,\n isUnlocked: false,\n initialized: false,\n };\n\n // Metamask compatibility\n _metamask = {\n isUnlocked: () => Promise.resolve(this._isUnlocked),\n };\n\n constructor({\n maxListeners = 100,\n info,\n walletVersion,\n }: {\n maxListeners?: number;\n info: EIP6963ProviderInfo;\n walletVersion?: string;\n }) {\n super();\n this.info = info;\n this.walletVersion = walletVersion ?? null;\n this.setMaxListeners(maxListeners);\n this.#subscribe();\n }\n\n #subscribe() {\n window.addEventListener(EventNames.CORE_WALLET_ANNOUNCE_PROVIDER, (event) => {\n if (this.#chainagnosticProvider) {\n return;\n }\n this.#chainagnosticProvider = (<CustomEvent>event).detail.provider;\n\n this.#chainagnosticProvider?.subscribeToMessage(this.#handleBackgroundMessage);\n\n this.#init();\n });\n\n window.dispatchEvent(new Event(EventNames.CORE_WALLET_REQUEST_PROVIDER));\n }\n /**\n * Initializes provider state, and collects dApp information\n */\n #init = async () => {\n try {\n const response = await this.#request({\n method: DAppProviderRequest.INIT_DAPP_STATE,\n });\n\n const { chainId, accounts, networkVersion, isUnlocked } =\n (response as {\n isUnlocked: boolean;\n chainId: string | null;\n networkVersion: string | null;\n accounts: string[];\n }) ?? {};\n\n if (isUnlocked) {\n this._isUnlocked = true;\n this._state.isUnlocked = true;\n }\n\n if (chainId && chainId !== '0x0' && networkVersion && networkVersion !== 'loading') {\n this.chainId = chainId;\n this.networkVersion = networkVersion;\n this.#connect({ chainId });\n this.#chainChanged({\n chainId,\n networkVersion,\n });\n }\n\n this.#accountsChanged(accounts || []);\n\n this.#providerReadyPromise.check(InitializationStep.PROVIDER_STATE_LOADED);\n } catch (e) {\n // the provider will have a partial state, but still should be able to function\n } finally {\n this._initialized = true;\n this._state.initialized = true;\n this._isReady = true;\n this.emit('_initialized');\n }\n };\n\n #request = async (data: PartialBy<JsonRpcRequestPayload<string>, 'id' | 'params'>) => {\n return this.#chainagnosticProvider?.request({\n data,\n chainId: this.chainId,\n sessionId: this._sessionId,\n });\n };\n\n #getEventHandler = (method: string): ((params: unknown) => void) => {\n const handlerMap = {\n connect: this.#connect,\n disconnect: this.#disconnect,\n accountsChanged: this.#accountsChanged,\n chainChanged: this.#chainChanged,\n avalanche_unlockStateChanged: this.#unlockStateChanged,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } as any;\n return handlerMap[method];\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n #handleBackgroundMessage = ({ method, params }: any) => {\n const eventHandler = this.#getEventHandler(method);\n if (eventHandler) {\n return eventHandler(params);\n }\n\n this.emit(method, params);\n };\n\n isConnected = () => {\n return true;\n };\n\n request = async (data: PartialBy<JsonRpcRequestPayload<string>, 'id' | 'params'>) => {\n return this.#providerReadyPromise.call(() => {\n return this.#request(data);\n });\n };\n\n // shim to matamask legacy api\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n sendAsync = (payload: any, callback: any) => {\n if (Array.isArray(payload)) {\n return Promise.all(\n payload.map(\n (item) =>\n new Promise((resolve) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.sendAsync(item, (_: any, res: any) => {\n // ignore error\n resolve(res);\n });\n }),\n ),\n ).then((result) => callback(null, result));\n }\n const { method, params, ...rest } = payload;\n this.request({ method, params })\n .then((result) => callback(null, { ...rest, method, result }))\n .catch((error) => callback(error, { ...rest, method, error }));\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n send = (payload: any, callback?: any) => {\n if (typeof payload === 'string' && (!callback || Array.isArray(callback))) {\n return this.request({\n method: payload,\n params: callback,\n }).then((result) => ({\n id: undefined,\n jsonrpc: '2.0',\n result,\n }));\n }\n\n if (typeof payload === 'object' && typeof callback === 'function') {\n return this.sendAsync(payload, callback);\n }\n\n let result;\n switch (payload.method) {\n case 'eth_accounts':\n result = this.selectedAddress ? [this.selectedAddress] : [];\n break;\n\n case 'eth_coinbase':\n result = this.selectedAddress || null;\n break;\n\n default:\n throw new Error('Sync method not supported. Please provide a callback or use the `request` function.');\n }\n\n return {\n id: payload.id,\n jsonrpc: payload.jsonrpc,\n result,\n };\n };\n\n enable = () => {\n return this.request({ method: 'eth_requestAccounts' });\n };\n\n net_version = () => {\n return this.request({ method: 'net_version' });\n };\n\n #connect = (data: { chainId: string }) => {\n if (!this._isConnected) {\n this._isConnected = true;\n this._state.isConnected = true;\n this.emit('connect', data);\n }\n };\n\n #unlockStateChanged = ({ accounts, isUnlocked }: UnlockStateChangedEventData) => {\n if (isUnlocked) {\n this._isUnlocked = true;\n this._state.isUnlocked = true;\n this.#accountsChanged(accounts);\n } else {\n this._isUnlocked = false;\n }\n };\n\n #disconnect = () => {\n this._isConnected = false;\n this._state.isConnected = false;\n this._state.accounts = null;\n this.selectedAddress = null;\n const disconnectError = providerErrors.disconnected();\n\n this.emit('accountsChanged', []);\n this.emit('disconnect', disconnectError);\n this.emit('close', disconnectError);\n };\n\n #accountsChanged = (accounts: AccountsChangedEventData) => {\n if (accounts?.[0] === this.selectedAddress) {\n return;\n }\n\n this.selectedAddress = accounts?.[0] ?? null;\n this._state.accounts = accounts;\n this.emit('accountsChanged', accounts);\n };\n\n #chainChanged = ({ chainId, networkVersion }: ChainChangedEventData) => {\n this.#connect({ chainId });\n\n if (chainId !== this.chainId) {\n this.chainId = chainId;\n this.emit('chainChanged', chainId);\n }\n\n if (networkVersion !== this.networkVersion) {\n this.networkVersion = networkVersion;\n this.emit('networkChanged', networkVersion);\n }\n };\n}\n","export enum InitializationStep {\n DOMAIN_METADATA_SENT = 'domain_metadata_sent',\n PROVIDER_STATE_LOADED = 'provider_state_loaded',\n}\n\nexport class ProviderReadyPromise {\n #unpreparedSteps: Map<InitializationStep, boolean> = new Map();\n #inflightRequests: {\n resolve(value: unknown): void;\n fn(): Promise<unknown>;\n }[] = [];\n\n constructor(steps: InitializationStep[]) {\n steps.map((step) => this.#unpreparedSteps.set(step, true));\n }\n\n check = (step: InitializationStep) => {\n const hasStep = this.#unpreparedSteps.has(step);\n\n if (hasStep) {\n this.#unpreparedSteps.delete(step);\n }\n\n this._proceed();\n };\n\n uncheck = (step: InitializationStep) => {\n this.#unpreparedSteps.set(step, true);\n };\n\n private _proceed = () => {\n if (this.#unpreparedSteps.size) {\n return;\n }\n\n while (this.#inflightRequests.length) {\n const request = this.#inflightRequests.shift();\n request?.resolve(request?.fn());\n }\n };\n\n call = (fn: () => Promise<unknown>) => {\n return new Promise((resolve) => {\n this.#inflightRequests.push({\n fn,\n resolve,\n });\n\n this._proceed();\n });\n };\n}\n"]}
@@ -19,6 +19,7 @@ declare class EVMProvider extends EventEmitter {
19
19
  networkVersion: string | null;
20
20
  isAvalanche: boolean;
21
21
  isMetaMask: boolean;
22
+ walletVersion: string | null;
22
23
  _isReady: boolean;
23
24
  _isConnected: boolean;
24
25
  _initialized: boolean;
@@ -28,9 +29,10 @@ declare class EVMProvider extends EventEmitter {
28
29
  _metamask: {
29
30
  isUnlocked: () => Promise<boolean>;
30
31
  };
31
- constructor({ maxListeners, info }: {
32
+ constructor({ maxListeners, info, walletVersion, }: {
32
33
  maxListeners?: number;
33
34
  info: EIP6963ProviderInfo;
35
+ walletVersion?: string;
34
36
  });
35
37
  isConnected: () => boolean;
36
38
  request: (data: PartialBy<JsonRpcRequestPayload<string>, 'id' | 'params'>) => Promise<unknown>;
@@ -19,6 +19,7 @@ declare class EVMProvider extends EventEmitter {
19
19
  networkVersion: string | null;
20
20
  isAvalanche: boolean;
21
21
  isMetaMask: boolean;
22
+ walletVersion: string | null;
22
23
  _isReady: boolean;
23
24
  _isConnected: boolean;
24
25
  _initialized: boolean;
@@ -28,9 +29,10 @@ declare class EVMProvider extends EventEmitter {
28
29
  _metamask: {
29
30
  isUnlocked: () => Promise<boolean>;
30
31
  };
31
- constructor({ maxListeners, info }: {
32
+ constructor({ maxListeners, info, walletVersion, }: {
32
33
  maxListeners?: number;
33
34
  info: EIP6963ProviderInfo;
35
+ walletVersion?: string;
34
36
  });
35
37
  isConnected: () => boolean;
36
38
  request: (data: PartialBy<JsonRpcRequestPayload<string>, 'id' | 'params'>) => Promise<unknown>;
@@ -1,9 +1,9 @@
1
- import { c as c$1, a, b as b$1, e, d as d$1 } from '../chunk-7VP42LRT.js';
1
+ import { c as c$1, a, b, e, d as d$1 } from '../chunk-7VP42LRT.js';
2
2
  import { providerErrors } from '@metamask/rpc-errors';
3
- import b from 'events';
3
+ import V from 'events';
4
4
  import { EventNames } from '@avalabs/vm-module-types';
5
5
 
6
- var d,l,g=class{constructor(r){c$1(this,d,new Map);c$1(this,l,[]);a(this,"check",r=>{b$1(this,d).has(r)&&b$1(this,d).delete(r),this._proceed();});a(this,"uncheck",r=>{b$1(this,d).set(r,!0);});a(this,"_proceed",()=>{if(!b$1(this,d).size)for(;b$1(this,l).length;){let r=b$1(this,l).shift();r?.resolve(r?.fn());}});a(this,"call",r=>new Promise(e=>{b$1(this,l).push({fn:r,resolve:e}),this._proceed();}));r.map(e=>b$1(this,d).set(e,!0));}};d=new WeakMap,l=new WeakMap;var m,c,v,S,A,p,y,P,u,C,I,_,f,D=class extends b{constructor({maxListeners:e$1=100,info:s}){super();c$1(this,v);c$1(this,m,new g(["provider_state_loaded"]));c$1(this,c,void 0);a(this,"info");a(this,"chainId",null);a(this,"selectedAddress",null);a(this,"networkVersion",null);a(this,"isAvalanche",!0);a(this,"isMetaMask",!0);a(this,"_isReady",!1);a(this,"_isConnected",!1);a(this,"_initialized",!1);a(this,"_isUnlocked",!1);a(this,"_sessionId",crypto.randomUUID());a(this,"_state",{accounts:null,isConnected:!1,isUnlocked:!1,initialized:!1});a(this,"_metamask",{isUnlocked:()=>Promise.resolve(this._isUnlocked)});c$1(this,A,async()=>{try{let e=await b$1(this,p).call(this,{method:"avalanche_getProviderState"}),{chainId:s,accounts:a,networkVersion:o,isUnlocked:E}=e??{};E&&(this._isUnlocked=!0,this._state.isUnlocked=!0),s&&s!=="0x0"&&o&&o!=="loading"&&(this.chainId=s,this.networkVersion=o,b$1(this,u).call(this,{chainId:s}),b$1(this,f).call(this,{chainId:s,networkVersion:o})),b$1(this,_).call(this,a||[]),b$1(this,m).check("provider_state_loaded");}catch{}finally{this._initialized=!0,this._state.initialized=!0,this._isReady=!0,this.emit("_initialized");}});c$1(this,p,async e=>b$1(this,c)?.request({data:e,chainId:this.chainId,sessionId:this._sessionId}));c$1(this,y,e=>({connect:b$1(this,u),disconnect:b$1(this,I),accountsChanged:b$1(this,_),chainChanged:b$1(this,f),avalanche_unlockStateChanged:b$1(this,C)})[e]);c$1(this,P,({method:e,params:s})=>{let a=b$1(this,y).call(this,e);if(a)return a(s);this.emit(e,s);});a(this,"isConnected",()=>!0);a(this,"request",async e=>b$1(this,m).call(()=>b$1(this,p).call(this,e)));a(this,"sendAsync",(e,s)=>{if(Array.isArray(e))return Promise.all(e.map(h=>new Promise(U=>{this.sendAsync(h,(z,q)=>{U(q);});}))).then(h=>s(null,h));let{method:a,params:o,...E}=e;this.request({method:a,params:o}).then(h=>s(null,{...E,method:a,result:h})).catch(h=>s(h,{...E,method:a,error:h}));});a(this,"send",(e,s)=>{if(typeof e=="string"&&(!s||Array.isArray(s)))return this.request({method:e,params:s}).then(o=>({id:void 0,jsonrpc:"2.0",result:o}));if(typeof e=="object"&&typeof s=="function")return this.sendAsync(e,s);let a;switch(e.method){case"eth_accounts":a=this.selectedAddress?[this.selectedAddress]:[];break;case"eth_coinbase":a=this.selectedAddress||null;break;default:throw new Error("Sync method not supported. Please provide a callback or use the `request` function.")}return {id:e.id,jsonrpc:e.jsonrpc,result:a}});a(this,"enable",()=>this.request({method:"eth_requestAccounts"}));a(this,"net_version",()=>this.request({method:"net_version"}));c$1(this,u,e=>{this._isConnected||(this._isConnected=!0,this._state.isConnected=!0,this.emit("connect",e));});c$1(this,C,({accounts:e,isUnlocked:s})=>{s?(this._isUnlocked=!0,this._state.isUnlocked=!0,b$1(this,_).call(this,e)):this._isUnlocked=!1;});c$1(this,I,()=>{this._isConnected=!1,this._state.isConnected=!1,this._state.accounts=null,this.selectedAddress=null;let e=providerErrors.disconnected();this.emit("accountsChanged",[]),this.emit("disconnect",e),this.emit("close",e);});c$1(this,_,e=>{e?.[0]!==this.selectedAddress&&(this.selectedAddress=e?.[0]??null,this._state.accounts=e,this.emit("accountsChanged",e));});c$1(this,f,({chainId:e,networkVersion:s})=>{b$1(this,u).call(this,{chainId:e}),e!==this.chainId&&(this.chainId=e,this.emit("chainChanged",e)),s!==this.networkVersion&&(this.networkVersion=s,this.emit("networkChanged",s));});this.info=s,this.setMaxListeners(e$1),e(this,v,S).call(this);}};m=new WeakMap,c=new WeakMap,v=new WeakSet,S=function(){window.addEventListener(EventNames.CORE_WALLET_ANNOUNCE_PROVIDER,e=>{b$1(this,c)||(d$1(this,c,e.detail.provider),b$1(this,c)?.subscribeToMessage(b$1(this,P)),b$1(this,A).call(this));}),window.dispatchEvent(new Event(EventNames.CORE_WALLET_REQUEST_PROVIDER));},A=new WeakMap,p=new WeakMap,y=new WeakMap,P=new WeakMap,u=new WeakMap,C=new WeakMap,I=new WeakMap,_=new WeakMap,f=new WeakMap;
6
+ var d,l,E=class{constructor(a$1){c$1(this,d,new Map);c$1(this,l,[]);a(this,"check",a=>{b(this,d).has(a)&&b(this,d).delete(a),this._proceed();});a(this,"uncheck",a=>{b(this,d).set(a,!0);});a(this,"_proceed",()=>{if(!b(this,d).size)for(;b(this,l).length;){let a=b(this,l).shift();a?.resolve(a?.fn());}});a(this,"call",a=>new Promise(e=>{b(this,l).push({fn:a,resolve:e}),this._proceed();}));a$1.map(e=>b(this,d).set(e,!0));}};d=new WeakMap,l=new WeakMap;var m,c,v,S,A,p,y,P,u,C,I,_,f,D=class extends V{constructor({maxListeners:e$1=100,info:s,walletVersion:r}){super();c$1(this,v);c$1(this,m,new E(["provider_state_loaded"]));c$1(this,c,void 0);a(this,"info");a(this,"chainId",null);a(this,"selectedAddress",null);a(this,"networkVersion",null);a(this,"isAvalanche",!0);a(this,"isMetaMask",!0);a(this,"walletVersion",null);a(this,"_isReady",!1);a(this,"_isConnected",!1);a(this,"_initialized",!1);a(this,"_isUnlocked",!1);a(this,"_sessionId",crypto.randomUUID());a(this,"_state",{accounts:null,isConnected:!1,isUnlocked:!1,initialized:!1});a(this,"_metamask",{isUnlocked:()=>Promise.resolve(this._isUnlocked)});c$1(this,A,async()=>{try{let e=await b(this,p).call(this,{method:"avalanche_getProviderState"}),{chainId:s,accounts:r,networkVersion:o,isUnlocked:g}=e??{};g&&(this._isUnlocked=!0,this._state.isUnlocked=!0),s&&s!=="0x0"&&o&&o!=="loading"&&(this.chainId=s,this.networkVersion=o,b(this,u).call(this,{chainId:s}),b(this,f).call(this,{chainId:s,networkVersion:o})),b(this,_).call(this,r||[]),b(this,m).check("provider_state_loaded");}catch{}finally{this._initialized=!0,this._state.initialized=!0,this._isReady=!0,this.emit("_initialized");}});c$1(this,p,async e=>b(this,c)?.request({data:e,chainId:this.chainId,sessionId:this._sessionId}));c$1(this,y,e=>({connect:b(this,u),disconnect:b(this,I),accountsChanged:b(this,_),chainChanged:b(this,f),avalanche_unlockStateChanged:b(this,C)})[e]);c$1(this,P,({method:e,params:s})=>{let r=b(this,y).call(this,e);if(r)return r(s);this.emit(e,s);});a(this,"isConnected",()=>!0);a(this,"request",async e=>b(this,m).call(()=>b(this,p).call(this,e)));a(this,"sendAsync",(e,s)=>{if(Array.isArray(e))return Promise.all(e.map(h=>new Promise(U=>{this.sendAsync(h,(b,q)=>{U(q);});}))).then(h=>s(null,h));let{method:r,params:o,...g}=e;this.request({method:r,params:o}).then(h=>s(null,{...g,method:r,result:h})).catch(h=>s(h,{...g,method:r,error:h}));});a(this,"send",(e,s)=>{if(typeof e=="string"&&(!s||Array.isArray(s)))return this.request({method:e,params:s}).then(o=>({id:void 0,jsonrpc:"2.0",result:o}));if(typeof e=="object"&&typeof s=="function")return this.sendAsync(e,s);let r;switch(e.method){case"eth_accounts":r=this.selectedAddress?[this.selectedAddress]:[];break;case"eth_coinbase":r=this.selectedAddress||null;break;default:throw new Error("Sync method not supported. Please provide a callback or use the `request` function.")}return {id:e.id,jsonrpc:e.jsonrpc,result:r}});a(this,"enable",()=>this.request({method:"eth_requestAccounts"}));a(this,"net_version",()=>this.request({method:"net_version"}));c$1(this,u,e=>{this._isConnected||(this._isConnected=!0,this._state.isConnected=!0,this.emit("connect",e));});c$1(this,C,({accounts:e,isUnlocked:s})=>{s?(this._isUnlocked=!0,this._state.isUnlocked=!0,b(this,_).call(this,e)):this._isUnlocked=!1;});c$1(this,I,()=>{this._isConnected=!1,this._state.isConnected=!1,this._state.accounts=null,this.selectedAddress=null;let e=providerErrors.disconnected();this.emit("accountsChanged",[]),this.emit("disconnect",e),this.emit("close",e);});c$1(this,_,e=>{e?.[0]!==this.selectedAddress&&(this.selectedAddress=e?.[0]??null,this._state.accounts=e,this.emit("accountsChanged",e));});c$1(this,f,({chainId:e,networkVersion:s})=>{b(this,u).call(this,{chainId:e}),e!==this.chainId&&(this.chainId=e,this.emit("chainChanged",e)),s!==this.networkVersion&&(this.networkVersion=s,this.emit("networkChanged",s));});this.info=s,this.walletVersion=r??null,this.setMaxListeners(e$1),e(this,v,S).call(this);}};m=new WeakMap,c=new WeakMap,v=new WeakSet,S=function(){window.addEventListener(EventNames.CORE_WALLET_ANNOUNCE_PROVIDER,e=>{b(this,c)||(d$1(this,c,e.detail.provider),b(this,c)?.subscribeToMessage(b(this,P)),b(this,A).call(this));}),window.dispatchEvent(new Event(EventNames.CORE_WALLET_REQUEST_PROVIDER));},A=new WeakMap,p=new WeakMap,y=new WeakMap,P=new WeakMap,u=new WeakMap,C=new WeakMap,I=new WeakMap,_=new WeakMap,f=new WeakMap;
7
7
 
8
8
  export { D as EVMProvider };
9
9
  //# sourceMappingURL=out.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/provider/provider.ts","../../src/utils/provider-ready-promise.ts"],"names":["providerErrors","EventEmitter","EventNames","_unpreparedSteps","_inflightRequests","ProviderReadyPromise","steps","__privateAdd","__publicField","step","__privateGet","request","fn","resolve","_providerReadyPromise","_chainagnosticProvider","_subscribe","subscribe_fn","_init","_request","_getEventHandler","_handleBackgroundMessage","_connect","_unlockStateChanged","_disconnect","_accountsChanged","_chainChanged","EVMProvider","maxListeners","info","response","chainId","accounts","networkVersion","isUnlocked","data","method","params","eventHandler","payload","callback","item","_","res","result","rest","error","disconnectError","__privateMethod","event","__privateSet"],"mappings":"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","sourcesContent":["import { providerErrors } from '@metamask/rpc-errors';\nimport EventEmitter from 'events';\nimport {\n EventNames,\n type AccountsChangedEventData,\n type ChainAgnosticProvider,\n type ChainChangedEventData,\n type JsonRpcRequestPayload,\n type PartialBy,\n type UnlockStateChangedEventData,\n type EIP6963ProviderInfo,\n} from '@avalabs/vm-module-types';\nimport { InitializationStep, ProviderReadyPromise } from '../utils/provider-ready-promise';\n\ninterface ProviderState {\n accounts: string[] | null;\n isConnected: boolean;\n isUnlocked: boolean;\n initialized: boolean;\n}\n\nenum DAppProviderRequest {\n INIT_DAPP_STATE = 'avalanche_getProviderState',\n}\n\nexport class EVMProvider extends EventEmitter {\n #providerReadyPromise = new ProviderReadyPromise([InitializationStep.PROVIDER_STATE_LOADED]);\n #chainagnosticProvider?: ChainAgnosticProvider;\n\n readonly info: EIP6963ProviderInfo;\n\n chainId: string | null = null;\n selectedAddress: string | null = null;\n /**\n * The network ID of the currently connected Ethereum chain.\n * @deprecated\n */\n networkVersion: string | null = null;\n isAvalanche = true;\n isMetaMask = true;\n\n _isReady = false;\n _isConnected = false;\n _initialized = false;\n _isUnlocked = false;\n _sessionId = crypto.randomUUID();\n\n _state: ProviderState = {\n accounts: null,\n isConnected: false,\n isUnlocked: false,\n initialized: false,\n };\n\n // Metamask compatibility\n _metamask = {\n isUnlocked: () => Promise.resolve(this._isUnlocked),\n };\n\n constructor({ maxListeners = 100, info }: { maxListeners?: number; info: EIP6963ProviderInfo }) {\n super();\n this.info = info;\n this.setMaxListeners(maxListeners);\n this.#subscribe();\n }\n\n #subscribe() {\n window.addEventListener(EventNames.CORE_WALLET_ANNOUNCE_PROVIDER, (event) => {\n if (this.#chainagnosticProvider) {\n return;\n }\n this.#chainagnosticProvider = (<CustomEvent>event).detail.provider;\n\n this.#chainagnosticProvider?.subscribeToMessage(this.#handleBackgroundMessage);\n\n this.#init();\n });\n\n window.dispatchEvent(new Event(EventNames.CORE_WALLET_REQUEST_PROVIDER));\n }\n /**\n * Initializes provider state, and collects dApp information\n */\n #init = async () => {\n try {\n const response = await this.#request({\n method: DAppProviderRequest.INIT_DAPP_STATE,\n });\n\n const { chainId, accounts, networkVersion, isUnlocked } =\n (response as {\n isUnlocked: boolean;\n chainId: string | null;\n networkVersion: string | null;\n accounts: string[];\n }) ?? {};\n\n if (isUnlocked) {\n this._isUnlocked = true;\n this._state.isUnlocked = true;\n }\n\n if (chainId && chainId !== '0x0' && networkVersion && networkVersion !== 'loading') {\n this.chainId = chainId;\n this.networkVersion = networkVersion;\n this.#connect({ chainId });\n this.#chainChanged({\n chainId,\n networkVersion,\n });\n }\n\n this.#accountsChanged(accounts || []);\n\n this.#providerReadyPromise.check(InitializationStep.PROVIDER_STATE_LOADED);\n } catch (e) {\n // the provider will have a partial state, but still should be able to function\n } finally {\n this._initialized = true;\n this._state.initialized = true;\n this._isReady = true;\n this.emit('_initialized');\n }\n };\n\n #request = async (data: PartialBy<JsonRpcRequestPayload<string>, 'id' | 'params'>) => {\n return this.#chainagnosticProvider?.request({\n data,\n chainId: this.chainId,\n sessionId: this._sessionId,\n });\n };\n\n #getEventHandler = (method: string): ((params: unknown) => void) => {\n const handlerMap = {\n connect: this.#connect,\n disconnect: this.#disconnect,\n accountsChanged: this.#accountsChanged,\n chainChanged: this.#chainChanged,\n avalanche_unlockStateChanged: this.#unlockStateChanged,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } as any;\n return handlerMap[method];\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n #handleBackgroundMessage = ({ method, params }: any) => {\n const eventHandler = this.#getEventHandler(method);\n if (eventHandler) {\n return eventHandler(params);\n }\n\n this.emit(method, params);\n };\n\n isConnected = () => {\n return true;\n };\n\n request = async (data: PartialBy<JsonRpcRequestPayload<string>, 'id' | 'params'>) => {\n return this.#providerReadyPromise.call(() => {\n return this.#request(data);\n });\n };\n\n // shim to matamask legacy api\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n sendAsync = (payload: any, callback: any) => {\n if (Array.isArray(payload)) {\n return Promise.all(\n payload.map(\n (item) =>\n new Promise((resolve) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.sendAsync(item, (_: any, res: any) => {\n // ignore error\n resolve(res);\n });\n }),\n ),\n ).then((result) => callback(null, result));\n }\n const { method, params, ...rest } = payload;\n this.request({ method, params })\n .then((result) => callback(null, { ...rest, method, result }))\n .catch((error) => callback(error, { ...rest, method, error }));\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n send = (payload: any, callback?: any) => {\n if (typeof payload === 'string' && (!callback || Array.isArray(callback))) {\n return this.request({\n method: payload,\n params: callback,\n }).then((result) => ({\n id: undefined,\n jsonrpc: '2.0',\n result,\n }));\n }\n\n if (typeof payload === 'object' && typeof callback === 'function') {\n return this.sendAsync(payload, callback);\n }\n\n let result;\n switch (payload.method) {\n case 'eth_accounts':\n result = this.selectedAddress ? [this.selectedAddress] : [];\n break;\n\n case 'eth_coinbase':\n result = this.selectedAddress || null;\n break;\n\n default:\n throw new Error('Sync method not supported. Please provide a callback or use the `request` function.');\n }\n\n return {\n id: payload.id,\n jsonrpc: payload.jsonrpc,\n result,\n };\n };\n\n enable = () => {\n return this.request({ method: 'eth_requestAccounts' });\n };\n\n net_version = () => {\n return this.request({ method: 'net_version' });\n };\n\n #connect = (data: { chainId: string }) => {\n if (!this._isConnected) {\n this._isConnected = true;\n this._state.isConnected = true;\n this.emit('connect', data);\n }\n };\n\n #unlockStateChanged = ({ accounts, isUnlocked }: UnlockStateChangedEventData) => {\n if (isUnlocked) {\n this._isUnlocked = true;\n this._state.isUnlocked = true;\n this.#accountsChanged(accounts);\n } else {\n this._isUnlocked = false;\n }\n };\n\n #disconnect = () => {\n this._isConnected = false;\n this._state.isConnected = false;\n this._state.accounts = null;\n this.selectedAddress = null;\n const disconnectError = providerErrors.disconnected();\n\n this.emit('accountsChanged', []);\n this.emit('disconnect', disconnectError);\n this.emit('close', disconnectError);\n };\n\n #accountsChanged = (accounts: AccountsChangedEventData) => {\n if (accounts?.[0] === this.selectedAddress) {\n return;\n }\n\n this.selectedAddress = accounts?.[0] ?? null;\n this._state.accounts = accounts;\n this.emit('accountsChanged', accounts);\n };\n\n #chainChanged = ({ chainId, networkVersion }: ChainChangedEventData) => {\n this.#connect({ chainId });\n\n if (chainId !== this.chainId) {\n this.chainId = chainId;\n this.emit('chainChanged', chainId);\n }\n\n if (networkVersion !== this.networkVersion) {\n this.networkVersion = networkVersion;\n this.emit('networkChanged', networkVersion);\n }\n };\n}\n","export enum InitializationStep {\n DOMAIN_METADATA_SENT = 'domain_metadata_sent',\n PROVIDER_STATE_LOADED = 'provider_state_loaded',\n}\n\nexport class ProviderReadyPromise {\n #unpreparedSteps: Map<InitializationStep, boolean> = new Map();\n #inflightRequests: {\n resolve(value: unknown): void;\n fn(): Promise<unknown>;\n }[] = [];\n\n constructor(steps: InitializationStep[]) {\n steps.map((step) => this.#unpreparedSteps.set(step, true));\n }\n\n check = (step: InitializationStep) => {\n const hasStep = this.#unpreparedSteps.has(step);\n\n if (hasStep) {\n this.#unpreparedSteps.delete(step);\n }\n\n this._proceed();\n };\n\n uncheck = (step: InitializationStep) => {\n this.#unpreparedSteps.set(step, true);\n };\n\n private _proceed = () => {\n if (this.#unpreparedSteps.size) {\n return;\n }\n\n while (this.#inflightRequests.length) {\n const request = this.#inflightRequests.shift();\n request?.resolve(request?.fn());\n }\n };\n\n call = (fn: () => Promise<unknown>) => {\n return new Promise((resolve) => {\n this.#inflightRequests.push({\n fn,\n resolve,\n });\n\n this._proceed();\n });\n };\n}\n"]}
1
+ {"version":3,"sources":["../../src/provider/provider.ts","../../src/utils/provider-ready-promise.ts"],"names":["providerErrors","EventEmitter","EventNames","_unpreparedSteps","_inflightRequests","ProviderReadyPromise","steps","__privateAdd","__publicField","step","__privateGet","request","fn","resolve","_providerReadyPromise","_chainagnosticProvider","_subscribe","subscribe_fn","_init","_request","_getEventHandler","_handleBackgroundMessage","_connect","_unlockStateChanged","_disconnect","_accountsChanged","_chainChanged","EVMProvider","maxListeners","info","walletVersion","response","chainId","accounts","networkVersion","isUnlocked","data","method","params","eventHandler","payload","callback","item","_","res","result","rest","error","disconnectError","__privateMethod","event","__privateSet"],"mappings":"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","sourcesContent":["import { providerErrors } from '@metamask/rpc-errors';\nimport EventEmitter from 'events';\nimport {\n EventNames,\n type AccountsChangedEventData,\n type ChainAgnosticProvider,\n type ChainChangedEventData,\n type JsonRpcRequestPayload,\n type PartialBy,\n type UnlockStateChangedEventData,\n type EIP6963ProviderInfo,\n} from '@avalabs/vm-module-types';\nimport { InitializationStep, ProviderReadyPromise } from '../utils/provider-ready-promise';\n\ninterface ProviderState {\n accounts: string[] | null;\n isConnected: boolean;\n isUnlocked: boolean;\n initialized: boolean;\n}\n\nenum DAppProviderRequest {\n INIT_DAPP_STATE = 'avalanche_getProviderState',\n}\n\nexport class EVMProvider extends EventEmitter {\n #providerReadyPromise = new ProviderReadyPromise([InitializationStep.PROVIDER_STATE_LOADED]);\n #chainagnosticProvider?: ChainAgnosticProvider;\n\n readonly info: EIP6963ProviderInfo;\n\n chainId: string | null = null;\n selectedAddress: string | null = null;\n /**\n * The network ID of the currently connected Ethereum chain.\n * @deprecated\n */\n networkVersion: string | null = null;\n isAvalanche = true;\n isMetaMask = true;\n walletVersion: string | null = null;\n\n _isReady = false;\n _isConnected = false;\n _initialized = false;\n _isUnlocked = false;\n _sessionId = crypto.randomUUID();\n\n _state: ProviderState = {\n accounts: null,\n isConnected: false,\n isUnlocked: false,\n initialized: false,\n };\n\n // Metamask compatibility\n _metamask = {\n isUnlocked: () => Promise.resolve(this._isUnlocked),\n };\n\n constructor({\n maxListeners = 100,\n info,\n walletVersion,\n }: {\n maxListeners?: number;\n info: EIP6963ProviderInfo;\n walletVersion?: string;\n }) {\n super();\n this.info = info;\n this.walletVersion = walletVersion ?? null;\n this.setMaxListeners(maxListeners);\n this.#subscribe();\n }\n\n #subscribe() {\n window.addEventListener(EventNames.CORE_WALLET_ANNOUNCE_PROVIDER, (event) => {\n if (this.#chainagnosticProvider) {\n return;\n }\n this.#chainagnosticProvider = (<CustomEvent>event).detail.provider;\n\n this.#chainagnosticProvider?.subscribeToMessage(this.#handleBackgroundMessage);\n\n this.#init();\n });\n\n window.dispatchEvent(new Event(EventNames.CORE_WALLET_REQUEST_PROVIDER));\n }\n /**\n * Initializes provider state, and collects dApp information\n */\n #init = async () => {\n try {\n const response = await this.#request({\n method: DAppProviderRequest.INIT_DAPP_STATE,\n });\n\n const { chainId, accounts, networkVersion, isUnlocked } =\n (response as {\n isUnlocked: boolean;\n chainId: string | null;\n networkVersion: string | null;\n accounts: string[];\n }) ?? {};\n\n if (isUnlocked) {\n this._isUnlocked = true;\n this._state.isUnlocked = true;\n }\n\n if (chainId && chainId !== '0x0' && networkVersion && networkVersion !== 'loading') {\n this.chainId = chainId;\n this.networkVersion = networkVersion;\n this.#connect({ chainId });\n this.#chainChanged({\n chainId,\n networkVersion,\n });\n }\n\n this.#accountsChanged(accounts || []);\n\n this.#providerReadyPromise.check(InitializationStep.PROVIDER_STATE_LOADED);\n } catch (e) {\n // the provider will have a partial state, but still should be able to function\n } finally {\n this._initialized = true;\n this._state.initialized = true;\n this._isReady = true;\n this.emit('_initialized');\n }\n };\n\n #request = async (data: PartialBy<JsonRpcRequestPayload<string>, 'id' | 'params'>) => {\n return this.#chainagnosticProvider?.request({\n data,\n chainId: this.chainId,\n sessionId: this._sessionId,\n });\n };\n\n #getEventHandler = (method: string): ((params: unknown) => void) => {\n const handlerMap = {\n connect: this.#connect,\n disconnect: this.#disconnect,\n accountsChanged: this.#accountsChanged,\n chainChanged: this.#chainChanged,\n avalanche_unlockStateChanged: this.#unlockStateChanged,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } as any;\n return handlerMap[method];\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n #handleBackgroundMessage = ({ method, params }: any) => {\n const eventHandler = this.#getEventHandler(method);\n if (eventHandler) {\n return eventHandler(params);\n }\n\n this.emit(method, params);\n };\n\n isConnected = () => {\n return true;\n };\n\n request = async (data: PartialBy<JsonRpcRequestPayload<string>, 'id' | 'params'>) => {\n return this.#providerReadyPromise.call(() => {\n return this.#request(data);\n });\n };\n\n // shim to matamask legacy api\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n sendAsync = (payload: any, callback: any) => {\n if (Array.isArray(payload)) {\n return Promise.all(\n payload.map(\n (item) =>\n new Promise((resolve) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.sendAsync(item, (_: any, res: any) => {\n // ignore error\n resolve(res);\n });\n }),\n ),\n ).then((result) => callback(null, result));\n }\n const { method, params, ...rest } = payload;\n this.request({ method, params })\n .then((result) => callback(null, { ...rest, method, result }))\n .catch((error) => callback(error, { ...rest, method, error }));\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n send = (payload: any, callback?: any) => {\n if (typeof payload === 'string' && (!callback || Array.isArray(callback))) {\n return this.request({\n method: payload,\n params: callback,\n }).then((result) => ({\n id: undefined,\n jsonrpc: '2.0',\n result,\n }));\n }\n\n if (typeof payload === 'object' && typeof callback === 'function') {\n return this.sendAsync(payload, callback);\n }\n\n let result;\n switch (payload.method) {\n case 'eth_accounts':\n result = this.selectedAddress ? [this.selectedAddress] : [];\n break;\n\n case 'eth_coinbase':\n result = this.selectedAddress || null;\n break;\n\n default:\n throw new Error('Sync method not supported. Please provide a callback or use the `request` function.');\n }\n\n return {\n id: payload.id,\n jsonrpc: payload.jsonrpc,\n result,\n };\n };\n\n enable = () => {\n return this.request({ method: 'eth_requestAccounts' });\n };\n\n net_version = () => {\n return this.request({ method: 'net_version' });\n };\n\n #connect = (data: { chainId: string }) => {\n if (!this._isConnected) {\n this._isConnected = true;\n this._state.isConnected = true;\n this.emit('connect', data);\n }\n };\n\n #unlockStateChanged = ({ accounts, isUnlocked }: UnlockStateChangedEventData) => {\n if (isUnlocked) {\n this._isUnlocked = true;\n this._state.isUnlocked = true;\n this.#accountsChanged(accounts);\n } else {\n this._isUnlocked = false;\n }\n };\n\n #disconnect = () => {\n this._isConnected = false;\n this._state.isConnected = false;\n this._state.accounts = null;\n this.selectedAddress = null;\n const disconnectError = providerErrors.disconnected();\n\n this.emit('accountsChanged', []);\n this.emit('disconnect', disconnectError);\n this.emit('close', disconnectError);\n };\n\n #accountsChanged = (accounts: AccountsChangedEventData) => {\n if (accounts?.[0] === this.selectedAddress) {\n return;\n }\n\n this.selectedAddress = accounts?.[0] ?? null;\n this._state.accounts = accounts;\n this.emit('accountsChanged', accounts);\n };\n\n #chainChanged = ({ chainId, networkVersion }: ChainChangedEventData) => {\n this.#connect({ chainId });\n\n if (chainId !== this.chainId) {\n this.chainId = chainId;\n this.emit('chainChanged', chainId);\n }\n\n if (networkVersion !== this.networkVersion) {\n this.networkVersion = networkVersion;\n this.emit('networkChanged', networkVersion);\n }\n };\n}\n","export enum InitializationStep {\n DOMAIN_METADATA_SENT = 'domain_metadata_sent',\n PROVIDER_STATE_LOADED = 'provider_state_loaded',\n}\n\nexport class ProviderReadyPromise {\n #unpreparedSteps: Map<InitializationStep, boolean> = new Map();\n #inflightRequests: {\n resolve(value: unknown): void;\n fn(): Promise<unknown>;\n }[] = [];\n\n constructor(steps: InitializationStep[]) {\n steps.map((step) => this.#unpreparedSteps.set(step, true));\n }\n\n check = (step: InitializationStep) => {\n const hasStep = this.#unpreparedSteps.has(step);\n\n if (hasStep) {\n this.#unpreparedSteps.delete(step);\n }\n\n this._proceed();\n };\n\n uncheck = (step: InitializationStep) => {\n this.#unpreparedSteps.set(step, true);\n };\n\n private _proceed = () => {\n if (this.#unpreparedSteps.size) {\n return;\n }\n\n while (this.#inflightRequests.length) {\n const request = this.#inflightRequests.shift();\n request?.resolve(request?.fn());\n }\n };\n\n call = (fn: () => Promise<unknown>) => {\n return new Promise((resolve) => {\n this.#inflightRequests.push({\n fn,\n resolve,\n });\n\n this._proceed();\n });\n };\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@avalabs/evm-module",
3
- "version": "0.4.2",
3
+ "version": "0.5.0",
4
4
  "main": "dist/index.cjs",
5
5
  "module": "dist/index.js",
6
6
  "typings": "dist/index.d.ts",
@@ -11,7 +11,7 @@
11
11
  ],
12
12
  "license": "Limited Ecosystem License",
13
13
  "dependencies": {
14
- "@avalabs/vm-module-types": "0.4.2",
14
+ "@avalabs/vm-module-types": "0.5.0",
15
15
  "@avalabs/core-coingecko-sdk": "3.1.0-alpha.5",
16
16
  "@avalabs/core-etherscan-sdk": "3.1.0-alpha.5",
17
17
  "@avalabs/core-utils-sdk": "3.1.0-alpha.5",