@wowok/wowok 3.0.4 → 3.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/dist/esm/Transaction-CrzrFqPW.mjs +1 -0
  2. package/dist/esm/arb-CNTnpKU4.mjs +1 -0
  3. package/dist/esm/bcs/index.d.mts +1 -1
  4. package/dist/esm/{cache-C5vEkZbd.d.mts → cache-sUKNe0-P.d.mts} +1 -0
  5. package/dist/esm/call-Zj4BGD5O.mjs +1 -0
  6. package/dist/esm/client/index.d.mts +2 -2
  7. package/dist/esm/client/index.mjs +1 -1
  8. package/dist/esm/client-HlvevC--.mjs +1 -0
  9. package/dist/esm/common-DhtZTgkX.mjs +1 -0
  10. package/dist/esm/{config-Dwoyt1sO.d.mts → config-AuT9_n2K.d.mts} +10 -9
  11. package/dist/esm/constants-BGKNJZYa.mjs +1 -0
  12. package/dist/esm/cryptography/index.d.mts +1 -1
  13. package/dist/esm/cryptography/index.mjs +1 -1
  14. package/dist/esm/ed25519-Cjw5WOqY.mjs +1 -1
  15. package/dist/esm/exception-o3XVk35a.mjs +1 -0
  16. package/dist/esm/falcon512-CnEZ-g-L.mjs +1 -1
  17. package/dist/esm/faucet/index.mjs +1 -1
  18. package/dist/esm/fund-approval-B0Y1YRF5.mjs +1 -0
  19. package/dist/esm/graphql/index.d.mts +1 -1
  20. package/dist/esm/graphql/index.mjs +1 -1
  21. package/dist/esm/graphql-Dm6C2KN9.mjs +1 -0
  22. package/dist/esm/grpc/index.d.mts +1 -1
  23. package/dist/esm/grpc/index.mjs +1 -1
  24. package/dist/esm/grpc-AmhWNnDx.mjs +1 -0
  25. package/dist/esm/{index-Bss9JH4A.d.mts → index-5DmaIrpk.d.mts} +2271 -2007
  26. package/dist/esm/{index-o_aMVwsK.d.mts → index-B-cxGU73.d.mts} +6 -6
  27. package/dist/esm/{index-B7GX5gzh.d.mts → index-Bs4A3nTL.d.mts} +2 -1
  28. package/dist/esm/index.d.mts +6 -6
  29. package/dist/esm/index.mjs +1 -1
  30. package/dist/esm/jsonRpc/index.d.mts +1 -1
  31. package/dist/esm/jsonRpc/index.mjs +1 -1
  32. package/dist/esm/keypair-IIyGelNr.mjs +1 -1
  33. package/dist/esm/keypairs/ed25519/index.d.mts +1 -1
  34. package/dist/esm/keypairs/ed25519/index.mjs +1 -1
  35. package/dist/esm/keypairs/falcon512/index.d.mts +1 -1
  36. package/dist/esm/keypairs/falcon512/index.mjs +1 -1
  37. package/dist/esm/keypairs/passkey/index.d.mts +1 -1
  38. package/dist/esm/keypairs/passkey/index.mjs +1 -1
  39. package/dist/esm/keypairs/secp256k1/index.d.mts +1 -1
  40. package/dist/esm/keypairs/secp256k1/index.mjs +1 -1
  41. package/dist/esm/keypairs/secp256r1/index.d.mts +1 -1
  42. package/dist/esm/keypairs/secp256r1/index.mjs +1 -1
  43. package/dist/esm/{local-CC1Zd3Pp.d.mts → local-Cizo_1J5.d.mts} +35 -1
  44. package/dist/esm/messenger-Cq0kGhTg.mjs +1 -0
  45. package/dist/esm/messenger-api-DdKAABD8.mjs +1 -0
  46. package/dist/esm/multisig/index.d.mts +1 -1
  47. package/dist/esm/multisig/index.mjs +1 -1
  48. package/dist/esm/{network-CGWSsrLB.mjs → network-UpRYD8EM.mjs} +1 -1
  49. package/dist/esm/proof-BgXYvVg_.mjs +1 -0
  50. package/dist/esm/received-BumlehnN.mjs +1 -0
  51. package/dist/esm/service-Bf6Sljmf.mjs +1 -0
  52. package/dist/esm/transactions/index.d.mts +1 -1
  53. package/dist/esm/transactions/index.mjs +1 -1
  54. package/dist/esm/{transactions-B0rmtDin.mjs → transactions-HEsbZ5tl.mjs} +1 -1
  55. package/dist/esm/util-DttciwF8.mjs +1 -0
  56. package/dist/esm/util-kGpbSSrV.mjs +1 -0
  57. package/dist/esm/utils/index.d.mts +2 -2
  58. package/dist/esm/utils/index.mjs +1 -1
  59. package/dist/esm/utils-CFfdvJ-L.mjs +1 -0
  60. package/dist/esm/verify/index.d.mts +1 -1
  61. package/dist/esm/verify/index.mjs +1 -1
  62. package/dist/esm/w/call/allocation.d.mts +2 -2
  63. package/dist/esm/w/call/allocation.mjs +1 -1
  64. package/dist/esm/w/call/arbitration.d.mts +1 -1
  65. package/dist/esm/w/call/arbitration.mjs +1 -1
  66. package/dist/esm/w/call/base.d.mts +2 -2
  67. package/dist/esm/w/call/base.mjs +1 -1
  68. package/dist/esm/w/call/demand.d.mts +1 -1
  69. package/dist/esm/w/call/demand.mjs +1 -1
  70. package/dist/esm/w/call/guard.d.mts +1 -1
  71. package/dist/esm/w/call/guard.mjs +1 -1
  72. package/dist/esm/w/call/index.d.mts +2 -2
  73. package/dist/esm/w/call/index.mjs +1 -1
  74. package/dist/esm/w/call/machine.d.mts +1 -1
  75. package/dist/esm/w/call/machine.mjs +1 -1
  76. package/dist/esm/w/call/passport.d.mts +1 -1
  77. package/dist/esm/w/call/passport.mjs +1 -1
  78. package/dist/esm/w/call/payment.d.mts +1 -1
  79. package/dist/esm/w/call/payment.mjs +1 -1
  80. package/dist/esm/w/call/permission.d.mts +1 -1
  81. package/dist/esm/w/call/permission.mjs +1 -1
  82. package/dist/esm/w/call/progress.d.mts +1 -1
  83. package/dist/esm/w/call/progress.mjs +1 -1
  84. package/dist/esm/w/call/repository.d.mts +1 -1
  85. package/dist/esm/w/call/repository.mjs +1 -1
  86. package/dist/esm/w/call/reward.d.mts +1 -1
  87. package/dist/esm/w/call/reward.mjs +1 -1
  88. package/dist/esm/w/call/service.d.mts +1 -1
  89. package/dist/esm/w/call/service.mjs +1 -1
  90. package/dist/esm/w/call/treasury.d.mts +1 -1
  91. package/dist/esm/w/call/treasury.mjs +1 -1
  92. package/dist/esm/w/common.d.mts +2 -2
  93. package/dist/esm/w/common.mjs +1 -1
  94. package/dist/esm/w/index.d.mts +4 -4
  95. package/dist/esm/w/index.mjs +1 -1
  96. package/dist/esm/w/local/account.d.mts +1 -1
  97. package/dist/esm/w/local/account.mjs +1 -1
  98. package/dist/esm/w/local/cache.d.mts +1 -1
  99. package/dist/esm/w/local/cache.mjs +1 -1
  100. package/dist/esm/w/local/config.d.mts +1 -1
  101. package/dist/esm/w/local/config.mjs +1 -1
  102. package/dist/esm/w/local/evm/networks.mjs +1 -1
  103. package/dist/esm/w/local/evm-account.mjs +1 -1
  104. package/dist/esm/w/local/fund-approval.mjs +1 -1
  105. package/dist/esm/w/local/index.d.mts +4 -4
  106. package/dist/esm/w/local/index.mjs +1 -1
  107. package/dist/esm/w/local/local.d.mts +2 -2
  108. package/dist/esm/w/local/local.mjs +1 -1
  109. package/dist/esm/w/local/secure-storage.mjs +1 -1
  110. package/dist/esm/w/local/storage.mjs +1 -1
  111. package/dist/esm/w/local/token.d.mts +1 -1
  112. package/dist/esm/w/local/token.mjs +1 -1
  113. package/dist/esm/w/local/util.mjs +1 -1
  114. package/dist/esm/w/local/wip.mjs +1 -1
  115. package/dist/esm/w/messenger/index.d.mts +2 -2
  116. package/dist/esm/w/messenger/index.mjs +1 -1
  117. package/dist/esm/w/messenger/messenger-api.d.mts +2 -2
  118. package/dist/esm/w/messenger/messenger-api.mjs +1 -1
  119. package/dist/esm/w/messenger/messenger.d.mts +1 -1
  120. package/dist/esm/w/messenger/messenger.mjs +1 -1
  121. package/dist/esm/w/messenger/pq/crypto.mjs +1 -1
  122. package/dist/esm/w/messenger/reply.d.mts +1 -1
  123. package/dist/esm/w/messenger/storage.d.mts +14 -1
  124. package/dist/esm/w/messenger/storage.mjs +1 -1
  125. package/dist/esm/w/messenger/types.d.mts +1 -1
  126. package/dist/esm/w/messenger/types.mjs +1 -1
  127. package/dist/esm/w/query/index.d.mts +2 -2
  128. package/dist/esm/w/query/index.mjs +1 -1
  129. package/dist/esm/w/query/object.d.mts +2 -2
  130. package/dist/esm/w/query/object.mjs +1 -1
  131. package/dist/esm/{w-C77YSXfT.mjs → w-DcAJ-L_L.mjs} +1 -1
  132. package/package.json +4 -1
  133. package/dist/esm/Transaction-DY5xZw9i.mjs +0 -1
  134. package/dist/esm/arb-CUXq4EWJ.mjs +0 -1
  135. package/dist/esm/call-BQMw_Z9s.mjs +0 -1
  136. package/dist/esm/client-cokX3t3P.mjs +0 -1
  137. package/dist/esm/common-BLQJxJvT.mjs +0 -1
  138. package/dist/esm/exception-CSxqQRN7.mjs +0 -1
  139. package/dist/esm/fund-approval-Dy-heIpQ.mjs +0 -1
  140. package/dist/esm/graphql-Cv2Zjkh8.mjs +0 -1
  141. package/dist/esm/grpc-CUKHF1or.mjs +0 -1
  142. package/dist/esm/messenger-BxoZnri2.mjs +0 -1
  143. package/dist/esm/messenger-api-k2rGNPPD.mjs +0 -1
  144. package/dist/esm/object-VP6MlaCJ.mjs +0 -1
  145. package/dist/esm/proof-D9SjsE8n.mjs +0 -1
  146. package/dist/esm/received-DGwKBzFf.mjs +0 -1
  147. package/dist/esm/service-o4c33u4H.mjs +0 -1
  148. package/dist/esm/util-DUArS_ez.mjs +0 -1
  149. package/dist/esm/utils-DL1Wk3E9.mjs +0 -1
