@wowok/wowok 2.3.7 → 2.3.8
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/esm/Transaction-B_HAG_T7.mjs +1 -0
- package/dist/esm/arb-B7NNAqML.mjs +1 -0
- package/dist/esm/base-5DoRlfD_.mjs +1 -0
- package/dist/esm/call-DZtG6l2x.mjs +1 -0
- package/dist/esm/client/index.d.mts +1 -1
- package/dist/esm/client/index.mjs +1 -1
- package/dist/esm/{client-VxiBQfen.mjs → client-YYCgsO99.mjs} +1 -1
- package/dist/esm/common-CQggZ8z4.mjs +1 -0
- package/dist/esm/cryptography/index.d.mts +1 -1
- package/dist/esm/cryptography/index.mjs +1 -1
- package/dist/esm/ed25519-BrJWQ45w.mjs +1 -1
- package/dist/esm/evm-account-Dppw7HJc.d.mts +233 -0
- package/dist/esm/exception--UEPnygY.mjs +1 -0
- package/dist/esm/{falcon512-J8Pe5emy.mjs → falcon512-B4y-EH2f.mjs} +1 -1
- package/dist/esm/graphql/index.d.mts +1 -1
- package/dist/esm/graphql/index.mjs +1 -1
- package/dist/esm/{graphql-BXSiG4J0.mjs → graphql-D2Rx6H0h.mjs} +1 -1
- package/dist/esm/grpc/index.d.mts +1 -1
- package/dist/esm/grpc/index.mjs +1 -1
- package/dist/esm/{grpc-clMX5Wo0.mjs → grpc-BYkFJ8ot.mjs} +1 -1
- package/dist/esm/{index-Q3W63gcw.d.mts → index-BB7rqcJ9.d.mts} +688 -288
- package/dist/esm/index.d.mts +5 -5
- package/dist/esm/index.mjs +1 -1
- package/dist/esm/jsonRpc/index.d.mts +1 -1
- package/dist/esm/jsonRpc/index.mjs +1 -1
- package/dist/esm/keypairs/ed25519/index.d.mts +1 -1
- package/dist/esm/keypairs/falcon512/index.d.mts +1 -1
- package/dist/esm/keypairs/falcon512/index.mjs +1 -1
- package/dist/esm/keypairs/passkey/index.d.mts +1 -1
- package/dist/esm/keypairs/passkey/index.mjs +1 -1
- package/dist/esm/keypairs/secp256k1/index.d.mts +1 -1
- package/dist/esm/keypairs/secp256k1/index.mjs +1 -1
- package/dist/esm/keypairs/secp256r1/index.d.mts +1 -1
- package/dist/esm/keypairs/secp256r1/index.mjs +1 -1
- package/dist/esm/messenger-api-DsV5ffz-.mjs +1 -0
- package/dist/esm/{messenger-Bokr4-T2.mjs → messenger-b7VI27mY.mjs} +1 -1
- package/dist/esm/multisig/index.d.mts +1 -1
- package/dist/esm/multisig/index.mjs +1 -1
- package/dist/esm/{network-DOe6BgcD.mjs → network-CeDd07Hg.mjs} +1 -1
- package/dist/esm/{networks-DhrBVvu6.d.mts → networks-CEYOA-1U.d.mts} +95 -16
- package/dist/esm/object-ZwHVe_Xm.mjs +1 -0
- package/dist/esm/passkey-D0XCtEYg.mjs +1 -0
- package/dist/esm/proof-DU8afdtW.mjs +1 -0
- package/dist/esm/publickey-BPT9QiGv.mjs +1 -1
- package/dist/esm/{publickey-S1fGFYJX.mjs → publickey-Bkjn-YAu.mjs} +1 -1
- package/dist/esm/publickey-qLbcTInT.mjs +1 -1
- package/dist/esm/publickey-zB4h0HOi.mjs +1 -1
- package/dist/esm/received-g0FdzsRW.mjs +1 -0
- package/dist/esm/{rlp-BcIAoIV4.d.mts → rlp-Do3rPWRV.d.mts} +9 -1
- package/dist/esm/rolldown-runtime-D7D4PA-g.mjs +1 -0
- package/dist/esm/secp256k1-B-8mI0dI.mjs +1 -0
- package/dist/esm/secp256r1-B3O6jSlP.mjs +1 -0
- package/dist/esm/service-BP_-4e1d.mjs +1 -0
- package/dist/esm/storage-0TLziZMp.d.mts +62 -0
- package/dist/esm/transactions/index.d.mts +1 -1
- package/dist/esm/transactions/index.mjs +1 -1
- package/dist/esm/{transactions-CDWnTSTU.mjs → transactions-rYyItYOR.mjs} +1 -1
- package/dist/esm/util-BUonvpyz.mjs +1 -0
- package/dist/esm/utils/index.mjs +1 -1
- package/dist/esm/utils-IlS3fpdQ.mjs +1 -1
- package/dist/esm/verify/index.d.mts +1 -1
- package/dist/esm/verify/index.mjs +1 -1
- package/dist/esm/w/call/allocation.d.mts +1 -1
- package/dist/esm/w/call/allocation.mjs +1 -1
- package/dist/esm/w/call/arbitration.d.mts +1 -1
- package/dist/esm/w/call/arbitration.mjs +1 -1
- package/dist/esm/w/call/base.d.mts +1 -1
- package/dist/esm/w/call/base.mjs +1 -1
- package/dist/esm/w/call/demand.d.mts +1 -1
- package/dist/esm/w/call/demand.mjs +1 -1
- package/dist/esm/w/call/guard.d.mts +1 -1
- package/dist/esm/w/call/guard.mjs +1 -1
- package/dist/esm/w/call/index.d.mts +2 -2
- package/dist/esm/w/call/index.mjs +1 -1
- package/dist/esm/w/call/machine.d.mts +1 -1
- package/dist/esm/w/call/machine.mjs +1 -1
- package/dist/esm/w/call/passport.d.mts +1 -1
- package/dist/esm/w/call/passport.mjs +1 -1
- package/dist/esm/w/call/payment.d.mts +1 -1
- package/dist/esm/w/call/payment.mjs +1 -1
- package/dist/esm/w/call/permission.d.mts +1 -1
- package/dist/esm/w/call/permission.mjs +1 -1
- package/dist/esm/w/call/progress.d.mts +1 -1
- package/dist/esm/w/call/progress.mjs +1 -1
- package/dist/esm/w/call/repository.d.mts +1 -1
- package/dist/esm/w/call/repository.mjs +1 -1
- package/dist/esm/w/call/reward.d.mts +1 -1
- package/dist/esm/w/call/reward.mjs +1 -1
- package/dist/esm/w/call/service.d.mts +1 -1
- package/dist/esm/w/call/service.mjs +1 -1
- package/dist/esm/w/call/treasury.d.mts +1 -1
- package/dist/esm/w/call/treasury.mjs +1 -1
- package/dist/esm/w/common.d.mts +1 -1
- package/dist/esm/w/common.mjs +1 -1
- package/dist/esm/w/index.d.mts +5 -5
- package/dist/esm/w/index.mjs +1 -1
- package/dist/esm/w/local/account.d.mts +1 -1
- package/dist/esm/w/local/account.mjs +1 -1
- package/dist/esm/w/local/config.mjs +1 -1
- package/dist/esm/w/local/evm/networks.d.mts +1 -1
- package/dist/esm/w/local/evm/networks.mjs +1 -1
- package/dist/esm/w/local/evm/rlp.d.mts +2 -2
- package/dist/esm/w/local/evm/rlp.mjs +1 -1
- package/dist/esm/w/local/evm-account.d.mts +3 -3
- package/dist/esm/w/local/evm-account.mjs +1 -1
- package/dist/esm/w/local/index.d.mts +5 -5
- package/dist/esm/w/local/index.mjs +1 -1
- package/dist/esm/w/local/local.mjs +1 -1
- package/dist/esm/w/local/storage.d.mts +1 -52
- package/dist/esm/w/local/storage.mjs +1 -1
- package/dist/esm/w/local/token.d.mts +1 -1
- package/dist/esm/w/local/token.mjs +1 -1
- package/dist/esm/w/local/util.mjs +1 -1
- package/dist/esm/w/local/wip.mjs +1 -1
- package/dist/esm/w/messenger/index.d.mts +1 -1
- package/dist/esm/w/messenger/index.mjs +1 -1
- package/dist/esm/w/messenger/messenger-api.d.mts +1 -1
- package/dist/esm/w/messenger/messenger-api.mjs +1 -1
- package/dist/esm/w/messenger/messenger.d.mts +1 -1
- package/dist/esm/w/messenger/messenger.mjs +1 -1
- package/dist/esm/w/messenger/pq/crypto.mjs +1 -1
- package/dist/esm/w/messenger/pq/erasure.mjs +1 -1
- package/dist/esm/w/messenger/storage.d.mts +1 -1
- package/dist/esm/w/messenger/storage.mjs +1 -1
- package/dist/esm/w/messenger/types.d.mts +1 -1
- package/dist/esm/w/messenger/types.mjs +1 -1
- package/dist/esm/w/query/index.d.mts +1 -1
- package/dist/esm/w/query/index.mjs +1 -1
- package/dist/esm/w/query/object.d.mts +1 -1
- package/dist/esm/w/query/object.mjs +1 -1
- package/dist/esm/w-DCO00HIj.mjs +1 -0
- package/package.json +1 -4
- package/dist/esm/Transaction-YosVjNZA.mjs +0 -1
- package/dist/esm/arb-NYOQp2oH.mjs +0 -1
- package/dist/esm/base-fdHKX-jS.mjs +0 -1
- package/dist/esm/bridge-AHnWGzN1.mjs +0 -1
- package/dist/esm/call-7FZbEsRl.mjs +0 -1
- package/dist/esm/common-fDv-Cuzq.mjs +0 -1
- package/dist/esm/evm-account-XzrSThfS.d.mts +0 -185
- package/dist/esm/local-c-Tbdkfa.mjs +0 -1
- package/dist/esm/messenger-api-1m7Lp85p.mjs +0 -1
- package/dist/esm/object-DzsQI-0e.mjs +0 -1
- package/dist/esm/passkey-Dh6btBAD.mjs +0 -1
- package/dist/esm/proof-DER5SXw4.mjs +0 -1
- package/dist/esm/received-D7jEPxlE.mjs +0 -1
- package/dist/esm/rolldown-runtime-DkIiUugF.mjs +0 -1
- package/dist/esm/secp256k1-BZUdTK1D.mjs +0 -1
- package/dist/esm/secp256r1-COXOSFIF.mjs +0 -1
- package/dist/esm/service-W7-dgV57.mjs +0 -1
- package/dist/esm/util-B3X9acB0.mjs +0 -1
- package/dist/esm/w/call/bridge.d.mts +0 -2
- package/dist/esm/w/call/bridge.mjs +0 -1
- package/dist/esm/w-5GiAI3sP.mjs +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
const ETH_MAINNET={'name':'mainnet','chainId':0x1,'rpcUrls':['https://eth.llamarpc.com'],'explorerUrl':'https://etherscan.io','confirmations':0x1,'gasLimitMultiplier':1.2,'minPriorityFee':0x3b9aca00n,'rpcTimeoutMs':0x7530,'txConfirmTimeoutMs':0x1d4c0,'pollIntervalMs':0xbb8};var EvmNetworkRegistry=class EvmNetworkRegistry{constructor(){this['byChainId']=new Map(),this['byName']=new Map(),this['chainIdCache']=new Map(),this['unhealthyRpc']=new Map(),this['register'](ETH_MAINNET),this['defaultChainId']=ETH_MAINNET['chainId'];}static['Instance'](){if(!EvmNetworkRegistry['_instance'])EvmNetworkRegistry['_instance']=new EvmNetworkRegistry();return EvmNetworkRegistry['_instance'];}['register'](a){const b=a['name']['toLowerCase']();this['byChainId']['set'](a['chainId'],a),this['byName']['set'](b,a);}['unregister'](a){const b=this['get'](a);if(!b)return;this['byChainId']['delete'](b['chainId']),this['byName']['delete'](b['name']['toLowerCase']());if(this['defaultChainId']===b['chainId'])this['defaultChainId']=this['byChainId']['size']>0x0?this['byChainId']['keys']()['next']()['value']:void 0x0;}['setDefault'](a){const b=this['get'](a);if(!b)throw new Error('EVM\x20network\x20not\x20found:\x20'+a);this['defaultChainId']=b['chainId'];}['get'](a){if(a===void 0x0||a===null)return this['defaultChainId']!==void 0x0?this['byChainId']['get'](this['defaultChainId']):void 0x0;if(typeof a==='number')return this['byChainId']['get'](a);return this['byName']['get'](a['toLowerCase']());}['list'](){return Array['from'](this['byChainId']['values']());}['getDefault'](){const a=this['get'](this['defaultChainId']);if(!a)throw new Error('No\x20default\x20EVM\x20network\x20registered.\x20Call\x20register()\x20and\x20setDefault()\x20first.');return a;}async['resolve'](a){if(typeof a==='number'){const b=this['byChainId']['get'](a);if(b)return b;throw new Error('EVM\x20network\x20not\x20registered\x20for\x20chainId\x20'+a);}if(typeof a==='string'){const c=this['byName']['get'](a['toLowerCase']());if(c)return c;const d=await this['queryChainIdFromRpc'](a),e=this['byChainId']['get'](d);if(e)return e;return this['buildTempConfig'](a,d);}return this['getDefault']();}['pickHealthyRpc'](a){const b=Date['now']()
|
|
1
|
+
import{SQLiteAccountStorage}from'../storage.mjs';const ETH_MAINNET={'name':'mainnet','chainId':0x1,'rpcUrls':['https://ethereum-rpc.publicnode.com','https://eth.drpc.org','https://eth.llamarpc.com','https://rpc.mevblocker.io','https://rpc.flashbots.net','https://cloudflare-eth.com','https://ethereum.blockpi.network/v1/rpc/public','https://eth.merkle.io','https://0xrpc.io/eth','https://api.zan.top/eth/mainnet'],'explorerUrl':'https://etherscan.io','confirmations':0x1,'gasLimitMultiplier':1.2,'minPriorityFee':0x3b9aca00n,'rpcTimeoutMs':0x7530,'txConfirmTimeoutMs':0x1d4c0,'pollIntervalMs':0xbb8};var EvmNetworkRegistry=class EvmNetworkRegistry{static{this['DEFAULT_UNHEALTHY_RETRY_MS']=0x5*0xea60;}constructor(){this['byChainId']=new Map(),this['byName']=new Map(),this['chainIdCache']=new Map(),this['unhealthyRpc']=new Map(),this['unhealthyCounter']=new Map(),this['register'](ETH_MAINNET),this['defaultChainId']=ETH_MAINNET['chainId'],this['_loadAllRpcs']();}static['Instance'](){if(!EvmNetworkRegistry['_instance'])EvmNetworkRegistry['_instance']=new EvmNetworkRegistry();return EvmNetworkRegistry['_instance'];}['register'](a){const b=a['name']['toLowerCase']();this['byChainId']['set'](a['chainId'],a),this['byName']['set'](b,a);}['unregister'](a){const b=this['get'](a);if(!b)return;this['byChainId']['delete'](b['chainId']),this['byName']['delete'](b['name']['toLowerCase']());if(this['defaultChainId']===b['chainId'])this['defaultChainId']=this['byChainId']['size']>0x0?this['byChainId']['keys']()['next']()['value']:void 0x0;}['setDefault'](a){const b=this['get'](a);if(!b)throw new Error('EVM\x20network\x20not\x20found:\x20'+a);this['defaultChainId']=b['chainId'];}['get'](a){if(a===void 0x0||a===null)return this['defaultChainId']!==void 0x0?this['byChainId']['get'](this['defaultChainId']):void 0x0;if(typeof a==='number')return this['byChainId']['get'](a);return this['byName']['get'](a['toLowerCase']());}['list'](){return Array['from'](this['byChainId']['values']());}['getDefault'](){const a=this['get'](this['defaultChainId']);if(!a)throw new Error('No\x20default\x20EVM\x20network\x20registered.\x20Call\x20register()\x20and\x20setDefault()\x20first.');return a;}async['resolve'](a){if(typeof a==='number'){const b=this['byChainId']['get'](a);if(b)return b;throw new Error('EVM\x20network\x20not\x20registered\x20for\x20chainId\x20'+a);}if(typeof a==='string'){const c=this['byName']['get'](a['toLowerCase']());if(c)return c;const d=await this['queryChainIdFromRpc'](a),e=this['byChainId']['get'](d);if(e)return e;return this['buildTempConfig'](a,d);}return this['getDefault']();}['pickHealthyRpc'](a){const b=Date['now'](),c=a['rpcUrls']['map'](e=>{const f=this['unhealthyRpc']['get'](e),g=this['unhealthyCounter']['get'](e)??0x0,h=f===void 0x0||f<b;if(f!==void 0x0&&f<b)this['unhealthyRpc']['delete'](e);return{'url':e,'isExpired':h,'failCount':g};}),d=c['filter'](e=>e['isExpired']);if(d['length']>0x0)return d['sort']((e,f)=>e['failCount']-f['failCount']),d[0x0]['url'];return c['sort']((e,f)=>e['failCount']-f['failCount']),c[0x0]['url'];}['markUnhealthy'](a,b){const c=(this['unhealthyCounter']['get'](a)??0x0)+0x1;this['unhealthyCounter']['set'](a,c);const d=b??(c<=0x1?0x5*0xea60:c===0x2?0xf*0xea60:c===0x3?0x1e*0xea60:0x3c*0xea60);this['unhealthyRpc']['set'](a,Date['now']()+d);}['markHealthy'](a){this['unhealthyRpc']['delete'](a),this['unhealthyCounter']['delete'](a);}['isUnhealthy'](a){const b=this['unhealthyRpc']['get'](a);if(b===void 0x0)return![];if(b<Date['now']())return this['unhealthyRpc']['delete'](a),![];return!![];}['listRpcStatus'](a){const b=this['get'](a);if(!b)return[];const c=Date['now']();return b['rpcUrls']['map'](d=>{const e=this['unhealthyRpc']['get'](d),f=this['unhealthyCounter']['get'](d)??0x0;if(e===void 0x0||e<c){if(e!==void 0x0&&e<c)this['unhealthyRpc']['delete'](d);return{'url':d,'healthy':!![],'failCount':f};}return{'url':d,'healthy':![],'retryInMs':e-c,'failCount':f};});}['addRpc'](a,b){const c=this['get'](a);if(!c)return![];if(c['rpcUrls']['includes'](b))return![];return c['rpcUrls']['unshift'](b),this['_saveAllRpcs'](),!![];}['removeRpc'](a,b){const c=this['get'](a);if(!c)return![];if(c['rpcUrls']['length']<=0x1)return![];const d=c['rpcUrls']['indexOf'](b);if(d===-0x1)return![];return c['rpcUrls']['splice'](d,0x1),this['unhealthyRpc']['delete'](b),this['_saveAllRpcs'](),!![];}['setRpcs'](a,b){if(!b||b['length']===0x0)return![];const c=this['get'](a);if(!c)return![];for(const d of c['rpcUrls'])this['unhealthyRpc']['delete'](d);return c['rpcUrls']=[...new Set(b)],this['_saveAllRpcs'](),!![];}async['ping'](a,b=0x1388){try{const c=new AbortController(),d=setTimeout(()=>c['abort'](),b),e=await fetch(a,{'method':'POST','headers':{'Content-Type':'application/json'},'body':JSON['stringify']({'jsonrpc':'2.0','id':0x1,'method':'eth_chainId','params':[]}),'signal':c['signal']});return clearTimeout(d),e['ok'];}catch{return![];}}async['queryChainIdFromRpc'](a){const b=this['chainIdCache']['get'](a);if(b!==void 0x0)return b;const c=await(await fetch(a,{'method':'POST','headers':{'Content-Type':'application/json'},'body':JSON['stringify']({'jsonrpc':'2.0','id':0x1,'method':'eth_chainId','params':[]})}))['json']();if(c['error'])throw new Error('RPC\x20error:\x20'+c['error']['message']);const d=parseInt(c['result'],0x10);return this['chainIdCache']['set'](a,d),d;}['clearChainIdCache'](){this['chainIdCache']['clear']();}['_getPersistStore'](){if(!this['_persistStore'])this['_persistStore']=new SQLiteAccountStorage(void 0x0,'evm_network_rpcs');return this['_persistStore'];}async['_saveAllRpcs'](){try{const a={};for(const [b,c]of this['byChainId']['entries']())a[String(b)]=c['rpcUrls'];await this['_getPersistStore']()['put'](JSON['stringify'](a));}catch{}}async['_loadAllRpcs'](){try{const a=await this['_getPersistStore']()['get']();if(!a)return;const b=JSON['parse'](a);for(const [c,d]of Object['entries'](b)){const e=Number(c),f=this['byChainId']['get'](e);if(f&&Array['isArray'](d)&&d['length']>0x0)f['rpcUrls']=d;}}catch{}}['addRpcs'](a,b){const c=this['get'](a);if(!c)return 0x0;let d=0x0;for(const e of b['slice']()['reverse']())!c['rpcUrls']['includes'](e)&&(c['rpcUrls']['unshift'](e),d++);if(d>0x0)this['_saveAllRpcs']();return d;}['removeRpcs'](a,b){const c=this['get'](a);if(!c)return 0x0;let d=0x0;for(const e of b){const f=c['rpcUrls']['indexOf'](e);f!==-0x1&&c['rpcUrls']['length']>0x1&&(c['rpcUrls']['splice'](f,0x1),this['unhealthyRpc']['delete'](e),d++);}if(d>0x0)this['_saveAllRpcs']();return d;}['buildTempConfig'](a,b){return{'name':'chain-'+b,'chainId':b,'rpcUrls':[a],'confirmations':0x1,'gasLimitMultiplier':1.2,'minPriorityFee':0x3b9aca00n,'rpcTimeoutMs':0x7530,'txConfirmTimeoutMs':0x1d4c0,'pollIntervalMs':0xbb8};}};function registerBridgeEvmNetworks(a){const b=EvmNetworkRegistry['Instance'](),c=b['get'](a['evmChain']['chainId']);if(c){if(a['evmChain']['rpcUrl']&&!c['rpcUrls']['includes'](a['evmChain']['rpcUrl']))c['rpcUrls']['unshift'](a['evmChain']['rpcUrl']);if(a['setAsDefault'])b['setDefault'](c['chainId']);return c;}const d={'name':(a['name']??'chain-'+a['evmChain']['chainId'])['toLowerCase'](),'chainId':a['evmChain']['chainId'],'rpcUrls':a['evmChain']['rpcUrl']?[a['evmChain']['rpcUrl']]:[],'confirmations':0x1,'gasLimitMultiplier':1.2,'minPriorityFee':0x3b9aca00n,'rpcTimeoutMs':0x7530,'txConfirmTimeoutMs':0x1d4c0,'pollIntervalMs':0xbb8};b['register'](d);if(a['setAsDefault'])b['setDefault'](d['chainId']);return d;}export{ETH_MAINNET,EvmNetworkRegistry,registerBridgeEvmNetworks};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as bigIntToBytes, c as bytesToHex, d as
|
|
2
|
-
export { AccessListItem, EIP1559Transaction, LegacyTransaction, RLPItem, bigIntToBytes, bigIntToHex, bytesToBigInt, bytesToHex, encodeRLP, hexToBytes, isChecksumAddress, isValidEvmAddress, privateKeyToAddress, signEIP1559, signLegacy, toChecksumAddress };
|
|
1
|
+
import { _ as toChecksumAddress, a as bigIntToBytes, c as bytesToHex, d as hexToBytes, f as isChecksumAddress, g as signLegacy, h as signEIP1559, i as RLPItem, l as compressedPubKeyToAddress, m as privateKeyToAddress, n as EIP1559Transaction, o as bigIntToHex, p as isValidEvmAddress, r as LegacyTransaction, s as bytesToBigInt, t as AccessListItem, u as encodeRLP } from "../../../rlp-Do3rPWRV.mjs";
|
|
2
|
+
export { AccessListItem, EIP1559Transaction, LegacyTransaction, RLPItem, bigIntToBytes, bigIntToHex, bytesToBigInt, bytesToHex, compressedPubKeyToAddress, encodeRLP, hexToBytes, isChecksumAddress, isValidEvmAddress, privateKeyToAddress, signEIP1559, signLegacy, toChecksumAddress };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{secp256k1}from'@noble/curves/secp256k1.js';import{keccak_256}from'@noble/hashes/sha3.js';function bytesToHex(a){let b='';for(let c=0x0;c<a['length'];c++)b+=a[c]['toString'](0x10)['padStart'](0x2,'0');return b;}function hexToBytes(a){if(a['startsWith']('0x')||a['startsWith']('0X'))a=a['slice'](0x2);if(a['length']%0x2!==0x0)a='0'+a;const b=new Uint8Array(a['length']/0x2);for(let c=0x0;c<b['length'];c++)b[c]=parseInt(a['slice'](c*0x2,c*0x2+0x2),0x10);return b;}function bigIntToHex(a){return a['toString'](0x10);}function bigIntToBytes(a){if(a===0x0n)return new Uint8Array(0x0);let b=a['toString'](0x10);if(b['length']%0x2!==0x0)b='0'+b;return hexToBytes(b);}function bytesToBigInt(a){if(a['length']===0x0)return 0x0n;return BigInt('0x'+bytesToHex(a));}function encodeBytes(a){if(a['length']===0x1&&a[0x0]<0x80)return a;const b=encodeLength(a['length'],0x80),c=new Uint8Array(b['length']+a['length']);return c['set'](b,0x0),c['set'](a,b['length']),c;}function encodeLength(a,b){if(a<0x38)return new Uint8Array([a+b]);const c=bigIntToBytes(BigInt(a)),d=new Uint8Array([b+0x37+c['length']]),e=new Uint8Array(d['length']+c['length']);return e['set'](d,0x0),e['set'](c,d['length']),e;}function encodeRLP(a){if(a instanceof Uint8Array)return encodeBytes(a);if(typeof a==='bigint')return encodeBytes(bigIntToBytes(a));if(typeof a==='string')return encodeBytes(hexToBytes(a));if(Array['isArray'](a)){const b=a['map'](encodeRLP),c=b['reduce']((g,h)=>g+h['length'],0x0),d=encodeLength(c,0xc0),e=new Uint8Array(d['length']+c);e['set'](d,0x0);let f=d['length'];for(const g of b){e['set'](g,f),f+=g['length'];}return e;}throw new Error('Unsupported\x20RLP\x20item\x20type:\x20'+typeof a);}const EIP1559_TX_TYPE=0x2,LEGACY_CHAINID_OFFSET=0x23n;function accessListToRLP(a){if(!a||a['length']===0x0)return[];return a['map'](b=>[b['address'],b['storageKeys']]);}function encodeEIP1559Unsigned(a){const b=encodeRLP([BigInt(a['chainId']),BigInt(a['nonce']),a['maxPriorityFeePerGas'],a['maxFeePerGas'],a['gasLimit'],a['to'],a['value'],a['data'],accessListToRLP(a['accessList'])]),c=new Uint8Array(0x1+b['length']);return c[0x0]=EIP1559_TX_TYPE,c['set'](b,0x1),c;}function signEIP1559(a,b){const c=keccak_256(encodeEIP1559Unsigned(a)),d=secp256k1['sign'](c,b,{'format':'recovered'}),e=d[0x0],f=bytesToBigInt(d['subarray'](0x1,0x21)),g=bytesToBigInt(d['subarray'](0x21,0x41)),h=BigInt(e),i=encodeRLP([BigInt(a['chainId']),BigInt(a['nonce']),a['maxPriorityFeePerGas'],a['maxFeePerGas'],a['gasLimit'],a['to'],a['value'],a['data'],accessListToRLP(a['accessList']),
|
|
1
|
+
import{secp256k1}from'@noble/curves/secp256k1.js';import{keccak_256}from'@noble/hashes/sha3.js';function bytesToHex(a){let b='';for(let c=0x0;c<a['length'];c++)b+=a[c]['toString'](0x10)['padStart'](0x2,'0');return b;}function hexToBytes(a){if(a['startsWith']('0x')||a['startsWith']('0X'))a=a['slice'](0x2);if(a['length']%0x2!==0x0)a='0'+a;const b=new Uint8Array(a['length']/0x2);for(let c=0x0;c<b['length'];c++)b[c]=parseInt(a['slice'](c*0x2,c*0x2+0x2),0x10);return b;}function bigIntToHex(a){return a['toString'](0x10);}function bigIntToBytes(a){if(a===0x0n)return new Uint8Array(0x0);let b=a['toString'](0x10);if(b['length']%0x2!==0x0)b='0'+b;return hexToBytes(b);}function bytesToBigInt(a){if(a['length']===0x0)return 0x0n;return BigInt('0x'+bytesToHex(a));}function encodeBytes(a){if(a['length']===0x1&&a[0x0]<0x80)return a;const b=encodeLength(a['length'],0x80),c=new Uint8Array(b['length']+a['length']);return c['set'](b,0x0),c['set'](a,b['length']),c;}function encodeLength(a,b){if(a<0x38)return new Uint8Array([a+b]);const c=bigIntToBytes(BigInt(a)),d=new Uint8Array([b+0x37+c['length']]),e=new Uint8Array(d['length']+c['length']);return e['set'](d,0x0),e['set'](c,d['length']),e;}function encodeRLP(a){if(a instanceof Uint8Array)return encodeBytes(a);if(typeof a==='bigint')return encodeBytes(bigIntToBytes(a));if(typeof a==='string')return encodeBytes(hexToBytes(a));if(Array['isArray'](a)){const b=a['map'](encodeRLP),c=b['reduce']((g,h)=>g+h['length'],0x0),d=encodeLength(c,0xc0),e=new Uint8Array(d['length']+c);e['set'](d,0x0);let f=d['length'];for(const g of b){e['set'](g,f),f+=g['length'];}return e;}throw new Error('Unsupported\x20RLP\x20item\x20type:\x20'+typeof a);}const EIP1559_TX_TYPE=0x2,LEGACY_CHAINID_OFFSET=0x23n;function accessListToRLP(a){if(!a||a['length']===0x0)return[];return a['map'](b=>[b['address'],b['storageKeys']]);}function encodeEIP1559Unsigned(a){const b=encodeRLP([BigInt(a['chainId']),BigInt(a['nonce']),a['maxPriorityFeePerGas'],a['maxFeePerGas'],a['gasLimit'],a['to'],a['value'],a['data'],accessListToRLP(a['accessList'])]),c=new Uint8Array(0x1+b['length']);return c[0x0]=EIP1559_TX_TYPE,c['set'](b,0x1),c;}function signEIP1559(a,b){const c=keccak_256(encodeEIP1559Unsigned(a)),d=secp256k1['sign'](c,b,{'format':'recovered','prehash':![]}),e=d[0x0],f=bytesToBigInt(d['subarray'](0x1,0x21)),g=bytesToBigInt(d['subarray'](0x21,0x41)),h=BigInt(e),i=encodeRLP([BigInt(a['chainId']),BigInt(a['nonce']),a['maxPriorityFeePerGas'],a['maxFeePerGas'],a['gasLimit'],a['to'],a['value'],a['data'],accessListToRLP(a['accessList']),h,f,g]),j=new Uint8Array(0x1+i['length']);return j[0x0]=EIP1559_TX_TYPE,j['set'](i,0x1),'0x'+bytesToHex(j);}function encodeLegacyUnsigned(a){return encodeRLP([BigInt(a['nonce']),a['gasPrice'],a['gasLimit'],a['to'],a['value'],a['data'],BigInt(a['chainId']),0x0n,0x0n]);}function signLegacy(a,b){const c=keccak_256(encodeLegacyUnsigned(a)),d=secp256k1['sign'](c,b,{'format':'recovered','prehash':![]}),e=d[0x0],f=bytesToBigInt(d['subarray'](0x1,0x21)),g=bytesToBigInt(d['subarray'](0x21,0x41)),h=BigInt(e)+BigInt(a['chainId'])*0x2n+LEGACY_CHAINID_OFFSET;return'0x'+bytesToHex(encodeRLP([BigInt(a['nonce']),a['gasPrice'],a['gasLimit'],a['to'],a['value'],a['data'],f,g,h]));}function privateKeyToAddress(a){return toChecksumAddress(keccak_256(secp256k1['getPublicKey'](a,![])['slice'](0x1,0x41))['slice'](-0x14));}function compressedPubKeyToAddress(a){const b=typeof a==='string'?hexToBytes(a['startsWith']('0x')?a:'0x'+a):a;if(b['length']!==0x21)throw new Error('compressedPubKeyToAddress:\x20expected\x2033\x20bytes,\x20got\x20'+b['length']);return toChecksumAddress(keccak_256(secp256k1['Point']['fromBytes'](b)['toBytes'](![])['slice'](0x1,0x41))['slice'](-0x14));}function toChecksumAddress(a){const b=bytesToHex(a)['toLowerCase'](),c=bytesToHex(keccak_256(new TextEncoder()['encode'](b)));let d='0x';for(let e=0x0;e<b['length'];e++){const f=c[e],g=b[e];if(/[0-9]/['test'](g))d+=g;else{if(parseInt(f,0x10)>=0x8)d+=g['toUpperCase']();else d+=g['toLowerCase']();}}return d;}function isValidEvmAddress(a){return/^0x[0-9a-fA-F]{40}$/['test'](a);}function isChecksumAddress(a){if(!isValidEvmAddress(a))return![];return toChecksumAddress(hexToBytes(a))===a;}export{bigIntToBytes,bigIntToHex,bytesToBigInt,bytesToHex,compressedPubKeyToAddress,encodeRLP,hexToBytes,isChecksumAddress,isValidEvmAddress,privateKeyToAddress,signEIP1559,signLegacy,toChecksumAddress};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { c as bytesToHex,
|
|
2
|
-
import { a as
|
|
3
|
-
export {
|
|
1
|
+
import { _ as toChecksumAddress, c as bytesToHex, d as hexToBytes, g as signLegacy, h as signEIP1559, m as privateKeyToAddress, p as isValidEvmAddress, s as bytesToBigInt } from "../../rlp-Do3rPWRV.mjs";
|
|
2
|
+
import { a as EvmTransactionRequest, i as EvmTransactionReceipt, n as EvmAccountData, r as EvmLog, t as EvmAccount } from "../../evm-account-Dppw7HJc.mjs";
|
|
3
|
+
export { EvmAccount, EvmAccountData, EvmLog, EvmTransactionReceipt, EvmTransactionRequest, bytesToBigInt, bytesToHex, hexToBytes, isValidEvmAddress, privateKeyToAddress, signEIP1559, signLegacy, toChecksumAddress };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{U as a80a}from'../../common-fDv-Cuzq.mjs';import{_ as a80b}from'../../local-c-Tbdkfa.mjs';import{getWowDir}from'./util.mjs';import{bytesToBigInt,bytesToHex,hexToBytes,isValidEvmAddress,privateKeyToAddress,signEIP1559,signLegacy,toChecksumAddress}from'./evm/rlp.mjs';import{EvmNetworkRegistry}from'./evm/networks.mjs';import{secp256k1}from'@noble/curves/secp256k1.js';import a80c from'libsql';import*as a80d from'path';import{keccak_256}from'@noble/hashes/sha3.js';const ETH_MAINNET_CHAIN_ID=0x1,DEFAULT_ETH_RPC_URL='https://eth.llamarpc.com',DEFAULT_CHAIN_ID=0x1,WOW_DIR=getWowDir(),ACCOUNT_DB_PATH=a80d['join'](WOW_DIR,'account.db');function getEvmAccountDatabase(){const a=new a80c(ACCOUNT_DB_PATH);return a['pragma']('journal_mode\x20=\x20WAL'),a['pragma']('synchronous\x20=\x20NORMAL'),a['exec']('\x0a\x09\x09CREATE\x20TABLE\x20IF\x20NOT\x20EXISTS\x20evm_accounts\x20(\x0a\x09\x09\x09id\x20INTEGER\x20PRIMARY\x20KEY\x20CHECK\x20(id\x20=\x201),\x0a\x09\x09\x09data\x20TEXT\x20NOT\x20NULL,\x0a\x09\x09\x09updated_at\x20INTEGER\x20DEFAULT\x20(strftime(\x27%s\x27,\x20\x27now\x27))\x0a\x09\x09);\x0a\x09'),a;}let evmAccountDbInstance=null;function getEvmAccountDb(){if(!evmAccountDbInstance)evmAccountDbInstance=getEvmAccountDatabase();return evmAccountDbInstance;}var SQLiteEvmAccountStorage=class{constructor(a){this['_db']=a??void 0x0;}get['db'](){if(this['_db'])return this['_db'];return getEvmAccountDb();}async['get'](){return this['db']['prepare']('SELECT\x20data\x20FROM\x20evm_accounts\x20WHERE\x20id\x20=\x201')['get']()?.['data'];}async['put'](a){this['db']['prepare']('\x0a\x09\x09\x09INSERT\x20INTO\x20evm_accounts\x20(id,\x20data,\x20updated_at)\x20\x0a\x09\x09\x09VALUES\x20(1,\x20?,\x20strftime(\x27%s\x27,\x20\x27now\x27))\x0a\x09\x09\x09ON\x20CONFLICT(id)\x20DO\x20UPDATE\x20SET\x20data\x20=\x20excluded.data,\x20updated_at\x20=\x20excluded.updated_at\x0a\x09\x09')['run'](a);}async['clear'](){this['db']['exec']('DELETE\x20FROM\x20evm_accounts');}},AsyncLock=class{constructor(){this['_locked']=![],this['_queue']=[];}async['acquire'](){if(!this['_locked']){this['_locked']=!![];return;}return new Promise(a=>{this['_queue']['push'](a);});}['release'](){if(this['_queue']['length']>0x0)this['_queue']['shift']()();else this['_locked']=![];}async['run'](a){await this['acquire']();try{return await a();}finally{this['release']();}}};let rpcRequestId=0x0;async function ethRpcWithAbort(a,b,c,d){const e={'jsonrpc':'2.0','id':++rpcRequestId,'method':b,'params':c},f=await fetch(a,{'method':'POST','headers':{'Content-Type':'application/json'},'body':JSON['stringify'](e),'signal':d});if(!f['ok'])throw new Error('EVM\x20RPC\x20HTTP\x20'+f['status']+':\x20'+await f['text']());const g=await f['json']();if(g['error'])throw new Error('EVM\x20RPC\x20error:\x20'+g['error']['message']+'\x20(code\x20'+g['error']['code']+')');return g['result'];}const DEFAULT_EVM_ACCOUNT_NAME='';var EvmAccount=class EvmAccount{static{this['_lock']=new AsyncLock();}['setStorage'](a){EvmAccount['storage']=a;}async['getStorage'](){if(!EvmAccount['storage'])EvmAccount['storage']=new SQLiteEvmAccountStorage();return EvmAccount['storage'];}static['Instance'](){if(!EvmAccount['_instance'])EvmAccount['_instance']=new EvmAccount();return EvmAccount['_instance'];}['accountData'](a){if(!a)return void 0x0;return a;}static['nameMatch'](a,b){if(a==null)return![];return a['toLowerCase']()===b['toLowerCase']();}['name_resolve'](a){return a||'';}async['resolveNetwork'](a,b){const c=EvmNetworkRegistry['Instance']();if(b){const e=await c['resolve'](b);return{'cfg':e,'url':c['pickHealthyRpc'](e)||b};}const d=await c['resolve'](a);return{'cfg':d,'url':c['pickHealthyRpc'](d)};}async['rpcWithFailover'](a,b,c){const d=EvmNetworkRegistry['Instance']();let f;const g=a['rpcTimeoutMs']??0x7530;for(const h of a['rpcUrls'])try{const i=new AbortController(),j=setTimeout(()=>i['abort'](),g);try{return await ethRpcWithAbort(h,b,c,i['signal']);}finally{clearTimeout(j);}}catch(k){f=k,d['markUnhealthy'](h);}throw f instanceof Error?f:new Error('All\x20RPCs\x20failed\x20for\x20'+b);}async['gen'](a,b,c){return EvmAccount['_lock']['run'](async()=>{a=this['name_resolve'](a);if(a&&!a80a(a))a80b('invalid\x20name','Name\x20'+a+'\x20exceeds\x20max\x2064');const d=secp256k1['utils']['randomSecretKey'](),e='0x'+bytesToHex(d),f=privateKeyToAddress(d),g=Date['now'](),h={'name':a,'address':f,'secret':e,'createdAt':g,'updatedAt':g,'chainId':c??EvmNetworkRegistry['Instance']()['getDefault']()['chainId']},i=await this['getStorage'](),j=await i['get'](),k=j?JSON['parse'](j):[],l=k['findIndex'](o=>EvmAccount['nameMatch'](o['name'],a));if(l!==-0x1){if(b)k[l]['name']=void 0x0;else a80b('account\x20name\x20exist','Name\x20'+(a||'')+'\x20already\x20exist');}k['push'](h),await i['put'](JSON['stringify'](k));const {secret:m,...n}=h;return n;});}async['default'](){return this['accountData'](await this['get_imp'](''));}async['get'](a,b){if(!b)return this['accountData'](await this['get_imp'](a));return this['gen'](a);}async['get_address'](a){if(a&&isValidEvmAddress(a))return a;return(await this['get_imp'](a))?.['address'];}async['get_imp'](a){a=this['name_resolve'](a);const b=await(await this['getStorage']())['get']();if(b){const c=a['toLowerCase']();return JSON['parse'](b)['find'](e=>EvmAccount['nameMatch'](e['name'],a)||e['address']['toLowerCase']()===c);}}async['list'](a){const b=await(await this['getStorage']())['get']();if(!b)return[];let c=JSON['parse'](b);if(a?.['suspended']!==void 0x0)c=c['filter'](d=>a['suspended']?d['suspended']===!![]:!d['suspended']);else c=c['filter'](d=>!d['suspended']);if(a?.['name']!=null){const d=a['name']['toLowerCase']();c=c['filter'](e=>e['name']?.['toLowerCase']()['includes'](d));}if(a?.['address']){const e=a['address']['toLowerCase']();c=c['filter'](f=>f['address']['toLowerCase']()['includes'](e));}if(a?.['createdAt']){if(a['createdAt']['gte']!==void 0x0)c=c['filter'](f=>f['createdAt']&&f['createdAt']>=a['createdAt']['gte']);if(a['createdAt']['lte']!==void 0x0)c=c['filter'](f=>f['createdAt']&&f['createdAt']<=a['createdAt']['lte']);}if(a?.['updatedAt']){if(a['updatedAt']['gte']!==void 0x0)c=c['filter'](f=>f['updatedAt']&&f['updatedAt']>=a['updatedAt']['gte']);if(a['updatedAt']['lte']!==void 0x0)c=c['filter'](f=>f['updatedAt']&&f['updatedAt']<=a['updatedAt']['lte']);}return c['map'](({secret:f,...g})=>g);}async['rename'](a,b){return EvmAccount['_lock']['run'](async()=>{if(b&&!a80a(b))a80b('invalid\x20name','Invalid\x20new\x20name:\x20\x22'+b+'\x22');const c=this['name_resolve'](a);if(c===b)return!![];const d=await this['getStorage'](),e=await d['get']();if(!e)return![];const g=JSON['parse'](e);if(g['find'](i=>EvmAccount['nameMatch'](i['name'],b)))a80b('account\x20name\x20exist','Name\x20\x22'+b+'\x22\x20already\x20exists');const h=g['find'](i=>EvmAccount['nameMatch'](i['name'],c)||i['address']['toLowerCase']()===c['toLowerCase']());if(!h)a80b('account\x20not\x20found','Account\x20\x22'+a+'\x22\x20not\x20found');return h['name']=b,h['updatedAt']=Date['now'](),await d['put'](JSON['stringify'](g)),!![];});}async['suspend'](a){return EvmAccount['_lock']['run'](async()=>{const b=this['name_resolve'](a),c=await this['getStorage'](),d=await c['get']();if(!d)return![];const e=JSON['parse'](d),g=e['find'](h=>h['address']['toLowerCase']()===b['toLowerCase']()||EvmAccount['nameMatch'](h['name'],b));if(!g)return![];return g['suspended']=!![],g['name']=void 0x0,g['updatedAt']=Date['now'](),await c['put'](JSON['stringify'](e)),!![];});}async['resume'](a,b){return EvmAccount['_lock']['run'](async()=>{b=this['name_resolve'](b);if(b&&!a80a(b))a80b('invalid\x20name','Name\x20'+b+'\x20exceeds\x20max\x2064');const c=await this['getStorage'](),d=await c['get']();if(!d)return![];const e=JSON['parse'](d);if(e['find'](h=>EvmAccount['nameMatch'](h['name'],b)))a80b('account\x20name\x20exist','Name\x20\x22'+b+'\x22\x20exists');const g=e['find'](h=>h['address']['toLowerCase']()===a['toLowerCase']());if(!g)return![];return g['suspended']=![],g['name']=b,g['updatedAt']=Date['now'](),await c['put'](JSON['stringify'](e)),!![];});}async['balance'](b,c,d){const e=await this['get_imp'](b);if(!e)return void 0x0;const {cfg:f}=await this['resolveNetwork'](c,d),g=await this['rpcWithFailover'](f,'eth_getBalance',[e['address'],'latest']);return BigInt(g);}async['balanceOf'](b,c,d,e){const f=await this['get_imp'](c);if(!f)return void 0x0;const {cfg:g}=await this['resolveNetwork'](d,e),h='0x70a08231'+f['address']['slice'](0x2)['toLowerCase']()['padStart'](0x40,'0'),i=await this['rpcWithFailover'](g,'eth_call',[{'to':b,'data':h},'latest']);return BigInt(i);}async['getNonce'](b,c,d){const e=await this['get_imp'](b);if(!e)return void 0x0;const {cfg:f}=await this['resolveNetwork'](c,d),g=await this['rpcWithFailover'](f,'eth_getTransactionCount',[e['address'],'pending']);return parseInt(g,0x10);}async['getChainId'](a,b){const {cfg:c}=await this['resolveNetwork'](a,b),d=await this['rpcWithFailover'](c,'eth_chainId',[]);return parseInt(d,0x10);}async['getBlockNumber'](a,b){const {cfg:c}=await this['resolveNetwork'](a,b),d=await this['rpcWithFailover'](c,'eth_blockNumber',[]);return BigInt(d);}async['estimateGas'](b,c,d,e){const f=await this['get_imp'](c);if(!f)a80b('account\x20not\x20found','Account\x20not\x20found');const g=b['network']??d,{cfg:h}=await this['resolveNetwork'](g,e??b['rpcUrl']),i=await this['rpcWithFailover'](h,'eth_estimateGas',[{'from':f['address'],'to':b['to'],'data':b['data']??'0x','value':'0x'+(b['value']??0x0n)['toString'](0x10)}]);return BigInt(i);}async['getFeeData'](a,b){const {cfg:c}=await this['resolveNetwork'](a,b),d=await this['rpcWithFailover'](c,'eth_feeHistory',['0x5','latest',[0x32]]),e=BigInt(d['baseFeePerGas'][0x0]),f=BigInt(d['reward'][0x0][0x0]),g=c['minPriorityFee']??0x0n,h=f<g?g:f;return{'maxFeePerGas':e*0x2n+h,'maxPriorityFeePerGas':h};}async['sign_and_send'](b,c,d){const e=await this['get_imp'](c);if(!e||!e['secret'])a80b('account\x20not\x20found','EVM\x20account\x20not\x20found\x20or\x20no\x20secret:\x20'+(c??'<default>'));const {cfg:f,url:g}=await this['resolveNetwork'](b['network'],d??b['rpcUrl']),h=b['chainId']??f['chainId'],i=hexToBytes(e['secret']['slice'](0x2)),j=b['nonce']??await this['getNonce'](e['address'],f['chainId'],g);let {maxFeePerGas:k,maxPriorityFeePerGas:l,gasPrice:m}=b;f['useLegacy']&&!m&&(m=(await this['getFeeData'](f['chainId'],g))['maxFeePerGas'],k=void 0x0,l=void 0x0);if(!k&&!l&&!m){const s=await this['getFeeData'](f['chainId'],g);k=s['maxFeePerGas'],l=s['maxPriorityFeePerGas'];}let n=b['gasLimit'];if(!n){const t=await this['estimateGas'](b,c,f['chainId'],g),u=f['gasLimitMultiplier']??1.2;n=BigInt(Math['ceil'](Number(t)*u));}const o=hexToBytes(b['to']['slice'](0x2)),p=b['data']?hexToBytes(b['data']['slice'](0x2)):new Uint8Array(0x0);let q;if(m)q=signLegacy({'to':o,'data':p,'value':b['value']??0x0n,'nonce':j,'chainId':h,'gasPrice':m,'gasLimit':n},i);else q=signEIP1559({'to':o,'data':p,'value':b['value']??0x0n,'nonce':j,'chainId':h,'maxFeePerGas':k,'maxPriorityFeePerGas':l,'gasLimit':n},i);const r=await this['rpcWithFailover'](f,'eth_sendRawTransaction',[q]);return await this['waitForReceipt'](r,f['chainId'],g);}async['waitForReceipt'](a,b,c,d){const {cfg:e,url:f}=await this['resolveNetwork'](b,c),g=d??e['txConfirmTimeoutMs']??0x1d4c0,h=e['pollIntervalMs']??0xbb8,i=Date['now']()+g;while(Date['now']()<i){const j=await this['rpcWithFailover'](e,'eth_getTransactionReceipt',[a]);if(j)return this['parseReceipt'](j);await new Promise(k=>setTimeout(k,h));}a80b('fail','Transaction\x20'+a+'\x20not\x20confirmed\x20within\x20'+g+'ms');}['parseReceipt'](a){return{'transactionHash':a['transactionHash'],'blockNumber':BigInt(a['blockNumber']),'blockHash':a['blockHash'],'status':a['status']??'0x0','gasUsed':BigInt(a['gasUsed']),'effectiveGasPrice':BigInt(a['effectiveGasPrice']),'from':a['from'],'to':a['to'],'contractAddress':a['contractAddress']??void 0x0,'logs':(a['logs']??[])['map'](b=>({'address':b['address'],'topics':b['topics']??[],'data':b['data']??'0x','blockNumber':BigInt(b['blockNumber']),'transactionHash':b['transactionHash'],'transactionIndex':b['transactionIndex'],'logIndex':b['logIndex'],'removed':b['removed']??![]}))};}async['signData'](a,b){const c=await this['get_imp'](a);if(!c?.['secret'])a80b('account\x20not\x20found','EVM\x20account\x20not\x20found:\x20'+a);const d=hexToBytes(c['secret']['slice'](0x2)),e=typeof b==='string'?new TextEncoder()['encode'](b):b,f='\x19Ethereum\x20Signed\x20Message:\x0a'+e['length'],g=new Uint8Array(f['length']+e['length']);g['set'](new TextEncoder()['encode'](f),0x0),g['set'](e,f['length']);const h=keccak_256(g),i=secp256k1['sign'](h,d,{'format':'recovered'}),j=0x1b+i[0x0],k=new Uint8Array(0x41);k['set'](i['subarray'](0x1,0x21),0x0),k['set'](i['subarray'](0x21,0x41),0x20),k[0x40]=j;const l=secp256k1['getPublicKey'](d,!![]);return{'signature':'0x'+bytesToHex(k),'publicKey':'0x'+bytesToHex(l),'address':c['address']};}};export{DEFAULT_CHAIN_ID,DEFAULT_ETH_RPC_URL,DEFAULT_EVM_ACCOUNT_NAME,ETH_MAINNET_CHAIN_ID,EvmAccount,SQLiteEvmAccountStorage,bytesToBigInt,bytesToHex,hexToBytes,isValidEvmAddress,privateKeyToAddress,signEIP1559,signLegacy,toChecksumAddress};
|
|
1
|
+
import{o as a78a}from'../../exception--UEPnygY.mjs';import{SQLiteAccountStorage}from'./storage.mjs';import{bytesToBigInt,bytesToHex,hexToBytes,isValidEvmAddress,privateKeyToAddress,signEIP1559,signLegacy,toChecksumAddress}from'./evm/rlp.mjs';import{EvmNetworkRegistry}from'./evm/networks.mjs';import{secp256k1}from'@noble/curves/secp256k1.js';import{keccak_256}from'@noble/hashes/sha3.js';var AsyncLock=class{constructor(){this['_locked']=![],this['_queue']=[];}async['acquire'](){if(!this['_locked']){this['_locked']=!![];return;}return new Promise(a=>{this['_queue']['push'](a);});}['release'](){if(this['_queue']['length']>0x0)this['_queue']['shift']()();else this['_locked']=![];}async['run'](a){await this['acquire']();try{return await a();}finally{this['release']();}}};let rpcRequestId=0x0;async function ethRpcWithAbort(a,b,c,d){const e={'jsonrpc':'2.0','id':++rpcRequestId,'method':b,'params':c},f=await fetch(a,{'method':'POST','headers':{'Content-Type':'application/json'},'body':JSON['stringify'](e),'signal':d});if(!f['ok'])throw new Error('EVM\x20RPC\x20HTTP\x20'+f['status']+':\x20'+await f['text']());const g=await f['json']();if(g['error'])throw new Error('EVM\x20RPC\x20error:\x20'+g['error']['message']+'\x20(code\x20'+g['error']['code']+')');return g['result'];}var EvmAccount=class EvmAccount{static{this['_lock']=new AsyncLock();}['setStorage'](a){EvmAccount['storage']=a;}async['_getStorage'](){if(!EvmAccount['storage'])EvmAccount['storage']=new SQLiteAccountStorage(void 0x0,'evm_accounts');return EvmAccount['storage'];}static['Instance'](){if(!EvmAccount['_instance'])EvmAccount['_instance']=new EvmAccount();return EvmAccount['_instance'];}async['_get'](){const a=await this['_getStorage'](),b=await a['get']();if(!b)return void 0x0;const c=JSON['parse'](b);if(Array['isArray'](c)){const f=c,g=f['find'](h=>!h['suspended'])||f[0x0];if(g){const h={'address':g['address'],'pubkey':g['pubkey'],'secret':g['secret'],'createdAt':g['createdAt'],'updatedAt':g['updatedAt']};await a['put'](JSON['stringify'](h));const {secret:i,...j}=h;return j;}return;}const {secret:d,...e}=c;return e;}async['_getWithSecret'](){const a=await this['_getStorage'](),b=await a['get']();if(!b)a78a('account\x20not\x20found','No\x20active\x20EVM\x20account.\x20Call\x20active()\x20first\x20to\x20auto-generate\x20one.');const c=JSON['parse'](b);if(Array['isArray'](c)){const e=c,f=e['find'](h=>!h['suspended'])||e[0x0];if(!f||!f['secret'])a78a('account\x20not\x20found','No\x20active\x20EVM\x20account\x20with\x20secret\x20found\x20in\x20storage.');const g={'address':f['address'],'pubkey':f['pubkey'],'secret':f['secret'],'createdAt':f['createdAt'],'updatedAt':f['updatedAt']};return await a['put'](JSON['stringify'](g)),g;}const d=c;if(!d['secret'])a78a('account\x20not\x20found','EVM\x20account\x20found\x20but\x20has\x20no\x20secret.');return d;}async['_save'](a){await(await this['_getStorage']())['put'](JSON['stringify'](a));}async['resolveNetwork'](a,b){const c=EvmNetworkRegistry['Instance']();if(b){const e=await c['resolve'](b);return{'cfg':e,'url':c['pickHealthyRpc'](e)||b};}const d=await c['resolve'](a);return{'cfg':d,'url':c['pickHealthyRpc'](d)};}async['rpcWithFailover'](a,b,c){const d=EvmNetworkRegistry['Instance']();let f;const g=a['rpcTimeoutMs']??0x2710;for(const h of a['rpcUrls'])try{const i=new AbortController(),j=setTimeout(()=>i['abort'](),g);try{const k=await ethRpcWithAbort(h,b,c,i['signal']);return d['markHealthy'](h),k;}finally{clearTimeout(j);}}catch(l){f=l,d['markUnhealthy'](h);}throw f instanceof Error?f:new Error('All\x20RPCs\x20failed\x20for\x20'+b);}async['gen'](){return EvmAccount['_lock']['run'](async()=>{const a=secp256k1['utils']['randomSecretKey'](),b='0x'+bytesToHex(a),c=privateKeyToAddress(a),d=Date['now'](),e={'address':c,'secret':b,'createdAt':d,'updatedAt':d};await this['_save'](e);const {secret:f,...g}=e;return g;});}async['importPrivateKey'](a){return EvmAccount['_lock']['run'](async()=>{const b=a['startsWith']('0x')?a['slice'](0x2):a;if(b['length']!==0x40)a78a('invalid\x20parameter','Private\x20key\x20must\x20be\x2032\x20bytes\x20(64\x20hex\x20chars),\x20got\x20'+b['length']+'\x20chars');const c='0x'+b,d=privateKeyToAddress(hexToBytes(c)),e=Date['now'](),f={'address':d,'secret':c,'createdAt':e,'updatedAt':e};await this['_save'](f);const {secret:g,...h}=f;return h;});}async['active'](){const a=await this['_get']();if(a)return a;return this['gen']();}async['balance'](b,c){const d=await this['_get']();if(!d)return void 0x0;const {cfg:e}=await this['resolveNetwork'](b,c),f=await this['rpcWithFailover'](e,'eth_getBalance',[d['address'],'latest']);return BigInt(f);}async['balanceOf'](b,c,d){const e=await this['_get']();if(!e)return void 0x0;const {cfg:f}=await this['resolveNetwork'](c,d),g='0x70a08231'+e['address']['slice'](0x2)['toLowerCase']()['padStart'](0x40,'0'),h=await this['rpcWithFailover'](f,'eth_call',[{'to':b,'data':g},'latest']);return BigInt(h);}async['getNonce'](b,c){const d=await this['_get']();if(!d)return void 0x0;const {cfg:e}=await this['resolveNetwork'](b,c),f=await this['rpcWithFailover'](e,'eth_getTransactionCount',[d['address'],'pending']);return parseInt(f,0x10);}async['getChainId'](a,b){const {cfg:c}=await this['resolveNetwork'](a,b),d=await this['rpcWithFailover'](c,'eth_chainId',[]);return parseInt(d,0x10);}async['getBlockNumber'](a,b){const {cfg:c}=await this['resolveNetwork'](a,b),d=await this['rpcWithFailover'](c,'eth_blockNumber',[]);return BigInt(d);}async['ethCall'](b,c,d){const e=await this['_get']();if(!e)a78a('account\x20not\x20found','No\x20active\x20EVM\x20account');const f=b['network']??c,{cfg:g}=await this['resolveNetwork'](f,d??b['rpcUrl']);return await this['rpcWithFailover'](g,'eth_call',[{'from':e['address'],'to':b['to'],'data':b['data']??'0x','value':'0x'+(b['value']??0x0n)['toString'](0x10)},'latest']);}['guessGasLimit'](a){const b=a['data']??'';if(b['startsWith']('0x9c3ecefb'))return 0x927c0n;if(b['startsWith']('0x095ea7b3'))return 0x186a0n;if(b['startsWith']('0xb4b7068c'))return 0x3d090n;if(b['startsWith']('0x0bdba58b'))return 0x493e0n;return 0x61a80n;}async['estimateGas'](b,c,d){const e=await this['_get']();if(!e)a78a('account\x20not\x20found','No\x20active\x20EVM\x20account');const f=b['network']??c,{cfg:g}=await this['resolveNetwork'](f,d??b['rpcUrl']),h=await this['rpcWithFailover'](g,'eth_estimateGas',[{'from':e['address'],'to':b['to'],'data':b['data']??'0x','value':'0x'+(b['value']??0x0n)['toString'](0x10)}]);return BigInt(h);}async['safeEstimateGas'](a){if(!await this['_get']())a78a('account\x20not\x20found','No\x20active\x20EVM\x20account');const {cfg:b}=await this['resolveNetwork'](a['network'],a['rpcUrl']);let c;try{await this['ethCall'](a);}catch(d){return c=extractRevertReason(d),{'gasLimit':this['guessGasLimit'](a),'revertReason':c||'eth_call\x20failed'};}try{const f=await this['estimateGas'](a),g=b['gasLimitMultiplier']??1.2;return{'gasLimit':BigInt(Math['ceil'](Number(f)*g))};}catch(h){return c=extractRevertReason(h),console['warn']('[safeEstimateGas]\x20estimateGas\x20failed,\x20using\x20fallback\x20gasLimit='+this['guessGasLimit'](a),c?'revert:\x20'+c:''),{'gasLimit':this['guessGasLimit'](a),'revertReason':c};}}async['getFeeData'](a,b){const {cfg:c}=await this['resolveNetwork'](a,b),d=await this['rpcWithFailover'](c,'eth_feeHistory',['0x5','latest',[0x32]]),e=BigInt(d['baseFeePerGas'][0x0]),f=BigInt(d['reward'][0x0][0x0]),g=c['minPriorityFee']??0x0n,h=f<g?g:f;return{'maxFeePerGas':e*0x2n+h,'maxPriorityFeePerGas':h};}async['sign_and_send'](b,c){const d=await this['_getWithSecret']();if(!d||!d['secret'])a78a('account\x20not\x20found','No\x20active\x20EVM\x20account\x20with\x20secret');const {cfg:e,url:f}=await this['resolveNetwork'](b['network'],c??b['rpcUrl']),g=b['chainId']??e['chainId'],h=hexToBytes(d['secret']['slice'](0x2)),i=b['nonce']??await this['getNonce'](e['chainId'],f);let {maxFeePerGas:j,maxPriorityFeePerGas:k,gasPrice:l}=b;e['useLegacy']&&!l&&(l=(await this['getFeeData'](e['chainId'],f))['maxFeePerGas'],j=void 0x0,k=void 0x0);if(!j&&!k&&!l){const r=await this['getFeeData'](e['chainId'],f);j=r['maxFeePerGas'],k=r['maxPriorityFeePerGas'];}let m=b['gasLimit'];if(!m){const s=await this['safeEstimateGas'](b);m=s['gasLimit'],s['revertReason'];}const n=hexToBytes(b['to']['slice'](0x2)),o=b['data']?hexToBytes(b['data']['slice'](0x2)):new Uint8Array(0x0);let p;if(l)p=signLegacy({'to':n,'data':o,'value':b['value']??0x0n,'nonce':i,'chainId':g,'gasPrice':l,'gasLimit':m},h);else p=signEIP1559({'to':n,'data':o,'value':b['value']??0x0n,'nonce':i,'chainId':g,'maxFeePerGas':j,'maxPriorityFeePerGas':k,'gasLimit':m},h);const q=await this['rpcWithFailover'](e,'eth_sendRawTransaction',[p]);return await this['waitForReceipt'](q,e['chainId'],f);}async['waitForReceipt'](a,b,c,d){const {cfg:e,url:f}=await this['resolveNetwork'](b,c),g=d??e['txConfirmTimeoutMs']??0x1d4c0,h=e['pollIntervalMs']??0xbb8,i=Date['now']()+g;while(Date['now']()<i){const j=await this['rpcWithFailover'](e,'eth_getTransactionReceipt',[a]);if(j)return this['parseReceipt'](j);await new Promise(k=>setTimeout(k,h));}a78a('fail','Transaction\x20'+a+'\x20not\x20confirmed\x20within\x20'+g+'ms');}['parseReceipt'](a){return{'transactionHash':a['transactionHash'],'blockNumber':BigInt(a['blockNumber']),'blockHash':a['blockHash'],'status':a['status']??'0x0','gasUsed':BigInt(a['gasUsed']),'effectiveGasPrice':BigInt(a['effectiveGasPrice']),'from':a['from'],'to':a['to'],'contractAddress':a['contractAddress']??void 0x0,'logs':(a['logs']??[])['map'](b=>({'address':b['address'],'topics':b['topics']??[],'data':b['data']??'0x','blockNumber':BigInt(b['blockNumber']),'transactionHash':b['transactionHash'],'transactionIndex':b['transactionIndex'],'logIndex':b['logIndex'],'removed':b['removed']??![]}))};}async['signData'](a){const b=await this['_getWithSecret'](),c=hexToBytes(b['secret']['slice'](0x2)),d=typeof a==='string'?new TextEncoder()['encode'](a):a,e='\x19Ethereum\x20Signed\x20Message:\x0a'+d['length'],f=new Uint8Array(e['length']+d['length']);f['set'](new TextEncoder()['encode'](e),0x0),f['set'](d,e['length']);const g=keccak_256(f),h=secp256k1['sign'](g,c,{'format':'recovered','prehash':![]}),i=0x1b+h[0x0],j=new Uint8Array(0x41);j['set'](h['subarray'](0x1,0x21),0x0),j['set'](h['subarray'](0x21,0x41),0x20),j[0x40]=i;const k=secp256k1['getPublicKey'](c,!![]);return{'signature':'0x'+bytesToHex(j),'publicKey':'0x'+bytesToHex(k),'address':b['address']};}async['transfer'](a){await this['_getWithSecret']();if(!isValidEvmAddress(a['to']))a78a('invalid\x20parameter','Invalid\x20EVM\x20recipient\x20address:\x20'+a['to']);if(a['amount']<=0x0n)a78a('invalid\x20parameter','amount\x20must\x20be\x20positive');const b=!!a['tokenAddress'];if(b){const e=await this['balanceOf'](a['tokenAddress'],a['network'],a['rpcUrl']);if(e===void 0x0||e<a['amount'])a78a('fail','Insufficient\x20ERC20\x20balance:\x20have\x20'+(e??0x0n)+',\x20need\x20'+a['amount']);}else{const f=await this['balance'](a['network'],a['rpcUrl']);if(f===void 0x0||f<a['amount'])a78a('fail','Insufficient\x20ETH\x20balance:\x20have\x20'+(f??0x0n)+',\x20need\x20'+a['amount']);}let c;if(b){const g='0xa9059cbb'+a['to']['slice'](0x2)['toLowerCase']()['padStart'](0x40,'0')+a['amount']['toString'](0x10)['padStart'](0x40,'0');c={'to':a['tokenAddress'],'value':0x0n,'data':g,'network':a['network'],'rpcUrl':a['rpcUrl']};}else c={'to':a['to'],'value':a['amount'],'data':'0x','network':a['network'],'rpcUrl':a['rpcUrl']};const d=await this['sign_and_send'](c,a['rpcUrl']);if(d['status']!=='0x1')a78a('fail','EVM\x20transfer\x20reverted:\x20txHash='+d['transactionHash']);return d;}async['withdrawFromActive'](a){return this['transfer']({...a});}};function extractRevertReason(a){if(!a)return void 0x0;const b=typeof a==='string'?a:a?.['message']??a?.['toString']?.()??'',c=b['match'](/execution reverted:\s*(.+?)(?:\.|$)/i);if(c)return c[0x1]['trim']();const d=b['match'](/reverted with reason string\s*'([^']+)'/i);if(d)return d[0x1];const e=b['match'](/reverted with panic code\s*(0x[0-9a-f]+)/i);if(e)return'panic:\x20'+e[0x1];if(/stack underflow/i['test'](b))return'stack\x20underflow\x20(calldata\x20encoding\x20error)';if(/stack overflow/i['test'](b))return'stack\x20overflow';if(/out of gas/i['test'](b))return'out\x20of\x20gas';return b['length']>0xc8?b['slice'](0x0,0xc8)+'...':b;}export{EvmAccount,bytesToBigInt,bytesToHex,hexToBytes,isValidEvmAddress,privateKeyToAddress,signEIP1559,signLegacy,toChecksumAddress};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { A_ as
|
|
1
|
+
import { $_ as TokenTypeInfo, A_ as GetManyAccountOrMark_Address, B_ as fetch_token_info_operation, C_ as AccountOperation, D_ as FetchTokenInfoOperation, E_ as FaucetNetwork, F_ as LocalNameByAddress, G_ as query_local_info, H_ as local_mark_operation, I_ as ManyAccountOrMark_Address, J_ as query_local_mark, K_ as query_local_info_default, L_ as QueryAccount, M_ as LocalInfoOperationResult, N_ as LocalMarkOperation, O_ as GetAccountOrMark_Address, P_ as LocalMarkOperationResult, Q_ as TokenInfo, R_ as QueryAccountResult, T_ as AccountOrMark_Address, U_ as query_account, V_ as local_info_operation, W_ as query_account_list, X_ as query_local_token_list, Y_ as query_local_mark_list, Z_ as TokenDataFilter, av as IAccountStorage, ev as Account, iv as FaucetCoinInfo, j_ as LocalInfoOperation, k_ as GetLocalNamesByAddresses, nv as AccountFilter, ov as MAX_MESSENGER_ACCOUNTS, q_ as query_local_info_list, rv as DEFAULT_ACCOUNT_NAME, tv as AccountData, w_ as AccountOperationResult, z_ as account_operation } from "../../index-BB7rqcJ9.mjs";
|
|
2
2
|
import { n as ConfigData, t as Config } from "../../config-Bdlw4pMJ.mjs";
|
|
3
3
|
import { _ as isValidAddress, a as LocalInfoContentMaxCount, c as LocalInfoNameDefault, d as LocalMarkFilter, f as LocalMarkNameMaxLength, g as MarkParam, h as MarkData, i as LocalInfo, l as LocalInfoNameMaxLength, m as LocalMarkTagMaxLength, n as InfoData, o as LocalInfoContentMaxLength, p as LocalMarkTagMaxCount, r as InfoDataInner, s as LocalInfoFilter, t as BUITIN_IDS, u as LocalMark } from "../../local-CtSmnSPu.mjs";
|
|
4
|
-
import { c as bytesToHex,
|
|
5
|
-
import { a as
|
|
6
|
-
import { i as registerBridgeEvmNetworks, n as EvmNetworkConfig, r as EvmNetworkRegistry, t as ETH_MAINNET } from "../../networks-
|
|
4
|
+
import { _ as toChecksumAddress, c as bytesToHex, d as hexToBytes, g as signLegacy, h as signEIP1559, m as privateKeyToAddress, p as isValidEvmAddress, s as bytesToBigInt } from "../../rlp-Do3rPWRV.mjs";
|
|
5
|
+
import { a as EvmTransactionRequest, i as EvmTransactionReceipt, n as EvmAccountData, r as EvmLog, t as EvmAccount } from "../../evm-account-Dppw7HJc.mjs";
|
|
6
|
+
import { i as registerBridgeEvmNetworks, n as EvmNetworkConfig, r as EvmNetworkRegistry, t as ETH_MAINNET } from "../../networks-CEYOA-1U.mjs";
|
|
7
7
|
import { A as wipToHtml, C as createWip, D as verifyWip, E as sign_wip, O as verify_wip, S as WipVerificationResult, T as loadWip, _ as WipSignature, a as SignatureAlgorithm, b as WipToHtmlOptions, c as WipContent, d as WipFile, f as WipGenerationOptions, g as WipPayload, h as WipMeta, i as ImageSource, k as wip2html, l as WipCreateOptions, m as WipMedia, n as HashAlgorithm, o as TextFormat, p as WipLimits, r as ImageMimeType, s as WIP, t as DEFAULT_LIMITS, u as WipError, v as WipSignatureVerification, w as generate_wip, x as WipValidationError, y as WipSizeError } from "../../wip-NbB1ChbI.mjs";
|
|
8
|
-
export { Account, AccountData, AccountFilter, AccountOperation, AccountOperationResult, AccountOrMark_Address, BUITIN_IDS, Config, ConfigData, DEFAULT_ACCOUNT_NAME,
|
|
8
|
+
export { Account, AccountData, AccountFilter, AccountOperation, AccountOperationResult, AccountOrMark_Address, BUITIN_IDS, Config, ConfigData, DEFAULT_ACCOUNT_NAME, DEFAULT_LIMITS, ETH_MAINNET, EvmAccount, EvmAccountData, EvmLog, EvmNetworkConfig, EvmNetworkRegistry, EvmTransactionReceipt, EvmTransactionRequest, FaucetCoinInfo, FaucetNetwork, FetchTokenInfoOperation, GetAccountOrMark_Address, GetLocalNamesByAddresses, GetManyAccountOrMark_Address, HashAlgorithm, IAccountStorage, ImageMimeType, ImageSource, InfoData, InfoDataInner, LocalInfo, LocalInfoContentMaxCount, LocalInfoContentMaxLength, LocalInfoFilter, LocalInfoNameDefault, LocalInfoNameMaxLength, LocalInfoOperation, LocalInfoOperationResult, LocalMark, LocalMarkFilter, LocalMarkNameMaxLength, LocalMarkOperation, LocalMarkOperationResult, LocalMarkTagMaxCount, LocalMarkTagMaxLength, LocalNameByAddress, MAX_MESSENGER_ACCOUNTS, ManyAccountOrMark_Address, MarkData, MarkParam, QueryAccount, QueryAccountResult, SignatureAlgorithm, TextFormat, TokenDataFilter, TokenInfo, TokenTypeInfo, WIP, WipContent, WipCreateOptions, WipError, WipFile, WipGenerationOptions, WipLimits, WipMedia, WipMeta, WipPayload, WipSignature, WipSignatureVerification, WipSizeError, WipToHtmlOptions, WipValidationError, WipVerificationResult, account_operation, bytesToBigInt, bytesToHex, createWip, fetch_token_info_operation, generate_wip, hexToBytes, isValidAddress, isValidEvmAddress, loadWip, local_info_operation, local_mark_operation, privateKeyToAddress, query_account, query_account_list, query_local_info, query_local_info_default, query_local_info_list, query_local_mark, query_local_mark_list, query_local_token_list, registerBridgeEvmNetworks, signEIP1559, signLegacy, sign_wip, toChecksumAddress, verifyWip, verify_wip, wip2html, wipToHtml };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as
|
|
1
|
+
import{a as a79a}from'../../sui-types-CuBKFvrd.mjs';import{i as a79b,r as a79c}from'../../common-CQggZ8z4.mjs';import{o as a79d}from'../../exception--UEPnygY.mjs';import{Config}from'./config.mjs';import{BUITIN_IDS,LocalInfo,LocalInfoContentMaxCount,LocalInfoContentMaxLength,LocalInfoNameDefault,LocalInfoNameMaxLength,LocalMark,LocalMarkNameMaxLength,LocalMarkTagMaxCount,LocalMarkTagMaxLength,isValidAddress}from'./local.mjs';import{Account,DEFAULT_ACCOUNT_NAME,MAX_MESSENGER_ACCOUNTS}from'./account.mjs';import{TokenInfo}from'./token.mjs';import{bytesToBigInt,bytesToHex,hexToBytes,isValidEvmAddress,privateKeyToAddress,signEIP1559,signLegacy,toChecksumAddress}from'./evm/rlp.mjs';import{ETH_MAINNET,EvmNetworkRegistry,registerBridgeEvmNetworks}from'./evm/networks.mjs';import{EvmAccount}from'./evm-account.mjs';import{DEFAULT_LIMITS,WIP,WipError,WipSizeError,WipValidationError,createWip,generate_wip,loadWip,sign_wip,verifyWip,verify_wip,wip2html,wipToHtml}from'./wip.mjs';const GetAccountOrMark_Address=async a=>{if(!a)return await Account['Instance']()['get_address'](void 0x0);const b=typeof a==='string'?a:a['name_or_address'];if(!b)return await Account['Instance']()['get_address'](void 0x0);if(b['toLowerCase']()==='0xaaa')return a79c;if(b['toLowerCase']()==='0xaab')return a79b;if(a79a(b))return b;if(typeof a==='object'&&a?.['local_mark_first']){const c=await LocalMark['Instance']()['get_address'](b);if(!c)return await Account['Instance']()['get_address'](b);return c;}else{const d=await Account['Instance']()['get_address'](b);if(!d)return await LocalMark['Instance']()['get_address'](b);return d;}},GetLocalNamesByAddresses=async a=>{const [b,c]=await Promise['all']([Account['Instance']()['get_many'](a),LocalMark['Instance']()['get_many'](a)]);return a['map']((d,e)=>({'account':b[e]?.['name'],'local_mark':c[e]?.['name'],'address':d}));},GetManyAccountOrMark_Address=async a=>{const b=[];for(let c=0x0;c<a['entities']['length'];++c){const d=await GetAccountOrMark_Address(a['entities'][c]);if(!d&&a['check_all_founded'])a79d('invalid\x20parameter','entity\x20'+a['entities'][c]?.['name_or_address']+'\x20is\x20not\x20a\x20valid\x20address,\x20account\x20or\x20mark');if(d)b['push'](d);}return b;},query_local_mark_list=async a=>{return await LocalMark['Instance']()['list'](a);},query_account_list=async a=>{return await Account['Instance']()['list'](a);},query_local_info_list=async a=>{return await LocalInfo['Instance']()['list'](a);},query_local_token_list=async a=>{return await TokenInfo['Instance']()['list'](a);},query_local_mark=async a=>{if(typeof a==='string')return await LocalMark['Instance']()['get'](a);else{if(Array['isArray'](a))return await LocalMark['Instance']()['get_many'](a);}},query_local_info=async(a=LocalInfoNameDefault)=>{if(typeof a==='string')return await LocalInfo['Instance']()['get'](a);else{if(Array['isArray'](a))return await LocalInfo['Instance']()['get_many'](a);}},query_local_info_default=async(a=LocalInfoNameDefault)=>{if(typeof a==='string')return await LocalInfo['Instance']()['get_default'](a);else{if(Array['isArray'](a))return(await LocalInfo['Instance']()['get_many'](a))['map'](b=>b?.['default']);}},query_account=async a=>{const b=await Account['Instance']()['get'](a['name_or_address']);if(!b)return{'name_or_address':a['name_or_address']};const c={'address':b['address'],'name_or_address':b['name']},d=a['token_type']??'0x2::wow::WOW';if(a?.['balance'])c['balance']=await Account['Instance']()['balance'](d,b['address'],a['network']);else{if(a?.['coin'])c['coin']=await Account['Instance']()['coin'](d,a['coin']['cursor'],a['coin']['limit'],b['address'],a['network']);}return c;},account_operation=async a=>{var b={};if(a['gen']!=null){const c=await Account['Instance']()['gen'](a['gen']?.['name'],a['gen']?.['replaceExistName'],a['gen']?.['m']);b['gen']={'address':c?.['address'],'name':c?.['name'],'m':c?.['m']};}if(a['faucet']!=null)b['faucet']={'name_or_address':a['faucet']['name_or_address'],'result':await Account['Instance']()['faucet'](a['faucet']['name_or_address'],a['faucet']['network']),'network':a['faucet']['network']};if(a['suspend']!=null)b['suspend']={'name_or_address':a['suspend']['name_or_address'],'success':await Account['Instance']()['suspend'](a['suspend']['name_or_address'])};if(a['resume']!=null)b['resume']={'address':a['resume']['address'],'name':a['resume']['name'],'success':await Account['Instance']()['resume'](a['resume']['address'],a['resume']['name'])};if(a['rename']!=null)b['rename']={'name_or_address':a['rename']['name_or_address'],'new_name':a['rename']['new_name'],'success':await Account['Instance']()['rename'](a['rename']['name_or_address'],a['rename']['new_name'])};if(a['swap_name']!=null)b['swap_name']={'name_or_address1':a['swap_name']['name_or_address1'],'name_or_address2':a['swap_name']['name_or_address2'],'success':await Account['Instance']()['swap_name'](a['swap_name']['name_or_address1'],a['swap_name']['name_or_address2'])};if(a['transfer']!=null){const {name_or_address_from:d,name_or_address_to:e,amount:f,token_type:g,network:h}=a['transfer'];b['transfer']=await Account['Instance']()['transfer'](f,g,e,d,h);}if(a['get']!=null){const {balance_required:i,token_type:j,name_or_address:k,network:l}=a['get'];b['get']={'name_or_address':k,'balance_required':i,'token_type':j,'network':l,'coin_address':await Account['Instance']()['coinObject_with_balance'](i,j,k,l)};}if(a['signData']!=null){const {name_or_address:n,data:o,data_encoding:p}=a['signData'];let q=o;if(typeof o==='string'&&p)switch(p){case'base64':q=Uint8Array['from'](Buffer['from'](o,'base64'));break;case'hex':q=Uint8Array['from'](Buffer['from'](o['replace'](/^0x/,''),'hex'));break;default:q=o;break;}const r=await Account['Instance']()['signData'](n,q);b['signData']={'name_or_address':n,'signature':r['signature'],'publicKey':r['publicKey'],'address':r['address']};}if(a['messenger']!=null){const {name_or_account:s,m:t}=a['messenger'];await Account['Instance']()['set_messenger'](s,t),b['messenger']={'name_or_account':s,'m':t};}return b;},local_mark_operation=async a=>{const b={};if(a['clear'])b['clear']=await LocalMark['Instance']()['clear']();else{if(a['add'])b['add']=await LocalMark['Instance']()['put'](a['add']['data']);else{if(a['remove'])b['remove']=await LocalMark['Instance']()['del'](a['remove']['names']);}}return b;},local_info_operation=async a=>{if(a['clear'])await LocalInfo['Instance']()['clear']();else{if(a['add'])await LocalInfo['Instance']()['add'](a['add']['data']);else{if(a['remove'])await Promise['all'](a['remove']['data']['map'](b=>LocalInfo['Instance']()['del'](b)));else{if(a['reset'])await LocalInfo['Instance']()['reset_contents'](a['reset']['name'],a['reset']['contents']);}}}return{'success':!![]};},fetch_token_info_operation=async a=>{return await TokenInfo['Instance']()['fetch'](a['tokenType'],a?.['alias'],a?.['network']);};export{Account,BUITIN_IDS,Config,DEFAULT_ACCOUNT_NAME,DEFAULT_LIMITS,ETH_MAINNET,EvmAccount,EvmNetworkRegistry,GetAccountOrMark_Address,GetLocalNamesByAddresses,GetManyAccountOrMark_Address,LocalInfo,LocalInfoContentMaxCount,LocalInfoContentMaxLength,LocalInfoNameDefault,LocalInfoNameMaxLength,LocalMark,LocalMarkNameMaxLength,LocalMarkTagMaxCount,LocalMarkTagMaxLength,MAX_MESSENGER_ACCOUNTS,TokenInfo,WIP,WipError,WipSizeError,WipValidationError,account_operation,bytesToBigInt,bytesToHex,createWip,fetch_token_info_operation,generate_wip,hexToBytes,isValidAddress,isValidEvmAddress,loadWip,local_info_operation,local_mark_operation,privateKeyToAddress,query_account,query_account_list,query_local_info,query_local_info_default,query_local_info_list,query_local_mark,query_local_mark_list,query_local_token_list,registerBridgeEvmNetworks,signEIP1559,signLegacy,sign_wip,toChecksumAddress,verifyWip,verify_wip,wip2html,wipToHtml};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as a82a,c as a82b,d as a82c,i as a82d,l as a82e,n as a82f,o as a82g,r as a82h,s as a82i,t as a82j,u as a82k}from'../../local-c-Tbdkfa.mjs';export{a82j as BUITIN_IDS,a82f as LocalInfo,a82h as LocalInfoContentMaxCount,a82d as LocalInfoContentMaxLength,a82a as LocalInfoNameDefault,a82g as LocalInfoNameMaxLength,a82i as LocalMark,a82b as LocalMarkNameMaxLength,a82e as LocalMarkTagMaxCount,a82k as LocalMarkTagMaxLength,a82c as isValidAddress};
|
|
1
|
+
import{a as a80a}from'../../sui-types-CuBKFvrd.mjs';import{o as a80b}from'../../exception--UEPnygY.mjs';import{Cache}from'./cache.mjs';import{Config}from'./config.mjs';const BUITIN_IDS=['0x5','0x6','0x7','0x8','0x9','0xc','0xd','0xa','@0xaaa','@0xaab','@0x403','@0xacc','@0xc'],isValidAddress=a=>{return a&&(a80a(a)||BUITIN_IDS['includes'](a));},LocalMarkNameMaxLength=0x40,LocalMarkTagMaxLength=0x40,LocalMarkTagMaxCount=0x32,LocalInfoNameMaxLength=0x40,LocalInfoContentMaxLength=0x12c,LocalInfoContentMaxCount=0x32,LocalInfoNameDefault='Address\x20of\x20delivery';var LocalMark=class LocalMark{constructor(){this['config']=Config['Instance']();}async['getCacheKey'](){return['mark',await this['config']['network_get']()];}static['Instance'](){if(!LocalMark['_instance'])LocalMark['_instance']=new LocalMark();return LocalMark['_instance'];}static['nameMatch'](a,b){if(a==null||b==null)return![];return a['toLowerCase']()===b['toLowerCase']();}['resolve_tags'](a){return a=a?.['slice'](0x0,0x32),a=a?.['filter'](b=>b!==''&&b)?.['map'](b=>{return b['slice'](0x0,0x40);}),a;}['resolve_name'](a){return a['slice'](0x0,0x40);}async['put'](a){const b=await this['getCacheKey'](),c=(await Cache['read'](b,async()=>{return{'expire':'INFINITE','data':[]};}))?.['data']||[],d=[...c],e=[];for(const f of a){f['address']=f['address']['toLowerCase']();if(!isValidAddress(f['address']))a80b('invalid\x20address','LocalMark.put.mark.address:\x20'+f['address']);if(f?.['name']?.['value'])f['name']['value']=this['resolve_name'](f?.['name']?.['value']);f['tags']=this['resolve_tags'](f?.['tags']);if(f?.['name']?.['value']!=null)d['forEach'](i=>{if(LocalMark['nameMatch'](i['name'],f['name']['value'])){if(f?.['name']?.['replaceExistName'])i['name']=void 0x0;else a80b('local\x20mark\x20name\x20exist','LocalMark.put.mark.name:\x20'+f['name']['value']);}});const g=Date['now'](),h={'name':f?.['name']?.['value'],'address':f['address'],'tags':f['tags'],'createdAt':g,'updatedAt':g};c['push'](h),e['push'](h);}return await Cache['read'](b,async()=>({'expire':'INFINITE','data':c}),!![]),e;}async['get'](a){if(a===void 0x0||a===null)return;const b=await this['getCacheKey']();return(await Cache['read'](b,async c=>{return{'expire':'INFINITE','data':[]};}))?.['data']?.['find'](c=>LocalMark['nameMatch'](c['name'],a)||c['address']['toLowerCase']()===a['toLowerCase']());}async['get_address'](a){if(a&&isValidAddress(a))return a['toLowerCase']();return(await this['get'](a))?.['address'];}async['get_many'](a){if(!Array['isArray'](a)||a['length']===0x0)return[];const b=await this['getCacheKey'](),c=(await Cache['read'](b,async d=>{return{'expire':'INFINITE','data':[]};}))?.['data']||[];return a['map'](d=>{return c['find'](e=>LocalMark['nameMatch'](e['name'],d)||e['address']['toLowerCase']()===d?.['toLowerCase']());});}async['get_many_address'](a){const b=new Array(a['length'])['fill'](void 0x0),c=new Map();a['forEach']((g,h)=>{if(g===null||g===void 0x0)b[h]=void 0x0;else{if(isValidAddress(g))b[h]=g['toLowerCase']();else c['set'](h,g);}});const d=Array['from'](c['values']());if(d['length']===0x0)return b;const e=await this['get_many'](d);let f=0x0;return c['forEach']((g,h)=>{const i=e[f];b[h]=i?.['address'],f++;}),b;}async['get_many_address_availables'](a){return(await this['get_many_address'](a))['filter'](b=>b!=null);}async['del'](a,b=![]){const c=await this['getCacheKey'](),d=(await Cache['read'](c,async()=>({'expire':'INFINITE','data':[]})))?.['data']||[],e=d['filter'](g=>{const h=a['map'](m=>m['toLowerCase']()),i=g['name']!==void 0x0&&g['name']!==null&&a['some'](m=>LocalMark['nameMatch'](g['name'],m)),j=h['includes'](g['address']['toLowerCase']()),k=i||j,l=g['name']===void 0x0||g['name']===null;if(b)return!k&&!l;else return!k;}),f=d['filter'](g=>!e['includes'](g));if(e['length']!==d['length'])await Cache['read'](c,async()=>({'expire':'INFINITE','data':e}),!![]);return f;}async['clear'](){const a=await this['getCacheKey']();return await Cache['read'](a,async()=>({'expire':'INFINITE','data':[]}),!![]),!![];}async['rename'](a,b){b=this['resolve_name'](b);if(a===b)return!![];const c=await this['getCacheKey'](),d=(await Cache['read'](c,async()=>({'expire':'INFINITE','data':[]})))?.['data']||[],e=d['find'](f=>LocalMark['nameMatch'](f['name'],a));if(e&&d['findIndex'](f=>LocalMark['nameMatch'](f['name'],b))===-0x1){const f=Date['now']();return e['name']=b,e['updatedAt']=f,await Cache['read'](c,async()=>({'expire':'INFINITE','data':d}),!![]),!![];}return![];}async['swap_name'](a,b){if(a===b)return!![];const c=await this['getCacheKey'](),d=(await Cache['read'](c,async()=>({'expire':'INFINITE','data':[]})))?.['data']||[],e=d['find'](g=>LocalMark['nameMatch'](g['name'],a)),f=d['find'](g=>LocalMark['nameMatch'](g['name'],b));if(e&&f){const g=Date['now']();return e['name']=b,e['updatedAt']=g,f['name']=a,f['updatedAt']=g,await Cache['read'](c,async()=>({'expire':'INFINITE','data':d}),!![]),!![];}return![];}async['set_tags'](a,b){b=this['resolve_tags'](b);const c=await this['getCacheKey'](),d=(await Cache['read'](c,async()=>({'expire':'INFINITE','data':[]})))?.['data']||[],e=d['find'](f=>LocalMark['nameMatch'](f['name'],a));if(e){const f=Date['now']();return e['tags']=b,e['updatedAt']=f,await Cache['read'](c,async()=>({'expire':'INFINITE','data':d}),!![]),!![];}return![];}async['list'](a){if(a&&a['tags'])a['tags']=a['tags']['filter'](c=>c!==''&&c);const b=await this['getCacheKey']();return((await Cache['read'](b,async()=>({'expire':'INFINITE','data':[]})))?.['data']||[])['filter'](c=>{if(a?.['address']&&c['address']['toLowerCase']()!==a['address']['toLowerCase']())return![];if(a?.['createdAt']){if(a['createdAt']['gte']!==void 0x0&&(!c['createdAt']||c['createdAt']<a['createdAt']['gte']))return![];if(a['createdAt']['lte']!==void 0x0&&(!c['createdAt']||c['createdAt']>a['createdAt']['lte']))return![];}if(a?.['updatedAt']){if(a['updatedAt']['gte']!==void 0x0&&(!c['updatedAt']||c['updatedAt']<a['updatedAt']['gte']))return![];if(a['updatedAt']['lte']!==void 0x0&&(!c['updatedAt']||c['updatedAt']>a['updatedAt']['lte']))return![];}return!![];})['map'](c=>{let d=0x0;const e=c['name']?.['toLowerCase']()||'',f=a?.['name']?.['toLowerCase']()||'';if(a?.['name']){if(e===f)d+=0x64;else{if(e['startsWith'](f))d+=0x32;else{if(e['includes'](f))d+=0x19;}}}if(a?.['tags']&&a['tags']['length']>0x0)a['tags']['forEach'](g=>{const h=g['toLowerCase']();if(c['tags'])c['tags']['forEach'](i=>{const j=i['toLowerCase']();if(j===h)d+=0x14;else{if(j['startsWith'](h))d+=0xf;else{if(j['includes'](h))d+=0xa;}}});});if((a?.['name']||a?.['tags'])&&d===0x0)d=-0x1;return{'mark':c,'score':d};})['filter'](({score:c})=>c>=0x0)['sort']((c,d)=>{if(d['score']!==c['score'])return d['score']-c['score'];const e=(c['mark']['name']||'')['length'],f=(d['mark']['name']||'')['length'];if(e!==f)return e-f;return(c['mark']['name']||'')['localeCompare'](d['mark']['name']||'');})['map'](({mark:c})=>c);}},LocalInfoAsyncLock=class{constructor(){this['_locked']=![],this['_queue']=[];}async['acquire'](){if(!this['_locked']){this['_locked']=!![];return;}return new Promise(a=>{this['_queue']['push'](a);});}['release'](){if(this['_queue']['length']>0x0)this['_queue']['shift']()();else this['_locked']=![];}async['run'](a){await this['acquire']();try{return await a();}finally{this['release']();}}},LocalInfo=class LocalInfo{constructor(){this['cacheKey']=['info'];}static{this['_lock']=new LocalInfoAsyncLock();}static['Instance'](){if(!LocalInfo['_instance'])LocalInfo['_instance']=new LocalInfo();return LocalInfo['_instance'];}static['nameMatch'](a,b){if(a==null||b==null)return![];return a['toLowerCase']()===b['toLowerCase']();}['resolve_contents'](a){return a=a['slice'](0x0,0x32),a['map'](b=>b['slice'](0x0,0x12c));}['resolve_name'](a){return a['slice'](0x0,0x40);}async['add'](a){return LocalInfo['_lock']['run'](async()=>{const b=(await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':{}})))?.['data']||{};for(const c of a){const d=this['resolve_name'](c['name']),e=c['default']['slice'](0x0,0x12c);if(b[d]){const f=Date['now'](),g=b[d];g['default']=e;if(c['contents']!==void 0x0)g['contents']=this['resolve_contents'](c['contents']);g['updatedAt']=f;}else{const h=Date['now']();b[d]={'default':e,'contents':c['contents']?this['resolve_contents'](c['contents']):[],'createdAt':h,'updatedAt':h};}}return await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':b}),!![]),!![];});}async['get'](a=LocalInfoNameDefault){const b=((await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':{}})))?.['data']||{})[a];return b?{'name':a,...b}:void 0x0;}async['get_default'](a=LocalInfoNameDefault){return(await this['get'](a))?.['default'];}async['get_many'](a){if(!Array['isArray'](a)||a['length']===0x0)return[];const b=(await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':{}})))?.['data']||{};return a['map'](c=>{const d=b[c];return d?{'name':c,...d}:void 0x0;});}async['del'](a=LocalInfoNameDefault){return LocalInfo['_lock']['run'](async()=>{const b=(await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':{}})))?.['data']||{};delete b[a],await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':b}),!![]);});}async['reset_contents'](a=LocalInfoNameDefault,b){return LocalInfo['_lock']['run'](async()=>{const c=(await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':{}})))?.['data']||{},d=c[a];if(d){const e=Date['now']();return d['contents']=this['resolve_contents'](b),d['updatedAt']=e,await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':c}),!![]),!![];}return![];});}async['clear'](){return LocalInfo['_lock']['run'](async()=>{await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':{}}),!![]);});}async['list'](a){const b=(await Cache['read'](this['cacheKey'],async()=>({'expire':'INFINITE','data':{}})))?.['data']||{};return Object['entries'](b)['map'](([c,d])=>{let e=0x0;const f={'name':c,...d};if(a?.['name']){const g=c['toLowerCase'](),h=a['name']['toLowerCase']();if(g===h)e+=0x64;else{if(g['startsWith'](h))e+=0x32;else{if(g['includes'](h))e+=0x19;}}}if(a?.['default']){const i=d['default']['toLowerCase'](),j=a['default']['toLowerCase']();if(i===j)e+=0x5a;else{if(i['startsWith'](j))e+=0x2d;else{if(i['includes'](j))e+=0x16;}}}if(a?.['contents']&&a['contents']['length']>0x0)a['contents']['forEach'](k=>{const l=k['toLowerCase']();if(d['contents'])d['contents']['forEach'](m=>{const n=m['toLowerCase']();if(n===l)e+=0x14;else{if(n['startsWith'](l))e+=0xf;else{if(n['includes'](l))e+=0xa;}}});});if((a?.['name']||a?.['default']||a?.['contents'])&&e===0x0)e=-0x1;return{'info':f,'score':e};})['filter'](({score:c,info:d})=>{if(c<0x0)return![];if(a?.['createdAt']){if(a['createdAt']['gte']!==void 0x0&&(!d['createdAt']||d['createdAt']<a['createdAt']['gte']))return![];if(a['createdAt']['lte']!==void 0x0&&(!d['createdAt']||d['createdAt']>a['createdAt']['lte']))return![];}if(a?.['updatedAt']){if(a['updatedAt']['gte']!==void 0x0&&(!d['updatedAt']||d['updatedAt']<a['updatedAt']['gte']))return![];if(a['updatedAt']['lte']!==void 0x0&&(!d['updatedAt']||d['updatedAt']>a['updatedAt']['lte']))return![];}return!![];})['sort']((c,d)=>{if(d['score']!==c['score'])return d['score']-c['score'];const e=c['info']['name']['length'],f=d['info']['name']['length'];if(e!==f)return e-f;return c['info']['name']['localeCompare'](d['info']['name']);})['map'](({info:c})=>c);}};export{BUITIN_IDS,LocalInfo,LocalInfoContentMaxCount,LocalInfoContentMaxLength,LocalInfoNameDefault,LocalInfoNameMaxLength,LocalMark,LocalMarkNameMaxLength,LocalMarkTagMaxCount,LocalMarkTagMaxLength,isValidAddress};
|
|
@@ -1,53 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
//#region src/w/local/storage.d.ts
|
|
4
|
-
interface IStorage {
|
|
5
|
-
put(key: string, value: string): Promise<void>;
|
|
6
|
-
get(key: string): Promise<string | undefined>;
|
|
7
|
-
getMany(keys: string[]): Promise<(string | undefined)[]>;
|
|
8
|
-
del(key: string): Promise<void>;
|
|
9
|
-
clear(): Promise<void>;
|
|
10
|
-
}
|
|
11
|
-
interface IAccountStorage {
|
|
12
|
-
get(): Promise<string | undefined>;
|
|
13
|
-
put(data: string): Promise<void>;
|
|
14
|
-
clear(): Promise<void>;
|
|
15
|
-
}
|
|
16
|
-
declare class SQLiteStorage implements IStorage {
|
|
17
|
-
private _db;
|
|
18
|
-
private _dbSource;
|
|
19
|
-
constructor(db?: Database.Database);
|
|
20
|
-
private get db();
|
|
21
|
-
get(key: string): Promise<string | undefined>;
|
|
22
|
-
getMany(keys: string[]): Promise<(string | undefined)[]>;
|
|
23
|
-
put(key: string, value: string): Promise<void>;
|
|
24
|
-
putMany(items: {
|
|
25
|
-
key: string;
|
|
26
|
-
value: string;
|
|
27
|
-
}[]): Promise<void>;
|
|
28
|
-
del(key: string): Promise<void>;
|
|
29
|
-
clear(): Promise<void>;
|
|
30
|
-
}
|
|
31
|
-
declare class SQLiteAccountStorage implements IAccountStorage {
|
|
32
|
-
private _db;
|
|
33
|
-
private _dbSource;
|
|
34
|
-
constructor(db?: Database.Database);
|
|
35
|
-
private get db();
|
|
36
|
-
get(): Promise<string | undefined>;
|
|
37
|
-
put(data: string): Promise<void>;
|
|
38
|
-
clear(): Promise<void>;
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* 关闭并重置所有数据库连接
|
|
42
|
-
* 用于测试时清理数据
|
|
43
|
-
*/
|
|
44
|
-
declare function resetAllDbConnections(): void;
|
|
45
|
-
/**
|
|
46
|
-
* 重置所有存储实例和数据库连接
|
|
47
|
-
* 用于测试时完全清理数据
|
|
48
|
-
*/
|
|
49
|
-
declare function resetAllStorage(): void;
|
|
50
|
-
declare const defaultStorage: SQLiteStorage;
|
|
51
|
-
declare const defaultAccountStorage: SQLiteAccountStorage;
|
|
52
|
-
//#endregion
|
|
1
|
+
import { a as defaultAccountStorage, c as resetAllStorage, i as SQLiteStorage, n as IStorage, o as defaultStorage, r as SQLiteAccountStorage, s as resetAllDbConnections, t as IAccountStorage } from "../../storage-0TLziZMp.mjs";
|
|
53
2
|
export { IAccountStorage, IStorage, SQLiteAccountStorage, SQLiteStorage, defaultAccountStorage, defaultStorage, resetAllDbConnections, resetAllStorage };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{getWowDir}from'./util.mjs';import
|
|
1
|
+
import{getWowDir}from'./util.mjs';import a81a from'libsql';import*as a81b from'path';import*as a81c from'fs';const WOW_DIR=getWowDir(),CACHE_DB_PATH=a81b['join'](WOW_DIR,'cache.db'),ACCOUNT_DB_PATH=a81b['join'](WOW_DIR,'account.db');function ensureWowDirExists(){if(!a81c['existsSync'](WOW_DIR))a81c['mkdirSync'](WOW_DIR,{'recursive':!![]});}ensureWowDirExists();function getCacheDatabase(){ensureWowDirExists();const a=new a81a(CACHE_DB_PATH);return a['pragma']('journal_mode\x20=\x20WAL'),a['pragma']('synchronous\x20=\x20NORMAL'),a['exec']('\x0a\x09\x09CREATE\x20TABLE\x20IF\x20NOT\x20EXISTS\x20cache\x20(\x0a\x09\x09\x09key\x20TEXT\x20PRIMARY\x20KEY,\x0a\x09\x09\x09value\x20TEXT\x20NOT\x20NULL,\x0a\x09\x09\x09updated_at\x20INTEGER\x20DEFAULT\x20(strftime(\x27%s\x27,\x20\x27now\x27))\x0a\x09\x09);\x0a\x09'),a;}let cacheDbInstance=null;function getCacheDb(){if(!cacheDbInstance)cacheDbInstance=getCacheDatabase();return cacheDbInstance;}function getAccountDatabase(){ensureWowDirExists();const a=new a81a(ACCOUNT_DB_PATH);a['pragma']('journal_mode\x20=\x20WAL'),a['pragma']('synchronous\x20=\x20NORMAL');try{a81c['chmodSync'](ACCOUNT_DB_PATH,0x180);}catch{}return a['exec']('\x0a\x09\x09CREATE\x20TABLE\x20IF\x20NOT\x20EXISTS\x20accounts\x20(\x0a\x09\x09\x09id\x20INTEGER\x20PRIMARY\x20KEY\x20CHECK\x20(id\x20=\x201),\x0a\x09\x09\x09data\x20TEXT\x20NOT\x20NULL,\x0a\x09\x09\x09updated_at\x20INTEGER\x20DEFAULT\x20(strftime(\x27%s\x27,\x20\x27now\x27))\x0a\x09\x09);\x0a\x09'),a;}let accountDbInstance=null;function getAccountDb(){if(!accountDbInstance)accountDbInstance=getAccountDatabase();return accountDbInstance;}var SQLiteStorage=class{constructor(a){this['_dbSource']=a;}get['db'](){if(this['_dbSource'])return this['_dbSource'];if(!this['_db'])this['_db']=getCacheDb();return this['_db'];}async['get'](a){return this['db']['prepare']('SELECT\x20value\x20FROM\x20cache\x20WHERE\x20key\x20=\x20?')['get'](a)?.['value'];}async['getMany'](a){const b=a['map'](()=>'?')['join'](','),c=this['db']['prepare']('SELECT\x20key,\x20value\x20FROM\x20cache\x20WHERE\x20key\x20IN\x20('+b+')')['all'](...a),d=new Map(c['map'](e=>[e['key'],e['value']]));return a['map'](e=>d['get'](e));}async['put'](a,b){this['db']['prepare']('\x0a\x09\x09\x09INSERT\x20INTO\x20cache\x20(key,\x20value,\x20updated_at)\x20\x0a\x09\x09\x09VALUES\x20(?,\x20?,\x20strftime(\x27%s\x27,\x20\x27now\x27))\x0a\x09\x09\x09ON\x20CONFLICT(key)\x20DO\x20UPDATE\x20SET\x20value\x20=\x20excluded.value,\x20updated_at\x20=\x20excluded.updated_at\x0a\x09\x09')['run'](a,b);}async['putMany'](a){const b=this['db']['prepare']('\x0a\x09\x09\x09INSERT\x20INTO\x20cache\x20(key,\x20value,\x20updated_at)\x20\x0a\x09\x09\x09VALUES\x20(?,\x20?,\x20strftime(\x27%s\x27,\x20\x27now\x27))\x0a\x09\x09\x09ON\x20CONFLICT(key)\x20DO\x20UPDATE\x20SET\x20value\x20=\x20excluded.value,\x20updated_at\x20=\x20excluded.updated_at\x0a\x09\x09');this['db']['transaction'](c=>{for(const d of c)b['run'](d['key'],d['value']);})(a);}async['del'](a){this['db']['prepare']('DELETE\x20FROM\x20cache\x20WHERE\x20key\x20=\x20?')['run'](a);}async['clear'](){this['db']['exec']('DELETE\x20FROM\x20cache');}},SQLiteAccountStorage=class{constructor(a,b='accounts'){this['_tableName']=b,this['_tableInitialized']=![],this['_dbSource']=a;}get['db'](){if(this['_dbSource'])return this['_dbSource'];if(!this['_db'])this['_db']=getAccountDb();return!this['_tableInitialized']&&this['_tableName']!=='accounts'&&(this['_db']['exec']('\x0a\x09\x09\x09\x09CREATE\x20TABLE\x20IF\x20NOT\x20EXISTS\x20'+this['_tableName']+'\x20(\x0a\x09\x09\x09\x09\x09id\x20INTEGER\x20PRIMARY\x20KEY\x20CHECK\x20(id\x20=\x201),\x0a\x09\x09\x09\x09\x09data\x20TEXT\x20NOT\x20NULL,\x0a\x09\x09\x09\x09\x09updated_at\x20INTEGER\x20DEFAULT\x20(strftime(\x27%s\x27,\x20\x27now\x27))\x0a\x09\x09\x09\x09);\x0a\x09\x09\x09'),this['_tableInitialized']=!![]),this['_db'];}async['get'](){return this['db']['prepare']('SELECT\x20data\x20FROM\x20'+this['_tableName']+'\x20WHERE\x20id\x20=\x201')['get']()?.['data'];}async['put'](a){this['db']['prepare']('\x0a\x09\x09\x09INSERT\x20INTO\x20'+this['_tableName']+'\x20(id,\x20data,\x20updated_at)\x20\x0a\x09\x09\x09VALUES\x20(1,\x20?,\x20strftime(\x27%s\x27,\x20\x27now\x27))\x0a\x09\x09\x09ON\x20CONFLICT(id)\x20DO\x20UPDATE\x20SET\x20data\x20=\x20excluded.data,\x20updated_at\x20=\x20excluded.updated_at\x0a\x09\x09')['run'](a);}async['clear'](){this['db']['exec']('DELETE\x20FROM\x20'+this['_tableName']);}};function resetAllDbConnections(){if(cacheDbInstance){try{cacheDbInstance['close']();}catch(a){}cacheDbInstance=null;}if(accountDbInstance){try{accountDbInstance['close']();}catch(b){}accountDbInstance=null;}}process['on']('exit',()=>{resetAllDbConnections();}),process['on']('SIGINT',()=>{resetAllDbConnections(),process['exit'](0x0);}),process['on']('SIGTERM',()=>{resetAllDbConnections(),process['exit'](0x0);});function resetAllStorage(){resetAllDbConnections();}const defaultStorage=new SQLiteStorage(),defaultAccountStorage=new SQLiteAccountStorage();export{SQLiteAccountStorage,SQLiteStorage,defaultAccountStorage,defaultStorage,resetAllDbConnections,resetAllStorage};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { $_ as TokenTypeInfo, Q_ as TokenInfo, Z_ as TokenDataFilter } from "../../index-BB7rqcJ9.mjs";
|
|
2
2
|
export { TokenDataFilter, TokenInfo, TokenTypeInfo };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as
|
|
1
|
+
import{t as a82a}from'../../client-YYCgsO99.mjs';import{n as a82b}from'../../network-CeDd07Hg.mjs';import'../../common-CQggZ8z4.mjs';import{o as a82c}from'../../exception--UEPnygY.mjs';import{Cache}from'./cache.mjs';import{Config}from'./config.mjs';var TokenInfo=class TokenInfo{constructor(){this['cacheKey']=['token'];}static['Instance'](){if(!TokenInfo['_instance'])TokenInfo['_instance']=new TokenInfo();return TokenInfo['_instance'];}async['fetch_imp'](a,b,c){const d=await new a82a({'url':a82b(a),'network':a})['getCoinMetadata']({'coinType':b});if(d)return{'alias':c,'type':b,...d};}async['fetch'](a,b,c){a=a??'0x2::wow::WOW';const d=await Config['Instance']()['network_get'](c),e=await Cache['read']([...this['cacheKey'],d],async g=>{return{'expire':'INFINITE','data':[]};});let f=e?.['data']?.['find'](g=>g['type']===a);if(!f){f=await this['fetch_imp'](d,a,b);if(!f){a82c('token\x20not\x20found','token\x20type:\x20'+a);return;}const g=[...e?.['data']||[],f];await Cache['read']([...this['cacheKey'],d],async h=>({'expire':'INFINITE','data':g}),!![]);}else{if(b&&f['alias']!==b){f['alias']=b;const h=e?.['data']?.['map'](i=>i['type']===a?f:i)||[];await Cache['read']([...this['cacheKey'],d],async i=>({'expire':'INFINITE','data':h}),!![]);}}return f;}async['list'](a,b){const c=await Config['Instance']()['network_get'](b);let d=await Cache['read']([...this['cacheKey'],c],async h=>{return{'expire':'INFINITE','data':[]};}),e=d?.['data']||[];const f=a?.['type']??'0x2::wow::WOW',g=a?.['type']?a?.['alias_or_name']:void 0x0;if(!e['find'](h=>h['type']===f)){const h=await this['fetch_imp'](c,f,g);if(h){const i=[...e,h];await Cache['read']([...this['cacheKey'],c],async j=>({'expire':'INFINITE','data':i}),!![]),d=await Cache['read']([...this['cacheKey'],c],async j=>({'expire':'INFINITE','data':i})),e=d?.['data']||[];}}if(a){e=e['filter'](j=>{let k=!![];if(a['symbol']&&k)k=j['symbol']===a['symbol'];if(a['type']&&k)k=j['type']===f;return k;});if(a['alias_or_name']){const j=a['alias_or_name']['toLowerCase']();e=e['map'](k=>{let l=0x0;const m=k['alias']?.['toLowerCase']()||'',n=k['name']?.['toLowerCase']()||'';if(m===j||n===j)l=0x3;else{if(m['startsWith'](j)||n['startsWith'](j))l=0x2;else{if(m['includes'](j)||n['includes'](j))l=0x1;}}return{...k,'_score':l};}),e=e['filter'](k=>k['_score']>0x0)['sort']((k,l)=>{const m=l['_score']-k['_score'];if(m!==0x0)return m;return(k['alias']?.['length']||0x0)+(k['name']?.['length']||0x0)-((l['alias']?.['length']||0x0)+(l['name']?.['length']||0x0));}),e=e['map'](k=>{const {_score:l,...m}=k;return m;});}}return e;}};export{TokenInfo};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import*as
|
|
1
|
+
import*as a83a from'path';import*as a83b from'os';function getWowDir(){if(process['env']['WOWOK_DATA_DIR'])return process['env']['WOWOK_DATA_DIR'];const a=a83b['homedir'](),b=a83b['platform']();if(b==='win32')return a83a['join'](a,'.wow','V1');else{if(b==='darwin')return a83a['join'](a,'Library','Application\x20Support','.wow','V1');else{const c=process['env']['XDG_CONFIG_HOME'];if(c)return a83a['join'](c,'.wow','V1');const d=process['env']['XDG_DATA_HOME'];if(d)return a83a['join'](d,'.wow','V1');return a83a['join'](a,'.wow','V1');}}}export{getWowDir};
|
package/dist/esm/w/local/wip.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{sha256}from'@noble/hashes/sha2.js';import{bytesToHex}from'@noble/hashes/utils.js';import*as a86a from'path';import*as a86b from'fs';import*as a86c from'https';import*as a86d from'http';const WIP_SCHEMA_URL='https://github.com/wowok-ai/docs/blob/main/WIP.md',WIP_VERSION='1.0.0',DEFAULT_LIMITS={'maxImageSize':0x2*0x400*0x400,'maxTotalSize':0xa*0x400*0x400,'maxImageCount':0xa,'maxTextLength':0x2710};var WipError=class extends Error{constructor(a){super(a),this['name']='WipError';}},WipValidationError=class extends WipError{constructor(a){super(a),this['name']='WipValidationError';}},WipSizeError=class extends WipError{constructor(a){super(a),this['name']='WipSizeError';}};function detectMimeType(a){if(a['length']>=0x4&&a[0x0]===0x89&&a[0x1]===0x50&&a[0x2]===0x4e&&a[0x3]===0x47)return'image/png';if(a['length']>=0x3&&a[0x0]===0xff&&a[0x1]===0xd8&&a[0x2]===0xff)return'image/jpeg';if(a['length']>=0x6&&a[0x0]===0x47&&a[0x1]===0x49&&a[0x2]===0x46)return'image/gif';if(a['length']>=0xc&&a[0x0]===0x52&&a[0x1]===0x49&&a[0x2]===0x46&&a[0x3]===0x46&&a[0x8]===0x57&&a[0x9]===0x45&&a[0xa]===0x42&&a[0xb]===0x50)return'image/webp';return null;}function uint8ArrayToBase64(a){let b='';const c=a['length'];for(let d=0x0;d<c;d++)b+=String['fromCharCode'](a[d]);return btoa(b);}function base64ToUint8Array(a){const b=atob(a),c=b['length'],d=new Uint8Array(c);for(let e=0x0;e<c;e++)d[e]=b['charCodeAt'](e);return d;}function canonicalizeJson(a){if(a===null||typeof a!=='object')return JSON['stringify'](a);if(Array['isArray'](a))return'['+a['map'](canonicalizeJson)['join'](',')+']';const b=a;return'{'+Object['keys'](b)['sort']()['map'](c=>'\x22'+c+'\x22:'+canonicalizeJson(b[c]))['join'](',')+'}';}function computeHash(a){return bytesToHex(sha256(new TextEncoder()['encode'](a)));}function generateId(a){return a+'-'+Date['now']()['toString'](0x24)+'-'+Math['random']()['toString'](0x24)['substring'](0x2,0x8);}function getExtensionFromMimeType(a){return{'image/png':'png','image/jpeg':'jpg','image/gif':'gif','image/webp':'webp'}[a]||'bin';}var ResourceLoader=class{constructor(a){this['maxSize']=a;}async['load'](a){if(!a||a['trim']()==='')throw new WipError('WIP\x20file\x20path\x20cannot\x20be\x20empty');if(a['startsWith']('data:'))return this['loadFromDataUrl'](a);if(a['startsWith']('http://')||a['startsWith']('https://'))return this['loadFromNetwork'](a);return this['loadFromFile'](a);}['loadFromDataUrl'](a){const b=a['match'](/^data:image\/(\w+);base64,(.+)$/);if(!b)throw new WipValidationError('Invalid\x20data\x20URL\x20format:\x20'+a['substring'](0x0,0x32)+'...');const c=b[0x2];try{return base64ToUint8Array(c);}catch(d){throw new WipError('Failed\x20to\x20decode\x20data\x20URL:\x20'+d);}}async['loadFromNetwork'](a){return new Promise((b,c)=>{const d=setTimeout(()=>{c(new WipError('Network\x20timeout\x20while\x20fetching:\x20'+a));},0x7530),e=a['startsWith']('https:'),f=e?a86c:a86d,g={'headers':{'Accept':'application/json,*/*'}};if(e)g['rejectUnauthorized']=![];f['get'](a,g,h=>{clearTimeout(d);if(h['statusCode']!==0xc8){c(new WipError('Failed\x20to\x20fetch:\x20'+h['statusCode']+'\x20'+h['statusMessage']));return;}const i=h['headers']['content-length'];if(i&&parseInt(i)>this['maxSize']){c(new WipSizeError('Resource\x20from\x20'+a+'\x20size\x20('+i+'\x20bytes)\x20exceeds\x20limit\x20('+this['maxSize']+'\x20bytes)'));return;}const j=[];h['on']('data',k=>{j['push'](k);}),h['on']('end',()=>{const k=Buffer['concat'](j);if(k['length']>this['maxSize']){c(new WipSizeError('Resource\x20from\x20'+a+'\x20size\x20('+k['length']+'\x20bytes)\x20exceeds\x20limit\x20('+this['maxSize']+'\x20bytes)'));return;}b(new Uint8Array(k));}),h['on']('error',k=>{c(new WipError('Network\x20error:\x20'+k['message']));});})['on']('error',h=>{clearTimeout(d),c(new WipError('Network\x20error:\x20'+h['message']));});});}['loadFromFile'](a){const b=a86a['resolve'](a);if(!a86b['existsSync'](b))throw new WipError('File\x20not\x20found:\x20'+b);const c=a86b['statSync'](b);if(!c['isFile']())throw new WipError('Path\x20is\x20not\x20a\x20file:\x20'+b);if(c['size']>this['maxSize'])throw new WipSizeError('File\x20'+b+'\x20size\x20('+c['size']+'\x20bytes)\x20exceeds\x20limit\x20('+this['maxSize']+'\x20bytes)');const d=a86b['readFileSync'](b);return new Uint8Array(d);}},WIP=class{constructor(a={}){this['limits']={...DEFAULT_LIMITS,...a},this['resourceLoader']=new ResourceLoader(this['limits']['maxImageSize']);}async['create'](a){if(a['text']['length']>this['limits']['maxTextLength'])throw new WipSizeError('Text\x20length\x20('+a['text']['length']+')\x20exceeds\x20limit\x20('+this['limits']['maxTextLength']+')');const b=[];if(a['images']&&a['images']['length']>0x0){if(a['images']['length']>this['limits']['maxImageCount'])throw new WipSizeError('Image\x20count\x20('+a['images']['length']+')\x20exceeds\x20limit\x20('+this['limits']['maxImageCount']+')');for(let h=0x0;h<a['images']['length'];h++){const j=await this['processImage'](a['images'][h],h);b['push'](j);}}const c={'content':{'text':a['text'],'format':a['textFormat']||'plain'},'media':b},d=computeHash(canonicalizeJson({'wip':WIP_SCHEMA_URL,'payload':c})),e={'type':'wip','version':WIP_VERSION,'created':new Date()['toISOString'](),'hash':d,'algorithm':'sha256'};if(a['signKeyPair']){const {signature:k,...l}=e,m=computeHash(canonicalizeJson(l));e['signature']={'value':await this['sign'](m,a['signKeyPair']['privateKey'],a['signAlgorithm']||'Falcon512'),'publicKey':a['signKeyPair']['publicKey'],'algorithm':a['signAlgorithm']||'Falcon512'};}const f={'wip':WIP_SCHEMA_URL,'payload':c,'meta':e},g=JSON['stringify'](f);if(g['length']>this['limits']['maxTotalSize'])throw new WipSizeError('Total\x20WIP\x20file\x20size\x20('+g['length']+'\x20bytes)\x20exceeds\x20limit\x20('+this['limits']['maxTotalSize']+'\x20bytes)');return f;}async['processImage'](a,b){const c=await this['resourceLoader']['load'](a['source']),d=detectMimeType(c);if(!d)throw new WipValidationError('Unsupported\x20image\x20format:\x20'+a['source']);let e=a['filename'];if(!e){if(a['source']['startsWith']('http')){const f=new URL(a['source'])['pathname'];e=f['substring'](f['lastIndexOf']('/')+0x1)||'image-'+b;}else e=a['source']['substring'](a['source']['lastIndexOf']('/')+0x1)||'image-'+b;}return{'id':a['id']||generateId('img'),'type':d,'data':uint8ArrayToBase64(c),'filename':e};}async['sign'](a,b,c){if(c!=='Falcon512')throw new WipError('Unsupported\x20signature\x20algorithm:\x20'+c);const {Falcon512Keypair:d}=await import('../../keypairs/falcon512/index.mjs');return uint8ArrayToBase64(await d['fromSecretKey'](b)['sign'](new TextEncoder()['encode'](a)));}async['verify'](a){try{if(!a['wip']||!a['payload']||!a['meta'])return{'valid':![],'error':'Invalid\x20WIP\x20file\x20structure'};if(a['meta']['type']!=='wip')return{'valid':![],'error':'Invalid\x20meta.type:\x20'+a['meta']['type']};if(computeHash(canonicalizeJson({'wip':a['wip'],'payload':a['payload']}))!==a['meta']['hash'])return{'valid':![],'error':'Hash\x20mismatch\x20-\x20content\x20has\x20been\x20tampered'};const b=[];if(a['meta']['signature']){const {signature:c,...d}=a['meta'],e=computeHash(canonicalizeJson(d)),f=Array['isArray'](a['meta']['signature'])?a['meta']['signature']:[a['meta']['signature']];for(const g of f){const h=await this['verifySignature'](e,g['value'],g['publicKey'],g['algorithm']);b['push']({'address':g['address'],'valid':h});if(!h)return{'valid':![],'error':'Invalid\x20signature','signatures':b};}}return{'valid':!![],'signatures':b};}catch(i){return{'valid':![],'error':'Verification\x20error:\x20'+i};}}async['verifySignature'](a,b,c,d){if(d!=='Falcon512')throw new WipError('Unsupported\x20signature\x20algorithm:\x20'+d);try{const {Falcon512PublicKey:e}=await import('../../publickey-S1fGFYJX.mjs')['then'](i=>i['n']);let f;if(c['startsWith']('0x')){const i=Buffer['from'](c['slice'](0x2),'hex');if(i['length']===0x382)f=i['slice'](0x1);else{if(i['length']===0x381)f=i;else f=i;}}else try{const j=Buffer['from'](c,'base64');if(j['length']===0x382)f=j['slice'](0x1);else f=j;}catch{f=Buffer['from'](c,'base64');}const g=new e(f),h=Uint8Array['from'](Buffer['from'](b,'base64'));return await g['verify'](new TextEncoder()['encode'](a),h);}catch(k){return console['error']('Signature\x20verification\x20error:',k),![];}}async['toHtml'](a,b={}){const {title:title='WIP\x20Document',theme:theme='light'}=b,{payload:c,meta:d}=a,e=o=>{return o['replace'](/&/g,'&')['replace'](/</g,'<')['replace'](/>/g,'>')['replace'](/"/g,'"')['replace'](/'/g,''');},f=(o,p)=>{switch(p){case'html':return o;case'markdown':return o['replace'](/\*\*(.+?)\*\*/g,'<strong>$1</strong>')['replace'](/\*(.+?)\*/g,'<em>$1</em>')['replace'](/\n/g,'<br>');default:return e(o)['replace'](/\n/g,'<br>');}},g=theme==='dark'?'#1a1a1a':'#ffffff',h=theme==='dark'?'#e0e0e0':'#333333',i=theme==='dark'?'#444444':'#e0e0e0',j='#4caf50',k='#ff9800',l=await this['verify'](a),m=l['valid']?'<span\x20style=\x22background:\x20'+j+';\x20color:\x20white;\x20padding:\x204px\x208px;\x20border-radius:\x204px;\x20font-size:\x2012px;\x22>✓\x20Verified</span>':'<span\x20style=\x22background:\x20'+k+';\x20color:\x20white;\x20padding:\x204px\x208px;\x20border-radius:\x204px;\x20font-size:\x2012px;\x22>⚠\x20Tampered</span>',n=c['media']['map'](o=>'\x0a\x09\x09\x09\x09<div\x20style=\x22margin:\x2016px\x200;\x20border:\x201px\x20solid\x20'+i+';\x20border-radius:\x208px;\x20overflow:\x20hidden;\x22>\x0a\x09\x09\x09\x09\x09<img\x20src=\x22data:'+o['type']+';base64,'+o['data']+'\x22\x20\x0a\x09\x09\x09\x09\x09\x20\x20\x20\x20\x20style=\x22max-width:\x20100%;\x20height:\x20auto;\x20display:\x20block;\x22\x20\x0a\x09\x09\x09\x09\x09\x20\x20\x20\x20\x20alt=\x22'+e(o['filename']||o['id'])+'\x22\x20/>\x0a\x09\x09\x09\x09\x09'+(o['filename']?'<div\x20style=\x22padding:\x208px;\x20font-size:\x2012px;\x20color:\x20#666;\x20background:\x20'+(theme==='dark'?'#2a2a2a':'#f5f5f5')+';\x20border-top:\x201px\x20solid\x20'+i+';\x22>'+e(o['filename'])+'</div>':'')+'\x0a\x09\x09\x09\x09</div>\x0a\x09\x09\x09')['join']('');return'<!DOCTYPE\x20html>\x0a<html\x20lang=\x22en\x22>\x0a<head>\x0a\x20\x20\x20\x20<meta\x20charset=\x22UTF-8\x22>\x0a\x20\x20\x20\x20<meta\x20name=\x22viewport\x22\x20content=\x22width=device-width,\x20initial-scale=1.0\x22>\x0a\x20\x20\x20\x20<title>'+e(title)+'</title>\x0a</head>\x0a<body\x20style=\x22margin:\x200;\x20padding:\x2020px;\x20font-family:\x20-apple-system,\x20BlinkMacSystemFont,\x20\x27Segoe\x20UI\x27,\x20Roboto,\x20sans-serif;\x20background:\x20'+g+';\x20color:\x20'+h+';\x20line-height:\x201.6;\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22max-width:\x20800px;\x20margin:\x200\x20auto;\x20background:\x20'+(theme==='dark'?'#252525':'#ffffff')+';\x20border-radius:\x2012px;\x20box-shadow:\x200\x202px\x208px\x20rgba(0,0,0,0.1);\x20overflow:\x20hidden;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22padding:\x2020px\x2024px;\x20border-bottom:\x201px\x20solid\x20'+i+';\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:\x20flex;\x20justify-content:\x20space-between;\x20align-items:\x20center;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<h1\x20style=\x22margin:\x200;\x20font-size:\x2020px;\x20font-weight:\x20600;\x22>'+e(title)+'</h1>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:\x2012px;\x20color:\x20#666;\x20margin-top:\x204px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20WIP\x20v'+d['version']+'\x20•\x20'+new Date(d['created'])['toLocaleString']()+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+m+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:\x2011px;\x20color:\x20#999;\x20margin-top:\x2012px;\x20padding:\x208px;\x20background:\x20'+(theme==='dark'?'#2a2a2a':'#f5f5f5')+';\x20border-radius:\x204px;\x20font-style:\x20italic;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Important\x20Note:\x20This\x20page\x20is\x20for\x20document\x20browsing\x20and\x20verification\x20reference\x20only.\x20Please\x20verify\x20the\x20document\x20integrity\x20through\x20the\x20API\x20using\x20the\x20WIP\x20file.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+(l['signatures']&&l['signatures']['length']>0x0?'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22margin-top:\x2012px;\x20padding:\x208px;\x20background:\x20'+(theme==='dark'?'#2a3f2a':'#e8f5e9')+';\x20border-radius:\x204px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:\x2011px;\x20color:\x20'+(theme==='dark'?'#81c784':'#2e7d32')+';\x20margin-bottom:\x204px;\x22>✓\x20Signature\x20Verification\x20('+l['signatures']['length']+'\x20signature'+(l['signatures']['length']>0x1?'s':'')+')</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+l['signatures']['map']((o,p)=>'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:\x2010px;\x20color:\x20'+h+';\x20margin-left:\x208px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+(p+0x1)+'.\x20'+(o['address']?e(o['address']['slice'](0x0,0x14))+'...':'Unknown')+':\x20'+(o['valid']?'<span\x20style=\x22color:\x20#4caf50;\x22>✓\x20Valid</span>':'<span\x20style=\x22color:\x20#f44336;\x22>✗\x20Invalid</span>')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20')['join']('')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20':'')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22padding:\x2024px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:\x2016px;\x20line-height:\x201.8;\x20margin-bottom:\x2024px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+f(c['content']['text'],c['content']['format'])+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+n+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22padding:\x2016px\x2024px;\x20background:\x20'+(theme==='dark'?'#2a2a2a':'#f8f9fa')+';\x20border-top:\x201px\x20solid\x20'+i+';\x20font-size:\x2011px;\x20color:\x20#666;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:\x20flex;\x20justify-content:\x20space-between;\x20align-items:\x20center;\x20flex-wrap:\x20wrap;\x20gap:\x208px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<strong>Hash:</strong>\x20<code\x20style=\x22background:\x20'+(theme==='dark'?'#333':'#e9ecef')+';\x20padding:\x202px\x206px;\x20border-radius:\x203px;\x22>'+e(d['hash'])+'</code>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+(l['valid']?'Content\x20integrity\x20verified':'Verification\x20failed:\x20'+e(l['error']||'Unknown\x20error'))+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</div>\x0a</body>\x0a</html>';}['stringify'](a,b=!![]){return b?JSON['stringify'](a,null,0x2):JSON['stringify'](a);}['parse'](a){try{const b=JSON['parse'](a);if(!b['wip']||!b['payload']||!b['meta'])throw new WipValidationError('Invalid\x20WIP\x20file\x20structure');return b;}catch(c){if(c instanceof WipError)throw c;throw new WipValidationError('Failed\x20to\x20parse\x20WIP\x20file:\x20'+c);}}async['load'](a){const b=await this['resourceLoader']['load'](a),c=new TextDecoder()['decode'](b);return this['parse'](c);}['getHash'](a){const b=a['meta']['hash'];if(b['includes'](':'))return b['split'](':')[0x1];return b;}['extractImages'](a,b){if(!a86b['existsSync'](b))a86b['mkdirSync'](b,{'recursive':!![]});const c=[];for(const d of a['payload']['media']){const e=getExtensionFromMimeType(d['type']),f=d['filename']||d['id']+'.'+e,g=a86a['join'](b,f),h=Buffer['from'](base64ToUint8Array(d['data']));a86b['writeFileSync'](g,h),c['push'](g);}return c;}['save'](a,b,c=!![]){const d=a86a['dirname'](b);if(!a86b['existsSync'](d))a86b['mkdirSync'](d,{'recursive':!![]});a86b['writeFileSync'](b,this['stringify'](a,c),'utf-8');}['getLimits'](){return{...this['limits']};}['setLimits'](a){this['limits']={...this['limits'],...a},this['resourceLoader']=new ResourceLoader(this['limits']['maxImageSize']);}};async function createWip(a,b){return new WIP(b)['create'](a);}async function verifyWip(a,b){if(b!==void 0x0){if(a['meta']['hash']['toLowerCase']()['replace'](/^sha256:/,'')!==b['toLowerCase']()['replace'](/^sha256:/,''))return{'valid':![],'error':'Hash\x20mismatch'};}const c=await new WIP()['verify'](a);return{'valid':c['valid'],'error':c['error']};}async function wipToHtml(a,b){return new WIP()['toHtml'](a,b);}async function loadWip(a,b){return new WIP(b)['load'](a);}async function generate_wip(a,b){const c=new WIP(DEFAULT_LIMITS);let d=await c['create']({'text':a['markdown_text'],'textFormat':'markdown','images':a['images']});if(a['account']){const {Account:e}=await import('./account.mjs'),f=await e['Instance']()['get_address'](a['account']);if(!f)throw new WipValidationError('Account\x20not\x20found:\x20'+a['account']);const {signature:g,...h}=d['meta'],i=computeHash(canonicalizeJson(h)),j=await e['Instance']()['sign'](f,i),k=await e['Instance']()['get'](f);if(!k||!k['pubkey'])throw new WipValidationError('Cannot\x20get\x20public\x20key\x20for\x20account:\x20'+f);let l;if(k['pubkey']['startsWith']('0x')){const o=Buffer['from'](k['pubkey']['slice'](0x2),'hex');if(o['length']===0x382)l=o['slice'](0x1)['toString']('base64');else{if(o['length']===0x381)l=o['toString']('base64');else throw new WipValidationError('Invalid\x20public\x20key\x20length:\x20'+o['length']+',\x20expected\x20897\x20or\x20898\x20bytes');}}else l=k['pubkey'];const m={'value':Buffer['from'](j['slice'](0x2),'hex')['toString']('base64'),'publicKey':l,'algorithm':'Falcon512','address':f};let n;if(d['meta']['signature'])n=Array['isArray'](d['meta']['signature'])?[...d['meta']['signature'],m]:[d['meta']['signature'],m];else n=[m];d={...d,'meta':{...d['meta'],'signature':n}};}return c['save'](d,b,!![]),b;}async function verify_wip(a,b,c){const d=new WIP();let e;try{e=await d['load'](a);}catch(h){return{'valid':![],'error':'Failed\x20to\x20load\x20WIP\x20file:\x20'+h,'hashValid':![],'hasSignature':![]};}if(!e['wip']||!e['payload']||!e['meta'])return{'valid':![],'error':'Invalid\x20WIP\x20file\x20structure','hashValid':![],'hasSignature':![]};if(e['meta']['type']!=='wip')return{'valid':![],'error':'Invalid\x20meta.type:\x20'+e['meta']['type'],'hashValid':![],'hasSignature':!!e['meta']['signature']};if(b!==void 0x0){if(e['meta']['hash']['toLowerCase']()['replace'](/^sha256:/,'')!==b['toLowerCase']()['replace'](/^sha256:/,''))return{'valid':![],'error':'Hash\x20mismatch','hashValid':![],'hasSignature':!!e['meta']['signature']};}if(c&&!e['meta']['signature'])return{'valid':![],'error':'Signature\x20required\x20but\x20WIP\x20file\x20has\x20no\x20signature','hashValid':!![],'hasSignature':![]};if(!(computeHash(canonicalizeJson({'wip':e['wip'],'payload':e['payload']}))===e['meta']['hash']))return{'valid':![],'error':'Hash\x20mismatch\x20-\x20content\x20has\x20been\x20tampered','hashValid':![],'hasSignature':!!e['meta']['signature']};let f;const g=[];if(e['meta']['signature']){const {signature:i,...j}=e['meta'],k=computeHash(canonicalizeJson(j)),l=Array['isArray'](e['meta']['signature'])?e['meta']['signature']:[e['meta']['signature']];let m=!![];for(const n of l){const o=await d['verifySignature'](k,n['value'],n['publicKey'],n['algorithm']);let p;try{const {Falcon512PublicKey:q}=await import('../../publickey-S1fGFYJX.mjs')['then'](r=>r['n']);p=new q(n['publicKey'])['toWowAddress']();}catch{}g['push']({'publicKey':n['publicKey'],'address':p,'valid':o});if(!o)m=![];}f=m;if(!f)return{'valid':![],'error':'Signatures\x20from\x20the\x20following\x20addresses\x20are\x20invalid:\x20'+g['filter'](r=>!r['valid']&&r['address'])['map'](r=>r['address'])['join'](',\x20'),'hashValid':!![],'signatureValid':![],'hasSignature':!![],'signatures':g};}return{'valid':!![],'hashValid':!![],'signatureValid':f,'hasSignature':!!e['meta']['signature'],'signatures':g['length']>0x0?g:void 0x0};}async function sign_wip(a,b,c){const d=new WIP(),e=await d['load'](a);if(!e['wip']||!e['payload']||!e['meta'])throw new WipValidationError('Invalid\x20WIP\x20file\x20structure');if(e['meta']['type']!=='wip')throw new WipValidationError('Invalid\x20meta.type:\x20'+e['meta']['type']);const {Account:f}=await import('./account.mjs'),g=await f['Instance']()['get_address'](b);if(!g)throw new WipValidationError('Account\x20not\x20found:\x20'+b);const {signature:h,...i}=e['meta'],j=computeHash(canonicalizeJson(i)),k=await f['Instance']()['signData'](g,j);let l;const m=k['publicKey'];if(m['startsWith']('0x')){const r=Buffer['from'](m['slice'](0x2),'hex');if(r['length']===0x382)l=r['slice'](0x1)['toString']('base64');else{if(r['length']===0x381)l=r['toString']('base64');else throw new WipValidationError('Invalid\x20public\x20key\x20length:\x20'+r['length']+',\x20expected\x20897\x20or\x20898\x20bytes');}}else l=m;const n={'value':Buffer['from'](k['signature']['slice'](0x2),'hex')['toString']('base64'),'publicKey':l,'algorithm':'Falcon512','address':k['address']};let o;if(e['meta']['signature']){const s=Array['isArray'](e['meta']['signature'])?[...e['meta']['signature']]:[e['meta']['signature']],t=s['findIndex'](u=>u['publicKey']===l);if(t>=0x0)s[t]=n,o=s;else o=[...s,n];}else o=[n];const p={...e,'meta':{...e['meta'],'signature':o}};let q;if(c)q=c;else{const u=a86a['dirname'](a),v=a86a['extname'](a),w=a86a['basename'](a,v);q=a86a['join'](u,'signed_'+w+v);}return d['save'](p,q,!![]),q;}async function wip2html(a,b={}){const c=await import('fs'),d=await import('path'),e=c['statSync'](a);if(e['isFile']()){const f=new WIP(),g=await f['load'](a),h=await f['toHtml'](g,b);if(b['outputPath'])return c['writeFileSync'](b['outputPath'],h),b['outputPath'];const i=d['dirname'](a),j=d['extname'](a),k=d['basename'](a,j),l=d['join'](i,k+'.html');return c['writeFileSync'](l,h),l;}else{if(e['isDirectory']()){const m=c['readdirSync'](a)['filter'](p=>p['endsWith']('.wip'));if(m['length']===0x0)throw new WipValidationError('No\x20.wip\x20files\x20found\x20in\x20directory:\x20'+a);const n=[],o=new WIP();for(const p of m){const q=d['join'](a,p),r=await o['load'](q),s=await o['toHtml'](r,b),t=p['replace']('.wip','.html'),u=b['outputPath']?d['join'](b['outputPath'],t):d['join'](a,t),v=d['dirname'](u);if(!c['existsSync'](v))c['mkdirSync'](v,{'recursive':!![]});c['writeFileSync'](u,s),n['push'](u);}return n;}else throw new WipValidationError('Invalid\x20path:\x20'+a);}}export{DEFAULT_LIMITS,WIP,WIP as default,WipError,WipSizeError,WipValidationError,createWip,generate_wip,loadWip,sign_wip,verifyWip,verify_wip,wip2html,wipToHtml};
|
|
1
|
+
import{sha256}from'@noble/hashes/sha2.js';import{bytesToHex}from'@noble/hashes/utils.js';import*as a84a from'path';import*as a84b from'fs';import*as a84c from'https';import*as a84d from'http';const WIP_SCHEMA_URL='https://github.com/wowok-ai/docs/blob/main/WIP.md',WIP_VERSION='1.0.0',DEFAULT_LIMITS={'maxImageSize':0x2*0x400*0x400,'maxTotalSize':0xa*0x400*0x400,'maxImageCount':0xa,'maxTextLength':0x2710};var WipError=class extends Error{constructor(a){super(a),this['name']='WipError';}},WipValidationError=class extends WipError{constructor(a){super(a),this['name']='WipValidationError';}},WipSizeError=class extends WipError{constructor(a){super(a),this['name']='WipSizeError';}};function detectMimeType(a){if(a['length']>=0x4&&a[0x0]===0x89&&a[0x1]===0x50&&a[0x2]===0x4e&&a[0x3]===0x47)return'image/png';if(a['length']>=0x3&&a[0x0]===0xff&&a[0x1]===0xd8&&a[0x2]===0xff)return'image/jpeg';if(a['length']>=0x6&&a[0x0]===0x47&&a[0x1]===0x49&&a[0x2]===0x46)return'image/gif';if(a['length']>=0xc&&a[0x0]===0x52&&a[0x1]===0x49&&a[0x2]===0x46&&a[0x3]===0x46&&a[0x8]===0x57&&a[0x9]===0x45&&a[0xa]===0x42&&a[0xb]===0x50)return'image/webp';return null;}function uint8ArrayToBase64(a){let b='';const c=a['length'];for(let d=0x0;d<c;d++)b+=String['fromCharCode'](a[d]);return btoa(b);}function base64ToUint8Array(a){const b=atob(a),c=b['length'],d=new Uint8Array(c);for(let e=0x0;e<c;e++)d[e]=b['charCodeAt'](e);return d;}function canonicalizeJson(a){if(a===null||typeof a!=='object')return JSON['stringify'](a);if(Array['isArray'](a))return'['+a['map'](canonicalizeJson)['join'](',')+']';const b=a;return'{'+Object['keys'](b)['sort']()['map'](c=>'\x22'+c+'\x22:'+canonicalizeJson(b[c]))['join'](',')+'}';}function computeHash(a){return bytesToHex(sha256(new TextEncoder()['encode'](a)));}function generateId(a){return a+'-'+Date['now']()['toString'](0x24)+'-'+Math['random']()['toString'](0x24)['substring'](0x2,0x8);}function getExtensionFromMimeType(a){return{'image/png':'png','image/jpeg':'jpg','image/gif':'gif','image/webp':'webp'}[a]||'bin';}var ResourceLoader=class{constructor(a){this['maxSize']=a;}async['load'](a){if(!a||a['trim']()==='')throw new WipError('WIP\x20file\x20path\x20cannot\x20be\x20empty');if(a['startsWith']('data:'))return this['loadFromDataUrl'](a);if(a['startsWith']('http://')||a['startsWith']('https://'))return this['loadFromNetwork'](a);return this['loadFromFile'](a);}['loadFromDataUrl'](a){const b=a['match'](/^data:image\/(\w+);base64,(.+)$/);if(!b)throw new WipValidationError('Invalid\x20data\x20URL\x20format:\x20'+a['substring'](0x0,0x32)+'...');const c=b[0x2];try{return base64ToUint8Array(c);}catch(d){throw new WipError('Failed\x20to\x20decode\x20data\x20URL:\x20'+d);}}async['loadFromNetwork'](a){return new Promise((b,c)=>{const d=setTimeout(()=>{c(new WipError('Network\x20timeout\x20while\x20fetching:\x20'+a));},0x7530),e=a['startsWith']('https:'),f=e?a84c:a84d,g={'headers':{'Accept':'application/json,*/*'}};if(e)g['rejectUnauthorized']=![];f['get'](a,g,h=>{clearTimeout(d);if(h['statusCode']!==0xc8){c(new WipError('Failed\x20to\x20fetch:\x20'+h['statusCode']+'\x20'+h['statusMessage']));return;}const i=h['headers']['content-length'];if(i&&parseInt(i)>this['maxSize']){c(new WipSizeError('Resource\x20from\x20'+a+'\x20size\x20('+i+'\x20bytes)\x20exceeds\x20limit\x20('+this['maxSize']+'\x20bytes)'));return;}const j=[];h['on']('data',k=>{j['push'](k);}),h['on']('end',()=>{const k=Buffer['concat'](j);if(k['length']>this['maxSize']){c(new WipSizeError('Resource\x20from\x20'+a+'\x20size\x20('+k['length']+'\x20bytes)\x20exceeds\x20limit\x20('+this['maxSize']+'\x20bytes)'));return;}b(new Uint8Array(k));}),h['on']('error',k=>{c(new WipError('Network\x20error:\x20'+k['message']));});})['on']('error',h=>{clearTimeout(d),c(new WipError('Network\x20error:\x20'+h['message']));});});}['loadFromFile'](a){const b=a84a['resolve'](a);if(!a84b['existsSync'](b))throw new WipError('File\x20not\x20found:\x20'+b);const c=a84b['statSync'](b);if(!c['isFile']())throw new WipError('Path\x20is\x20not\x20a\x20file:\x20'+b);if(c['size']>this['maxSize'])throw new WipSizeError('File\x20'+b+'\x20size\x20('+c['size']+'\x20bytes)\x20exceeds\x20limit\x20('+this['maxSize']+'\x20bytes)');const d=a84b['readFileSync'](b);return new Uint8Array(d);}},WIP=class{constructor(a={}){this['limits']={...DEFAULT_LIMITS,...a},this['resourceLoader']=new ResourceLoader(this['limits']['maxImageSize']);}async['create'](a){if(a['text']['length']>this['limits']['maxTextLength'])throw new WipSizeError('Text\x20length\x20('+a['text']['length']+')\x20exceeds\x20limit\x20('+this['limits']['maxTextLength']+')');const b=[];if(a['images']&&a['images']['length']>0x0){if(a['images']['length']>this['limits']['maxImageCount'])throw new WipSizeError('Image\x20count\x20('+a['images']['length']+')\x20exceeds\x20limit\x20('+this['limits']['maxImageCount']+')');for(let h=0x0;h<a['images']['length'];h++){const j=await this['processImage'](a['images'][h],h);b['push'](j);}}const c={'content':{'text':a['text'],'format':a['textFormat']||'plain'},'media':b},d=computeHash(canonicalizeJson({'wip':WIP_SCHEMA_URL,'payload':c})),e={'type':'wip','version':WIP_VERSION,'created':new Date()['toISOString'](),'hash':d,'algorithm':'sha256'};if(a['signKeyPair']){const {signature:k,...l}=e,m=computeHash(canonicalizeJson(l));e['signature']={'value':await this['sign'](m,a['signKeyPair']['privateKey'],a['signAlgorithm']||'Falcon512'),'publicKey':a['signKeyPair']['publicKey'],'algorithm':a['signAlgorithm']||'Falcon512'};}const f={'wip':WIP_SCHEMA_URL,'payload':c,'meta':e},g=JSON['stringify'](f);if(g['length']>this['limits']['maxTotalSize'])throw new WipSizeError('Total\x20WIP\x20file\x20size\x20('+g['length']+'\x20bytes)\x20exceeds\x20limit\x20('+this['limits']['maxTotalSize']+'\x20bytes)');return f;}async['processImage'](a,b){const c=await this['resourceLoader']['load'](a['source']),d=detectMimeType(c);if(!d)throw new WipValidationError('Unsupported\x20image\x20format:\x20'+a['source']);let e=a['filename'];if(!e){if(a['source']['startsWith']('http')){const f=new URL(a['source'])['pathname'];e=f['substring'](f['lastIndexOf']('/')+0x1)||'image-'+b;}else e=a['source']['substring'](a['source']['lastIndexOf']('/')+0x1)||'image-'+b;}return{'id':a['id']||generateId('img'),'type':d,'data':uint8ArrayToBase64(c),'filename':e};}async['sign'](a,b,c){if(c!=='Falcon512')throw new WipError('Unsupported\x20signature\x20algorithm:\x20'+c);const {Falcon512Keypair:d}=await import('../../keypairs/falcon512/index.mjs');return uint8ArrayToBase64(await d['fromSecretKey'](b)['sign'](new TextEncoder()['encode'](a)));}async['verify'](a){try{if(!a['wip']||!a['payload']||!a['meta'])return{'valid':![],'error':'Invalid\x20WIP\x20file\x20structure'};if(a['meta']['type']!=='wip')return{'valid':![],'error':'Invalid\x20meta.type:\x20'+a['meta']['type']};if(computeHash(canonicalizeJson({'wip':a['wip'],'payload':a['payload']}))!==a['meta']['hash'])return{'valid':![],'error':'Hash\x20mismatch\x20-\x20content\x20has\x20been\x20tampered'};const b=[];if(a['meta']['signature']){const {signature:c,...d}=a['meta'],e=computeHash(canonicalizeJson(d)),f=Array['isArray'](a['meta']['signature'])?a['meta']['signature']:[a['meta']['signature']];for(const g of f){const h=await this['verifySignature'](e,g['value'],g['publicKey'],g['algorithm']);b['push']({'address':g['address'],'valid':h});if(!h)return{'valid':![],'error':'Invalid\x20signature','signatures':b};}}return{'valid':!![],'signatures':b};}catch(i){return{'valid':![],'error':'Verification\x20error:\x20'+i};}}async['verifySignature'](a,b,c,d){if(d!=='Falcon512')throw new WipError('Unsupported\x20signature\x20algorithm:\x20'+d);try{const {Falcon512PublicKey:e}=await import('../../publickey-Bkjn-YAu.mjs')['then'](i=>i['n']);let f;if(c['startsWith']('0x')){const i=Buffer['from'](c['slice'](0x2),'hex');if(i['length']===0x382)f=i['slice'](0x1);else{if(i['length']===0x381)f=i;else f=i;}}else try{const j=Buffer['from'](c,'base64');if(j['length']===0x382)f=j['slice'](0x1);else f=j;}catch{f=Buffer['from'](c,'base64');}const g=new e(f),h=Uint8Array['from'](Buffer['from'](b,'base64'));return await g['verify'](new TextEncoder()['encode'](a),h);}catch(k){return console['error']('Signature\x20verification\x20error:',k),![];}}async['toHtml'](a,b={}){const {title:title='WIP\x20Document',theme:theme='light'}=b,{payload:c,meta:d}=a,e=o=>{return o['replace'](/&/g,'&')['replace'](/</g,'<')['replace'](/>/g,'>')['replace'](/"/g,'"')['replace'](/'/g,''');},f=(o,p)=>{switch(p){case'html':return o;case'markdown':return o['replace'](/\*\*(.+?)\*\*/g,'<strong>$1</strong>')['replace'](/\*(.+?)\*/g,'<em>$1</em>')['replace'](/\n/g,'<br>');default:return e(o)['replace'](/\n/g,'<br>');}},g=theme==='dark'?'#1a1a1a':'#ffffff',h=theme==='dark'?'#e0e0e0':'#333333',i=theme==='dark'?'#444444':'#e0e0e0',j='#4caf50',k='#ff9800',l=await this['verify'](a),m=l['valid']?'<span\x20style=\x22background:\x20'+j+';\x20color:\x20white;\x20padding:\x204px\x208px;\x20border-radius:\x204px;\x20font-size:\x2012px;\x22>✓\x20Verified</span>':'<span\x20style=\x22background:\x20'+k+';\x20color:\x20white;\x20padding:\x204px\x208px;\x20border-radius:\x204px;\x20font-size:\x2012px;\x22>⚠\x20Tampered</span>',n=c['media']['map'](o=>'\x0a\x09\x09\x09\x09<div\x20style=\x22margin:\x2016px\x200;\x20border:\x201px\x20solid\x20'+i+';\x20border-radius:\x208px;\x20overflow:\x20hidden;\x22>\x0a\x09\x09\x09\x09\x09<img\x20src=\x22data:'+o['type']+';base64,'+o['data']+'\x22\x20\x0a\x09\x09\x09\x09\x09\x20\x20\x20\x20\x20style=\x22max-width:\x20100%;\x20height:\x20auto;\x20display:\x20block;\x22\x20\x0a\x09\x09\x09\x09\x09\x20\x20\x20\x20\x20alt=\x22'+e(o['filename']||o['id'])+'\x22\x20/>\x0a\x09\x09\x09\x09\x09'+(o['filename']?'<div\x20style=\x22padding:\x208px;\x20font-size:\x2012px;\x20color:\x20#666;\x20background:\x20'+(theme==='dark'?'#2a2a2a':'#f5f5f5')+';\x20border-top:\x201px\x20solid\x20'+i+';\x22>'+e(o['filename'])+'</div>':'')+'\x0a\x09\x09\x09\x09</div>\x0a\x09\x09\x09')['join']('');return'<!DOCTYPE\x20html>\x0a<html\x20lang=\x22en\x22>\x0a<head>\x0a\x20\x20\x20\x20<meta\x20charset=\x22UTF-8\x22>\x0a\x20\x20\x20\x20<meta\x20name=\x22viewport\x22\x20content=\x22width=device-width,\x20initial-scale=1.0\x22>\x0a\x20\x20\x20\x20<title>'+e(title)+'</title>\x0a</head>\x0a<body\x20style=\x22margin:\x200;\x20padding:\x2020px;\x20font-family:\x20-apple-system,\x20BlinkMacSystemFont,\x20\x27Segoe\x20UI\x27,\x20Roboto,\x20sans-serif;\x20background:\x20'+g+';\x20color:\x20'+h+';\x20line-height:\x201.6;\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22max-width:\x20800px;\x20margin:\x200\x20auto;\x20background:\x20'+(theme==='dark'?'#252525':'#ffffff')+';\x20border-radius:\x2012px;\x20box-shadow:\x200\x202px\x208px\x20rgba(0,0,0,0.1);\x20overflow:\x20hidden;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22padding:\x2020px\x2024px;\x20border-bottom:\x201px\x20solid\x20'+i+';\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:\x20flex;\x20justify-content:\x20space-between;\x20align-items:\x20center;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<h1\x20style=\x22margin:\x200;\x20font-size:\x2020px;\x20font-weight:\x20600;\x22>'+e(title)+'</h1>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:\x2012px;\x20color:\x20#666;\x20margin-top:\x204px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20WIP\x20v'+d['version']+'\x20•\x20'+new Date(d['created'])['toLocaleString']()+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+m+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:\x2011px;\x20color:\x20#999;\x20margin-top:\x2012px;\x20padding:\x208px;\x20background:\x20'+(theme==='dark'?'#2a2a2a':'#f5f5f5')+';\x20border-radius:\x204px;\x20font-style:\x20italic;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Important\x20Note:\x20This\x20page\x20is\x20for\x20document\x20browsing\x20and\x20verification\x20reference\x20only.\x20Please\x20verify\x20the\x20document\x20integrity\x20through\x20the\x20API\x20using\x20the\x20WIP\x20file.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+(l['signatures']&&l['signatures']['length']>0x0?'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22margin-top:\x2012px;\x20padding:\x208px;\x20background:\x20'+(theme==='dark'?'#2a3f2a':'#e8f5e9')+';\x20border-radius:\x204px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:\x2011px;\x20color:\x20'+(theme==='dark'?'#81c784':'#2e7d32')+';\x20margin-bottom:\x204px;\x22>✓\x20Signature\x20Verification\x20('+l['signatures']['length']+'\x20signature'+(l['signatures']['length']>0x1?'s':'')+')</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+l['signatures']['map']((o,p)=>'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:\x2010px;\x20color:\x20'+h+';\x20margin-left:\x208px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+(p+0x1)+'.\x20'+(o['address']?e(o['address']['slice'](0x0,0x14))+'...':'Unknown')+':\x20'+(o['valid']?'<span\x20style=\x22color:\x20#4caf50;\x22>✓\x20Valid</span>':'<span\x20style=\x22color:\x20#f44336;\x22>✗\x20Invalid</span>')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20')['join']('')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20':'')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22padding:\x2024px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:\x2016px;\x20line-height:\x201.8;\x20margin-bottom:\x2024px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+f(c['content']['text'],c['content']['format'])+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+n+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22padding:\x2016px\x2024px;\x20background:\x20'+(theme==='dark'?'#2a2a2a':'#f8f9fa')+';\x20border-top:\x201px\x20solid\x20'+i+';\x20font-size:\x2011px;\x20color:\x20#666;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:\x20flex;\x20justify-content:\x20space-between;\x20align-items:\x20center;\x20flex-wrap:\x20wrap;\x20gap:\x208px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<strong>Hash:</strong>\x20<code\x20style=\x22background:\x20'+(theme==='dark'?'#333':'#e9ecef')+';\x20padding:\x202px\x206px;\x20border-radius:\x203px;\x22>'+e(d['hash'])+'</code>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+(l['valid']?'Content\x20integrity\x20verified':'Verification\x20failed:\x20'+e(l['error']||'Unknown\x20error'))+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</div>\x0a</body>\x0a</html>';}['stringify'](a,b=!![]){return b?JSON['stringify'](a,null,0x2):JSON['stringify'](a);}['parse'](a){try{const b=JSON['parse'](a);if(!b['wip']||!b['payload']||!b['meta'])throw new WipValidationError('Invalid\x20WIP\x20file\x20structure');return b;}catch(c){if(c instanceof WipError)throw c;throw new WipValidationError('Failed\x20to\x20parse\x20WIP\x20file:\x20'+c);}}async['load'](a){const b=await this['resourceLoader']['load'](a),c=new TextDecoder()['decode'](b);return this['parse'](c);}['getHash'](a){const b=a['meta']['hash'];if(b['includes'](':'))return b['split'](':')[0x1];return b;}['extractImages'](a,b){if(!a84b['existsSync'](b))a84b['mkdirSync'](b,{'recursive':!![]});const c=[];for(const d of a['payload']['media']){const e=getExtensionFromMimeType(d['type']),f=d['filename']||d['id']+'.'+e,g=a84a['join'](b,f),h=Buffer['from'](base64ToUint8Array(d['data']));a84b['writeFileSync'](g,h),c['push'](g);}return c;}['save'](a,b,c=!![]){const d=a84a['dirname'](b);if(!a84b['existsSync'](d))a84b['mkdirSync'](d,{'recursive':!![]});a84b['writeFileSync'](b,this['stringify'](a,c),'utf-8');}['getLimits'](){return{...this['limits']};}['setLimits'](a){this['limits']={...this['limits'],...a},this['resourceLoader']=new ResourceLoader(this['limits']['maxImageSize']);}};async function createWip(a,b){return new WIP(b)['create'](a);}async function verifyWip(a,b){if(b!==void 0x0){if(a['meta']['hash']['toLowerCase']()['replace'](/^sha256:/,'')!==b['toLowerCase']()['replace'](/^sha256:/,''))return{'valid':![],'error':'Hash\x20mismatch'};}const c=await new WIP()['verify'](a);return{'valid':c['valid'],'error':c['error']};}async function wipToHtml(a,b){return new WIP()['toHtml'](a,b);}async function loadWip(a,b){return new WIP(b)['load'](a);}async function generate_wip(a,b){const c=new WIP(DEFAULT_LIMITS);let d=await c['create']({'text':a['markdown_text'],'textFormat':'markdown','images':a['images']});if(a['account']){const {Account:e}=await import('./account.mjs'),f=await e['Instance']()['get_address'](a['account']);if(!f)throw new WipValidationError('Account\x20not\x20found:\x20'+a['account']);const {signature:g,...h}=d['meta'],i=computeHash(canonicalizeJson(h)),j=await e['Instance']()['sign'](f,i),k=await e['Instance']()['get'](f);if(!k||!k['pubkey'])throw new WipValidationError('Cannot\x20get\x20public\x20key\x20for\x20account:\x20'+f);let l;if(k['pubkey']['startsWith']('0x')){const o=Buffer['from'](k['pubkey']['slice'](0x2),'hex');if(o['length']===0x382)l=o['slice'](0x1)['toString']('base64');else{if(o['length']===0x381)l=o['toString']('base64');else throw new WipValidationError('Invalid\x20public\x20key\x20length:\x20'+o['length']+',\x20expected\x20897\x20or\x20898\x20bytes');}}else l=k['pubkey'];const m={'value':Buffer['from'](j['slice'](0x2),'hex')['toString']('base64'),'publicKey':l,'algorithm':'Falcon512','address':f};let n;if(d['meta']['signature'])n=Array['isArray'](d['meta']['signature'])?[...d['meta']['signature'],m]:[d['meta']['signature'],m];else n=[m];d={...d,'meta':{...d['meta'],'signature':n}};}return c['save'](d,b,!![]),b;}async function verify_wip(a,b,c){const d=new WIP();let e;try{e=await d['load'](a);}catch(h){return{'valid':![],'error':'Failed\x20to\x20load\x20WIP\x20file:\x20'+h,'hashValid':![],'hasSignature':![]};}if(!e['wip']||!e['payload']||!e['meta'])return{'valid':![],'error':'Invalid\x20WIP\x20file\x20structure','hashValid':![],'hasSignature':![]};if(e['meta']['type']!=='wip')return{'valid':![],'error':'Invalid\x20meta.type:\x20'+e['meta']['type'],'hashValid':![],'hasSignature':!!e['meta']['signature']};if(b!==void 0x0){if(e['meta']['hash']['toLowerCase']()['replace'](/^sha256:/,'')!==b['toLowerCase']()['replace'](/^sha256:/,''))return{'valid':![],'error':'Hash\x20mismatch','hashValid':![],'hasSignature':!!e['meta']['signature']};}if(c&&!e['meta']['signature'])return{'valid':![],'error':'Signature\x20required\x20but\x20WIP\x20file\x20has\x20no\x20signature','hashValid':!![],'hasSignature':![]};if(!(computeHash(canonicalizeJson({'wip':e['wip'],'payload':e['payload']}))===e['meta']['hash']))return{'valid':![],'error':'Hash\x20mismatch\x20-\x20content\x20has\x20been\x20tampered','hashValid':![],'hasSignature':!!e['meta']['signature']};let f;const g=[];if(e['meta']['signature']){const {signature:i,...j}=e['meta'],k=computeHash(canonicalizeJson(j)),l=Array['isArray'](e['meta']['signature'])?e['meta']['signature']:[e['meta']['signature']];let m=!![];for(const n of l){const o=await d['verifySignature'](k,n['value'],n['publicKey'],n['algorithm']);let p;try{const {Falcon512PublicKey:q}=await import('../../publickey-Bkjn-YAu.mjs')['then'](r=>r['n']);p=new q(n['publicKey'])['toWowAddress']();}catch{}g['push']({'publicKey':n['publicKey'],'address':p,'valid':o});if(!o)m=![];}f=m;if(!f)return{'valid':![],'error':'Signatures\x20from\x20the\x20following\x20addresses\x20are\x20invalid:\x20'+g['filter'](r=>!r['valid']&&r['address'])['map'](r=>r['address'])['join'](',\x20'),'hashValid':!![],'signatureValid':![],'hasSignature':!![],'signatures':g};}return{'valid':!![],'hashValid':!![],'signatureValid':f,'hasSignature':!!e['meta']['signature'],'signatures':g['length']>0x0?g:void 0x0};}async function sign_wip(a,b,c){const d=new WIP(),e=await d['load'](a);if(!e['wip']||!e['payload']||!e['meta'])throw new WipValidationError('Invalid\x20WIP\x20file\x20structure');if(e['meta']['type']!=='wip')throw new WipValidationError('Invalid\x20meta.type:\x20'+e['meta']['type']);const {Account:f}=await import('./account.mjs'),g=await f['Instance']()['get_address'](b);if(!g)throw new WipValidationError('Account\x20not\x20found:\x20'+b);const {signature:h,...i}=e['meta'],j=computeHash(canonicalizeJson(i)),k=await f['Instance']()['signData'](g,j);let l;const m=k['publicKey'];if(m['startsWith']('0x')){const r=Buffer['from'](m['slice'](0x2),'hex');if(r['length']===0x382)l=r['slice'](0x1)['toString']('base64');else{if(r['length']===0x381)l=r['toString']('base64');else throw new WipValidationError('Invalid\x20public\x20key\x20length:\x20'+r['length']+',\x20expected\x20897\x20or\x20898\x20bytes');}}else l=m;const n={'value':Buffer['from'](k['signature']['slice'](0x2),'hex')['toString']('base64'),'publicKey':l,'algorithm':'Falcon512','address':k['address']};let o;if(e['meta']['signature']){const s=Array['isArray'](e['meta']['signature'])?[...e['meta']['signature']]:[e['meta']['signature']],t=s['findIndex'](u=>u['publicKey']===l);if(t>=0x0)s[t]=n,o=s;else o=[...s,n];}else o=[n];const p={...e,'meta':{...e['meta'],'signature':o}};let q;if(c)q=c;else{const u=a84a['dirname'](a),v=a84a['extname'](a),w=a84a['basename'](a,v);q=a84a['join'](u,'signed_'+w+v);}return d['save'](p,q,!![]),q;}async function wip2html(a,b={}){const c=await import('fs'),d=await import('path'),e=c['statSync'](a);if(e['isFile']()){const f=new WIP(),g=await f['load'](a),h=await f['toHtml'](g,b);if(b['outputPath'])return c['writeFileSync'](b['outputPath'],h),b['outputPath'];const i=d['dirname'](a),j=d['extname'](a),k=d['basename'](a,j),l=d['join'](i,k+'.html');return c['writeFileSync'](l,h),l;}else{if(e['isDirectory']()){const m=c['readdirSync'](a)['filter'](p=>p['endsWith']('.wip'));if(m['length']===0x0)throw new WipValidationError('No\x20.wip\x20files\x20found\x20in\x20directory:\x20'+a);const n=[],o=new WIP();for(const p of m){const q=d['join'](a,p),r=await o['load'](q),s=await o['toHtml'](r,b),t=p['replace']('.wip','.html'),u=b['outputPath']?d['join'](b['outputPath'],t):d['join'](a,t),v=d['dirname'](u);if(!c['existsSync'](v))c['mkdirSync'](v,{'recursive':!![]});c['writeFileSync'](u,s),n['push'](u);}return n;}else throw new WipValidationError('Invalid\x20path:\x20'+a);}}export{DEFAULT_LIMITS,WIP,WIP as default,WipError,WipSizeError,WipValidationError,createWip,generate_wip,loadWip,sign_wip,verifyWip,verify_wip,wip2html,wipToHtml};
|