@avalabs/hvm-module 1.0.1 → 1.1.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.
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/manifest.json +3 -2
- package/package.json +5 -5
package/dist/index.cjs
CHANGED
|
@@ -6,7 +6,7 @@ var coreUtilsSdk = require('@avalabs/core-utils-sdk');
|
|
|
6
6
|
var rpcErrors = require('@metamask/rpc-errors');
|
|
7
7
|
var zod = require('zod');
|
|
8
8
|
|
|
9
|
-
var u=(t,e,a)=>{if(!e.has(t))throw TypeError("Cannot "+a)};var g=(t,e,a)=>(u(t,e,"read from private field"),a?a.call(t):e.get(t)),f=(t,e,a)=>{if(e.has(t))throw TypeError("Cannot add the same private member more than once");e instanceof WeakSet?e.add(t):e.set(t,a);},h=(t,e,a,o)=>(u(t,e,"write to private field"),o?o.call(t,a):e.set(t,a),a);var P={name:"HyperVM",description:"",version:"0.0.1",sources:{module:{checksum:"",location:{npm:{filePath:"dist/index.js",packageName:"@avalabs/hvm-module",registry:"https://registry.npmjs.org"}}}},network:{chainIds:[],namespaces:["hvm"]},cointype:"60",permissions:{rpc:{dapps:!0,methods:["hvm_signTransaction"]}},manifestVersion:"0.
|
|
9
|
+
var u=(t,e,a)=>{if(!e.has(t))throw TypeError("Cannot "+a)};var g=(t,e,a)=>(u(t,e,"read from private field"),a?a.call(t):e.get(t)),f=(t,e,a)=>{if(e.has(t))throw TypeError("Cannot add the same private member more than once");e instanceof WeakSet?e.add(t):e.set(t,a);},h=(t,e,a,o)=>(u(t,e,"write to private field"),o?o.call(t,a):e.set(t,a),a);var P={name:"HyperVM",description:"",version:"0.0.1",sources:{module:{checksum:"",location:{npm:{filePath:"dist/index.js",packageName:"@avalabs/hvm-module",registry:"https://registry.npmjs.org"}}}},network:{chainIds:[],namespaces:["hvm"]},cointype:"60",permissions:{rpc:{dapps:!0,methods:["hvm_signTransaction"],nonRestrictedMethods:[]}},manifestVersion:"0.1"};var l=({rpcUrl:t,chainName:e,vmRpcPrefix:a})=>{if(!a)throw new Error("There is no vm rpc prefix");return new hypersdkClient.HyperSDKClient(t,e,a)};var R=async t=>{let{addresses:e,network:a}=t,o=l(a),i=e.map(async n=>{try{let s=await o.getBalance(n),p=a.networkToken,d=new coreUtilsSdk.TokenUnit(s,p.decimals,p.symbol),c={...p,coingeckoId:"",type:vmModuleTypes.TokenType.NATIVE,balance:s,balanceDisplayValue:d.toDisplay()};return {[n]:{[p.symbol]:c}}}catch(s){return {[n]:{error:s.toString()}}}});return (await Promise.allSettled(i)).reduce((n,s)=>({...n,...s.status==="fulfilled"?s.value:s.reason}),{})};var G=zod.z.object({abi:zod.z.object({actions:zod.z.array(zod.z.object({id:zod.z.number(),name:zod.z.string()})),outputs:zod.z.array(zod.z.object({id:zod.z.number(),name:zod.z.string()})),types:zod.z.array(zod.z.object({name:zod.z.string(),fields:zod.z.array(zod.z.object({name:zod.z.string(),type:zod.z.string()}))}))}),tx:zod.z.object({base:zod.z.object({timestamp:zod.z.string(),chainId:zod.z.string(),maxFee:zod.z.string()}),actions:zod.z.array(zod.z.object({actionName:zod.z.string(),data:zod.z.record(zod.z.string(),zod.z.unknown())}))}).required()}),A=zod.z.array(G).length(1),v=t=>A.safeParse(t);var I=t=>t.length?t.map(e=>({title:e.actionName,items:[...Object.entries(e.data).map(([a,o])=>typeof o=="string"&&/^0x[0-9a-f]{74}$/i.test(o)?{label:a,type:vmModuleTypes.DetailItemType.ADDRESS,value:o}:{label:a,type:vmModuleTypes.DetailItemType.TEXT,value:typeof o=="string"?o:JSON.stringify(o),alignment:"vertical"})]})):[],k=async({request:t,network:e,approvalController:a})=>{let{params:o}=t,i=v(o);if(!i.success)return {error:rpcErrors.rpcErrors.invalidParams({message:"Transaction params are invalid",data:{cause:i.error.format()}})};let n=i.data[0];if(!n)return {error:rpcErrors.rpcErrors.invalidParams({message:"Transaction params are invalid",data:{cause:"No transaction found"}})};let s=I(n.tx.actions),p={title:"Sign Transaction",dAppInfo:{name:t.dappInfo.name,action:`${t.dappInfo.name} requests you to sign the following message`,logoUri:t.dappInfo.icon},network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},details:s},d={type:vmModuleTypes.RpcMethod.HVM_SIGN_TRANSACTION,data:{abi:n.abi,txPayload:n.tx}},c=await a.requestApproval({request:t,displayData:p,signingData:d});return "error"in c?{error:c.error}:"signedData"in c?{result:c.signedData}:{error:rpcErrors.rpcErrors.internal("No signed data returned")}};var m,N=class{constructor({approvalController:e}){f(this,m,void 0);h(this,m,e);}getProvider(e){try{return Promise.resolve(l(e))}catch(a){return Promise.reject(a)}}getManifest(){let e=vmModuleTypes.parseManifest(P);return e.success?e.data:void 0}getAddress(e){throw new Error("not implemented")}async getBalances(e){return R(e)}async onRpcRequest(e,a){switch(e.method){case vmModuleTypes.RpcMethod.HVM_SIGN_TRANSACTION:return k({request:e,network:a,approvalController:g(this,m)});default:return {error:rpcErrors.rpcErrors.methodNotSupported(`Method ${e.method} not supported`)}}}getTransactionHistory(e){return Promise.resolve({transactions:[]})}getTokens(e){return Promise.resolve([])}getNetworkFee(e){return Promise.reject(new Error("not implemented"))}};m=new WeakMap;
|
|
10
10
|
|
|
11
11
|
exports.HvmModule = N;
|
|
12
12
|
//# sourceMappingURL=out.js.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/module.ts","../manifest.json","../src/utils/get-provider.ts","../src/handlers/get-balances.ts","../src/handlers/sign-transaction/sign-transaction.ts","../src/handlers/sign-transaction/schema.ts"],"names":["parseManifest","RpcMethod","manifest_default","HyperSDKClient","getProvider","rpcUrl","chainName","vmRpcPrefix","TokenType","TokenUnit","hvmGetBalances","params","addresses","network","provider","requests","address","balanceResult","networkToken","totalBalance","returnBalance","err","acc","curr","rpcErrors","DetailItemType","z","transactionSchema","paramsSchema","parseRequestParams","parseDetails","txPayloadActions","action","key","value","hvmSign","request","approvalController","result","transaction","details","displayData","signingData","response","_approvalController","HvmModule","__privateAdd","__privateSet","e","_params","__privateGet","_"],"mappings":"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","sourcesContent":["import {\n type Module,\n type Manifest,\n parseManifest,\n type ConstructorParams,\n type ApprovalController,\n type RpcRequest,\n type TransactionHistoryResponse,\n type GetTransactionHistory,\n type Network,\n type NetworkFees,\n type GetBalancesParams,\n type GetBalancesResponse,\n type GetAddressResponse,\n type RpcResponse,\n RpcMethod,\n type GetAddressParams,\n} from '@avalabs/vm-module-types';\n\nimport ManifestJson from '../manifest.json';\nimport { getProvider } from './utils/get-provider';\nimport { hvmGetBalances } from './handlers/get-balances';\nimport { rpcErrors } from '@metamask/rpc-errors';\nimport { hvmSign } from './handlers/sign-transaction/sign-transaction';\n\nexport class HvmModule implements Module {\n #approvalController: ApprovalController;\n\n constructor({ approvalController }: ConstructorParams) {\n this.#approvalController = approvalController;\n }\n\n getProvider(network: Network) {\n try {\n return Promise.resolve(getProvider(network));\n } catch (e) {\n return Promise.reject(e);\n }\n }\n\n getManifest(): Manifest | undefined {\n const result = parseManifest(ManifestJson);\n return result.success ? result.data : undefined;\n }\n\n getAddress(_params: GetAddressParams): Promise<GetAddressResponse> {\n // The current parameter set does not support ed25519 public keys and this method is not used yet in the clients\n throw new Error('not implemented');\n }\n\n async getBalances(params: GetBalancesParams): Promise<GetBalancesResponse> {\n return hvmGetBalances(params);\n }\n\n async onRpcRequest(request: RpcRequest, network: Network): Promise<RpcResponse> {\n switch (request.method) {\n case RpcMethod.HVM_SIGN_TRANSACTION:\n return hvmSign({ request, network, approvalController: this.#approvalController });\n default:\n return { error: rpcErrors.methodNotSupported(`Method ${request.method} not supported`) };\n }\n }\n\n getTransactionHistory(_: GetTransactionHistory): Promise<TransactionHistoryResponse> {\n return Promise.resolve({ transactions: [] });\n }\n\n getTokens(_: Network) {\n return Promise.resolve([]);\n }\n\n getNetworkFee(_: Network): Promise<NetworkFees> {\n return Promise.reject(new Error('not implemented'));\n }\n}\n","{\n \"name\": \"HyperVM\",\n \"description\": \"\",\n \"version\": \"0.0.1\",\n \"sources\": {\n \"module\": {\n \"checksum\": \"\",\n \"location\": {\n \"npm\": {\n \"filePath\": \"dist/index.js\",\n \"packageName\": \"@avalabs/hvm-module\",\n \"registry\": \"https://registry.npmjs.org\"\n }\n }\n }\n },\n \"network\": {\n \"chainIds\": [],\n \"namespaces\": [\"hvm\"]\n },\n \"cointype\": \"60\",\n \"permissions\": {\n \"rpc\": {\n \"dapps\": true,\n \"methods\": [\"hvm_signTransaction\"]\n }\n },\n \"manifestVersion\": \"0.0\"\n}\n","import { HyperSDKClient } from 'hypersdk-client';\n\ntype ProviderParams = {\n rpcUrl: string;\n chainName: string;\n vmRpcPrefix?: string;\n};\n\nexport const getProvider = ({ rpcUrl, chainName, vmRpcPrefix }: ProviderParams): HyperSDKClient => {\n if (!vmRpcPrefix) {\n throw new Error('There is no vm rpc prefix');\n }\n return new HyperSDKClient(rpcUrl, chainName, vmRpcPrefix);\n};\n","import {\n type GetBalancesParams,\n type GetBalancesResponse,\n type NetworkTokenWithBalance,\n TokenType,\n} from '@avalabs/vm-module-types';\nimport { TokenUnit } from '@avalabs/core-utils-sdk';\nimport { getProvider } from '../utils/get-provider';\n\nexport const hvmGetBalances = async (params: GetBalancesParams): Promise<GetBalancesResponse> => {\n const { addresses, network } = params;\n\n const provider = getProvider(network);\n\n const requests = addresses.map(async (address) => {\n try {\n const balanceResult = await provider.getBalance(address);\n const networkToken = network.networkToken;\n const totalBalance = new TokenUnit(balanceResult, networkToken.decimals, networkToken.symbol);\n\n const returnBalance: NetworkTokenWithBalance = {\n ...networkToken,\n coingeckoId: '',\n type: TokenType.NATIVE,\n balance: balanceResult,\n balanceDisplayValue: totalBalance.toDisplay(),\n };\n\n return { [address]: { [networkToken.symbol]: returnBalance } };\n } catch (err) {\n return { [address]: { error: (err as Error).toString() } };\n }\n });\n\n return (await Promise.allSettled(requests)).reduce((acc, curr) => {\n return {\n ...acc,\n ...(curr.status === 'fulfilled' ? curr.value : curr.reason),\n };\n }, {} as GetBalancesResponse);\n};\n","import {\n DetailItemType,\n RpcMethod,\n type ApprovalController,\n type DetailItem,\n type DetailSection,\n type DisplayData,\n type Network,\n type RpcRequest,\n type SigningData,\n} from '@avalabs/vm-module-types';\nimport { rpcErrors } from '@metamask/rpc-errors';\nimport { parseRequestParams } from './schema';\nimport type { ActionData } from 'hypersdk-client';\n\nconst parseDetails = (txPayloadActions: ActionData[]): DetailSection[] => {\n if (!txPayloadActions.length) {\n return [];\n }\n\n return txPayloadActions.map((action) => {\n return {\n title: action.actionName,\n items: [\n ...Object.entries(action.data).map(([key, value]): DetailItem => {\n const addressRegex = /^0x[0-9a-f]{74}$/i;\n\n if (typeof value === 'string' && addressRegex.test(value)) {\n return {\n label: key,\n type: DetailItemType.ADDRESS,\n value: value,\n };\n }\n\n return {\n label: key,\n type: DetailItemType.TEXT,\n value: typeof value === 'string' ? value : JSON.stringify(value),\n alignment: 'vertical',\n };\n }),\n ],\n };\n });\n};\n\nexport const hvmSign = async ({\n request,\n network,\n approvalController,\n}: {\n request: RpcRequest;\n network: Network;\n approvalController: ApprovalController;\n}) => {\n const { params } = request;\n\n // validate params\n const result = parseRequestParams(params);\n if (!result.success) {\n return {\n error: rpcErrors.invalidParams({\n message: 'Transaction params are invalid',\n data: { cause: result.error.format() },\n }),\n };\n }\n\n const transaction = result.data[0];\n if (!transaction) {\n return {\n error: rpcErrors.invalidParams({\n message: 'Transaction params are invalid',\n data: { cause: 'No transaction found' },\n }),\n };\n }\n\n const details = parseDetails(transaction.tx.actions);\n const displayData: DisplayData = {\n title: 'Sign Transaction',\n dAppInfo: {\n name: request.dappInfo.name,\n action: `${request.dappInfo.name} requests you to sign the following message`,\n logoUri: request.dappInfo.icon,\n },\n network: {\n chainId: network.chainId,\n name: network.chainName,\n logoUri: network.logoUri,\n },\n details,\n };\n const signingData: SigningData = {\n type: RpcMethod.HVM_SIGN_TRANSACTION,\n data: { abi: transaction.abi, txPayload: transaction.tx },\n };\n const response = await approvalController.requestApproval({ request, displayData, signingData });\n if ('error' in response) {\n return {\n error: response.error,\n };\n }\n\n if (!('signedData' in response)) {\n return {\n error: rpcErrors.internal('No signed data returned'),\n };\n }\n\n return { result: response.signedData };\n};\n","import { z } from 'zod';\n\nconst transactionSchema = z.object({\n abi: z.object({\n actions: z.array(\n z.object({\n id: z.number(),\n name: z.string(),\n }),\n ),\n outputs: z.array(\n z.object({\n id: z.number(),\n name: z.string(),\n }),\n ),\n types: z.array(\n z.object({\n name: z.string(),\n fields: z.array(\n z.object({\n name: z.string(),\n type: z.string(),\n }),\n ),\n }),\n ),\n }),\n tx: z\n .object({\n base: z.object({\n timestamp: z.string(),\n chainId: z.string(),\n maxFee: z.string(),\n }),\n actions: z.array(\n z.object({\n actionName: z.string(),\n data: z.record(z.string(), z.unknown()),\n }),\n ),\n })\n .required(),\n});\n\nconst paramsSchema = z.array(transactionSchema).length(1);\n\nexport const parseRequestParams = (params: unknown) => {\n return paramsSchema.safeParse(params);\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/module.ts","../manifest.json","../src/utils/get-provider.ts","../src/handlers/get-balances.ts","../src/handlers/sign-transaction/sign-transaction.ts","../src/handlers/sign-transaction/schema.ts"],"names":["parseManifest","RpcMethod","manifest_default","HyperSDKClient","getProvider","rpcUrl","chainName","vmRpcPrefix","TokenType","TokenUnit","hvmGetBalances","params","addresses","network","provider","requests","address","balanceResult","networkToken","totalBalance","returnBalance","err","acc","curr","rpcErrors","DetailItemType","z","transactionSchema","paramsSchema","parseRequestParams","parseDetails","txPayloadActions","action","key","value","hvmSign","request","approvalController","result","transaction","details","displayData","signingData","response","_approvalController","HvmModule","__privateAdd","__privateSet","e","_params","__privateGet","_"],"mappings":"mVAAA,OAGE,iBAAAA,EAYA,aAAAC,MAEK,2BCjBP,IAAAC,EAAA,CACE,KAAQ,UACR,YAAe,GACf,QAAW,QACX,QAAW,CACT,OAAU,CACR,SAAY,GACZ,SAAY,CACV,IAAO,CACL,SAAY,gBACZ,YAAe,sBACf,SAAY,4BACd,CACF,CACF,CACF,EACA,QAAW,CACT,SAAY,CAAC,EACb,WAAc,CAAC,KAAK,CACtB,EACA,SAAY,KACZ,YAAe,CACb,IAAO,CACL,MAAS,GACT,QAAW,CAAC,qBAAqB,EACjC,qBAAwB,CAAC,CAC3B,CACF,EACA,gBAAmB,KACrB,EC7BA,OAAS,kBAAAC,MAAsB,kBAQxB,IAAMC,EAAc,CAAC,CAAE,OAAAC,EAAQ,UAAAC,EAAW,YAAAC,CAAY,IAAsC,CACjG,GAAI,CAACA,EACH,MAAM,IAAI,MAAM,2BAA2B,EAE7C,OAAO,IAAIJ,EAAeE,EAAQC,EAAWC,CAAW,CAC1D,ECbA,OAIE,aAAAC,MACK,2BACP,OAAS,aAAAC,MAAiB,0BAGnB,IAAMC,EAAiB,MAAOC,GAA4D,CAC/F,GAAM,CAAE,UAAAC,EAAW,QAAAC,CAAQ,EAAIF,EAEzBG,EAAWV,EAAYS,CAAO,EAE9BE,EAAWH,EAAU,IAAI,MAAOI,GAAY,CAChD,GAAI,CACF,IAAMC,EAAgB,MAAMH,EAAS,WAAWE,CAAO,EACjDE,EAAeL,EAAQ,aACvBM,EAAe,IAAIV,EAAUQ,EAAeC,EAAa,SAAUA,EAAa,MAAM,EAEtFE,EAAyC,CAC7C,GAAGF,EACH,YAAa,GACb,KAAMV,EAAU,OAChB,QAASS,EACT,oBAAqBE,EAAa,UAAU,CAC9C,EAEA,MAAO,CAAE,CAACH,CAAO,EAAG,CAAE,CAACE,EAAa,MAAM,EAAGE,CAAc,CAAE,CAC/D,OAASC,EAAK,CACZ,MAAO,CAAE,CAACL,CAAO,EAAG,CAAE,MAAQK,EAAc,SAAS,CAAE,CAAE,CAC3D,CACF,CAAC,EAED,OAAQ,MAAM,QAAQ,WAAWN,CAAQ,GAAG,OAAO,CAACO,EAAKC,KAChD,CACL,GAAGD,EACH,GAAIC,EAAK,SAAW,YAAcA,EAAK,MAAQA,EAAK,MACtD,GACC,CAAC,CAAwB,CAC9B,EHlBA,OAAS,aAAAC,MAAiB,uBItB1B,OACE,kBAAAC,EACA,aAAAxB,MAQK,2BACP,OAAS,aAAAuB,MAAiB,uBCX1B,OAAS,KAAAE,MAAS,MAElB,IAAMC,EAAoBD,EAAE,OAAO,CACjC,IAAKA,EAAE,OAAO,CACZ,QAASA,EAAE,MACTA,EAAE,OAAO,CACP,GAAIA,EAAE,OAAO,EACb,KAAMA,EAAE,OAAO,CACjB,CAAC,CACH,EACA,QAASA,EAAE,MACTA,EAAE,OAAO,CACP,GAAIA,EAAE,OAAO,EACb,KAAMA,EAAE,OAAO,CACjB,CAAC,CACH,EACA,MAAOA,EAAE,MACPA,EAAE,OAAO,CACP,KAAMA,EAAE,OAAO,EACf,OAAQA,EAAE,MACRA,EAAE,OAAO,CACP,KAAMA,EAAE,OAAO,EACf,KAAMA,EAAE,OAAO,CACjB,CAAC,CACH,CACF,CAAC,CACH,CACF,CAAC,EACD,GAAIA,EACD,OAAO,CACN,KAAMA,EAAE,OAAO,CACb,UAAWA,EAAE,OAAO,EACpB,QAASA,EAAE,OAAO,EAClB,OAAQA,EAAE,OAAO,CACnB,CAAC,EACD,QAASA,EAAE,MACTA,EAAE,OAAO,CACP,WAAYA,EAAE,OAAO,EACrB,KAAMA,EAAE,OAAOA,EAAE,OAAO,EAAGA,EAAE,QAAQ,CAAC,CACxC,CAAC,CACH,CACF,CAAC,EACA,SAAS,CACd,CAAC,EAEKE,EAAeF,EAAE,MAAMC,CAAiB,EAAE,OAAO,CAAC,EAE3CE,EAAsBlB,GAC1BiB,EAAa,UAAUjB,CAAM,EDjCtC,IAAMmB,EAAgBC,GACfA,EAAiB,OAIfA,EAAiB,IAAKC,IACpB,CACL,MAAOA,EAAO,WACd,MAAO,CACL,GAAG,OAAO,QAAQA,EAAO,IAAI,EAAE,IAAI,CAAC,CAACC,EAAKC,CAAK,IAGzC,OAAOA,GAAU,UAFA,oBAEyB,KAAKA,CAAK,EAC/C,CACL,MAAOD,EACP,KAAMR,EAAe,QACrB,MAAOS,CACT,EAGK,CACL,MAAOD,EACP,KAAMR,EAAe,KACrB,MAAO,OAAOS,GAAU,SAAWA,EAAQ,KAAK,UAAUA,CAAK,EAC/D,UAAW,UACb,CACD,CACH,CACF,EACD,EA3BQ,CAAC,EA8BCC,EAAU,MAAO,CAC5B,QAAAC,EACA,QAAAvB,EACA,mBAAAwB,CACF,IAIM,CACJ,GAAM,CAAE,OAAA1B,CAAO,EAAIyB,EAGbE,EAAST,EAAmBlB,CAAM,EACxC,GAAI,CAAC2B,EAAO,QACV,MAAO,CACL,MAAOd,EAAU,cAAc,CAC7B,QAAS,iCACT,KAAM,CAAE,MAAOc,EAAO,MAAM,OAAO,CAAE,CACvC,CAAC,CACH,EAGF,IAAMC,EAAcD,EAAO,KAAK,CAAC,EACjC,GAAI,CAACC,EACH,MAAO,CACL,MAAOf,EAAU,cAAc,CAC7B,QAAS,iCACT,KAAM,CAAE,MAAO,sBAAuB,CACxC,CAAC,CACH,EAGF,IAAMgB,EAAUV,EAAaS,EAAY,GAAG,OAAO,EAC7CE,EAA2B,CAC/B,MAAO,mBACP,SAAU,CACR,KAAML,EAAQ,SAAS,KACvB,OAAQ,GAAGA,EAAQ,SAAS,IAAI,8CAChC,QAASA,EAAQ,SAAS,IAC5B,EACA,QAAS,CACP,QAASvB,EAAQ,QACjB,KAAMA,EAAQ,UACd,QAASA,EAAQ,OACnB,EACA,QAAA2B,CACF,EACME,EAA2B,CAC/B,KAAMzC,EAAU,qBAChB,KAAM,CAAE,IAAKsC,EAAY,IAAK,UAAWA,EAAY,EAAG,CAC1D,EACMI,EAAW,MAAMN,EAAmB,gBAAgB,CAAE,QAAAD,EAAS,YAAAK,EAAa,YAAAC,CAAY,CAAC,EAC/F,MAAI,UAAWC,EACN,CACL,MAAOA,EAAS,KAClB,EAGI,eAAgBA,EAMf,CAAE,OAAQA,EAAS,UAAW,EAL5B,CACL,MAAOnB,EAAU,SAAS,yBAAyB,CACrD,CAIJ,EJhHA,IAAAoB,EAyBaC,EAAN,KAAkC,CAGvC,YAAY,CAAE,mBAAAR,CAAmB,EAAsB,CAFvDS,EAAA,KAAAF,EAAA,QAGEG,EAAA,KAAKH,EAAsBP,EAC7B,CAEA,YAAYxB,EAAkB,CAC5B,GAAI,CACF,OAAO,QAAQ,QAAQT,EAAYS,CAAO,CAAC,CAC7C,OAASmC,EAAG,CACV,OAAO,QAAQ,OAAOA,CAAC,CACzB,CACF,CAEA,aAAoC,CAClC,IAAMV,EAAStC,EAAcE,CAAY,EACzC,OAAOoC,EAAO,QAAUA,EAAO,KAAO,MACxC,CAEA,WAAWW,EAAwD,CAEjE,MAAM,IAAI,MAAM,iBAAiB,CACnC,CAEA,MAAM,YAAYtC,EAAyD,CACzE,OAAOD,EAAeC,CAAM,CAC9B,CAEA,MAAM,aAAayB,EAAqBvB,EAAwC,CAC9E,OAAQuB,EAAQ,OAAQ,CACtB,KAAKnC,EAAU,qBACb,OAAOkC,EAAQ,CAAE,QAAAC,EAAS,QAAAvB,EAAS,mBAAoBqC,EAAA,KAAKN,EAAoB,CAAC,EACnF,QACE,MAAO,CAAE,MAAOpB,EAAU,mBAAmB,UAAUY,EAAQ,MAAM,gBAAgB,CAAE,CAC3F,CACF,CAEA,sBAAsBe,EAA+D,CACnF,OAAO,QAAQ,QAAQ,CAAE,aAAc,CAAC,CAAE,CAAC,CAC7C,CAEA,UAAUA,EAAY,CACpB,OAAO,QAAQ,QAAQ,CAAC,CAAC,CAC3B,CAEA,cAAcA,EAAkC,CAC9C,OAAO,QAAQ,OAAO,IAAI,MAAM,iBAAiB,CAAC,CACpD,CACF,EAhDEP,EAAA","sourcesContent":["import {\n type Module,\n type Manifest,\n parseManifest,\n type ConstructorParams,\n type ApprovalController,\n type RpcRequest,\n type TransactionHistoryResponse,\n type GetTransactionHistory,\n type Network,\n type NetworkFees,\n type GetBalancesParams,\n type GetBalancesResponse,\n type GetAddressResponse,\n type RpcResponse,\n RpcMethod,\n type GetAddressParams,\n} from '@avalabs/vm-module-types';\n\nimport ManifestJson from '../manifest.json';\nimport { getProvider } from './utils/get-provider';\nimport { hvmGetBalances } from './handlers/get-balances';\nimport { rpcErrors } from '@metamask/rpc-errors';\nimport { hvmSign } from './handlers/sign-transaction/sign-transaction';\n\nexport class HvmModule implements Module {\n #approvalController: ApprovalController;\n\n constructor({ approvalController }: ConstructorParams) {\n this.#approvalController = approvalController;\n }\n\n getProvider(network: Network) {\n try {\n return Promise.resolve(getProvider(network));\n } catch (e) {\n return Promise.reject(e);\n }\n }\n\n getManifest(): Manifest | undefined {\n const result = parseManifest(ManifestJson);\n return result.success ? result.data : undefined;\n }\n\n getAddress(_params: GetAddressParams): Promise<GetAddressResponse> {\n // The current parameter set does not support ed25519 public keys and this method is not used yet in the clients\n throw new Error('not implemented');\n }\n\n async getBalances(params: GetBalancesParams): Promise<GetBalancesResponse> {\n return hvmGetBalances(params);\n }\n\n async onRpcRequest(request: RpcRequest, network: Network): Promise<RpcResponse> {\n switch (request.method) {\n case RpcMethod.HVM_SIGN_TRANSACTION:\n return hvmSign({ request, network, approvalController: this.#approvalController });\n default:\n return { error: rpcErrors.methodNotSupported(`Method ${request.method} not supported`) };\n }\n }\n\n getTransactionHistory(_: GetTransactionHistory): Promise<TransactionHistoryResponse> {\n return Promise.resolve({ transactions: [] });\n }\n\n getTokens(_: Network) {\n return Promise.resolve([]);\n }\n\n getNetworkFee(_: Network): Promise<NetworkFees> {\n return Promise.reject(new Error('not implemented'));\n }\n}\n","{\n \"name\": \"HyperVM\",\n \"description\": \"\",\n \"version\": \"0.0.1\",\n \"sources\": {\n \"module\": {\n \"checksum\": \"\",\n \"location\": {\n \"npm\": {\n \"filePath\": \"dist/index.js\",\n \"packageName\": \"@avalabs/hvm-module\",\n \"registry\": \"https://registry.npmjs.org\"\n }\n }\n }\n },\n \"network\": {\n \"chainIds\": [],\n \"namespaces\": [\"hvm\"]\n },\n \"cointype\": \"60\",\n \"permissions\": {\n \"rpc\": {\n \"dapps\": true,\n \"methods\": [\"hvm_signTransaction\"],\n \"nonRestrictedMethods\": []\n }\n },\n \"manifestVersion\": \"0.1\"\n}\n","import { HyperSDKClient } from 'hypersdk-client';\n\ntype ProviderParams = {\n rpcUrl: string;\n chainName: string;\n vmRpcPrefix?: string;\n};\n\nexport const getProvider = ({ rpcUrl, chainName, vmRpcPrefix }: ProviderParams): HyperSDKClient => {\n if (!vmRpcPrefix) {\n throw new Error('There is no vm rpc prefix');\n }\n return new HyperSDKClient(rpcUrl, chainName, vmRpcPrefix);\n};\n","import {\n type GetBalancesParams,\n type GetBalancesResponse,\n type NetworkTokenWithBalance,\n TokenType,\n} from '@avalabs/vm-module-types';\nimport { TokenUnit } from '@avalabs/core-utils-sdk';\nimport { getProvider } from '../utils/get-provider';\n\nexport const hvmGetBalances = async (params: GetBalancesParams): Promise<GetBalancesResponse> => {\n const { addresses, network } = params;\n\n const provider = getProvider(network);\n\n const requests = addresses.map(async (address) => {\n try {\n const balanceResult = await provider.getBalance(address);\n const networkToken = network.networkToken;\n const totalBalance = new TokenUnit(balanceResult, networkToken.decimals, networkToken.symbol);\n\n const returnBalance: NetworkTokenWithBalance = {\n ...networkToken,\n coingeckoId: '',\n type: TokenType.NATIVE,\n balance: balanceResult,\n balanceDisplayValue: totalBalance.toDisplay(),\n };\n\n return { [address]: { [networkToken.symbol]: returnBalance } };\n } catch (err) {\n return { [address]: { error: (err as Error).toString() } };\n }\n });\n\n return (await Promise.allSettled(requests)).reduce((acc, curr) => {\n return {\n ...acc,\n ...(curr.status === 'fulfilled' ? curr.value : curr.reason),\n };\n }, {} as GetBalancesResponse);\n};\n","import {\n DetailItemType,\n RpcMethod,\n type ApprovalController,\n type DetailItem,\n type DetailSection,\n type DisplayData,\n type Network,\n type RpcRequest,\n type SigningData,\n} from '@avalabs/vm-module-types';\nimport { rpcErrors } from '@metamask/rpc-errors';\nimport { parseRequestParams } from './schema';\nimport type { ActionData } from 'hypersdk-client';\n\nconst parseDetails = (txPayloadActions: ActionData[]): DetailSection[] => {\n if (!txPayloadActions.length) {\n return [];\n }\n\n return txPayloadActions.map((action) => {\n return {\n title: action.actionName,\n items: [\n ...Object.entries(action.data).map(([key, value]): DetailItem => {\n const addressRegex = /^0x[0-9a-f]{74}$/i;\n\n if (typeof value === 'string' && addressRegex.test(value)) {\n return {\n label: key,\n type: DetailItemType.ADDRESS,\n value: value,\n };\n }\n\n return {\n label: key,\n type: DetailItemType.TEXT,\n value: typeof value === 'string' ? value : JSON.stringify(value),\n alignment: 'vertical',\n };\n }),\n ],\n };\n });\n};\n\nexport const hvmSign = async ({\n request,\n network,\n approvalController,\n}: {\n request: RpcRequest;\n network: Network;\n approvalController: ApprovalController;\n}) => {\n const { params } = request;\n\n // validate params\n const result = parseRequestParams(params);\n if (!result.success) {\n return {\n error: rpcErrors.invalidParams({\n message: 'Transaction params are invalid',\n data: { cause: result.error.format() },\n }),\n };\n }\n\n const transaction = result.data[0];\n if (!transaction) {\n return {\n error: rpcErrors.invalidParams({\n message: 'Transaction params are invalid',\n data: { cause: 'No transaction found' },\n }),\n };\n }\n\n const details = parseDetails(transaction.tx.actions);\n const displayData: DisplayData = {\n title: 'Sign Transaction',\n dAppInfo: {\n name: request.dappInfo.name,\n action: `${request.dappInfo.name} requests you to sign the following message`,\n logoUri: request.dappInfo.icon,\n },\n network: {\n chainId: network.chainId,\n name: network.chainName,\n logoUri: network.logoUri,\n },\n details,\n };\n const signingData: SigningData = {\n type: RpcMethod.HVM_SIGN_TRANSACTION,\n data: { abi: transaction.abi, txPayload: transaction.tx },\n };\n const response = await approvalController.requestApproval({ request, displayData, signingData });\n if ('error' in response) {\n return {\n error: response.error,\n };\n }\n\n if (!('signedData' in response)) {\n return {\n error: rpcErrors.internal('No signed data returned'),\n };\n }\n\n return { result: response.signedData };\n};\n","import { z } from 'zod';\n\nconst transactionSchema = z.object({\n abi: z.object({\n actions: z.array(\n z.object({\n id: z.number(),\n name: z.string(),\n }),\n ),\n outputs: z.array(\n z.object({\n id: z.number(),\n name: z.string(),\n }),\n ),\n types: z.array(\n z.object({\n name: z.string(),\n fields: z.array(\n z.object({\n name: z.string(),\n type: z.string(),\n }),\n ),\n }),\n ),\n }),\n tx: z\n .object({\n base: z.object({\n timestamp: z.string(),\n chainId: z.string(),\n maxFee: z.string(),\n }),\n actions: z.array(\n z.object({\n actionName: z.string(),\n data: z.record(z.string(), z.unknown()),\n }),\n ),\n })\n .required(),\n});\n\nconst paramsSchema = z.array(transactionSchema).length(1);\n\nexport const parseRequestParams = (params: unknown) => {\n return paramsSchema.safeParse(params);\n};\n"]}
|
package/dist/index.js
CHANGED
|
@@ -4,7 +4,7 @@ import { TokenUnit } from '@avalabs/core-utils-sdk';
|
|
|
4
4
|
import { rpcErrors } from '@metamask/rpc-errors';
|
|
5
5
|
import { z } from 'zod';
|
|
6
6
|
|
|
7
|
-
var u=(t,e,a)=>{if(!e.has(t))throw TypeError("Cannot "+a)};var g=(t,e,a)=>(u(t,e,"read from private field"),a?a.call(t):e.get(t)),f=(t,e,a)=>{if(e.has(t))throw TypeError("Cannot add the same private member more than once");e instanceof WeakSet?e.add(t):e.set(t,a);},h=(t,e,a,o)=>(u(t,e,"write to private field"),o?o.call(t,a):e.set(t,a),a);var P={name:"HyperVM",description:"",version:"0.0.1",sources:{module:{checksum:"",location:{npm:{filePath:"dist/index.js",packageName:"@avalabs/hvm-module",registry:"https://registry.npmjs.org"}}}},network:{chainIds:[],namespaces:["hvm"]},cointype:"60",permissions:{rpc:{dapps:!0,methods:["hvm_signTransaction"]}},manifestVersion:"0.
|
|
7
|
+
var u=(t,e,a)=>{if(!e.has(t))throw TypeError("Cannot "+a)};var g=(t,e,a)=>(u(t,e,"read from private field"),a?a.call(t):e.get(t)),f=(t,e,a)=>{if(e.has(t))throw TypeError("Cannot add the same private member more than once");e instanceof WeakSet?e.add(t):e.set(t,a);},h=(t,e,a,o)=>(u(t,e,"write to private field"),o?o.call(t,a):e.set(t,a),a);var P={name:"HyperVM",description:"",version:"0.0.1",sources:{module:{checksum:"",location:{npm:{filePath:"dist/index.js",packageName:"@avalabs/hvm-module",registry:"https://registry.npmjs.org"}}}},network:{chainIds:[],namespaces:["hvm"]},cointype:"60",permissions:{rpc:{dapps:!0,methods:["hvm_signTransaction"],nonRestrictedMethods:[]}},manifestVersion:"0.1"};var l=({rpcUrl:t,chainName:e,vmRpcPrefix:a})=>{if(!a)throw new Error("There is no vm rpc prefix");return new HyperSDKClient(t,e,a)};var R=async t=>{let{addresses:e,network:a}=t,o=l(a),i=e.map(async n=>{try{let s=await o.getBalance(n),p=a.networkToken,d=new TokenUnit(s,p.decimals,p.symbol),c={...p,coingeckoId:"",type:TokenType.NATIVE,balance:s,balanceDisplayValue:d.toDisplay()};return {[n]:{[p.symbol]:c}}}catch(s){return {[n]:{error:s.toString()}}}});return (await Promise.allSettled(i)).reduce((n,s)=>({...n,...s.status==="fulfilled"?s.value:s.reason}),{})};var G=z.object({abi:z.object({actions:z.array(z.object({id:z.number(),name:z.string()})),outputs:z.array(z.object({id:z.number(),name:z.string()})),types:z.array(z.object({name:z.string(),fields:z.array(z.object({name:z.string(),type:z.string()}))}))}),tx:z.object({base:z.object({timestamp:z.string(),chainId:z.string(),maxFee:z.string()}),actions:z.array(z.object({actionName:z.string(),data:z.record(z.string(),z.unknown())}))}).required()}),A=z.array(G).length(1),v=t=>A.safeParse(t);var I=t=>t.length?t.map(e=>({title:e.actionName,items:[...Object.entries(e.data).map(([a,o])=>typeof o=="string"&&/^0x[0-9a-f]{74}$/i.test(o)?{label:a,type:DetailItemType.ADDRESS,value:o}:{label:a,type:DetailItemType.TEXT,value:typeof o=="string"?o:JSON.stringify(o),alignment:"vertical"})]})):[],k=async({request:t,network:e,approvalController:a})=>{let{params:o}=t,i=v(o);if(!i.success)return {error:rpcErrors.invalidParams({message:"Transaction params are invalid",data:{cause:i.error.format()}})};let n=i.data[0];if(!n)return {error:rpcErrors.invalidParams({message:"Transaction params are invalid",data:{cause:"No transaction found"}})};let s=I(n.tx.actions),p={title:"Sign Transaction",dAppInfo:{name:t.dappInfo.name,action:`${t.dappInfo.name} requests you to sign the following message`,logoUri:t.dappInfo.icon},network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},details:s},d={type:RpcMethod.HVM_SIGN_TRANSACTION,data:{abi:n.abi,txPayload:n.tx}},c=await a.requestApproval({request:t,displayData:p,signingData:d});return "error"in c?{error:c.error}:"signedData"in c?{result:c.signedData}:{error:rpcErrors.internal("No signed data returned")}};var m,N=class{constructor({approvalController:e}){f(this,m,void 0);h(this,m,e);}getProvider(e){try{return Promise.resolve(l(e))}catch(a){return Promise.reject(a)}}getManifest(){let e=parseManifest(P);return e.success?e.data:void 0}getAddress(e){throw new Error("not implemented")}async getBalances(e){return R(e)}async onRpcRequest(e,a){switch(e.method){case RpcMethod.HVM_SIGN_TRANSACTION:return k({request:e,network:a,approvalController:g(this,m)});default:return {error:rpcErrors.methodNotSupported(`Method ${e.method} not supported`)}}}getTransactionHistory(e){return Promise.resolve({transactions:[]})}getTokens(e){return Promise.resolve([])}getNetworkFee(e){return Promise.reject(new Error("not implemented"))}};m=new WeakMap;
|
|
8
8
|
|
|
9
9
|
export { N as HvmModule };
|
|
10
10
|
//# sourceMappingURL=out.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/module.ts","../manifest.json","../src/utils/get-provider.ts","../src/handlers/get-balances.ts","../src/handlers/sign-transaction/sign-transaction.ts","../src/handlers/sign-transaction/schema.ts"],"names":["parseManifest","RpcMethod","manifest_default","HyperSDKClient","getProvider","rpcUrl","chainName","vmRpcPrefix","TokenType","TokenUnit","hvmGetBalances","params","addresses","network","provider","requests","address","balanceResult","networkToken","totalBalance","returnBalance","err","acc","curr","rpcErrors","DetailItemType","z","transactionSchema","paramsSchema","parseRequestParams","parseDetails","txPayloadActions","action","key","value","hvmSign","request","approvalController","result","transaction","details","displayData","signingData","response","_approvalController","HvmModule","__privateAdd","__privateSet","e","_params","__privateGet","_"],"mappings":"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","sourcesContent":["import {\n type Module,\n type Manifest,\n parseManifest,\n type ConstructorParams,\n type ApprovalController,\n type RpcRequest,\n type TransactionHistoryResponse,\n type GetTransactionHistory,\n type Network,\n type NetworkFees,\n type GetBalancesParams,\n type GetBalancesResponse,\n type GetAddressResponse,\n type RpcResponse,\n RpcMethod,\n type GetAddressParams,\n} from '@avalabs/vm-module-types';\n\nimport ManifestJson from '../manifest.json';\nimport { getProvider } from './utils/get-provider';\nimport { hvmGetBalances } from './handlers/get-balances';\nimport { rpcErrors } from '@metamask/rpc-errors';\nimport { hvmSign } from './handlers/sign-transaction/sign-transaction';\n\nexport class HvmModule implements Module {\n #approvalController: ApprovalController;\n\n constructor({ approvalController }: ConstructorParams) {\n this.#approvalController = approvalController;\n }\n\n getProvider(network: Network) {\n try {\n return Promise.resolve(getProvider(network));\n } catch (e) {\n return Promise.reject(e);\n }\n }\n\n getManifest(): Manifest | undefined {\n const result = parseManifest(ManifestJson);\n return result.success ? result.data : undefined;\n }\n\n getAddress(_params: GetAddressParams): Promise<GetAddressResponse> {\n // The current parameter set does not support ed25519 public keys and this method is not used yet in the clients\n throw new Error('not implemented');\n }\n\n async getBalances(params: GetBalancesParams): Promise<GetBalancesResponse> {\n return hvmGetBalances(params);\n }\n\n async onRpcRequest(request: RpcRequest, network: Network): Promise<RpcResponse> {\n switch (request.method) {\n case RpcMethod.HVM_SIGN_TRANSACTION:\n return hvmSign({ request, network, approvalController: this.#approvalController });\n default:\n return { error: rpcErrors.methodNotSupported(`Method ${request.method} not supported`) };\n }\n }\n\n getTransactionHistory(_: GetTransactionHistory): Promise<TransactionHistoryResponse> {\n return Promise.resolve({ transactions: [] });\n }\n\n getTokens(_: Network) {\n return Promise.resolve([]);\n }\n\n getNetworkFee(_: Network): Promise<NetworkFees> {\n return Promise.reject(new Error('not implemented'));\n }\n}\n","{\n \"name\": \"HyperVM\",\n \"description\": \"\",\n \"version\": \"0.0.1\",\n \"sources\": {\n \"module\": {\n \"checksum\": \"\",\n \"location\": {\n \"npm\": {\n \"filePath\": \"dist/index.js\",\n \"packageName\": \"@avalabs/hvm-module\",\n \"registry\": \"https://registry.npmjs.org\"\n }\n }\n }\n },\n \"network\": {\n \"chainIds\": [],\n \"namespaces\": [\"hvm\"]\n },\n \"cointype\": \"60\",\n \"permissions\": {\n \"rpc\": {\n \"dapps\": true,\n \"methods\": [\"hvm_signTransaction\"]\n }\n },\n \"manifestVersion\": \"0.0\"\n}\n","import { HyperSDKClient } from 'hypersdk-client';\n\ntype ProviderParams = {\n rpcUrl: string;\n chainName: string;\n vmRpcPrefix?: string;\n};\n\nexport const getProvider = ({ rpcUrl, chainName, vmRpcPrefix }: ProviderParams): HyperSDKClient => {\n if (!vmRpcPrefix) {\n throw new Error('There is no vm rpc prefix');\n }\n return new HyperSDKClient(rpcUrl, chainName, vmRpcPrefix);\n};\n","import {\n type GetBalancesParams,\n type GetBalancesResponse,\n type NetworkTokenWithBalance,\n TokenType,\n} from '@avalabs/vm-module-types';\nimport { TokenUnit } from '@avalabs/core-utils-sdk';\nimport { getProvider } from '../utils/get-provider';\n\nexport const hvmGetBalances = async (params: GetBalancesParams): Promise<GetBalancesResponse> => {\n const { addresses, network } = params;\n\n const provider = getProvider(network);\n\n const requests = addresses.map(async (address) => {\n try {\n const balanceResult = await provider.getBalance(address);\n const networkToken = network.networkToken;\n const totalBalance = new TokenUnit(balanceResult, networkToken.decimals, networkToken.symbol);\n\n const returnBalance: NetworkTokenWithBalance = {\n ...networkToken,\n coingeckoId: '',\n type: TokenType.NATIVE,\n balance: balanceResult,\n balanceDisplayValue: totalBalance.toDisplay(),\n };\n\n return { [address]: { [networkToken.symbol]: returnBalance } };\n } catch (err) {\n return { [address]: { error: (err as Error).toString() } };\n }\n });\n\n return (await Promise.allSettled(requests)).reduce((acc, curr) => {\n return {\n ...acc,\n ...(curr.status === 'fulfilled' ? curr.value : curr.reason),\n };\n }, {} as GetBalancesResponse);\n};\n","import {\n DetailItemType,\n RpcMethod,\n type ApprovalController,\n type DetailItem,\n type DetailSection,\n type DisplayData,\n type Network,\n type RpcRequest,\n type SigningData,\n} from '@avalabs/vm-module-types';\nimport { rpcErrors } from '@metamask/rpc-errors';\nimport { parseRequestParams } from './schema';\nimport type { ActionData } from 'hypersdk-client';\n\nconst parseDetails = (txPayloadActions: ActionData[]): DetailSection[] => {\n if (!txPayloadActions.length) {\n return [];\n }\n\n return txPayloadActions.map((action) => {\n return {\n title: action.actionName,\n items: [\n ...Object.entries(action.data).map(([key, value]): DetailItem => {\n const addressRegex = /^0x[0-9a-f]{74}$/i;\n\n if (typeof value === 'string' && addressRegex.test(value)) {\n return {\n label: key,\n type: DetailItemType.ADDRESS,\n value: value,\n };\n }\n\n return {\n label: key,\n type: DetailItemType.TEXT,\n value: typeof value === 'string' ? value : JSON.stringify(value),\n alignment: 'vertical',\n };\n }),\n ],\n };\n });\n};\n\nexport const hvmSign = async ({\n request,\n network,\n approvalController,\n}: {\n request: RpcRequest;\n network: Network;\n approvalController: ApprovalController;\n}) => {\n const { params } = request;\n\n // validate params\n const result = parseRequestParams(params);\n if (!result.success) {\n return {\n error: rpcErrors.invalidParams({\n message: 'Transaction params are invalid',\n data: { cause: result.error.format() },\n }),\n };\n }\n\n const transaction = result.data[0];\n if (!transaction) {\n return {\n error: rpcErrors.invalidParams({\n message: 'Transaction params are invalid',\n data: { cause: 'No transaction found' },\n }),\n };\n }\n\n const details = parseDetails(transaction.tx.actions);\n const displayData: DisplayData = {\n title: 'Sign Transaction',\n dAppInfo: {\n name: request.dappInfo.name,\n action: `${request.dappInfo.name} requests you to sign the following message`,\n logoUri: request.dappInfo.icon,\n },\n network: {\n chainId: network.chainId,\n name: network.chainName,\n logoUri: network.logoUri,\n },\n details,\n };\n const signingData: SigningData = {\n type: RpcMethod.HVM_SIGN_TRANSACTION,\n data: { abi: transaction.abi, txPayload: transaction.tx },\n };\n const response = await approvalController.requestApproval({ request, displayData, signingData });\n if ('error' in response) {\n return {\n error: response.error,\n };\n }\n\n if (!('signedData' in response)) {\n return {\n error: rpcErrors.internal('No signed data returned'),\n };\n }\n\n return { result: response.signedData };\n};\n","import { z } from 'zod';\n\nconst transactionSchema = z.object({\n abi: z.object({\n actions: z.array(\n z.object({\n id: z.number(),\n name: z.string(),\n }),\n ),\n outputs: z.array(\n z.object({\n id: z.number(),\n name: z.string(),\n }),\n ),\n types: z.array(\n z.object({\n name: z.string(),\n fields: z.array(\n z.object({\n name: z.string(),\n type: z.string(),\n }),\n ),\n }),\n ),\n }),\n tx: z\n .object({\n base: z.object({\n timestamp: z.string(),\n chainId: z.string(),\n maxFee: z.string(),\n }),\n actions: z.array(\n z.object({\n actionName: z.string(),\n data: z.record(z.string(), z.unknown()),\n }),\n ),\n })\n .required(),\n});\n\nconst paramsSchema = z.array(transactionSchema).length(1);\n\nexport const parseRequestParams = (params: unknown) => {\n return paramsSchema.safeParse(params);\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/module.ts","../manifest.json","../src/utils/get-provider.ts","../src/handlers/get-balances.ts","../src/handlers/sign-transaction/sign-transaction.ts","../src/handlers/sign-transaction/schema.ts"],"names":["parseManifest","RpcMethod","manifest_default","HyperSDKClient","getProvider","rpcUrl","chainName","vmRpcPrefix","TokenType","TokenUnit","hvmGetBalances","params","addresses","network","provider","requests","address","balanceResult","networkToken","totalBalance","returnBalance","err","acc","curr","rpcErrors","DetailItemType","z","transactionSchema","paramsSchema","parseRequestParams","parseDetails","txPayloadActions","action","key","value","hvmSign","request","approvalController","result","transaction","details","displayData","signingData","response","_approvalController","HvmModule","__privateAdd","__privateSet","e","_params","__privateGet","_"],"mappings":"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","sourcesContent":["import {\n type Module,\n type Manifest,\n parseManifest,\n type ConstructorParams,\n type ApprovalController,\n type RpcRequest,\n type TransactionHistoryResponse,\n type GetTransactionHistory,\n type Network,\n type NetworkFees,\n type GetBalancesParams,\n type GetBalancesResponse,\n type GetAddressResponse,\n type RpcResponse,\n RpcMethod,\n type GetAddressParams,\n} from '@avalabs/vm-module-types';\n\nimport ManifestJson from '../manifest.json';\nimport { getProvider } from './utils/get-provider';\nimport { hvmGetBalances } from './handlers/get-balances';\nimport { rpcErrors } from '@metamask/rpc-errors';\nimport { hvmSign } from './handlers/sign-transaction/sign-transaction';\n\nexport class HvmModule implements Module {\n #approvalController: ApprovalController;\n\n constructor({ approvalController }: ConstructorParams) {\n this.#approvalController = approvalController;\n }\n\n getProvider(network: Network) {\n try {\n return Promise.resolve(getProvider(network));\n } catch (e) {\n return Promise.reject(e);\n }\n }\n\n getManifest(): Manifest | undefined {\n const result = parseManifest(ManifestJson);\n return result.success ? result.data : undefined;\n }\n\n getAddress(_params: GetAddressParams): Promise<GetAddressResponse> {\n // The current parameter set does not support ed25519 public keys and this method is not used yet in the clients\n throw new Error('not implemented');\n }\n\n async getBalances(params: GetBalancesParams): Promise<GetBalancesResponse> {\n return hvmGetBalances(params);\n }\n\n async onRpcRequest(request: RpcRequest, network: Network): Promise<RpcResponse> {\n switch (request.method) {\n case RpcMethod.HVM_SIGN_TRANSACTION:\n return hvmSign({ request, network, approvalController: this.#approvalController });\n default:\n return { error: rpcErrors.methodNotSupported(`Method ${request.method} not supported`) };\n }\n }\n\n getTransactionHistory(_: GetTransactionHistory): Promise<TransactionHistoryResponse> {\n return Promise.resolve({ transactions: [] });\n }\n\n getTokens(_: Network) {\n return Promise.resolve([]);\n }\n\n getNetworkFee(_: Network): Promise<NetworkFees> {\n return Promise.reject(new Error('not implemented'));\n }\n}\n","{\n \"name\": \"HyperVM\",\n \"description\": \"\",\n \"version\": \"0.0.1\",\n \"sources\": {\n \"module\": {\n \"checksum\": \"\",\n \"location\": {\n \"npm\": {\n \"filePath\": \"dist/index.js\",\n \"packageName\": \"@avalabs/hvm-module\",\n \"registry\": \"https://registry.npmjs.org\"\n }\n }\n }\n },\n \"network\": {\n \"chainIds\": [],\n \"namespaces\": [\"hvm\"]\n },\n \"cointype\": \"60\",\n \"permissions\": {\n \"rpc\": {\n \"dapps\": true,\n \"methods\": [\"hvm_signTransaction\"],\n \"nonRestrictedMethods\": []\n }\n },\n \"manifestVersion\": \"0.1\"\n}\n","import { HyperSDKClient } from 'hypersdk-client';\n\ntype ProviderParams = {\n rpcUrl: string;\n chainName: string;\n vmRpcPrefix?: string;\n};\n\nexport const getProvider = ({ rpcUrl, chainName, vmRpcPrefix }: ProviderParams): HyperSDKClient => {\n if (!vmRpcPrefix) {\n throw new Error('There is no vm rpc prefix');\n }\n return new HyperSDKClient(rpcUrl, chainName, vmRpcPrefix);\n};\n","import {\n type GetBalancesParams,\n type GetBalancesResponse,\n type NetworkTokenWithBalance,\n TokenType,\n} from '@avalabs/vm-module-types';\nimport { TokenUnit } from '@avalabs/core-utils-sdk';\nimport { getProvider } from '../utils/get-provider';\n\nexport const hvmGetBalances = async (params: GetBalancesParams): Promise<GetBalancesResponse> => {\n const { addresses, network } = params;\n\n const provider = getProvider(network);\n\n const requests = addresses.map(async (address) => {\n try {\n const balanceResult = await provider.getBalance(address);\n const networkToken = network.networkToken;\n const totalBalance = new TokenUnit(balanceResult, networkToken.decimals, networkToken.symbol);\n\n const returnBalance: NetworkTokenWithBalance = {\n ...networkToken,\n coingeckoId: '',\n type: TokenType.NATIVE,\n balance: balanceResult,\n balanceDisplayValue: totalBalance.toDisplay(),\n };\n\n return { [address]: { [networkToken.symbol]: returnBalance } };\n } catch (err) {\n return { [address]: { error: (err as Error).toString() } };\n }\n });\n\n return (await Promise.allSettled(requests)).reduce((acc, curr) => {\n return {\n ...acc,\n ...(curr.status === 'fulfilled' ? curr.value : curr.reason),\n };\n }, {} as GetBalancesResponse);\n};\n","import {\n DetailItemType,\n RpcMethod,\n type ApprovalController,\n type DetailItem,\n type DetailSection,\n type DisplayData,\n type Network,\n type RpcRequest,\n type SigningData,\n} from '@avalabs/vm-module-types';\nimport { rpcErrors } from '@metamask/rpc-errors';\nimport { parseRequestParams } from './schema';\nimport type { ActionData } from 'hypersdk-client';\n\nconst parseDetails = (txPayloadActions: ActionData[]): DetailSection[] => {\n if (!txPayloadActions.length) {\n return [];\n }\n\n return txPayloadActions.map((action) => {\n return {\n title: action.actionName,\n items: [\n ...Object.entries(action.data).map(([key, value]): DetailItem => {\n const addressRegex = /^0x[0-9a-f]{74}$/i;\n\n if (typeof value === 'string' && addressRegex.test(value)) {\n return {\n label: key,\n type: DetailItemType.ADDRESS,\n value: value,\n };\n }\n\n return {\n label: key,\n type: DetailItemType.TEXT,\n value: typeof value === 'string' ? value : JSON.stringify(value),\n alignment: 'vertical',\n };\n }),\n ],\n };\n });\n};\n\nexport const hvmSign = async ({\n request,\n network,\n approvalController,\n}: {\n request: RpcRequest;\n network: Network;\n approvalController: ApprovalController;\n}) => {\n const { params } = request;\n\n // validate params\n const result = parseRequestParams(params);\n if (!result.success) {\n return {\n error: rpcErrors.invalidParams({\n message: 'Transaction params are invalid',\n data: { cause: result.error.format() },\n }),\n };\n }\n\n const transaction = result.data[0];\n if (!transaction) {\n return {\n error: rpcErrors.invalidParams({\n message: 'Transaction params are invalid',\n data: { cause: 'No transaction found' },\n }),\n };\n }\n\n const details = parseDetails(transaction.tx.actions);\n const displayData: DisplayData = {\n title: 'Sign Transaction',\n dAppInfo: {\n name: request.dappInfo.name,\n action: `${request.dappInfo.name} requests you to sign the following message`,\n logoUri: request.dappInfo.icon,\n },\n network: {\n chainId: network.chainId,\n name: network.chainName,\n logoUri: network.logoUri,\n },\n details,\n };\n const signingData: SigningData = {\n type: RpcMethod.HVM_SIGN_TRANSACTION,\n data: { abi: transaction.abi, txPayload: transaction.tx },\n };\n const response = await approvalController.requestApproval({ request, displayData, signingData });\n if ('error' in response) {\n return {\n error: response.error,\n };\n }\n\n if (!('signedData' in response)) {\n return {\n error: rpcErrors.internal('No signed data returned'),\n };\n }\n\n return { result: response.signedData };\n};\n","import { z } from 'zod';\n\nconst transactionSchema = z.object({\n abi: z.object({\n actions: z.array(\n z.object({\n id: z.number(),\n name: z.string(),\n }),\n ),\n outputs: z.array(\n z.object({\n id: z.number(),\n name: z.string(),\n }),\n ),\n types: z.array(\n z.object({\n name: z.string(),\n fields: z.array(\n z.object({\n name: z.string(),\n type: z.string(),\n }),\n ),\n }),\n ),\n }),\n tx: z\n .object({\n base: z.object({\n timestamp: z.string(),\n chainId: z.string(),\n maxFee: z.string(),\n }),\n actions: z.array(\n z.object({\n actionName: z.string(),\n data: z.record(z.string(), z.unknown()),\n }),\n ),\n })\n .required(),\n});\n\nconst paramsSchema = z.array(transactionSchema).length(1);\n\nexport const parseRequestParams = (params: unknown) => {\n return paramsSchema.safeParse(params);\n};\n"]}
|
package/manifest.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@avalabs/hvm-module",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"main": "dist/index.cjs",
|
|
5
5
|
"module": "dist/index.js",
|
|
6
6
|
"typings": "dist/index.d.ts",
|
|
@@ -12,11 +12,11 @@
|
|
|
12
12
|
"license": "Limited Ecosystem License",
|
|
13
13
|
"dependencies": {
|
|
14
14
|
"hypersdk-client": "0.4.16",
|
|
15
|
-
"@noble/hashes": "
|
|
16
|
-
"@avalabs/core-utils-sdk": "3.1.0-alpha.
|
|
15
|
+
"@noble/hashes": "1.5.0",
|
|
16
|
+
"@avalabs/core-utils-sdk": "3.1.0-alpha.30",
|
|
17
17
|
"@metamask/rpc-errors": "6.3.0",
|
|
18
18
|
"zod": "3.23.8",
|
|
19
|
-
"@avalabs/vm-module-types": "
|
|
19
|
+
"@avalabs/vm-module-types": "1.1.0"
|
|
20
20
|
},
|
|
21
21
|
"devDependencies": {
|
|
22
22
|
"@types/big.js": "6.2.2",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"ts-jest": "29.1.1",
|
|
27
27
|
"tsup": "7.2.0",
|
|
28
28
|
"@internal/tsup-config": "0.0.1",
|
|
29
|
-
"@internal/utils": "0.3.
|
|
29
|
+
"@internal/utils": "0.3.5",
|
|
30
30
|
"eslint-config-custom": "0.0.1"
|
|
31
31
|
},
|
|
32
32
|
"volta": {
|