@@ -1 +1 @@
1
- import{c as a83a,d as a83b}from'../../storage-D1bEi2b7.mjs';import{sha256}from'@noble/hashes/sha2.js';import{randomBytes}from'@noble/hashes/utils.js';import{hkdf}from'@noble/hashes/hkdf.js';const ENVELOPE_VERSION=0x1,KEY_METADATA_TABLE='key_metadata',DEFAULT_MASTER_SECRET=new TextEncoder()['encode']('WowokAccountDefaultEncryptionKey_v1_a7f3e9d2c8b10564'),PBKDF2_ITERATIONS=0x927c0,IV_LENGTH=0xc,KEK_INFO=new TextEncoder()['encode']('wowok-account-kek');function bytesToBase64(a){if(typeof Buffer!=='undefined')return Buffer['from'](a)['toString']('base64');const b=Array['from'](a,c=>String['fromCharCode'](c))['join']('');return btoa(b);}function base64ToBytes(a){if(typeof Buffer!=='undefined')return new Uint8Array(Buffer['from'](a,'base64'));return Uint8Array['from'](atob(a),b=>b['charCodeAt'](0x0));}let subtleCache;async function getSubtle(){if(subtleCache)return subtleCache;if(typeof globalThis!=='undefined'&&globalThis['crypto']&&globalThis['crypto']['subtle'])return subtleCache=globalThis['crypto']['subtle'],subtleCache;return subtleCache=(await import('crypto'))['webcrypto']['subtle'],subtleCache;}function concatBytes(c,d){const e=new Uint8Array(c['length']+d['length']);return e['set'](c,0x0),e['set'](d,c['length']),e;}function toArrayBuffer(a){return a['buffer']['slice'](a['byteOffset'],a['byteOffset']+a['byteLength']);}function splitIvTagCt(a){if(a['length']<0x1c)throw new Error('Invalid\x20encrypted\x20blob:\x20too\x20short');return{'iv':a['slice'](0x0,IV_LENGTH),'ct':a['slice'](IV_LENGTH)};}var CryptoVault=class{constructor(a){this['_dbSource']=a,this['_initLock']=new a83b(),this['_writeLock']=new a83b();}get['db'](){return this['_dbSource']??a83a();}['ensureTable'](){this['db']['exec']('\x0a\x09\x09\x09CREATE\x20TABLE\x20IF\x20NOT\x20EXISTS\x20'+KEY_METADATA_TABLE+'\x20(\x0a\x09\x09\x09\x09id\x20INTEGER\x20PRIMARY\x20KEY\x20CHECK\x20(id\x20=\x201),\x0a\x09\x09\x09\x09data\x20TEXT\x20NOT\x20NULL,\x0a\x09\x09\x09\x09updated_at\x20INTEGER\x20DEFAULT\x20(strftime(\x27%s\x27,\x20\x27now\x27))\x0a\x09\x09\x09);\x0a\x09\x09');}['loadMetadata'](){this['ensureTable']();const a=this['db']['prepare']('SELECT\x20data\x20FROM\x20'+KEY_METADATA_TABLE+'\x20WHERE\x20id\x20=\x201')['get']();if(!a)return void 0x0;return JSON['parse'](a['data']);}['saveMetadata'](a){this['ensureTable'](),this['db']['prepare']('\x0a\x09\x09\x09INSERT\x20INTO\x20'+KEY_METADATA_TABLE+'\x20(id,\x20data,\x20updated_at)\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\x09')['run'](JSON['stringify'](a));}get['initialized'](){if(this['_metadata'])return!![];return this['loadMetadata']()!==void 0x0;}async['ensureInitialized'](){if(this['_metadata'])return this['_metadata'];return this['_initLock']['run'](async()=>{if(this['_metadata'])return this['_metadata'];const a=this['loadMetadata']();if(a)return this['_metadata']=a,a;return await this['_initializeDefaultLocked'](),this['_metadata'];});}async['initializeDefault'](){if(this['_metadata'])return;await this['_initLock']['run'](async()=>{if(this['_metadata'])return;await this['_initializeDefaultLocked']();});}async['_initializeDefaultLocked'](){const a=this['loadMetadata']();if(a){this['_metadata']=a;return;}const b=randomBytes(0x10),c=randomBytes(0x20),d=this['deriveDefaultKek'](b),e=await this['wrapDek'](d,c),f={'v':ENVELOPE_VERSION,'mode':'default','kdf':'hkdf-sha256','salt':bytesToBase64(b),'wrappedKey':bytesToBase64(e)};try{this['db']['transaction'](()=>{const g=this['db']['prepare']('SELECT\x20data\x20FROM\x20'+KEY_METADATA_TABLE+'\x20WHERE\x20id\x20=\x201')['get']();if(g){this['_metadata']=JSON['parse'](g['data']);return;}this['db']['prepare']('\x0a\x09\x09\x09\x09\x09INSERT\x20INTO\x20'+KEY_METADATA_TABLE+'\x20(id,\x20data,\x20updated_at)\x0a\x09\x09\x09\x09\x09VALUES\x20(1,\x20?,\x20strftime(\x27%s\x27,\x20\x27now\x27))\x0a\x09\x09\x09\x09')['run'](JSON['stringify'](f)),this['_metadata']=f;})();}catch{const g=this['loadMetadata']();if(g)this['_metadata']=g;}if(!this['_metadata']){const h=this['loadMetadata']();if(h)this['_metadata']=h;}}['deriveDefaultKek'](a){return hkdf(sha256,DEFAULT_MASTER_SECRET,a,KEK_INFO,0x20);}async['derivePasswordKek'](a,b){const c=await getSubtle(),d=await c['importKey']('raw',new TextEncoder()['encode'](a),{'name':'PBKDF2'},![],['deriveBits']),e=await c['deriveBits']({'name':'PBKDF2','salt':toArrayBuffer(b),'iterations':PBKDF2_ITERATIONS,'hash':'SHA-256'},d,0x100);return new Uint8Array(e);}async['wrapDek'](a,b){const c=await getSubtle(),d=crypto['getRandomValues'](new Uint8Array(IV_LENGTH)),e=await c['importKey']('raw',toArrayBuffer(a),{'name':'AES-GCM'},![],['encrypt']);return concatBytes(d,new Uint8Array(await c['encrypt']({'name':'AES-GCM','iv':toArrayBuffer(d)},e,toArrayBuffer(b))));}async['unwrapDek'](a,b){const c=await getSubtle(),{iv:d,ct:e}=splitIvTagCt(b),f=await c['importKey']('raw',toArrayBuffer(a),{'name':'AES-GCM'},![],['decrypt']),g=await c['decrypt']({'name':'AES-GCM','iv':toArrayBuffer(d)},f,toArrayBuffer(e));return new Uint8Array(g);}async['getDek'](a){if(this['_dek'])return this['_dek'];const b=await this['ensureInitialized'](),c=base64ToBytes(b['salt']);let d,e;if(b['mode']==='password'){if(a)d=await this['derivePasswordKek'](a,c),e=base64ToBytes(b['wrappedKey']);else{if(b['mcpWrappedKey'])d=this['deriveDefaultKek'](c),e=base64ToBytes(b['mcpWrappedKey']);else throw new Error('Account\x20access\x20is\x20disabled\x20for\x20MCP.\x20Please\x20open\x20the\x20WoWok\x20Client\x20and\x20enable\x20MCP\x20account\x20access\x20in\x20Settings\x20to\x20proceed.');}}else{if(a)d=await this['derivePasswordKek'](a,c);else d=this['deriveDefaultKek'](c);e=base64ToBytes(b['wrappedKey']);}const f=await this['unwrapDek'](d,e),g=await getSubtle();return this['_dek']=await g['importKey']('raw',toArrayBuffer(f),{'name':'AES-GCM'},![],['encrypt','decrypt']),this['_dek'];}['clearDekCache'](){this['_dek']=void 0x0;}async['encrypt'](a,b){const c=await this['ensureInitialized'](),d=await this['getDek'](b),e=await getSubtle(),f=crypto['getRandomValues'](new Uint8Array(IV_LENGTH)),g=new Uint8Array(await e['encrypt']({'name':'AES-GCM','iv':toArrayBuffer(f)},d,toArrayBuffer(new TextEncoder()['encode'](a))));return{'v':ENVELOPE_VERSION,'mode':c['mode'],'kdf':c['kdf'],'salt':c['salt'],'iterations':c['iterations'],'wrappedKey':c['wrappedKey'],'iv':bytesToBase64(f),'ct':bytesToBase64(g)};}async['decrypt'](a,b){const c=await this['getDek'](b),d=await getSubtle(),e=base64ToBytes(a['iv']),f=base64ToBytes(a['ct']),g=await d['decrypt']({'name':'AES-GCM','iv':toArrayBuffer(e)},c,toArrayBuffer(f));return new TextDecoder()['decode'](g);}['getMode'](){if(this['_metadata'])return this['_metadata']['mode'];return this['loadMetadata']()?.['mode'];}async['setPassword'](a){return this['_writeLock']['run'](async()=>{const b=await this['ensureInitialized'](),c=await this['unwrapDek'](this['deriveDefaultKek'](base64ToBytes(b['salt'])),base64ToBytes(b['wrappedKey'])),d=randomBytes(0x10),e=await this['derivePasswordKek'](a,d),f=await this['wrapDek'](e,c),g=await this['wrapDek'](this['deriveDefaultKek'](d),c),h={'v':ENVELOPE_VERSION,'mode':'password','kdf':'pbkdf2-sha256','salt':bytesToBase64(d),'iterations':PBKDF2_ITERATIONS,'wrappedKey':bytesToBase64(f),'mcpWrappedKey':bytesToBase64(g)};this['saveMetadata'](h),this['_metadata']=h,this['clearDekCache']();});}async['changePassword'](a,b){return this['_writeLock']['run'](async()=>{const c=await this['ensureInitialized']();if(c['mode']!=='password')throw new Error('Account\x20data\x20is\x20not\x20protected\x20by\x20a\x20password.\x20Call\x20setPassword\x20first.');const d=await this['derivePasswordKek'](a,base64ToBytes(c['salt'])),e=await this['unwrapDek'](d,base64ToBytes(c['wrappedKey'])),f=randomBytes(0x10),g=await this['derivePasswordKek'](b,f),h=await this['wrapDek'](g,e),i={'v':ENVELOPE_VERSION,'mode':'password','kdf':'pbkdf2-sha256','salt':bytesToBase64(f),'iterations':PBKDF2_ITERATIONS,'wrappedKey':bytesToBase64(h)};if(c['mcpWrappedKey'])i['mcpWrappedKey']=bytesToBase64(await this['wrapDek'](this['deriveDefaultKek'](f),e));this['saveMetadata'](i),this['_metadata']=i,this['clearDekCache']();});}async['removePassword'](a){return this['_writeLock']['run'](async()=>{const b=await this['ensureInitialized']();if(b['mode']!=='password')throw new Error('Account\x20data\x20is\x20already\x20in\x20default\x20encryption\x20mode.');const c=await this['derivePasswordKek'](a,base64ToBytes(b['salt'])),d=await this['unwrapDek'](c,base64ToBytes(b['wrappedKey'])),e=randomBytes(0x10),f=this['deriveDefaultKek'](e),g=await this['wrapDek'](f,d),h={'v':ENVELOPE_VERSION,'mode':'default','kdf':'hkdf-sha256','salt':bytesToBase64(e),'wrappedKey':bytesToBase64(g)};this['saveMetadata'](h),this['_metadata']=h,this['clearDekCache']();});}['getMcpAccess'](){const a=this['_metadata']??this['loadMetadata']();if(!a)return'allowed';if(a['mode']==='default')return'allowed';return a['mcpWrappedKey']?'allowed':'blocked';}async['setMcpAccess'](a,b){return this['_writeLock']['run'](async()=>{const c=await this['ensureInitialized']();if(c['mode']!=='password')throw new Error('MCP\x20access\x20control\x20is\x20only\x20available\x20when\x20a\x20password\x20is\x20set.');const d=await this['derivePasswordKek'](b,base64ToBytes(c['salt'])),e=await this['unwrapDek'](d,base64ToBytes(c['wrappedKey'])),f={...c};if(a)f['mcpWrappedKey']=bytesToBase64(await this['wrapDek'](this['deriveDefaultKek'](base64ToBytes(c['salt'])),e));else delete f['mcpWrappedKey'];this['saveMetadata'](f),this['_metadata']=f,this['clearDekCache']();});}},SecureAccountStorage=class{constructor(a,b){this['_backend']=a,this['_vault']=b??new CryptoVault();}['setSessionPassword'](a){this['_sessionPassword']=a,this['_vault']['clearDekCache']();}['getSessionPassword'](){return this['_sessionPassword'];}['isSecureEnvelope'](a){return a&&typeof a==='object'&&a['v']===ENVELOPE_VERSION&&typeof a['ct']==='string'&&typeof a['wrappedKey']==='string'&&(a['kdf']==='hkdf-sha256'||a['kdf']==='pbkdf2-sha256');}async['get'](){const a=await this['_backend']['get']();if(!a)return void 0x0;let b;try{b=JSON['parse'](a);}catch{return a;}if(this['isSecureEnvelope'](b))return this['_vault']['decrypt'](b,this['_sessionPassword']);return a;}async['put'](a){const b=await this['_vault']['encrypt'](a,this['_sessionPassword']);await this['_backend']['put'](JSON['stringify'](b));}async['clear'](){await this['_backend']['clear']();}['getMode'](){return this['_vault']['getMode']();}async['setPassword'](a){await this['_vault']['setPassword'](a),this['_sessionPassword']=a;if(await this['_backend']['get']()){const b=await this['get']();if(b!==void 0x0)await this['put'](b);}}async['changePassword'](a,b){await this['_vault']['changePassword'](a,b),this['_sessionPassword']=b;if(await this['_backend']['get']()){const c=await this['get']();if(c!==void 0x0)await this['put'](c);}}async['removePassword'](a){await this['_vault']['removePassword'](a),this['_sessionPassword']=void 0x0;if(await this['_backend']['get']()){const b=await this['get']();if(b!==void 0x0)await this['put'](b);}}['getMcpAccess'](){return this['_vault']['getMcpAccess']();}async['setMcpAccess'](a,b){await this['_vault']['setMcpAccess'](a,b);}};export{CryptoVault,SecureAccountStorage};
1
+ import{c as a84a,d as a84b}from'../../storage-D1bEi2b7.mjs';import{sha256}from'@noble/hashes/sha2.js';import{randomBytes}from'@noble/hashes/utils.js';import{hkdf}from'@noble/hashes/hkdf.js';const ENVELOPE_VERSION=0x1,KEY_METADATA_TABLE='key_metadata',DEFAULT_MASTER_SECRET=new TextEncoder()['encode']('WowokAccountDefaultEncryptionKey_v1_a7f3e9d2c8b10564'),PBKDF2_ITERATIONS=0x927c0,IV_LENGTH=0xc,KEK_INFO=new TextEncoder()['encode']('wowok-account-kek');function bytesToBase64(a){if(typeof Buffer!=='undefined')return Buffer['from'](a)['toString']('base64');const b=Array['from'](a,c=>String['fromCharCode'](c))['join']('');return btoa(b);}function base64ToBytes(a){if(typeof Buffer!=='undefined')return new Uint8Array(Buffer['from'](a,'base64'));return Uint8Array['from'](atob(a),b=>b['charCodeAt'](0x0));}let subtleCache;async function getSubtle(){if(subtleCache)return subtleCache;if(typeof globalThis!=='undefined'&&globalThis['crypto']&&globalThis['crypto']['subtle'])return subtleCache=globalThis['crypto']['subtle'],subtleCache;return subtleCache=(await import('crypto'))['webcrypto']['subtle'],subtleCache;}function concatBytes(c,d){const e=new Uint8Array(c['length']+d['length']);return e['set'](c,0x0),e['set'](d,c['length']),e;}function toArrayBuffer(a){return a['buffer']['slice'](a['byteOffset'],a['byteOffset']+a['byteLength']);}function splitIvTagCt(a){if(a['length']<0x1c)throw new Error('Invalid\x20encrypted\x20blob:\x20too\x20short');return{'iv':a['slice'](0x0,IV_LENGTH),'ct':a['slice'](IV_LENGTH)};}var CryptoVault=class{constructor(a){this['_dbSource']=a,this['_initLock']=new a84b(),this['_writeLock']=new a84b();}get['db'](){return this['_dbSource']??a84a();}['ensureTable'](){this['db']['exec']('\x0a\x09\x09\x09CREATE\x20TABLE\x20IF\x20NOT\x20EXISTS\x20'+KEY_METADATA_TABLE+'\x20(\x0a\x09\x09\x09\x09id\x20INTEGER\x20PRIMARY\x20KEY\x20CHECK\x20(id\x20=\x201),\x0a\x09\x09\x09\x09data\x20TEXT\x20NOT\x20NULL,\x0a\x09\x09\x09\x09updated_at\x20INTEGER\x20DEFAULT\x20(strftime(\x27%s\x27,\x20\x27now\x27))\x0a\x09\x09\x09);\x0a\x09\x09');}['loadMetadata'](){this['ensureTable']();const a=this['db']['prepare']('SELECT\x20data\x20FROM\x20'+KEY_METADATA_TABLE+'\x20WHERE\x20id\x20=\x201')['get']();if(!a)return void 0x0;return JSON['parse'](a['data']);}['saveMetadata'](a){this['ensureTable'](),this['db']['prepare']('\x0a\x09\x09\x09INSERT\x20INTO\x20'+KEY_METADATA_TABLE+'\x20(id,\x20data,\x20updated_at)\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\x09')['run'](JSON['stringify'](a));}get['initialized'](){if(this['_metadata'])return!![];return this['loadMetadata']()!==void 0x0;}async['ensureInitialized'](){if(this['_metadata'])return this['_metadata'];return this['_initLock']['run'](async()=>{if(this['_metadata'])return this['_metadata'];const a=this['loadMetadata']();if(a)return this['_metadata']=a,a;return await this['_initializeDefaultLocked'](),this['_metadata'];});}async['initializeDefault'](){if(this['_metadata'])return;await this['_initLock']['run'](async()=>{if(this['_metadata'])return;await this['_initializeDefaultLocked']();});}async['_initializeDefaultLocked'](){const a=this['loadMetadata']();if(a){this['_metadata']=a;return;}const b=randomBytes(0x10),c=randomBytes(0x20),d=this['deriveDefaultKek'](b),e=await this['wrapDek'](d,c),f={'v':ENVELOPE_VERSION,'mode':'default','kdf':'hkdf-sha256','salt':bytesToBase64(b),'wrappedKey':bytesToBase64(e)};try{this['db']['transaction'](()=>{const g=this['db']['prepare']('SELECT\x20data\x20FROM\x20'+KEY_METADATA_TABLE+'\x20WHERE\x20id\x20=\x201')['get']();if(g){this['_metadata']=JSON['parse'](g['data']);return;}this['db']['prepare']('\x0a\x09\x09\x09\x09\x09INSERT\x20INTO\x20'+KEY_METADATA_TABLE+'\x20(id,\x20data,\x20updated_at)\x0a\x09\x09\x09\x09\x09VALUES\x20(1,\x20?,\x20strftime(\x27%s\x27,\x20\x27now\x27))\x0a\x09\x09\x09\x09')['run'](JSON['stringify'](f)),this['_metadata']=f;})();}catch{const g=this['loadMetadata']();if(g)this['_metadata']=g;}if(!this['_metadata']){const h=this['loadMetadata']();if(h)this['_metadata']=h;}}['deriveDefaultKek'](a){return hkdf(sha256,DEFAULT_MASTER_SECRET,a,KEK_INFO,0x20);}async['derivePasswordKek'](a,b){const c=await getSubtle(),d=await c['importKey']('raw',new TextEncoder()['encode'](a),{'name':'PBKDF2'},![],['deriveBits']),e=await c['deriveBits']({'name':'PBKDF2','salt':toArrayBuffer(b),'iterations':PBKDF2_ITERATIONS,'hash':'SHA-256'},d,0x100);return new Uint8Array(e);}async['wrapDek'](a,b){const c=await getSubtle(),d=crypto['getRandomValues'](new Uint8Array(IV_LENGTH)),e=await c['importKey']('raw',toArrayBuffer(a),{'name':'AES-GCM'},![],['encrypt']);return concatBytes(d,new Uint8Array(await c['encrypt']({'name':'AES-GCM','iv':toArrayBuffer(d)},e,toArrayBuffer(b))));}async['unwrapDek'](a,b){const c=await getSubtle(),{iv:d,ct:e}=splitIvTagCt(b),f=await c['importKey']('raw',toArrayBuffer(a),{'name':'AES-GCM'},![],['decrypt']),g=await c['decrypt']({'name':'AES-GCM','iv':toArrayBuffer(d)},f,toArrayBuffer(e));return new Uint8Array(g);}async['getDek'](a){if(this['_dek'])return this['_dek'];const b=await this['ensureInitialized'](),c=base64ToBytes(b['salt']);let d,e;if(b['mode']==='password'){if(a)d=await this['derivePasswordKek'](a,c),e=base64ToBytes(b['wrappedKey']);else{if(b['mcpWrappedKey'])d=this['deriveDefaultKek'](c),e=base64ToBytes(b['mcpWrappedKey']);else throw new Error('Account\x20access\x20is\x20disabled\x20for\x20MCP.\x20Please\x20open\x20the\x20WoWok\x20Client\x20and\x20enable\x20MCP\x20account\x20access\x20in\x20Settings\x20to\x20proceed.');}}else{if(a)d=await this['derivePasswordKek'](a,c);else d=this['deriveDefaultKek'](c);e=base64ToBytes(b['wrappedKey']);}const f=await this['unwrapDek'](d,e),g=await getSubtle();return this['_dek']=await g['importKey']('raw',toArrayBuffer(f),{'name':'AES-GCM'},![],['encrypt','decrypt']),this['_dek'];}['clearDekCache'](){this['_dek']=void 0x0;}async['encrypt'](a,b){const c=await this['ensureInitialized'](),d=await this['getDek'](b),e=await getSubtle(),f=crypto['getRandomValues'](new Uint8Array(IV_LENGTH)),g=new Uint8Array(await e['encrypt']({'name':'AES-GCM','iv':toArrayBuffer(f)},d,toArrayBuffer(new TextEncoder()['encode'](a))));return{'v':ENVELOPE_VERSION,'mode':c['mode'],'kdf':c['kdf'],'salt':c['salt'],'iterations':c['iterations'],'wrappedKey':c['wrappedKey'],'iv':bytesToBase64(f),'ct':bytesToBase64(g)};}async['decrypt'](a,b){const c=await this['getDek'](b),d=await getSubtle(),e=base64ToBytes(a['iv']),f=base64ToBytes(a['ct']),g=await d['decrypt']({'name':'AES-GCM','iv':toArrayBuffer(e)},c,toArrayBuffer(f));return new TextDecoder()['decode'](g);}['getMode'](){if(this['_metadata'])return this['_metadata']['mode'];return this['loadMetadata']()?.['mode'];}async['setPassword'](a){return this['_writeLock']['run'](async()=>{const b=await this['ensureInitialized'](),c=await this['unwrapDek'](this['deriveDefaultKek'](base64ToBytes(b['salt'])),base64ToBytes(b['wrappedKey'])),d=randomBytes(0x10),e=await this['derivePasswordKek'](a,d),f=await this['wrapDek'](e,c),g=await this['wrapDek'](this['deriveDefaultKek'](d),c),h={'v':ENVELOPE_VERSION,'mode':'password','kdf':'pbkdf2-sha256','salt':bytesToBase64(d),'iterations':PBKDF2_ITERATIONS,'wrappedKey':bytesToBase64(f),'mcpWrappedKey':bytesToBase64(g)};this['saveMetadata'](h),this['_metadata']=h,this['clearDekCache']();});}async['changePassword'](a,b){return this['_writeLock']['run'](async()=>{const c=await this['ensureInitialized']();if(c['mode']!=='password')throw new Error('Account\x20data\x20is\x20not\x20protected\x20by\x20a\x20password.\x20Call\x20setPassword\x20first.');const d=await this['derivePasswordKek'](a,base64ToBytes(c['salt'])),e=await this['unwrapDek'](d,base64ToBytes(c['wrappedKey'])),f=randomBytes(0x10),g=await this['derivePasswordKek'](b,f),h=await this['wrapDek'](g,e),i={'v':ENVELOPE_VERSION,'mode':'password','kdf':'pbkdf2-sha256','salt':bytesToBase64(f),'iterations':PBKDF2_ITERATIONS,'wrappedKey':bytesToBase64(h)};if(c['mcpWrappedKey'])i['mcpWrappedKey']=bytesToBase64(await this['wrapDek'](this['deriveDefaultKek'](f),e));this['saveMetadata'](i),this['_metadata']=i,this['clearDekCache']();});}async['removePassword'](a){return this['_writeLock']['run'](async()=>{const b=await this['ensureInitialized']();if(b['mode']!=='password')throw new Error('Account\x20data\x20is\x20already\x20in\x20default\x20encryption\x20mode.');const c=await this['derivePasswordKek'](a,base64ToBytes(b['salt'])),d=await this['unwrapDek'](c,base64ToBytes(b['wrappedKey'])),e=randomBytes(0x10),f=this['deriveDefaultKek'](e),g=await this['wrapDek'](f,d),h={'v':ENVELOPE_VERSION,'mode':'default','kdf':'hkdf-sha256','salt':bytesToBase64(e),'wrappedKey':bytesToBase64(g)};this['saveMetadata'](h),this['_metadata']=h,this['clearDekCache']();});}['getMcpAccess'](){const a=this['_metadata']??this['loadMetadata']();if(!a)return'allowed';if(a['mode']==='default')return'allowed';return a['mcpWrappedKey']?'allowed':'blocked';}async['setMcpAccess'](a,b){return this['_writeLock']['run'](async()=>{const c=await this['ensureInitialized']();if(c['mode']!=='password')throw new Error('MCP\x20access\x20control\x20is\x20only\x20available\x20when\x20a\x20password\x20is\x20set.');const d=await this['derivePasswordKek'](b,base64ToBytes(c['salt'])),e=await this['unwrapDek'](d,base64ToBytes(c['wrappedKey'])),f={...c};if(a)f['mcpWrappedKey']=bytesToBase64(await this['wrapDek'](this['deriveDefaultKek'](base64ToBytes(c['salt'])),e));else delete f['mcpWrappedKey'];this['saveMetadata'](f),this['_metadata']=f,this['clearDekCache']();});}},SecureAccountStorage=class{constructor(a,b){this['_backend']=a,this['_vault']=b??new CryptoVault();}['setSessionPassword'](a){this['_sessionPassword']=a,this['_vault']['clearDekCache']();}['getSessionPassword'](){return this['_sessionPassword'];}['isSecureEnvelope'](a){return a&&typeof a==='object'&&a['v']===ENVELOPE_VERSION&&typeof a['ct']==='string'&&typeof a['wrappedKey']==='string'&&(a['kdf']==='hkdf-sha256'||a['kdf']==='pbkdf2-sha256');}async['get'](){const a=await this['_backend']['get']();if(!a)return void 0x0;let b;try{b=JSON['parse'](a);}catch{return a;}if(this['isSecureEnvelope'](b))return this['_vault']['decrypt'](b,this['_sessionPassword']);return a;}async['put'](a){const b=await this['_vault']['encrypt'](a,this['_sessionPassword']);await this['_backend']['put'](JSON['stringify'](b));}async['clear'](){await this['_backend']['clear']();}['getMode'](){return this['_vault']['getMode']();}async['setPassword'](a){await this['_vault']['setPassword'](a),this['_sessionPassword']=a;if(await this['_backend']['get']()){const b=await this['get']();if(b!==void 0x0)await this['put'](b);}}async['changePassword'](a,b){await this['_vault']['changePassword'](a,b),this['_sessionPassword']=b;if(await this['_backend']['get']()){const c=await this['get']();if(c!==void 0x0)await this['put'](c);}}async['removePassword'](a){await this['_vault']['removePassword'](a),this['_sessionPassword']=void 0x0;if(await this['_backend']['get']()){const b=await this['get']();if(b!==void 0x0)await this['put'](b);}}['getMcpAccess'](){return this['_vault']['getMcpAccess']();}async['setMcpAccess'](a,b){await this['_vault']['setMcpAccess'](a,b);}};export{CryptoVault,SecureAccountStorage};
@@ -1 +1 @@
1
- import{a as a84a,c as a84b,i as a84c,l as a84d,n as a84e,o as a84f,r as a84g,s as a84h,t as a84i,u as a84j}from'../../storage-D1bEi2b7.mjs';export{a84i as KEY_METADATA_TABLE,a84e as OwnedRecordStorage,a84g as SQLiteAccountStorage,a84c as SQLiteStorage,a84a as clearKeyMetadata,a84f as defaultAccountStorage,a84h as defaultStorage,a84b as getAccountDb,a84d as resetAllDbConnections,a84j as resetAllStorage};
1
+ import{a as a85a,c as a85b,i as a85c,l as a85d,n as a85e,o as a85f,r as a85g,s as a85h,t as a85i,u as a85j}from'../../storage-D1bEi2b7.mjs';export{a85i as KEY_METADATA_TABLE,a85e as OwnedRecordStorage,a85g as SQLiteAccountStorage,a85c as SQLiteStorage,a85a as clearKeyMetadata,a85f as defaultAccountStorage,a85h as defaultStorage,a85b as getAccountDb,a85d as resetAllDbConnections,a85j as resetAllStorage};
@@ -1,2 +1,2 @@
1
- import { Dx as TokenInfo, Ex as TokenDataFilter, Ox as TokenTypeInfo } from "../../index-Bss9JH4A.mjs";
1
+ import { Ch as TokenTypeInfo, Sh as TokenInfo, xh as TokenDataFilter } from "../../index-5DmaIrpk.mjs";
2
2
  export { TokenDataFilter, TokenInfo, TokenTypeInfo };
