@wowok/wowok 3.0.4 → 3.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/dist/esm/Transaction-CrzrFqPW.mjs +1 -0
  2. package/dist/esm/arb-CNTnpKU4.mjs +1 -0
  3. package/dist/esm/bcs/index.d.mts +1 -1
  4. package/dist/esm/{cache-C5vEkZbd.d.mts → cache-sUKNe0-P.d.mts} +1 -0
  5. package/dist/esm/call-Zj4BGD5O.mjs +1 -0
  6. package/dist/esm/client/index.d.mts +2 -2
  7. package/dist/esm/client/index.mjs +1 -1
  8. package/dist/esm/client-HlvevC--.mjs +1 -0
  9. package/dist/esm/common-DhtZTgkX.mjs +1 -0
  10. package/dist/esm/{config-Dwoyt1sO.d.mts → config-AuT9_n2K.d.mts} +10 -9
  11. package/dist/esm/constants-BGKNJZYa.mjs +1 -0
  12. package/dist/esm/cryptography/index.d.mts +1 -1
  13. package/dist/esm/cryptography/index.mjs +1 -1
  14. package/dist/esm/ed25519-Cjw5WOqY.mjs +1 -1
  15. package/dist/esm/exception-o3XVk35a.mjs +1 -0
  16. package/dist/esm/falcon512-CnEZ-g-L.mjs +1 -1
  17. package/dist/esm/faucet/index.mjs +1 -1
  18. package/dist/esm/fund-approval-B0Y1YRF5.mjs +1 -0
  19. package/dist/esm/graphql/index.d.mts +1 -1
  20. package/dist/esm/graphql/index.mjs +1 -1
  21. package/dist/esm/graphql-Dm6C2KN9.mjs +1 -0
  22. package/dist/esm/grpc/index.d.mts +1 -1
  23. package/dist/esm/grpc/index.mjs +1 -1
  24. package/dist/esm/grpc-AmhWNnDx.mjs +1 -0
  25. package/dist/esm/{index-Bss9JH4A.d.mts → index-5DmaIrpk.d.mts} +2271 -2007
  26. package/dist/esm/{index-o_aMVwsK.d.mts → index-B-cxGU73.d.mts} +6 -6
  27. package/dist/esm/{index-B7GX5gzh.d.mts → index-Bs4A3nTL.d.mts} +2 -1
  28. package/dist/esm/index.d.mts +6 -6
  29. package/dist/esm/index.mjs +1 -1
  30. package/dist/esm/jsonRpc/index.d.mts +1 -1
  31. package/dist/esm/jsonRpc/index.mjs +1 -1
  32. package/dist/esm/keypair-IIyGelNr.mjs +1 -1
  33. package/dist/esm/keypairs/ed25519/index.d.mts +1 -1
  34. package/dist/esm/keypairs/ed25519/index.mjs +1 -1
  35. package/dist/esm/keypairs/falcon512/index.d.mts +1 -1
  36. package/dist/esm/keypairs/falcon512/index.mjs +1 -1
  37. package/dist/esm/keypairs/passkey/index.d.mts +1 -1
  38. package/dist/esm/keypairs/passkey/index.mjs +1 -1
  39. package/dist/esm/keypairs/secp256k1/index.d.mts +1 -1
  40. package/dist/esm/keypairs/secp256k1/index.mjs +1 -1
  41. package/dist/esm/keypairs/secp256r1/index.d.mts +1 -1
  42. package/dist/esm/keypairs/secp256r1/index.mjs +1 -1
  43. package/dist/esm/{local-CC1Zd3Pp.d.mts → local-Cizo_1J5.d.mts} +35 -1
  44. package/dist/esm/messenger-Cq0kGhTg.mjs +1 -0
  45. package/dist/esm/messenger-api-DdKAABD8.mjs +1 -0
  46. package/dist/esm/multisig/index.d.mts +1 -1
  47. package/dist/esm/multisig/index.mjs +1 -1
  48. package/dist/esm/{network-CGWSsrLB.mjs → network-UpRYD8EM.mjs} +1 -1
  49. package/dist/esm/proof-BgXYvVg_.mjs +1 -0
  50. package/dist/esm/received-BumlehnN.mjs +1 -0
  51. package/dist/esm/service-Bf6Sljmf.mjs +1 -0
  52. package/dist/esm/transactions/index.d.mts +1 -1
  53. package/dist/esm/transactions/index.mjs +1 -1
  54. package/dist/esm/{transactions-B0rmtDin.mjs → transactions-HEsbZ5tl.mjs} +1 -1
  55. package/dist/esm/util-DttciwF8.mjs +1 -0
  56. package/dist/esm/util-kGpbSSrV.mjs +1 -0
  57. package/dist/esm/utils/index.d.mts +2 -2
  58. package/dist/esm/utils/index.mjs +1 -1
  59. package/dist/esm/utils-CFfdvJ-L.mjs +1 -0
  60. package/dist/esm/verify/index.d.mts +1 -1
  61. package/dist/esm/verify/index.mjs +1 -1
  62. package/dist/esm/w/call/allocation.d.mts +2 -2
  63. package/dist/esm/w/call/allocation.mjs +1 -1
  64. package/dist/esm/w/call/arbitration.d.mts +1 -1
  65. package/dist/esm/w/call/arbitration.mjs +1 -1
  66. package/dist/esm/w/call/base.d.mts +2 -2
  67. package/dist/esm/w/call/base.mjs +1 -1
  68. package/dist/esm/w/call/demand.d.mts +1 -1
  69. package/dist/esm/w/call/demand.mjs +1 -1
  70. package/dist/esm/w/call/guard.d.mts +1 -1
  71. package/dist/esm/w/call/guard.mjs +1 -1
  72. package/dist/esm/w/call/index.d.mts +2 -2
  73. package/dist/esm/w/call/index.mjs +1 -1
  74. package/dist/esm/w/call/machine.d.mts +1 -1
  75. package/dist/esm/w/call/machine.mjs +1 -1
  76. package/dist/esm/w/call/passport.d.mts +1 -1
  77. package/dist/esm/w/call/passport.mjs +1 -1
  78. package/dist/esm/w/call/payment.d.mts +1 -1
  79. package/dist/esm/w/call/payment.mjs +1 -1
  80. package/dist/esm/w/call/permission.d.mts +1 -1
  81. package/dist/esm/w/call/permission.mjs +1 -1
  82. package/dist/esm/w/call/progress.d.mts +1 -1
  83. package/dist/esm/w/call/progress.mjs +1 -1
  84. package/dist/esm/w/call/repository.d.mts +1 -1
  85. package/dist/esm/w/call/repository.mjs +1 -1
  86. package/dist/esm/w/call/reward.d.mts +1 -1
  87. package/dist/esm/w/call/reward.mjs +1 -1
  88. package/dist/esm/w/call/service.d.mts +1 -1
  89. package/dist/esm/w/call/service.mjs +1 -1
  90. package/dist/esm/w/call/treasury.d.mts +1 -1
  91. package/dist/esm/w/call/treasury.mjs +1 -1
  92. package/dist/esm/w/common.d.mts +2 -2
  93. package/dist/esm/w/common.mjs +1 -1
  94. package/dist/esm/w/index.d.mts +4 -4
  95. package/dist/esm/w/index.mjs +1 -1
  96. package/dist/esm/w/local/account.d.mts +1 -1
  97. package/dist/esm/w/local/account.mjs +1 -1
  98. package/dist/esm/w/local/cache.d.mts +1 -1
  99. package/dist/esm/w/local/cache.mjs +1 -1
  100. package/dist/esm/w/local/config.d.mts +1 -1
  101. package/dist/esm/w/local/config.mjs +1 -1
  102. package/dist/esm/w/local/evm/networks.mjs +1 -1
  103. package/dist/esm/w/local/evm-account.mjs +1 -1
  104. package/dist/esm/w/local/fund-approval.mjs +1 -1
  105. package/dist/esm/w/local/index.d.mts +4 -4
  106. package/dist/esm/w/local/index.mjs +1 -1
  107. package/dist/esm/w/local/local.d.mts +2 -2
  108. package/dist/esm/w/local/local.mjs +1 -1
  109. package/dist/esm/w/local/secure-storage.mjs +1 -1
  110. package/dist/esm/w/local/storage.mjs +1 -1
  111. package/dist/esm/w/local/token.d.mts +1 -1
  112. package/dist/esm/w/local/token.mjs +1 -1
  113. package/dist/esm/w/local/util.mjs +1 -1
  114. package/dist/esm/w/local/wip.mjs +1 -1
  115. package/dist/esm/w/messenger/index.d.mts +2 -2
  116. package/dist/esm/w/messenger/index.mjs +1 -1
  117. package/dist/esm/w/messenger/messenger-api.d.mts +2 -2
  118. package/dist/esm/w/messenger/messenger-api.mjs +1 -1
  119. package/dist/esm/w/messenger/messenger.d.mts +1 -1
  120. package/dist/esm/w/messenger/messenger.mjs +1 -1
  121. package/dist/esm/w/messenger/pq/crypto.mjs +1 -1
  122. package/dist/esm/w/messenger/reply.d.mts +1 -1
  123. package/dist/esm/w/messenger/storage.d.mts +14 -1
  124. package/dist/esm/w/messenger/storage.mjs +1 -1
  125. package/dist/esm/w/messenger/types.d.mts +1 -1
  126. package/dist/esm/w/messenger/types.mjs +1 -1
  127. package/dist/esm/w/query/index.d.mts +2 -2
  128. package/dist/esm/w/query/index.mjs +1 -1
  129. package/dist/esm/w/query/object.d.mts +2 -2
  130. package/dist/esm/w/query/object.mjs +1 -1
  131. package/dist/esm/{w-C77YSXfT.mjs → w-DcAJ-L_L.mjs} +1 -1
  132. package/package.json +4 -1
  133. package/dist/esm/Transaction-DY5xZw9i.mjs +0 -1
  134. package/dist/esm/arb-CUXq4EWJ.mjs +0 -1
  135. package/dist/esm/call-BQMw_Z9s.mjs +0 -1
  136. package/dist/esm/client-cokX3t3P.mjs +0 -1
  137. package/dist/esm/common-BLQJxJvT.mjs +0 -1
  138. package/dist/esm/exception-CSxqQRN7.mjs +0 -1
  139. package/dist/esm/fund-approval-Dy-heIpQ.mjs +0 -1
  140. package/dist/esm/graphql-Cv2Zjkh8.mjs +0 -1
  141. package/dist/esm/grpc-CUKHF1or.mjs +0 -1
  142. package/dist/esm/messenger-BxoZnri2.mjs +0 -1
  143. package/dist/esm/messenger-api-k2rGNPPD.mjs +0 -1
  144. package/dist/esm/object-VP6MlaCJ.mjs +0 -1
  145. package/dist/esm/proof-D9SjsE8n.mjs +0 -1
  146. package/dist/esm/received-DGwKBzFf.mjs +0 -1
  147. package/dist/esm/service-o4c33u4H.mjs +0 -1
  148. package/dist/esm/util-DUArS_ez.mjs +0 -1
  149. package/dist/esm/utils-DL1Wk3E9.mjs +0 -1
@@ -1,2 +1,2 @@
1
- import { cS as Ed25519KeypairData, lS as Ed25519PublicKey, oS as DEFAULT_ED25519_DERIVATION_PATH, sS as Ed25519Keypair } from "../../index-Bss9JH4A.mjs";
1
+ import { AS as Ed25519Keypair, MS as Ed25519PublicKey, jS as Ed25519KeypairData, kS as DEFAULT_ED25519_DERIVATION_PATH } from "../../index-5DmaIrpk.mjs";
2
2
  export { DEFAULT_ED25519_DERIVATION_PATH, Ed25519Keypair, type Ed25519KeypairData, Ed25519PublicKey };
@@ -1 +1 @@
1
- import{n as a26a,t as a26b}from'../../ed25519-Cjw5WOqY.mjs';import{t as a26c}from'../../publickey-Bhgj2pBz.mjs';export{a26b as DEFAULT_ED25519_DERIVATION_PATH,a26a as Ed25519Keypair,a26c as Ed25519PublicKey};
1
+ import{n as a27a,t as a27b}from'../../ed25519-Cjw5WOqY.mjs';import{t as a27c}from'../../publickey-Bhgj2pBz.mjs';export{a27b as DEFAULT_ED25519_DERIVATION_PATH,a27a as Ed25519Keypair,a27c as Ed25519PublicKey};
@@ -1,2 +1,2 @@
1
- import { Gx as Falcon512PublicKey, Hx as DEFAULT_FALCON512_DERIVATION_PATH, Ux as Falcon512Keypair, Wx as Falcon512KeypairData } from "../../index-Bss9JH4A.mjs";
1
+ import { dS as DEFAULT_FALCON512_DERIVATION_PATH, fS as Falcon512Keypair, mS as Falcon512PublicKey, pS as Falcon512KeypairData } from "../../index-5DmaIrpk.mjs";
2
2
  export { DEFAULT_FALCON512_DERIVATION_PATH, Falcon512Keypair, type Falcon512KeypairData, Falcon512PublicKey };
@@ -1 +1 @@
1
- import{t as a27a}from'../../publickey-CvXcTL6j.mjs';import{n as a27b,t as a27c}from'../../falcon512-CnEZ-g-L.mjs';export{a27c as DEFAULT_FALCON512_DERIVATION_PATH,a27b as Falcon512Keypair,a27a as Falcon512PublicKey};
1
+ import{t as a28a}from'../../publickey-CvXcTL6j.mjs';import{n as a28b,t as a28c}from'../../falcon512-CnEZ-g-L.mjs';export{a28c as DEFAULT_FALCON512_DERIVATION_PATH,a28b as Falcon512Keypair,a28a as Falcon512PublicKey};
@@ -1,2 +1,2 @@
1
- import { Jx as BrowserPasswordProviderOptions, Kx as PasskeyPublicKey, Xx as PasskeyProvider, Yx as PasskeyKeypair, Zx as findCommonPublicKey, qx as BrowserPasskeyProvider } from "../../index-Bss9JH4A.mjs";
1
+ import { _S as BrowserPasswordProviderOptions, bS as findCommonPublicKey, gS as BrowserPasskeyProvider, hS as PasskeyPublicKey, vS as PasskeyKeypair, yS as PasskeyProvider } from "../../index-5DmaIrpk.mjs";
2
2
  export { BrowserPasskeyProvider, type BrowserPasswordProviderOptions, PasskeyKeypair, type PasskeyProvider, PasskeyPublicKey, type findCommonPublicKey };
@@ -1 +1 @@
1
- import{p as a28a}from'../../keypair-IIyGelNr.mjs';import{n as a28b,t as a28c}from'../../passkey-JT2Sem2D.mjs';export{a28c as BrowserPasskeyProvider,a28b as PasskeyKeypair,a28a as PasskeyPublicKey};
1
+ import{p as a29a}from'../../keypair-IIyGelNr.mjs';import{n as a29b,t as a29c}from'../../passkey-JT2Sem2D.mjs';export{a29c as BrowserPasskeyProvider,a29b as PasskeyKeypair,a29a as PasskeyPublicKey};
@@ -1,2 +1,2 @@
1
- import { aS as Secp256k1KeypairData, iS as Secp256k1Keypair, nS as Secp256k1PublicKey, rS as DEFAULT_SECP256K1_DERIVATION_PATH } from "../../index-Bss9JH4A.mjs";
1
+ import { DS as Secp256k1Keypair, ES as DEFAULT_SECP256K1_DERIVATION_PATH, OS as Secp256k1KeypairData, TS as Secp256k1PublicKey } from "../../index-5DmaIrpk.mjs";
2
2
  export { DEFAULT_SECP256K1_DERIVATION_PATH, Secp256k1Keypair, type Secp256k1KeypairData, Secp256k1PublicKey };
@@ -1 +1 @@
1
- import{t as a29a}from'../../publickey-CHe6yvVh.mjs';import{n as a29b,t as a29c}from'../../secp256k1-rxTNgrNr.mjs';export{a29c as DEFAULT_SECP256K1_DERIVATION_PATH,a29b as Secp256k1Keypair,a29a as Secp256k1PublicKey};
1
+ import{t as a30a}from'../../publickey-CHe6yvVh.mjs';import{n as a30b,t as a30c}from'../../secp256k1-rxTNgrNr.mjs';export{a30c as DEFAULT_SECP256K1_DERIVATION_PATH,a30b as Secp256k1Keypair,a30a as Secp256k1PublicKey};
@@ -1,2 +1,2 @@
1
- import { $x as DEFAULT_SECP256R1_DERIVATION_PATH, Qx as Secp256r1PublicKey, eS as Secp256r1Keypair, tS as Secp256r1KeypairData } from "../../index-Bss9JH4A.mjs";
1
+ import { CS as Secp256r1Keypair, SS as DEFAULT_SECP256R1_DERIVATION_PATH, wS as Secp256r1KeypairData, xS as Secp256r1PublicKey } from "../../index-5DmaIrpk.mjs";
2
2
  export { DEFAULT_SECP256R1_DERIVATION_PATH, Secp256r1Keypair, type Secp256r1KeypairData, Secp256r1PublicKey };
@@ -1 +1 @@
1
- import{t as a30a}from'../../publickey-DkfqbEPz.mjs';import{n as a30b,t as a30c}from'../../secp256r1--MEt4hQe.mjs';export{a30c as DEFAULT_SECP256R1_DERIVATION_PATH,a30b as Secp256r1Keypair,a30a as Secp256r1PublicKey};
1
+ import{t as a31a}from'../../publickey-DkfqbEPz.mjs';import{n as a31b,t as a31c}from'../../secp256r1--MEt4hQe.mjs';export{a31c as DEFAULT_SECP256R1_DERIVATION_PATH,a31b as Secp256r1Keypair,a31a as Secp256r1PublicKey};
@@ -124,5 +124,39 @@ declare class LocalInfo {
124
124
  clear(): Promise<void>;
125
125
  list(filter?: LocalInfoFilter): Promise<InfoData[]>;
126
126
  }
127
+ declare const HistoryRetainDays = 30;
128
+ declare const HistoryMaxEntries = 300;
129
+ /** Stored visit row (network resolved, newest-first ordered). */
130
+ interface HistoryEntry {
131
+ key: string;
132
+ objType?: string;
133
+ address: string;
134
+ network: string;
135
+ ts: number;
136
+ }
137
+ /** Incoming visit row (network optional — resolved to the config default). */
138
+ interface HistoryVisit {
139
+ key: string;
140
+ objType?: string;
141
+ address: string;
142
+ network?: string;
143
+ ts: number;
144
+ }
145
+ declare class LocalHistory {
146
+ static _instance: LocalHistory | undefined;
147
+ private cacheKey;
148
+ private static _dataLock;
149
+ /**
150
+ * Get the LocalHistory singleton instance.
151
+ * Concurrency-safe: double-checked locking ensures only one instance is created.
152
+ */
153
+ static Instance(): LocalHistory;
154
+ private dayKey;
155
+ private prune;
156
+ list(): Promise<HistoryEntry[]>;
157
+ put(rows: HistoryVisit[]): Promise<HistoryEntry[]>;
158
+ del(keys: string[]): Promise<HistoryEntry[]>;
159
+ clear(): Promise<boolean>;
160
+ }
127
161
  //#endregion
