@wowok/wowok 3.0.5 → 3.0.7

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 (147) hide show
  1. package/dist/esm/Transaction-CrzrFqPW.mjs +1 -0
  2. package/dist/esm/arb-CXTekz6P.mjs +1 -0
  3. package/dist/esm/call-c56KBPmQ.mjs +1 -0
  4. package/dist/esm/client/index.d.mts +2 -2
  5. package/dist/esm/client/index.mjs +1 -1
  6. package/dist/esm/client-BYIflYp_.mjs +1 -0
  7. package/dist/esm/common-DhtZTgkX.mjs +1 -0
  8. package/dist/esm/{config-BQzrNhZ8.d.mts → config-AuT9_n2K.d.mts} +6 -6
  9. package/dist/esm/constants-BGKNJZYa.mjs +1 -0
  10. package/dist/esm/cryptography/index.d.mts +1 -1
  11. package/dist/esm/cryptography/index.mjs +1 -1
  12. package/dist/esm/ed25519-Cjw5WOqY.mjs +1 -1
  13. package/dist/esm/falcon512-CnEZ-g-L.mjs +1 -1
  14. package/dist/esm/faucet/index.mjs +1 -1
  15. package/dist/esm/fund-approval-Cee3vmP8.mjs +1 -0
  16. package/dist/esm/graphql/index.d.mts +1 -1
  17. package/dist/esm/graphql/index.mjs +1 -1
  18. package/dist/esm/graphql-DDWKR2yj.mjs +1 -0
  19. package/dist/esm/grpc/index.d.mts +1 -1
  20. package/dist/esm/grpc/index.mjs +1 -1
  21. package/dist/esm/grpc-D9wyZZs1.mjs +1 -0
  22. package/dist/esm/{index-rkqH73U5.d.mts → index-BQOp8Peb.d.mts} +2363 -1887
  23. package/dist/esm/{index-B7GX5gzh.d.mts → index-Bs4A3nTL.d.mts} +2 -1
  24. package/dist/esm/index.d.mts +5 -5
  25. package/dist/esm/index.mjs +1 -1
  26. package/dist/esm/jsonRpc/index.d.mts +1 -1
  27. package/dist/esm/jsonRpc/index.mjs +1 -1
  28. package/dist/esm/keypair-IIyGelNr.mjs +1 -1
  29. package/dist/esm/keypairs/ed25519/index.d.mts +1 -1
  30. package/dist/esm/keypairs/ed25519/index.mjs +1 -1
  31. package/dist/esm/keypairs/falcon512/index.d.mts +1 -1
  32. package/dist/esm/keypairs/falcon512/index.mjs +1 -1
  33. package/dist/esm/keypairs/passkey/index.d.mts +1 -1
  34. package/dist/esm/keypairs/passkey/index.mjs +1 -1
  35. package/dist/esm/keypairs/secp256k1/index.d.mts +1 -1
  36. package/dist/esm/keypairs/secp256k1/index.mjs +1 -1
  37. package/dist/esm/keypairs/secp256r1/index.d.mts +1 -1
  38. package/dist/esm/keypairs/secp256r1/index.mjs +1 -1
  39. package/dist/esm/messenger-D9cIgjVB.mjs +1 -0
  40. package/dist/esm/messenger-api-BkZ1Urhv.mjs +1 -0
  41. package/dist/esm/multisig/index.d.mts +1 -1
  42. package/dist/esm/multisig/index.mjs +1 -1
  43. package/dist/esm/{network-CBo-AsLD.mjs → network-UpRYD8EM.mjs} +1 -1
  44. package/dist/esm/{networks-ByH0We-G.d.mts → networks-DgObqYrB.d.mts} +16 -1
  45. package/dist/esm/proof-DN-LYZHK.mjs +1 -0
  46. package/dist/esm/received-BeCU01U-.mjs +1 -0
  47. package/dist/esm/service-JWjnxOnc.mjs +1 -0
  48. package/dist/esm/transactions/index.d.mts +1 -1
  49. package/dist/esm/transactions/index.mjs +1 -1
  50. package/dist/esm/{transactions-B0rmtDin.mjs → transactions-HEsbZ5tl.mjs} +1 -1
  51. package/dist/esm/util-CQi8j1Df.mjs +1 -0
  52. package/dist/esm/util-DtomxQB5.mjs +1 -0
  53. package/dist/esm/utils/index.d.mts +2 -2
  54. package/dist/esm/utils/index.mjs +1 -1
  55. package/dist/esm/utils-CFfdvJ-L.mjs +1 -0
  56. package/dist/esm/verify/index.d.mts +1 -1
  57. package/dist/esm/verify/index.mjs +1 -1
  58. package/dist/esm/w/call/allocation.d.mts +1 -1
  59. package/dist/esm/w/call/allocation.mjs +1 -1
  60. package/dist/esm/w/call/arbitration.d.mts +1 -1
  61. package/dist/esm/w/call/arbitration.mjs +1 -1
  62. package/dist/esm/w/call/base.d.mts +1 -1
  63. package/dist/esm/w/call/base.mjs +1 -1
  64. package/dist/esm/w/call/demand.d.mts +1 -1
  65. package/dist/esm/w/call/demand.mjs +1 -1
  66. package/dist/esm/w/call/guard.d.mts +1 -1
  67. package/dist/esm/w/call/guard.mjs +1 -1
  68. package/dist/esm/w/call/index.d.mts +1 -1
  69. package/dist/esm/w/call/index.mjs +1 -1
  70. package/dist/esm/w/call/machine.d.mts +1 -1
  71. package/dist/esm/w/call/machine.mjs +1 -1
  72. package/dist/esm/w/call/passport.d.mts +1 -1
  73. package/dist/esm/w/call/passport.mjs +1 -1
  74. package/dist/esm/w/call/payment.d.mts +1 -1
  75. package/dist/esm/w/call/payment.mjs +1 -1
  76. package/dist/esm/w/call/permission.d.mts +1 -1
  77. package/dist/esm/w/call/permission.mjs +1 -1
  78. package/dist/esm/w/call/progress.d.mts +1 -1
  79. package/dist/esm/w/call/progress.mjs +1 -1
  80. package/dist/esm/w/call/repository.d.mts +1 -1
  81. package/dist/esm/w/call/repository.mjs +1 -1
  82. package/dist/esm/w/call/reward.d.mts +1 -1
  83. package/dist/esm/w/call/reward.mjs +1 -1
  84. package/dist/esm/w/call/service.d.mts +1 -1
  85. package/dist/esm/w/call/service.mjs +1 -1
  86. package/dist/esm/w/call/treasury.d.mts +1 -1
  87. package/dist/esm/w/call/treasury.mjs +1 -1
  88. package/dist/esm/w/common.d.mts +2 -2
  89. package/dist/esm/w/common.mjs +1 -1
  90. package/dist/esm/w/index.d.mts +4 -4
  91. package/dist/esm/w/index.mjs +1 -1
  92. package/dist/esm/w/local/account.d.mts +2 -2
  93. package/dist/esm/w/local/account.mjs +1 -1
  94. package/dist/esm/w/local/cache.mjs +1 -1
  95. package/dist/esm/w/local/config.d.mts +1 -1
  96. package/dist/esm/w/local/config.mjs +1 -1
  97. package/dist/esm/w/local/evm/networks.d.mts +1 -1
  98. package/dist/esm/w/local/evm/networks.mjs +1 -1
  99. package/dist/esm/w/local/evm-account.mjs +1 -1
  100. package/dist/esm/w/local/fund-approval.mjs +1 -1
  101. package/dist/esm/w/local/index.d.mts +4 -4
  102. package/dist/esm/w/local/index.mjs +1 -1
  103. package/dist/esm/w/local/local.mjs +1 -1
  104. package/dist/esm/w/local/secure-storage.mjs +1 -1
  105. package/dist/esm/w/local/storage.mjs +1 -1
  106. package/dist/esm/w/local/token.d.mts +1 -1
  107. package/dist/esm/w/local/token.mjs +1 -1
  108. package/dist/esm/w/local/util.mjs +1 -1
  109. package/dist/esm/w/local/wip.mjs +1 -1
  110. package/dist/esm/w/messenger/attachment.d.mts +2 -0
  111. package/dist/esm/w/messenger/attachment.mjs +1 -0
  112. package/dist/esm/w/messenger/index.d.mts +2 -2
  113. package/dist/esm/w/messenger/index.mjs +1 -1
  114. package/dist/esm/w/messenger/messenger-api.d.mts +2 -2
  115. package/dist/esm/w/messenger/messenger-api.mjs +1 -1
  116. package/dist/esm/w/messenger/messenger.d.mts +1 -1
  117. package/dist/esm/w/messenger/messenger.mjs +1 -1
  118. package/dist/esm/w/messenger/pq/crypto.mjs +1 -1
  119. package/dist/esm/w/messenger/reply.d.mts +1 -1
  120. package/dist/esm/w/messenger/storage.d.mts +14 -1
  121. package/dist/esm/w/messenger/storage.mjs +1 -1
  122. package/dist/esm/w/messenger/types.d.mts +2 -2
  123. package/dist/esm/w/messenger/types.mjs +1 -1
  124. package/dist/esm/w/messenger/utils.d.mts +31 -0
  125. package/dist/esm/w/messenger/utils.mjs +1 -0
  126. package/dist/esm/w/query/index.d.mts +2 -2
  127. package/dist/esm/w/query/index.mjs +1 -1
  128. package/dist/esm/w/query/object.d.mts +2 -2
  129. package/dist/esm/w/query/object.mjs +1 -1
  130. package/dist/esm/{w-Dy0Ppp83.mjs → w-C4MkpJSy.mjs} +1 -1
  131. package/package.json +10 -2
  132. package/dist/esm/Transaction-DY5xZw9i.mjs +0 -1
  133. package/dist/esm/arb-BqAtS7Pe.mjs +0 -1
  134. package/dist/esm/call-DxE2SCFZ.mjs +0 -1
  135. package/dist/esm/client-DQVGu_Cf.mjs +0 -1
  136. package/dist/esm/common-vAC0KZQY.mjs +0 -1
  137. package/dist/esm/fund-approval-Cp3ON1v1.mjs +0 -1
  138. package/dist/esm/graphql-CIIj4T15.mjs +0 -1
  139. package/dist/esm/grpc-DaxgGfSP.mjs +0 -1
  140. package/dist/esm/messenger-BUHGIRHr.mjs +0 -1
  141. package/dist/esm/messenger-api-BEQ8fXaK.mjs +0 -1
  142. package/dist/esm/object-CC_ukGim.mjs +0 -1
  143. package/dist/esm/proof-CuRa15Mj.mjs +0 -1
  144. package/dist/esm/received-CABySB6M.mjs +0 -1
  145. package/dist/esm/service-Dp5U4zH1.mjs +0 -1
  146. package/dist/esm/util-C1S-xatf.mjs +0 -1
  147. 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 { Gx as TokenInfo, Kx as TokenTypeInfo, Wx as TokenDataFilter } from "../../index-rkqH73U5.mjs";
