wowok 2.1.40 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (399) hide show
  1. package/dist/cjs/bcs/bcs.js +1 -253
  2. package/dist/cjs/bcs/effects.js +1 -199
  3. package/dist/cjs/bcs/index.js +1 -51
  4. package/dist/cjs/bcs/pure.js +1 -36
  5. package/dist/cjs/bcs/type-tag-serializer.js +1 -104
  6. package/dist/cjs/bcs/types.js +1 -3
  7. package/dist/cjs/client/index.js +1 -4
  8. package/dist/cjs/client/network.js +1 -15
  9. package/dist/cjs/cryptography/index.js +1 -6
  10. package/dist/cjs/cryptography/intent.js +1 -14
  11. package/dist/cjs/cryptography/keypair.js +1 -74
  12. package/dist/cjs/cryptography/mnemonics.js +1 -20
  13. package/dist/cjs/cryptography/publickey.js +1 -80
  14. package/dist/cjs/cryptography/signature-scheme.js +1 -22
  15. package/dist/cjs/cryptography/signature.js +1 -41
  16. package/dist/cjs/experimental/cache.js +1 -58
  17. package/dist/cjs/experimental/client.js +1 -19
  18. package/dist/cjs/experimental/core.js +1 -80
  19. package/dist/cjs/experimental/errors.js +1 -24
  20. package/dist/cjs/experimental/index.js +1 -5
  21. package/dist/cjs/experimental/persistent-storage.js +1 -220
  22. package/dist/cjs/experimental/persistent-storage.test.js +1 -144
  23. package/dist/cjs/experimental/transports/utils.js +1 -96
  24. package/dist/cjs/experimental/types.js +1 -1
  25. package/dist/cjs/faucet/faucet.js +1 -99
  26. package/dist/cjs/faucet/index.js +1 -1
  27. package/dist/cjs/grpc/client.js +1 -42
  28. package/dist/cjs/grpc/core.js +1 -587
  29. package/dist/cjs/grpc/index.js +1 -2
  30. package/dist/cjs/grpc/proto/google/protobuf/any.js +1 -106
  31. package/dist/cjs/grpc/proto/google/protobuf/duration.js +1 -58
  32. package/dist/cjs/grpc/proto/google/protobuf/empty.js +1 -7
  33. package/dist/cjs/grpc/proto/google/protobuf/field_mask.js +1 -47
  34. package/dist/cjs/grpc/proto/google/protobuf/struct.js +1 -191
  35. package/dist/cjs/grpc/proto/google/protobuf/timestamp.js +1 -91
  36. package/dist/cjs/grpc/proto/google/rpc/error_details.js +1 -265
  37. package/dist/cjs/grpc/proto/google/rpc/status.js +1 -23
  38. package/dist/cjs/grpc/proto/sui/rpc/v2/argument.js +1 -46
  39. package/dist/cjs/grpc/proto/sui/rpc/v2/balance_change.js +1 -29
  40. package/dist/cjs/grpc/proto/sui/rpc/v2/bcs.js +1 -22
  41. package/dist/cjs/grpc/proto/sui/rpc/v2/checkpoint.js +1 -54
  42. package/dist/cjs/grpc/proto/sui/rpc/v2/checkpoint_contents.js +1 -60
  43. package/dist/cjs/grpc/proto/sui/rpc/v2/checkpoint_summary.js +1 -144
  44. package/dist/cjs/grpc/proto/sui/rpc/v2/effects.js +1 -271
  45. package/dist/cjs/grpc/proto/sui/rpc/v2/epoch.js +1 -64
  46. package/dist/cjs/grpc/proto/sui/rpc/v2/error_reason.js +1 -6
  47. package/dist/cjs/grpc/proto/sui/rpc/v2/event.js +1 -62
  48. package/dist/cjs/grpc/proto/sui/rpc/v2/executed_transaction.js +1 -64
  49. package/dist/cjs/grpc/proto/sui/rpc/v2/execution_status.js +1 -481
  50. package/dist/cjs/grpc/proto/sui/rpc/v2/gas_cost_summary.js +1 -40
  51. package/dist/cjs/grpc/proto/sui/rpc/v2/input.js +1 -61
  52. package/dist/cjs/grpc/proto/sui/rpc/v2/jwk.js +1 -57
  53. package/dist/cjs/grpc/proto/sui/rpc/v2/ledger_service.client.js +1 -39
  54. package/dist/cjs/grpc/proto/sui/rpc/v2/ledger_service.js +1 -329
  55. package/dist/cjs/grpc/proto/sui/rpc/v2/move_package.js +1 -447
  56. package/dist/cjs/grpc/proto/sui/rpc/v2/move_package_service.client.js +1 -27
  57. package/dist/cjs/grpc/proto/sui/rpc/v2/move_package_service.js +1 -206
  58. package/dist/cjs/grpc/proto/sui/rpc/v2/name_service.client.js +1 -19
  59. package/dist/cjs/grpc/proto/sui/rpc/v2/name_service.js +1 -109
  60. package/dist/cjs/grpc/proto/sui/rpc/v2/object.js +1 -90
  61. package/dist/cjs/grpc/proto/sui/rpc/v2/object_reference.js +1 -30
  62. package/dist/cjs/grpc/proto/sui/rpc/v2/owner.js +1 -39
  63. package/dist/cjs/grpc/proto/sui/rpc/v2/protocol_config.js +1 -30
  64. package/dist/cjs/grpc/proto/sui/rpc/v2/signature.js +1 -501
  65. package/dist/cjs/grpc/proto/sui/rpc/v2/signature_scheme.js +1 -10
  66. package/dist/cjs/grpc/proto/sui/rpc/v2/signature_verification_service.client.js +1 -15
  67. package/dist/cjs/grpc/proto/sui/rpc/v2/signature_verification_service.js +1 -62
  68. package/dist/cjs/grpc/proto/sui/rpc/v2/state_service.client.js +1 -31
  69. package/dist/cjs/grpc/proto/sui/rpc/v2/state_service.js +1 -504
  70. package/dist/cjs/grpc/proto/sui/rpc/v2/subscription_service.client.js +1 -15
  71. package/dist/cjs/grpc/proto/sui/rpc/v2/subscription_service.js +1 -37
  72. package/dist/cjs/grpc/proto/sui/rpc/v2/system_state.js +1 -709
  73. package/dist/cjs/grpc/proto/sui/rpc/v2/transaction.js +1 -950
  74. package/dist/cjs/grpc/proto/sui/rpc/v2/transaction_execution_service.client.js +1 -19
  75. package/dist/cjs/grpc/proto/sui/rpc/v2/transaction_execution_service.js +1 -144
  76. package/dist/cjs/index.js +1 -22
  77. package/dist/cjs/jsonRpc/client.js +1 -516
  78. package/dist/cjs/jsonRpc/core.js +1 -587
  79. package/dist/cjs/jsonRpc/errors.js +1 -38
  80. package/dist/cjs/jsonRpc/http-transport.js +1 -70
  81. package/dist/cjs/jsonRpc/index.js +1 -3
  82. package/dist/cjs/jsonRpc/json-rpc-resolver.js +1 -296
  83. package/dist/cjs/jsonRpc/rpc-websocket-client.js +1 -155
  84. package/dist/cjs/jsonRpc/types/chain.js +1 -1
  85. package/dist/cjs/jsonRpc/types/changes.js +1 -1
  86. package/dist/cjs/jsonRpc/types/coins.js +1 -1
  87. package/dist/cjs/jsonRpc/types/common.js +1 -1
  88. package/dist/cjs/jsonRpc/types/generated.js +1 -1
  89. package/dist/cjs/jsonRpc/types/index.js +1 -1
  90. package/dist/cjs/jsonRpc/types/params.js +1 -1
  91. package/dist/cjs/keypairs/ed25519/ed25519-hd-key.js +1 -58
  92. package/dist/cjs/keypairs/ed25519/index.js +1 -2
  93. package/dist/cjs/keypairs/ed25519/keypair.js +1 -90
  94. package/dist/cjs/keypairs/ed25519/publickey.js +1 -50
  95. package/dist/cjs/keypairs/index.js +1 -4
  96. package/dist/cjs/keypairs/passkey/index.js +1 -2
  97. package/dist/cjs/keypairs/passkey/keypair.js +1 -155
  98. package/dist/cjs/keypairs/passkey/publickey.js +1 -117
  99. package/dist/cjs/keypairs/passkey/types.js +1 -1
  100. package/dist/cjs/keypairs/secp256k1/index.js +1 -2
  101. package/dist/cjs/keypairs/secp256k1/keypair.js +1 -82
  102. package/dist/cjs/keypairs/secp256k1/publickey.js +1 -51
  103. package/dist/cjs/keypairs/secp256r1/index.js +1 -2
  104. package/dist/cjs/keypairs/secp256r1/keypair.js +1 -78
  105. package/dist/cjs/keypairs/secp256r1/publickey.js +1 -52
  106. package/dist/cjs/multisig/index.js +1 -2
  107. package/dist/cjs/multisig/publickey.js +1 -201
  108. package/dist/cjs/multisig/signer.js +1 -58
  109. package/dist/cjs/transactions/Arguments.js +1 -9
  110. package/dist/cjs/transactions/Commands.js +1 -102
  111. package/dist/cjs/transactions/Inputs.js +1 -52
  112. package/dist/cjs/transactions/ObjectCache.js +1 -205
  113. package/dist/cjs/transactions/Transaction.js +1 -574
  114. package/dist/cjs/transactions/TransactionData.js +1 -409
  115. package/dist/cjs/transactions/__tests__/Transaction.test.js +1 -160
  116. package/dist/cjs/transactions/__tests__/bcs.test.js +1 -182
  117. package/dist/cjs/transactions/data/internal.js +1 -169
  118. package/dist/cjs/transactions/data/v1.js +1 -469
  119. package/dist/cjs/transactions/data/v2.js +1 -97
  120. package/dist/cjs/transactions/executor/caching.js +1 -65
  121. package/dist/cjs/transactions/executor/parallel.js +1 -347
  122. package/dist/cjs/transactions/executor/queue.js +1 -59
  123. package/dist/cjs/transactions/executor/serial.js +1 -99
  124. package/dist/cjs/transactions/hash.js +1 -8
  125. package/dist/cjs/transactions/index.js +1 -12
  126. package/dist/cjs/transactions/intents/CoinWithBalance.js +1 -145
  127. package/dist/cjs/transactions/object.js +1 -87
  128. package/dist/cjs/transactions/plugins/NamedPackagesPlugin.js +1 -11
  129. package/dist/cjs/transactions/pure.js +1 -36
  130. package/dist/cjs/transactions/resolve.js +1 -69
  131. package/dist/cjs/transactions/serializer.js +1 -167
  132. package/dist/cjs/transactions/utils.js +1 -121
  133. package/dist/cjs/utils/constants.js +1 -18
  134. package/dist/cjs/utils/derived-objects.js +1 -8
  135. package/dist/cjs/utils/dynamic-fields.js +1 -17
  136. package/dist/cjs/utils/format.js +1 -11
  137. package/dist/cjs/utils/index.js +1 -8
  138. package/dist/cjs/utils/move-registry.js +1 -24
  139. package/dist/cjs/utils/sui-types.js +1 -66
  140. package/dist/cjs/utils/suins.js +1 -33
  141. package/dist/cjs/verify/index.js +1 -1
  142. package/dist/cjs/verify/verify.js +1 -87
  143. package/dist/cjs/version.js +1 -2
  144. package/dist/cjs/w/call/allocation.js +1 -345
  145. package/dist/cjs/w/call/arb.js +1 -103
  146. package/dist/cjs/w/call/arbitration.js +1 -1192
  147. package/dist/cjs/w/call/base.js +1 -293
  148. package/dist/cjs/w/call/contact.js +1 -345
  149. package/dist/cjs/w/call/demand.js +1 -681
  150. package/dist/cjs/w/call/entity.js +1 -173
  151. package/dist/cjs/w/call/guard-ins.js +1 -4449
  152. package/dist/cjs/w/call/guard.d.ts +113 -0
  153. package/dist/cjs/w/call/guard.js +1 -1048
  154. package/dist/cjs/w/call/index.js +1 -22
  155. package/dist/cjs/w/call/machine.js +1 -1127
  156. package/dist/cjs/w/call/order.js +1 -337
  157. package/dist/cjs/w/call/passport.js +1 -220
  158. package/dist/cjs/w/call/payment.js +1 -178
  159. package/dist/cjs/w/call/permission.js +1 -1162
  160. package/dist/cjs/w/call/personal.js +1 -139
  161. package/dist/cjs/w/call/progress.js +1 -678
  162. package/dist/cjs/w/call/proof.js +1 -66
  163. package/dist/cjs/w/call/repository.js +1 -1024
  164. package/dist/cjs/w/call/resource.js +1 -108
  165. package/dist/cjs/w/call/reward.js +1 -675
  166. package/dist/cjs/w/call/service.js +1 -1960
  167. package/dist/cjs/w/call/treasury.js +1 -873
  168. package/dist/cjs/w/call/util.d.ts +1 -0
  169. package/dist/cjs/w/call/util.js +1 -566
  170. package/dist/cjs/w/common.js +1 -571
  171. package/dist/cjs/w/exception.js +1 -618
  172. package/dist/cjs/w/index.js +1 -8
  173. package/dist/cjs/w/local/account.js +1 -656
  174. package/dist/cjs/w/local/cache.js +1 -161
  175. package/dist/cjs/w/local/config.js +1 -43
  176. package/dist/cjs/w/local/index.js +1 -228
  177. package/dist/cjs/w/local/local.js +1 -574
  178. package/dist/cjs/w/local/storage.js +1 -185
  179. package/dist/cjs/w/local/token.js +1 -131
  180. package/dist/cjs/w/local/util.js +1 -26
  181. package/dist/cjs/w/local/wip.js +1 -864
  182. package/dist/cjs/w/messenger/crypto.js +1 -380
  183. package/dist/cjs/w/messenger/index.js +1 -4
  184. package/dist/cjs/w/messenger/messenger-api.js +1 -1154
  185. package/dist/cjs/w/messenger/messenger-manager.js +1 -1003
  186. package/dist/cjs/w/messenger/messenger.js +1 -1093
  187. package/dist/cjs/w/messenger/server.js +1 -343
  188. package/dist/cjs/w/messenger/session.js +1 -628
  189. package/dist/cjs/w/messenger/storage.js +1 -1023
  190. package/dist/cjs/w/messenger/templates/wts-html-template.js +1 -371
  191. package/dist/cjs/w/messenger/types.js +1 -76
  192. package/dist/cjs/w/messenger/utils.js +1 -12
  193. package/dist/cjs/w/query/bult-in.js +1 -95
  194. package/dist/cjs/w/query/event.js +1 -137
  195. package/dist/cjs/w/query/index.js +1 -5
  196. package/dist/cjs/w/query/object.js +1 -1550
  197. package/dist/cjs/w/query/received.js +1 -62
  198. package/dist/cjs/w/query/util.js +1 -49
  199. package/dist/cjs/w/util.js +1 -587
  200. package/dist/esm/bcs/bcs.js +1 -253
  201. package/dist/esm/bcs/effects.js +1 -199
  202. package/dist/esm/bcs/index.js +1 -51
  203. package/dist/esm/bcs/pure.js +1 -36
  204. package/dist/esm/bcs/type-tag-serializer.js +1 -104
  205. package/dist/esm/bcs/types.js +1 -3
  206. package/dist/esm/client/index.js +1 -4
  207. package/dist/esm/client/network.js +1 -15
  208. package/dist/esm/cryptography/index.js +1 -6
  209. package/dist/esm/cryptography/intent.js +1 -14
  210. package/dist/esm/cryptography/keypair.js +1 -74
  211. package/dist/esm/cryptography/mnemonics.js +1 -20
  212. package/dist/esm/cryptography/publickey.js +1 -80
  213. package/dist/esm/cryptography/signature-scheme.js +1 -22
  214. package/dist/esm/cryptography/signature.js +1 -41
  215. package/dist/esm/experimental/cache.js +1 -58
  216. package/dist/esm/experimental/client.js +1 -19
  217. package/dist/esm/experimental/core.js +1 -80
  218. package/dist/esm/experimental/errors.js +1 -24
  219. package/dist/esm/experimental/index.js +1 -5
  220. package/dist/esm/experimental/persistent-storage.js +1 -220
  221. package/dist/esm/experimental/persistent-storage.test.js +1 -144
  222. package/dist/esm/experimental/transports/utils.js +1 -96
  223. package/dist/esm/experimental/types.js +1 -1
  224. package/dist/esm/faucet/faucet.js +1 -99
  225. package/dist/esm/faucet/index.js +1 -1
  226. package/dist/esm/grpc/client.js +1 -42
  227. package/dist/esm/grpc/core.js +1 -587
  228. package/dist/esm/grpc/index.js +1 -2
  229. package/dist/esm/grpc/proto/google/protobuf/any.js +1 -106
  230. package/dist/esm/grpc/proto/google/protobuf/duration.js +1 -58
  231. package/dist/esm/grpc/proto/google/protobuf/empty.js +1 -7
  232. package/dist/esm/grpc/proto/google/protobuf/field_mask.js +1 -47
  233. package/dist/esm/grpc/proto/google/protobuf/struct.js +1 -191
  234. package/dist/esm/grpc/proto/google/protobuf/timestamp.js +1 -91
  235. package/dist/esm/grpc/proto/google/rpc/error_details.js +1 -265
  236. package/dist/esm/grpc/proto/google/rpc/status.js +1 -23
  237. package/dist/esm/grpc/proto/sui/rpc/v2/argument.js +1 -46
  238. package/dist/esm/grpc/proto/sui/rpc/v2/balance_change.js +1 -29
  239. package/dist/esm/grpc/proto/sui/rpc/v2/bcs.js +1 -22
  240. package/dist/esm/grpc/proto/sui/rpc/v2/checkpoint.js +1 -54
  241. package/dist/esm/grpc/proto/sui/rpc/v2/checkpoint_contents.js +1 -60
  242. package/dist/esm/grpc/proto/sui/rpc/v2/checkpoint_summary.js +1 -144
  243. package/dist/esm/grpc/proto/sui/rpc/v2/effects.js +1 -271
  244. package/dist/esm/grpc/proto/sui/rpc/v2/epoch.js +1 -64
  245. package/dist/esm/grpc/proto/sui/rpc/v2/error_reason.js +1 -6
  246. package/dist/esm/grpc/proto/sui/rpc/v2/event.js +1 -62
  247. package/dist/esm/grpc/proto/sui/rpc/v2/executed_transaction.js +1 -64
  248. package/dist/esm/grpc/proto/sui/rpc/v2/execution_status.js +1 -481
  249. package/dist/esm/grpc/proto/sui/rpc/v2/gas_cost_summary.js +1 -40
  250. package/dist/esm/grpc/proto/sui/rpc/v2/input.js +1 -61
  251. package/dist/esm/grpc/proto/sui/rpc/v2/jwk.js +1 -57
  252. package/dist/esm/grpc/proto/sui/rpc/v2/ledger_service.client.js +1 -39
  253. package/dist/esm/grpc/proto/sui/rpc/v2/ledger_service.js +1 -329
  254. package/dist/esm/grpc/proto/sui/rpc/v2/move_package.js +1 -447
  255. package/dist/esm/grpc/proto/sui/rpc/v2/move_package_service.client.js +1 -27
  256. package/dist/esm/grpc/proto/sui/rpc/v2/move_package_service.js +1 -206
  257. package/dist/esm/grpc/proto/sui/rpc/v2/name_service.client.js +1 -19
  258. package/dist/esm/grpc/proto/sui/rpc/v2/name_service.js +1 -109
  259. package/dist/esm/grpc/proto/sui/rpc/v2/object.js +1 -90
  260. package/dist/esm/grpc/proto/sui/rpc/v2/object_reference.js +1 -30
  261. package/dist/esm/grpc/proto/sui/rpc/v2/owner.js +1 -39
  262. package/dist/esm/grpc/proto/sui/rpc/v2/protocol_config.js +1 -30
  263. package/dist/esm/grpc/proto/sui/rpc/v2/signature.js +1 -501
  264. package/dist/esm/grpc/proto/sui/rpc/v2/signature_scheme.js +1 -10
  265. package/dist/esm/grpc/proto/sui/rpc/v2/signature_verification_service.client.js +1 -15
  266. package/dist/esm/grpc/proto/sui/rpc/v2/signature_verification_service.js +1 -62
  267. package/dist/esm/grpc/proto/sui/rpc/v2/state_service.client.js +1 -31
  268. package/dist/esm/grpc/proto/sui/rpc/v2/state_service.js +1 -504
  269. package/dist/esm/grpc/proto/sui/rpc/v2/subscription_service.client.js +1 -15
  270. package/dist/esm/grpc/proto/sui/rpc/v2/subscription_service.js +1 -37
  271. package/dist/esm/grpc/proto/sui/rpc/v2/system_state.js +1 -709
  272. package/dist/esm/grpc/proto/sui/rpc/v2/transaction.js +1 -950
  273. package/dist/esm/grpc/proto/sui/rpc/v2/transaction_execution_service.client.js +1 -19
  274. package/dist/esm/grpc/proto/sui/rpc/v2/transaction_execution_service.js +1 -144
  275. package/dist/esm/index.js +1 -22
  276. package/dist/esm/jsonRpc/client.js +1 -516
  277. package/dist/esm/jsonRpc/core.js +1 -587
  278. package/dist/esm/jsonRpc/errors.js +1 -38
  279. package/dist/esm/jsonRpc/http-transport.js +1 -70
  280. package/dist/esm/jsonRpc/index.js +1 -3
  281. package/dist/esm/jsonRpc/json-rpc-resolver.js +1 -296
  282. package/dist/esm/jsonRpc/rpc-websocket-client.js +1 -155
  283. package/dist/esm/jsonRpc/types/chain.js +1 -1
  284. package/dist/esm/jsonRpc/types/changes.js +1 -1
  285. package/dist/esm/jsonRpc/types/coins.js +1 -1
  286. package/dist/esm/jsonRpc/types/common.js +1 -1
  287. package/dist/esm/jsonRpc/types/generated.js +1 -1
  288. package/dist/esm/jsonRpc/types/index.js +1 -1
  289. package/dist/esm/jsonRpc/types/params.js +1 -1
  290. package/dist/esm/keypairs/ed25519/ed25519-hd-key.js +1 -58
  291. package/dist/esm/keypairs/ed25519/index.js +1 -2
  292. package/dist/esm/keypairs/ed25519/keypair.js +1 -90
  293. package/dist/esm/keypairs/ed25519/publickey.js +1 -50
  294. package/dist/esm/keypairs/index.js +1 -4
  295. package/dist/esm/keypairs/passkey/index.js +1 -2
  296. package/dist/esm/keypairs/passkey/keypair.js +1 -155
  297. package/dist/esm/keypairs/passkey/publickey.js +1 -117
  298. package/dist/esm/keypairs/passkey/types.js +1 -1
  299. package/dist/esm/keypairs/secp256k1/index.js +1 -2
  300. package/dist/esm/keypairs/secp256k1/keypair.js +1 -82
  301. package/dist/esm/keypairs/secp256k1/publickey.js +1 -51
  302. package/dist/esm/keypairs/secp256r1/index.js +1 -2
  303. package/dist/esm/keypairs/secp256r1/keypair.js +1 -78
  304. package/dist/esm/keypairs/secp256r1/publickey.js +1 -52
  305. package/dist/esm/multisig/index.js +1 -2
  306. package/dist/esm/multisig/publickey.js +1 -201
  307. package/dist/esm/multisig/signer.js +1 -58
  308. package/dist/esm/transactions/Arguments.js +1 -9
  309. package/dist/esm/transactions/Commands.js +1 -102
  310. package/dist/esm/transactions/Inputs.js +1 -52
  311. package/dist/esm/transactions/ObjectCache.js +1 -205
  312. package/dist/esm/transactions/Transaction.js +1 -574
  313. package/dist/esm/transactions/TransactionData.js +1 -409
  314. package/dist/esm/transactions/__tests__/Transaction.test.js +1 -160
  315. package/dist/esm/transactions/__tests__/bcs.test.js +1 -182
  316. package/dist/esm/transactions/data/internal.js +1 -169
  317. package/dist/esm/transactions/data/v1.js +1 -469
  318. package/dist/esm/transactions/data/v2.js +1 -97
  319. package/dist/esm/transactions/executor/caching.js +1 -65
  320. package/dist/esm/transactions/executor/parallel.js +1 -347
  321. package/dist/esm/transactions/executor/queue.js +1 -59
  322. package/dist/esm/transactions/executor/serial.js +1 -99
  323. package/dist/esm/transactions/hash.js +1 -8
  324. package/dist/esm/transactions/index.js +1 -12
  325. package/dist/esm/transactions/intents/CoinWithBalance.js +1 -145
  326. package/dist/esm/transactions/object.js +1 -87
  327. package/dist/esm/transactions/plugins/NamedPackagesPlugin.js +1 -11
  328. package/dist/esm/transactions/pure.js +1 -36
  329. package/dist/esm/transactions/resolve.js +1 -69
  330. package/dist/esm/transactions/serializer.js +1 -167
  331. package/dist/esm/transactions/utils.js +1 -121
  332. package/dist/esm/utils/constants.js +1 -18
  333. package/dist/esm/utils/derived-objects.js +1 -8
  334. package/dist/esm/utils/dynamic-fields.js +1 -17
  335. package/dist/esm/utils/format.js +1 -11
  336. package/dist/esm/utils/index.js +1 -8
  337. package/dist/esm/utils/move-registry.js +1 -24
  338. package/dist/esm/utils/sui-types.js +1 -66
  339. package/dist/esm/utils/suins.js +1 -33
  340. package/dist/esm/verify/index.js +1 -1
  341. package/dist/esm/verify/verify.js +1 -87
  342. package/dist/esm/version.js +1 -2
  343. package/dist/esm/w/call/allocation.js +1 -345
  344. package/dist/esm/w/call/arb.js +1 -103
  345. package/dist/esm/w/call/arbitration.js +1 -1192
  346. package/dist/esm/w/call/base.js +1 -293
  347. package/dist/esm/w/call/contact.js +1 -345
  348. package/dist/esm/w/call/demand.js +1 -681
  349. package/dist/esm/w/call/entity.js +1 -173
  350. package/dist/esm/w/call/guard-ins.js +1 -4449
  351. package/dist/esm/w/call/guard.d.ts +113 -0
  352. package/dist/esm/w/call/guard.js +1 -1048
  353. package/dist/esm/w/call/index.js +1 -22
  354. package/dist/esm/w/call/machine.js +1 -1127
  355. package/dist/esm/w/call/order.js +1 -337
  356. package/dist/esm/w/call/passport.js +1 -220
  357. package/dist/esm/w/call/payment.js +1 -178
  358. package/dist/esm/w/call/permission.js +1 -1162
  359. package/dist/esm/w/call/personal.js +1 -139
  360. package/dist/esm/w/call/progress.js +1 -678
  361. package/dist/esm/w/call/proof.js +1 -66
  362. package/dist/esm/w/call/repository.js +1 -1024
  363. package/dist/esm/w/call/resource.js +1 -108
  364. package/dist/esm/w/call/reward.js +1 -675
  365. package/dist/esm/w/call/service.js +1 -1960
  366. package/dist/esm/w/call/treasury.js +1 -873
  367. package/dist/esm/w/call/util.d.ts +1 -0
  368. package/dist/esm/w/call/util.js +1 -566
  369. package/dist/esm/w/common.js +1 -571
  370. package/dist/esm/w/exception.js +1 -618
  371. package/dist/esm/w/index.js +1 -8
  372. package/dist/esm/w/local/account.js +1 -656
  373. package/dist/esm/w/local/cache.js +1 -161
  374. package/dist/esm/w/local/config.js +1 -43
  375. package/dist/esm/w/local/index.js +1 -228
  376. package/dist/esm/w/local/local.js +1 -574
  377. package/dist/esm/w/local/storage.js +1 -185
  378. package/dist/esm/w/local/token.js +1 -131
  379. package/dist/esm/w/local/util.js +1 -26
  380. package/dist/esm/w/local/wip.js +1 -864
  381. package/dist/esm/w/messenger/crypto.js +1 -380
  382. package/dist/esm/w/messenger/index.js +1 -4
  383. package/dist/esm/w/messenger/messenger-api.js +1 -1154
  384. package/dist/esm/w/messenger/messenger-manager.js +1 -1003
  385. package/dist/esm/w/messenger/messenger.js +1 -1093
  386. package/dist/esm/w/messenger/server.js +1 -343
  387. package/dist/esm/w/messenger/session.js +1 -628
  388. package/dist/esm/w/messenger/storage.js +1 -1023
  389. package/dist/esm/w/messenger/templates/wts-html-template.js +1 -371
  390. package/dist/esm/w/messenger/types.js +1 -76
  391. package/dist/esm/w/messenger/utils.js +1 -12
  392. package/dist/esm/w/query/bult-in.js +1 -95
  393. package/dist/esm/w/query/event.js +1 -137
  394. package/dist/esm/w/query/index.js +1 -5
  395. package/dist/esm/w/query/object.js +1 -1550
  396. package/dist/esm/w/query/received.js +1 -62
  397. package/dist/esm/w/query/util.js +1 -49
  398. package/dist/esm/w/util.js +1 -587
  399. package/package.json +5 -2