128
- export { isValidAddress as _, LocalInfoContentMaxCount as a, LocalInfoNameDefault as c, LocalMarkFilter as d, LocalMarkNameMaxLength as f, MarkParam as g, MarkData as h, LocalInfo as i, LocalInfoNameMaxLength as l, LocalMarkTagMaxLength as m, InfoData as n, LocalInfoContentMaxLength as o, LocalMarkTagMaxCount as p, InfoDataInner as r, LocalInfoFilter as s, BUITIN_IDS as t, LocalMark as u };
162
+ export { isValidAddress as S, LocalMarkNameMaxLength as _, HistoryVisit as a, MarkData as b, LocalHistory as c, LocalInfoContentMaxLength as d, LocalInfoFilter as f, LocalMarkFilter as g, LocalMark as h, HistoryRetainDays as i, LocalInfo as l, LocalInfoNameMaxLength as m, HistoryEntry as n, InfoData as o, LocalInfoNameDefault as p, HistoryMaxEntries as r, InfoDataInner as s, BUITIN_IDS as t, LocalInfoContentMaxCount as u, LocalMarkTagMaxCount as v, MarkParam as x, LocalMarkTagMaxLength as y };
@@ -0,0 +1 @@
1
+ import{o as a33a}from'./wow-types-DctQuD2J.mjs';import{r as a33b}from'./logger-Da7dKX2V.mjs';import{PQSessionCipher}from'./w/messenger/pq/session.mjs';import{PQSessionStoreAdapter}from'./w/messenger/pq/store-adapter.mjs';import{DEFAULT_MESSENGER_CONFIG,MessengerError,NORMAL_MESSAGE_BYTES_LIMIT,WTS_FILE_BYTES_LIMIT}from'./w/messenger/types.mjs';import{MessageStorage,SessionStateStorage,getDatabase}from'./w/messenger/storage.mjs';import{base64ToBytes,bytesToBase64,hashPlaintext,verifyMessage}from'./w/messenger/crypto.mjs';import{REPLY_HEADER,buildReplyPlaintext,parseReplyPlaintext}from'./w/messenger/reply.mjs';import{randomBytes}from'@noble/hashes/utils.js';import*as a33c from'path';import*as a33d from'fs';import{createHash}from'crypto';const logger=a33b('messenger:server');var MessengerServerClient=class{constructor(a){this['config']={...DEFAULT_MESSENGER_CONFIG,...a};}async['fetchWithTimeout'](a,b={},c){const d=c??this['config']['requestTimeoutMs']??0x7530,e=new AbortController(),f=setTimeout(()=>e['abort'](),d);try{return await fetch(a,{...b,'signal':e['signal']});}finally{clearTimeout(f);}}async['registerDevice'](a){try{const b=await this['fetchWithTimeout'](this['config']['serverUrl']+'/v1/register',{'method':'POST','headers':{'Content-Type':'application/json'},'body':JSON['stringify'](a)});if(!b['ok']){const d=await b['text']();if(b['status']===0x199){if(d['includes']('different\x20key'))throw new MessengerError('IDENTITY_CONFLICT','Identity\x20already\x20exists\x20with\x20different\x20key:\x20'+d);return{'success':!![],'uploadedCount':0x0,'failedPrekeys':[],'currentTotal':0x0,'maxAllowed':0x64};}throw new MessengerError('SERVER_ERROR','Registration\x20failed:\x20'+b['status']+'\x20'+b['statusText']+'\x20-\x20'+d);}const c=await b['json']();if(c['failedPrekeys']&&c['failedPrekeys']['length']>0x0){}return{'success':c['success'],'uploadedCount':c['uploaded_count'],'failedPrekeys':c['failed_prekeys']||[],'currentTotal':c['current_total'],'maxAllowed':c['max_allowed']};}catch(e){if(e instanceof MessengerError)throw e;throw new MessengerError('NETWORK_ERROR','Failed\x20to\x20register\x20device',e);}}async['uploadPreKeys'](a){try{const b=await this['fetchWithTimeout'](this['config']['serverUrl']+'/v1/prekeys/upload',{'method':'POST','headers':{'Content-Type':'application/json'},'body':JSON['stringify'](a)});if(!b['ok']){const d=await b['text']();throw new MessengerError('SERVER_ERROR','Failed\x20to\x20upload\x20prekeys:\x20'+b['status']+'\x20'+b['statusText']+'\x20-\x20'+d);}const c=await b['json']();if(c['failedPrekeys']&&c['failedPrekeys']['length']>0x0)throw new MessengerError('SERVER_ERROR','Some\x20prekeys\x20failed\x20to\x20upload:\x20'+JSON['stringify'](c['failedPrekeys']));return{'success':c['success'],'uploadedCount':c['uploaded_count'],'failedPrekeys':c['failed_prekeys']||[],'currentTotal':c['current_total'],'maxAllowed':c['max_allowed']};}catch(e){if(e instanceof MessengerError)throw e;throw new MessengerError('NETWORK_ERROR','Failed\x20to\x20upload\x20prekeys',e);}}async['fetchRemoteBundle'](a,b,c,d,e){try{const f=await this['fetchWithTimeout'](this['config']['serverUrl']+'/v1/bundle/'+a,{'headers':{'X-PublicKey':c,'X-SignatureScheme':d['signatureScheme'],'X-Signature':d['signature'],'X-Timestamp':d['timestamp']['toString'](),'X-Nonce':d['nonce']}});if(!f['ok']){if(f['status']===0x194)throw new MessengerError('IDENTITY_NOT_FOUND','User\x20'+a+'\x20not\x20found\x20on\x20server');throw new MessengerError('SERVER_ERROR','Failed\x20to\x20fetch\x20remote\x20bundle:\x20'+f['statusText']);}return await f['json']();}catch(g){if(g instanceof MessengerError)throw g;throw new MessengerError('NETWORK_ERROR','Failed\x20to\x20fetch\x20remote\x20bundle',g);}}async['sendMessage'](a){try{const b=await this['fetchWithTimeout'](this['config']['serverUrl']+'/v1/message',{'method':'POST','headers':{'Content-Type':'application/json'},'body':JSON['stringify'](a)}),c=await b['json']();if(!b['ok']){const d=new MessengerError('SERVER_ERROR',c?.['error']?.['message']||c?.['message']||b['statusText']);d['guardList']=c?.['error']?.['guard_list']||c?.['guard_list'];throw d;}return c;}catch(e){if(e instanceof MessengerError)throw e;throw new MessengerError('NETWORK_ERROR','Failed\x20to\x20send\x20message',e);}}async['pullMessages'](a,b,c,d){try{const e=new URL(this['config']['serverUrl']+'/v1/messages/'+a);if(d!==void 0x0)e['searchParams']['set']('limit',d['toString']());const f=await this['fetchWithTimeout'](e['toString'](),{'headers':{'X-PublicKey':b,'X-SignatureScheme':c['signatureScheme'],'X-Signature':c['signature'],'X-Timestamp':c['timestamp']['toString'](),'X-Nonce':c['nonce']}});if(!f['ok'])throw new MessengerError('SERVER_ERROR','Failed\x20to\x20pull\x20messages:\x20'+f['statusText']);return await f['json']();}catch(g){if(g instanceof MessengerError)throw g;throw new MessengerError('NETWORK_ERROR','Failed\x20to\x20pull\x20messages',g);}}async['popPreKey'](a,b){try{const c=await this['fetchWithTimeout'](this['config']['serverUrl']+'/v1/prekeys/'+a+'/one',{'method':'POST','headers':{'Content-Type':'application/json'},'body':JSON['stringify']({'publicKey':b['publicKey'],'signatureScheme':b['signatureScheme'],'signature':b['signature'],'timestamp':b['timestamp'],'nonce':b['nonce']})});if(c['status']===0x1ad)throw new MessengerError('SERVER_ERROR','Rate\x20limited:\x20too\x20many\x20pop\x20prekey\x20requests');if(c['status']===0x191)throw new MessengerError('SERVER_ERROR','Unauthorized:\x20signature\x20verification\x20failed\x20or\x20address\x20mismatch');if(!c['ok'])throw new MessengerError('SERVER_ERROR','Failed\x20to\x20pop\x20prekey:\x20'+c['statusText']);return await c['json']();}catch(d){if(d instanceof MessengerError)throw d;throw new MessengerError('NETWORK_ERROR','Failed\x20to\x20pop\x20prekey',d);}}async['getPrekeyStatus'](a,b,c){try{const d=await this['fetchWithTimeout'](this['config']['serverUrl']+'/v1/prekeys/'+a+'/status',{'headers':{'X-PublicKey':b,'X-SignatureScheme':c['signatureScheme'],'X-Signature':c['signature'],'X-Timestamp':c['timestamp']['toString'](),'X-Nonce':c['nonce']}});if(!d['ok'])throw new MessengerError('SERVER_ERROR','Failed\x20to\x20get\x20prekey\x20status:\x20'+d['statusText']);const e=await d['json']();return{'currentCount':e['currentCount'],'maxAllowed':e['maxAllowed'],'threshold':e['threshold'],'shouldRefill':e['shouldRefill']};}catch(f){if(f instanceof MessengerError)throw f;throw new MessengerError('NETWORK_ERROR','Failed\x20to\x20get\x20prekey\x20status',f);}}async['acknowledgeMessages'](a,b,c){try{const d=await this['fetchWithTimeout'](this['config']['serverUrl']+'/v1/messages/ack',{'method':'POST','headers':{'Content-Type':'application/json'},'body':JSON['stringify']({'publicKey':c['publicKey'],'messageIds':a,'senderPublicKey':b,'signatureScheme':c['signatureScheme'],'signature':c['signature'],'timestamp':c['timestamp'],'nonce':c['nonce']})});if(!d['ok'])throw new MessengerError('SERVER_ERROR','Failed\x20to\x20acknowledge\x20messages:\x20'+d['statusText']);}catch(e){if(e instanceof MessengerError)throw e;throw new MessengerError('NETWORK_ERROR','Failed\x20to\x20acknowledge\x20messages',e);}}async['addToBlacklist'](a,b){return this['_listOperation'](this['config']['serverUrl']+'/v1/spam-protection/'+a+'/blacklist',b,'POST');}async['removeFromBlacklist'](a,b){return this['_listOperation'](this['config']['serverUrl']+'/v1/spam-protection/'+a+'/blacklist',b,'DELETE');}async['clearBlacklist'](a,b){return this['_listOperation'](this['config']['serverUrl']+'/v1/spam-protection/'+a+'/blacklist/clear',b,'POST');}async['getBlacklist'](a,b){try{const c=await this['fetchWithTimeout'](this['config']['serverUrl']+'/v1/spam-protection/'+a+'/blacklist/get',{'method':'POST','headers':{'Content-Type':'application/json'},'body':JSON['stringify'](b)});if(!c['ok']){const d=await c['text']();logger['error']('getBlacklist\x20error\x20response:',d);throw new MessengerError('SERVER_ERROR','Failed\x20to\x20get\x20blacklist:\x20'+c['statusText']+'\x20-\x20'+d);}return await c['json']();}catch(e){if(e instanceof MessengerError)throw e;throw new MessengerError('NETWORK_ERROR','Failed\x20to\x20get\x20blacklist',e);}}async['existInBlacklist'](a,b){return this['_listOperation'](this['config']['serverUrl']+'/v1/spam-protection/'+a+'/blacklist/exist',b,'POST');}async['addToFriendsList'](a,b){return this['_listOperation'](this['config']['serverUrl']+'/v1/spam-protection/'+a+'/friends-list',b,'POST');}async['removeFromFriendsList'](a,b){return this['_listOperation'](this['config']['serverUrl']+'/v1/spam-protection/'+a+'/friends-list',b,'DELETE');}async['clearFriendsList'](a,b){return this['_listOperation'](this['config']['serverUrl']+'/v1/spam-protection/'+a+'/friends-list/clear',b,'POST');}async['getFriendsList'](a,b){try{const c=await this['fetchWithTimeout'](this['config']['serverUrl']+'/v1/spam-protection/'+a+'/friends-list/get',{'method':'POST','headers':{'Content-Type':'application/json'},'body':JSON['stringify'](b)});if(!c['ok'])throw new MessengerError('SERVER_ERROR','Failed\x20to\x20get\x20friends\x20list:\x20'+c['statusText']);return await c['json']();}catch(d){if(d instanceof MessengerError)throw d;throw new MessengerError('NETWORK_ERROR','Failed\x20to\x20get\x20friends\x20list',d);}}async['existInFriendsList'](a,b){return this['_listOperation'](this['config']['serverUrl']+'/v1/spam-protection/'+a+'/friends-list/exist',b,'POST');}async['addToGuardList'](a,b){return this['_listOperation'](this['config']['serverUrl']+'/v1/spam-protection/'+a+'/guard-list',b,'POST');}async['removeFromGuardList'](a,b){return this['_listOperation'](this['config']['serverUrl']+'/v1/spam-protection/'+a+'/guard-list',b,'DELETE');}async['getGuardList'](a,b){try{const c=await this['fetchWithTimeout'](this['config']['serverUrl']+'/v1/spam-protection/'+a+'/guard-list/get',{'method':'POST','headers':{'Content-Type':'application/json'},'body':JSON['stringify'](b)});if(!c['ok'])throw new MessengerError('SERVER_ERROR','Failed\x20to\x20get\x20guard\x20list:\x20'+c['statusText']);return await c['json']();}catch(d){if(d instanceof MessengerError)throw d;throw new MessengerError('NETWORK_ERROR','Failed\x20to\x20get\x20guard\x20list',d);}}async['updateSettings'](a,b){try{const c=await this['fetchWithTimeout'](this['config']['serverUrl']+'/v1/spam-protection/'+a+'/settings',{'method':'POST','headers':{'Content-Type':'application/json'},'body':JSON['stringify'](b)});if(!c['ok']){const d=await c['text']();throw new MessengerError('SERVER_ERROR','Failed\x20to\x20update\x20settings:\x20'+c['statusText']+'\x20-\x20'+d);}return(await c['json']())['success'];}catch(e){if(e instanceof MessengerError)throw e;throw new MessengerError('NETWORK_ERROR','Failed\x20to\x20update\x20settings',e);}}async['getSettings'](a,b){try{const c=await this['fetchWithTimeout'](this['config']['serverUrl']+'/v1/spam-protection/'+a+'/settings/get',{'method':'POST','headers':{'Content-Type':'application/json'},'body':JSON['stringify'](b)});if(!c['ok']){const d=await c['text']();throw new MessengerError('SERVER_ERROR','Failed\x20to\x20get\x20settings:\x20'+c['statusText']+'\x20-\x20'+d);}return await c['json']();}catch(e){if(e instanceof MessengerError)throw e;throw new MessengerError('NETWORK_ERROR','Failed\x20to\x20get\x20settings',e);}}async['_listOperation'](a,b,c='POST'){try{const d=await this['fetchWithTimeout'](a,{'method':c,'headers':{'Content-Type':'application/json'},'body':JSON['stringify'](b)});if(!d['ok']){const e=await d['text']();throw new MessengerError('SERVER_ERROR','List\x20operation\x20failed:\x20'+d['statusText']+'\x20-\x20'+e);}return await d['json']();}catch(f){if(f instanceof MessengerError)throw f;throw new MessengerError('NETWORK_ERROR','Failed\x20to\x20perform\x20list\x20operation',f);}}};new MessengerServerClient();async function getAccount$1(){const {Account:a}=await import('./w/local/account.mjs');return a['Instance']();}var MessengerSession=class{constructor(a,b){this['identity']=null,this['config']={...DEFAULT_MESSENGER_CONFIG,...b},this['serverClient']=new MessengerServerClient(this['config']),this['userAddress']=a;const c=getDatabase(a);this['pqStore']=new PQSessionStoreAdapter(c,a),this['pqCipher']=new PQSessionCipher(this['pqStore'],async()=>{return(await(await getAccount$1())['deriveX25519Identity'](a))['falcon512KeyPair'];});}get['store'](){return this['pqStore'];}get['cipher'](){return this['pqCipher'];}async['ensureIdentity'](a){if(this['identity'])return this['identity'];const b=await this['pqStore']['getIdentityKeyPair'](),c=await this['pqStore']['getRegistrationId']();if(b&&c)return this['identity']={'x25519KeyPair':b,'registrationId':c},this['identity'];const d=await(await getAccount$1())['deriveX25519Identity'](this['userAddress']);return await this['pqStore']['setIdentityKeyPair'](d['x25519KeyPair']),await this['pqStore']['setRegistrationId'](d['registrationId']),this['identity']={'x25519KeyPair':d['x25519KeyPair'],'registrationId':d['registrationId']},this['identity'];}['deriveRegistrationId'](a){const b=a[0x0]<<0x8|a[0x1];return b===0x0?0x1:b;}async['registerDevice'](a){const b=await this['ensureIdentity'](a),c=0x1,d=0x1;let e,f;const g=await this['pqStore']['getSignedPreKeySignature'](c),h=await this['pqStore']['getSignedPreKey'](c),i=await this['pqStore']['getPQPreKey'](d),j=await this['pqStore']['getPQPreKeySignature'](d);if(h&&g&&i&&j)e=h['publicKey'],f=g;else{const u=await this['pqCipher']['generatePreKeyBundle'](c,d,this['config']['prekey_count']);e=u['signedPreKey']['keyPair']['publicKey'],f=u['signedPreKey']['signature'];}const k=await this['generatePreKeyBatch'](this['config']['prekey_count'],a),l=await(await getAccount$1())['get'](a,![],!![]);if(!l?.['pubkey'])throw new MessengerError('IDENTITY_NOT_FOUND','Account\x20not\x20found\x20for\x20'+a);const m=Date['now'](),n=this['generateNonce'](),o='register:'+l['pubkey']+':'+m+':'+n,p=await(await getAccount$1())['signData'](a,o),q=Buffer['from'](p['signature']['slice'](0x2),'hex'),r=await this['pqStore']['getPQPreKey'](d),s=await this['pqStore']['getPQPreKeySignature'](d),t={'userAddress':a,'deviceId':0x1,'registrationId':b['registrationId'],'identityKey':bytesToBase64(b['x25519KeyPair']['publicKey']),'falcon512PublicKey':bytesToBase64(base64ToBytes(l['pubkey'])['slice'](0x1)),'signedPrekey':{'keyId':c,'publicKey':bytesToBase64(e),'signature':bytesToBase64(f)},'prekeys':k,'publicKey':l['pubkey'],'signatureScheme':'Falcon512','signature':bytesToBase64(q),'timestamp':m,'nonce':n};if(r&&s)t['pqPrekey']={'keyId':d,'publicKey':bytesToBase64(r['publicKey']),'signature':bytesToBase64(s)};if(h){let v=null;try{const w=Date['now'](),x=this['generateNonce'](),y='get_bundle:'+a+':'+w+':'+x,z=await(await getAccount$1())['signData'](a,y),A=Buffer['from'](z['signature']['slice'](0x2),'hex'),B=await this['serverClient']['fetchRemoteBundle'](a,a,l['pubkey'],{'signatureScheme':'Falcon512','signature':bytesToBase64(new Uint8Array(A)),'timestamp':w,'nonce':x});if(B?.['signedPrekey']?.['publicKey'])v=B['signedPrekey']['publicKey'];}catch(C){if(!(C instanceof MessengerError&&C['code']==='IDENTITY_NOT_FOUND'))v=bytesToBase64(h['publicKey']);}if(v){const D=new TextEncoder()['encode'](v),E=await(await getAccount$1())['signData'](a,D),F=Buffer['from'](E['signature']['slice'](0x2),'hex');t['oldSignedPrekeySignature']=bytesToBase64(new Uint8Array(F));}}await this['serverClient']['registerDevice'](t),await this['verifyRegistrationComplete'](a);}async['verifyRegistrationComplete'](a,b=0xa,c=0x1f4){for(let d=0x0;d<b;d++)try{const e=await(await getAccount$1())['get'](a,![],!![]);if(!e?.['pubkey'])throw new MessengerError('IDENTITY_NOT_FOUND','Account\x20not\x20found\x20for\x20'+a);const f=Date['now'](),g=this['generateNonce'](),h='prekey_status:'+a+':'+f+':'+g,j=await(await getAccount$1())['signData'](a,h),k=Buffer['from'](j['signature']['slice'](0x2),'hex');await this['serverClient']['getPrekeyStatus'](a,e['pubkey'],{'signatureScheme':'Falcon512','signature':bytesToBase64(new Uint8Array(k)),'timestamp':f,'nonce':g});return;}catch(l){if(l?.['message']?.['includes']('404')||l?.['status']===0x194){if(d<b-0x1){await new Promise(m=>setTimeout(m,c));continue;}}throw l;}throw new MessengerError('REGISTRATION_FAILED','Registration\x20verification\x20failed\x20after\x20'+b+'\x20attempts');}async['isDeviceRegistered'](a){try{if(!await this['pqStore']['getSignedPreKeySignature'](0x1))return![];const b=await(await getAccount$1())['get'](a,![],!![]);if(!b?.['pubkey'])return![];const c=Date['now'](),d=this['generateNonce'](),e='prekey_status:'+a+':'+c+':'+d,f=await(await getAccount$1())['signData'](a,e),g=Buffer['from'](f['signature']['slice'](0x2),'hex');return await this['serverClient']['getPrekeyStatus'](a,b['pubkey'],{'signatureScheme':'Falcon512','signature':bytesToBase64(new Uint8Array(g)),'timestamp':c,'nonce':d}),!![];}catch(h){if(h?.['message']?.['includes']('404')||h?.['status']===0x194)return![];return![];}}async['generatePreKeyBatch'](a,b){if(a<=0x0)return[];const c=[],{generateX25519KeyPair:d}=await import('./w/messenger/pq/crypto.mjs'),e=randomBytes(0x4),f=(e[0x0]<<0x18|e[0x1]<<0x10|e[0x2]<<0x8|e[0x3])&0x7fffff00;for(let g=0x0;g<a;g++){const h=f+g,j=await this['pqStore']['getOneTimePreKey'](h);if(j){const n=bytesToBase64(j['publicKey']),o=await(await getAccount$1())['signData'](b,j['publicKey']),p=Buffer['from'](o['signature']['slice'](0x2),'hex');c['push']({'keyId':h,'publicKey':n,'signature':bytesToBase64(p)});continue;}const k=d(),l=await(await getAccount$1())['signData'](b,k['publicKey']),m=Buffer['from'](l['signature']['slice'](0x2),'hex');await this['pqStore']['setOneTimePreKey'](h,k),c['push']({'keyId':h,'publicKey':bytesToBase64(k['publicKey']),'signature':bytesToBase64(m)});}return c;}async['getPreKeyStatus'](a){const b=await(await getAccount$1())['get'](a,![],!![]);if(!b?.['pubkey'])throw new MessengerError('IDENTITY_NOT_FOUND','Account\x20not\x20found\x20for\x20'+a);const c=Date['now'](),d=this['generateNonce'](),e='prekey_status:'+a+':'+c+':'+d,f=await(await getAccount$1())['signData'](a,e),g=Buffer['from'](f['signature']['slice'](0x2),'hex');return this['serverClient']['getPrekeyStatus'](a,b['pubkey'],{'signatureScheme':'Falcon512','signature':bytesToBase64(new Uint8Array(g)),'timestamp':c,'nonce':d});}async['ensurePreKeys'](a,b=![]){const c=await(await getAccount$1())['get'](a,![],!![]);if(!c?.['pubkey'])throw new MessengerError('IDENTITY_NOT_FOUND','Account\x20not\x20found\x20for\x20'+a);const d=await this['getPreKeyStatus'](a);if(!b&&d['currentCount']>=d['maxAllowed'])return;const e=d['maxAllowed']-d['currentCount'];if(e<=0x0)return;await this['ensureIdentity'](a);const f=await this['generatePreKeyBatch'](e,a);if(f['length']===0x0)return;const g=Date['now'](),h=this['generateNonce'](),i='upload_prekeys:'+c['pubkey']+':'+g+':'+h,j=await(await getAccount$1())['signData'](a,i),k=Buffer['from'](j['signature']['slice'](0x2),'hex');await this['serverClient']['uploadPreKeys']({'userAddress':a,'prekeys':f,'publicKey':c['pubkey'],'signatureScheme':'Falcon512','signature':bytesToBase64(k),'timestamp':g,'nonce':h});}['generateNonce'](){const a=new Uint8Array(0x10);return crypto['getRandomValues'](a),Array['from'](a,c=>c['toString'](0x10)['padStart'](0x2,'0'))['join']('');}async['establishSession'](a,b,c=0x1,d){if(await this['pqCipher']['hasSession'](b,c))return;if(!d){const k=await(await getAccount$1())['get'](a,![],!![]);if(!k?.['pubkey'])throw new MessengerError('IDENTITY_NOT_FOUND','Account\x20not\x20found\x20for\x20'+a);const l=Date['now'](),m=this['generateNonce'](),n=k['pubkey'],o='get_bundle:'+a+':'+l+':'+m,p=await(await getAccount$1())['signData'](a,o),q=Buffer['from'](p['signature']['slice'](0x2),'hex');d=await this['serverClient']['fetchRemoteBundle'](b,a,n,{'signatureScheme':'Falcon512','signature':bytesToBase64(new Uint8Array(q)),'timestamp':l,'nonce':m},c);}const e=d['signedPrekey'];if(!e)throw new MessengerError('IDENTITY_NOT_FOUND','No\x20signed\x20prekey\x20available\x20for\x20'+b);const f=base64ToBytes(d['identityKey']),g=d['falcon512PublicKey']?base64ToBytes(d['falcon512PublicKey']):f,h=base64ToBytes(e['publicKey']),i=base64ToBytes(e['signature']),j={'registrationId':d['registrationId'],'deviceId':c,'identityKey':f,'falcon512PublicKey':g,'signedPreKey':{'keyId':e['keyId'],'publicKey':h,'signature':i},'pqPreKey':d['pqPrekey']?{'keyId':d['pqPrekey']['keyId'],'publicKey':base64ToBytes(d['pqPrekey']['publicKey']),'signature':base64ToBytes(d['pqPrekey']['signature'])}:void 0x0};if(d['oneTimePrekey']){const r=base64ToBytes(d['oneTimePrekey']['publicKey']);j['oneTimePreKey']={'keyId':d['oneTimePrekey']['keyId'],'publicKey':r};}if(d['pqPrekey']){const s=base64ToBytes(d['pqPrekey']['publicKey']),t=base64ToBytes(d['pqPrekey']['signature']);j['pqPreKey']={'keyId':d['pqPrekey']['keyId'],'publicKey':s,'signature':t};}await this['pqCipher']['processPreKeyBundle'](b,c,j);}async['encryptMessage'](a,b,c,d=0x1){let e=0x0;const f=0x5;while(e<=f)try{if(!await this['pqCipher']['hasSession'](b,d))await this['establishSession'](a,b,d);const g=new TextEncoder()['encode'](c),h=await this['pqCipher']['encryptMessage'](b,g,d);return{'type':h['type'],'body':h['body']['buffer'],'registrationId':h['registrationId']};}catch(i){if(e>=f)throw i;try{await this['pqStore']['removeSession'](b,d),e++,await new Promise(j=>setTimeout(j,0x64));}catch(j){throw i;}}throw new MessengerError('ENCRYPTION_FAILED','Encryption\x20failed\x20after\x20multiple\x20attempts');}async['decryptMessage'](a,b,c,d,e=0x1){const f=new TextDecoder(),g=new Uint8Array(c);let h=0x0;const i=0x5,j=await this['pqCipher']['hasSession'](b,e);if(d!==0x3&&!j)throw new Error('收到\x20WHISPER_MESSAGE\x20但无现有会话,需要等待\x20PREKEY_MESSAGE');while(h<=i)try{let k;if(d===0x3)try{return k=await this['pqCipher']['decryptMessage'](b,g,e),f['decode'](k);}catch(l){if(j&&h===0x0){if(a['toLowerCase']()<b['toLowerCase']())throw new Error('PREKEY\x20竞争:我的地址较小,保留我的会话');else return await this['pqStore']['removeSession'](b,e),k=await this['pqCipher']['decryptMessage'](b,g,e),f['decode'](k);}else throw l;}else k=await this['pqCipher']['decryptMessage'](b,g,e);return f['decode'](k);}catch(m){if(h>=i)throw m;try{if(j)await this['pqStore']['removeSession'](b,e);if(d===0x3){}h++,await new Promise(n=>setTimeout(n,0x64));}catch(n){throw m;}}throw new MessengerError('DECRYPTION_FAILED','Decryption\x20failed\x20after\x20multiple\x20attempts');}async['getIdentityKey'](){return bytesToBase64((await this['ensureIdentity']())['x25519KeyPair']['publicKey']);}async['getRegistrationId'](){return(await this['ensureIdentity']())['registrationId'];}},SessionStateManager=class{constructor(a){this['store']=a;}async['snapshotSession'](a,b){const c=await this['store']['getSession'](a,b);return{'sessionData':c?JSON['stringify'](c):null,'timestamp':Date['now']()};}async['rollbackSession'](a,b,c){if(c['sessionData']){const d=JSON['parse'](c['sessionData']);await this['store']['setSession'](a,b,d);}else await this['store']['removeSession'](a,b);}async['commitSession'](a,b){}},DecryptionEngine=class{constructor(a,b){this['store']=a,this['cipher']=new PQSessionCipher(a,b),this['sessionManager']=new SessionStateManager(a);}async['decryptMessage'](a,b,c,d,e=0x1){const f=await this['sessionManager']['snapshotSession'](b,e);try{if(d===0x3)return await this['handlePreKeyMessage'](a,b,c,e,f);else return await this['handleWhisperMessage'](a,b,c,e,f);}catch(g){return await this['sessionManager']['rollbackSession'](b,e,f),{'success':![],'sessionUpdated':![],'sessionRolledBack':!![],'messageType':d===0x3?'PREKEY':'WHISPER','error':g instanceof Error?g['message']:String(g)};}}async['handlePreKeyMessage'](a,b,c,d,e){const f=new TextDecoder(),g=new Uint8Array(c),h=await this['cipher']['decryptMessage'](b,g,d),i=f['decode'](h);await this['sessionManager']['commitSession'](b,d);if(a['toLowerCase']()<b['toLowerCase']()){}return{'success':!![],'plaintext':i,'sessionUpdated':!![],'sessionRolledBack':![],'messageType':'PREKEY'};}async['handleWhisperMessage'](a,b,c,d,e){if(!await this['cipher']['hasSession'](b,d))throw new Error('No\x20session\x20for\x20WHISPER_MESSAGE');const f=new TextDecoder(),g=new Uint8Array(c),h=await this['cipher']['decryptMessage'](b,g,d);return{'success':!![],'plaintext':f['decode'](h),'sessionUpdated':!![],'sessionRolledBack':![],'messageType':'WHISPER'};}};function canonicalizeJson(a){if(a===void 0x0)return'null';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']()['filter'](c=>b[c]!==void 0x0)['map'](c=>'\x22'+c+'\x22:'+canonicalizeJson(b[c]))['join'](',')+'}';}const PULL_COALESCE_TTL_MS=0x5dc;async function getAccount(){const {Account:a}=await import('./w/local/account.mjs');return a['Instance']();}var Messenger=class{['withSendLock'](a){const b=this['sendPromise'];let c;return this['sendPromise']=new Promise(d=>{c=d;}),b['then'](a)['finally'](c);}constructor(a,b){this['userAddress']=null,this['onMessageCallback']=null,this['pollingTimer']=null,this['messageConsecutiveEmptyPulls']=0x0,this['prekeyConsecutiveOkCount']=0x0,this['isPollingRunning']=![],this['waitingMessages']=new Map(),this['failedMessages']=new Map(),this['waitingMessageRetries']=new Map(),this['sendPromise']=Promise['resolve'](),this['pullInFlight']=null,this['lastPullCompletedAt']=0x0,this['userAddress']=a,this['config']={...DEFAULT_MESSENGER_CONFIG,...b},this['session']=new MessengerSession(a,this['config']),this['serverClient']=new MessengerServerClient(this['config']),this['messageStorage']=new MessageStorage(a),this['sessionStateStorage']=new SessionStateStorage(a),this['decryptionEngine']=new DecryptionEngine(this['session']['store'],async()=>{return(await(await getAccount())['deriveX25519Identity'](a))['falcon512KeyPair'];}),this['currentMessageInterval']=this['config']['message_poll_default_interval_ms']??0x168*0x3e8;}['getUserAddress'](){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');return this['userAddress'];}async['getPublicKey'](){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');return(await(await getAccount())['get'](this['userAddress'],![],!![]))?.['pubkey']||'';}['isValidGuardMessage'](a,b){return Boolean(a&&b&&a33a(a)&&a33a(b));}['generateNonce'](){const a=new Uint8Array(0x10);return crypto['getRandomValues'](a),Array['from'](a,c=>c['toString'](0x10)['padStart'](0x2,'0'))['join']('');}async['initialize'](){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');await this['session']['ensureIdentity'](this['userAddress']),await this['session']['registerDevice'](this['userAddress']),await this['session']['ensurePreKeys'](this['userAddress']),this['startPollingTimer']();}async['getPreKeyStatus'](){return this['session']['getPreKeyStatus'](this['userAddress']);}['startPollingTimer'](){if(this['pollingTimer'])clearTimeout(this['pollingTimer']);this['isPollingRunning']=!![],this['scheduleNextPoll']();}['stopPollingTimer'](){this['isPollingRunning']=![],this['pollingTimer']&&(clearTimeout(this['pollingTimer']),this['pollingTimer']=null);}['scheduleNextPoll'](){if(!this['isPollingRunning'])return;const a=this['getNextPollInterval']();this['pollingTimer']=setTimeout(()=>{this['poll']()['catch'](b=>{})['finally'](()=>{this['scheduleNextPoll']();});},a);}['getNextPollInterval'](){if(this['waitingMessages']['size']>0x0)return this['config']['message_poll_waiting_interval_ms']??0x3*0x3e8;return this['currentMessageInterval'];}async['poll'](){if(!this['userAddress'])return;try{const a=await this['pullMessages']();if(a['skipped'])return;a['messages']['length']>0x0?(this['messageConsecutiveEmptyPulls']=0x0,this['currentMessageInterval']=this['config']['message_poll_fast_interval_ms']??0x6*0x3e8):(this['messageConsecutiveEmptyPulls']++,this['messageConsecutiveEmptyPulls']>=(this['config']['message_poll_consecutive_empty_limit']??0x3)&&(this['currentMessageInterval']=this['config']['message_poll_default_interval_ms']??0x168*0x3e8,this['messageConsecutiveEmptyPulls']=0x0));if(a['prekey_status']){if(a['prekey_status']['shouldRefill'])this['prekeyConsecutiveOkCount']=0x0,await this['session']['ensurePreKeys'](this['userAddress'],![]);else{this['prekeyConsecutiveOkCount']++;if(this['prekeyConsecutiveOkCount']>=(this['config']['prekey_poll_consecutive_ok_limit']??0x3))this['prekeyConsecutiveOkCount']=0x0;}}}catch(b){}}['triggerFastPoll'](){this['currentMessageInterval']=this['config']['message_poll_fast_interval_ms']??0x6*0x3e8,this['messageConsecutiveEmptyPulls']=0x0;if(this['isPollingRunning']){if(this['pollingTimer'])clearTimeout(this['pollingTimer']);this['scheduleNextPoll']();}}async['sendMessage'](a,b,c){return this['withSendLock'](async()=>{if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');if(c?.['replyTo']){const z=this['messageStorage']['getMessageById'](c['replyTo']['messageId']);if(!z)throw new MessengerError('INVALID_INPUT','sendMessage.replyTo.messageId\x20'+c['replyTo']['messageId']+'\x20not\x20found\x20in\x20local\x20storage');const A=this['userAddress']['toLowerCase'](),B=a['toLowerCase'](),C=z['fromAddress']['toLowerCase'](),D=z['toAddress']['toLowerCase']();if(!(C===A&&D===B||C===B&&D===A))throw new MessengerError('INVALID_INPUT','sendMessage.replyTo.messageId\x20'+c['replyTo']['messageId']+'\x20does\x20not\x20belong\x20to\x20this\x20conversation');}else{if(b['startsWith']('@REPLY@'))throw new MessengerError('INVALID_INPUT','Message\x20content\x20cannot\x20start\x20with\x20the\x20reserved\x20prefix\x20\x22'+REPLY_HEADER+'\x22.\x20Use\x20the\x20reply\x20feature\x20to\x20send\x20a\x20quoted\x20message,\x20or\x20rephrase\x20your\x20content.');}const d=Date['now'](),e=Date['now'](),f=this['generateNonce'](),g=c?.['replyTo']?buildReplyPlaintext(b,c['replyTo']):b,h=new TextEncoder()['encode'](g)['length'];if(h>0x2800)throw new MessengerError('INVALID_INPUT','Message\x20size\x20('+h+'\x20bytes)\x20exceeds\x20maximum\x20allowed\x20size\x20('+NORMAL_MESSAGE_BYTES_LIMIT+'\x20bytes).\x20Consider\x20using\x20sendZipFile\x20for\x20large\x20content.');await this['pullMessages']();const i=this['messageStorage']['getLastReceivedLeafIndex'](this['userAddress'],a),j=await this['session']['encryptMessage'](this['userAddress'],a,g),k=Buffer['from'](new Uint8Array(j['body']))['toString']('base64'),l=hashPlaintext(g,d,c?.['guardAddress'],c?.['passportAddress'],i),m=await(await getAccount())['get'](this['userAddress'],![],!![]);if(!m)throw new MessengerError('IDENTITY_NOT_FOUND','User\x20account\x20not\x20found');const n=m['pubkey'],o=c?.['guardAddress']||'',p=c?.['passportAddress']||'',q=c?.['network']||'',r=i>=0x0?i['toString']():'',s=c?.['force']?'true':'false',t='send_message:'+this['userAddress']+':'+a+':'+o+':'+p+':'+l+':'+r+':'+n+':'+e+':'+f+':'+s+':'+q,u=await(await getAccount())['signData'](this['userAddress'],t),v=Buffer['from'](u['signature']['slice'](0x2),'hex'),w=bytesToBase64(new Uint8Array(v)),x=await this['serverClient']['sendMessage']({'sender':u['publicKey'],'recipient':a,'ciphertext':k,'plaintextHash':l,'clientTimestamp':d,'msgType':j['type'],'signatureScheme':'Falcon512','signature':w,'timestamp':e,'nonce':f,'guardAddress':c?.['guardAddress'],'passportAddress':c?.['passportAddress'],'network':c?.['network'],'force':c?.['force'],'lastReceivedLeafIndex':i>=0x0?i:void 0x0}),y={'messageId':x['messageId'],'fromAddress':this['userAddress'],'toAddress':a,'plaintextHash':l,'plaintext':g,'replyTo':c?.['replyTo'],'guardAddress':c?.['guardAddress'],'passportAddress':c?.['passportAddress'],'lastReceivedLeafIndex':i,'direction':'sent','status':x['status']==='confirmed'?'confirmed':'pending','msgType':j['type'],'createdAt':d};x['merkleData']&&(y['leafIndex']=x['merkleData']['leafIndex'],y['prevRoot']=x['merkleData']['prevRoot'],y['newRoot']=x['merkleData']['newRoot'],y['serverSignature']=x['merkleData']['serverSignature'],y['serverTimestamp']=x['merkleData']['serverTimestamp'],y['serverPublicKey']=x['merkleData']['serverPublicKey'],this['sessionStateStorage']['updateSessionState'](this['userAddress'],a,{'currentRoot':x['merkleData']['newRoot'],'prevRoot':x['merkleData']['prevRoot'],'lastLeafIndex':x['merkleData']['leafIndex'],'lastSyncAt':Date['now']()}));this['messageStorage']['saveMessage'](y);if(x['pendingMerkleData'])for(const [E,F]of Object['entries'](x['pendingMerkleData'])){const G=this['messageStorage']['getMessage'](E);if(G&&G['status']==='pending')this['messageStorage']['updateMessageStatus'](E,'confirmed',{'leafIndex':F['leafIndex'],'newRoot':F['newRoot'],'serverSignature':F['serverSignature'],'serverTimestamp':F['serverTimestamp'],'serverPublicKey':F['serverPublicKey']});}return this['triggerFastPoll'](),{'messageId':x['messageId'],'status':y['status'],'merkleData':x['merkleData'],'guardList':x['guard_list'],'lastReceivedLeafIndex':i>=0x0?i:void 0x0};});}async['pullMessages'](a){if(this['pullInFlight'])return this['pullInFlight'];if(Date['now']()-this['lastPullCompletedAt']<PULL_COALESCE_TTL_MS)return{'messages':[],'skipped':!![]};const b=this['doPullMessages'](a)['finally'](()=>{this['pullInFlight']=null,this['lastPullCompletedAt']=Date['now']();});return this['pullInFlight']=b,b;}async['doPullMessages'](a){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const b=Date['now'](),c=this['generateNonce'](),d='fetch_messages:'+this['userAddress']+':'+(a||0x64)+':'+b+':'+c,e=(await(await getAccount())['get'](this['userAddress'],![],!![]))?.['pubkey']||'',f=await(await getAccount())['signData'](this['userAddress'],d),g={'signatureScheme':'Falcon512','signature':bytesToBase64(Buffer['from'](f['signature']['slice'](0x2),'hex')),'timestamp':b,'nonce':c},h=await this['serverClient']['pullMessages'](this['userAddress'],e,g,a);if(h['messages']['length']===0x0)return{'messages':[],'prekey_status':h['prekey_status']};const i=[],j=[],k=[...h['messages']]['sort'](function(l,m){return(l['clientTimestamp']||0x0)-(m['clientTimestamp']||0x0);});await this['processWaitingMessages'](i,j);for(const l of k){if(this['waitingMessages']['has'](l['id'])){j['push'](l['id']);continue;}if(this['failedMessages']['has'](l['id'])){j['push'](l['id']);continue;}if(this['messageStorage']['getMessage'](l['id'])){j['push'](l['id']);continue;}const m=await this['tryDecryptMessage'](l);if(m['success']&&m['message']&&m['decryptedData'])this['messageStorage']['saveMessage'](m['message']),i['push'](m['decryptedData']),j['push'](l['id']),this['waitingMessages']['delete'](l['id']);else{if(m['shouldRetry'])this['waitingMessages']['set'](l['id'],l);else this['failedMessages']['set'](l['id'],{'message':l,'error':m['error']||'Unknown\x20error'}),await this['saveFailedMessage'](l,m['error']||'Unknown\x20error'),j['push'](l['id']);}}if(i['length']>0x0&&this['onMessageCallback'])this['onMessageCallback'](i);if(this['waitingMessages']['size']>0x0&&this['isPollingRunning'])this['reschedulePolling']();if(j['length']>0x0&&this['userAddress'])(async()=>{const n=Date['now'](),o=this['generateNonce'](),p=await(await getAccount())['get'](this['userAddress'],![],!![]);if(p?.['pubkey']){const q='ack_messages:'+this['userAddress']+':'+j['join'](',')+':'+p['pubkey']+':'+n+':'+o,r=await(await getAccount())['signData'](this['userAddress'],q),s=Buffer['from'](r['signature']['slice'](0x2),'hex'),t=bytesToBase64(new Uint8Array(s));await this['serverClient']['acknowledgeMessages'](j,r['publicKey'],{'publicKey':r['publicKey'],'signatureScheme':'Falcon512','signature':t,'timestamp':n,'nonce':o});}})()['catch'](n=>{console['warn']('[Messenger]\x20acknowledgeMessages\x20failed\x20(non-fatal,\x20server\x20will\x20resend):\x20'+(n instanceof Error?n['message']:String(n)));});return{'messages':i,'prekey_status':h['prekey_status']};}['getSessionMessages'](a){if(!this['userAddress'])return[];return this['messageStorage']['getMessagesBySession'](this['userAddress'],a);}['getSessionState'](a){if(!this['userAddress'])return;return this['sessionStateStorage']['getSessionState'](this['userAddress'],a);}async['submitChainProof'](a,b,c){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const d=this['sessionStateStorage']['getSessionState'](this['userAddress'],b);if(!d||!d['currentRoot'])throw new MessengerError('SESSION_NOT_ESTABLISHED','No\x20session\x20state\x20found');const e=this['messageStorage']['getMessagesBySession'](this['userAddress'],b),f=e[e['length']-0x1];if(!f||!f['serverPublicKey']||!f['serverSignature'])throw new MessengerError('INVALID_PROOF','No\x20temporal\x20proof\x20(missing\x20server\x20public\x20key\x20or\x20signature),\x20cannot\x20submit\x20Proof\x20to\x20WoWok\x20blockchain');const g=f['serverPublicKey'],h=f['serverSignature'],i={'sessionId':d['sessionId'],'merkleRoot':d['currentRoot'],'messageCount':d['messageCount'],'timestamp':Date['now']()},{CallProof:j}=await import('./proof-BgXYvVg_.mjs')['then'](l=>l['r']),k=await new j({'proof':JSON['stringify'](i),'server_pubkey':g,'server_signature':h,'proof_type':0x1,'description':c||'Messenger\x20session\x20proof\x20for\x20'+this['userAddress']+'\x20<->\x20'+b,'item_count':d['messageCount'],'about_address':b})['call'](a);return{'proofAddress':(k?.['objectChanges'])?.['find'](l=>l['objectType']?.['includes']('Proof'))?.['objectId']||'','txHash':k?.['digest']||''};}['destroy'](){this['stopPollingTimer']();}['disconnect'](){this['destroy']();}['setOnMessageCallback'](a){this['onMessageCallback']=a;}async['sendZipFile'](a,b,c){return this['withSendLock'](async()=>{if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const d=await this['loadFileData'](b),{ZipWriter:e,BlobWriter:f,Uint8ArrayReader:g}=await import('@zip.js/zip.js'),h=c?.['fileName']||a33c['basename'](b)||'file.zip',i=c?.['contentType']||this['detectContentType'](h),j=new f('application/zip'),k=new e(j);await k['add'](h,new g(d)),await k['close']();const l=await j['getData'](),m=new Uint8Array(await l['arrayBuffer']());if(m['length']>0x500000)throw new MessengerError('INVALID_INPUT','ZIP\x20file\x20size\x20('+m['length']+'\x20bytes)\x20exceeds\x20local\x20maximum\x20allowed\x20size\x20('+WTS_FILE_BYTES_LIMIT+'\x20bytes)');const n='0x'+createHash('sha256')['update'](m)['digest']('hex'),o=Buffer['from'](m)['toString']('base64'),p={'fileName':h+'.zip','fileSize':m['length'],'fileHash':n,'contentType':i};await this['pullMessages']();const q=this['messageStorage']['getLastReceivedLeafIndex'](this['userAddress'],a),r=Date['now'](),s=await this['session']['encryptMessage'](this['userAddress'],a,o),t=Buffer['from'](new Uint8Array(s['body']))['toString']('base64'),u=c?.['guardAddress']||'',v=c?.['passportAddress']||'',w=c?.['network']||'',x=hashPlaintext(o,r,u,v,q),y=Date['now'](),z=this['generateNonce'](),A=await(await getAccount())['get'](this['userAddress'],![],!![]);if(!A)throw new MessengerError('IDENTITY_NOT_FOUND','User\x20account\x20not\x20found');const B=A['pubkey'],C=q>=0x0?q['toString']():'',D=c?.['force']?'true':'false',E='send_message:'+this['userAddress']+':'+a+':'+u+':'+v+':'+x+':'+C+':'+B+':'+y+':'+z+':'+D+':'+w,F=await(await getAccount())['signData'](this['userAddress'],E),G=Buffer['from'](F['signature']['slice'](0x2),'hex'),H=bytesToBase64(new Uint8Array(G)),I=await this['serverClient']['sendMessage']({'sender':F['publicKey'],'recipient':a,'ciphertext':t,'plaintextHash':x,'clientTimestamp':r,'msgType':s['type'],'zipMetadata':p,'guardAddress':c?.['guardAddress'],'passportAddress':c?.['passportAddress'],'network':c?.['network'],'force':c?.['force'],'lastReceivedLeafIndex':q>=0x0?q:void 0x0,'signatureScheme':'Falcon512','signature':H,'timestamp':y,'nonce':z}),J={'messageId':I['messageId'],'fromAddress':this['userAddress'],'toAddress':a,'plaintextHash':x,'plaintext':o,'guardAddress':c?.['guardAddress'],'passportAddress':c?.['passportAddress'],'lastReceivedLeafIndex':q,'direction':'sent','status':I['status']==='confirmed'?'confirmed':'pending','msgType':s['type'],'zipMetadata':p,'createdAt':r};I['merkleData']&&(J['leafIndex']=I['merkleData']['leafIndex'],J['prevRoot']=I['merkleData']['prevRoot'],J['newRoot']=I['merkleData']['newRoot'],J['serverSignature']=I['merkleData']['serverSignature'],J['serverTimestamp']=I['merkleData']['serverTimestamp'],J['serverPublicKey']=I['merkleData']['serverPublicKey'],this['sessionStateStorage']['updateSessionState'](this['userAddress'],a,{'currentRoot':I['merkleData']['newRoot'],'prevRoot':I['merkleData']['prevRoot'],'lastLeafIndex':I['merkleData']['leafIndex'],'lastSyncAt':Date['now']()}));this['messageStorage']['saveMessage'](J);if(I['pendingMerkleData'])for(const [K,L]of Object['entries'](I['pendingMerkleData'])){const M=this['messageStorage']['getMessage'](K);if(M&&M['status']==='pending')this['messageStorage']['updateMessageStatus'](K,'confirmed',{'leafIndex':L['leafIndex'],'newRoot':L['newRoot'],'serverSignature':L['serverSignature'],'serverTimestamp':L['serverTimestamp'],'serverPublicKey':L['serverPublicKey']});}return this['triggerFastPoll'](),{'messageId':I['messageId'],'status':J['status'],'merkleData':I['merkleData'],'guardList':I['guard_list'],'lastReceivedLeafIndex':q>=0x0?q:void 0x0};});}async['loadFileData'](a){if(a['startsWith']('http://')||a['startsWith']('https://')){const d=new AbortController(),e=setTimeout(()=>d['abort'](),this['config']['requestTimeoutMs']??0x7530);try{const f=await fetch(a,{'signal':d['signal']});if(!f['ok'])throw new MessengerError('NETWORK_ERROR','Failed\x20to\x20fetch\x20file\x20from\x20'+a+':\x20'+f['statusText']);const g=await f['arrayBuffer']();return new Uint8Array(g);}finally{clearTimeout(e);}}const b=a33c['resolve'](a);if(!a33d['existsSync'](b))throw new MessengerError('FILE_NOT_FOUND','File\x20not\x20found:\x20'+b);const c=a33d['readFileSync'](b);return new Uint8Array(c);}['detectContentType'](a){switch(a33c['extname'](a)['toLowerCase']()){case'.wts':return'wts';case'.wip':return'wip';default:return'zip';}}async['_createSignedRequest'](a){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const b=Date['now'](),c=this['generateNonce'](),d=b+':'+c+':'+canonicalizeJson(a),e=await(await getAccount())['signData'](this['userAddress'],d),f=Buffer['from'](e['signature']['slice'](0x2),'hex'),g=bytesToBase64(new Uint8Array(f)),h=await(await getAccount())['get'](this['userAddress'],![],!![]);if(!h||!h['pubkey'])throw new MessengerError('IDENTITY_NOT_FOUND','Account\x20public\x20key\x20not\x20found');return{'userAddress':this['userAddress'],'publicKey':h['pubkey'],'signatureScheme':'Falcon512','signature':g,'timestamp':b,'nonce':c,'data':a};}['_validateAddresses'](a){const b=[],c=[];for(const d of a)if(a33a(d))b['push'](d);else c['push'](d);return{'valid':b,'invalid':c};}async['addToBlacklist'](a){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const {valid:b,invalid:c}=this['_validateAddresses'](a);if(c['length']>0x0)return{'success':![],'operation':'add','modifiedCount':0x0,'currentCount':0x0,'maxCount':0x0,'invalidAddresses':c,'message':'Invalid\x20addresses:\x20'+c['join'](',\x20')};const d={'addresses':b},e=await this['_createSignedRequest'](d);return this['serverClient']['addToBlacklist'](this['userAddress'],e);}async['removeFromBlacklist'](a){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const {valid:b,invalid:c}=this['_validateAddresses'](a);if(c['length']>0x0)return{'success':![],'operation':'remove','modifiedCount':0x0,'currentCount':0x0,'maxCount':0x0,'invalidAddresses':c,'message':'Invalid\x20addresses:\x20'+c['join'](',\x20')};const d={'addresses':b},e=await this['_createSignedRequest'](d);return this['serverClient']['removeFromBlacklist'](this['userAddress'],e);}async['clearBlacklist'](){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const a=await this['_createSignedRequest']({});return this['serverClient']['clearBlacklist'](this['userAddress'],a);}async['getBlacklist'](){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const a=await this['_createSignedRequest']({});return this['serverClient']['getBlacklist'](this['userAddress'],a);}async['existInBlacklist'](a){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const {valid:b,invalid:c}=this['_validateAddresses'](a);if(c['length']>0x0)return{'success':![],'operation':'exist','modifiedCount':0x0,'currentCount':0x0,'maxCount':0x0,'invalidAddresses':c,'message':'Invalid\x20addresses:\x20'+c['join'](',\x20')};const d={'addresses':b},e=await this['_createSignedRequest'](d);return this['serverClient']['existInBlacklist'](this['userAddress'],e);}async['addToFriendsList'](a){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const {valid:b,invalid:c}=this['_validateAddresses'](a);if(c['length']>0x0)return{'success':![],'operation':'add','modifiedCount':0x0,'currentCount':0x0,'maxCount':0x0,'invalidAddresses':c,'message':'Invalid\x20addresses:\x20'+c['join'](',\x20')};const d={'addresses':b},e=await this['_createSignedRequest'](d);return this['serverClient']['addToFriendsList'](this['userAddress'],e);}async['removeFromFriendsList'](a){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const {valid:b,invalid:c}=this['_validateAddresses'](a);if(c['length']>0x0)return{'success':![],'operation':'remove','modifiedCount':0x0,'currentCount':0x0,'maxCount':0x0,'invalidAddresses':c,'message':'Invalid\x20addresses:\x20'+c['join'](',\x20')};const d={'addresses':b},e=await this['_createSignedRequest'](d);return this['serverClient']['removeFromFriendsList'](this['userAddress'],e);}async['clearFriendsList'](){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const a=await this['_createSignedRequest']({});return this['serverClient']['clearFriendsList'](this['userAddress'],a);}async['getFriendsList'](){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const a=await this['_createSignedRequest']({});return this['serverClient']['getFriendsList'](this['userAddress'],a);}async['existInFriendsList'](a){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const {valid:b,invalid:c}=this['_validateAddresses'](a);if(c['length']>0x0)return{'success':![],'operation':'exist','modifiedCount':0x0,'currentCount':0x0,'maxCount':0x0,'invalidAddresses':c,'message':'Invalid\x20addresses:\x20'+c['join'](',\x20')};const d={'addresses':b},e=await this['_createSignedRequest'](d);return this['serverClient']['existInFriendsList'](this['userAddress'],e);}async['addToGuardList'](a){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const b={'guards':a},c=await this['_createSignedRequest'](b);return this['serverClient']['addToGuardList'](this['userAddress'],c);}async['removeFromGuardList'](a){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const {valid:b,invalid:c}=this['_validateAddresses'](a);if(c['length']>0x0)return{'success':![],'operation':'remove','modifiedCount':0x0,'currentCount':0x0,'maxCount':0x0,'invalidAddresses':c,'message':'Invalid\x20addresses:\x20'+c['join'](',\x20')};const d={'addresses':b},e=await this['_createSignedRequest'](d);return this['serverClient']['removeFromGuardList'](this['userAddress'],e);}async['getGuardList'](){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const a=await this['_createSignedRequest']({});return this['serverClient']['getGuardList'](this['userAddress'],a);}async['getSettings'](){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const a=await this['_createSignedRequest']({});return this['serverClient']['getSettings'](this['userAddress'],a);}async['setSettings'](a){if(!this['userAddress'])throw new MessengerError('IDENTITY_NOT_FOUND','User\x20address\x20not\x20set');const b={'allowStrangerMessages':a['allowStrangerMessages'],'maxInboxSize':a['maxInboxSize']},c=await this['_createSignedRequest'](b);return this['serverClient']['updateSettings'](this['userAddress'],c);}async['tryDecryptMessage'](a){try{const b=Uint8Array['from'](Buffer['from'](a['bodyB64'],'base64')),c=await this['decryptionEngine']['decryptMessage'](this['userAddress'],a['from'],b['buffer'],a['msgType']);if(!c['success'])return{'success':![],'shouldRetry':this['isRetryableError'](c['error']||''),'error':c['error'],'sessionUpdated':c['sessionUpdated']};const d=c['plaintext'],e=parseReplyPlaintext(d);if(!a['clientTimestamp'])throw new Error('Missing\x20clientTimestamp\x20for\x20message\x20'+a['id']);if(!a['plaintextHash'])throw new Error('Missing\x20plaintextHash\x20for\x20message\x20'+a['id']);const f=verifyMessage({'messageId':a['id'],'plaintext':d,'plaintextHash':a['plaintextHash'],'createdAt':a['clientTimestamp'],'guardAddress':a['guardAddress'],'passportAddress':a['passportAddress'],'lastReceivedLeafIndex':a['lastReceivedLeafIndex'],'serverSignature':a['merkleMetadata']?.['serverSignature'],'serverPublicKey':a['merkleMetadata']?.['serverPublicKey'],'merkleMetadata':a['merkleMetadata']?{'prevRoot':a['merkleMetadata']['prevRoot'],'newRoot':a['merkleMetadata']['newRoot'],'serverTimestamp':a['merkleMetadata']['serverTimestamp'],'leafIndex':a['merkleMetadata']['leafIndex'],'proofSiblings':a['merkleMetadata']['proofSiblings'],'proofIndices':a['merkleMetadata']['proofIndices']}:void 0x0});if(!f['valid'])throw new Error(f['error']);const g={'messageId':a['id'],'fromAddress':a['from'],'toAddress':this['userAddress'],'plaintextHash':a['plaintextHash'],'plaintext':d,'replyTo':e['replyTo'],'guardAddress':a['guardAddress'],'passportAddress':a['passportAddress'],'lastReceivedLeafIndex':a['lastReceivedLeafIndex'],'direction':'received','status':'decrypted','msgType':a['msgType'],'leafIndex':a['merkleMetadata']?.['leafIndex'],'prevRoot':a['merkleMetadata']?.['prevRoot'],'newRoot':a['merkleMetadata']?.['newRoot'],'serverSignature':a['merkleMetadata']?.['serverSignature'],'serverTimestamp':a['merkleMetadata']?.['serverTimestamp'],'serverPublicKey':a['merkleMetadata']?.['serverPublicKey'],'createdAt':a['clientTimestamp'],'receivedAt':Date['now'](),'zipMetadata':a['zipMetadata']};if(a['merkleMetadata'])this['sessionStateStorage']['updateSessionState'](this['userAddress'],a['from'],{'currentRoot':a['merkleMetadata']['newRoot'],'prevRoot':a['merkleMetadata']['prevRoot'],'lastLeafIndex':a['merkleMetadata']['leafIndex'],'lastSyncAt':Date['now']()});const h=a['merkleMetadata']?.['serverTimestamp']||a['clientTimestamp']||Date['now']();if(a['lastReceivedLeafIndex']!==void 0x0&&a['lastReceivedLeafIndex']>=0x0){const i=this['messageStorage']['getMessagesBySession'](this['userAddress'],a['from'])['filter'](j=>j['direction']==='sent'&&j['status']==='confirmed'&&j['leafIndex']!==void 0x0&&j['leafIndex']<=a['lastReceivedLeafIndex']);for(const j of i)this['messageStorage']['updateMessageStatus'](j['messageId'],'read');}return{'success':!![],'shouldRetry':![],'message':g,'decryptedData':{'id':a['id'],'from':a['from'],'plaintext':d,'timestamp':h,'merkleVerified':!!a['merkleMetadata'],'merkleData':a['merkleMetadata']?{'leafIndex':a['merkleMetadata']['leafIndex'],'rootHash':a['merkleMetadata']['newRoot']}:void 0x0},'sessionUpdated':c['sessionUpdated']};}catch(k){const l=k instanceof Error?k['message']:String(k);return{'success':![],'shouldRetry':this['isRetryableError'](l),'error':l};}}['isRetryableError'](a){return[/message number/i,/chain key/i,/session not found/i,/prekey not found/i,/PREKEY 竞争:我的地址较小,保留我的会话/i,/The operation failed for an operation-specific reason/i,/DOMException/i,/收到 WHISPER_MESSAGE 但无现有会话,需要等待 PREKEY_MESSAGE/i]['some'](b=>b['test'](a));}async['processWaitingMessages'](a,b){if(this['waitingMessages']['size']===0x0)return;const c=[],d=Array['from'](this['waitingMessages']['values']())['sort'](function(e,f){return(e['clientTimestamp']||0x0)-(f['clientTimestamp']||0x0);});for(const e of d){const f=e['id'],g=await this['tryDecryptMessage'](e);if(g['success']&&g['message']&&g['decryptedData'])this['messageStorage']['saveMessage'](g['message']),a['push'](g['decryptedData']),b['push'](f),c['push'](f),this['waitingMessageRetries']['delete'](f);else{if(!g['shouldRetry'])this['failedMessages']['set'](f,{'message':e,'error':g['error']||'Unknown\x20error'}),await this['saveFailedMessage'](e,g['error']||'Unknown\x20error'),b['push'](f),c['push'](f),this['waitingMessageRetries']['delete'](f);else{const h=(this['waitingMessageRetries']['get'](f)||0x0)+0x1;if(h>=0x3)this['failedMessages']['set'](f,{'message':e,'error':g['error']||'Retry\x20limit\x20exceeded'}),await this['saveFailedMessage'](e,g['error']||'Retry\x20limit\x20exceeded'),b['push'](f),c['push'](f),this['waitingMessageRetries']['delete'](f);else this['waitingMessageRetries']['set'](f,h);}}}for(const i of c)this['waitingMessages']['delete'](i);if(c['length']>0x0){}}async['saveFailedMessage'](a,b){const c={'messageId':a['id'],'fromAddress':a['from'],'toAddress':this['userAddress'],'plaintextHash':a['plaintextHash']||'','guardAddress':a['guardAddress'],'passportAddress':a['passportAddress'],'lastReceivedLeafIndex':a['lastReceivedLeafIndex'],'direction':'received','status':'decrypt_failed','msgType':a['msgType'],'leafIndex':a['merkleMetadata']?.['leafIndex'],'prevRoot':a['merkleMetadata']?.['prevRoot'],'newRoot':a['merkleMetadata']?.['newRoot'],'serverSignature':a['merkleMetadata']?.['serverSignature'],'serverTimestamp':a['merkleMetadata']?.['serverTimestamp'],'serverPublicKey':a['merkleMetadata']?.['serverPublicKey'],'createdAt':a['clientTimestamp']||Date['now'](),'receivedAt':Date['now'](),'zipMetadata':a['zipMetadata'],'decryptError':b,'decryptAttempts':0x1,'lastDecryptAttemptAt':Date['now']()};this['messageStorage']['saveMessage'](c);}['reschedulePolling'](){if(!this['isPollingRunning']||!this['pollingTimer'])return;clearTimeout(this['pollingTimer']),this['pollingTimer']=null,this['scheduleNextPoll']();}['getFailedMessages'](){return Array['from'](this['failedMessages']['entries']())['map'](([a,b])=>({'messageId':a,'from':b['message']['from'],'error':b['error'],'leafIndex':b['message']['merkleMetadata']?.['leafIndex']}));}['clearFailedMessages'](a){if(a)this['failedMessages']['delete'](a);else this['failedMessages']['clear']();}['getWaitingMessageCount'](){return this['waitingMessages']['size'];}};export{canonicalizeJson as n,Messenger as t};
@@ -0,0 +1 @@
1
+ import{o as a34a}from'./exception-o3XVk35a.mjs';import{ct as a34b}from'./common-DhtZTgkX.mjs';import{getWowokWorkspaceDir}from'./w/local/util.mjs';import{LocalMark}from'./w/local/local.mjs';import{r as a34c}from'./logger-Da7dKX2V.mjs';import{Account}from'./w/local/account.mjs';import{Et as a34d,h as a34e,p as a34f}from'./util-DttciwF8.mjs';import{DEFAULT_MESSENGER_CONFIG,MAX_QUERY_LIMIT,MessengerError,WTS_SCHEMA_URL}from'./w/messenger/types.mjs';import{n as a34g,t as a34h}from'./messenger-Cq0kGhTg.mjs';import{MessageStorage,MessengerPersistStorage}from'./w/messenger/storage.mjs';import{generateNonce,hashPlaintext,verifyFalcon512Signature,verifySingleMerkleRoot}from'./w/messenger/crypto.mjs';import{parseReplyPlaintext}from'./w/messenger/reply.mjs';import*as a34i from'path';import*as a34j from'fs';import{createHash}from'crypto';const logger$1=a34c('messenger:manager'),MAX_ACCOUNTS=0x14,sleep=a=>new Promise(b=>setTimeout(b,a)),MESSENGER_INIT_SPACING_MS=0x3e8;var MessengerManager=class{constructor(a){this['accounts']=new Map(),this['messageListeners']=new Set(),this['isWatching']=![],this['accountRefreshTimer']=null,this['pollingLockedAccounts']=new Set(),this['lastInitCompletedAt']=0x0,this['config']={...DEFAULT_MESSENGER_CONFIG,...a?.['messengerConfig']},this['instanceId']=a?.['instanceId']||'default',this['persistStorage']=new MessengerPersistStorage();}['findAccount'](a){return this['accounts']['get'](a['toLowerCase']());}['getConfig'](){return this['config'];}['get_accounts'](){return Array['from'](this['accounts']['values']())['map'](a=>a['address']);}async['refresh_accounts'](){const {Account:a}=await import('./w/local/account.mjs'),b=await a['Instance']()['list_messenger_accounts'](),c=new Set(this['accounts']['keys']()),d=new Set(b['map'](e=>e['address']['toLowerCase']()));for(const e of c)if(!d['has'](e))this['remove_account_internal'](e);for(const f of b){const g=f['address']['toLowerCase']();if(!this['accounts']['has'](g))try{await this['add_account_internal'](f['address']);}catch(h){}}if(this['accounts']['size']>0x0&&!this['isWatching'])this['startPolling']();else{if(this['accounts']['size']===0x0&&this['isWatching'])this['stopPolling']();}await this['syncAllContactLists']();}async['start'](){await this['refresh_accounts']();for(const a of this['accounts']['values']()){if(!a['initialized']||!a['messenger'])continue;this['persistStorage']['tryAcquirePollingLock'](a['address'],this['instanceId'])&&(this['pollingLockedAccounts']['add'](a['address']['toLowerCase']()),a['messenger']['setOnMessageCallback'](b=>{for(const c of this['messageListeners'])c(b);}));}if(!this['isWatching'])this['startPolling']();if(this['accountRefreshTimer'])clearInterval(this['accountRefreshTimer']);this['accountRefreshTimer']=setInterval(()=>{this['refresh_accounts']()['catch'](b=>{});},this['config']['watch_interval_ms']);}['stop'](){this['accountRefreshTimer']&&(clearInterval(this['accountRefreshTimer']),this['accountRefreshTimer']=null);for(const a of this['pollingLockedAccounts'])this['persistStorage']['releasePollingLock'](a,this['instanceId']);this['pollingLockedAccounts']['clear'](),this['stopPolling'](),this['clear_accounts']();}async['ensureAccountReady'](a){const b=a['toLowerCase'](),c=this['accounts']['get'](b);if(c?.['initialized'])return c;if(c?.['initializing']){await c['initializing'];const d=this['accounts']['get'](b);if(d?.['initialized'])return d;throw new MessengerError('SERVER_ERROR','Account\x20'+a+'\x20initialization\x20failed');}return this['initializeAccount'](b);}async['initializeAccount'](a){const b=a['toLowerCase']();if(this['accounts']['size']>=MAX_ACCOUNTS)throw new MessengerError('INVALID_INPUT','Maximum\x20'+MAX_ACCOUNTS+'\x20accounts\x20allowed');const c=this['doInitialize'](b),d={'address':b,'messenger':null,'initialized':![],'initializing':c,'contactLists':{'friends':[],'guards':[],'lastUpdatedAt':0x0}};this['accounts']['set'](b,d);try{await c;const e=this['accounts']['get'](b);if(!e||!e['initialized'])throw new MessengerError('SERVER_ERROR','Account\x20'+a+'\x20initialization\x20failed');return e;}catch(f){this['accounts']['delete'](b);throw f;}}async['doInitialize'](a){const b=new a34h(a,this['config']);try{await b['initialize']();}catch(d){throw new MessengerError('SERVER_ERROR','Failed\x20to\x20initialize\x20account\x20'+a+':\x20'+(d instanceof Error?d['message']:String(d)));}const c=Date['now']()-this['lastInitCompletedAt'];if(c<MESSENGER_INIT_SPACING_MS)await sleep(MESSENGER_INIT_SPACING_MS-c);this['lastInitCompletedAt']=Date['now'](),this['accounts']['set'](a,{'address':a,'messenger':b,'initialized':!![],'contactLists':{'friends':[],'guards':[],'lastUpdatedAt':0x0}}),this['isWatching']&&(this['persistStorage']['tryAcquirePollingLock'](a,this['instanceId'])&&(this['pollingLockedAccounts']['add'](a),b['setOnMessageCallback'](e=>{for(const f of this['messageListeners'])f(e);})));}async['add_account_internal'](a){await this['ensureAccountReady'](a);}['remove_account_internal'](a){const b=a['toLowerCase'](),c=this['accounts']['get'](b);if(!c)return![];if(c['initialized']&&c['messenger'])c['messenger']['disconnect']();return this['persistStorage']['releasePollingLock'](b,this['instanceId']),this['pollingLockedAccounts']['delete'](b),this['accounts']['delete'](b);}['clear_accounts'](){this['stopPolling']();for(const a of this['accounts']['values']())if(a['messenger'])a['messenger']['disconnect']();this['accounts']['clear']();}async['send'](a,b,c,d){const {Account:e}=await import('./w/local/account.mjs'),f=await e['Instance']()['get'](a,![]);if(!f)throw new MessengerError('IDENTITY_NOT_FOUND','Account\x20'+a+'\x20not\x20found');if(!f['messenger']){if(!d?.['enable_messenger'])throw new MessengerError('ACCOUNT_MESSENGER_NOT_ENABLED','Account\x20messenger\x20not\x20enabled.\x20Use\x20enable_messenger\x20parameter\x20to\x20enable\x20it\x20automatically.');await e['Instance']()['set_messenger'](a,!![]);}const g=await this['ensureAccountReady'](a);try{return await g['messenger']['sendMessage'](b,c,{'guardAddress':d?.['guardAddress'],'passportAddress':d?.['passportAddress'],'force':d?.['force'],'network':d?.['network'],'replyTo':d?.['replyTo']});}catch(h){if(h instanceof MessengerError&&h['code']==='IDENTITY_NOT_FOUND'){const i=h['message']||'',j=a['toLowerCase'](),k=b['toLowerCase'](),l=i['toLowerCase']()['includes'](j);if((i['toLowerCase']()['includes'](k)||i['toLowerCase']()['includes']('recipient')||i['toLowerCase']()['includes']('no\x20signed\x20prekey'))&&!l)throw new MessengerError('IDENTITY_NOT_FOUND','Recipient\x20'+b+'\x20is\x20not\x20registered\x20on\x20the\x20messenger\x20server.\x20Please\x20ask\x20them\x20to\x20enable\x20messenger\x20first.');logger$1['info']('Sender\x20'+a+'\x20not\x20found\x20on\x20server,\x20re-registering...'),await this['reinitializeAccount'](a);const m=this['accounts']['get'](a['toLowerCase']());if(m?.['initialized'])return await m['messenger']['sendMessage'](b,c,{'guardAddress':d?.['guardAddress'],'passportAddress':d?.['passportAddress'],'force':d?.['force'],'network':d?.['network'],'replyTo':d?.['replyTo']});}throw h;}}async['reinitializeAccount'](a){const b=a['toLowerCase'](),c=this['accounts']['get'](b);if(c){if(c['messenger'])c['messenger']['disconnect']();this['accounts']['delete'](b);}await this['initializeAccount'](b);}async['send_file'](a,b,c,d){const {Account:e}=await import('./w/local/account.mjs'),f=await e['Instance']()['get'](a,![]);if(!f)throw new MessengerError('IDENTITY_NOT_FOUND','Account\x20'+a+'\x20not\x20found');if(!f['messenger']){if(!d?.['enable_messenger'])throw new MessengerError('ACCOUNT_MESSENGER_NOT_ENABLED','Account\x20messenger\x20not\x20enabled.\x20Use\x20enable_messenger\x20parameter\x20to\x20enable\x20it\x20automatically.');await e['Instance']()['set_messenger'](a,!![]);}const g=await this['ensureAccountReady'](a);try{return await g['messenger']['sendZipFile'](b,c,{'fileName':d?.['fileName'],'contentType':d?.['contentType'],'guardAddress':d?.['guardAddress'],'passportAddress':d?.['passportAddress'],'force':d?.['force'],'network':d?.['network']});}catch(h){if(h instanceof MessengerError&&h['code']==='IDENTITY_NOT_FOUND'){const i=h['message']||'',j=a['toLowerCase'](),k=b['toLowerCase'](),l=i['toLowerCase']()['includes'](j);if((i['toLowerCase']()['includes'](k)||i['toLowerCase']()['includes']('recipient')||i['toLowerCase']()['includes']('no\x20signed\x20prekey'))&&!l)throw new MessengerError('IDENTITY_NOT_FOUND','Recipient\x20'+b+'\x20is\x20not\x20registered\x20on\x20the\x20messenger\x20server.\x20Please\x20ask\x20them\x20to\x20enable\x20messenger\x20first.');logger$1['info']('Sender\x20'+a+'\x20not\x20found\x20on\x20server,\x20re-registering...'),await this['reinitializeAccount'](a);const m=this['accounts']['get'](a['toLowerCase']());if(m?.['initialized'])return await m['messenger']['sendZipFile'](b,c,{'fileName':d?.['fileName'],'contentType':d?.['contentType'],'guardAddress':d?.['guardAddress'],'passportAddress':d?.['passportAddress'],'force':d?.['force'],'network':d?.['network']});}throw h;}}async['queryMessages'](a){let b=[];const c=a?.['peerAddress']!==void 0x0?await a34f(a['peerAddress']):void 0x0;if(a?.['account']!==void 0x0){const f=a['account']['toLowerCase'](),g=this['accounts']['get'](f);if(g?.['messenger']){const i=g['messenger']['pullMessages']();if(a?.['sync']!==![])await i;else i['catch'](()=>{});}const h=new MessageStorage(f);if(c)b=h['getMessagesBySession'](f,c);else b=h['getAllMessages'](f);}else for(const j of this['accounts']['values']()){if(j['messenger']){const l=j['messenger']['pullMessages']();if(a?.['sync']!==![])await l;else l['catch'](()=>{});}const k=new MessageStorage(j['address']);if(c){const m=k['getMessagesBySession'](j['address'],c);b['push'](...m);}else{const n=k['getAllMessages'](j['address']);b['push'](...n);}}if(a){const o=c;b=b['filter'](p=>{const q=a?.['account']!==void 0x0?a['account']['toLowerCase']():void 0x0;if(q!==void 0x0){const s=p['fromAddress']['toLowerCase'](),t=p['toAddress']['toLowerCase']();if(s!==q&&t!==q)return![];}if(a['direction']&&p['direction']!==a['direction'])return![];if(a['status']&&p['status']!==a['status'])return![];if(a['msgType']!==void 0x0&&p['msgType']!==a['msgType'])return![];if(a['contentType'])switch(a['contentType']){case'text':if(p['msgType']!==0x1)return![];break;case'zip':if(!p['zipMetadata'])return![];break;case'wts':if(!p['zipMetadata']||p['zipMetadata']?.['contentType']!=='wts')return![];break;case'wip':if(!p['zipMetadata']||p['zipMetadata']?.['contentType']!=='wip')return![];break;}if(a['peerAddress']&&o){const u=o['toLowerCase'](),v=p['fromAddress']['toLowerCase'](),w=p['toAddress']['toLowerCase']();if(q!==void 0x0&&u===q){if(v!==q||w!==q)return![];}else{if(q!==void 0x0&&!(v===q&&w===u||v===u&&w===q))return![];else{if(q===void 0x0&&v!==u&&w!==u)return![];}}}const r=a['timeField']||'createdAt';if(a['startTime']!==void 0x0||a['endTime']!==void 0x0){const x=p[r];if(x!==void 0x0){if(a['startTime']!==void 0x0&&x<a['startTime'])return![];if(a['endTime']!==void 0x0&&x>a['endTime'])return![];}}if(a['createdAtStart']!==void 0x0&&p['createdAt']<a['createdAtStart'])return![];if(a['createdAtEnd']!==void 0x0&&p['createdAt']>a['createdAtEnd'])return![];if(a['receivedAtStart']!==void 0x0){if(p['receivedAt']===void 0x0||p['receivedAt']<a['receivedAtStart'])return![];}if(a['receivedAtEnd']!==void 0x0){if(p['receivedAt']===void 0x0||p['receivedAt']>a['receivedAtEnd'])return![];}if(a['serverTimestampStart']!==void 0x0){if(p['serverTimestamp']===void 0x0||p['serverTimestamp']<a['serverTimestampStart'])return![];}if(a['serverTimestampEnd']!==void 0x0){if(p['serverTimestamp']===void 0x0||p['serverTimestamp']>a['serverTimestampEnd'])return![];}if(a['decryptedOnly']&&!p['plaintext'])return![];if(a['confirmedOnly']&&p['status']!=='confirmed')return![];if(a['arkConfirmedOnly']){if(!p['arkConfirmed'])return![];}if(a['proofedOnly']){if(!p['proof'])return![];}if(a['arkTimestampStart']!==void 0x0){if(p['arkConfirmed']===void 0x0||p['arkConfirmed']['timestamp']<a['arkTimestampStart'])return![];}if(a['arkTimestampEnd']!==void 0x0){if(p['arkConfirmed']===void 0x0||p['arkConfirmed']['timestamp']>a['arkTimestampEnd'])return![];}if(a['hasLastReceivedIndexOnly']){if(p['lastReceivedLeafIndex']===void 0x0||p['lastReceivedLeafIndex']===null)return![];}if(a['lastReceivedIndexMin']!==void 0x0){if(p['lastReceivedLeafIndex']===void 0x0||p['lastReceivedLeafIndex']<a['lastReceivedIndexMin'])return![];}if(a['lastReceivedIndexMax']!==void 0x0){if(p['lastReceivedLeafIndex']===void 0x0||p['lastReceivedLeafIndex']>a['lastReceivedIndexMax'])return![];}if(a['keyword']&&p['plaintext']){if(!p['plaintext']['toLowerCase']()['includes'](a['keyword']['toLowerCase']()))return![];}if(a['listFilterMode']&&a['listFilterMode']!=='any'){const y=this['findAccount'](p['toAddress']);if(!y)return![];const z=p['fromAddress']['toLowerCase'](),A=y['contactLists'],B=new Set(A['friends']['map'](G=>G['toLowerCase']())),C=new Set(A['guards']['map'](G=>G['guardAddress']['toLowerCase']())),D=B['has'](z),E=C['has'](z),F=!D&&!E;switch(a['listFilterMode']){case'friends':if(!D)return![];break;case'guard':if(!E)return![];break;case'stranger':if(!F)return![];break;}if(a['customListFilter']){const {includeAddresses:G,excludeAddresses:H,relation:relation='union'}=a['customListFilter'];if(H){if(new Set(H['map'](I=>I['toLowerCase']()))['has'](z))return![];}if(G&&G['length']>0x0){const I=new Set(G['map'](J=>J['toLowerCase']()))['has'](z);if(relation==='union'){const J=a['listFilterMode']==='friends'&&D||a['listFilterMode']==='guard'&&E||a['listFilterMode']==='stranger'&&F;if(!I&&!J)return![];}else{if(!I)return![];}}}}if(a['viewed']!==void 0x0){const K=p['viewedAt']!==void 0x0;if(a['viewed']!==K)return![];}if(a['viewedAtStart']!==void 0x0){if(p['viewedAt']===void 0x0||p['viewedAt']<a['viewedAtStart'])return![];}if(a['viewedAtEnd']!==void 0x0){if(p['viewedAt']===void 0x0||p['viewedAt']>a['viewedAtEnd'])return![];}return!![];});}const d=a?.['sortOrder']??'desc',e=a?.['timeField']||'createdAt';b['sort']((p,q)=>{const r=p[e]||0x0,s=q[e]||0x0;return d==='asc'?r-s:s-r;});if(b['some'](p=>p['plaintext']!==void 0x0)){const {parseReplyPlaintext:p}=await import('./w/messenger/reply.mjs');b=b['map'](q=>{if(q['plaintext']===void 0x0)return q;const r=p(q['plaintext']);if(!r['replyTo'])return q;return{...q,'plaintext':r['content']};});}return b;}async['watch'](a){const b=await this['queryMessages'](a),c=this['config']['defaultQueryLimit']??0x32,d=Math['min'](a?.['limit']??c,MAX_QUERY_LIMIT),e=a?.['offset']??0x0;return b['slice'](e,e+d);}['startPolling'](){if(this['isWatching'])return;this['isWatching']=!![];}['stopPolling'](){this['isWatching']=![];}['onMessage'](a){this['messageListeners']['add'](a);}['offMessage'](a){this['messageListeners']['delete'](a);}['destroy'](){this['stop'](),this['messageListeners']['clear']();}async['syncContactLists'](a){const b=this['findAccount'](a);if(!b)return{'success':![],'friends':[],'guards':[],'error':'Account\x20not\x20found:\x20'+a};try{const [c,d]=await Promise['all']([b['messenger']['getFriendsList'](),b['messenger']['getGuardList']()]),e=d['currentGuardList']||[];return b['contactLists']={'friends':c,'guards':e,'lastUpdatedAt':Date['now']()},{'success':!![],'friends':c,'guards':e};}catch(f){return{'success':![],'friends':b['contactLists']['friends'],'guards':b['contactLists']['guards'],'error':f instanceof Error?f['message']:String(f)};}}async['syncAllContactLists'](){const a=new Map();for(const b of this['accounts']['values']()){const c=await this['syncContactLists'](b['address']);a['set'](b['address'],c);}return a;}['getContactLists'](a){return this['findAccount'](a)?.['contactLists'];}['setContactLists'](a,b){const c=this['findAccount'](a);if(!c)return![];return c['contactLists']={...c['contactLists'],...b,'lastUpdatedAt':Date['now']()},!![];}['isStranger'](a,b){const c=this['findAccount'](a);if(!c)return!![];const d=b['toLowerCase'](),e=c['contactLists'],f=e['friends']['some'](h=>h['toLowerCase']()===d),g=e['guards']['some'](h=>h['guardAddress']['toLowerCase']()===d);return!f&&!g;}['recordGuardSender'](a,b){const c=this['findAccount'](a);if(!c)return![];const d=b['toLowerCase']();return!c['contactLists']['guards']['some'](e=>e['guardAddress']['toLowerCase']()===d)&&(c['contactLists']['guards']['push']({'guardAddress':b,'passportValiditySeconds':0x15180}),c['contactLists']['lastUpdatedAt']=Date['now']()),!![];}['generateNonce'](){return generateNonce();}async['watch_paginated'](a){const b=await this['queryMessages'](a),c=this['config']['defaultQueryLimit']??0x32,d=Math['min'](a?.['limit']??c,MAX_QUERY_LIMIT),e=a?.['offset']??0x0;return{'messages':b['slice'](e,e+d),'total':b['length'],'offset':e,'limit':d};}async['get_conversations'](a){const b=a?{'account':a}:void 0x0,c=await this['queryMessages'](b),d=new Map();for(const e of c){const f=e['fromAddress']['toLowerCase'](),g=e['toAddress']['toLowerCase'](),h=a?.['toLowerCase'](),i=h!==void 0x0?h:this['findAccount'](e['fromAddress'])?f:this['findAccount'](e['toAddress'])?g:void 0x0;if(i===void 0x0)continue;const j=f===i?e['toAddress']:e['fromAddress'];if(!d['has'](j))d['set'](j,{'peerAddress':j,'lastMessageAt':e['createdAt'],'messageCount':0x0,'unreadCount':0x0,'lastMessagePreview':e['plaintext']});const k=d['get'](j);k['messageCount']++;e['createdAt']>k['lastMessageAt']&&(k['lastMessageAt']=e['createdAt'],k['lastMessagePreview']=e['plaintext']);if(e['status']!=='read'&&g===i)k['unreadCount']++;}return Array['from'](d['values']())['sort']((l,m)=>m['lastMessageAt']-l['lastMessageAt']);}async['generate_wts'](a,b,c,d,e){const f=await import('fs'),g=await import('path'),h=b['toLowerCase'](),k=c['toLowerCase']();let l=new MessageStorage(h)['getMessagesBySession'](h,k)['filter'](u=>u['leafIndex']!==void 0x0&&u['serverTimestamp']!==void 0x0)['sort']((u,v)=>{const w=u['serverTimestamp']-v['serverTimestamp'];if(w!==0x0)return w;return u['leafIndex']-v['leafIndex'];});if(d)switch(d['type']){case'time':{const u=Math['min'](d['start'],d['end']),v=Math['max'](d['start'],d['end']);l=l['filter'](w=>w['createdAt']>=u&&w['createdAt']<=v);break;}case'messageId':{const w=l['findIndex'](A=>A['messageId']===d['start']),x=l['findIndex'](A=>A['messageId']===d['end']);if(w===-0x1||x===-0x1)throw new MessengerError('INVALID_INPUT','Range\x20endpoint\x20not\x20found\x20in\x20this\x20conversation:\x20'+(w===-0x1?d['start']:d['end']));const y=Math['min'](w,x),z=Math['max'](w,x);l=l['slice'](y,z+0x1);break;}case'seqIndex':{const A=Math['min'](d['start'],d['end']),B=Math['max'](d['start'],d['end']);l=l['filter'](C=>C['leafIndex']>=A&&C['leafIndex']<=B);break;}}if(l['length']===0x0)throw new MessengerError('INVALID_INPUT','No\x20messages\x20found\x20for\x20the\x20given\x20criteria');const m=l['map'](C=>C['leafIndex'])['filter'](C=>C!==void 0x0)['sort']((C,D)=>C-D),n=[];for(let C=0x1;C<m['length'];C++){const D=m[C-0x1]+0x1,E=m[C];if(E!==D){for(let F=D;F<E;F++)n['push'](F);}}if(n['length']>0x0){}if(l['length']>0x1f4)throw new MessengerError('INVALID_INPUT','Message\x20count\x20('+l['length']+')\x20exceeds\x20maximum\x20allowed\x20(500)');if(!f['existsSync'](a))f['mkdirSync'](a,{'recursive':!![]});const o=h['slice'](0x0,0x6)+'_'+k['slice'](0x0,0x6),p=[];let q=[];for(let G=0x0;G<l['length'];G++){const H=l[G];if(q['length']===0x0)q['push'](H);else{const I=q[q['length']-0x1]['leafIndex']+0x1;if(q['length']>=0x1f4||H['leafIndex']!==I)p['push'](q),q=[H];else q['push'](H);}}if(q['length']>0x0)p['push'](q);p['forEach']((J,K)=>{J['map'](L=>L['leafIndex'])['join'](',\x20');});const r=[];for(const J of p){const K=J['map'](a2=>a2['leafIndex'])['filter'](a2=>a2!==void 0x0),L=Math['min'](...K),M=Math['max'](...K),N=J[0x0]['createdAt'],O=J[J['length']-0x1]['createdAt'];for(const a2 of J){if(a2['serverTimestamp']===void 0x0)throw new MessengerError('INVALID_INPUT','Message\x20'+a2['messageId']+'\x20missing\x20serverTimestamp');if(a2['leafIndex']===void 0x0)throw new MessengerError('INVALID_INPUT','Message\x20'+a2['messageId']+'\x20missing\x20leafIndex');if(!a2['prevRoot'])throw new MessengerError('INVALID_INPUT','Message\x20'+a2['messageId']+'\x20missing\x20prevRoot');if(!a2['newRoot'])throw new MessengerError('INVALID_INPUT','Message\x20'+a2['messageId']+'\x20missing\x20newRoot');if(!a2['serverSignature'])throw new MessengerError('INVALID_INPUT','Message\x20'+a2['messageId']+'\x20missing\x20serverSignature');}const P=J['map'](a3=>{const a4={'id':a3['messageId'],'from':a3['fromAddress'],'to':a3['toAddress'],'plaintextHash':a3['plaintextHash'],'clientTimestamp':a3['createdAt'],'timestamp':a3['serverTimestamp'],'leafIndex':a3['leafIndex'],'prevRoot':a3['prevRoot'],'merkleRoot':a3['newRoot'],'serverSignature':a3['serverSignature'],'serverPublicKeyIndex':0x0,'msgType':a3['msgType']};if(!e&&a3['plaintext']!==void 0x0)a4['plaintext']=a3['plaintext'];if(a3['guardAddress']!==void 0x0)a4['guardAddress']=a3['guardAddress'];if(a3['passportAddress']!==void 0x0)a4['passportAddress']=a3['passportAddress'];if(a3['arkConfirmed']!==void 0x0)a4['arkConfirmed']={'recipient':a3['arkConfirmed']['recipient'],'recipientPublicKey':a3['arkConfirmed']['recipientPublicKey'],'signature':a3['arkConfirmed']['signature'],'timestamp':a3['arkConfirmed']['timestamp']};if(a3['zipMetadata']!==void 0x0)a4['zipMetadata']=a3['zipMetadata'];if(a3['lastReceivedLeafIndex']!==void 0x0&&a3['lastReceivedLeafIndex']!==-0x1)a4['lastReceivedLeafIndex']=a3['lastReceivedLeafIndex'];return a4;}),Q=[h,k]['sort'](),R={'id':o+'_'+L+'-'+M,'participants':Q},S=[],T=new Map();for(const a3 of P){const a4=J['find'](a6=>a6['messageId']===a3['id'])?.['serverPublicKey']||'';if(!a4)continue;let a5=T['get'](a4);a5===void 0x0&&(a5=S['length'],T['set'](a4,a5),S['push']({'publicKey':a4,'validFrom':0x0})),a3['serverPublicKeyIndex']=a5;}const U={'session':R,'messages':P},{sha256:V}=await import('@noble/hashes/sha2.js'),{bytesToHex:W}=await import('@noble/hashes/utils.js'),X={'wts':WTS_SCHEMA_URL,...U},Y=W(V(new TextEncoder()['encode'](a34g(X)))),Z={'wts':WTS_SCHEMA_URL,'payload':U,'meta':{'type':'wts','version':'1.0','created':new Date()['toISOString'](),'hash':Y,'algorithm':'sha256','startTime':N,'endTime':O,'messageCount':P['length'],'merkleRoot':P[P['length']-0x1]['merkleRoot'],'creator':h,'participant':k,'serverPublicKeys':S}},a0=o+'_'+L+'-'+M+'.wts',a1=g['join'](a,a0);f['writeFileSync'](a1,JSON['stringify'](Z,null,0x2)),r['push'](a1);}const s=l[0x0]?.['createdAt']||0x0,t=l[l['length']-0x1]?.['createdAt']||0x0;return{'files':r,'totalMessageCount':l['length'],'timeRange':{'start':s,'end':t}};}async['addToBlacklist'](a,b){const c=this['findAccount'](a);if(!c)throw new MessengerError('ACCOUNT_NOT_FOUND','Account\x20'+a+'\x20not\x20in\x20managed\x20accounts');return c['messenger']['addToBlacklist'](b);}async['removeFromBlacklist'](a,b){const c=this['findAccount'](a);if(!c)throw new MessengerError('ACCOUNT_NOT_FOUND','Account\x20'+a+'\x20not\x20in\x20managed\x20accounts');return c['messenger']['removeFromBlacklist'](b);}async['clearBlacklist'](a){const b=this['findAccount'](a);if(!b)throw new MessengerError('ACCOUNT_NOT_FOUND','Account\x20'+a+'\x20not\x20in\x20managed\x20accounts');return b['messenger']['clearBlacklist']();}async['getBlacklist'](a){const b=this['findAccount'](a);if(!b)throw new MessengerError('ACCOUNT_NOT_FOUND','Account\x20'+a+'\x20not\x20in\x20managed\x20accounts');return b['messenger']['getBlacklist']();}async['existInBlacklist'](a,b){const c=this['findAccount'](a);if(!c)throw new MessengerError('ACCOUNT_NOT_FOUND','Account\x20'+a+'\x20not\x20in\x20managed\x20accounts');return c['messenger']['existInBlacklist'](b);}async['addToFriendsList'](a,b){const c=this['findAccount'](a);if(!c)throw new MessengerError('ACCOUNT_NOT_FOUND','Account\x20'+a+'\x20not\x20in\x20managed\x20accounts');return c['messenger']['addToFriendsList'](b);}async['removeFromFriendsList'](a,b){const c=this['findAccount'](a);if(!c)throw new MessengerError('ACCOUNT_NOT_FOUND','Account\x20'+a+'\x20not\x20in\x20managed\x20accounts');return c['messenger']['removeFromFriendsList'](b);}async['clearFriendsList'](a){const b=this['findAccount'](a);if(!b)throw new MessengerError('ACCOUNT_NOT_FOUND','Account\x20'+a+'\x20not\x20in\x20managed\x20accounts');return b['messenger']['clearFriendsList']();}async['getFriendsList'](a){const b=this['findAccount'](a);if(!b)throw new MessengerError('ACCOUNT_NOT_FOUND','Account\x20'+a+'\x20not\x20in\x20managed\x20accounts');return b['messenger']['getFriendsList']();}async['existInFriendsList'](a,b){const c=this['findAccount'](a);if(!c)throw new MessengerError('ACCOUNT_NOT_FOUND','Account\x20'+a+'\x20not\x20in\x20managed\x20accounts');return c['messenger']['existInFriendsList'](b);}async['addToGuardList'](a,b){const c=this['findAccount'](a);if(!c)throw new MessengerError('ACCOUNT_NOT_FOUND','Account\x20'+a+'\x20not\x20in\x20managed\x20accounts');return c['messenger']['addToGuardList'](b);}async['removeFromGuardList'](a,b){const c=this['findAccount'](a);if(!c)throw new MessengerError('ACCOUNT_NOT_FOUND','Account\x20'+a+'\x20not\x20in\x20managed\x20accounts');return c['messenger']['removeFromGuardList'](b);}async['getGuardList'](a){const b=this['findAccount'](a);if(!b)throw new MessengerError('ACCOUNT_NOT_FOUND','Account\x20'+a+'\x20not\x20in\x20managed\x20accounts');return b['messenger']['getGuardList']();}async['getSettings'](a){const b=this['findAccount'](a);if(!b)throw new MessengerError('ACCOUNT_NOT_FOUND','Account\x20'+a+'\x20not\x20in\x20managed\x20accounts');return b['messenger']['getSettings']();}async['setSettings'](a,b){const c=this['findAccount'](a);if(!c)throw new MessengerError('ACCOUNT_NOT_FOUND','Account\x20'+a+'\x20not\x20in\x20managed\x20accounts');return c['messenger']['setSettings'](b);}};function escapeHtml(a){if(!a)return'';return a['replace'](/&/g,'&amp;')['replace'](/</g,'&lt;')['replace'](/>/g,'&gt;')['replace'](/"/g,'&quot;')['replace'](/'/g,'&#039;');}function formatFileSize(a){if(a<0x400)return a+'\x20B';if(a<0x400*0x400)return(a/0x400)['toFixed'](0x1)+'\x20KB';return(a/(0x400*0x400))['toFixed'](0x1)+'\x20MB';}function isNonTextMessage(a){return!!a['zipMetadata'];}function getFileTypeLabel(a){if(a['zipMetadata']?.['contentType'])return a['zipMetadata']['contentType']['toUpperCase']();const b=a['zipMetadata']?.['fileName']||'';if(b['endsWith']('.wts'))return'WTS';if(b['endsWith']('.wip'))return'WIP';if(b['endsWith']('.zip'))return'ZIP';if(b['endsWith']('.json'))return'JSON';if(b['endsWith']('.txt'))return'TXT';if(a['zipMetadata'])return'ZIP';return'FILE';}function getThemeColors(a){return{'bgColor':a==='dark'?'#1a1a1a':'#ffffff','textColor':a==='dark'?'#e0e0e0':'#333333','borderColor':a==='dark'?'#444444':'#e0e0e0'};}function getMessageColors(a,b){if(b)return{'bgColor':a==='dark'?'#1a365d':'#e3f2fd','borderColor':a==='dark'?'#3b82f6':'#90caf9'};else return{'bgColor':a==='dark'?'#1e3a2f':'#e8f5e9','borderColor':a==='dark'?'#10b981':'#a5d6a7'};}function generateFileButton(a,b,c){if(!a['plaintext']||!a['zipMetadata']?.['fileName'])return'';const d=a['zipMetadata']['fileName'],e=a['plaintext'],f=a['zipMetadata']['fileSize']||0x0,g=getFileTypeLabel(a),h=c==='dark'?'#2a3f2a':'#e8f5e9',i=c==='dark'?'#4caf50':'#4caf50',j=c==='dark'?'#81c784':'#2e7d32',k='#4caf50';return'\x0a\x09\x09<div\x20style=\x22margin:\x2012px\x200;\x20padding:\x2016px;\x20background:\x20'+h+';\x20border:\x201px\x20solid\x20'+i+';\x20border-radius:\x208px;\x20text-align:\x20center;\x22>\x0a\x09\x09\x09<div\x20style=\x22font-size:\x2014px;\x20color:\x20'+j+';\x20margin-bottom:\x208px;\x22>\x0a\x09\x09\x09\x09📎\x20'+escapeHtml(g)+'\x20File\x0a\x09\x09\x09\x09<span\x20style=\x22font-size:\x2012px;\x20color:\x20#666;\x22>('+formatFileSize(f)+')</span>\x0a\x09\x09\x09</div>\x0a\x09\x09\x09<button\x20\x0a\x09\x09\x09\x09onclick=\x22saveFile'+b+'()\x22\x0a\x09\x09\x09\x09style=\x22padding:\x2010px\x2024px;\x20background:\x20'+k+';\x20color:\x20white;\x20border:\x20none;\x20border-radius:\x204px;\x20cursor:\x20pointer;\x20font-size:\x2014px;\x22\x0a\x09\x09\x09\x09onmouseover=\x22this.style.background=\x27#45a049\x27\x22\x0a\x09\x09\x09\x09onmouseout=\x22this.style.background=\x27'+k+'\x27\x22\x0a\x09\x09\x09>\x0a\x09\x09\x09\x09💾\x20Save\x20'+escapeHtml(d)+'\x0a\x09\x09\x09</button>\x0a\x09\x09</div>\x0a\x09\x09<script>\x0a\x09\x09\x09function\x20saveFile'+b+'()\x20{\x0a\x09\x09\x09\x09try\x20{\x0a\x09\x09\x09\x09\x09const\x20base64Data\x20=\x20'+JSON['stringify'](e)+';\x0a\x09\x09\x09\x09\x09const\x20byteCharacters\x20=\x20atob(base64Data);\x0a\x09\x09\x09\x09\x09const\x20byteNumbers\x20=\x20new\x20Array(byteCharacters.length);\x0a\x09\x09\x09\x09\x09for\x20(let\x20i\x20=\x200;\x20i\x20<\x20byteCharacters.length;\x20i++)\x20{\x0a\x09\x09\x09\x09\x09\x09byteNumbers[i]\x20=\x20byteCharacters.charCodeAt(i);\x0a\x09\x09\x09\x09\x09}\x0a\x09\x09\x09\x09\x09const\x20byteArray\x20=\x20new\x20Uint8Array(byteNumbers);\x0a\x09\x09\x09\x09\x09\x0a\x09\x09\x09\x09\x09let\x20mimeType\x20=\x20\x22application/octet-stream\x22;\x0a\x09\x09\x09\x09\x09const\x20fileName\x20=\x20'+JSON['stringify'](d)+';\x0a\x09\x09\x09\x09\x09if\x20(fileName.endsWith(\x27.json\x27))\x20mimeType\x20=\x20\x22application/json\x22;\x0a\x09\x09\x09\x09\x09else\x20if\x20(fileName.endsWith(\x27.zip\x27))\x20mimeType\x20=\x20\x22application/zip\x22;\x0a\x09\x09\x09\x09\x09else\x20if\x20(fileName.endsWith(\x27.txt\x27))\x20mimeType\x20=\x20\x22text/plain\x22;\x0a\x09\x09\x09\x09\x09\x0a\x09\x09\x09\x09\x09const\x20blob\x20=\x20new\x20Blob([byteArray],\x20{\x20type:\x20mimeType\x20});\x0a\x09\x09\x09\x09\x09const\x20url\x20=\x20URL.createObjectURL(blob);\x0a\x09\x09\x09\x09\x09const\x20a\x20=\x20document.createElement(\x22a\x22);\x0a\x09\x09\x09\x09\x09a.href\x20=\x20url;\x0a\x09\x09\x09\x09\x09a.download\x20=\x20fileName;\x0a\x09\x09\x09\x09\x09document.body.appendChild(a);\x0a\x09\x09\x09\x09\x09a.click();\x0a\x09\x09\x09\x09\x09document.body.removeChild(a);\x0a\x09\x09\x09\x09\x09URL.revokeObjectURL(url);\x0a\x09\x09\x09\x09}\x20catch\x20(e)\x20{\x0a\x09\x09\x09\x09\x09alert(\x27保存文件失败:\x20\x27\x20+\x20e.message);\x0a\x09\x09\x09\x09}\x0a\x09\x09\x09}\x0a\x09\x09</script>\x0a\x09';}function generateReplyQuoteHtml(a,b){if(!a['plaintext'])return'';const c=parseReplyPlaintext(a['plaintext'])['replyTo'];if(!c)return'';const {theme:d}=b,e=b['payload']['messages']['find'](j=>j['id']===c['messageId']),f=d==='dark'?'#2b2b2b':'#f5f5f5';if(!e)return'\x0a\x09\x09\x09<div\x20style=\x22margin:\x208px\x200;\x20padding:\x208px\x2010px;\x20background:\x20'+f+';\x20border-left:\x203px\x20solid\x20'+(d==='dark'?'#b45309':'#f59e0b')+';\x20border-radius:\x204px;\x22>\x0a\x09\x09\x09\x09<div\x20style=\x22font-size:\x2011px;\x20color:\x20'+(d==='dark'?'#fbbf24':'#b45309')+';\x20word-break:\x20break-all;\x22>\x0a\x09\x09\x09\x09\x09⚠\x20Replied\x20message\x20not\x20found\x20—\x20message\x20ID:\x20'+escapeHtml(c['messageId'])+'\x0a\x09\x09\x09\x09</div>\x0a\x09\x09\x09</div>\x0a\x09\x09';let g='';if(e['zipMetadata']?.['fileName'])g='[File]\x20'+e['zipMetadata']['fileName'];else{if(e['plaintext'])g=parseReplyPlaintext(e['plaintext'])['content'];}const h=e['from']['slice'](0x0,0x6)+'...'+e['from']['slice'](-0x3),i=(g||'Original\x20message')['replace'](/\s+/g,'\x20')['trim']()['slice'](0x0,0x78);return'\x0a\x09\x09<div\x20style=\x22margin:\x208px\x200;\x20padding:\x208px\x2010px;\x20background:\x20'+f+';\x20border-left:\x203px\x20solid\x20'+(d==='dark'?'#5a5a5a':'#c9c9c9')+';\x20border-radius:\x204px;\x22>\x0a\x09\x09\x09<div\x20style=\x22font-size:\x2011px;\x20color:\x20#888;\x20margin-bottom:\x202px;\x22>↩\x20Replied\x20to\x20'+escapeHtml(h)+'</div>\x0a\x09\x09\x09<div\x20style=\x22font-size:\x2013px;\x20color:\x20'+(d==='dark'?'#bbbbbb':'#555555')+';\x20word-break:\x20break-word;\x22>'+escapeHtml(i)+'</div>\x0a\x09\x09</div>\x0a\x09';}function generateMessageHtml(a,b,c){const {theme:d,borderColor:e,myAddress:f,maxLastReceivedLeafIndex:g}=c,h=isNonTextMessage(a),i=a['from']['toLowerCase']()===f['toLowerCase'](),j=i&&g>=0x0&&a['leafIndex']<=g,k=getMessageColors(d,i),l=d==='dark'?'#333333':'#ffffff';let m='';if(h)m=generateFileButton(a,b,d);else{if(a['plaintext']){const o=parseReplyPlaintext(a['plaintext']);m=generateReplyQuoteHtml(a,c)+('<div\x20style=\x22margin:\x2012px\x200;\x20padding:\x2012px;\x20background:\x20'+l+';\x20border:\x201px\x20solid\x20'+e+';\x20border-radius:\x204px;\x20font-size:\x2014px;\x20line-height:\x201.6;\x20max-height:\x20calc(1.6em\x20*\x206);\x20overflow-y:\x20auto;\x20white-space:\x20pre-wrap;\x20word-break:\x20break-word;\x22>'+escapeHtml(o['content'])+'</div>');}else m='<div\x20style=\x22margin:\x2012px\x200;\x20padding:\x2012px;\x20background:\x20'+l+';\x20border:\x201px\x20solid\x20'+e+';\x20border-radius:\x204px;\x20font-size:\x2013px;\x20color:\x20#999;\x22>Plaintext\x20unavailable\x20locally\x20—\x20content\x20hash\x20verification\x20will\x20fail\x20for\x20this\x20message.</div>';}const n=['<div>Merkle\x20Root:\x20'+escapeHtml(a['merkleRoot'])+'</div>',a['arkConfirmed']?'<div>ARK\x20Confirmed:\x20'+escapeHtml(a['arkConfirmed']['recipient'])+'\x20at\x20'+new Date(a['arkConfirmed']['timestamp'])['toLocaleString']()+'</div>':'',a['guardAddress']?'<div>Guard:\x20'+escapeHtml(a['guardAddress'])+'</div>':'',a['passportAddress']?'<div>Passport:\x20'+escapeHtml(a['passportAddress'])+'</div>':'']['filter'](Boolean)['join']('');return'\x0a\x09\x09<div\x20style=\x22margin:\x2016px\x200;\x20padding:\x2016px;\x20border:\x201px\x20solid\x20'+k['borderColor']+';\x20border-radius:\x208px;\x20background:\x20'+k['bgColor']+';\x22>\x0a\x09\x09\x09<div\x20style=\x22display:\x20flex;\x20justify-content:\x20space-between;\x20margin-bottom:\x208px;\x20font-size:\x2012px;\x20color:\x20#666;\x22>\x0a\x09\x09\x09\x09<span>From:\x20'+escapeHtml(a['from']['slice'](0x0,0x6))+'...'+escapeHtml(a['from']['slice'](-0x3))+'\x20To:\x20'+escapeHtml(a['to']['slice'](0x0,0x6))+'...'+escapeHtml(a['to']['slice'](-0x3))+'</span>\x0a\x09\x09\x09\x09<span>'+new Date(a['timestamp'])['toLocaleString']()+'</span>\x0a\x09\x09\x09</div>\x0a\x09\x09\x09'+m+'\x0a\x09\x09\x09<div\x20style=\x22margin:\x208px\x200;\x20font-size:\x2011px;\x20color:\x20#666;\x22>\x0a\x09\x09\x09\x09'+n+'\x0a\x09\x09\x09</div>\x0a\x09\x09\x09<div\x20style=\x22font-size:\x2011px;\x20color:\x20#888;\x20margin-top:\x208px;\x20padding-top:\x208px;\x20border-top:\x201px\x20solid\x20'+e+';\x20display:\x20flex;\x20justify-content:\x20space-between;\x20align-items:\x20center;\x22>\x0a\x09\x09\x09\x09<div>Leaf\x20Index:\x20'+a['leafIndex']+'</div>\x0a\x09\x09\x09\x09'+(j?'<span\x20style=\x22color:\x20#4caf50;\x22>Delivered\x20&\x20Decrypted</span>':'')+'\x0a\x09\x09\x09</div>\x0a\x09\x09</div>\x0a\x09';}function generateSignatureHtml(a,b,c){if(!a['signatures']||a['signatures']['length']===0x0)return'';const d=a['valid'],e=d?b==='dark'?'#2a3f2a':'#e8f5e9':b==='dark'?'#3a2a2a':'#fff3e0',f=d?b==='dark'?'#81c784':'#2e7d32':b==='dark'?'#ffab40':'#e65100',g=a['signatures']['map']((h,i)=>'\x0a\x09\x09\x09<div\x20style=\x22font-size:\x2010px;\x20color:\x20'+c+';\x20margin-left:\x208px;\x22>\x0a\x09\x09\x09\x09'+(i+0x1)+'.\x20'+(h['address']?escapeHtml(h['address']['slice'](0x0,0x6))+'...'+escapeHtml(h['address']['slice'](-0x3)):'Unknown')+':\x0a\x09\x09\x09\x09'+(h['valid']?'<span\x20style=\x22color:\x20#4caf50;\x22>✓\x20Valid</span>':'<span\x20style=\x22color:\x20#f44336;\x22>✗\x20Invalid</span>')+'\x0a\x09\x09\x09</div>\x0a\x09\x09')['join']('');return'\x0a\x09\x09<div\x20style=\x22margin-top:\x208px;\x20padding:\x208px;\x20background:\x20'+e+';\x20border-radius:\x204px;\x22>\x0a\x09\x09\x09<div\x20style=\x22font-size:\x2011px;\x20color:\x20'+f+';\x20margin-bottom:\x204px;\x22>\x0a\x09\x09\x09\x09'+(d?'✓':'⚠')+'\x20Signature\x20Verification\x20('+a['signatures']['length']+'\x20signature'+(a['signatures']['length']>0x1?'s':'')+')'+(d?'':'\x20(signature\x20valid\x20but\x20content\x20hash\x20verification\x20failed)')+'\x0a\x09\x09\x09</div>\x0a\x09\x09\x09'+g+'\x0a\x09\x09</div>\x0a\x09';}const MESSAGES_PER_PAGE=0x64;function generateHtmlPage(a){const {title:b,theme:c,bgColor:d,textColor:e,borderColor:f,meta:g,payload:h,verifyResult:i,maxLastReceivedLeafIndex:j}=a,k=h['messages']['length'],l=Math['ceil'](k/MESSAGES_PER_PAGE),m=[];for(let s=0x0;s<l;s++){const t=s*MESSAGES_PER_PAGE,u=Math['min'](t+MESSAGES_PER_PAGE,k),v=h['messages']['slice'](t,u)['map']((w,x)=>generateMessageHtml(w,t+x,a))['join']('');m['push']({'pageNum':s+0x1,'html':'<div\x20class=\x22page\x22\x20data-page=\x22'+(s+0x1)+'\x22\x20style=\x22display:\x20'+(s===0x0?'block':'none')+';\x22>'+v+'</div>'});}const n=l>0x1?generatePaginationHtml(l,c,e):'',o=m['map'](w=>w['html'])['join'](''),p=generateSignatureHtml(i,c,e),q=i['valid']?'<span\x20style=\x22color:\x20#4caf50;\x20margin-left:\x208px;\x22>✓\x20The\x20accuracy,\x20sequentiality,\x20and\x20integrity\x20of\x20the\x20messages\x20are\x20verified\x20without\x20tampering</span>':'<span\x20style=\x22color:\x20#ff9800;\x20margin-left:\x208px;\x22>⚠\x20'+(i['error']||'Hash\x20mismatch\x20-\x20content\x20has\x20been\x20tampered')+'</span>',r=j>=0x0?'<div>Delivered\x20&\x20Decrypted\x20Leaf\x20Index:\x20'+j+'\x20(sent\x20messages\x20are\x20only\x20confirmed\x20as\x20decrypted\x20after\x20receiving\x20a\x20reply\x20from\x20the\x20other\x20party)</div>':'';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>'+escapeHtml(b)+'</title>\x0a\x20\x20\x20\x20<style>\x0a\x20\x20\x20\x20\x20\x20\x20\x20body\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20font-family:\x20-apple-system,\x20BlinkMacSystemFont,\x20\x22Segoe\x20UI\x22,\x20Roboto,\x20sans-serif;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20max-width:\x20800px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20margin:\x200\x20auto;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20padding:\x2020px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20background:\x20'+d+';\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20color:\x20'+e+';\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20.header\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20border-bottom:\x202px\x20solid\x20'+f+';\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20padding-bottom:\x2016px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20margin-bottom:\x2024px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20.meta\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20font-size:\x2012px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20color:\x20#666;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20margin-top:\x208px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20.note\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20font-size:\x2011px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20color:\x20#999;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20margin-top:\x2012px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20padding:\x208px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20background:\x20'+(c==='dark'?'#2a2a2a':'#f5f5f5')+';\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20border-radius:\x204px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20font-style:\x20italic;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20.pagination\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20display:\x20flex;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20justify-content:\x20center;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20align-items:\x20center;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20gap:\x208px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20margin-top:\x2024px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20padding:\x2016px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20border-top:\x201px\x20solid\x20'+f+';\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20.pagination\x20button\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20padding:\x208px\x2016px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20border:\x201px\x20solid\x20'+f+';\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20background:\x20'+(c==='dark'?'#333':'#fff')+';\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20color:\x20'+e+';\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20cursor:\x20pointer;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20border-radius:\x204px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20font-size:\x2014px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20.pagination\x20button:hover:not(:disabled)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20background:\x20'+(c==='dark'?'#444':'#f0f0f0')+';\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20.pagination\x20button:disabled\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20opacity:\x200.5;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20cursor:\x20not-allowed;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20.pagination\x20.page-info\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20font-size:\x2014px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20color:\x20#666;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20.page\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20animation:\x20fadeIn\x200.3s\x20ease-in;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20@keyframes\x20fadeIn\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20from\x20{\x20opacity:\x200;\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20to\x20{\x20opacity:\x201;\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20</style>\x0a</head>\x0a<body>\x0a\x20\x20\x20\x20<div\x20class=\x22header\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<h1>Witness\x20Timestamped\x20Sequence</h1>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22note\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Important\x20Note:\x20This\x20page\x20is\x20for\x20message\x20browsing\x20and\x20verification\x20reference\x20only.\x20Please\x20verify\x20whether\x20the\x20message\x20sequence\x20has\x20been\x20tampered\x20with\x20through\x20the\x20\x27verify_wts\x27\x20API\x20using\x20the\x20WTS\x20file.\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:\x2014px;\x20color:\x20#666;\x20margin-top:\x204px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+new Date(g['startTime'])['toLocaleDateString']()+'\x20-\x20'+new Date(g['endTime'])['toLocaleDateString']()+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+q+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22meta\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div>Messages:\x20'+g['messageCount']+'\x20|\x20Time:\x20'+new Date(g['startTime'])['toLocaleString']()+'\x20-\x20'+new Date(g['endTime'])['toLocaleString']()+'</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22word-break:\x20break-all;\x22>Merkle\x20Root:\x20'+escapeHtml(g['merkleRoot'])+'</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+r+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22color:\x20'+(c==='dark'?'#3b82f6':'#1976d2')+';\x22>Creator:\x20'+escapeHtml(g['creator'])+'</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22color:\x20'+(c==='dark'?'#10b981':'#2e7d32')+';\x22>Participant:\x20'+escapeHtml(g['participant'])+'</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+p+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20<div\x20id=\x22messages-container\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20'+o+'\x0a\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20'+n+'\x0a\x20\x20\x20\x20<script>\x0a\x20\x20\x20\x20\x20\x20\x20\x20(function()\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20currentPage\x20=\x201;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20totalPages\x20=\x20'+l+';\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20function\x20showPage(pageNum)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20隐藏所有页面\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20document.querySelectorAll(\x27.page\x27).forEach(page\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20page.style.display\x20=\x20\x27none\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20显示目标页面\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20targetPage\x20=\x20document.querySelector(\x27.page[data-page=\x22\x27\x20+\x20pageNum\x20+\x20\x27\x22]\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(targetPage)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20targetPage.style.display\x20=\x20\x27block\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20currentPage\x20=\x20pageNum;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20updatePaginationButtons();\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20function\x20updatePaginationButtons()\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20prevBtn\x20=\x20document.getElementById(\x27prev-btn\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20nextBtn\x20=\x20document.getElementById(\x27next-btn\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20pageInfo\x20=\x20document.getElementById(\x27page-info\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(prevBtn)\x20prevBtn.disabled\x20=\x20currentPage\x20===\x201;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(nextBtn)\x20nextBtn.disabled\x20=\x20currentPage\x20===\x20totalPages;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(pageInfo)\x20pageInfo.textContent\x20=\x20\x27Page\x20\x27\x20+\x20currentPage\x20+\x20\x27\x20of\x20\x27\x20+\x20totalPages;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20绑定按钮事件\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20prevBtn\x20=\x20document.getElementById(\x27prev-btn\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20nextBtn\x20=\x20document.getElementById(\x27next-btn\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(prevBtn)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20prevBtn.addEventListener(\x27click\x27,\x20function()\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(currentPage\x20>\x201)\x20showPage(currentPage\x20-\x201);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(nextBtn)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20nextBtn.addEventListener(\x27click\x27,\x20function()\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(currentPage\x20<\x20totalPages)\x20showPage(currentPage\x20+\x201);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20初始化\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20updatePaginationButtons();\x0a\x20\x20\x20\x20\x20\x20\x20\x20})();\x0a\x20\x20\x20\x20</script>\x0a</body>\x0a</html>';}function generatePaginationHtml(a,b,c){return'\x0a\x20\x20\x20\x20<div\x20class=\x22pagination\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20id=\x22prev-btn\x22\x20disabled>←\x20Previous</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22page-info\x22\x20id=\x22page-info\x22>Page\x201\x20of\x20'+a+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20id=\x22next-btn\x22\x20'+(a<=0x1?'disabled':'')+'>Next\x20→</button>\x0a\x20\x20\x20\x20</div>';}const logger=a34c('messenger:api');let managerInstance=null,isInitialized=![],backgroundTimer=null;async function autoRegisterMessengerAccounts(){const a=await Account['Instance']()['list_messenger_accounts'](),b=managerInstance;if(!b)return;for(const c of a){if(!c['address']||!c['messenger'])continue;try{await b['ensureAccountReady'](c['address']);}catch(d){logger['error']('Failed\x20to\x20initialize\x20account\x20'+c['address']+':',d);}}}function getMessengerManager(){if(!managerInstance)managerInstance=new MessengerManager();return!isInitialized&&(isInitialized=!![],autoRegisterMessengerAccounts()['then'](()=>{return managerInstance['start']();})['catch'](a=>{return logger['error']('Failed\x20to\x20auto-register\x20messenger\x20accounts:',a),managerInstance['start']();})['catch'](a=>{logger['error']('Failed\x20to\x20auto-start\x20messenger\x20manager:',a);})),managerInstance;}function registerCleanupHandler(){const a=()=>{backgroundTimer&&(clearInterval(backgroundTimer),backgroundTimer=null);if(managerInstance)managerInstance['stop']();};process['on']('exit',a),process['on']('SIGINT',()=>{a();}),process['on']('SIGTERM',()=>{a();});}registerCleanupHandler();async function watch_conversations(a){const b=await Account['Instance']()['get_address'](a?.['account']);if(!b)a34a('account\x20not\x20found','watch_conversations.account\x20'+a?.['account']);const c=b['toLowerCase'](),d=(await getMessengerManager()['ensureAccountReady'](b))['messenger']['pullMessages']();if(a?.['sync']!==![])await d;else d['catch'](()=>{});const e=new MessageStorage(c),f=e['getAllMessages'](c),g=new Map(),h=a?.['previewMessageCount']??0x2,i=a?.['skipAutoMarkViewed']??![],j=n=>{if(!n['plaintext'])return n['plaintext'];return parseReplyPlaintext(n['plaintext'])['content'];};for(const n of f){const o=n['fromAddress']['toLowerCase']()===c?n['toAddress']:n['fromAddress'];if(!g['has'](o))g['set'](o,{'peerAddress':o,'lastMessageAt':n['createdAt'],'messageCount':0x0,'unreadCount':0x0,'lastMessagePreview':j(n),'messages':[]});const p=g['get'](o);p['messages']['push'](n),p['messageCount']++;n['createdAt']>p['lastMessageAt']&&(p['lastMessageAt']=n['createdAt'],p['lastMessagePreview']=j(n));if(n['direction']==='received'&&n['viewedAt']===void 0x0)p['unreadCount']++;}const k=[];for(const [,q]of g){if(a?.['startTime']!==void 0x0&&q['lastMessageAt']<a['startTime'])continue;if(a?.['endTime']!==void 0x0&&q['lastMessageAt']>a['endTime'])continue;if(a?.['unreadOnly']&&q['unreadCount']===0x0)continue;const r=[];if(h>0x0){const s=q['messages']['sort']((t,u)=>u['createdAt']-t['createdAt'])['slice'](0x0,h);r['push'](...s['reverse']());if(!i){const t=s['filter'](u=>u['direction']==='received'&&u['viewedAt']===void 0x0)['map'](u=>u['messageId']);if(t['length']>0x0)e['updateMessagesViewed'](t);}}k['push']({'peerAddress':q['peerAddress'],'lastMessageAt':q['lastMessageAt'],'messageCount':q['messageCount'],'unreadCount':q['unreadCount'],'lastMessagePreview':q['lastMessagePreview'],...h>0x0&&{'previewMessages':r}});}const l=a?.['sortBy']??'lastMessageAt',m=a?.['sortOrder']??'desc';return k['sort']((u,v)=>{let w=0x0;switch(l){case'lastMessageAt':w=u['lastMessageAt']-v['lastMessageAt'];break;case'unreadCount':w=u['unreadCount']-v['unreadCount'];break;case'messageCount':w=u['messageCount']-v['messageCount'];break;}return m==='asc'?w:-w;}),k;}async function mark_messages_as_viewed(a,b){if(!a||a['length']===0x0)return 0x0;const c=await Account['Instance']()['get_address'](b);if(!c)a34a('account\x20not\x20found','mark_messages_as_viewed.account\x20'+b);return new MessageStorage(c['toLowerCase']())['updateMessagesViewed'](a);}async function mark_conversation_as_viewed(a,b){const c=await Account['Instance']()['get_address'](b);if(!c)a34a('account\x20not\x20found','mark_conversation_as_viewed.account\x20'+b);const d=c['toLowerCase'](),e=await a34f(a);if(!e)a34a('account\x20not\x20found','mark_conversation_as_viewed.peerAddress\x20'+a+'\x20is\x20not\x20a\x20valid\x20account/address');const f=e['toLowerCase'](),g=new MessageStorage(d),h=g['getMessagesBySession'](d,f)['filter'](i=>i['direction']==='received'&&i['viewedAt']===void 0x0)['map'](i=>i['messageId']);if(h['length']===0x0)return 0x0;return g['updateMessagesViewed'](h);}async function send_message(a,b,c,d){const e=await Account['Instance']()['get_address'](a);if(!e)a34a('account\x20not\x20found','send_message.from\x20'+a);const f=await a34f(b);if(!f)a34a('account\x20not\x20found','send_message.to\x20'+b+'\x20is\x20not\x20a\x20valid\x20account/address');if(d?.['guardAddress']!=null&&d?.['passportAddress']!=null){[d['guardAddress'],d['passportAddress']]=await LocalMark['Instance']()['get_many_address']([d['guardAddress'],d['passportAddress']]);if(!d['guardAddress']||!d['passportAddress'])a34a('account\x20not\x20found','send_message.guardAddress\x20or\x20passportAddress\x20not\x20found');}return getMessengerManager()['send'](e,f,c,d);}async function send_file(a,b,c,d){const e=await Account['Instance']()['get_address'](a);if(!e)a34a('account\x20not\x20found','send_file.from\x20'+a);const f=await a34f(b);if(!f)a34a('account\x20not\x20found','send_file.to\x20'+b+'\x20is\x20not\x20a\x20valid\x20account/address');if(d?.['guardAddress']!=null&&d?.['passportAddress']!=null){[d['guardAddress'],d['passportAddress']]=await LocalMark['Instance']()['get_many_address']([d['guardAddress'],d['passportAddress']]);if(!d['guardAddress']||!d['passportAddress'])a34a('account\x20not\x20found','send_file.guardAddress\x20or\x20passportAddress\x20not\x20found');}return getMessengerManager()['send_file'](e,f,c,d);}async function watch_messages(a){if(a?.['account']!==void 0x0){a['account']=await Account['Instance']()['get_address'](a['account']);if(!a['account'])a34a('account\x20not\x20found','watch_messages.account\x20'+a['account']);}if(a?.['customListFilter']?.['includeAddresses']!=null)a['customListFilter']['includeAddresses']=(await Account['Instance']()['get_many_address'](a['customListFilter']['includeAddresses']))['filter'](c=>c!=null);if(a?.['customListFilter']?.['excludeAddresses']!=null)a['customListFilter']['excludeAddresses']=(await Account['Instance']()['get_many_address'](a['customListFilter']['excludeAddresses']))['filter'](c=>c!=null);const b=await getMessengerManager()['watch'](a);if(!(a?.['skipAutoMarkViewed']??![])&&b['length']>0x0&&a?.['account']){const c=new MessageStorage(a['account']['toLowerCase']()),d=b['filter'](e=>e['direction']==='received'&&e['viewedAt']===void 0x0)['map'](e=>e['messageId']);if(d['length']>0x0)c['updateMessagesViewed'](d);}return b;}async function search_messages(a){const b=(a['query']??'')['trim']();if(!b)return[];const c=await Account['Instance']()['get_address'](a['account']);if(!c)a34a('account\x20not\x20found','search_messages.account\x20'+a['account']);let d;if(a['peerAddress'])try{d=await a34f(a['peerAddress'])??a['peerAddress'];}catch{d=a['peerAddress'];}return new MessageStorage(c)['searchMessages'](b,{'peerAddress':d,'limit':a['limit']});}async function pull_messages(a,b){const c=await Account['Instance']()['get_address'](a);if(!c)a34a('account\x20not\x20found','pull_messages.account\x20'+a);return(await(await getMessengerManager()['ensureAccountReady'](c))['messenger']['pullMessages'](b))['messages']['map'](d=>d);}async function extract_zip_message(a,b){if(!a['zipMetadata'])throw new MessengerError('INVALID_MESSAGE_TYPE','Message\x20is\x20not\x20a\x20ZIP\x20archive');if(!a['plaintext'])throw new MessengerError('MESSAGE_NOT_DECRYPTED','Message\x20plaintext\x20not\x20available');const c=Buffer['from'](a['plaintext'],'base64');if(a['zipMetadata']?.['fileHash']){const f=createHash('sha256')['update'](c)['digest']('hex'),g=a['zipMetadata']['fileHash']['replace']('0x','');if(f!==g)throw new MessengerError('HASH_MISMATCH','ZIP\x20file\x20hash\x20mismatch:\x20expected\x20'+g+',\x20got\x20'+f);}const d=await extractZipFromPlaintext(a['plaintext']);if(!a34j['existsSync'](b))a34j['mkdirSync'](b,{'recursive':!![]});const e=[];for(const h of d){const i=a34i['join'](b,h['filename']);a34j['writeFileSync'](i,h['content']),e['push'](i);}return e['length']>0x0&&a['zipMetadata']&&(a['zipMetadata']={'fileName':a['zipMetadata']['fileName'],'fileSize':a['zipMetadata']['fileSize'],'fileHash':a['zipMetadata']['fileHash'],'contentType':a['zipMetadata']['contentType'],'localCachePath':e[0x0],'downloadedAt':Date['now']()},new MessageStorage(a['direction']==='sent'?a['fromAddress']:a['toAddress'])['saveMessage'](a)),e[0x0]||'';}async function extractZipFromPlaintext(a){if(!a)throw new MessengerError('INVALID_INPUT','plaintext\x20is\x20empty');const b=Buffer['from'](a,'base64');if(b['length']<0x4||b[0x0]!==0x50||b[0x1]!==0x4b)throw new MessengerError('INVALID_INPUT','Invalid\x20ZIP\x20data:\x20magic\x20bytes\x20mismatch\x20(expected\x20PK,\x20got\x20'+b['slice'](0x0,0x2)['toString']('hex')+')');const {ZipReader:c,BlobReader:d,BlobWriter:e}=await import('@zip.js/zip.js'),f=new c(new d(new Blob([b]))),g=await f['getEntries']();if(g['length']===0x0){await f['close']();throw new MessengerError('INVALID_INPUT','ZIP\x20archive\x20contains\x20no\x20files');}const h=[];for(const i of g)if(!i['directory']){const j=i,k=new e(),l=await j['getData'](k),m=Buffer['from'](await l['arrayBuffer']());h['push']({'filename':i['filename'],'content':m});}return await f['close'](),h;}async function extract_zip_messages(a,b,c){const d=[],f=c??a34i['join'](getWowokWorkspaceDir(),'extracted'),g=await Account['Instance']()['get_address'](a);if(!g)throw new MessengerError('INVALID_INPUT','account\x20is\x20required\x20when\x20extracting\x20by\x20message\x20IDs');for(const h of b)try{let i;if(typeof h==='string'){const k=h,l=new MessageStorage(g)['getMessageById'](k);if(!l){logger['error']('Message\x20not\x20found:\x20'+k);continue;}i=l;}else i=h;if(!i['zipMetadata']){logger['error']('Message\x20'+i['messageId']+'\x20is\x20not\x20a\x20ZIP\x20archive');continue;}const j=await extract_zip_message(i,f);d['push'](j);}catch(m){const n=typeof h==='string'?h:h['messageId'];logger['error']('Failed\x20to\x20extract\x20message\x20'+n+':',m);}return d;}async function generate_wts(a){const b=await Account['Instance']()['get_address'](a['myAccount']);if(!b)a34a('account\x20not\x20found','generate_wts.myAccount\x20'+a['myAccount']);const c=await a34f(a['peerAccount']);if(!c)a34a('account\x20not\x20found','generate_wts.peerAccount\x20'+a['peerAccount']);const d=a['outputDir']??a34i['join'](getWowokWorkspaceDir(),'wts'),f=await getMessengerManager()['generate_wts'](d,b,c,a['range'],a['excludePlaintext']),g=[];for(const h of f['files'])try{const i=await wts2html(h,{'outputPath':d});if(typeof i==='string')g['push'](i);}catch(j){logger['error']('Failed\x20to\x20render\x20HTML\x20report\x20for\x20'+h+':',j);}return{...f,'htmlFiles':g};}function load_wts(a){const b=a34j['readFileSync'](a,'utf-8');return JSON['parse'](b);}function save_wts(a,b){const c=a34i['dirname'](b);if(!a34j['existsSync'](c))a34j['mkdirSync'](c,{'recursive':!![]});a34j['writeFileSync'](b,JSON['stringify'](a,null,0x2),'utf-8');}function resolveServerPublicKey(a,b){if(b['serverPublicKeys']&&a['serverPublicKeyIndex']!==void 0x0&&a['serverPublicKeyIndex']>=0x0&&a['serverPublicKeyIndex']<b['serverPublicKeys']['length'])return b['serverPublicKeys'][a['serverPublicKeyIndex']]['publicKey'];const c=a;if(c['serverPublicKey'])return c['serverPublicKey'];return null;}async function verify_wts(a){try{const b=load_wts(a);if(!b['payload']||!b['meta'])return{'valid':![],'error':'Invalid\x20WTS\x20file\x20structure','hashValid':![],'hasSignature':![]};if(b['meta']['type']!=='wts')return{'valid':![],'error':'Invalid\x20meta.type:\x20'+b['meta']['type'],'hashValid':![],'hasSignature':!!b['meta']['signature']};const {payload:c,meta:d}=b,e=[...c['messages']]['sort']((m,n)=>{if(m['leafIndex']===void 0x0||n['leafIndex']===void 0x0)return 0x0;return m['leafIndex']-n['leafIndex'];});for(let m=0x0;m<e['length'];m++){const n=e[m];if(!n)return{'valid':![],'error':'Message\x20'+m+':\x20Message\x20is\x20null\x20or\x20undefined','hashValid':![],'hasSignature':!!d['signature']};if(!n['prevRoot'])return{'valid':![],'error':'Message\x20'+m+':\x20Missing\x20prevRoot','hashValid':![],'hasSignature':!!d['signature']};if(!n['merkleRoot'])return{'valid':![],'error':'Message\x20'+m+':\x20Missing\x20merkleRoot','hashValid':![],'hasSignature':!!d['signature']};if(!n['plaintextHash'])return{'valid':![],'error':'Message\x20'+m+':\x20Missing\x20plaintextHash','hashValid':![],'hasSignature':!!d['signature']};if(n['timestamp']===void 0x0||n['timestamp']===null)return{'valid':![],'error':'Message\x20'+m+':\x20Missing\x20timestamp','hashValid':![],'hasSignature':!!d['signature']};if(n['leafIndex']===void 0x0||n['leafIndex']===null)return{'valid':![],'error':'Message\x20'+m+':\x20Missing\x20leafIndex','hashValid':![],'hasSignature':!!d['signature']};const o=verifySingleMerkleRoot(n['prevRoot'],n['merkleRoot'],n['plaintextHash'],n['timestamp'],n['leafIndex']);if(!o['valid'])return{'valid':![],'error':o['error']+'\x20at\x20message\x20'+m+',\x20leafIndex\x20'+n['leafIndex'],'hashValid':![],'hasSignature':!!d['signature']};if(m>0x0){const p=e[m-0x1];if(n['leafIndex']!==p['leafIndex']+0x1)return{'valid':![],'error':'Merkle\x20chain\x20discontinuity:\x20leafIndex\x20'+p['leafIndex']+'\x20->\x20'+n['leafIndex']+'\x20(expected\x20'+(p['leafIndex']+0x1)+')','hashValid':![],'hasSignature':!!d['signature']};if(n['prevRoot']['toLowerCase']()!==p['merkleRoot']['toLowerCase']())return{'valid':![],'error':'Merkle\x20root\x20mismatch\x20at\x20leafIndex\x20'+n['leafIndex']+':\x20expected\x20prevRoot='+p['merkleRoot']+',\x20got\x20'+n['prevRoot'],'hashValid':![],'hasSignature':!!d['signature']};}}for(let q=0x0;q<c['messages']['length'];q++){const r=c['messages'][q];if(!r)return{'valid':![],'error':'Message\x20'+q+':\x20Message\x20is\x20null\x20or\x20undefined','hashValid':![],'hasSignature':!!d['signature']};if(!!!r['zipMetadata']){if(!r['plaintextHash']['startsWith']('0x')||r['plaintextHash']['length']!==0x42)return{'valid':![],'error':'Message\x20'+q+':\x20Invalid\x20plaintextHash\x20format','hashValid':![],'hasSignature':!!d['signature']};if(r['plaintext']){if(hashPlaintext(r['plaintext'],r['clientTimestamp'],r['guardAddress'],r['passportAddress'],r['lastReceivedLeafIndex'])['toLowerCase']()!==r['plaintextHash']['toLowerCase']())return{'valid':![],'error':'Message\x20'+q+':\x20Plaintext\x20hash\x20mismatch','hashValid':![],'hasSignature':!!d['signature']};}}const s=resolveServerPublicKey(r,d);if(r['serverSignature']&&s){if(!r['timestamp'])return{'valid':![],'error':'Message\x20'+q+':\x20Missing\x20timestamp\x20for\x20signature\x20verification','hashValid':![],'hasSignature':!!d['signature']};if(!r['merkleRoot'])return{'valid':![],'error':'Message\x20'+q+':\x20Missing\x20merkleRoot\x20for\x20signature\x20verification','hashValid':![],'hasSignature':!!d['signature']};if(!r['prevRoot'])return{'valid':![],'error':'Message\x20'+q+':\x20Missing\x20prevRoot\x20for\x20signature\x20verification','hashValid':![],'hasSignature':!!d['signature']};if(!verifyFalcon512Signature(s,r['prevRoot']+':'+r['merkleRoot']+':'+r['timestamp']+':'+s,r['serverSignature']))return{'valid':![],'error':'Message\x20'+q+':\x20Server\x20signature\x20verification\x20failed','hashValid':![],'hasSignature':!!d['signature']};}}const {sha256:f}=await import('@noble/hashes/sha2.js'),{bytesToHex:g}=await import('@noble/hashes/utils.js'),h={'wts':b['wts'],...c};if(g(f(new TextEncoder()['encode'](a34g(h))))!==d['hash'])return{'valid':![],'error':'Hash\x20mismatch\x20-\x20content\x20has\x20been\x20tampered','hashValid':![],'hasSignature':!!d['signature']};if(d['messageCount']!==c['messages']['length'])return{'valid':![],'error':'messageCount\x20mismatch:\x20meta='+d['messageCount']+',\x20actual='+c['messages']['length'],'hashValid':!![],'hasSignature':!!d['signature']};const j=c['messages'][c['messages']['length']-0x1];if(d['merkleRoot']['toLowerCase']()!==j['merkleRoot']['toLowerCase']())return{'valid':![],'error':'merkleRoot\x20mismatch:\x20meta='+d['merkleRoot']+',\x20lastMessage='+j['merkleRoot'],'hashValid':!![],'hasSignature':!!d['signature']};const k=[];let l;if(d['signature']){const {Falcon512PublicKey:t}=await import('./publickey-CvXcTL6j.mjs')['then'](z=>z['n']),{signature:u,...v}=d,w=g(f(new TextEncoder()['encode'](a34g(v)))),x=Array['isArray'](d['signature'])?d['signature']:[d['signature']];let y=!![];for(const z of x){let A;const B=z['publicKey'];if(B['startsWith']('0x')){const C=Buffer['from'](B['slice'](0x2),'hex');if(C['length']===0x382)A=C['slice'](0x1);else{if(C['length']===0x381)A=C;else{let D;try{D=new t(B['slice'](0x2))['toWowAddress']();}catch{}k['push']({'publicKey':B,'address':D,'valid':![]}),y=![];continue;}}}else try{const E=Buffer['from'](B,'base64');if(E['length']===0x382)A=E['slice'](0x1);else{if(E['length']===0x381)A=E;else{let F;try{F=new t(B)['toWowAddress']();}catch{}k['push']({'publicKey':B,'address':F,'valid':![]}),y=![];continue;}}}catch{A=Buffer['from'](B,'base64');}try{const G=new t(A),H=Uint8Array['from'](Buffer['from'](z['value'],'base64')),I=await G['verify'](new TextEncoder()['encode'](w),H);let J;try{J=G['toWowAddress']();}catch{}k['push']({'publicKey':B,'address':J,'valid':I});if(!I)y=![];}catch{let K;try{K=new t(A)['toWowAddress']();}catch{}k['push']({'publicKey':B,'address':K,'valid':![]}),y=![];}}l=y;if(!l)return{'valid':![],'error':'Signatures\x20from\x20the\x20following\x20addresses\x20are\x20invalid:\x20'+k['filter'](L=>!L['valid']&&L['address'])['map'](L=>L['address'])['join'](',\x20'),'hashValid':!![],'hasSignature':!![],'signatureValid':![],'signatures':k};}return{'valid':!![],'hashValid':!![],'hasSignature':!!d['signature'],'signatureValid':l,'signatures':k['length']>0x0?k:void 0x0};}catch(L){return{'valid':![],'error':'Verification\x20error:\x20'+L,'hashValid':![],'hasSignature':![]};}}async function sign_wts(a,b,c){const d=await verify_wts(a);if(!d['valid'])throw new MessengerError('INVALID_INPUT','WTS\x20file\x20verification\x20failed:\x20'+d['error']);const e=load_wts(a),f=await Account['Instance']()['get_address'](b);if(!f)a34a('account\x20not\x20found','sign_wts.account\x20'+b);const {sha256:g}=await import('@noble/hashes/sha2.js'),{bytesToHex:h}=await import('@noble/hashes/utils.js'),{signature:i,...j}=e['meta'],k=h(g(new TextEncoder()['encode'](a34g(j)))),l=await Account['Instance']()['signData'](f,k);let m;const n=l['publicKey'];if(n['startsWith']('0x')){const s=Buffer['from'](n['slice'](0x2),'hex');if(s['length']===0x382)m=s['slice'](0x1)['toString']('base64');else{if(s['length']===0x381)m=s['toString']('base64');else throw new MessengerError('INVALID_INPUT','Invalid\x20public\x20key\x20length:\x20'+s['length']+',\x20expected\x20897\x20or\x20898\x20bytes');}}else m=n;const o={'value':Buffer['from'](l['signature']['slice'](0x2),'hex')['toString']('base64'),'publicKey':m,'algorithm':'Falcon512','address':l['address']};let p;if(e['meta']['signature']){const t=Array['isArray'](e['meta']['signature'])?[...e['meta']['signature']]:[e['meta']['signature']],u=t['findIndex'](v=>v['publicKey']===m);if(u>=0x0)t[u]=o,p=t;else p=[...t,o];}else p=[o];const q={...e,'meta':{...e['meta'],'signature':p}};let r;if(c)r=c;else{const v=a34i['extname'](a),w=a34i['basename'](a,v);r=a34i['join'](getWowokWorkspaceDir(),'signed_'+w+v);}return save_wts(q,r),r;}async function wts2html(a,b={}){const c=await import('fs'),d=await import('path');if(c['statSync'](a)['isDirectory']()){const i=c['readdirSync'](a)['filter'](k=>k['endsWith']('.wts'));if(i['length']===0x0)throw new MessengerError('INVALID_INPUT','No\x20.wts\x20files\x20found\x20in\x20directory:\x20'+a);const j=[];for(const k of i){const l=await convertWtsToHtml(d['join'](a,k),b),m=toHtmlFileName(k),n=b['outputPath']?d['join'](b['outputPath'],m):d['join'](getWowokWorkspaceDir(),m),o=d['dirname'](n);if(!c['existsSync'](o))c['mkdirSync'](o,{'recursive':!![]});c['writeFileSync'](n,l,'utf-8'),j['push'](n);}return j;}const e=await convertWtsToHtml(a,b),f=toHtmlFileName(d['basename'](a)),g=b['outputPath']?d['join'](b['outputPath'],f):d['join'](getWowokWorkspaceDir(),f),h=d['dirname'](g);if(!c['existsSync'](h))c['mkdirSync'](h,{'recursive':!![]});return c['writeFileSync'](g,e,'utf-8'),g;}function toHtmlFileName(a){if(a['endsWith']('.wts.json'))return a['slice'](0x0,-0x9)+'.html';if(a['endsWith']('.wts'))return a['slice'](0x0,-0x4)+'.html';const b=a['lastIndexOf']('.');if(b>0x0)return a['slice'](0x0,b)+'.html';return a+'.html';}async function convertWtsToHtml(a,b={}){const {title:title='WTS\x20Document',theme:theme='light'}=b,c=await verify_wts(a),{payload:d,meta:e}=load_wts(a),{bgColor:f,textColor:g,borderColor:h}=getThemeColors(theme),i=e['creator'];let j=-0x1;for(const k of d['messages'])if(k['to']['toLowerCase']()===i['toLowerCase']()){if(k['lastReceivedLeafIndex']!==void 0x0&&k['lastReceivedLeafIndex']>=0x0){if(k['lastReceivedLeafIndex']>j)j=k['lastReceivedLeafIndex'];}}return generateHtmlPage({'title':title,'theme':theme,'bgColor':f,'textColor':g,'borderColor':h,'meta':e,'payload':d,'verifyResult':c,'maxLastReceivedLeafIndex':j,'myAddress':i});}async function proof_message(a,b,c){const d=await Account['Instance']()['get_address'](a);if(!d)a34a('account\x20not\x20found','proof_message.account\x20'+a);const e=new MessageStorage(d),f=e['getMessageById'](b);if(!f)throw new MessengerError('INVALID_INPUT','Message\x20not\x20found:\x20'+b);if(f['fromAddress']['toLowerCase']()!==d['toLowerCase']()&&f['toAddress']['toLowerCase']()!==d['toLowerCase']())throw new MessengerError('INVALID_INPUT','Message\x20does\x20not\x20belong\x20to\x20account\x20'+d);if(!f['serverSignature'])throw new MessengerError('INVALID_PROOF','Message\x20does\x20not\x20have\x20server\x20signature');if(!f['serverPublicKey'])throw new MessengerError('INVALID_PROOF','Message\x20does\x20not\x20have\x20server\x20public\x20key');if(!f['plaintext'])throw new MessengerError('INVALID_PROOF','Message\x20does\x20not\x20have\x20plaintext');const {verifyMessage:g}=await import('./w/messenger/crypto.mjs'),h={'messageId':f['messageId'],'plaintext':f['plaintext'],'plaintextHash':f['plaintextHash'],'createdAt':f['createdAt'],'guardAddress':f['guardAddress'],'passportAddress':f['passportAddress'],'lastReceivedLeafIndex':f['lastReceivedLeafIndex'],'serverSignature':f['serverSignature'],'serverPublicKey':f['serverPublicKey']};if(f['newRoot']&&f['leafIndex']!==void 0x0){if(!f['serverTimestamp'])throw new MessengerError('INVALID_PROOF','Message\x20'+f['messageId']+'\x20missing\x20server\x20timestamp\x20for\x20verification');h['merkleMetadata']={'newRoot':f['newRoot'],'prevRoot':f['prevRoot'],'leafIndex':f['leafIndex'],'serverTimestamp':f['serverTimestamp']};}const i=g(h);if(!i['valid'])throw new MessengerError('INVALID_PROOF','Message\x20verification\x20failed:\x20'+i['error']);if(!f['serverPublicKey'])throw new MessengerError('INVALID_PROOF','Message\x20does\x20not\x20have\x20server\x20public\x20key');const {CallProof:j}=await import('./proof-BgXYvVg_.mjs')['then'](p=>p['r']),k=new j({'proof':f['newRoot'],'server_pubkey':f['serverPublicKey'],'server_signature':f['serverSignature'],'proof_type':0x1,'description':'Message\x20proof\x20for\x20'+b,'item_count':f['leafIndex']??0x1,'about_address':f['fromAddress']['toLowerCase']()===d['toLowerCase']()?f['toAddress']:f['fromAddress']}),l={'network':c,'account':d},m=await k['call'](l),{ResponseData:n}=await import('./w/call/base.mjs'),o=n(m)['find'](p=>p['type']==='Proof');if(!o||!o['object'])throw new MessengerError('INVALID_PROOF','Failed\x20to\x20get\x20proof\x20address\x20from\x20transaction\x20result');return f['proof']=o['object'],e['saveMessage'](f),{'proofAddress':o['object']};}const MIN_PASSPORT_VALIDITY=0xa,MAX_PASSPORT_VALIDITY=0xa*0x16d*0x18*0x3c*0x3c,MAX_BLACKLIST_SIZE_ONCE=0x64,MAX_FRIENDS_SIZE_ONCE=0x64,MAX_GUARDS_SIZE_ONCE=0xa;async function blacklist(a){const b=await Account['Instance']()['get_address'](a['account']);if(!b)a34a('account\x20not\x20found','blacklist.account\x20'+a['account']);const c=getMessengerManager();await c['ensureAccountReady'](b);switch(a['op']){case'add':{let d=await a34e(a['users']);if(d['length']===0x0)a34a('invalid\x20parameter','blacklist.add.users\x20'+a['users']+'\x20have\x20not\x20valid\x20addresses');d=[...new Set(d['map'](e=>e['toLowerCase']()))];if(d['length']>MAX_BLACKLIST_SIZE_ONCE)a34a('invalid\x20parameter','blacklist.add.users\x20'+a['users']+'\x20have\x20too\x20many\x20addresses,\x20max\x20'+MAX_BLACKLIST_SIZE_ONCE);return{'op':'add','result':await c['addToBlacklist'](b,d)};}case'remove':{let e=await a34e(a['users']);if(e['length']===0x0)a34a('invalid\x20parameter','blacklist.remove.users\x20'+a['users']+'\x20have\x20not\x20valid\x20addresses');e=[...new Set(e['map'](f=>f['toLowerCase']()))];if(e['length']>MAX_BLACKLIST_SIZE_ONCE)a34a('invalid\x20parameter','blacklist.remove.users\x20'+a['users']+'\x20have\x20too\x20many\x20addresses,\x20max\x20'+MAX_BLACKLIST_SIZE_ONCE);return{'op':'remove','result':await c['removeFromBlacklist'](b,e)};}case'clear':return{'op':'clear','result':await c['clearBlacklist'](b)};case'get':return{'op':'get','result':await c['getBlacklist'](b)};case'exist':{let f=await a34e(a['users']);if(f['length']===0x0)a34a('invalid\x20parameter','blacklist.exist.users\x20'+a['users']+'\x20have\x20not\x20valid\x20addresses');f=[...new Set(f['map'](g=>g['toLowerCase']()))];if(f['length']>MAX_BLACKLIST_SIZE_ONCE)a34a('invalid\x20parameter','blacklist.exist.users\x20'+a['users']+'\x20have\x20too\x20many\x20addresses,\x20max\x20'+MAX_BLACKLIST_SIZE_ONCE);return{'op':'exist','result':await c['existInBlacklist'](b,f)};}default:throw new MessengerError('INVALID_INPUT','blacklist.unknown\x20op:\x20'+a);}}async function friendslist(a){const b=await Account['Instance']()['get_address'](a['account']);if(!b)a34a('account\x20not\x20found','friendslist.account\x20'+a['account']);const c=getMessengerManager();await c['ensureAccountReady'](b);switch(a['op']){case'add':{let d=await a34e(a['users']);if(d['length']===0x0)a34a('invalid\x20parameter','friendslist.add.users\x20'+a['users']+'\x20have\x20not\x20valid\x20addresses');return d=[...new Set(d['map'](e=>e['toLowerCase']()))],{'op':'add','result':await c['addToFriendsList'](b,d)};}case'remove':{let e=await a34e(a['users']);if(e['length']===0x0)a34a('invalid\x20parameter','friendslist.remove.users\x20'+a['users']+'\x20have\x20not\x20valid\x20addresses');e=[...new Set(e['map'](f=>f['toLowerCase']()))];if(e['length']>MAX_FRIENDS_SIZE_ONCE)a34a('invalid\x20parameter','friendslist.remove.users\x20'+a['users']+'\x20have\x20too\x20many\x20addresses,\x20max\x20'+MAX_FRIENDS_SIZE_ONCE);return{'op':'remove','result':await c['removeFromFriendsList'](b,e)};}case'clear':return{'op':'clear','result':await c['clearFriendsList'](b)};case'get':return{'op':'get','result':await c['getFriendsList'](b)};case'exist':{let f=await a34e(a['users']);if(f['length']===0x0)a34a('invalid\x20parameter','friendslist.exist.users\x20'+a['users']+'\x20have\x20not\x20valid\x20addresses');f=[...new Set(f['map'](g=>g['toLowerCase']()))];if(f['length']>MAX_FRIENDS_SIZE_ONCE)a34a('invalid\x20parameter','friendslist.exist.users\x20'+a['users']+'\x20have\x20too\x20many\x20addresses,\x20max\x20'+MAX_FRIENDS_SIZE_ONCE);return{'op':'exist','result':await c['existInFriendsList'](b,f)};}default:throw new MessengerError('INVALID_INPUT','friendslist.unknown\x20op:\x20'+a);}}async function guardlist(a){const b=await Account['Instance']()['get_address'](a['account']);if(!b)a34a('account\x20not\x20found','guardlist.account\x20'+a['account']);const c=getMessengerManager();await c['ensureAccountReady'](b);switch(a['op']){case'add':{const d=new Map();for(const j of a['guards'])d['set'](j['guard']['toLowerCase'](),j);const e=Array['from'](d['values']());if(e['length']===0x0)a34a('invalid\x20parameter','guardlist.add.guards\x20'+a['guards']+'\x20have\x20not\x20valid\x20guards');if(e['length']>MAX_GUARDS_SIZE_ONCE)a34a('invalid\x20parameter','guardlist.add.guards\x20'+a['guards']+'\x20have\x20too\x20many\x20guards,\x20max\x20'+MAX_GUARDS_SIZE_ONCE);for(const k of e)if(!a34b(k['passportValiditySeconds'])||k['passportValiditySeconds']<MIN_PASSPORT_VALIDITY||k['passportValiditySeconds']>MAX_PASSPORT_VALIDITY)a34a('invalid\x20parameter','Guard\x20'+k['guard']+':\x20passport\x20validity\x20'+k['passportValiditySeconds']+'\x20must\x20be\x20between\x20'+MIN_PASSPORT_VALIDITY+'\x20and\x20'+MAX_PASSPORT_VALIDITY+'\x20seconds');const f=await LocalMark['Instance']()['get_many_address'](e['map'](l=>l['guard']));if(f['length']!==e['length']){const l=new Set(f),m=[];for(const n of e)if(!l['has'](n['guard'])&&!n['guard']['startsWith']('0x'))m['push'](n['guard']);a34a('invalid\x20parameter','Guard\x20not\x20found:\x20'+m['join'](',\x20'));}const h=await a34d({'objects':f,'no_cache':![],'network':c['getConfig']()['network']});if(!h||!h['objects']||h['objects']['length']===0x0)a34a('invalid\x20parameter','Guard\x20not\x20found:\x20'+e['map'](o=>o['guard'])['join'](',\x20'));h['objects']['forEach'](o=>{if(o['type']!=='Guard')a34a('invalid\x20parameter','Guard\x20'+o['object']+'\x20is\x20not\x20a\x20Guard');});const i=e['map']((o,p)=>({'guardAddress':f[p],'passportValiditySeconds':o['passportValiditySeconds']}));return{'op':'add','result':await c['addToGuardList'](b,i)};}case'remove':{const o=[...new Set(a['guards']['map'](q=>q['toLowerCase']()))];if(o['length']===0x0)a34a('invalid\x20parameter','guardlist.remove.guards\x20'+a['guards']+'\x20have\x20not\x20valid\x20guards');if(o['length']>MAX_GUARDS_SIZE_ONCE)a34a('invalid\x20parameter','guardlist.remove.guards\x20'+a['guards']+'\x20have\x20too\x20many\x20guards,\x20max\x20'+MAX_GUARDS_SIZE_ONCE);const p=await LocalMark['Instance']()['get_many_address'](o);if(p['length']!==o['length']){const q=new Set(p),r=[];for(const s of o)if(!q['has'](s)&&!s['startsWith']('0x'))r['push'](s);a34a('invalid\x20parameter','Guard\x20not\x20found:\x20'+r['join'](',\x20'));}return{'op':'remove','result':await c['removeFromGuardList'](b,p)};}case'get':return{'op':'get','result':await c['getGuardList'](b)};default:throw new MessengerError('INVALID_INPUT','guardlist.unknown\x20op:\x20'+a);}}async function settings(a){const b=await Account['Instance']()['get_address'](a['account']);if(!b)a34a('account\x20not\x20found','settings.account\x20'+a['account']);const c=getMessengerManager();await c['ensureAccountReady'](b);switch(a['op']){case'get':return{'op':'get','result':await c['getSettings'](b)};case'set':{const d={};if(a['allowStrangerMessages']!==void 0x0)d['allowStrangerMessages']=a['allowStrangerMessages'];if(a['maxInboxSize']!==void 0x0)d['maxInboxSize']=a['maxInboxSize'];return{'op':'set','result':await c['setSettings'](b,d)};}default:throw new MessengerError('INVALID_INPUT','settings.unknown\x20op:\x20'+a);}}export{verify_wts as _,generate_wts as a,wts2html as b,mark_conversation_as_viewed as c,pull_messages as d,search_messages as f,sign_wts as g,settings as h,friendslist as i,mark_messages_as_viewed as l,send_message as m,extractZipFromPlaintext as n,getMessengerManager as o,send_file as p,extract_zip_messages as r,guardlist as s,blacklist as t,proof_message as u,watch_conversations as v,MessengerManager as x,watch_messages as y};
@@ -1,2 +1,2 @@
1
- import { B as parsePartialSignatures, R as MultiSigPublicKey, Vx as MultiSigSigner, z as MultiSigStruct } from "../index-Bss9JH4A.mjs";
1
+ import { B as parsePartialSignatures, R as MultiSigPublicKey, uS as MultiSigSigner, z as MultiSigStruct } from "../index-5DmaIrpk.mjs";
2
2
  export { MultiSigPublicKey, MultiSigSigner, type MultiSigStruct, parsePartialSignatures };
@@ -1 +1 @@
1
- import{c as a35a,n as a35b,t as a35c}from'../publickey-BZ3tMxym.mjs';export{a35c as MultiSigPublicKey,a35a as MultiSigSigner,a35b as parsePartialSignatures};
1
+ import{c as a36a,n as a36b,t as a36c}from'../publickey-BZ3tMxym.mjs';export{a36c as MultiSigPublicKey,a36a as MultiSigSigner,a36b as parsePartialSignatures};
@@ -1 +1 @@
1
- import{t as a36a}from'./chunk-D7D4PA-g.mjs';var network_exports=a36a({'ENTRYPOINT':()=>ENTRYPOINT,'EXPECTED_CHAIN_IDENTIFIERS':()=>EXPECTED_CHAIN_IDENTIFIERS,'RETIRED_CHAIN_IDENTIFIERS':()=>RETIRED_CHAIN_IDENTIFIERS,'classifyChainIdentifier':()=>classifyChainIdentifier,'getFullnodeUrl':()=>getFullnodeUrl,'getGraphqlUrl':()=>getGraphqlUrl});let ENTRYPOINT=function(a){return a['Testnet']='testnet',a['Localnet']='localnet',a['Mainnet']='mainnet',a;}({});function getFullnodeUrl(a){if(a==='testnet'&&process['env']['WOWOK_RPC_URL'])return process['env']['WOWOK_RPC_URL'];switch(a){case'testnet':return'https://fullnode.testnet.wowok.net:443';case'localnet':return'http://127.0.0.1:9000';case'mainnet':return'https://v2.fullnode.mainnet.wowok.net:443';default:throw new Error('Unknown\x20network:\x20'+a);}}function getGraphqlUrl(a){if(process['env']['WOWOK_GRAPHQL_URL'])return process['env']['WOWOK_GRAPHQL_URL'];switch(a){case'testnet':return'https://graphql.testnet.wowok.net/graphql';case'localnet':return;case'mainnet':return;default:throw new Error('Unknown\x20network:\x20'+a);}}const EXPECTED_CHAIN_IDENTIFIERS={['mainnet']:'c9e743a5',['testnet']:'80aac5ef'},RETIRED_CHAIN_IDENTIFIERS={['mainnet']:['5a6665f2','6f94658c']};function classifyChainIdentifier(a,b){const c=String(b??'')['trim']()['toLowerCase']();if(!c)return'unknown';const d=String(a??'')['trim']()['toLowerCase']();if(RETIRED_CHAIN_IDENTIFIERS[d]?.['includes'](c))return'retired';const e=EXPECTED_CHAIN_IDENTIFIERS[d];if(e&&e===c)return'current';return'unknown';}export{getFullnodeUrl as a,classifyChainIdentifier as i,EXPECTED_CHAIN_IDENTIFIERS as n,getGraphqlUrl as o,RETIRED_CHAIN_IDENTIFIERS as r,network_exports as s,ENTRYPOINT as t};
1
+ import{t as a37a}from'./chunk-D7D4PA-g.mjs';var network_exports=a37a({'ENTRYPOINT':()=>ENTRYPOINT,'EXPECTED_CHAIN_IDENTIFIERS':()=>EXPECTED_CHAIN_IDENTIFIERS,'RETIRED_CHAIN_IDENTIFIERS':()=>RETIRED_CHAIN_IDENTIFIERS,'classifyChainIdentifier':()=>classifyChainIdentifier,'getFullnodeUrl':()=>getFullnodeUrl,'getGraphqlUrl':()=>getGraphqlUrl});let ENTRYPOINT=function(a){return a['Testnet']='testnet',a['Localnet']='localnet',a['Mainnet']='mainnet',a;}({});function getFullnodeUrl(a){if(a==='testnet'&&process['env']['WOWOK_RPC_URL'])return process['env']['WOWOK_RPC_URL'];switch(a){case'testnet':return'https://fullnode.testnet.wowok.net:443';case'localnet':return'http://127.0.0.1:9000';case'mainnet':return'https://v2.fullnode.mainnet.wowok.net:443';default:throw new Error('Unknown\x20network:\x20'+a);}}function getGraphqlUrl(a){if(process['env']['WOWOK_GRAPHQL_URL'])return process['env']['WOWOK_GRAPHQL_URL'];switch(a){case'testnet':return'https://graphql.testnet.wowok.net/graphql';case'localnet':return;case'mainnet':return;default:throw new Error('Unknown\x20network:\x20'+a);}}const EXPECTED_CHAIN_IDENTIFIERS={['mainnet']:'4cd1e4fa',['testnet']:'33b70bb0'},RETIRED_CHAIN_IDENTIFIERS={['mainnet']:['5a6665f2','6f94658c','c9e743a5']};function classifyChainIdentifier(a,b){const c=String(b??'')['trim']()['toLowerCase']();if(!c)return'unknown';const d=String(a??'')['trim']()['toLowerCase']();if(RETIRED_CHAIN_IDENTIFIERS[d]?.['includes'](c))return'retired';const e=EXPECTED_CHAIN_IDENTIFIERS[d];if(e&&e===c)return'current';return'unknown';}export{getFullnodeUrl as a,classifyChainIdentifier as i,EXPECTED_CHAIN_IDENTIFIERS as n,getGraphqlUrl as o,RETIRED_CHAIN_IDENTIFIERS as r,network_exports as s,ENTRYPOINT as t};
@@ -0,0 +1 @@
1
+ import{t as a39a}from'./chunk-D7D4PA-g.mjs';import{o as a39b}from'./exception-o3XVk35a.mjs';import{et as a39c,y as a39d}from'./common-DhtZTgkX.mjs';import{isValidAddress}from'./w/local/local.mjs';import{Hr as a39e,Mr as a39f,Ur as a39g,cn as a39h}from'./util-DttciwF8.mjs';var proof_exports=a39a({'CallProof':()=>CallProof,'create':()=>create,'gen_proof':()=>gen_proof,'proofFn':()=>proofFn}),CallProof=class extends a39h{constructor(a){super(),this['data']=a;}async['call'](a){return await this['prepare'](a),await this['exec'](a);}async['operate'](a,b,c){await this['new_with_mark'](a,b,'Proof',create(b,this['data']?.['description'],this['data']?.['proof'],this['data']?.['server_pubkey'],this['data']?.['server_signature'],this['data']?.['proof_type'],this['data']?.['item_count'],this['data']?.['about_address']),this['data']?.['namedNew']);}};function proofFn(a){return'0x2::proof::'+a;}const gen_proof=async(a,b,c,d,e,f,g,h)=>{return await new CallProof({'proof':b,'server_pubkey':c,'server_signature':d,'proof_type':e,'description':f,'item_count':g,'about_address':h})['call'](a);};function create(a,b,c,d,e,f,g,h){if(!a39c(b))a39b('invalid\x20description','Description\x20length\x20exceeds\x20'+a39d);if(c['length']>a39f)a39b('invalid\x20parameter','Proof\x20length\x20exceeds\x20'+a39f);if(d['length']>a39e)a39b('invalid\x20parameter','Server\x20pubkey\x20length\x20exceeds\x20'+a39e);if(e['length']>a39g)a39b('invalid\x20parameter','Server\x20signature\x20length\x20exceeds\x20'+a39g);if(h&&!isValidAddress(h))a39b('invalid\x20address','About\x20address\x20'+h+'\x20is\x20not\x20valid');return a['moveCall']({'target':proofFn('create_wowok_proof_v2'),'arguments':[a['pure']['string'](c),a['pure']['option']('u64',g),a['pure']['string'](b),a['pure']['string'](d),a['pure']['string'](e),a['pure']['option']('address',h??null),a['pure']['u64'](f),a['object']['clock'](),a['object']['mutObjectLinkerTx']()]});}export{gen_proof as n,proof_exports as r,CallProof as t};
@@ -0,0 +1 @@
1
+ import{t as a46a}from'./client-HlvevC--.mjs';import{o as a46b}from'./exception-o3XVk35a.mjs';import{a as a46c}from'./network-UpRYD8EM.mjs';import'./common-DhtZTgkX.mjs';import{Config}from'./w/local/config.mjs';import{Et as a46d,n as a46e,p as a46f}from'./util-DttciwF8.mjs';const query_received=async a=>{const b=await Config['Instance']()['network_get'](a['network']),c=new a46a({'url':a46c(b),'network':b});if(a['type']===void 0x0||a['type']===null){const e=await a46f(a['name_or_address']);if(!e)a46b('invalid\x20parameter','query_received:\x20Object\x20'+a['name_or_address']+'\x20not\x20found.');return(await c['getOwnedObjects']({'owner':e,'options':{'showContent':!![],'showType':!![]}}))['data']['map'](f=>{return{'id':f?.['data']?.['objectId'],'type':f?.['data']?.['type'],'content_raw':f?.['data']?.['content']?.['fields'],'version':f?.['data']?.['version'],'digest':f?.['data']?.['digest']};});}if(a['type']==='CoinWrapper'){const f=typeof a['name_or_address']==='string'?a['name_or_address']:a['name_or_address']['name_or_address'];if(!f)a46b('invalid\x20parameter','query_received:\x20name_or_address\x20is\x20required.');const g=await a46f(a['name_or_address']);if(!g)a46b('invalid\x20parameter','query_received:\x20Object\x20'+f+'\x20not\x20found.');let h;try{const m=await a46d({'objects':[f],'no_cache':![],'network':a['network']});if(m?.['objects']&&m['objects']['length']===0x1)h=a46e(m['objects'][0x0]['type_raw']);}catch{h=void 0x0;}const i=h?'0x2::payment::CoinWrapper<'+h+'>':void 0x0,j=await c['getOwnedObjects']({'owner':g,...i?{'filter':{'StructType':i}}:{},'options':{'showContent':!![],'showType':!![]}});let k=BigInt(0x0);const l=j['data']['filter'](n=>!i||(n?.['data']?.['type']??'')['includes']('::payment::CoinWrapper<'))['map'](n=>{const o=n?.['data']?.['content']?.['fields'];return k+=BigInt(o?.['coin']?.['fields']?.['balance']??0x0),{'payment':o?.['payment'],'balance':o?.['coin']?.['fields']?.['balance'],'id':n?.['data']?.['objectId'],'type':o?.['coin']?.['type']??n?.['data']?.['type'],'version':n?.['data']?.['version'],'digest':n?.['data']?.['digest']};});return{'balance':k,'received':l,'token_type':h??a46e(l[0x0]?.['type']??'')??''};}const d=await a46f(a['name_or_address']);if(!d)a46b('invalid\x20parameter','query_received:\x20Object\x20'+a['name_or_address']+'\x20not\x20found.');return(await c['getOwnedObjects']({'owner':d,'filter':{'StructType':a['type']},'options':{'showContent':!![],'showType':!![]}}))['data']['map'](n=>{return{'id':n?.['data']?.['objectId'],'type':n?.['data']?.['type'],'content_raw':n?.['data']?.['content']?.['fields'],'version':n?.['data']?.['version'],'digest':n?.['data']?.['digest']};});};export{query_received as t};