@@ -1 +1 @@
1
- import{t as a85a}from'../../client-cokX3t3P.mjs';import{o as a85b}from'../../exception-CSxqQRN7.mjs';import{a as a85c}from'../../network-CGWSsrLB.mjs';import'../../common-BLQJxJvT.mjs';import{d as a85d}from'../../storage-D1bEi2b7.mjs';import{Cache}from'./cache.mjs';import{Config}from'./config.mjs';var TokenInfo=class TokenInfo{constructor(){this['cacheKey']=['token'];}static{this['_instanceLock']=new a85d();}static['Instance'](){if(TokenInfo['_instance'])return TokenInfo['_instance'];if(!TokenInfo['_instance'])TokenInfo['_instance']=new TokenInfo();return TokenInfo['_instance'];}static['isValidMetadata'](a){if(!a)return![];const b=a['decimals'];return typeof b==='number'&&Number['isInteger'](b)&&b>=0x0&&b<=0xff;}async['fetch_imp'](a,b,c){const d=await new a85a({'url':a85c(a),'network':a})['getCoinMetadata']({'coinType':b});if(TokenInfo['isValidMetadata'](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){a85b('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']?.['toLowerCase']()===a['symbol']['toLowerCase']();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
+ import{t as a86a}from'../../client-HlvevC--.mjs';import{o as a86b}from'../../exception-o3XVk35a.mjs';import{a as a86c}from'../../network-UpRYD8EM.mjs';import'../../common-DhtZTgkX.mjs';import{d as a86d}from'../../storage-D1bEi2b7.mjs';import{Cache}from'./cache.mjs';import{Config}from'./config.mjs';var TokenInfo=class TokenInfo{constructor(){this['cacheKey']=['token'];}static{this['_instanceLock']=new a86d();}static['Instance'](){if(TokenInfo['_instance'])return TokenInfo['_instance'];if(!TokenInfo['_instance'])TokenInfo['_instance']=new TokenInfo();return TokenInfo['_instance'];}static['isValidMetadata'](a){if(!a)return![];const b=a['decimals'];return typeof b==='number'&&Number['isInteger'](b)&&b>=0x0&&b<=0xff;}async['fetch_imp'](a,b,c){const d=await new a86a({'url':a86c(a),'network':a})['getCoinMetadata']({'coinType':b});if(TokenInfo['isValidMetadata'](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){a86b('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']?.['toLowerCase']()===a['symbol']['toLowerCase']();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 a86a from'path';import*as a86b from'os';function getWowDir(){if(process['env']['WOWOK_DATA_DIR'])return process['env']['WOWOK_DATA_DIR'];const a=a86b['homedir'](),b=a86b['platform']();if(b==='win32')return a86a['join'](a,'.wow','V2');else{if(b==='darwin')return a86a['join'](a,'Library','Application\x20Support','.wow','V2');else{const c=process['env']['XDG_CONFIG_HOME'];if(c)return a86a['join'](c,'.wow','V2');const d=process['env']['XDG_DATA_HOME'];if(d)return a86a['join'](d,'.wow','V2');return a86a['join'](a,'.wow','V2');}}}function getWowMcpDir(){const a=getWowDir();return a86a['join'](a86a['dirname'](a),'mcp');}function getWowokUserDataDir(){const a=a86b['homedir'](),b=a86b['platform']();if(b==='win32')return process['env']['APPDATA']||a86a['join'](a,'AppData','Roaming');if(b==='darwin')return a86a['join'](a,'Library','Application\x20Support');return process['env']['XDG_DATA_HOME']||a86a['join'](a,'.local','share');}function getWowokDataDir(){if(process['env']['WOWOK_USER_DIR'])return process['env']['WOWOK_USER_DIR'];return a86a['join'](getWowokUserDataDir(),'.wowok');}function getWowokWorkspaceDir(){return a86a['join'](getWowokDataDir(),'workspace');}function getWowokIndustryDir(){return a86a['join'](getWowokDataDir(),'industry');}function safeFilename(a){return String(a)['replace'](/[^a-zA-Z0-9_-]/g,'_');}function workspaceExportPath(a,b,c){return a86a['join'](getWowokWorkspaceDir(),a+'_'+safeFilename(b)+'.'+c);}export{getWowDir,getWowMcpDir,getWowokDataDir,getWowokIndustryDir,getWowokUserDataDir,getWowokWorkspaceDir,safeFilename,workspaceExportPath};
1
+ import*as a87a from'path';import*as a87b from'os';function getWowDir(){if(process['env']['WOWOK_DATA_DIR'])return process['env']['WOWOK_DATA_DIR'];const a=a87b['homedir'](),b=a87b['platform']();if(b==='win32')return a87a['join'](a,'.wow','V2');else{if(b==='darwin')return a87a['join'](a,'Library','Application\x20Support','.wow','V2');else{const c=process['env']['XDG_CONFIG_HOME'];if(c)return a87a['join'](c,'.wow','V2');const d=process['env']['XDG_DATA_HOME'];if(d)return a87a['join'](d,'.wow','V2');return a87a['join'](a,'.wow','V2');}}}function getWowMcpDir(){const a=getWowDir();return a87a['join'](a87a['dirname'](a),'mcp');}function getWowokUserDataDir(){const a=a87b['homedir'](),b=a87b['platform']();if(b==='win32')return process['env']['APPDATA']||a87a['join'](a,'AppData','Roaming');if(b==='darwin')return a87a['join'](a,'Library','Application\x20Support');return process['env']['XDG_DATA_HOME']||a87a['join'](a,'.local','share');}function getWowokDataDir(){if(process['env']['WOWOK_USER_DIR'])return process['env']['WOWOK_USER_DIR'];return a87a['join'](getWowokUserDataDir(),'.wowok');}function getWowokWorkspaceDir(){return a87a['join'](getWowokDataDir(),'workspace');}function getWowokIndustryDir(){return a87a['join'](getWowokDataDir(),'industry');}function safeFilename(a){return String(a)['replace'](/[^a-zA-Z0-9_-]/g,'_');}function workspaceExportPath(a,b,c){return a87a['join'](getWowokWorkspaceDir(),a+'_'+safeFilename(b)+'.'+c);}export{getWowDir,getWowMcpDir,getWowokDataDir,getWowokIndustryDir,getWowokUserDataDir,getWowokWorkspaceDir,safeFilename,workspaceExportPath};
@@ -1 +1 @@
1
- import{getWowokWorkspaceDir}from'./util.mjs';import{r as a87a}from'../../logger-Da7dKX2V.mjs';import{sha256}from'@noble/hashes/sha2.js';import{bytesToHex}from'@noble/hashes/utils.js';import*as a87b from'path';import*as a87c from'fs';import*as a87d from'https';import*as a87e from'http';const logger=a87a('wip'),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?a87d:a87e,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=a87b['resolve'](a);if(!a87c['existsSync'](b))throw new WipError('File\x20not\x20found:\x20'+b);const c=a87c['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=a87c['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-CvXcTL6j.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 logger['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,'&amp;')['replace'](/</g,'&lt;')['replace'](/>/g,'&gt;')['replace'](/"/g,'&quot;')['replace'](/'/g,'&#039;');},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(!a87c['existsSync'](b))a87c['mkdirSync'](b,{'recursive':!![]});const c=[];for(const d of a['payload']['media']){const e=getExtensionFromMimeType(d['type']),f=d['filename']||d['id']+'.'+e,g=a87b['join'](b,f),h=Buffer['from'](base64ToUint8Array(d['data']));a87c['writeFileSync'](g,h),c['push'](g);}return c;}['save'](a,b,c=!![]){const d=a87b['dirname'](b);if(!a87c['existsSync'](d))a87c['mkdirSync'](d,{'recursive':!![]});a87c['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:f}=await import('./account.mjs'),g=await f['Instance']()['get_address'](a['account']);if(!g)throw new WipValidationError('Account\x20not\x20found:\x20'+a['account']);const {signature:h,...i}=d['meta'],j=computeHash(canonicalizeJson(i)),k=await f['Instance']()['sign'](g,j),l=await f['Instance']()['get'](g,![],!![]);if(!l||!l['pubkey'])throw new WipValidationError('Cannot\x20get\x20public\x20key\x20for\x20account:\x20'+g);let m;if(l['pubkey']['startsWith']('0x')){const p=Buffer['from'](l['pubkey']['slice'](0x2),'hex');if(p['length']===0x382)m=p['slice'](0x1)['toString']('base64');else{if(p['length']===0x381)m=p['toString']('base64');else throw new WipValidationError('Invalid\x20public\x20key\x20length:\x20'+p['length']+',\x20expected\x20897\x20or\x20898\x20bytes');}}else m=l['pubkey'];const n={'value':Buffer['from'](k['slice'](0x2),'hex')['toString']('base64'),'publicKey':m,'algorithm':'Falcon512','address':g};let o;if(d['meta']['signature'])o=Array['isArray'](d['meta']['signature'])?[...d['meta']['signature'],n]:[d['meta']['signature'],n];else o=[n];d={...d,'meta':{...d['meta'],'signature':o}};}const e=b??a87b['join'](getWowokWorkspaceDir(),'wip_'+Date['now']()+'.wip');return c['save'](d,e,!![]),e;}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-CvXcTL6j.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=a87b['extname'](a),v=a87b['basename'](a,u);q=a87b['join'](getWowokWorkspaceDir(),'signed_'+v+u);}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),i=d['extname'](a),j=d['basename'](a,i),k=b['outputPath']??d['join'](getWowokWorkspaceDir(),j+'.html'),l=d['dirname'](k);if(!c['existsSync'](l))c['mkdirSync'](l,{'recursive':!![]});return c['writeFileSync'](k,h),k;}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'](getWowokWorkspaceDir(),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{getWowokWorkspaceDir}from'./util.mjs';import{r as a88a}from'../../logger-Da7dKX2V.mjs';import{sha256}from'@noble/hashes/sha2.js';import{bytesToHex}from'@noble/hashes/utils.js';import*as a88b from'path';import*as a88c from'fs';import*as a88d from'https';import*as a88e from'http';const logger=a88a('wip'),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?a88d:a88e,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=a88b['resolve'](a);if(!a88c['existsSync'](b))throw new WipError('File\x20not\x20found:\x20'+b);const c=a88c['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=a88c['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-CvXcTL6j.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 logger['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,'&amp;')['replace'](/</g,'&lt;')['replace'](/>/g,'&gt;')['replace'](/"/g,'&quot;')['replace'](/'/g,'&#039;');},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(!a88c['existsSync'](b))a88c['mkdirSync'](b,{'recursive':!![]});const c=[];for(const d of a['payload']['media']){const e=getExtensionFromMimeType(d['type']),f=d['filename']||d['id']+'.'+e,g=a88b['join'](b,f),h=Buffer['from'](base64ToUint8Array(d['data']));a88c['writeFileSync'](g,h),c['push'](g);}return c;}['save'](a,b,c=!![]){const d=a88b['dirname'](b);if(!a88c['existsSync'](d))a88c['mkdirSync'](d,{'recursive':!![]});a88c['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:f}=await import('./account.mjs'),g=await f['Instance']()['get_address'](a['account']);if(!g)throw new WipValidationError('Account\x20not\x20found:\x20'+a['account']);const {signature:h,...i}=d['meta'],j=computeHash(canonicalizeJson(i)),k=await f['Instance']()['sign'](g,j),l=await f['Instance']()['get'](g,![],!![]);if(!l||!l['pubkey'])throw new WipValidationError('Cannot\x20get\x20public\x20key\x20for\x20account:\x20'+g);let m;if(l['pubkey']['startsWith']('0x')){const p=Buffer['from'](l['pubkey']['slice'](0x2),'hex');if(p['length']===0x382)m=p['slice'](0x1)['toString']('base64');else{if(p['length']===0x381)m=p['toString']('base64');else throw new WipValidationError('Invalid\x20public\x20key\x20length:\x20'+p['length']+',\x20expected\x20897\x20or\x20898\x20bytes');}}else m=l['pubkey'];const n={'value':Buffer['from'](k['slice'](0x2),'hex')['toString']('base64'),'publicKey':m,'algorithm':'Falcon512','address':g};let o;if(d['meta']['signature'])o=Array['isArray'](d['meta']['signature'])?[...d['meta']['signature'],n]:[d['meta']['signature'],n];else o=[n];d={...d,'meta':{...d['meta'],'signature':o}};}const e=b??a88b['join'](getWowokWorkspaceDir(),'wip_'+Date['now']()+'.wip');return c['save'](d,e,!![]),e;}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-CvXcTL6j.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=a88b['extname'](a),v=a88b['basename'](a,u);q=a88b['join'](getWowokWorkspaceDir(),'signed_'+v+u);}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),i=d['extname'](a),j=d['basename'](a,i),k=b['outputPath']??d['join'](getWowokWorkspaceDir(),j+'.html'),l=d['dirname'](k);if(!c['existsSync'](l))c['mkdirSync'](l,{'recursive':!![]});return c['writeFileSync'](k,h),k;}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'](getWowokWorkspaceDir(),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,2 +1,2 @@
1
- import { $n as verify_wts, Ai as WtsFileResult, An as BlacklistResponse, Bn as extract_zip_messages, Br as MessageListResult, Di as WTS_MAX_MESSAGE_COUNT, Ei as WTS_FILE_BYTES_LIMIT, Fn as GuardlistResponse, Fr as Message, Gn as mark_conversation_as_viewed, Gr as MessengerError, Hn as generate_wts, In as SettingsRequest, Ir as MessageContentType, Jn as pull_messages, Kn as mark_messages_as_viewed, Kr as MessengerErrorCode, Ln as SettingsResponse, Lr as MessageDirection, Mn as FriendslistResponse, Mr as MAX_QUERY_LIMIT, Nn as GuardParam, Pn as GuardlistRequest, Qn as sign_wts, Rn as blacklist, Rr as MessageFilter, Un as getMessengerManager, Ur as MessageType, Vn as friendslist, Vr as MessageStatus, Wn as guardlist, Wr as MessengerConfig, Xn as send_message, Yn as send_file, Zn as settings, _r as ConversationsFilter, br as DEFAULT_QUERY_LIMIT, er as watch_conversations, gr as ConversationInfo, ir as Messenger, ji as WtsGenerationParams, jn as FriendslistRequest, kn as BlacklistRequest, nr as wts2html, oi as SendMessageResult, qn as proof_message, qr as NORMAL_MESSAGE_BYTES_LIMIT, rr as MessengerManager, tr as watch_messages, xr as DecryptedMessage, yr as DEFAULT_MESSENGER_CONFIG, zn as extractZipFromPlaintext } from "../../index-Bss9JH4A.mjs";
2
- export { BlacklistRequest, BlacklistResponse, type ConversationInfo, type ConversationsFilter, DEFAULT_MESSENGER_CONFIG, DEFAULT_QUERY_LIMIT, type DecryptedMessage, FriendslistRequest, FriendslistResponse, GuardParam, GuardlistRequest, GuardlistResponse, MAX_QUERY_LIMIT, type Message, type MessageContentType, MessageDirection, type MessageFilter, type MessageListResult, MessageStatus, MessageType, Messenger, type MessengerConfig, MessengerError, MessengerErrorCode, MessengerManager, NORMAL_MESSAGE_BYTES_LIMIT, type SendMessageResult, SettingsRequest, SettingsResponse, WTS_FILE_BYTES_LIMIT, WTS_MAX_MESSAGE_COUNT, type WtsFileResult, type WtsGenerationParams, blacklist, extractZipFromPlaintext, extract_zip_messages, friendslist, generate_wts, getMessengerManager, guardlist, mark_conversation_as_viewed, mark_messages_as_viewed, proof_message, pull_messages, send_file, send_message, settings, sign_wts, verify_wts, watch_conversations, watch_messages, wts2html };
1
+ import { $n as sign_wts, An as BlacklistResponse, Bn as extract_zip_messages, Di as WTS_FILE_BYTES_LIMIT, Fn as GuardlistResponse, Gn as mark_conversation_as_viewed, Gr as MessengerConfig, Hn as generate_wts, Hr as MessageStatus, In as SettingsRequest, Ir as Message, Jn as pull_messages, Jr as NORMAL_MESSAGE_BYTES_LIMIT, Kn as mark_messages_as_viewed, Kr as MessengerError, Ln as SettingsResponse, Lr as MessageContentType, Mi as WtsGenerationParams, Mn as FriendslistResponse, Nn as GuardParam, Nr as MAX_QUERY_LIMIT, Oi as WTS_MAX_MESSAGE_COUNT, Pn as GuardlistRequest, Qn as settings, Rn as blacklist, Rr as MessageDirection, Sr as DecryptedMessage, Un as getMessengerManager, Vn as friendslist, Vr as MessageListResult, Wn as guardlist, Wr as MessageType, Xn as send_file, Yn as search_messages, Zn as send_message, _r as ConversationInfo, ar as Messenger, br as DEFAULT_MESSENGER_CONFIG, er as verify_wts, ir as MessengerManager, ji as WtsFileResult, jn as FriendslistRequest, kn as BlacklistRequest, nr as watch_messages, qn as proof_message, qr as MessengerErrorCode, rr as wts2html, si as SendMessageResult, tr as watch_conversations, vr as ConversationsFilter, xr as DEFAULT_QUERY_LIMIT, zn as extractZipFromPlaintext, zr as MessageFilter } from "../../index-5DmaIrpk.mjs";
2
+ export { BlacklistRequest, BlacklistResponse, type ConversationInfo, type ConversationsFilter, DEFAULT_MESSENGER_CONFIG, DEFAULT_QUERY_LIMIT, type DecryptedMessage, FriendslistRequest, FriendslistResponse, GuardParam, GuardlistRequest, GuardlistResponse, MAX_QUERY_LIMIT, type Message, type MessageContentType, MessageDirection, type MessageFilter, type MessageListResult, MessageStatus, MessageType, Messenger, type MessengerConfig, MessengerError, MessengerErrorCode, MessengerManager, NORMAL_MESSAGE_BYTES_LIMIT, type SendMessageResult, SettingsRequest, SettingsResponse, WTS_FILE_BYTES_LIMIT, WTS_MAX_MESSAGE_COUNT, type WtsFileResult, type WtsGenerationParams, blacklist, extractZipFromPlaintext, extract_zip_messages, friendslist, generate_wts, getMessengerManager, guardlist, mark_conversation_as_viewed, mark_messages_as_viewed, proof_message, pull_messages, search_messages, send_file, send_message, settings, sign_wts, verify_wts, watch_conversations, watch_messages, wts2html };
@@ -1 +1 @@
1
- import{DEFAULT_MESSENGER_CONFIG,DEFAULT_QUERY_LIMIT,MAX_QUERY_LIMIT,MessageDirection,MessageStatus,MessageType,MessengerError,MessengerErrorCode,NORMAL_MESSAGE_BYTES_LIMIT,WTS_FILE_BYTES_LIMIT,WTS_MAX_MESSAGE_COUNT}from'./types.mjs';import{t as a89a}from'../../messenger-BxoZnri2.mjs';import{_ as a89b,a as a89c,b as a89d,c as a89e,d as a89f,f as a89g,g as a89h,h as a89i,i as a89j,l as a89k,m as a89l,n as a89m,o as a89n,p as a89o,r as a89p,s as a89q,t as a89r,u as a89s,v as a89t,y as a89u}from'../../messenger-api-k2rGNPPD.mjs';export{DEFAULT_MESSENGER_CONFIG,DEFAULT_QUERY_LIMIT,MAX_QUERY_LIMIT,MessageDirection,MessageStatus,MessageType,a89a as Messenger,MessengerError,MessengerErrorCode,a89d as MessengerManager,NORMAL_MESSAGE_BYTES_LIMIT,WTS_FILE_BYTES_LIMIT,WTS_MAX_MESSAGE_COUNT,a89r as blacklist,a89m as extractZipFromPlaintext,a89p as extract_zip_messages,a89j as friendslist,a89c as generate_wts,a89n as getMessengerManager,a89q as guardlist,a89e as mark_conversation_as_viewed,a89k as mark_messages_as_viewed,a89s as proof_message,a89f as pull_messages,a89g as send_file,a89o as send_message,a89l as settings,a89i as sign_wts,a89h as verify_wts,a89b as watch_conversations,a89t as watch_messages,a89u as wts2html};
1
+ import{DEFAULT_MESSENGER_CONFIG,DEFAULT_QUERY_LIMIT,MAX_QUERY_LIMIT,MessageDirection,MessageStatus,MessageType,MessengerError,MessengerErrorCode,NORMAL_MESSAGE_BYTES_LIMIT,WTS_FILE_BYTES_LIMIT,WTS_MAX_MESSAGE_COUNT}from'./types.mjs';import{t as a90a}from'../../messenger-Cq0kGhTg.mjs';import{_ as a90b,a as a90c,b as a90d,c as a90e,d as a90f,f as a90g,g as a90h,h as a90i,i as a90j,l as a90k,m as a90l,n as a90m,o as a90n,p as a90o,r as a90p,s as a90q,t as a90r,u as a90s,v as a90t,x as a90u,y as a90v}from'../../messenger-api-DdKAABD8.mjs';export{DEFAULT_MESSENGER_CONFIG,DEFAULT_QUERY_LIMIT,MAX_QUERY_LIMIT,MessageDirection,MessageStatus,MessageType,a90a as Messenger,MessengerError,MessengerErrorCode,a90u as MessengerManager,NORMAL_MESSAGE_BYTES_LIMIT,WTS_FILE_BYTES_LIMIT,WTS_MAX_MESSAGE_COUNT,a90r as blacklist,a90m as extractZipFromPlaintext,a90p as extract_zip_messages,a90j as friendslist,a90c as generate_wts,a90n as getMessengerManager,a90q as guardlist,a90e as mark_conversation_as_viewed,a90k as mark_messages_as_viewed,a90s as proof_message,a90f as pull_messages,a90g as search_messages,a90o as send_file,a90l as send_message,a90i as settings,a90h as sign_wts,a90b as verify_wts,a90t as watch_conversations,a90v as watch_messages,a90d as wts2html};
@@ -1,2 +1,2 @@
1
- import { $n as verify_wts, An as BlacklistResponse, Bn as extract_zip_messages, Fn as GuardlistResponse, Gn as mark_conversation_as_viewed, Hn as generate_wts, In as SettingsRequest, Jn as pull_messages, Kn as mark_messages_as_viewed, Ln as SettingsResponse, Mn as FriendslistResponse, Nn as GuardParam, Pn as GuardlistRequest, Qn as sign_wts, Rn as blacklist, Un as getMessengerManager, Vn as friendslist, Wn as guardlist, Xn as send_message, Yn as send_file, Zn as settings, er as watch_conversations, jn as FriendslistRequest, kn as BlacklistRequest, nr as wts2html, qn as proof_message, tr as watch_messages, zn as extractZipFromPlaintext } from "../../index-Bss9JH4A.mjs";
2
- export { BlacklistRequest, BlacklistResponse, FriendslistRequest, FriendslistResponse, GuardParam, GuardlistRequest, GuardlistResponse, SettingsRequest, SettingsResponse, blacklist, extractZipFromPlaintext, extract_zip_messages, friendslist, generate_wts, getMessengerManager, guardlist, mark_conversation_as_viewed, mark_messages_as_viewed, proof_message, pull_messages, send_file, send_message, settings, sign_wts, verify_wts, watch_conversations, watch_messages, wts2html };
1
+ import { $n as sign_wts, An as BlacklistResponse, Bn as extract_zip_messages, Fn as GuardlistResponse, Gn as mark_conversation_as_viewed, Hn as generate_wts, In as SettingsRequest, Jn as pull_messages, Kn as mark_messages_as_viewed, Ln as SettingsResponse, Mn as FriendslistResponse, Nn as GuardParam, Pn as GuardlistRequest, Qn as settings, Rn as blacklist, Un as getMessengerManager, Vn as friendslist, Wn as guardlist, Xn as send_file, Yn as search_messages, Zn as send_message, er as verify_wts, jn as FriendslistRequest, kn as BlacklistRequest, nr as watch_messages, qn as proof_message, rr as wts2html, tr as watch_conversations, zn as extractZipFromPlaintext } from "../../index-5DmaIrpk.mjs";
2
+ export { BlacklistRequest, BlacklistResponse, FriendslistRequest, FriendslistResponse, GuardParam, GuardlistRequest, GuardlistResponse, SettingsRequest, SettingsResponse, blacklist, extractZipFromPlaintext, extract_zip_messages, friendslist, generate_wts, getMessengerManager, guardlist, mark_conversation_as_viewed, mark_messages_as_viewed, proof_message, pull_messages, search_messages, send_file, send_message, settings, sign_wts, verify_wts, watch_conversations, watch_messages, wts2html };
@@ -1 +1 @@
1
- import{_ as a90a,a as a90b,c as a90c,d as a90d,f as a90e,g as a90f,h as a90g,i as a90h,l as a90i,m as a90j,n as a90k,o as a90l,p as a90m,r as a90n,s as a90o,t as a90p,u as a90q,v as a90r,y as a90s}from'../../messenger-api-k2rGNPPD.mjs';export{a90p as blacklist,a90k as extractZipFromPlaintext,a90n as extract_zip_messages,a90h as friendslist,a90b as generate_wts,a90l as getMessengerManager,a90o as guardlist,a90c as mark_conversation_as_viewed,a90i as mark_messages_as_viewed,a90q as proof_message,a90d as pull_messages,a90e as send_file,a90m as send_message,a90j as settings,a90g as sign_wts,a90f as verify_wts,a90a as watch_conversations,a90r as watch_messages,a90s as wts2html};
1
+ import{_ as a91a,a as a91b,b as a91c,c as a91d,d as a91e,f as a91f,g as a91g,h as a91h,i as a91i,l as a91j,m as a91k,n as a91l,o as a91m,p as a91n,r as a91o,s as a91p,t as a91q,u as a91r,v as a91s,y as a91t}from'../../messenger-api-DdKAABD8.mjs';export{a91q as blacklist,a91l as extractZipFromPlaintext,a91o as extract_zip_messages,a91i as friendslist,a91b as generate_wts,a91m as getMessengerManager,a91p as guardlist,a91d as mark_conversation_as_viewed,a91j as mark_messages_as_viewed,a91r as proof_message,a91e as pull_messages,a91f as search_messages,a91n as send_file,a91k as send_message,a91h as settings,a91g as sign_wts,a91a as verify_wts,a91s as watch_conversations,a91t as watch_messages,a91c as wts2html};
@@ -1,2 +1,2 @@
1
- import { ir as Messenger } from "../../index-Bss9JH4A.mjs";
1
+ import { ar as Messenger } from "../../index-5DmaIrpk.mjs";
2
2
  export { Messenger };
@@ -1 +1 @@
1
- import{t as a91a}from'../../messenger-BxoZnri2.mjs';export{a91a as Messenger};
1
+ import{t as a92a}from'../../messenger-Cq0kGhTg.mjs';export{a92a as Messenger};
@@ -1 +1 @@
1
- import'./types.mjs';import{blake2b}from'@noble/hashes/blake2.js';import{sha256}from'@noble/hashes/sha2.js';import{randomBytes}from'@noble/hashes/utils.js';import{x25519}from'@noble/curves/ed25519.js';import{hmac}from'@noble/hashes/hmac.js';import{falcon512padded}from'@noble/post-quantum/falcon.js';import{hkdf}from'@noble/hashes/hkdf.js';import{ml_kem768}from'@noble/post-quantum/ml-kem.js';import a92a from'node:crypto';function generateRandomBytes(a){return randomBytes(a);}function generateX25519KeyPair(){const a=randomBytes(0x20);return{'publicKey':x25519['getPublicKey'](a),'privateKey':a};}function x25519DH(a,b){return x25519['getSharedSecret'](a,b);}function generateFalcon512KeyPair(){const {publicKey:a,secretKey:b}=falcon512padded['keygen']();return{'publicKey':a,'privateKey':b};}function falcon512Sign(a,b){return falcon512padded['sign'](b,a);}function falcon512Verify(a,b,c){try{return falcon512padded['verify'](c,b,a);}catch{return![];}}function generateMLKEMKeyPair(){const {publicKey:a,secretKey:b}=ml_kem768['keygen']();return{'publicKey':a,'secretKey':b};}function mlkemEncapsulate(a){const {cipherText:b,sharedSecret:c}=ml_kem768['encapsulate'](a);return{'ciphertext':b,'sharedSecret':c};}function mlkemDecapsulate(a,b){return ml_kem768['decapsulate'](a,b);}function hkdfDerive(a,b,c,d){return hkdf(sha256,a,d||new Uint8Array(0x0),b,c);}function hkdfChainKey(a,b){const c=new Uint8Array(a['length']+b['length']);c['set'](a),c['set'](b,a['length']);const d=hkdfDerive(c,new TextEncoder()['encode']('WowokPQChainKey'),0x40);return{'rootKey':d['slice'](0x0,0x20),'chainKey':d['slice'](0x20,0x40)};}function hkdfMessageKey(a){const b=hkdfDerive(a,new TextEncoder()['encode']('WowokPQMessageKey'),0x40);return{'messageKey':b['slice'](0x0,0x20),'nextChainKey':b['slice'](0x20,0x40)};}function hmacSha256(a,b){return hmac(sha256,a,b);}function aesGcmEncrypt(a,b,c){const d=randomBytes(0xc),e=Buffer['from'](a),f=Buffer['from'](d),g=Buffer['from'](b),h=Buffer['from'](c),i=a92a['createCipheriv']('aes-256-gcm',e,f);i['setAAD'](h);const j=Buffer['concat']([i['update'](g),i['final']()]),k=i['getAuthTag']();return{'ciphertext':new Uint8Array(j),'iv':d,'tag':new Uint8Array(k)};}function aesGcmDecrypt(a,b,c,d,e){const f=Buffer['from'](a),g=Buffer['from'](c),h=Buffer['from'](b),i=Buffer['from'](d),j=Buffer['from'](e),k=a92a['createDecipheriv']('aes-256-gcm',f,g);k['setAAD'](j),k['setAuthTag'](i);const l=Buffer['concat']([k['update'](h),k['final']()]);return new Uint8Array(l);}function sha256Hash(a){return sha256(a);}const FALCON512_SCHEME_FLAG=0x7,WOW_ADDRESS_LENGTH=0x20;function deriveAddressFromFalcon512PublicKey(a){const b=new Uint8Array(a['length']+0x1);b[0x0]=FALCON512_SCHEME_FLAG,b['set'](a,0x1);const c=blake2b(b,{'dkLen':0x20}),d=new Uint8Array(WOW_ADDRESS_LENGTH);return d[0x0]=0x0,d['set'](c['slice'](0x0,WOW_ADDRESS_LENGTH-0x1),0x1),'0x'+bytesToHex(d);}function constantTimeEqual(c,d){if(c['length']!==d['length'])return![];let e=0x0;for(let f=0x0;f<c['length'];f++)e|=c[f]^d[f];return e===0x0;}function bytesToBase64(a){return Buffer['from'](a)['toString']('base64');}function base64ToBytes(a){return new Uint8Array(Buffer['from'](a,'base64'));}function bytesToHex(a){return Buffer['from'](a)['toString']('hex');}function hexToBytes(a){return new Uint8Array(Buffer['from'](a,'hex'));}function concatBytes(...a){const b=a['reduce']((e,f)=>e+f['length'],0x0),c=new Uint8Array(b);let d=0x0;for(const e of a){c['set'](e,d),d+=e['length'];}return c;}function deriveRegistrationId(a){const b=(a[0x0]<<0x8|a[0x1])>>>0x0;return b===0x0?0x1:b;}function generateX25519BindingSignature(a,b){return falcon512Sign(a,b);}function verifyX25519BindingSignature(a,b,c){return falcon512Verify(a,b,c);}export{aesGcmDecrypt,aesGcmEncrypt,base64ToBytes,bytesToBase64,bytesToHex,concatBytes,constantTimeEqual,deriveAddressFromFalcon512PublicKey,deriveRegistrationId,falcon512Sign,falcon512Verify,generateFalcon512KeyPair,generateMLKEMKeyPair,generateRandomBytes,generateX25519BindingSignature,generateX25519KeyPair,hexToBytes,hkdfChainKey,hkdfDerive,hkdfMessageKey,hmacSha256,mlkemDecapsulate,mlkemEncapsulate,sha256Hash,verifyX25519BindingSignature,x25519DH};
1
+ import'./types.mjs';import{blake2b}from'@noble/hashes/blake2.js';import{sha256}from'@noble/hashes/sha2.js';import{randomBytes}from'@noble/hashes/utils.js';import{x25519}from'@noble/curves/ed25519.js';import{hmac}from'@noble/hashes/hmac.js';import{falcon512padded}from'@noble/post-quantum/falcon.js';import{hkdf}from'@noble/hashes/hkdf.js';import{ml_kem768}from'@noble/post-quantum/ml-kem.js';import a93a from'node:crypto';function generateRandomBytes(a){return randomBytes(a);}function generateX25519KeyPair(){const a=randomBytes(0x20);return{'publicKey':x25519['getPublicKey'](a),'privateKey':a};}function x25519DH(a,b){return x25519['getSharedSecret'](a,b);}function generateFalcon512KeyPair(){const {publicKey:a,secretKey:b}=falcon512padded['keygen']();return{'publicKey':a,'privateKey':b};}function falcon512Sign(a,b){return falcon512padded['sign'](b,a);}function falcon512Verify(a,b,c){try{return falcon512padded['verify'](c,b,a);}catch{return![];}}function generateMLKEMKeyPair(){const {publicKey:a,secretKey:b}=ml_kem768['keygen']();return{'publicKey':a,'secretKey':b};}function mlkemEncapsulate(a){const {cipherText:b,sharedSecret:c}=ml_kem768['encapsulate'](a);return{'ciphertext':b,'sharedSecret':c};}function mlkemDecapsulate(a,b){return ml_kem768['decapsulate'](a,b);}function hkdfDerive(a,b,c,d){return hkdf(sha256,a,d||new Uint8Array(0x0),b,c);}function hkdfChainKey(a,b){const c=new Uint8Array(a['length']+b['length']);c['set'](a),c['set'](b,a['length']);const d=hkdfDerive(c,new TextEncoder()['encode']('WowokPQChainKey'),0x40);return{'rootKey':d['slice'](0x0,0x20),'chainKey':d['slice'](0x20,0x40)};}function hkdfMessageKey(a){const b=hkdfDerive(a,new TextEncoder()['encode']('WowokPQMessageKey'),0x40);return{'messageKey':b['slice'](0x0,0x20),'nextChainKey':b['slice'](0x20,0x40)};}function hmacSha256(a,b){return hmac(sha256,a,b);}function aesGcmEncrypt(a,b,c){const d=randomBytes(0xc),e=Buffer['from'](a),f=Buffer['from'](d),g=Buffer['from'](b),h=Buffer['from'](c),i=a93a['createCipheriv']('aes-256-gcm',e,f);i['setAAD'](h);const j=Buffer['concat']([i['update'](g),i['final']()]),k=i['getAuthTag']();return{'ciphertext':new Uint8Array(j),'iv':d,'tag':new Uint8Array(k)};}function aesGcmDecrypt(a,b,c,d,e){const f=Buffer['from'](a),g=Buffer['from'](c),h=Buffer['from'](b),i=Buffer['from'](d),j=Buffer['from'](e),k=a93a['createDecipheriv']('aes-256-gcm',f,g);k['setAAD'](j),k['setAuthTag'](i);const l=Buffer['concat']([k['update'](h),k['final']()]);return new Uint8Array(l);}function sha256Hash(a){return sha256(a);}const FALCON512_SCHEME_FLAG=0x7,WOW_ADDRESS_LENGTH=0x20;function deriveAddressFromFalcon512PublicKey(a){const b=new Uint8Array(a['length']+0x1);b[0x0]=FALCON512_SCHEME_FLAG,b['set'](a,0x1);const c=blake2b(b,{'dkLen':0x20}),d=new Uint8Array(WOW_ADDRESS_LENGTH);return d[0x0]=0x0,d['set'](c['slice'](0x0,WOW_ADDRESS_LENGTH-0x1),0x1),'0x'+bytesToHex(d);}function constantTimeEqual(c,d){if(c['length']!==d['length'])return![];let e=0x0;for(let f=0x0;f<c['length'];f++)e|=c[f]^d[f];return e===0x0;}function bytesToBase64(a){return Buffer['from'](a)['toString']('base64');}function base64ToBytes(a){return new Uint8Array(Buffer['from'](a,'base64'));}function bytesToHex(a){return Buffer['from'](a)['toString']('hex');}function hexToBytes(a){return new Uint8Array(Buffer['from'](a,'hex'));}function concatBytes(...a){const b=a['reduce']((e,f)=>e+f['length'],0x0),c=new Uint8Array(b);let d=0x0;for(const e of a){c['set'](e,d),d+=e['length'];}return c;}function deriveRegistrationId(a){const b=(a[0x0]<<0x8|a[0x1])>>>0x0;return b===0x0?0x1:b;}function generateX25519BindingSignature(a,b){return falcon512Sign(a,b);}function verifyX25519BindingSignature(a,b,c){return falcon512Verify(a,b,c);}export{aesGcmDecrypt,aesGcmEncrypt,base64ToBytes,bytesToBase64,bytesToHex,concatBytes,constantTimeEqual,deriveAddressFromFalcon512PublicKey,deriveRegistrationId,falcon512Sign,falcon512Verify,generateFalcon512KeyPair,generateMLKEMKeyPair,generateRandomBytes,generateX25519BindingSignature,generateX25519KeyPair,hexToBytes,hkdfChainKey,hkdfDerive,hkdfMessageKey,hmacSha256,mlkemDecapsulate,mlkemEncapsulate,sha256Hash,verifyX25519BindingSignature,x25519DH};
@@ -1,4 +1,4 @@
1
- import { ni as ReplyTo } from "../../index-Bss9JH4A.mjs";
1
+ import { ri as ReplyTo } from "../../index-5DmaIrpk.mjs";
2
2
 
3
3
  //#region src/w/messenger/reply.d.ts
4
4
  /** 引用前缀标记头 */
@@ -1,4 +1,4 @@
1
- import { Fr as Message, Wr as MessengerConfig, di as SessionState } from "../../index-Bss9JH4A.mjs";
1
+ import { Gr as MessengerConfig, Ir as Message, fi as SessionState } from "../../index-5DmaIrpk.mjs";
2
2
  import Database from "libsql";
3
3
 
4
4
  //#region src/w/messenger/storage.d.ts
@@ -85,6 +85,19 @@ declare class MessageStorage {
85
85
  saveMessage(message: Message): void;
86
86
  getMessage(messageId: string): Message | undefined;
87
87
  getMessagesBySession(myAddress: string, peerAddress: string): Message[];
88
+ /**
89
+ * Keyword search over the local message store — the LIKE predicate is
90
+ * pushed down to SQLite (per-account DB), so callers never pull full
91
+ * threads into memory to filter client-side.
92
+ *
93
+ * Matches plaintext content AND participant addresses (from/to), so a
94
+ * peer address is a valid query. Ordered newest-first; optional peer
95
+ * filter narrows to one conversation.
96
+ */
97
+ searchMessages(query: string, opts?: {
98
+ peerAddress?: string;
99
+ limit?: number;
100
+ }): Message[];
88
101
  getPendingMessages(myAddress: string): Message[];
89
102
  updateMessageStatus(messageId: string, status: Message["status"], updates?: Partial<Message>): void;
90
103
  /**