@@ -1,1003 +1 @@
1
- import { Messenger } from "./messenger.js";
2
- import { MessageStorage } from "./storage.js";
3
- import { MessengerPersistStorage } from "./storage.js";
4
- import { MessageType, MessageStatus, WTS_MAX_MESSAGE_COUNT, WTS_SCHEMA_URL, } from "./types.js";
5
- import { MessengerError, MessengerErrorCode, DEFAULT_MESSENGER_CONFIG, } from "./types.js";
6
- import { canonicalizeJson } from "./utils.js";
7
- import { MAX_MESSENGER_ACCOUNTS } from "../local/account.js";
8
- import { GetAccountOrMark_Address } from "../local/index.js";
9
- const MAX_ACCOUNTS = MAX_MESSENGER_ACCOUNTS;
10
- const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
11
- export class MessengerManager {
12
- accounts = new Map();
13
- config;
14
- messageListeners = new Set();
15
- isWatching = false;
16
- persistStorage;
17
- instanceId;
18
- accountRefreshTimer = null;
19
- pollingLockedAccounts = new Set();
20
- constructor(options) {
21
- this.config = {
22
- ...DEFAULT_MESSENGER_CONFIG,
23
- ...options?.messengerConfig,
24
- };
25
- this.instanceId = options?.instanceId || "default";
26
- this.persistStorage = new MessengerPersistStorage();
27
- }
28
- findAccount(address) {
29
- return this.accounts.get(address.toLowerCase());
30
- }
31
- getConfig() {
32
- return this.config;
33
- }
34
- get_accounts() {
35
- return Array.from(this.accounts.values()).map((acc) => acc.address);
36
- }
37
- async refresh_accounts() {
38
- const { Account } = await import("../local/account.js");
39
- const messengerAccounts = await Account.Instance().list_messenger_accounts();
40
- const currentAddresses = new Set(this.accounts.keys());
41
- const newAddresses = new Set(messengerAccounts.map((a) => a.address.toLowerCase()));
42
- for (const address of currentAddresses) {
43
- if (!newAddresses.has(address)) {
44
- this.remove_account_internal(address);
45
- }
46
- }
47
- for (const account of messengerAccounts) {
48
- const addressLower = account.address.toLowerCase();
49
- if (!this.accounts.has(addressLower)) {
50
- try {
51
- await this.add_account_internal(account.address);
52
- }
53
- catch (error) {
54
- console.error(`Failed to add account ${addressLower} to messenger manager:`, error);
55
- }
56
- }
57
- }
58
- if (this.accounts.size > 0 && !this.isWatching) {
59
- this.startPolling();
60
- }
61
- else if (this.accounts.size === 0 && this.isWatching) {
62
- this.stopPolling();
63
- }
64
- await this.syncAllContactLists();
65
- }
66
- async start() {
67
- await this.refresh_accounts();
68
- for (const account of this.accounts.values()) {
69
- const hasLock = this.persistStorage.tryAcquirePollingLock(account.address, this.instanceId);
70
- if (hasLock) {
71
- this.pollingLockedAccounts.add(account.address.toLowerCase());
72
- account.messenger.setOnMessageCallback((messages) => {
73
- for (const listener of this.messageListeners) {
74
- listener(messages);
75
- }
76
- });
77
- }
78
- else {
79
- console.debug(`Another process holds polling lock for ${account.address}`);
80
- }
81
- }
82
- if (!this.isWatching) {
83
- this.startPolling();
84
- }
85
- if (this.accountRefreshTimer) {
86
- clearInterval(this.accountRefreshTimer);
87
- }
88
- this.accountRefreshTimer = setInterval(() => {
89
- this.refresh_accounts().catch((err) => {
90
- console.error("Failed to refresh accounts:", err);
91
- });
92
- }, this.config.watch_interval_ms);
93
- }
94
- stop() {
95
- if (this.accountRefreshTimer) {
96
- clearInterval(this.accountRefreshTimer);
97
- this.accountRefreshTimer = null;
98
- }
99
- for (const accountAddress of this.pollingLockedAccounts) {
100
- this.persistStorage.releasePollingLock(accountAddress, this.instanceId);
101
- }
102
- this.pollingLockedAccounts.clear();
103
- this.stopPolling();
104
- this.clear_accounts();
105
- }
106
- async ensureAccountReady(address) {
107
- const lowerAddress = address.toLowerCase();
108
- const existing = this.accounts.get(lowerAddress);
109
- if (existing?.initialized) {
110
- return existing;
111
- }
112
- if (existing?.initializing) {
113
- await existing.initializing;
114
- const ready = this.accounts.get(lowerAddress);
115
- if (ready?.initialized) {
116
- return ready;
117
- }
118
- throw new MessengerError(MessengerErrorCode.SERVER_ERROR, `Account ${address} initialization failed`);
119
- }
120
- return this.initializeAccount(lowerAddress);
121
- }
122
- async initializeAccount(address) {
123
- const lowerAddress = address.toLowerCase();
124
- if (this.accounts.size >= MAX_ACCOUNTS) {
125
- throw new MessengerError(MessengerErrorCode.INVALID_INPUT, `Maximum ${MAX_ACCOUNTS} accounts allowed`);
126
- }
127
- const initPromise = this.doInitialize(lowerAddress);
128
- const tempState = {
129
- address: lowerAddress,
130
- messenger: null,
131
- initialized: false,
132
- initializing: initPromise,
133
- contactLists: { friends: [], guards: [], lastUpdatedAt: 0 },
134
- };
135
- this.accounts.set(lowerAddress, tempState);
136
- try {
137
- await initPromise;
138
- const finalState = this.accounts.get(lowerAddress);
139
- if (!finalState || !finalState.initialized) {
140
- throw new MessengerError(MessengerErrorCode.SERVER_ERROR, `Account ${address} initialization failed`);
141
- }
142
- return finalState;
143
- }
144
- catch (error) {
145
- this.accounts.delete(lowerAddress);
146
- throw error;
147
- }
148
- }
149
- async doInitialize(address) {
150
- const messenger = new Messenger(address, this.config);
151
- try {
152
- await messenger.initialize();
153
- }
154
- catch (error) {
155
- throw new MessengerError(MessengerErrorCode.SERVER_ERROR, `Failed to initialize account ${address}: ${error instanceof Error ? error.message : String(error)}`);
156
- }
157
- await sleep(1000);
158
- const contactLists = {
159
- friends: [],
160
- guards: [],
161
- lastUpdatedAt: 0,
162
- };
163
- this.accounts.set(address, {
164
- address,
165
- messenger,
166
- initialized: true,
167
- contactLists,
168
- });
169
- if (this.isWatching) {
170
- const hasLock = this.persistStorage.tryAcquirePollingLock(address, this.instanceId);
171
- if (hasLock) {
172
- this.pollingLockedAccounts.add(address);
173
- messenger.setOnMessageCallback((messages) => {
174
- for (const listener of this.messageListeners) {
175
- listener(messages);
176
- }
177
- });
178
- }
179
- }
180
- }
181
- async add_account_internal(address) {
182
- await this.ensureAccountReady(address);
183
- }
184
- remove_account_internal(address) {
185
- const addressLower = address.toLowerCase();
186
- const account = this.accounts.get(addressLower);
187
- if (!account)
188
- return false;
189
- if (account.initialized && account.messenger) {
190
- account.messenger.disconnect();
191
- }
192
- this.persistStorage.releasePollingLock(addressLower, this.instanceId);
193
- this.pollingLockedAccounts.delete(addressLower);
194
- return this.accounts.delete(addressLower);
195
- }
196
- clear_accounts() {
197
- this.stopPolling();
198
- for (const info of this.accounts.values()) {
199
- info.messenger.disconnect();
200
- }
201
- this.accounts.clear();
202
- }
203
- async send(from, to, content, options) {
204
- const { Account } = await import("../local/account.js");
205
- const account = await Account.Instance().get(from, false);
206
- if (!account) {
207
- throw new MessengerError(MessengerErrorCode.IDENTITY_NOT_FOUND, `Account ${from} not found`);
208
- }
209
- if (account.m == null) {
210
- if (options?.new_messenger_name == null) {
211
- throw new MessengerError(MessengerErrorCode.ACCOUNT_MESSENGER_NOT_ENABLED, `Account messenger name not set. Use new_messenger_name parameter to set it automatically.`);
212
- }
213
- await Account.Instance().set_messenger(from, options.new_messenger_name);
214
- }
215
- const accountInfo = await this.ensureAccountReady(from);
216
- if (options?.new_messenger_name != null) {
217
- const currentAccount = await Account.Instance().get(from, false);
218
- if (currentAccount &&
219
- currentAccount.m !== options.new_messenger_name) {
220
- await Account.Instance().set_messenger(from, options.new_messenger_name);
221
- }
222
- }
223
- return accountInfo.messenger.sendMessage(to, content, {
224
- guardAddress: options?.guardAddress,
225
- passportAddress: options?.passportAddress,
226
- force: options?.force,
227
- });
228
- }
229
- async send_file(from, to, filePath, options) {
230
- const { Account } = await import("../local/account.js");
231
- const account = await Account.Instance().get(from, false);
232
- if (!account) {
233
- throw new MessengerError(MessengerErrorCode.IDENTITY_NOT_FOUND, `Account ${from} not found`);
234
- }
235
- if (account.m == null) {
236
- if (options?.new_messenger_name == null) {
237
- throw new MessengerError(MessengerErrorCode.ACCOUNT_MESSENGER_NOT_ENABLED, `Account messenger name not set. Use new_messenger_name parameter to set it automatically.`);
238
- }
239
- await Account.Instance().set_messenger(from, options.new_messenger_name);
240
- }
241
- const accountInfo = await this.ensureAccountReady(from);
242
- if (options?.new_messenger_name != null) {
243
- const currentAccount = await Account.Instance().get(from, false);
244
- if (currentAccount &&
245
- currentAccount.m !== options.new_messenger_name) {
246
- await Account.Instance().set_messenger(from, options.new_messenger_name);
247
- }
248
- }
249
- return accountInfo.messenger.sendZipFile(to, filePath, {
250
- fileName: options?.fileName,
251
- contentType: options?.contentType,
252
- guardAddress: options?.guardAddress,
253
- passportAddress: options?.passportAddress,
254
- force: options?.force,
255
- });
256
- }
257
- async watch(filter) {
258
- let messages = [];
259
- if (filter?.account !== undefined) {
260
- const address = filter.account.toLowerCase();
261
- const accountInfo = this.accounts.get(address);
262
- if (accountInfo?.messenger) {
263
- await accountInfo.messenger.pullMessages();
264
- }
265
- const messageStorage = new MessageStorage(address);
266
- messages = messageStorage.getAllMessages(address);
267
- }
268
- else {
269
- for (const accountInfo of this.accounts.values()) {
270
- if (accountInfo.messenger) {
271
- await accountInfo.messenger.pullMessages();
272
- }
273
- const messageStorage = new MessageStorage(accountInfo.address);
274
- const accountMessages = messageStorage.getAllMessages(accountInfo.address);
275
- messages.push(...accountMessages);
276
- }
277
- }
278
- if (filter) {
279
- const peerAddress = filter.peerAddress
280
- ? await GetAccountOrMark_Address(filter.peerAddress)
281
- : undefined;
282
- messages = messages.filter((msg) => {
283
- if (filter?.account !== undefined) {
284
- const accountLower = filter.account.toLowerCase();
285
- const fromLower = msg.fromAddress.toLowerCase();
286
- const toLower = msg.toAddress.toLowerCase();
287
- if (fromLower !== accountLower &&
288
- toLower !== accountLower) {
289
- return false;
290
- }
291
- }
292
- if (filter.direction && msg.direction !== filter.direction) {
293
- return false;
294
- }
295
- if (filter.status && msg.status !== filter.status) {
296
- return false;
297
- }
298
- if (filter.msgType !== undefined &&
299
- msg.msgType !== filter.msgType) {
300
- return false;
301
- }
302
- if (filter.contentType) {
303
- switch (filter.contentType) {
304
- case "text":
305
- if (msg.msgType !== MessageType.NORMAL_MESSAGE)
306
- return false;
307
- break;
308
- case "zip":
309
- if (!msg.zipMetadata)
310
- return false;
311
- break;
312
- case "wts":
313
- if (!msg.zipMetadata ||
314
- msg.zipMetadata?.contentType !== "wts") {
315
- return false;
316
- }
317
- break;
318
- case "wip":
319
- if (!msg.zipMetadata ||
320
- msg.zipMetadata?.contentType !== "wip") {
321
- return false;
322
- }
323
- break;
324
- }
325
- }
326
- if (filter.peerAddress && peerAddress) {
327
- const peer = peerAddress.toLowerCase();
328
- const from = msg.fromAddress.toLowerCase();
329
- const to = msg.toAddress.toLowerCase();
330
- if (from !== peer && to !== peer) {
331
- return false;
332
- }
333
- }
334
- const timeField = filter.timeField || "createdAt";
335
- if (filter.startTime !== undefined ||
336
- filter.endTime !== undefined) {
337
- const msgTime = msg[timeField];
338
- if (msgTime !== undefined) {
339
- if (filter.startTime !== undefined &&
340
- msgTime < filter.startTime) {
341
- return false;
342
- }
343
- if (filter.endTime !== undefined &&
344
- msgTime > filter.endTime) {
345
- return false;
346
- }
347
- }
348
- }
349
- if (filter.createdAtStart !== undefined &&
350
- msg.createdAt < filter.createdAtStart) {
351
- return false;
352
- }
353
- if (filter.createdAtEnd !== undefined &&
354
- msg.createdAt > filter.createdAtEnd) {
355
- return false;
356
- }
357
- if (filter.receivedAtStart !== undefined) {
358
- if (msg.receivedAt === undefined ||
359
- msg.receivedAt < filter.receivedAtStart) {
360
- return false;
361
- }
362
- }
363
- if (filter.receivedAtEnd !== undefined) {
364
- if (msg.receivedAt === undefined ||
365
- msg.receivedAt > filter.receivedAtEnd) {
366
- return false;
367
- }
368
- }
369
- if (filter.serverTimestampStart !== undefined) {
370
- if (msg.serverTimestamp === undefined ||
371
- msg.serverTimestamp < filter.serverTimestampStart) {
372
- return false;
373
- }
374
- }
375
- if (filter.serverTimestampEnd !== undefined) {
376
- if (msg.serverTimestamp === undefined ||
377
- msg.serverTimestamp > filter.serverTimestampEnd) {
378
- return false;
379
- }
380
- }
381
- if (filter.decryptedOnly && !msg.plaintext) {
382
- return false;
383
- }
384
- if (filter.confirmedOnly &&
385
- msg.status !== MessageStatus.CONFIRMED) {
386
- return false;
387
- }
388
- if (filter.arkConfirmedOnly) {
389
- if (!msg.arkConfirmed) {
390
- return false;
391
- }
392
- }
393
- if (filter.proofedOnly) {
394
- if (!msg.proof) {
395
- return false;
396
- }
397
- }
398
- if (filter.arkTimestampStart !== undefined) {
399
- if (msg.arkConfirmed === undefined ||
400
- msg.arkConfirmed.timestamp < filter.arkTimestampStart) {
401
- return false;
402
- }
403
- }
404
- if (filter.arkTimestampEnd !== undefined) {
405
- if (msg.arkConfirmed === undefined ||
406
- msg.arkConfirmed.timestamp > filter.arkTimestampEnd) {
407
- return false;
408
- }
409
- }
410
- if (filter.hasLastReceivedIndexOnly) {
411
- if (msg.lastReceivedLeafIndex === undefined ||
412
- msg.lastReceivedLeafIndex === null) {
413
- return false;
414
- }
415
- }
416
- if (filter.lastReceivedIndexMin !== undefined) {
417
- if (msg.lastReceivedLeafIndex === undefined ||
418
- msg.lastReceivedLeafIndex < filter.lastReceivedIndexMin) {
419
- return false;
420
- }
421
- }
422
- if (filter.lastReceivedIndexMax !== undefined) {
423
- if (msg.lastReceivedLeafIndex === undefined ||
424
- msg.lastReceivedLeafIndex > filter.lastReceivedIndexMax) {
425
- return false;
426
- }
427
- }
428
- if (filter.keyword && msg.plaintext) {
429
- if (!msg.plaintext
430
- .toLowerCase()
431
- .includes(filter.keyword.toLowerCase())) {
432
- return false;
433
- }
434
- }
435
- if (filter.listFilterMode && filter.listFilterMode !== "any") {
436
- const msgAccount = this.findAccount(msg.toAddress);
437
- if (!msgAccount)
438
- return false;
439
- const senderAddress = msg.fromAddress.toLowerCase();
440
- const lists = msgAccount.contactLists;
441
- const friends = new Set(lists.friends.map((a) => a.toLowerCase()));
442
- const guards = new Set(lists.guards.map((g) => g.guardAddress.toLowerCase()));
443
- const inFriends = friends.has(senderAddress);
444
- const inGuards = guards.has(senderAddress);
445
- const isStranger = !inFriends && !inGuards;
446
- switch (filter.listFilterMode) {
447
- case "friends":
448
- if (!inFriends)
449
- return false;
450
- break;
451
- case "guard":
452
- if (!inGuards)
453
- return false;
454
- break;
455
- case "stranger":
456
- if (!isStranger)
457
- return false;
458
- break;
459
- }
460
- if (filter.customListFilter) {
461
- const { includeAddresses, excludeAddresses, relation = "union", } = filter.customListFilter;
462
- if (excludeAddresses) {
463
- const excludeSet = new Set(excludeAddresses.map((a) => a.toLowerCase()));
464
- if (excludeSet.has(senderAddress))
465
- return false;
466
- }
467
- if (includeAddresses && includeAddresses.length > 0) {
468
- const includeSet = new Set(includeAddresses.map((a) => a.toLowerCase()));
469
- const inIncludeList = includeSet.has(senderAddress);
470
- if (relation === "union") {
471
- const modeMatch = (filter.listFilterMode === "friends" &&
472
- inFriends) ||
473
- (filter.listFilterMode === "guard" &&
474
- inGuards) ||
475
- (filter.listFilterMode === "stranger" &&
476
- isStranger);
477
- if (!inIncludeList && !modeMatch)
478
- return false;
479
- }
480
- else {
481
- if (!inIncludeList)
482
- return false;
483
- }
484
- }
485
- }
486
- }
487
- if (filter.viewed !== undefined) {
488
- const isViewed = msg.viewedAt !== undefined;
489
- if (filter.viewed !== isViewed)
490
- return false;
491
- }
492
- if (filter.viewedAtStart !== undefined) {
493
- if (msg.viewedAt === undefined ||
494
- msg.viewedAt < filter.viewedAtStart) {
495
- return false;
496
- }
497
- }
498
- if (filter.viewedAtEnd !== undefined) {
499
- if (msg.viewedAt === undefined ||
500
- msg.viewedAt > filter.viewedAtEnd) {
501
- return false;
502
- }
503
- }
504
- return true;
505
- });
506
- }
507
- const sortOrder = filter?.sortOrder ?? "desc";
508
- const sortField = filter?.timeField || "createdAt";
509
- messages.sort((a, b) => {
510
- const aTime = a[sortField] || 0;
511
- const bTime = b[sortField] || 0;
512
- return sortOrder === "asc" ? aTime - bTime : bTime - aTime;
513
- });
514
- const { MAX_QUERY_LIMIT } = await import("./types.js");
515
- const defaultLimit = this.config.defaultQueryLimit ?? 50;
516
- const limit = Math.min(filter?.limit ?? defaultLimit, MAX_QUERY_LIMIT);
517
- const offset = filter?.offset ?? 0;
518
- messages = messages.slice(offset, offset + limit);
519
- return messages;
520
- }
521
- startPolling() {
522
- if (this.isWatching)
523
- return;
524
- this.isWatching = true;
525
- }
526
- stopPolling() {
527
- this.isWatching = false;
528
- }
529
- onMessage(listener) {
530
- this.messageListeners.add(listener);
531
- }
532
- offMessage(listener) {
533
- this.messageListeners.delete(listener);
534
- }
535
- destroy() {
536
- this.stop();
537
- this.messageListeners.clear();
538
- }
539
- async syncContactLists(account) {
540
- const acc = this.findAccount(account);
541
- if (!acc) {
542
- return {
543
- success: false,
544
- friends: [],
545
- guards: [],
546
- error: `Account not found: ${account}`,
547
- };
548
- }
549
- try {
550
- const [friends, guardResponse] = await Promise.all([
551
- acc.messenger.getFriendsList(),
552
- acc.messenger.getGuardList(),
553
- ]);
554
- const guards = guardResponse.currentGuardList || [];
555
- acc.contactLists = {
556
- friends,
557
- guards,
558
- lastUpdatedAt: Date.now(),
559
- };
560
- return {
561
- success: true,
562
- friends,
563
- guards,
564
- };
565
- }
566
- catch (error) {
567
- console.error(`Failed to sync contact lists for ${account}:`, error);
568
- return {
569
- success: false,
570
- friends: acc.contactLists.friends,
571
- guards: acc.contactLists.guards,
572
- error: error instanceof Error ? error.message : String(error),
573
- };
574
- }
575
- }
576
- async syncAllContactLists() {
577
- const results = new Map();
578
- for (const acc of this.accounts.values()) {
579
- const result = await this.syncContactLists(acc.address);
580
- results.set(acc.address, result);
581
- }
582
- return results;
583
- }
584
- getContactLists(account) {
585
- const acc = this.findAccount(account);
586
- return acc?.contactLists;
587
- }
588
- setContactLists(account, lists) {
589
- const acc = this.findAccount(account);
590
- if (!acc)
591
- return false;
592
- acc.contactLists = {
593
- ...acc.contactLists,
594
- ...lists,
595
- lastUpdatedAt: Date.now(),
596
- };
597
- return true;
598
- }
599
- isStranger(account, senderAddress) {
600
- const acc = this.findAccount(account);
601
- if (!acc)
602
- return true;
603
- const sender = senderAddress.toLowerCase();
604
- const lists = acc.contactLists;
605
- const inFriends = lists.friends.some((a) => a.toLowerCase() === sender);
606
- const inGuards = lists.guards.some((g) => g.guardAddress.toLowerCase() === sender);
607
- return !inFriends && !inGuards;
608
- }
609
- recordGuardSender(account, guardAddress) {
610
- const acc = this.findAccount(account);
611
- if (!acc)
612
- return false;
613
- const guardAddr = guardAddress.toLowerCase();
614
- const exists = acc.contactLists.guards.some((g) => g.guardAddress.toLowerCase() === guardAddr);
615
- if (!exists) {
616
- acc.contactLists.guards.push({
617
- guardAddress: guardAddress,
618
- passportValiditySeconds: 86400,
619
- });
620
- acc.contactLists.lastUpdatedAt = Date.now();
621
- }
622
- return true;
623
- }
624
- generateNonce() {
625
- return (Math.random().toString(36).substring(2, 15) +
626
- Math.random().toString(36).substring(2, 15));
627
- }
628
- async watch_paginated(filter) {
629
- const { MAX_QUERY_LIMIT } = await import("./types.js");
630
- const allMessages = await this.watch(filter);
631
- const total = allMessages.length;
632
- const defaultLimit = this.config.defaultQueryLimit ?? 50;
633
- const limit = Math.min(filter?.limit ?? defaultLimit, MAX_QUERY_LIMIT);
634
- const offset = filter?.offset ?? 0;
635
- const messages = allMessages.slice(offset, offset + limit);
636
- return {
637
- messages,
638
- total,
639
- offset,
640
- limit,
641
- };
642
- }
643
- async get_conversations(account) {
644
- const filter = account ? { account } : undefined;
645
- const allMessages = await this.watch(filter);
646
- const conversations = new Map();
647
- for (const msg of allMessages) {
648
- const myAddress = account?.toLowerCase();
649
- const peerAddress = msg.fromAddress.toLowerCase() === myAddress
650
- ? msg.toAddress
651
- : msg.fromAddress;
652
- if (!conversations.has(peerAddress)) {
653
- conversations.set(peerAddress, {
654
- peerAddress,
655
- lastMessageAt: msg.createdAt,
656
- messageCount: 0,
657
- unreadCount: 0,
658
- lastMessagePreview: msg.plaintext,
659
- });
660
- }
661
- const conv = conversations.get(peerAddress);
662
- conv.messageCount++;
663
- if (msg.createdAt > conv.lastMessageAt) {
664
- conv.lastMessageAt = msg.createdAt;
665
- conv.lastMessagePreview = msg.plaintext;
666
- }
667
- if (msg.status !== MessageStatus.READ &&
668
- msg.toAddress.toLowerCase() === myAddress) {
669
- conv.unreadCount++;
670
- }
671
- }
672
- return Array.from(conversations.values()).sort((a, b) => b.lastMessageAt - a.lastMessageAt);
673
- }
674
- async generate_wts(outputDir, myAccount, peerAccount, range, excludePlaintext) {
675
- const fs = await import("fs");
676
- const path = await import("path");
677
- const myAddress = myAccount.toLowerCase();
678
- const peerAddress = peerAccount.toLowerCase();
679
- const messageStorage = new MessageStorage(myAddress);
680
- const myMessages = messageStorage.getAllMessages(myAddress);
681
- let messages = myMessages.filter((msg) => {
682
- const fromLower = msg.fromAddress.toLowerCase();
683
- const toLower = msg.toAddress.toLowerCase();
684
- const isBetween = (fromLower === myAddress && toLower === peerAddress) ||
685
- (fromLower === peerAddress && toLower === myAddress);
686
- return isBetween;
687
- });
688
- messages = messages
689
- .filter((m) => m.leafIndex !== undefined &&
690
- m.serverTimestamp !== undefined)
691
- .reduce((acc, msg) => {
692
- const existing = acc.find((m) => m.messageId === msg.messageId);
693
- if (!existing) {
694
- acc.push(msg);
695
- }
696
- return acc;
697
- }, [])
698
- .sort((a, b) => {
699
- const timeDiff = a.serverTimestamp - b.serverTimestamp;
700
- if (timeDiff !== 0)
701
- return timeDiff;
702
- return a.leafIndex - b.leafIndex;
703
- });
704
- if (range) {
705
- switch (range.type) {
706
- case "time": {
707
- const start = Math.min(range.start, range.end);
708
- const end = Math.max(range.start, range.end);
709
- messages = messages.filter((m) => m.createdAt >= start && m.createdAt <= end);
710
- break;
711
- }
712
- case "messageId": {
713
- const start = range.start;
714
- const end = range.end;
715
- messages = messages.filter((m) => m.messageId >= start && m.messageId <= end);
716
- break;
717
- }
718
- case "seqIndex": {
719
- const start = Math.min(range.start, range.end);
720
- const end = Math.max(range.start, range.end);
721
- messages = messages.filter((m) => m.leafIndex >= start && m.leafIndex <= end);
722
- break;
723
- }
724
- }
725
- }
726
- if (messages.length === 0) {
727
- throw new MessengerError(MessengerErrorCode.INVALID_INPUT, "No messages found for the given criteria");
728
- }
729
- const sortedLeafIndices = messages
730
- .map((m) => m.leafIndex)
731
- .filter((i) => i !== undefined)
732
- .sort((a, b) => a - b);
733
- const missingIndices = [];
734
- for (let i = 1; i < sortedLeafIndices.length; i++) {
735
- const expected = sortedLeafIndices[i - 1] + 1;
736
- const actual = sortedLeafIndices[i];
737
- if (actual !== expected) {
738
- for (let j = expected; j < actual; j++) {
739
- missingIndices.push(j);
740
- }
741
- }
742
- }
743
- if (missingIndices.length > 0) {
744
- console.warn(`[generate_wts] Warning: Missing leafIndices ${missingIndices.join(", ")}. ` +
745
- `WTS will contain non-continuous message sequence. ` +
746
- `Verification may fail if strict continuity check is enabled.`);
747
- }
748
- if (messages.length > WTS_MAX_MESSAGE_COUNT) {
749
- throw new MessengerError(MessengerErrorCode.INVALID_INPUT, `Message count (${messages.length}) exceeds maximum allowed (${WTS_MAX_MESSAGE_COUNT})`);
750
- }
751
- if (!fs.existsSync(outputDir)) {
752
- fs.mkdirSync(outputDir, { recursive: true });
753
- }
754
- const sessionId = `${myAddress.slice(0, 6)}_${peerAddress.slice(0, 6)}`;
755
- const groups = [];
756
- let currentGroup = [];
757
- for (let i = 0; i < messages.length; i++) {
758
- const msg = messages[i];
759
- if (currentGroup.length === 0) {
760
- currentGroup.push(msg);
761
- }
762
- else {
763
- const lastMsg = currentGroup[currentGroup.length - 1];
764
- const expectedLeafIndex = lastMsg.leafIndex + 1;
765
- if (currentGroup.length >= WTS_MAX_MESSAGE_COUNT ||
766
- msg.leafIndex !== expectedLeafIndex) {
767
- groups.push(currentGroup);
768
- currentGroup = [msg];
769
- }
770
- else {
771
- currentGroup.push(msg);
772
- }
773
- }
774
- }
775
- if (currentGroup.length > 0) {
776
- groups.push(currentGroup);
777
- }
778
- console.log(`[generate_wts] Grouped ${messages.length} messages into ${groups.length} continuous group(s)`);
779
- groups.forEach((group, idx) => {
780
- const leafIndices = group.map((m) => m.leafIndex).join(", ");
781
- console.log(` Group ${idx + 1}: leafIndices [${leafIndices}]`);
782
- });
783
- const generatedFiles = [];
784
- for (const group of groups) {
785
- const leafIndices = group
786
- .map((m) => m.leafIndex)
787
- .filter((i) => i !== undefined);
788
- const startLeafIndex = Math.min(...leafIndices);
789
- const endLeafIndex = Math.max(...leafIndices);
790
- const startTime = group[0].createdAt;
791
- const endTime = group[group.length - 1].createdAt;
792
- for (const msg of group) {
793
- if (msg.serverTimestamp === undefined) {
794
- throw new MessengerError(MessengerErrorCode.INVALID_INPUT, `Message ${msg.messageId} missing serverTimestamp`);
795
- }
796
- if (msg.leafIndex === undefined) {
797
- throw new MessengerError(MessengerErrorCode.INVALID_INPUT, `Message ${msg.messageId} missing leafIndex`);
798
- }
799
- if (!msg.prevRoot) {
800
- throw new MessengerError(MessengerErrorCode.INVALID_INPUT, `Message ${msg.messageId} missing prevRoot`);
801
- }
802
- if (!msg.newRoot) {
803
- throw new MessengerError(MessengerErrorCode.INVALID_INPUT, `Message ${msg.messageId} missing newRoot`);
804
- }
805
- if (!msg.serverSignature) {
806
- throw new MessengerError(MessengerErrorCode.INVALID_INPUT, `Message ${msg.messageId} missing serverSignature`);
807
- }
808
- }
809
- const wtsMessages = group.map((msg) => {
810
- const messageObj = {
811
- id: msg.messageId,
812
- from: msg.fromAddress,
813
- to: msg.toAddress,
814
- plaintextHash: msg.plaintextHash,
815
- clientTimestamp: msg.createdAt,
816
- timestamp: msg.serverTimestamp,
817
- leafIndex: msg.leafIndex,
818
- prevRoot: msg.prevRoot,
819
- merkleRoot: msg.newRoot,
820
- serverSignature: msg.serverSignature,
821
- serverPublicKey: msg.serverPublicKey || "",
822
- msgType: msg.msgType,
823
- };
824
- if (!excludePlaintext && msg.plaintext !== undefined) {
825
- messageObj.plaintext = msg.plaintext;
826
- }
827
- if (msg.guardAddress !== undefined) {
828
- messageObj.guardAddress = msg.guardAddress;
829
- }
830
- if (msg.passportAddress !== undefined) {
831
- messageObj.passportAddress = msg.passportAddress;
832
- }
833
- if (msg.arkConfirmed !== undefined) {
834
- messageObj.arkConfirmed = {
835
- recipient: msg.arkConfirmed.recipient,
836
- recipientPublicKey: msg.arkConfirmed.recipientPublicKey,
837
- signature: msg.arkConfirmed.signature,
838
- timestamp: msg.arkConfirmed.timestamp,
839
- };
840
- }
841
- if (msg.zipMetadata !== undefined) {
842
- messageObj.zipMetadata = msg.zipMetadata;
843
- }
844
- if (msg.lastReceivedLeafIndex !== undefined &&
845
- msg.lastReceivedLeafIndex !== -1) {
846
- messageObj.lastReceivedLeafIndex =
847
- msg.lastReceivedLeafIndex;
848
- }
849
- return messageObj;
850
- });
851
- const addresses = [myAddress, peerAddress].sort();
852
- const wtsSession = {
853
- participants: addresses,
854
- };
855
- const payload = {
856
- session: wtsSession,
857
- messages: wtsMessages,
858
- };
859
- const { sha256 } = await import("@noble/hashes/sha256");
860
- const { bytesToHex } = await import("@noble/hashes/utils");
861
- const canonicalPayload = canonicalizeJson(payload);
862
- const payloadHash = "sha256:" +
863
- bytesToHex(sha256(new TextEncoder().encode(canonicalPayload)));
864
- const wtsMeta = {
865
- type: "wts",
866
- version: "1.0",
867
- created: new Date().toISOString(),
868
- hash: payloadHash,
869
- algorithm: "sha256",
870
- startTime,
871
- endTime,
872
- messageCount: wtsMessages.length,
873
- merkleRoot: wtsMessages[wtsMessages.length - 1].merkleRoot,
874
- creator: myAddress,
875
- participant: peerAddress,
876
- };
877
- const wtsFile = {
878
- wts: WTS_SCHEMA_URL,
879
- payload,
880
- meta: wtsMeta,
881
- };
882
- const fileName = `${sessionId}_${startLeafIndex}-${endLeafIndex}.wts`;
883
- const filePath = path.join(outputDir, fileName);
884
- fs.writeFileSync(filePath, JSON.stringify(wtsFile, null, 2));
885
- generatedFiles.push(filePath);
886
- }
887
- const overallStartTime = messages[0]?.createdAt || 0;
888
- const overallEndTime = messages[messages.length - 1]?.createdAt || 0;
889
- return {
890
- files: generatedFiles,
891
- totalMessageCount: messages.length,
892
- timeRange: {
893
- start: overallStartTime,
894
- end: overallEndTime,
895
- },
896
- };
897
- }
898
- async addToBlacklist(account, addresses) {
899
- const acc = this.findAccount(account);
900
- if (!acc) {
901
- throw new MessengerError(MessengerErrorCode.ACCOUNT_NOT_FOUND, `Account ${account} not in managed accounts`);
902
- }
903
- return acc.messenger.addToBlacklist(addresses);
904
- }
905
- async removeFromBlacklist(account, addresses) {
906
- const acc = this.findAccount(account);
907
- if (!acc) {
908
- throw new MessengerError(MessengerErrorCode.ACCOUNT_NOT_FOUND, `Account ${account} not in managed accounts`);
909
- }
910
- return acc.messenger.removeFromBlacklist(addresses);
911
- }
912
- async clearBlacklist(account) {
913
- const acc = this.findAccount(account);
914
- if (!acc) {
915
- throw new MessengerError(MessengerErrorCode.ACCOUNT_NOT_FOUND, `Account ${account} not in managed accounts`);
916
- }
917
- return acc.messenger.clearBlacklist();
918
- }
919
- async getBlacklist(account) {
920
- const acc = this.findAccount(account);
921
- if (!acc) {
922
- throw new MessengerError(MessengerErrorCode.ACCOUNT_NOT_FOUND, `Account ${account} not in managed accounts`);
923
- }
924
- return acc.messenger.getBlacklist();
925
- }
926
- async existInBlacklist(account, addresses) {
927
- const acc = this.findAccount(account);
928
- if (!acc) {
929
- throw new MessengerError(MessengerErrorCode.ACCOUNT_NOT_FOUND, `Account ${account} not in managed accounts`);
930
- }
931
- return acc.messenger.existInBlacklist(addresses);
932
- }
933
- async addToFriendsList(account, addresses) {
934
- const acc = this.findAccount(account);
935
- if (!acc) {
936
- throw new MessengerError(MessengerErrorCode.ACCOUNT_NOT_FOUND, `Account ${account} not in managed accounts`);
937
- }
938
- return acc.messenger.addToFriendsList(addresses);
939
- }
940
- async removeFromFriendsList(account, addresses) {
941
- const acc = this.findAccount(account);
942
- if (!acc) {
943
- throw new MessengerError(MessengerErrorCode.ACCOUNT_NOT_FOUND, `Account ${account} not in managed accounts`);
944
- }
945
- return acc.messenger.removeFromFriendsList(addresses);
946
- }
947
- async clearFriendsList(account) {
948
- const acc = this.findAccount(account);
949
- if (!acc) {
950
- throw new MessengerError(MessengerErrorCode.ACCOUNT_NOT_FOUND, `Account ${account} not in managed accounts`);
951
- }
952
- return acc.messenger.clearFriendsList();
953
- }
954
- async getFriendsList(account) {
955
- const acc = this.findAccount(account);
956
- if (!acc) {
957
- throw new MessengerError(MessengerErrorCode.ACCOUNT_NOT_FOUND, `Account ${account} not in managed accounts`);
958
- }
959
- return acc.messenger.getFriendsList();
960
- }
961
- async existInFriendsList(account, addresses) {
962
- const acc = this.findAccount(account);
963
- if (!acc) {
964
- throw new MessengerError(MessengerErrorCode.ACCOUNT_NOT_FOUND, `Account ${account} not in managed accounts`);
965
- }
966
- return acc.messenger.existInFriendsList(addresses);
967
- }
968
- async addToGuardList(account, guards) {
969
- const acc = this.findAccount(account);
970
- if (!acc) {
971
- throw new MessengerError(MessengerErrorCode.ACCOUNT_NOT_FOUND, `Account ${account} not in managed accounts`);
972
- }
973
- return acc.messenger.addToGuardList(guards);
974
- }
975
- async removeFromGuardList(account, addresses) {
976
- const acc = this.findAccount(account);
977
- if (!acc) {
978
- throw new MessengerError(MessengerErrorCode.ACCOUNT_NOT_FOUND, `Account ${account} not in managed accounts`);
979
- }
980
- return acc.messenger.removeFromGuardList(addresses);
981
- }
982
- async getGuardList(account) {
983
- const acc = this.findAccount(account);
984
- if (!acc) {
985
- throw new MessengerError(MessengerErrorCode.ACCOUNT_NOT_FOUND, `Account ${account} not in managed accounts`);
986
- }
987
- return acc.messenger.getGuardList();
988
- }
989
- async getSettings(account) {
990
- const acc = this.findAccount(account);
991
- if (!acc) {
992
- throw new MessengerError(MessengerErrorCode.ACCOUNT_NOT_FOUND, `Account ${account} not in managed accounts`);
993
- }
994
- return acc.messenger.getSettings();
995
- }
996
- async setSettings(account, settings) {
997
- const acc = this.findAccount(account);
998
- if (!acc) {
999
- throw new MessengerError(MessengerErrorCode.ACCOUNT_NOT_FOUND, `Account ${account} not in managed accounts`);
1000
- }
1001
- return acc.messenger.setSettings(settings);
1002
- }
1003
- }
1
+ import{Messenger}from'./messenger.js';import{MessageStorage}from'./storage.js';import{MessengerPersistStorage}from'./storage.js';import{MessageType,MessageStatus,WTS_MAX_MESSAGE_COUNT,WTS_SCHEMA_URL}from'./types.js';import{MessengerError,MessengerErrorCode,DEFAULT_MESSENGER_CONFIG}from'./types.js';import{canonicalizeJson}from'./utils.js';import{MAX_MESSENGER_ACCOUNTS}from'../local/account.js';import{GetAccountOrMark_Address}from'../local/index.js';const MAX_ACCOUNTS=MAX_MESSENGER_ACCOUNTS,sleep=a=>new Promise(b=>setTimeout(b,a));export class MessengerManager{['accounts']=new Map();['config'];['messageListeners']=new Set();['isWatching']=![];['persistStorage'];['instanceId'];['accountRefreshTimer']=null;['pollingLockedAccounts']=new Set();constructor(a){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('../local/account.js'),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){!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){console['error']('Failed\x20to\x20add\x20account\x20'+g+'\x20to\x20messenger\x20manager:',h);}}if(this['accounts']['size']>0x0&&!this['isWatching'])this['startPolling']();else this['accounts']['size']===0x0&&this['isWatching']&&this['stopPolling']();await this['syncAllContactLists']();}async['start'](){await this['refresh_accounts']();for(const a of this['accounts']['values']()){const b=this['persistStorage']['tryAcquirePollingLock'](a['address'],this['instanceId']);b?(this['pollingLockedAccounts']['add'](a['address']['toLowerCase']()),a['messenger']['setOnMessageCallback'](c=>{for(const d of this['messageListeners']){d(c);}})):console['debug']('Another\x20process\x20holds\x20polling\x20lock\x20for\x20'+a['address']);}!this['isWatching']&&this['startPolling'](),this['accountRefreshTimer']&&clearInterval(this['accountRefreshTimer']),this['accountRefreshTimer']=setInterval(()=>{this['refresh_accounts']()['catch'](c=>{console['error']('Failed\x20to\x20refresh\x20accounts:',c);});},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(MessengerErrorCode['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(MessengerErrorCode['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(MessengerErrorCode['SERVER_ERROR'],'Account\x20'+a+'\x20initialization\x20failed');return e;}catch(f){this['accounts']['delete'](b);throw f;}}async['doInitialize'](a){const b=new Messenger(a,this['config']);try{await b['initialize']();}catch(d){throw new MessengerError(MessengerErrorCode['SERVER_ERROR'],'Failed\x20to\x20initialize\x20account\x20'+a+':\x20'+(d instanceof Error?d['message']:String(d)));}await sleep(0x3e8);const c={'friends':[],'guards':[],'lastUpdatedAt':0x0};this['accounts']['set'](a,{'address':a,'messenger':b,'initialized':!![],'contactLists':c});if(this['isWatching']){const e=this['persistStorage']['tryAcquirePollingLock'](a,this['instanceId']);e&&(this['pollingLockedAccounts']['add'](a),b['setOnMessageCallback'](f=>{for(const g of this['messageListeners']){g(f);}}));}}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![];return c['initialized']&&c['messenger']&&c['messenger']['disconnect'](),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']()){a['messenger']['disconnect']();}this['accounts']['clear']();}async['send'](a,b,c,d){const {Account:e}=await import('../local/account.js'),f=await e['Instance']()['get'](a,![]);if(!f)throw new MessengerError(MessengerErrorCode['IDENTITY_NOT_FOUND'],'Account\x20'+a+'\x20not\x20found');if(f['m']==null){if(d?.['new_messenger_name']==null)throw new MessengerError(MessengerErrorCode['ACCOUNT_MESSENGER_NOT_ENABLED'],'Account\x20messenger\x20name\x20not\x20set.\x20Use\x20new_messenger_name\x20parameter\x20to\x20set\x20it\x20automatically.');await e['Instance']()['set_messenger'](a,d['new_messenger_name']);}const g=await this['ensureAccountReady'](a);if(d?.['new_messenger_name']!=null){const h=await e['Instance']()['get'](a,![]);h&&h['m']!==d['new_messenger_name']&&await e['Instance']()['set_messenger'](a,d['new_messenger_name']);}return g['messenger']['sendMessage'](b,c,{'guardAddress':d?.['guardAddress'],'passportAddress':d?.['passportAddress'],'force':d?.['force']});}async['send_file'](a,b,c,d){const {Account:e}=await import('../local/account.js'),f=await e['Instance']()['get'](a,![]);if(!f)throw new MessengerError(MessengerErrorCode['IDENTITY_NOT_FOUND'],'Account\x20'+a+'\x20not\x20found');if(f['m']==null){if(d?.['new_messenger_name']==null)throw new MessengerError(MessengerErrorCode['ACCOUNT_MESSENGER_NOT_ENABLED'],'Account\x20messenger\x20name\x20not\x20set.\x20Use\x20new_messenger_name\x20parameter\x20to\x20set\x20it\x20automatically.');await e['Instance']()['set_messenger'](a,d['new_messenger_name']);}const g=await this['ensureAccountReady'](a);if(d?.['new_messenger_name']!=null){const h=await e['Instance']()['get'](a,![]);h&&h['m']!==d['new_messenger_name']&&await e['Instance']()['set_messenger'](a,d['new_messenger_name']);}return g['messenger']['sendZipFile'](b,c,{'fileName':d?.['fileName'],'contentType':d?.['contentType'],'guardAddress':d?.['guardAddress'],'passportAddress':d?.['passportAddress'],'force':d?.['force']});}async['watch'](a){let b=[];if(a?.['account']!==undefined){const i=a['account']['toLowerCase'](),j=this['accounts']['get'](i);j?.['messenger']&&await j['messenger']['pullMessages']();const k=new MessageStorage(i);b=k['getAllMessages'](i);}else for(const l of this['accounts']['values']()){l['messenger']&&await l['messenger']['pullMessages']();const m=new MessageStorage(l['address']),n=m['getAllMessages'](l['address']);b['push'](...n);}if(a){const o=a['peerAddress']?await GetAccountOrMark_Address(a['peerAddress']):undefined;b=b['filter'](p=>{if(a?.['account']!==undefined){const r=a['account']['toLowerCase'](),s=p['fromAddress']['toLowerCase'](),t=p['toAddress']['toLowerCase']();if(s!==r&&t!==r)return![];}if(a['direction']&&p['direction']!==a['direction'])return![];if(a['status']&&p['status']!==a['status'])return![];if(a['msgType']!==undefined&&p['msgType']!==a['msgType'])return![];if(a['contentType'])switch(a['contentType']){case'text':if(p['msgType']!==MessageType['NORMAL_MESSAGE'])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(v!==u&&w!==u)return![];}const q=a['timeField']||'createdAt';if(a['startTime']!==undefined||a['endTime']!==undefined){const x=p[q];if(x!==undefined){if(a['startTime']!==undefined&&x<a['startTime'])return![];if(a['endTime']!==undefined&&x>a['endTime'])return![];}}if(a['createdAtStart']!==undefined&&p['createdAt']<a['createdAtStart'])return![];if(a['createdAtEnd']!==undefined&&p['createdAt']>a['createdAtEnd'])return![];if(a['receivedAtStart']!==undefined){if(p['receivedAt']===undefined||p['receivedAt']<a['receivedAtStart'])return![];}if(a['receivedAtEnd']!==undefined){if(p['receivedAt']===undefined||p['receivedAt']>a['receivedAtEnd'])return![];}if(a['serverTimestampStart']!==undefined){if(p['serverTimestamp']===undefined||p['serverTimestamp']<a['serverTimestampStart'])return![];}if(a['serverTimestampEnd']!==undefined){if(p['serverTimestamp']===undefined||p['serverTimestamp']>a['serverTimestampEnd'])return![];}if(a['decryptedOnly']&&!p['plaintext'])return![];if(a['confirmedOnly']&&p['status']!==MessageStatus['CONFIRMED'])return![];if(a['arkConfirmedOnly']){if(!p['arkConfirmed'])return![];}if(a['proofedOnly']){if(!p['proof'])return![];}if(a['arkTimestampStart']!==undefined){if(p['arkConfirmed']===undefined||p['arkConfirmed']['timestamp']<a['arkTimestampStart'])return![];}if(a['arkTimestampEnd']!==undefined){if(p['arkConfirmed']===undefined||p['arkConfirmed']['timestamp']>a['arkTimestampEnd'])return![];}if(a['hasLastReceivedIndexOnly']){if(p['lastReceivedLeafIndex']===undefined||p['lastReceivedLeafIndex']===null)return![];}if(a['lastReceivedIndexMin']!==undefined){if(p['lastReceivedLeafIndex']===undefined||p['lastReceivedLeafIndex']<a['lastReceivedIndexMin'])return![];}if(a['lastReceivedIndexMax']!==undefined){if(p['lastReceivedLeafIndex']===undefined||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){const I=new Set(H['map'](J=>J['toLowerCase']()));if(I['has'](z))return![];}if(G&&G['length']>0x0){const J=new Set(G['map'](L=>L['toLowerCase']())),K=J['has'](z);if(relation==='union'){const L=a['listFilterMode']==='friends'&&D||a['listFilterMode']==='guard'&&E||a['listFilterMode']==='stranger'&&F;if(!K&&!L)return![];}else{if(!K)return![];}}}}if(a['viewed']!==undefined){const M=p['viewedAt']!==undefined;if(a['viewed']!==M)return![];}if(a['viewedAtStart']!==undefined){if(p['viewedAt']===undefined||p['viewedAt']<a['viewedAtStart'])return![];}if(a['viewedAtEnd']!==undefined){if(p['viewedAt']===undefined||p['viewedAt']>a['viewedAtEnd'])return![];}return!![];});}const c=a?.['sortOrder']??'desc',d=a?.['timeField']||'createdAt';b['sort']((p,q)=>{const r=p[d]||0x0,s=q[d]||0x0;return c==='asc'?r-s:s-r;});const {MAX_QUERY_LIMIT:e}=await import('./types.js'),f=this['config']['defaultQueryLimit']??0x32,g=Math['min'](a?.['limit']??f,e),h=a?.['offset']??0x0;return b=b['slice'](h,h+g),b;}['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 console['error']('Failed\x20to\x20sync\x20contact\x20lists\x20for\x20'+a+':',f),{'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){const b=this['findAccount'](a);return b?.['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'](),e=c['contactLists']['guards']['some'](f=>f['guardAddress']['toLowerCase']()===d);return!e&&(c['contactLists']['guards']['push']({'guardAddress':b,'passportValiditySeconds':0x15180}),c['contactLists']['lastUpdatedAt']=Date['now']()),!![];}['generateNonce'](){return Math['random']()['toString'](0x24)['substring'](0x2,0xf)+Math['random']()['toString'](0x24)['substring'](0x2,0xf);}async['watch_paginated'](a){const {MAX_QUERY_LIMIT:b}=await import('./types.js'),c=await this['watch'](a),d=c['length'],e=this['config']['defaultQueryLimit']??0x32,f=Math['min'](a?.['limit']??e,b),g=a?.['offset']??0x0,h=c['slice'](g,g+f);return{'messages':h,'total':d,'offset':g,'limit':f};}async['get_conversations'](a){const b=a?{'account':a}:undefined,c=await this['watch'](b),d=new Map();for(const e of c){const f=a?.['toLowerCase'](),g=e['fromAddress']['toLowerCase']()===f?e['toAddress']:e['fromAddress'];!d['has'](g)&&d['set'](g,{'peerAddress':g,'lastMessageAt':e['createdAt'],'messageCount':0x0,'unreadCount':0x0,'lastMessagePreview':e['plaintext']});const h=d['get'](g);h['messageCount']++,e['createdAt']>h['lastMessageAt']&&(h['lastMessageAt']=e['createdAt'],h['lastMessagePreview']=e['plaintext']),e['status']!==MessageStatus['READ']&&e['toAddress']['toLowerCase']()===f&&h['unreadCount']++;}return Array['from'](d['values']())['sort']((i,j)=>j['lastMessageAt']-i['lastMessageAt']);}async['generate_wts'](a,b,c,d,e){const f=await import('fs'),g=await import('path'),h=b['toLowerCase'](),k=c['toLowerCase'](),l=new MessageStorage(h),m=l['getAllMessages'](h);let n=m['filter'](w=>{const x=w['fromAddress']['toLowerCase'](),y=w['toAddress']['toLowerCase'](),z=x===h&&y===k||x===k&&y===h;return z;});n=n['filter'](w=>w['leafIndex']!==undefined&&w['serverTimestamp']!==undefined)['reduce']((w,x)=>{const y=w['find'](z=>z['messageId']===x['messageId']);return!y&&w['push'](x),w;},[])['sort']((w,x)=>{const y=w['serverTimestamp']-x['serverTimestamp'];if(y!==0x0)return y;return w['leafIndex']-x['leafIndex'];});if(d)switch(d['type']){case'time':{const w=Math['min'](d['start'],d['end']),x=Math['max'](d['start'],d['end']);n=n['filter'](y=>y['createdAt']>=w&&y['createdAt']<=x);break;}case'messageId':{const y=d['start'],z=d['end'];n=n['filter'](A=>A['messageId']>=y&&A['messageId']<=z);break;}case'seqIndex':{const A=Math['min'](d['start'],d['end']),B=Math['max'](d['start'],d['end']);n=n['filter'](C=>C['leafIndex']>=A&&C['leafIndex']<=B);break;}}if(n['length']===0x0)throw new MessengerError(MessengerErrorCode['INVALID_INPUT'],'No\x20messages\x20found\x20for\x20the\x20given\x20criteria');const o=n['map'](C=>C['leafIndex'])['filter'](C=>C!==undefined)['sort']((C,D)=>C-D),p=[];for(let C=0x1;C<o['length'];C++){const D=o[C-0x1]+0x1,E=o[C];if(E!==D)for(let F=D;F<E;F++){p['push'](F);}}p['length']>0x0&&console['warn']('[generate_wts]\x20Warning:\x20Missing\x20leafIndices\x20'+p['join'](',\x20')+'.\x20'+'WTS\x20will\x20contain\x20non-continuous\x20message\x20sequence.\x20'+'Verification\x20may\x20fail\x20if\x20strict\x20continuity\x20check\x20is\x20enabled.');if(n['length']>WTS_MAX_MESSAGE_COUNT)throw new MessengerError(MessengerErrorCode['INVALID_INPUT'],'Message\x20count\x20('+n['length']+')\x20exceeds\x20maximum\x20allowed\x20('+WTS_MAX_MESSAGE_COUNT+')');!f['existsSync'](a)&&f['mkdirSync'](a,{'recursive':!![]});const q=h['slice'](0x0,0x6)+'_'+k['slice'](0x0,0x6),r=[];let s=[];for(let G=0x0;G<n['length'];G++){const H=n[G];if(s['length']===0x0)s['push'](H);else{const I=s[s['length']-0x1],J=I['leafIndex']+0x1;s['length']>=WTS_MAX_MESSAGE_COUNT||H['leafIndex']!==J?(r['push'](s),s=[H]):s['push'](H);}}s['length']>0x0&&r['push'](s);console['log']('[generate_wts]\x20Grouped\x20'+n['length']+'\x20messages\x20into\x20'+r['length']+'\x20continuous\x20group(s)'),r['forEach']((K,L)=>{const M=K['map'](N=>N['leafIndex'])['join'](',\x20');console['log']('\x20\x20Group\x20'+(L+0x1)+':\x20leafIndices\x20['+M+']');});const t=[];for(const K of r){const L=K['map'](a2=>a2['leafIndex'])['filter'](a2=>a2!==undefined),M=Math['min'](...L),N=Math['max'](...L),O=K[0x0]['createdAt'],P=K[K['length']-0x1]['createdAt'];for(const a2 of K){if(a2['serverTimestamp']===undefined)throw new MessengerError(MessengerErrorCode['INVALID_INPUT'],'Message\x20'+a2['messageId']+'\x20missing\x20serverTimestamp');if(a2['leafIndex']===undefined)throw new MessengerError(MessengerErrorCode['INVALID_INPUT'],'Message\x20'+a2['messageId']+'\x20missing\x20leafIndex');if(!a2['prevRoot'])throw new MessengerError(MessengerErrorCode['INVALID_INPUT'],'Message\x20'+a2['messageId']+'\x20missing\x20prevRoot');if(!a2['newRoot'])throw new MessengerError(MessengerErrorCode['INVALID_INPUT'],'Message\x20'+a2['messageId']+'\x20missing\x20newRoot');if(!a2['serverSignature'])throw new MessengerError(MessengerErrorCode['INVALID_INPUT'],'Message\x20'+a2['messageId']+'\x20missing\x20serverSignature');}const Q=K['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'],'serverPublicKey':a3['serverPublicKey']||'','msgType':a3['msgType']};return!e&&a3['plaintext']!==undefined&&(a4['plaintext']=a3['plaintext']),a3['guardAddress']!==undefined&&(a4['guardAddress']=a3['guardAddress']),a3['passportAddress']!==undefined&&(a4['passportAddress']=a3['passportAddress']),a3['arkConfirmed']!==undefined&&(a4['arkConfirmed']={'recipient':a3['arkConfirmed']['recipient'],'recipientPublicKey':a3['arkConfirmed']['recipientPublicKey'],'signature':a3['arkConfirmed']['signature'],'timestamp':a3['arkConfirmed']['timestamp']}),a3['zipMetadata']!==undefined&&(a4['zipMetadata']=a3['zipMetadata']),a3['lastReceivedLeafIndex']!==undefined&&a3['lastReceivedLeafIndex']!==-0x1&&(a4['lastReceivedLeafIndex']=a3['lastReceivedLeafIndex']),a4;}),R=[h,k]['sort'](),S={'participants':R},T={'session':S,'messages':Q},{sha256:U}=await import('@noble/hashes/sha256'),{bytesToHex:V}=await import('@noble/hashes/utils'),W=canonicalizeJson(T),X='sha256:'+V(U(new TextEncoder()['encode'](W))),Y={'type':'wts','version':'1.0','created':new Date()['toISOString'](),'hash':X,'algorithm':'sha256','startTime':O,'endTime':P,'messageCount':Q['length'],'merkleRoot':Q[Q['length']-0x1]['merkleRoot'],'creator':h,'participant':k},Z={'wts':WTS_SCHEMA_URL,'payload':T,'meta':Y},a0=q+'_'+M+'-'+N+'.wts',a1=g['join'](a,a0);f['writeFileSync'](a1,JSON['stringify'](Z,null,0x2)),t['push'](a1);}const u=n[0x0]?.['createdAt']||0x0,v=n[n['length']-0x1]?.['createdAt']||0x0;return{'files':t,'totalMessageCount':n['length'],'timeRange':{'start':u,'end':v}};}async['addToBlacklist'](a,b){const c=this['findAccount'](a);if(!c)throw new MessengerError(MessengerErrorCode['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(MessengerErrorCode['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(MessengerErrorCode['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(MessengerErrorCode['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(MessengerErrorCode['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(MessengerErrorCode['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(MessengerErrorCode['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(MessengerErrorCode['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(MessengerErrorCode['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(MessengerErrorCode['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(MessengerErrorCode['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(MessengerErrorCode['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(MessengerErrorCode['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(MessengerErrorCode['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(MessengerErrorCode['ACCOUNT_NOT_FOUND'],'Account\x20'+a+'\x20not\x20in\x20managed\x20accounts');return c['messenger']['setSettings'](b);}}