1
+ import { Jh as TokenDataFilter, Xh as TokenTypeInfo, Yh as TokenInfo } from "../../index-BQOp8Peb.mjs";
2
2
  export { TokenDataFilter, TokenInfo, TokenTypeInfo };
@@ -1 +1 @@
1
- import{t as a85a}from'../../client-DQVGu_Cf.mjs';import{o as a85b}from'../../exception-o3XVk35a.mjs';import{a as a85c}from'../../network-CBo-AsLD.mjs';import'../../common-vAC0KZQY.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-BYIflYp_.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};
@@ -0,0 +1,2 @@
1
+ import { An as BuiltAttachmentEnvelope, Bn as extOf, Fn as ReadPresentationOptions, Gn as sniffKindAndMime, Hn as presentMessageForRead, In as SniffOptions, Ln as assertZipMagic, Mn as ENVELOPE_MAX_TOTAL_BYTES, Nn as MANIFEST_ENTRY, Pn as PAYLOAD_PREFIX, Rn as buildAttachmentEnvelope, Un as presentMessagesForRead, Vn as parseAttachmentEnvelope, Wn as sanitizeFileName, jn as ENVELOPE_MAX_ENTRIES, kn as BuildAttachmentEnvelopeInput, zn as describeAttachmentFromMetadata } from "../../index-BQOp8Peb.mjs";
2
+ export { BuildAttachmentEnvelopeInput, BuiltAttachmentEnvelope, ENVELOPE_MAX_ENTRIES, ENVELOPE_MAX_TOTAL_BYTES, MANIFEST_ENTRY, PAYLOAD_PREFIX, ReadPresentationOptions, SniffOptions, assertZipMagic, buildAttachmentEnvelope, describeAttachmentFromMetadata, extOf, parseAttachmentEnvelope, presentMessageForRead, presentMessagesForRead, sanitizeFileName, sniffKindAndMime };
@@ -0,0 +1 @@
1
+ import{MessengerError}from'./types.mjs';import{parseReplyPlaintext}from'./reply.mjs';const MANIFEST_ENTRY='.wowok-manifest.json',PAYLOAD_PREFIX='payload/',ENVELOPE_MAX_ENTRIES=0x10,ENVELOPE_MAX_TOTAL_BYTES=0x14*0x400*0x400,ZIP_LEVEL_STORE=0x0,ZIP_LEVEL_DEFLATE=0x6,EXT_KIND_MIME={'jpg':{'kind':'image','mime':'image/jpeg'},'jpeg':{'kind':'image','mime':'image/jpeg'},'png':{'kind':'image','mime':'image/png'},'gif':{'kind':'image','mime':'image/gif'},'webp':{'kind':'image','mime':'image/webp'},'bmp':{'kind':'image','mime':'image/bmp'},'avif':{'kind':'image','mime':'image/avif'},'heic':{'kind':'image','mime':'image/heic'},'heif':{'kind':'image','mime':'image/heif'},'svg':{'kind':'image','mime':'image/svg+xml'},'ico':{'kind':'image','mime':'image/x-icon'},'mp4':{'kind':'video','mime':'video/mp4'},'m4v':{'kind':'video','mime':'video/x-m4v'},'mov':{'kind':'video','mime':'video/quicktime'},'webm':{'kind':'video','mime':'video/webm'},'mkv':{'kind':'video','mime':'video/x-matroska'},'avi':{'kind':'video','mime':'video/x-msvideo'},'mp3':{'kind':'audio','mime':'audio/mpeg'},'wav':{'kind':'audio','mime':'audio/wav'},'ogg':{'kind':'audio','mime':'audio/ogg'},'oga':{'kind':'audio','mime':'audio/ogg'},'opus':{'kind':'audio','mime':'audio/ogg'},'m4a':{'kind':'audio','mime':'audio/mp4'},'aac':{'kind':'audio','mime':'audio/aac'},'flac':{'kind':'audio','mime':'audio/flac'}},KIND_MEDIA_STORE=new Set(['image','video','audio','voice']);function extOf(a){const b=a['lastIndexOf']('.');if(b<0x0||b===a['length']-0x1)return'';return a['slice'](b+0x1)['toLowerCase']();}function sniffKindAndMime(a,b={}){if(b['contentType']==='wts')return{'kind':'wts','mimeType':b['mimeType']??'application/octet-stream'};if(b['contentType']==='wip')return{'kind':'wip','mimeType':b['mimeType']??'application/octet-stream'};const c=EXT_KIND_MIME[extOf(a)];if(b['kind']){let d=b['mimeType'];if(!d){if(b['kind']==='voice')d='audio/webm';else{if(b['kind']===c?.['kind'])d=c['mime'];else d='application/octet-stream';}}return{'kind':b['kind'],'mimeType':d};}if(c)return{'kind':c['kind'],'mimeType':b['mimeType']??c['mime']};return{'kind':'file','mimeType':b['mimeType']??'application/octet-stream'};}function sanitizeFileName(a){let b=(String(a??'')['replace'](/\\/g,'/')['split']('/')['map'](c=>c['trim']())['filter'](c=>c['length']>0x0)['pop']()??'')['replace'](/[\x00-\x1f]/g,'')['trim']();if(!b||b==='.'||b==='..'||b==='.wowok-manifest.json'||/^[a-zA-Z]:$/['test'](b))b='file';return b;}function assertSafeEntryName(a){if(!a||a['endsWith']('/'))return;if(a['includes']('\x5c')||/^[a-zA-Z]:/['test'](a)||a['startsWith']('/'))throw new MessengerError('INVALID_INPUT','Unsafe\x20zip\x20entry\x20path:\x20'+a);if(a['split']('/')['includes']('..'))throw new MessengerError('INVALID_INPUT','Unsafe\x20zip\x20entry\x20path:\x20'+a);}async function buildAttachmentEnvelope(a){const b=sanitizeFileName(a['fileName']),c=a['bytes'];if(!c||c['length']===0x0)throw new MessengerError('INVALID_INPUT','Attachment\x20payload\x20is\x20empty');const {kind:d,mimeType:e}=sniffKindAndMime(b,{'kind':a['kind'],'mimeType':a['mimeType'],'contentType':a['contentType']}),f=PAYLOAD_PREFIX+b,g={'v':0x2,'kind':d,'fileName':b,'mimeType':e,'entries':[{'name':f,'size':c['length']}]},h=a['caption']?.['trim']();if(h)g['caption']=h;if(typeof a['durationMs']==='number'&&Number['isFinite'](a['durationMs'])&&a['durationMs']>0x0)g['durationMs']=Math['round'](a['durationMs']);if(typeof a['width']==='number'&&Number['isFinite'](a['width'])&&a['width']>0x0)g['width']=Math['round'](a['width']);if(typeof a['height']==='number'&&Number['isFinite'](a['height'])&&a['height']>0x0)g['height']=Math['round'](a['height']);const {ZipWriter:i,BlobWriter:j,Uint8ArrayReader:k}=await import('@zip.js/zip.js'),l=new j('application/zip'),m=new i(l);return await m['add'](MANIFEST_ENTRY,new k(Buffer['from'](JSON['stringify'](g),'utf8')),{'level':ZIP_LEVEL_DEFLATE}),await m['add'](f,new k(c),{'level':KIND_MEDIA_STORE['has'](d)?ZIP_LEVEL_STORE:ZIP_LEVEL_DEFLATE}),await m['close'](),{'zip':new Uint8Array(await(await l['getData']())['arrayBuffer']()),'manifest':g};}function assertZipMagic(a){if(a['length']<0x4||a[0x0]!==0x50||a[0x1]!==0x4b)throw new MessengerError('INVALID_INPUT','Invalid\x20ZIP\x20data:\x20magic\x20bytes\x20mismatch\x20(expected\x20PK,\x20got\x20'+Buffer['from'](a['slice'](0x0,0x2))['toString']('hex')+')');}function parseManifest(a){let b;try{b=JSON['parse'](a);}catch{throw new MessengerError('INVALID_INPUT','Attachment\x20manifest\x20is\x20not\x20valid\x20JSON');}const c=b;if(!c||typeof c!=='object'||c['v']!==0x2||typeof c['kind']!=='string'||typeof c['fileName']!=='string'||typeof c['mimeType']!=='string'||!Array['isArray'](c['entries'])||c['entries']['length']===0x0)throw new MessengerError('INVALID_INPUT','Attachment\x20manifest\x20is\x20missing\x20required\x20fields');return c;}async function parseAttachmentEnvelope(a,b={}){assertZipMagic(a);const {ZipReader:c,BlobReader:d,BlobWriter:f}=await import('@zip.js/zip.js'),g=new Uint8Array(a),h=new c(new d(new Blob([g])));let i;try{i=await h['getEntries']();}finally{await h['close']();}const j=i['filter'](t=>!t['directory']);if(j['length']===0x0)throw new MessengerError('INVALID_INPUT','ZIP\x20archive\x20contains\x20no\x20files');if(j['length']>0x10)throw new MessengerError('INVALID_INPUT','ZIP\x20archive\x20contains\x20too\x20many\x20entries\x20('+j['length']+'\x20>\x2016)');for(const t of j)assertSafeEntryName(t['filename']);const k=j['reduce']((u,v)=>u+(Number(v['uncompressedSize'])||0x0),0x0);if(k>0x1400000)throw new MessengerError('INVALID_INPUT','Uncompressed\x20attachment\x20size\x20'+k+'\x20exceeds\x20limit\x20'+ENVELOPE_MAX_TOTAL_BYTES);const l=j['find'](u=>u['filename']===MANIFEST_ENTRY);if(l){const u=new f(),v=parseManifest(await(await l['getData'](u))['text']()),w=sanitizeFileName(v['fileName']),x=v['entries'][0x0]['name'],y=j['find'](D=>D['filename']===x)??j['find'](D=>D['filename']['startsWith']('payload/'));if(!y)throw new MessengerError('INVALID_INPUT','Attachment\x20manifest\x20references\x20a\x20payload\x20entry\x20missing\x20from\x20the\x20archive');const z=new f(),A=await y['getData'](z),B=new Uint8Array(await A['arrayBuffer']());if(B['length']>0x1400000)throw new MessengerError('INVALID_INPUT','Uncompressed\x20attachment\x20size\x20'+B['length']+'\x20exceeds\x20limit\x20'+ENVELOPE_MAX_TOTAL_BYTES);const C={'kind':v['kind'],'fileName':w,'mimeType':v['mimeType'],'size':B['length'],'bytes':B};if(v['caption'])C['caption']=v['caption'];if(v['durationMs'])C['durationMs']=v['durationMs'];if(v['width'])C['width']=v['width'];if(v['height'])C['height']=v['height'];return C;}const m=j[0x0],n=sanitizeFileName(m['filename']),{kind:o,mimeType:p}=sniffKindAndMime(n,{'contentType':b['contentType']}),q=new f(),r=await m['getData'](q),s=new Uint8Array(await r['arrayBuffer']());return{'kind':o,'fileName':n,'mimeType':p,'size':s['length'],'bytes':s};}function describeAttachmentFromMetadata(a){const b=a['fileName']['replace'](/\.zip$/i,''),{kind:c,mimeType:d}=sniffKindAndMime(b,{'contentType':a['contentType']});return{'kind':c,'fileName':b,'mimeType':d,'size':a['fileSize']};}function presentMessageForRead(a,b={}){if(a['zipMetadata']){if(b['includeAttachmentPayload'])return a;const c={...a};return delete c['plaintext'],{...c,'plaintext':void 0x0,'attachment':describeAttachmentFromMetadata(a['zipMetadata'])};}if(a['plaintext']!==void 0x0){const d=parseReplyPlaintext(a['plaintext']);if(d['replyTo'])return{...a,'plaintext':d['content']};}return a;}function presentMessagesForRead(a,b={}){return a['map'](c=>presentMessageForRead(c,b));}export{ENVELOPE_MAX_ENTRIES,ENVELOPE_MAX_TOTAL_BYTES,MANIFEST_ENTRY,PAYLOAD_PREFIX,assertZipMagic,buildAttachmentEnvelope,describeAttachmentFromMetadata,extOf,parseAttachmentEnvelope,presentMessageForRead,presentMessagesForRead,sanitizeFileName,sniffKindAndMime};
@@ -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-rkqH73U5.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 SettingsRequest, An as BuiltAttachmentEnvelope, Ar as Attachment, Bn as extOf, Cr as watch_messages, Er as Messenger, Fn as ReadPresentationOptions, Gn as sniffKindAndMime, Gr as DEFAULT_MESSENGER_CONFIG, Hn as presentMessageForRead, Hr as ConversationInfo, In as SniffOptions, Jn as FriendslistRequest, Kn as BlacklistRequest, Kr as DEFAULT_QUERY_LIMIT, Ln as assertZipMagic, Mn as ENVELOPE_MAX_TOTAL_BYTES, Mr as AttachmentKind, Nn as MANIFEST_ENTRY, Nr as AttachmentManifest, Pi as SendMessageResult, Pn as PAYLOAD_PREFIX, Qn as GuardlistResponse, Rn as buildAttachmentEnvelope, Sr as watch_conversations, Tr as MessengerManager, Un as presentMessagesForRead, Ur as ConversationsFilter, Vn as parseAttachmentEnvelope, Wn as sanitizeFileName, Xn as GuardParam, Yn as FriendslistResponse, Zn as GuardlistRequest, _a as ZipMetadata, _i as MessengerError, _r as send_file, aa as WtsGenerationParams, ar as extract_zip_messages, br as sign_wts, ci as MessageContentType, cr as getMessengerManager, dr as mark_conversation_as_viewed, ea as WTS_FILE_BYTES_LIMIT, er as SettingsResponse, fi as MessageListResult, fr as mark_messages_as_viewed, ga as ZipContentType, gi as MessengerConfig, gr as search_messages, hi as MessageType, hr as pull_messages, ia as WtsFileResult, ii as MAX_QUERY_LIMIT, ir as extractZipFromPlaintext, ji as SendAttachmentOptions, jn as ENVELOPE_MAX_ENTRIES, jr as AttachmentDescriptor, kn as BuildAttachmentEnvelopeInput, li as MessageDirection, lr as get_attachment, mr as proof_message, nr as emergency_pull, or as friendslist, pi as MessageStatus, pr as peer_registered, qn as BlacklistResponse, qr as DecryptedMessage, rr as export_attachment, si as Message, sr as generate_wts, ta as WTS_MAX_MESSAGE_COUNT, tr as blacklist, ui as MessageFilter, ur as guardlist, vi as MessengerErrorCode, vr as send_message, wi as PullAccountResult, wr as wts2html, xr as verify_wts, yi as NORMAL_MESSAGE_BYTES_LIMIT, yr as settings, zn as describeAttachmentFromMetadata } from "../../index-BQOp8Peb.mjs";
2
+ export { type Attachment, type AttachmentDescriptor, type AttachmentKind, type AttachmentManifest, BlacklistRequest, BlacklistResponse, BuildAttachmentEnvelopeInput, BuiltAttachmentEnvelope, type ConversationInfo, type ConversationsFilter, DEFAULT_MESSENGER_CONFIG, DEFAULT_QUERY_LIMIT, type DecryptedMessage, ENVELOPE_MAX_ENTRIES, ENVELOPE_MAX_TOTAL_BYTES, FriendslistRequest, FriendslistResponse, GuardParam, GuardlistRequest, GuardlistResponse, MANIFEST_ENTRY, MAX_QUERY_LIMIT, type Message, type MessageContentType, MessageDirection, type MessageFilter, type MessageListResult, MessageStatus, MessageType, Messenger, type MessengerConfig, MessengerError, MessengerErrorCode, MessengerManager, NORMAL_MESSAGE_BYTES_LIMIT, PAYLOAD_PREFIX, type PullAccountResult, ReadPresentationOptions, type SendAttachmentOptions, type SendMessageResult, SettingsRequest, SettingsResponse, SniffOptions, WTS_FILE_BYTES_LIMIT, WTS_MAX_MESSAGE_COUNT, type WtsFileResult, type WtsGenerationParams, type ZipContentType, type ZipMetadata, assertZipMagic, blacklist, buildAttachmentEnvelope, describeAttachmentFromMetadata, emergency_pull, export_attachment, extOf, extractZipFromPlaintext, extract_zip_messages, friendslist, generate_wts, getMessengerManager, get_attachment, guardlist, mark_conversation_as_viewed, mark_messages_as_viewed, parseAttachmentEnvelope, peer_registered, presentMessageForRead, presentMessagesForRead, proof_message, pull_messages, sanitizeFileName, search_messages, send_file, send_message, settings, sign_wts, sniffKindAndMime, 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-BUHGIRHr.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-BEQ8fXaK.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 a91a}from'../../messenger-D9cIgjVB.mjs';import{ENVELOPE_MAX_ENTRIES,ENVELOPE_MAX_TOTAL_BYTES,MANIFEST_ENTRY,PAYLOAD_PREFIX,assertZipMagic,buildAttachmentEnvelope,describeAttachmentFromMetadata,extOf,parseAttachmentEnvelope,presentMessageForRead,presentMessagesForRead,sanitizeFileName,sniffKindAndMime}from'./attachment.mjs';import{C as a91b,S as a91c,T as a91d,_ as a91e,a as a91f,b as a91g,c as a91h,d as a91i,f as a91j,g as a91k,h as a91l,i as a91m,l as a91n,m as a91o,n as a91p,o as a91q,p as a91r,r as a91s,s as a91t,t as a91u,u as a91v,v as a91w,w as a91x,x as a91y,y as a91z}from'../../messenger-api-BkZ1Urhv.mjs';export{DEFAULT_MESSENGER_CONFIG,DEFAULT_QUERY_LIMIT,ENVELOPE_MAX_ENTRIES,ENVELOPE_MAX_TOTAL_BYTES,MANIFEST_ENTRY,MAX_QUERY_LIMIT,MessageDirection,MessageStatus,MessageType,a91a as Messenger,MessengerError,MessengerErrorCode,a91d as MessengerManager,NORMAL_MESSAGE_BYTES_LIMIT,PAYLOAD_PREFIX,WTS_FILE_BYTES_LIMIT,WTS_MAX_MESSAGE_COUNT,assertZipMagic,a91u as blacklist,buildAttachmentEnvelope,describeAttachmentFromMetadata,a91p as emergency_pull,a91s as export_attachment,extOf,a91m as extractZipFromPlaintext,a91f as extract_zip_messages,a91q as friendslist,a91t as generate_wts,a91h as getMessengerManager,a91n as get_attachment,a91v as guardlist,a91i as mark_conversation_as_viewed,a91j as mark_messages_as_viewed,parseAttachmentEnvelope,a91r as peer_registered,presentMessageForRead,presentMessagesForRead,a91o as proof_message,a91l as pull_messages,sanitizeFileName,a91k as search_messages,a91e as send_file,a91w as send_message,a91z as settings,a91g as sign_wts,sniffKindAndMime,a91y as verify_wts,a91c as watch_conversations,a91b as watch_messages,a91x 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-rkqH73U5.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 SettingsRequest, Cr as watch_messages, Jn as FriendslistRequest, Kn as BlacklistRequest, Qn as GuardlistResponse, Sr as watch_conversations, Xn as GuardParam, Yn as FriendslistResponse, Zn as GuardlistRequest, _r as send_file, ar as extract_zip_messages, br as sign_wts, cr as getMessengerManager, dr as mark_conversation_as_viewed, er as SettingsResponse, fr as mark_messages_as_viewed, gr as search_messages, hr as pull_messages, ir as extractZipFromPlaintext, lr as get_attachment, mr as proof_message, nr as emergency_pull, or as friendslist, pr as peer_registered, qn as BlacklistResponse, rr as export_attachment, sr as generate_wts, tr as blacklist, ur as guardlist, vr as send_message, wr as wts2html, xr as verify_wts, yr as settings } from "../../index-BQOp8Peb.mjs";
2
+ export { BlacklistRequest, BlacklistResponse, FriendslistRequest, FriendslistResponse, GuardParam, GuardlistRequest, GuardlistResponse, SettingsRequest, SettingsResponse, blacklist, emergency_pull, export_attachment, extractZipFromPlaintext, extract_zip_messages, friendslist, generate_wts, getMessengerManager, get_attachment, guardlist, mark_conversation_as_viewed, mark_messages_as_viewed, peer_registered, 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-BEQ8fXaK.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{C as a92a,S as a92b,_ as a92c,a as a92d,b as a92e,c as a92f,d as a92g,f as a92h,g as a92i,h as a92j,i as a92k,l as a92l,m as a92m,n as a92n,o as a92o,p as a92p,r as a92q,s as a92r,t as a92s,u as a92t,v as a92u,w as a92v,x as a92w,y as a92x}from'../../messenger-api-BkZ1Urhv.mjs';export{a92s as blacklist,a92n as emergency_pull,a92q as export_attachment,a92k as extractZipFromPlaintext,a92d as extract_zip_messages,a92o as friendslist,a92r as generate_wts,a92f as getMessengerManager,a92l as get_attachment,a92t as guardlist,a92g as mark_conversation_as_viewed,a92h as mark_messages_as_viewed,a92p as peer_registered,a92m as proof_message,a92j as pull_messages,a92i as search_messages,a92c as send_file,a92u as send_message,a92x as settings,a92e as sign_wts,a92w as verify_wts,a92b as watch_conversations,a92a as watch_messages,a92v as wts2html};
@@ -1,2 +1,2 @@
1
- import { ir as Messenger } from "../../index-rkqH73U5.mjs";
1
+ import { Er as Messenger } from "../../index-BQOp8Peb.mjs";
2
2
  export { Messenger };
@@ -1 +1 @@
1
- import{t as a91a}from'../../messenger-BUHGIRHr.mjs';export{a91a as Messenger};
1
+ import{t as a93a}from'../../messenger-D9cIgjVB.mjs';export{a93a 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 a94a 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=a94a['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=a94a['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-rkqH73U5.mjs";
1
+ import { ki as ReplyTo } from "../../index-BQOp8Peb.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-rkqH73U5.mjs";
1
+ import { gi as MessengerConfig, si as Message, zi as SessionState } from "../../index-BQOp8Peb.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
  /**