wowok 2.1.39 → 2.1.41

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 (1019) hide show
  1. package/dist/cjs/bcs/bcs.d.ts +0 -8
  2. package/dist/cjs/bcs/bcs.js +1 -278
  3. package/dist/cjs/bcs/effects.js +1 -203
  4. package/dist/cjs/bcs/index.js +1 -55
  5. package/dist/cjs/bcs/pure.js +1 -39
  6. package/dist/cjs/bcs/type-tag-serializer.js +1 -107
  7. package/dist/cjs/bcs/types.d.ts +0 -49
  8. package/dist/cjs/bcs/types.js +1 -6
  9. package/dist/cjs/client/index.js +1 -7
  10. package/dist/cjs/client/network.js +1 -24
  11. package/dist/cjs/cryptography/index.js +1 -9
  12. package/dist/cjs/cryptography/intent.d.ts +0 -3
  13. package/dist/cjs/cryptography/intent.js +1 -20
  14. package/dist/cjs/cryptography/keypair.d.ts +4 -38
  15. package/dist/cjs/cryptography/keypair.js +1 -104
  16. package/dist/cjs/cryptography/mnemonics.d.ts +0 -23
  17. package/dist/cjs/cryptography/mnemonics.js +1 -46
  18. package/dist/cjs/cryptography/publickey.d.ts +0 -42
  19. package/dist/cjs/cryptography/publickey.js +1 -114
  20. package/dist/cjs/cryptography/signature-scheme.js +1 -25
  21. package/dist/cjs/cryptography/signature.d.ts +0 -11
  22. package/dist/cjs/cryptography/signature.js +1 -50
  23. package/dist/cjs/experimental/cache.js +1 -61
  24. package/dist/cjs/experimental/client.js +1 -23
  25. package/dist/cjs/experimental/core.d.ts +0 -2
  26. package/dist/cjs/experimental/core.js +1 -85
  27. package/dist/cjs/experimental/errors.js +1 -27
  28. package/dist/cjs/experimental/index.js +1 -8
  29. package/dist/cjs/experimental/persistent-storage.d.ts +0 -98
  30. package/dist/cjs/experimental/persistent-storage.js +1 -337
  31. package/dist/cjs/experimental/persistent-storage.test.d.ts +0 -4
  32. package/dist/cjs/experimental/persistent-storage.test.js +1 -198
  33. package/dist/cjs/experimental/transports/utils.js +1 -100
  34. package/dist/cjs/experimental/types.d.ts +0 -6
  35. package/dist/cjs/experimental/types.js +1 -5
  36. package/dist/cjs/faucet/faucet.d.ts +0 -9
  37. package/dist/cjs/faucet/faucet.js +1 -111
  38. package/dist/cjs/faucet/index.js +1 -4
  39. package/dist/cjs/grpc/client.js +1 -45
  40. package/dist/cjs/grpc/core.js +1 -603
  41. package/dist/cjs/grpc/index.js +1 -5
  42. package/dist/cjs/grpc/proto/google/protobuf/any.d.ts +0 -151
  43. package/dist/cjs/grpc/proto/google/protobuf/any.js +1 -168
  44. package/dist/cjs/grpc/proto/google/protobuf/duration.d.ts +0 -89
  45. package/dist/cjs/grpc/proto/google/protobuf/duration.js +1 -106
  46. package/dist/cjs/grpc/proto/google/protobuf/empty.d.ts +0 -17
  47. package/dist/cjs/grpc/proto/google/protobuf/empty.js +1 -49
  48. package/dist/cjs/grpc/proto/google/protobuf/field_mask.d.ts +0 -217
  49. package/dist/cjs/grpc/proto/google/protobuf/field_mask.js +1 -95
  50. package/dist/cjs/grpc/proto/google/protobuf/struct.d.ts +0 -112
  51. package/dist/cjs/grpc/proto/google/protobuf/struct.js +1 -272
  52. package/dist/cjs/grpc/proto/google/protobuf/timestamp.d.ts +0 -127
  53. package/dist/cjs/grpc/proto/google/protobuf/timestamp.js +1 -150
  54. package/dist/cjs/grpc/proto/google/rpc/error_details.d.ts +0 -407
  55. package/dist/cjs/grpc/proto/google/rpc/error_details.js +1 -343
  56. package/dist/cjs/grpc/proto/google/rpc/status.d.ts +0 -34
  57. package/dist/cjs/grpc/proto/google/rpc/status.js +1 -49
  58. package/dist/cjs/grpc/proto/sui/rpc/v2/argument.d.ts +0 -48
  59. package/dist/cjs/grpc/proto/sui/rpc/v2/argument.js +1 -83
  60. package/dist/cjs/grpc/proto/sui/rpc/v2/balance_change.d.ts +0 -23
  61. package/dist/cjs/grpc/proto/sui/rpc/v2/balance_change.js +1 -44
  62. package/dist/cjs/grpc/proto/sui/rpc/v2/bcs.d.ts +0 -20
  63. package/dist/cjs/grpc/proto/sui/rpc/v2/bcs.js +1 -37
  64. package/dist/cjs/grpc/proto/sui/rpc/v2/checkpoint.d.ts +0 -48
  65. package/dist/cjs/grpc/proto/sui/rpc/v2/checkpoint.js +1 -69
  66. package/dist/cjs/grpc/proto/sui/rpc/v2/checkpoint_contents.d.ts +0 -51
  67. package/dist/cjs/grpc/proto/sui/rpc/v2/checkpoint_contents.js +1 -79
  68. package/dist/cjs/grpc/proto/sui/rpc/v2/checkpoint_summary.d.ts +0 -149
  69. package/dist/cjs/grpc/proto/sui/rpc/v2/checkpoint_summary.js +1 -184
  70. package/dist/cjs/grpc/proto/sui/rpc/v2/effects.d.ts +0 -257
  71. package/dist/cjs/grpc/proto/sui/rpc/v2/effects.js +1 -370
  72. package/dist/cjs/grpc/proto/sui/rpc/v2/epoch.d.ts +0 -41
  73. package/dist/cjs/grpc/proto/sui/rpc/v2/epoch.js +1 -79
  74. package/dist/cjs/grpc/proto/sui/rpc/v2/error_reason.d.ts +0 -12
  75. package/dist/cjs/grpc/proto/sui/rpc/v2/error_reason.js +1 -29
  76. package/dist/cjs/grpc/proto/sui/rpc/v2/event.d.ts +0 -63
  77. package/dist/cjs/grpc/proto/sui/rpc/v2/event.js +1 -81
  78. package/dist/cjs/grpc/proto/sui/rpc/v2/executed_transaction.d.ts +0 -56
  79. package/dist/cjs/grpc/proto/sui/rpc/v2/executed_transaction.js +1 -79
  80. package/dist/cjs/grpc/proto/sui/rpc/v2/execution_status.d.ts +0 -623
  81. package/dist/cjs/grpc/proto/sui/rpc/v2/execution_status.js +1 -886
  82. package/dist/cjs/grpc/proto/sui/rpc/v2/gas_cost_summary.d.ts +0 -29
  83. package/dist/cjs/grpc/proto/sui/rpc/v2/gas_cost_summary.js +1 -55
  84. package/dist/cjs/grpc/proto/sui/rpc/v2/input.d.ts +0 -75
  85. package/dist/cjs/grpc/proto/sui/rpc/v2/input.js +1 -102
  86. package/dist/cjs/grpc/proto/sui/rpc/v2/jwk.d.ts +0 -50
  87. package/dist/cjs/grpc/proto/sui/rpc/v2/jwk.js +1 -76
  88. package/dist/cjs/grpc/proto/sui/rpc/v2/ledger_service.client.d.ts +0 -52
  89. package/dist/cjs/grpc/proto/sui/rpc/v2/ledger_service.client.js +1 -68
  90. package/dist/cjs/grpc/proto/sui/rpc/v2/ledger_service.d.ts +0 -260
  91. package/dist/cjs/grpc/proto/sui/rpc/v2/ledger_service.js +1 -407
  92. package/dist/cjs/grpc/proto/sui/rpc/v2/move_package.d.ts +0 -429
  93. package/dist/cjs/grpc/proto/sui/rpc/v2/move_package.js +1 -608
  94. package/dist/cjs/grpc/proto/sui/rpc/v2/move_package_service.client.d.ts +0 -30
  95. package/dist/cjs/grpc/proto/sui/rpc/v2/move_package_service.client.js +1 -45
  96. package/dist/cjs/grpc/proto/sui/rpc/v2/move_package_service.d.ts +0 -151
  97. package/dist/cjs/grpc/proto/sui/rpc/v2/move_package_service.js +1 -256
  98. package/dist/cjs/grpc/proto/sui/rpc/v2/name_service.client.d.ts +0 -18
  99. package/dist/cjs/grpc/proto/sui/rpc/v2/name_service.client.js +1 -31
  100. package/dist/cjs/grpc/proto/sui/rpc/v2/name_service.d.ts +0 -97
  101. package/dist/cjs/grpc/proto/sui/rpc/v2/name_service.js +1 -143
  102. package/dist/cjs/grpc/proto/sui/rpc/v2/object.d.ts +0 -95
  103. package/dist/cjs/grpc/proto/sui/rpc/v2/object.js +1 -109
  104. package/dist/cjs/grpc/proto/sui/rpc/v2/object_reference.d.ts +0 -23
  105. package/dist/cjs/grpc/proto/sui/rpc/v2/object_reference.js +1 -45
  106. package/dist/cjs/grpc/proto/sui/rpc/v2/owner.d.ts +0 -42
  107. package/dist/cjs/grpc/proto/sui/rpc/v2/owner.js +1 -75
  108. package/dist/cjs/grpc/proto/sui/rpc/v2/protocol_config.d.ts +0 -15
  109. package/dist/cjs/grpc/proto/sui/rpc/v2/protocol_config.js +1 -45
  110. package/dist/cjs/grpc/proto/sui/rpc/v2/signature.d.ts +0 -447
  111. package/dist/cjs/grpc/proto/sui/rpc/v2/signature.js +1 -584
  112. package/dist/cjs/grpc/proto/sui/rpc/v2/signature_scheme.d.ts +0 -31
  113. package/dist/cjs/grpc/proto/sui/rpc/v2/signature_scheme.js +1 -52
  114. package/dist/cjs/grpc/proto/sui/rpc/v2/signature_verification_service.client.d.ts +0 -16
  115. package/dist/cjs/grpc/proto/sui/rpc/v2/signature_verification_service.client.js +1 -26
  116. package/dist/cjs/grpc/proto/sui/rpc/v2/signature_verification_service.d.ts +0 -54
  117. package/dist/cjs/grpc/proto/sui/rpc/v2/signature_verification_service.js +1 -84
  118. package/dist/cjs/grpc/proto/sui/rpc/v2/state_service.client.d.ts +0 -36
  119. package/dist/cjs/grpc/proto/sui/rpc/v2/state_service.client.js +1 -52
  120. package/dist/cjs/grpc/proto/sui/rpc/v2/state_service.d.ts +0 -518
  121. package/dist/cjs/grpc/proto/sui/rpc/v2/state_service.js +1 -659
  122. package/dist/cjs/grpc/proto/sui/rpc/v2/subscription_service.client.d.ts +0 -36
  123. package/dist/cjs/grpc/proto/sui/rpc/v2/subscription_service.client.js +1 -36
  124. package/dist/cjs/grpc/proto/sui/rpc/v2/subscription_service.d.ts +0 -36
  125. package/dist/cjs/grpc/proto/sui/rpc/v2/subscription_service.js +1 -59
  126. package/dist/cjs/grpc/proto/sui/rpc/v2/system_state.d.ts +0 -538
  127. package/dist/cjs/grpc/proto/sui/rpc/v2/system_state.js +1 -756
  128. package/dist/cjs/grpc/proto/sui/rpc/v2/transaction.d.ts +0 -945
  129. package/dist/cjs/grpc/proto/sui/rpc/v2/transaction.js +1 -1245
  130. package/dist/cjs/grpc/proto/sui/rpc/v2/transaction_execution_service.client.d.ts +0 -18
  131. package/dist/cjs/grpc/proto/sui/rpc/v2/transaction_execution_service.client.js +1 -31
  132. package/dist/cjs/grpc/proto/sui/rpc/v2/transaction_execution_service.d.ts +0 -118
  133. package/dist/cjs/grpc/proto/sui/rpc/v2/transaction_execution_service.js +1 -193
  134. package/dist/cjs/index.js +1 -33
  135. package/dist/cjs/jsonRpc/client.d.ts +0 -140
  136. package/dist/cjs/jsonRpc/client.js +1 -653
  137. package/dist/cjs/jsonRpc/core.js +1 -590
  138. package/dist/cjs/jsonRpc/errors.js +1 -41
  139. package/dist/cjs/jsonRpc/http-transport.d.ts +0 -3
  140. package/dist/cjs/jsonRpc/http-transport.js +1 -73
  141. package/dist/cjs/jsonRpc/index.js +1 -6
  142. package/dist/cjs/jsonRpc/json-rpc-resolver.js +1 -314
  143. package/dist/cjs/jsonRpc/rpc-websocket-client.d.ts +0 -15
  144. package/dist/cjs/jsonRpc/rpc-websocket-client.js +1 -159
  145. package/dist/cjs/jsonRpc/types/chain.js +1 -4
  146. package/dist/cjs/jsonRpc/types/changes.js +1 -4
  147. package/dist/cjs/jsonRpc/types/coins.js +1 -4
  148. package/dist/cjs/jsonRpc/types/common.js +1 -4
  149. package/dist/cjs/jsonRpc/types/generated.d.ts +56 -542
  150. package/dist/cjs/jsonRpc/types/generated.js +1 -4
  151. package/dist/cjs/jsonRpc/types/index.js +1 -4
  152. package/dist/cjs/jsonRpc/types/params.d.ts +0 -336
  153. package/dist/cjs/jsonRpc/types/params.js +1 -4
  154. package/dist/cjs/keypairs/ed25519/ed25519-hd-key.js +1 -63
  155. package/dist/cjs/keypairs/ed25519/index.js +1 -5
  156. package/dist/cjs/keypairs/ed25519/keypair.d.ts +0 -52
  157. package/dist/cjs/keypairs/ed25519/keypair.js +1 -140
  158. package/dist/cjs/keypairs/ed25519/publickey.d.ts +0 -19
  159. package/dist/cjs/keypairs/ed25519/publickey.js +1 -72
  160. package/dist/cjs/keypairs/index.js +1 -7
  161. package/dist/cjs/keypairs/passkey/index.js +1 -5
  162. package/dist/cjs/keypairs/passkey/keypair.d.ts +0 -80
  163. package/dist/cjs/keypairs/passkey/keypair.js +1 -251
  164. package/dist/cjs/keypairs/passkey/publickey.d.ts +0 -47
  165. package/dist/cjs/keypairs/passkey/publickey.js +1 -170
  166. package/dist/cjs/keypairs/passkey/types.d.ts +0 -6
  167. package/dist/cjs/keypairs/passkey/types.js +1 -4
  168. package/dist/cjs/keypairs/secp256k1/index.js +1 -5
  169. package/dist/cjs/keypairs/secp256k1/keypair.d.ts +0 -51
  170. package/dist/cjs/keypairs/secp256k1/keypair.js +1 -133
  171. package/dist/cjs/keypairs/secp256k1/publickey.d.ts +0 -19
  172. package/dist/cjs/keypairs/secp256k1/publickey.js +1 -73
  173. package/dist/cjs/keypairs/secp256r1/index.js +1 -5
  174. package/dist/cjs/keypairs/secp256r1/keypair.d.ts +0 -51
  175. package/dist/cjs/keypairs/secp256r1/keypair.js +1 -130
  176. package/dist/cjs/keypairs/secp256r1/publickey.d.ts +0 -19
  177. package/dist/cjs/keypairs/secp256r1/publickey.js +1 -74
  178. package/dist/cjs/multisig/index.js +1 -5
  179. package/dist/cjs/multisig/publickey.d.ts +1 -36
  180. package/dist/cjs/multisig/publickey.js +1 -243
  181. package/dist/cjs/multisig/signer.d.ts +0 -1
  182. package/dist/cjs/multisig/signer.js +1 -62
  183. package/dist/cjs/transactions/Arguments.js +1 -12
  184. package/dist/cjs/transactions/Commands.d.ts +0 -3
  185. package/dist/cjs/transactions/Commands.js +1 -110
  186. package/dist/cjs/transactions/Inputs.js +1 -55
  187. package/dist/cjs/transactions/ObjectCache.js +1 -208
  188. package/dist/cjs/transactions/Transaction.d.ts +0 -56
  189. package/dist/cjs/transactions/Transaction.js +1 -646
  190. package/dist/cjs/transactions/TransactionData.d.ts +0 -6
  191. package/dist/cjs/transactions/TransactionData.js +1 -424
  192. package/dist/cjs/transactions/__tests__/Transaction.test.js +1 -167
  193. package/dist/cjs/transactions/__tests__/bcs.test.js +1 -200
  194. package/dist/cjs/transactions/data/internal.js +1 -185
  195. package/dist/cjs/transactions/data/v1.js +1 -474
  196. package/dist/cjs/transactions/data/v2.js +1 -108
  197. package/dist/cjs/transactions/executor/caching.d.ts +0 -4
  198. package/dist/cjs/transactions/executor/caching.js +1 -72
  199. package/dist/cjs/transactions/executor/parallel.d.ts +0 -11
  200. package/dist/cjs/transactions/executor/parallel.js +1 -352
  201. package/dist/cjs/transactions/executor/queue.js +1 -62
  202. package/dist/cjs/transactions/executor/serial.d.ts +0 -1
  203. package/dist/cjs/transactions/executor/serial.js +1 -102
  204. package/dist/cjs/transactions/hash.d.ts +0 -6
  205. package/dist/cjs/transactions/hash.js +1 -17
  206. package/dist/cjs/transactions/index.d.ts +0 -1
  207. package/dist/cjs/transactions/index.js +1 -15
  208. package/dist/cjs/transactions/intents/CoinWithBalance.js +1 -148
  209. package/dist/cjs/transactions/object.js +1 -90
  210. package/dist/cjs/transactions/plugins/NamedPackagesPlugin.d.ts +0 -18
  211. package/dist/cjs/transactions/plugins/NamedPackagesPlugin.js +1 -20
  212. package/dist/cjs/transactions/pure.js +1 -39
  213. package/dist/cjs/transactions/resolve.js +1 -72
  214. package/dist/cjs/transactions/serializer.js +1 -170
  215. package/dist/cjs/transactions/utils.js +1 -124
  216. package/dist/cjs/utils/constants.js +1 -27
  217. package/dist/cjs/utils/derived-objects.d.ts +0 -3
  218. package/dist/cjs/utils/derived-objects.js +1 -14
  219. package/dist/cjs/utils/dynamic-fields.js +1 -20
  220. package/dist/cjs/utils/format.js +1 -15
  221. package/dist/cjs/utils/index.js +1 -15
  222. package/dist/cjs/utils/move-registry.d.ts +0 -4
  223. package/dist/cjs/utils/move-registry.js +1 -41
  224. package/dist/cjs/utils/sui-types.d.ts +0 -12
  225. package/dist/cjs/utils/sui-types.js +1 -86
  226. package/dist/cjs/utils/suins.js +1 -36
  227. package/dist/cjs/verify/index.js +1 -5
  228. package/dist/cjs/verify/verify.js +1 -91
  229. package/dist/cjs/version.js +1 -6
  230. package/dist/cjs/w/call/allocation.js +1 -369
  231. package/dist/cjs/w/call/arb.js +1 -109
  232. package/dist/cjs/w/call/arbitration.js +1 -1223
  233. package/dist/cjs/w/call/base.js +1 -324
  234. package/dist/cjs/w/call/contact.js +1 -350
  235. package/dist/cjs/w/call/demand.js +1 -702
  236. package/dist/cjs/w/call/entity.js +1 -180
  237. package/dist/cjs/w/call/guard-ins.d.ts +0 -3
  238. package/dist/cjs/w/call/guard-ins.js +1 -4387
  239. package/dist/cjs/w/call/guard.d.ts +111 -27
  240. package/dist/cjs/w/call/guard.js +1 -1154
  241. package/dist/cjs/w/call/index.js +1 -27
  242. package/dist/cjs/w/call/machine.js +1 -1146
  243. package/dist/cjs/w/call/order.js +1 -348
  244. package/dist/cjs/w/call/passport.js +1 -234
  245. package/dist/cjs/w/call/payment.js +1 -192
  246. package/dist/cjs/w/call/permission.d.ts +0 -20
  247. package/dist/cjs/w/call/permission.js +1 -1227
  248. package/dist/cjs/w/call/personal.js +1 -142
  249. package/dist/cjs/w/call/progress.js +1 -691
  250. package/dist/cjs/w/call/proof.js +1 -69
  251. package/dist/cjs/w/call/repository.js +1 -1097
  252. package/dist/cjs/w/call/resource.js +1 -119
  253. package/dist/cjs/w/call/reward.js +1 -688
  254. package/dist/cjs/w/call/service.js +1 -1991
  255. package/dist/cjs/w/call/treasury.js +1 -877
  256. package/dist/cjs/w/call/util.d.ts +1 -0
  257. package/dist/cjs/w/call/util.js +1 -624
  258. package/dist/cjs/w/common.d.ts +48 -68
  259. package/dist/cjs/w/common.js +1 -604
  260. package/dist/cjs/w/exception.d.ts +1 -0
  261. package/dist/cjs/w/exception.js +1 -582
  262. package/dist/cjs/w/index.js +1 -12
  263. package/dist/cjs/w/local/account.d.ts +0 -45
  264. package/dist/cjs/w/local/account.js +1 -746
  265. package/dist/cjs/w/local/cache.js +1 -191
  266. package/dist/cjs/w/local/config.d.ts +0 -3
  267. package/dist/cjs/w/local/config.js +1 -50
  268. package/dist/cjs/w/local/index.js +1 -233
  269. package/dist/cjs/w/local/local.js +1 -664
  270. package/dist/cjs/w/local/storage.d.ts +0 -20
  271. package/dist/cjs/w/local/storage.js +1 -222
  272. package/dist/cjs/w/local/token.d.ts +1 -4
  273. package/dist/cjs/w/local/token.js +1 -161
  274. package/dist/cjs/w/local/util.d.ts +0 -4
  275. package/dist/cjs/w/local/util.js +1 -50
  276. package/dist/cjs/w/local/wip.d.ts +0 -92
  277. package/dist/cjs/w/local/wip.js +1 -1202
  278. package/dist/cjs/w/messenger/crypto.d.ts +0 -186
  279. package/dist/cjs/w/messenger/crypto.js +1 -574
  280. package/dist/cjs/w/messenger/index.d.ts +0 -18
  281. package/dist/cjs/w/messenger/index.js +1 -28
  282. package/dist/cjs/w/messenger/messenger-api.d.ts +0 -177
  283. package/dist/cjs/w/messenger/messenger-api.js +1 -1503
  284. package/dist/cjs/w/messenger/messenger-manager.d.ts +0 -24
  285. package/dist/cjs/w/messenger/messenger-manager.js +1 -1065
  286. package/dist/cjs/w/messenger/messenger.d.ts +0 -206
  287. package/dist/cjs/w/messenger/messenger.js +1 -1439
  288. package/dist/cjs/w/messenger/server.d.ts +0 -94
  289. package/dist/cjs/w/messenger/server.js +1 -460
  290. package/dist/cjs/w/messenger/session.d.ts +0 -76
  291. package/dist/cjs/w/messenger/session.js +1 -768
  292. package/dist/cjs/w/messenger/storage.d.ts +0 -143
  293. package/dist/cjs/w/messenger/storage.js +1 -1256
  294. package/dist/cjs/w/messenger/templates/wts-html-template.d.ts +0 -31
  295. package/dist/cjs/w/messenger/templates/wts-html-template.js +1 -414
  296. package/dist/cjs/w/messenger/types.d.ts +7 -218
  297. package/dist/cjs/w/messenger/types.js +1 -98
  298. package/dist/cjs/w/messenger/utils.d.ts +0 -14
  299. package/dist/cjs/w/messenger/utils.js +1 -29
  300. package/dist/cjs/w/query/bult-in.d.ts +0 -11
  301. package/dist/cjs/w/query/bult-in.js +1 -107
  302. package/dist/cjs/w/query/event.d.ts +0 -7
  303. package/dist/cjs/w/query/event.js +1 -140
  304. package/dist/cjs/w/query/index.js +1 -8
  305. package/dist/cjs/w/query/object.d.ts +7 -51
  306. package/dist/cjs/w/query/object.js +1 -1636
  307. package/dist/cjs/w/query/received.d.ts +0 -6
  308. package/dist/cjs/w/query/received.js +1 -67
  309. package/dist/cjs/w/query/util.d.ts +1 -2
  310. package/dist/cjs/w/query/util.js +1 -54
  311. package/dist/cjs/w/util.d.ts +2 -5
  312. package/dist/cjs/w/util.js +1 -616
  313. package/dist/esm/bcs/bcs.d.ts +0 -8
  314. package/dist/esm/bcs/bcs.js +1 -278
  315. package/dist/esm/bcs/effects.js +1 -203
  316. package/dist/esm/bcs/index.js +1 -55
  317. package/dist/esm/bcs/pure.js +1 -39
  318. package/dist/esm/bcs/type-tag-serializer.js +1 -107
  319. package/dist/esm/bcs/types.d.ts +0 -49
  320. package/dist/esm/bcs/types.js +1 -6
  321. package/dist/esm/client/index.js +1 -7
  322. package/dist/esm/client/network.js +1 -24
  323. package/dist/esm/cryptography/index.js +1 -9
  324. package/dist/esm/cryptography/intent.d.ts +0 -3
  325. package/dist/esm/cryptography/intent.js +1 -20
  326. package/dist/esm/cryptography/keypair.d.ts +4 -38
  327. package/dist/esm/cryptography/keypair.js +1 -104
  328. package/dist/esm/cryptography/mnemonics.d.ts +0 -23
  329. package/dist/esm/cryptography/mnemonics.js +1 -46
  330. package/dist/esm/cryptography/publickey.d.ts +0 -42
  331. package/dist/esm/cryptography/publickey.js +1 -114
  332. package/dist/esm/cryptography/signature-scheme.js +1 -25
  333. package/dist/esm/cryptography/signature.d.ts +0 -11
  334. package/dist/esm/cryptography/signature.js +1 -50
  335. package/dist/esm/experimental/cache.js +1 -61
  336. package/dist/esm/experimental/client.js +1 -23
  337. package/dist/esm/experimental/core.d.ts +0 -2
  338. package/dist/esm/experimental/core.js +1 -85
  339. package/dist/esm/experimental/errors.js +1 -27
  340. package/dist/esm/experimental/index.js +1 -8
  341. package/dist/esm/experimental/persistent-storage.d.ts +0 -98
  342. package/dist/esm/experimental/persistent-storage.js +1 -337
  343. package/dist/esm/experimental/persistent-storage.test.d.ts +0 -4
  344. package/dist/esm/experimental/persistent-storage.test.js +1 -198
  345. package/dist/esm/experimental/transports/utils.js +1 -100
  346. package/dist/esm/experimental/types.d.ts +0 -6
  347. package/dist/esm/experimental/types.js +1 -5
  348. package/dist/esm/faucet/faucet.d.ts +0 -9
  349. package/dist/esm/faucet/faucet.js +1 -111
  350. package/dist/esm/faucet/index.js +1 -4
  351. package/dist/esm/grpc/client.js +1 -45
  352. package/dist/esm/grpc/core.js +1 -603
  353. package/dist/esm/grpc/index.js +1 -5
  354. package/dist/esm/grpc/proto/google/protobuf/any.d.ts +0 -151
  355. package/dist/esm/grpc/proto/google/protobuf/any.js +1 -168
  356. package/dist/esm/grpc/proto/google/protobuf/duration.d.ts +0 -89
  357. package/dist/esm/grpc/proto/google/protobuf/duration.js +1 -106
  358. package/dist/esm/grpc/proto/google/protobuf/empty.d.ts +0 -17
  359. package/dist/esm/grpc/proto/google/protobuf/empty.js +1 -49
  360. package/dist/esm/grpc/proto/google/protobuf/field_mask.d.ts +0 -217
  361. package/dist/esm/grpc/proto/google/protobuf/field_mask.js +1 -95
  362. package/dist/esm/grpc/proto/google/protobuf/struct.d.ts +0 -112
  363. package/dist/esm/grpc/proto/google/protobuf/struct.js +1 -272
  364. package/dist/esm/grpc/proto/google/protobuf/timestamp.d.ts +0 -127
  365. package/dist/esm/grpc/proto/google/protobuf/timestamp.js +1 -150
  366. package/dist/esm/grpc/proto/google/rpc/error_details.d.ts +0 -407
  367. package/dist/esm/grpc/proto/google/rpc/error_details.js +1 -343
  368. package/dist/esm/grpc/proto/google/rpc/status.d.ts +0 -34
  369. package/dist/esm/grpc/proto/google/rpc/status.js +1 -49
  370. package/dist/esm/grpc/proto/sui/rpc/v2/argument.d.ts +0 -48
  371. package/dist/esm/grpc/proto/sui/rpc/v2/argument.js +1 -83
  372. package/dist/esm/grpc/proto/sui/rpc/v2/balance_change.d.ts +0 -23
  373. package/dist/esm/grpc/proto/sui/rpc/v2/balance_change.js +1 -44
  374. package/dist/esm/grpc/proto/sui/rpc/v2/bcs.d.ts +0 -20
  375. package/dist/esm/grpc/proto/sui/rpc/v2/bcs.js +1 -37
  376. package/dist/esm/grpc/proto/sui/rpc/v2/checkpoint.d.ts +0 -48
  377. package/dist/esm/grpc/proto/sui/rpc/v2/checkpoint.js +1 -69
  378. package/dist/esm/grpc/proto/sui/rpc/v2/checkpoint_contents.d.ts +0 -51
  379. package/dist/esm/grpc/proto/sui/rpc/v2/checkpoint_contents.js +1 -79
  380. package/dist/esm/grpc/proto/sui/rpc/v2/checkpoint_summary.d.ts +0 -149
  381. package/dist/esm/grpc/proto/sui/rpc/v2/checkpoint_summary.js +1 -184
  382. package/dist/esm/grpc/proto/sui/rpc/v2/effects.d.ts +0 -257
  383. package/dist/esm/grpc/proto/sui/rpc/v2/effects.js +1 -370
  384. package/dist/esm/grpc/proto/sui/rpc/v2/epoch.d.ts +0 -41
  385. package/dist/esm/grpc/proto/sui/rpc/v2/epoch.js +1 -79
  386. package/dist/esm/grpc/proto/sui/rpc/v2/error_reason.d.ts +0 -12
  387. package/dist/esm/grpc/proto/sui/rpc/v2/error_reason.js +1 -29
  388. package/dist/esm/grpc/proto/sui/rpc/v2/event.d.ts +0 -63
  389. package/dist/esm/grpc/proto/sui/rpc/v2/event.js +1 -81
  390. package/dist/esm/grpc/proto/sui/rpc/v2/executed_transaction.d.ts +0 -56
  391. package/dist/esm/grpc/proto/sui/rpc/v2/executed_transaction.js +1 -79
  392. package/dist/esm/grpc/proto/sui/rpc/v2/execution_status.d.ts +0 -623
  393. package/dist/esm/grpc/proto/sui/rpc/v2/execution_status.js +1 -886
  394. package/dist/esm/grpc/proto/sui/rpc/v2/gas_cost_summary.d.ts +0 -29
  395. package/dist/esm/grpc/proto/sui/rpc/v2/gas_cost_summary.js +1 -55
  396. package/dist/esm/grpc/proto/sui/rpc/v2/input.d.ts +0 -75
  397. package/dist/esm/grpc/proto/sui/rpc/v2/input.js +1 -102
  398. package/dist/esm/grpc/proto/sui/rpc/v2/jwk.d.ts +0 -50
  399. package/dist/esm/grpc/proto/sui/rpc/v2/jwk.js +1 -76
  400. package/dist/esm/grpc/proto/sui/rpc/v2/ledger_service.client.d.ts +0 -52
  401. package/dist/esm/grpc/proto/sui/rpc/v2/ledger_service.client.js +1 -68
  402. package/dist/esm/grpc/proto/sui/rpc/v2/ledger_service.d.ts +0 -260
  403. package/dist/esm/grpc/proto/sui/rpc/v2/ledger_service.js +1 -407
  404. package/dist/esm/grpc/proto/sui/rpc/v2/move_package.d.ts +0 -429
  405. package/dist/esm/grpc/proto/sui/rpc/v2/move_package.js +1 -608
  406. package/dist/esm/grpc/proto/sui/rpc/v2/move_package_service.client.d.ts +0 -30
  407. package/dist/esm/grpc/proto/sui/rpc/v2/move_package_service.client.js +1 -45
  408. package/dist/esm/grpc/proto/sui/rpc/v2/move_package_service.d.ts +0 -151
  409. package/dist/esm/grpc/proto/sui/rpc/v2/move_package_service.js +1 -256
  410. package/dist/esm/grpc/proto/sui/rpc/v2/name_service.client.d.ts +0 -18
  411. package/dist/esm/grpc/proto/sui/rpc/v2/name_service.client.js +1 -31
  412. package/dist/esm/grpc/proto/sui/rpc/v2/name_service.d.ts +0 -97
  413. package/dist/esm/grpc/proto/sui/rpc/v2/name_service.js +1 -143
  414. package/dist/esm/grpc/proto/sui/rpc/v2/object.d.ts +0 -95
  415. package/dist/esm/grpc/proto/sui/rpc/v2/object.js +1 -109
  416. package/dist/esm/grpc/proto/sui/rpc/v2/object_reference.d.ts +0 -23
  417. package/dist/esm/grpc/proto/sui/rpc/v2/object_reference.js +1 -45
  418. package/dist/esm/grpc/proto/sui/rpc/v2/owner.d.ts +0 -42
  419. package/dist/esm/grpc/proto/sui/rpc/v2/owner.js +1 -75
  420. package/dist/esm/grpc/proto/sui/rpc/v2/protocol_config.d.ts +0 -15
  421. package/dist/esm/grpc/proto/sui/rpc/v2/protocol_config.js +1 -45
  422. package/dist/esm/grpc/proto/sui/rpc/v2/signature.d.ts +0 -447
  423. package/dist/esm/grpc/proto/sui/rpc/v2/signature.js +1 -584
  424. package/dist/esm/grpc/proto/sui/rpc/v2/signature_scheme.d.ts +0 -31
  425. package/dist/esm/grpc/proto/sui/rpc/v2/signature_scheme.js +1 -52
  426. package/dist/esm/grpc/proto/sui/rpc/v2/signature_verification_service.client.d.ts +0 -16
  427. package/dist/esm/grpc/proto/sui/rpc/v2/signature_verification_service.client.js +1 -26
  428. package/dist/esm/grpc/proto/sui/rpc/v2/signature_verification_service.d.ts +0 -54
  429. package/dist/esm/grpc/proto/sui/rpc/v2/signature_verification_service.js +1 -84
  430. package/dist/esm/grpc/proto/sui/rpc/v2/state_service.client.d.ts +0 -36
  431. package/dist/esm/grpc/proto/sui/rpc/v2/state_service.client.js +1 -52
  432. package/dist/esm/grpc/proto/sui/rpc/v2/state_service.d.ts +0 -518
  433. package/dist/esm/grpc/proto/sui/rpc/v2/state_service.js +1 -659
  434. package/dist/esm/grpc/proto/sui/rpc/v2/subscription_service.client.d.ts +0 -36
  435. package/dist/esm/grpc/proto/sui/rpc/v2/subscription_service.client.js +1 -36
  436. package/dist/esm/grpc/proto/sui/rpc/v2/subscription_service.d.ts +0 -36
  437. package/dist/esm/grpc/proto/sui/rpc/v2/subscription_service.js +1 -59
  438. package/dist/esm/grpc/proto/sui/rpc/v2/system_state.d.ts +0 -538
  439. package/dist/esm/grpc/proto/sui/rpc/v2/system_state.js +1 -756
  440. package/dist/esm/grpc/proto/sui/rpc/v2/transaction.d.ts +0 -945
  441. package/dist/esm/grpc/proto/sui/rpc/v2/transaction.js +1 -1245
  442. package/dist/esm/grpc/proto/sui/rpc/v2/transaction_execution_service.client.d.ts +0 -18
  443. package/dist/esm/grpc/proto/sui/rpc/v2/transaction_execution_service.client.js +1 -31
  444. package/dist/esm/grpc/proto/sui/rpc/v2/transaction_execution_service.d.ts +0 -118
  445. package/dist/esm/grpc/proto/sui/rpc/v2/transaction_execution_service.js +1 -193
  446. package/dist/esm/index.js +1 -33
  447. package/dist/esm/jsonRpc/client.d.ts +0 -140
  448. package/dist/esm/jsonRpc/client.js +1 -653
  449. package/dist/esm/jsonRpc/core.js +1 -590
  450. package/dist/esm/jsonRpc/errors.js +1 -41
  451. package/dist/esm/jsonRpc/http-transport.d.ts +0 -3
  452. package/dist/esm/jsonRpc/http-transport.js +1 -73
  453. package/dist/esm/jsonRpc/index.js +1 -6
  454. package/dist/esm/jsonRpc/json-rpc-resolver.js +1 -314
  455. package/dist/esm/jsonRpc/rpc-websocket-client.d.ts +0 -15
  456. package/dist/esm/jsonRpc/rpc-websocket-client.js +1 -159
  457. package/dist/esm/jsonRpc/types/chain.js +1 -4
  458. package/dist/esm/jsonRpc/types/changes.js +1 -4
  459. package/dist/esm/jsonRpc/types/coins.js +1 -4
  460. package/dist/esm/jsonRpc/types/common.js +1 -4
  461. package/dist/esm/jsonRpc/types/generated.d.ts +56 -542
  462. package/dist/esm/jsonRpc/types/generated.js +1 -4
  463. package/dist/esm/jsonRpc/types/index.js +1 -4
  464. package/dist/esm/jsonRpc/types/params.d.ts +0 -336
  465. package/dist/esm/jsonRpc/types/params.js +1 -4
  466. package/dist/esm/keypairs/ed25519/ed25519-hd-key.js +1 -63
  467. package/dist/esm/keypairs/ed25519/index.js +1 -5
  468. package/dist/esm/keypairs/ed25519/keypair.d.ts +0 -52
  469. package/dist/esm/keypairs/ed25519/keypair.js +1 -140
  470. package/dist/esm/keypairs/ed25519/publickey.d.ts +0 -19
  471. package/dist/esm/keypairs/ed25519/publickey.js +1 -72
  472. package/dist/esm/keypairs/index.js +1 -7
  473. package/dist/esm/keypairs/passkey/index.js +1 -5
  474. package/dist/esm/keypairs/passkey/keypair.d.ts +0 -80
  475. package/dist/esm/keypairs/passkey/keypair.js +1 -251
  476. package/dist/esm/keypairs/passkey/publickey.d.ts +0 -47
  477. package/dist/esm/keypairs/passkey/publickey.js +1 -170
  478. package/dist/esm/keypairs/passkey/types.d.ts +0 -6
  479. package/dist/esm/keypairs/passkey/types.js +1 -4
  480. package/dist/esm/keypairs/secp256k1/index.js +1 -5
  481. package/dist/esm/keypairs/secp256k1/keypair.d.ts +0 -51
  482. package/dist/esm/keypairs/secp256k1/keypair.js +1 -133
  483. package/dist/esm/keypairs/secp256k1/publickey.d.ts +0 -19
  484. package/dist/esm/keypairs/secp256k1/publickey.js +1 -73
  485. package/dist/esm/keypairs/secp256r1/index.js +1 -5
  486. package/dist/esm/keypairs/secp256r1/keypair.d.ts +0 -51
  487. package/dist/esm/keypairs/secp256r1/keypair.js +1 -130
  488. package/dist/esm/keypairs/secp256r1/publickey.d.ts +0 -19
  489. package/dist/esm/keypairs/secp256r1/publickey.js +1 -74
  490. package/dist/esm/multisig/index.js +1 -5
  491. package/dist/esm/multisig/publickey.d.ts +1 -36
  492. package/dist/esm/multisig/publickey.js +1 -243
  493. package/dist/esm/multisig/signer.d.ts +0 -1
  494. package/dist/esm/multisig/signer.js +1 -62
  495. package/dist/esm/transactions/Arguments.js +1 -12
  496. package/dist/esm/transactions/Commands.d.ts +0 -3
  497. package/dist/esm/transactions/Commands.js +1 -110
  498. package/dist/esm/transactions/Inputs.js +1 -55
  499. package/dist/esm/transactions/ObjectCache.js +1 -208
  500. package/dist/esm/transactions/Transaction.d.ts +0 -56
  501. package/dist/esm/transactions/Transaction.js +1 -646
  502. package/dist/esm/transactions/TransactionData.d.ts +0 -6
  503. package/dist/esm/transactions/TransactionData.js +1 -424
  504. package/dist/esm/transactions/__tests__/Transaction.test.js +1 -167
  505. package/dist/esm/transactions/__tests__/bcs.test.js +1 -200
  506. package/dist/esm/transactions/data/internal.js +1 -185
  507. package/dist/esm/transactions/data/v1.js +1 -474
  508. package/dist/esm/transactions/data/v2.js +1 -108
  509. package/dist/esm/transactions/executor/caching.d.ts +0 -4
  510. package/dist/esm/transactions/executor/caching.js +1 -72
  511. package/dist/esm/transactions/executor/parallel.d.ts +0 -11
  512. package/dist/esm/transactions/executor/parallel.js +1 -352
  513. package/dist/esm/transactions/executor/queue.js +1 -62
  514. package/dist/esm/transactions/executor/serial.d.ts +0 -1
  515. package/dist/esm/transactions/executor/serial.js +1 -102
  516. package/dist/esm/transactions/hash.d.ts +0 -6
  517. package/dist/esm/transactions/hash.js +1 -17
  518. package/dist/esm/transactions/index.d.ts +0 -1
  519. package/dist/esm/transactions/index.js +1 -15
  520. package/dist/esm/transactions/intents/CoinWithBalance.js +1 -148
  521. package/dist/esm/transactions/object.js +1 -90
  522. package/dist/esm/transactions/plugins/NamedPackagesPlugin.d.ts +0 -18
  523. package/dist/esm/transactions/plugins/NamedPackagesPlugin.js +1 -20
  524. package/dist/esm/transactions/pure.js +1 -39
  525. package/dist/esm/transactions/resolve.js +1 -72
  526. package/dist/esm/transactions/serializer.js +1 -170
  527. package/dist/esm/transactions/utils.js +1 -124
  528. package/dist/esm/utils/constants.js +1 -27
  529. package/dist/esm/utils/derived-objects.d.ts +0 -3
  530. package/dist/esm/utils/derived-objects.js +1 -14
  531. package/dist/esm/utils/dynamic-fields.js +1 -20
  532. package/dist/esm/utils/format.js +1 -15
  533. package/dist/esm/utils/index.js +1 -15
  534. package/dist/esm/utils/move-registry.d.ts +0 -4
  535. package/dist/esm/utils/move-registry.js +1 -41
  536. package/dist/esm/utils/sui-types.d.ts +0 -12
  537. package/dist/esm/utils/sui-types.js +1 -86
  538. package/dist/esm/utils/suins.js +1 -36
  539. package/dist/esm/verify/index.js +1 -5
  540. package/dist/esm/verify/verify.js +1 -91
  541. package/dist/esm/version.js +1 -6
  542. package/dist/esm/w/call/allocation.js +1 -369
  543. package/dist/esm/w/call/arb.js +1 -109
  544. package/dist/esm/w/call/arbitration.js +1 -1223
  545. package/dist/esm/w/call/base.js +1 -324
  546. package/dist/esm/w/call/contact.js +1 -350
  547. package/dist/esm/w/call/demand.js +1 -702
  548. package/dist/esm/w/call/entity.js +1 -180
  549. package/dist/esm/w/call/guard-ins.d.ts +0 -3
  550. package/dist/esm/w/call/guard-ins.js +1 -4387
  551. package/dist/esm/w/call/guard.d.ts +111 -27
  552. package/dist/esm/w/call/guard.js +1 -1154
  553. package/dist/esm/w/call/index.js +1 -27
  554. package/dist/esm/w/call/machine.js +1 -1146
  555. package/dist/esm/w/call/order.js +1 -348
  556. package/dist/esm/w/call/passport.js +1 -234
  557. package/dist/esm/w/call/payment.js +1 -192
  558. package/dist/esm/w/call/permission.d.ts +0 -20
  559. package/dist/esm/w/call/permission.js +1 -1227
  560. package/dist/esm/w/call/personal.js +1 -142
  561. package/dist/esm/w/call/progress.js +1 -691
  562. package/dist/esm/w/call/proof.js +1 -69
  563. package/dist/esm/w/call/repository.js +1 -1097
  564. package/dist/esm/w/call/resource.js +1 -119
  565. package/dist/esm/w/call/reward.js +1 -688
  566. package/dist/esm/w/call/service.js +1 -1991
  567. package/dist/esm/w/call/treasury.js +1 -877
  568. package/dist/esm/w/call/util.d.ts +1 -0
  569. package/dist/esm/w/call/util.js +1 -624
  570. package/dist/esm/w/common.d.ts +48 -68
  571. package/dist/esm/w/common.js +1 -604
  572. package/dist/esm/w/exception.d.ts +1 -0
  573. package/dist/esm/w/exception.js +1 -582
  574. package/dist/esm/w/index.js +1 -12
  575. package/dist/esm/w/local/account.d.ts +0 -45
  576. package/dist/esm/w/local/account.js +1 -746
  577. package/dist/esm/w/local/cache.js +1 -191
  578. package/dist/esm/w/local/config.d.ts +0 -3
  579. package/dist/esm/w/local/config.js +1 -50
  580. package/dist/esm/w/local/index.js +1 -233
  581. package/dist/esm/w/local/local.js +1 -664
  582. package/dist/esm/w/local/storage.d.ts +0 -20
  583. package/dist/esm/w/local/storage.js +1 -222
  584. package/dist/esm/w/local/token.d.ts +1 -4
  585. package/dist/esm/w/local/token.js +1 -161
  586. package/dist/esm/w/local/util.d.ts +0 -4
  587. package/dist/esm/w/local/util.js +1 -50
  588. package/dist/esm/w/local/wip.d.ts +0 -92
  589. package/dist/esm/w/local/wip.js +1 -1202
  590. package/dist/esm/w/messenger/crypto.d.ts +0 -186
  591. package/dist/esm/w/messenger/crypto.js +1 -574
  592. package/dist/esm/w/messenger/index.d.ts +0 -18
  593. package/dist/esm/w/messenger/index.js +1 -28
  594. package/dist/esm/w/messenger/messenger-api.d.ts +0 -177
  595. package/dist/esm/w/messenger/messenger-api.js +1 -1503
  596. package/dist/esm/w/messenger/messenger-manager.d.ts +0 -24
  597. package/dist/esm/w/messenger/messenger-manager.js +1 -1065
  598. package/dist/esm/w/messenger/messenger.d.ts +0 -206
  599. package/dist/esm/w/messenger/messenger.js +1 -1439
  600. package/dist/esm/w/messenger/server.d.ts +0 -94
  601. package/dist/esm/w/messenger/server.js +1 -460
  602. package/dist/esm/w/messenger/session.d.ts +0 -76
  603. package/dist/esm/w/messenger/session.js +1 -768
  604. package/dist/esm/w/messenger/storage.d.ts +0 -143
  605. package/dist/esm/w/messenger/storage.js +1 -1256
  606. package/dist/esm/w/messenger/templates/wts-html-template.d.ts +0 -31
  607. package/dist/esm/w/messenger/templates/wts-html-template.js +1 -414
  608. package/dist/esm/w/messenger/types.d.ts +7 -218
  609. package/dist/esm/w/messenger/types.js +1 -98
  610. package/dist/esm/w/messenger/utils.d.ts +0 -14
  611. package/dist/esm/w/messenger/utils.js +1 -29
  612. package/dist/esm/w/query/bult-in.d.ts +0 -11
  613. package/dist/esm/w/query/bult-in.js +1 -107
  614. package/dist/esm/w/query/event.d.ts +0 -7
  615. package/dist/esm/w/query/event.js +1 -140
  616. package/dist/esm/w/query/index.js +1 -8
  617. package/dist/esm/w/query/object.d.ts +7 -51
  618. package/dist/esm/w/query/object.js +1 -1636
  619. package/dist/esm/w/query/received.d.ts +0 -6
  620. package/dist/esm/w/query/received.js +1 -67
  621. package/dist/esm/w/query/util.d.ts +1 -2
  622. package/dist/esm/w/query/util.js +1 -54
  623. package/dist/esm/w/util.d.ts +2 -5
  624. package/dist/esm/w/util.js +1 -616
  625. package/package.json +5 -2
  626. package/dist/cjs/bcs/bcs.js.map +0 -1
  627. package/dist/cjs/bcs/effects.js.map +0 -1
  628. package/dist/cjs/bcs/index.js.map +0 -1
  629. package/dist/cjs/bcs/pure.js.map +0 -1
  630. package/dist/cjs/bcs/type-tag-serializer.js.map +0 -1
  631. package/dist/cjs/bcs/types.js.map +0 -1
  632. package/dist/cjs/client/index.js.map +0 -1
  633. package/dist/cjs/client/network.js.map +0 -1
  634. package/dist/cjs/cryptography/index.js.map +0 -1
  635. package/dist/cjs/cryptography/intent.js.map +0 -1
  636. package/dist/cjs/cryptography/keypair.js.map +0 -1
  637. package/dist/cjs/cryptography/mnemonics.js.map +0 -1
  638. package/dist/cjs/cryptography/publickey.js.map +0 -1
  639. package/dist/cjs/cryptography/signature-scheme.js.map +0 -1
  640. package/dist/cjs/cryptography/signature.js.map +0 -1
  641. package/dist/cjs/experimental/cache.js.map +0 -1
  642. package/dist/cjs/experimental/client.js.map +0 -1
  643. package/dist/cjs/experimental/core.js.map +0 -1
  644. package/dist/cjs/experimental/errors.js.map +0 -1
  645. package/dist/cjs/experimental/index.js.map +0 -1
  646. package/dist/cjs/experimental/persistent-storage.js.map +0 -1
  647. package/dist/cjs/experimental/persistent-storage.test.js.map +0 -1
  648. package/dist/cjs/experimental/transports/utils.js.map +0 -1
  649. package/dist/cjs/experimental/types.js.map +0 -1
  650. package/dist/cjs/faucet/faucet.js.map +0 -1
  651. package/dist/cjs/faucet/index.js.map +0 -1
  652. package/dist/cjs/grpc/client.js.map +0 -1
  653. package/dist/cjs/grpc/core.js.map +0 -1
  654. package/dist/cjs/grpc/index.js.map +0 -1
  655. package/dist/cjs/grpc/proto/google/protobuf/any.js.map +0 -1
  656. package/dist/cjs/grpc/proto/google/protobuf/duration.js.map +0 -1
  657. package/dist/cjs/grpc/proto/google/protobuf/empty.js.map +0 -1
  658. package/dist/cjs/grpc/proto/google/protobuf/field_mask.js.map +0 -1
  659. package/dist/cjs/grpc/proto/google/protobuf/struct.js.map +0 -1
  660. package/dist/cjs/grpc/proto/google/protobuf/timestamp.js.map +0 -1
  661. package/dist/cjs/grpc/proto/google/rpc/error_details.js.map +0 -1
  662. package/dist/cjs/grpc/proto/google/rpc/status.js.map +0 -1
  663. package/dist/cjs/grpc/proto/sui/rpc/v2/argument.js.map +0 -1
  664. package/dist/cjs/grpc/proto/sui/rpc/v2/balance_change.js.map +0 -1
  665. package/dist/cjs/grpc/proto/sui/rpc/v2/bcs.js.map +0 -1
  666. package/dist/cjs/grpc/proto/sui/rpc/v2/checkpoint.js.map +0 -1
  667. package/dist/cjs/grpc/proto/sui/rpc/v2/checkpoint_contents.js.map +0 -1
  668. package/dist/cjs/grpc/proto/sui/rpc/v2/checkpoint_summary.js.map +0 -1
  669. package/dist/cjs/grpc/proto/sui/rpc/v2/effects.js.map +0 -1
  670. package/dist/cjs/grpc/proto/sui/rpc/v2/epoch.js.map +0 -1
  671. package/dist/cjs/grpc/proto/sui/rpc/v2/error_reason.js.map +0 -1
  672. package/dist/cjs/grpc/proto/sui/rpc/v2/event.js.map +0 -1
  673. package/dist/cjs/grpc/proto/sui/rpc/v2/executed_transaction.js.map +0 -1
  674. package/dist/cjs/grpc/proto/sui/rpc/v2/execution_status.js.map +0 -1
  675. package/dist/cjs/grpc/proto/sui/rpc/v2/gas_cost_summary.js.map +0 -1
  676. package/dist/cjs/grpc/proto/sui/rpc/v2/input.js.map +0 -1
  677. package/dist/cjs/grpc/proto/sui/rpc/v2/jwk.js.map +0 -1
  678. package/dist/cjs/grpc/proto/sui/rpc/v2/ledger_service.client.js.map +0 -1
  679. package/dist/cjs/grpc/proto/sui/rpc/v2/ledger_service.js.map +0 -1
  680. package/dist/cjs/grpc/proto/sui/rpc/v2/move_package.js.map +0 -1
  681. package/dist/cjs/grpc/proto/sui/rpc/v2/move_package_service.client.js.map +0 -1
  682. package/dist/cjs/grpc/proto/sui/rpc/v2/move_package_service.js.map +0 -1
  683. package/dist/cjs/grpc/proto/sui/rpc/v2/name_service.client.js.map +0 -1
  684. package/dist/cjs/grpc/proto/sui/rpc/v2/name_service.js.map +0 -1
  685. package/dist/cjs/grpc/proto/sui/rpc/v2/object.js.map +0 -1
  686. package/dist/cjs/grpc/proto/sui/rpc/v2/object_reference.js.map +0 -1
  687. package/dist/cjs/grpc/proto/sui/rpc/v2/owner.js.map +0 -1
  688. package/dist/cjs/grpc/proto/sui/rpc/v2/protocol_config.js.map +0 -1
  689. package/dist/cjs/grpc/proto/sui/rpc/v2/signature.js.map +0 -1
  690. package/dist/cjs/grpc/proto/sui/rpc/v2/signature_scheme.js.map +0 -1
  691. package/dist/cjs/grpc/proto/sui/rpc/v2/signature_verification_service.client.js.map +0 -1
  692. package/dist/cjs/grpc/proto/sui/rpc/v2/signature_verification_service.js.map +0 -1
  693. package/dist/cjs/grpc/proto/sui/rpc/v2/state_service.client.js.map +0 -1
  694. package/dist/cjs/grpc/proto/sui/rpc/v2/state_service.js.map +0 -1
  695. package/dist/cjs/grpc/proto/sui/rpc/v2/subscription_service.client.js.map +0 -1
  696. package/dist/cjs/grpc/proto/sui/rpc/v2/subscription_service.js.map +0 -1
  697. package/dist/cjs/grpc/proto/sui/rpc/v2/system_state.js.map +0 -1
  698. package/dist/cjs/grpc/proto/sui/rpc/v2/transaction.js.map +0 -1
  699. package/dist/cjs/grpc/proto/sui/rpc/v2/transaction_execution_service.client.js.map +0 -1
  700. package/dist/cjs/grpc/proto/sui/rpc/v2/transaction_execution_service.js.map +0 -1
  701. package/dist/cjs/index.js.map +0 -1
  702. package/dist/cjs/jsonRpc/client.js.map +0 -1
  703. package/dist/cjs/jsonRpc/core.js.map +0 -1
  704. package/dist/cjs/jsonRpc/errors.js.map +0 -1
  705. package/dist/cjs/jsonRpc/http-transport.js.map +0 -1
  706. package/dist/cjs/jsonRpc/index.js.map +0 -1
  707. package/dist/cjs/jsonRpc/json-rpc-resolver.js.map +0 -1
  708. package/dist/cjs/jsonRpc/rpc-websocket-client.js.map +0 -1
  709. package/dist/cjs/jsonRpc/types/chain.js.map +0 -1
  710. package/dist/cjs/jsonRpc/types/changes.js.map +0 -1
  711. package/dist/cjs/jsonRpc/types/coins.js.map +0 -1
  712. package/dist/cjs/jsonRpc/types/common.js.map +0 -1
  713. package/dist/cjs/jsonRpc/types/generated.js.map +0 -1
  714. package/dist/cjs/jsonRpc/types/index.js.map +0 -1
  715. package/dist/cjs/jsonRpc/types/params.js.map +0 -1
  716. package/dist/cjs/keypairs/ed25519/ed25519-hd-key.js.map +0 -1
  717. package/dist/cjs/keypairs/ed25519/index.js.map +0 -1
  718. package/dist/cjs/keypairs/ed25519/keypair.js.map +0 -1
  719. package/dist/cjs/keypairs/ed25519/publickey.js.map +0 -1
  720. package/dist/cjs/keypairs/index.js.map +0 -1
  721. package/dist/cjs/keypairs/passkey/index.js.map +0 -1
  722. package/dist/cjs/keypairs/passkey/keypair.js.map +0 -1
  723. package/dist/cjs/keypairs/passkey/publickey.js.map +0 -1
  724. package/dist/cjs/keypairs/passkey/types.js.map +0 -1
  725. package/dist/cjs/keypairs/secp256k1/index.js.map +0 -1
  726. package/dist/cjs/keypairs/secp256k1/keypair.js.map +0 -1
  727. package/dist/cjs/keypairs/secp256k1/publickey.js.map +0 -1
  728. package/dist/cjs/keypairs/secp256r1/index.js.map +0 -1
  729. package/dist/cjs/keypairs/secp256r1/keypair.js.map +0 -1
  730. package/dist/cjs/keypairs/secp256r1/publickey.js.map +0 -1
  731. package/dist/cjs/multisig/index.js.map +0 -1
  732. package/dist/cjs/multisig/publickey.js.map +0 -1
  733. package/dist/cjs/multisig/signer.js.map +0 -1
  734. package/dist/cjs/transactions/Arguments.js.map +0 -1
  735. package/dist/cjs/transactions/Commands.js.map +0 -1
  736. package/dist/cjs/transactions/Inputs.js.map +0 -1
  737. package/dist/cjs/transactions/ObjectCache.js.map +0 -1
  738. package/dist/cjs/transactions/Transaction.js.map +0 -1
  739. package/dist/cjs/transactions/TransactionData.js.map +0 -1
  740. package/dist/cjs/transactions/__tests__/Transaction.test.js.map +0 -1
  741. package/dist/cjs/transactions/__tests__/bcs.test.js.map +0 -1
  742. package/dist/cjs/transactions/data/internal.js.map +0 -1
  743. package/dist/cjs/transactions/data/v1.js.map +0 -1
  744. package/dist/cjs/transactions/data/v2.js.map +0 -1
  745. package/dist/cjs/transactions/executor/caching.js.map +0 -1
  746. package/dist/cjs/transactions/executor/parallel.js.map +0 -1
  747. package/dist/cjs/transactions/executor/queue.js.map +0 -1
  748. package/dist/cjs/transactions/executor/serial.js.map +0 -1
  749. package/dist/cjs/transactions/hash.js.map +0 -1
  750. package/dist/cjs/transactions/index.js.map +0 -1
  751. package/dist/cjs/transactions/intents/CoinWithBalance.js.map +0 -1
  752. package/dist/cjs/transactions/object.js.map +0 -1
  753. package/dist/cjs/transactions/plugins/NamedPackagesPlugin.js.map +0 -1
  754. package/dist/cjs/transactions/pure.js.map +0 -1
  755. package/dist/cjs/transactions/resolve.js.map +0 -1
  756. package/dist/cjs/transactions/serializer.js.map +0 -1
  757. package/dist/cjs/transactions/utils.js.map +0 -1
  758. package/dist/cjs/utils/constants.js.map +0 -1
  759. package/dist/cjs/utils/derived-objects.js.map +0 -1
  760. package/dist/cjs/utils/dynamic-fields.js.map +0 -1
  761. package/dist/cjs/utils/format.js.map +0 -1
  762. package/dist/cjs/utils/index.js.map +0 -1
  763. package/dist/cjs/utils/move-registry.js.map +0 -1
  764. package/dist/cjs/utils/sui-types.js.map +0 -1
  765. package/dist/cjs/utils/suins.js.map +0 -1
  766. package/dist/cjs/verify/index.js.map +0 -1
  767. package/dist/cjs/verify/verify.js.map +0 -1
  768. package/dist/cjs/version.js.map +0 -1
  769. package/dist/cjs/w/call/allocation.js.map +0 -1
  770. package/dist/cjs/w/call/arb.js.map +0 -1
  771. package/dist/cjs/w/call/arbitration.js.map +0 -1
  772. package/dist/cjs/w/call/base.js.map +0 -1
  773. package/dist/cjs/w/call/contact.js.map +0 -1
  774. package/dist/cjs/w/call/demand.js.map +0 -1
  775. package/dist/cjs/w/call/entity.js.map +0 -1
  776. package/dist/cjs/w/call/guard-ins.js.map +0 -1
  777. package/dist/cjs/w/call/guard.js.map +0 -1
  778. package/dist/cjs/w/call/index.js.map +0 -1
  779. package/dist/cjs/w/call/machine.js.map +0 -1
  780. package/dist/cjs/w/call/order.js.map +0 -1
  781. package/dist/cjs/w/call/passport.js.map +0 -1
  782. package/dist/cjs/w/call/payment.js.map +0 -1
  783. package/dist/cjs/w/call/permission.js.map +0 -1
  784. package/dist/cjs/w/call/personal.js.map +0 -1
  785. package/dist/cjs/w/call/progress.js.map +0 -1
  786. package/dist/cjs/w/call/proof.js.map +0 -1
  787. package/dist/cjs/w/call/repository.js.map +0 -1
  788. package/dist/cjs/w/call/resource.js.map +0 -1
  789. package/dist/cjs/w/call/reward.js.map +0 -1
  790. package/dist/cjs/w/call/service.js.map +0 -1
  791. package/dist/cjs/w/call/treasury.js.map +0 -1
  792. package/dist/cjs/w/call/util.js.map +0 -1
  793. package/dist/cjs/w/common.js.map +0 -1
  794. package/dist/cjs/w/exception.js.map +0 -1
  795. package/dist/cjs/w/index.js.map +0 -1
  796. package/dist/cjs/w/local/account.js.map +0 -1
  797. package/dist/cjs/w/local/cache.js.map +0 -1
  798. package/dist/cjs/w/local/config.js.map +0 -1
  799. package/dist/cjs/w/local/index.js.map +0 -1
  800. package/dist/cjs/w/local/local.js.map +0 -1
  801. package/dist/cjs/w/local/storage.js.map +0 -1
  802. package/dist/cjs/w/local/token.js.map +0 -1
  803. package/dist/cjs/w/local/util.js.map +0 -1
  804. package/dist/cjs/w/local/wip.js.map +0 -1
  805. package/dist/cjs/w/messenger/crypto.js.map +0 -1
  806. package/dist/cjs/w/messenger/index.js.map +0 -1
  807. package/dist/cjs/w/messenger/messenger-api.js.map +0 -1
  808. package/dist/cjs/w/messenger/messenger-manager.js.map +0 -1
  809. package/dist/cjs/w/messenger/messenger.js.map +0 -1
  810. package/dist/cjs/w/messenger/server.js.map +0 -1
  811. package/dist/cjs/w/messenger/session.js.map +0 -1
  812. package/dist/cjs/w/messenger/storage.js.map +0 -1
  813. package/dist/cjs/w/messenger/templates/wts-html-template.js.map +0 -1
  814. package/dist/cjs/w/messenger/types.js.map +0 -1
  815. package/dist/cjs/w/messenger/utils.js.map +0 -1
  816. package/dist/cjs/w/query/bult-in.js.map +0 -1
  817. package/dist/cjs/w/query/event.js.map +0 -1
  818. package/dist/cjs/w/query/index.js.map +0 -1
  819. package/dist/cjs/w/query/object.js.map +0 -1
  820. package/dist/cjs/w/query/received.js.map +0 -1
  821. package/dist/cjs/w/query/util.js.map +0 -1
  822. package/dist/cjs/w/util.js.map +0 -1
  823. package/dist/esm/bcs/bcs.js.map +0 -1
  824. package/dist/esm/bcs/effects.js.map +0 -1
  825. package/dist/esm/bcs/index.js.map +0 -1
  826. package/dist/esm/bcs/pure.js.map +0 -1
  827. package/dist/esm/bcs/type-tag-serializer.js.map +0 -1
  828. package/dist/esm/bcs/types.js.map +0 -1
  829. package/dist/esm/client/index.js.map +0 -1
  830. package/dist/esm/client/network.js.map +0 -1
  831. package/dist/esm/cryptography/index.js.map +0 -1
  832. package/dist/esm/cryptography/intent.js.map +0 -1
  833. package/dist/esm/cryptography/keypair.js.map +0 -1
  834. package/dist/esm/cryptography/mnemonics.js.map +0 -1
  835. package/dist/esm/cryptography/publickey.js.map +0 -1
  836. package/dist/esm/cryptography/signature-scheme.js.map +0 -1
  837. package/dist/esm/cryptography/signature.js.map +0 -1
  838. package/dist/esm/experimental/cache.js.map +0 -1
  839. package/dist/esm/experimental/client.js.map +0 -1
  840. package/dist/esm/experimental/core.js.map +0 -1
  841. package/dist/esm/experimental/errors.js.map +0 -1
  842. package/dist/esm/experimental/index.js.map +0 -1
  843. package/dist/esm/experimental/persistent-storage.js.map +0 -1
  844. package/dist/esm/experimental/persistent-storage.test.js.map +0 -1
  845. package/dist/esm/experimental/transports/utils.js.map +0 -1
  846. package/dist/esm/experimental/types.js.map +0 -1
  847. package/dist/esm/faucet/faucet.js.map +0 -1
  848. package/dist/esm/faucet/index.js.map +0 -1
  849. package/dist/esm/grpc/client.js.map +0 -1
  850. package/dist/esm/grpc/core.js.map +0 -1
  851. package/dist/esm/grpc/index.js.map +0 -1
  852. package/dist/esm/grpc/proto/google/protobuf/any.js.map +0 -1
  853. package/dist/esm/grpc/proto/google/protobuf/duration.js.map +0 -1
  854. package/dist/esm/grpc/proto/google/protobuf/empty.js.map +0 -1
  855. package/dist/esm/grpc/proto/google/protobuf/field_mask.js.map +0 -1
  856. package/dist/esm/grpc/proto/google/protobuf/struct.js.map +0 -1
  857. package/dist/esm/grpc/proto/google/protobuf/timestamp.js.map +0 -1
  858. package/dist/esm/grpc/proto/google/rpc/error_details.js.map +0 -1
  859. package/dist/esm/grpc/proto/google/rpc/status.js.map +0 -1
  860. package/dist/esm/grpc/proto/sui/rpc/v2/argument.js.map +0 -1
  861. package/dist/esm/grpc/proto/sui/rpc/v2/balance_change.js.map +0 -1
  862. package/dist/esm/grpc/proto/sui/rpc/v2/bcs.js.map +0 -1
  863. package/dist/esm/grpc/proto/sui/rpc/v2/checkpoint.js.map +0 -1
  864. package/dist/esm/grpc/proto/sui/rpc/v2/checkpoint_contents.js.map +0 -1
  865. package/dist/esm/grpc/proto/sui/rpc/v2/checkpoint_summary.js.map +0 -1
  866. package/dist/esm/grpc/proto/sui/rpc/v2/effects.js.map +0 -1
  867. package/dist/esm/grpc/proto/sui/rpc/v2/epoch.js.map +0 -1
  868. package/dist/esm/grpc/proto/sui/rpc/v2/error_reason.js.map +0 -1
  869. package/dist/esm/grpc/proto/sui/rpc/v2/event.js.map +0 -1
  870. package/dist/esm/grpc/proto/sui/rpc/v2/executed_transaction.js.map +0 -1
  871. package/dist/esm/grpc/proto/sui/rpc/v2/execution_status.js.map +0 -1
  872. package/dist/esm/grpc/proto/sui/rpc/v2/gas_cost_summary.js.map +0 -1
  873. package/dist/esm/grpc/proto/sui/rpc/v2/input.js.map +0 -1
  874. package/dist/esm/grpc/proto/sui/rpc/v2/jwk.js.map +0 -1
  875. package/dist/esm/grpc/proto/sui/rpc/v2/ledger_service.client.js.map +0 -1
  876. package/dist/esm/grpc/proto/sui/rpc/v2/ledger_service.js.map +0 -1
  877. package/dist/esm/grpc/proto/sui/rpc/v2/move_package.js.map +0 -1
  878. package/dist/esm/grpc/proto/sui/rpc/v2/move_package_service.client.js.map +0 -1
  879. package/dist/esm/grpc/proto/sui/rpc/v2/move_package_service.js.map +0 -1
  880. package/dist/esm/grpc/proto/sui/rpc/v2/name_service.client.js.map +0 -1
  881. package/dist/esm/grpc/proto/sui/rpc/v2/name_service.js.map +0 -1
  882. package/dist/esm/grpc/proto/sui/rpc/v2/object.js.map +0 -1
  883. package/dist/esm/grpc/proto/sui/rpc/v2/object_reference.js.map +0 -1
  884. package/dist/esm/grpc/proto/sui/rpc/v2/owner.js.map +0 -1
  885. package/dist/esm/grpc/proto/sui/rpc/v2/protocol_config.js.map +0 -1
  886. package/dist/esm/grpc/proto/sui/rpc/v2/signature.js.map +0 -1
  887. package/dist/esm/grpc/proto/sui/rpc/v2/signature_scheme.js.map +0 -1
  888. package/dist/esm/grpc/proto/sui/rpc/v2/signature_verification_service.client.js.map +0 -1
  889. package/dist/esm/grpc/proto/sui/rpc/v2/signature_verification_service.js.map +0 -1
  890. package/dist/esm/grpc/proto/sui/rpc/v2/state_service.client.js.map +0 -1
  891. package/dist/esm/grpc/proto/sui/rpc/v2/state_service.js.map +0 -1
  892. package/dist/esm/grpc/proto/sui/rpc/v2/subscription_service.client.js.map +0 -1
  893. package/dist/esm/grpc/proto/sui/rpc/v2/subscription_service.js.map +0 -1
  894. package/dist/esm/grpc/proto/sui/rpc/v2/system_state.js.map +0 -1
  895. package/dist/esm/grpc/proto/sui/rpc/v2/transaction.js.map +0 -1
  896. package/dist/esm/grpc/proto/sui/rpc/v2/transaction_execution_service.client.js.map +0 -1
  897. package/dist/esm/grpc/proto/sui/rpc/v2/transaction_execution_service.js.map +0 -1
  898. package/dist/esm/index.js.map +0 -1
  899. package/dist/esm/jsonRpc/client.js.map +0 -1
  900. package/dist/esm/jsonRpc/core.js.map +0 -1
  901. package/dist/esm/jsonRpc/errors.js.map +0 -1
  902. package/dist/esm/jsonRpc/http-transport.js.map +0 -1
  903. package/dist/esm/jsonRpc/index.js.map +0 -1
  904. package/dist/esm/jsonRpc/json-rpc-resolver.js.map +0 -1
  905. package/dist/esm/jsonRpc/rpc-websocket-client.js.map +0 -1
  906. package/dist/esm/jsonRpc/types/chain.js.map +0 -1
  907. package/dist/esm/jsonRpc/types/changes.js.map +0 -1
  908. package/dist/esm/jsonRpc/types/coins.js.map +0 -1
  909. package/dist/esm/jsonRpc/types/common.js.map +0 -1
  910. package/dist/esm/jsonRpc/types/generated.js.map +0 -1
  911. package/dist/esm/jsonRpc/types/index.js.map +0 -1
  912. package/dist/esm/jsonRpc/types/params.js.map +0 -1
  913. package/dist/esm/keypairs/ed25519/ed25519-hd-key.js.map +0 -1
  914. package/dist/esm/keypairs/ed25519/index.js.map +0 -1
  915. package/dist/esm/keypairs/ed25519/keypair.js.map +0 -1
  916. package/dist/esm/keypairs/ed25519/publickey.js.map +0 -1
  917. package/dist/esm/keypairs/index.js.map +0 -1
  918. package/dist/esm/keypairs/passkey/index.js.map +0 -1
  919. package/dist/esm/keypairs/passkey/keypair.js.map +0 -1
  920. package/dist/esm/keypairs/passkey/publickey.js.map +0 -1
  921. package/dist/esm/keypairs/passkey/types.js.map +0 -1
  922. package/dist/esm/keypairs/secp256k1/index.js.map +0 -1
  923. package/dist/esm/keypairs/secp256k1/keypair.js.map +0 -1
  924. package/dist/esm/keypairs/secp256k1/publickey.js.map +0 -1
  925. package/dist/esm/keypairs/secp256r1/index.js.map +0 -1
  926. package/dist/esm/keypairs/secp256r1/keypair.js.map +0 -1
  927. package/dist/esm/keypairs/secp256r1/publickey.js.map +0 -1
  928. package/dist/esm/multisig/index.js.map +0 -1
  929. package/dist/esm/multisig/publickey.js.map +0 -1
  930. package/dist/esm/multisig/signer.js.map +0 -1
  931. package/dist/esm/transactions/Arguments.js.map +0 -1
  932. package/dist/esm/transactions/Commands.js.map +0 -1
  933. package/dist/esm/transactions/Inputs.js.map +0 -1
  934. package/dist/esm/transactions/ObjectCache.js.map +0 -1
  935. package/dist/esm/transactions/Transaction.js.map +0 -1
  936. package/dist/esm/transactions/TransactionData.js.map +0 -1
  937. package/dist/esm/transactions/__tests__/Transaction.test.js.map +0 -1
  938. package/dist/esm/transactions/__tests__/bcs.test.js.map +0 -1
  939. package/dist/esm/transactions/data/internal.js.map +0 -1
  940. package/dist/esm/transactions/data/v1.js.map +0 -1
  941. package/dist/esm/transactions/data/v2.js.map +0 -1
  942. package/dist/esm/transactions/executor/caching.js.map +0 -1
  943. package/dist/esm/transactions/executor/parallel.js.map +0 -1
  944. package/dist/esm/transactions/executor/queue.js.map +0 -1
  945. package/dist/esm/transactions/executor/serial.js.map +0 -1
  946. package/dist/esm/transactions/hash.js.map +0 -1
  947. package/dist/esm/transactions/index.js.map +0 -1
  948. package/dist/esm/transactions/intents/CoinWithBalance.js.map +0 -1
  949. package/dist/esm/transactions/object.js.map +0 -1
  950. package/dist/esm/transactions/plugins/NamedPackagesPlugin.js.map +0 -1
  951. package/dist/esm/transactions/pure.js.map +0 -1
  952. package/dist/esm/transactions/resolve.js.map +0 -1
  953. package/dist/esm/transactions/serializer.js.map +0 -1
  954. package/dist/esm/transactions/utils.js.map +0 -1
  955. package/dist/esm/utils/constants.js.map +0 -1
  956. package/dist/esm/utils/derived-objects.js.map +0 -1
  957. package/dist/esm/utils/dynamic-fields.js.map +0 -1
  958. package/dist/esm/utils/format.js.map +0 -1
  959. package/dist/esm/utils/index.js.map +0 -1
  960. package/dist/esm/utils/move-registry.js.map +0 -1
  961. package/dist/esm/utils/sui-types.js.map +0 -1
  962. package/dist/esm/utils/suins.js.map +0 -1
  963. package/dist/esm/verify/index.js.map +0 -1
  964. package/dist/esm/verify/verify.js.map +0 -1
  965. package/dist/esm/version.js.map +0 -1
  966. package/dist/esm/w/call/allocation.js.map +0 -1
  967. package/dist/esm/w/call/arb.js.map +0 -1
  968. package/dist/esm/w/call/arbitration.js.map +0 -1
  969. package/dist/esm/w/call/base.js.map +0 -1
  970. package/dist/esm/w/call/contact.js.map +0 -1
  971. package/dist/esm/w/call/demand.js.map +0 -1
  972. package/dist/esm/w/call/entity.js.map +0 -1
  973. package/dist/esm/w/call/guard-ins.js.map +0 -1
  974. package/dist/esm/w/call/guard.js.map +0 -1
  975. package/dist/esm/w/call/index.js.map +0 -1
  976. package/dist/esm/w/call/machine.js.map +0 -1
  977. package/dist/esm/w/call/order.js.map +0 -1
  978. package/dist/esm/w/call/passport.js.map +0 -1
  979. package/dist/esm/w/call/payment.js.map +0 -1
  980. package/dist/esm/w/call/permission.js.map +0 -1
  981. package/dist/esm/w/call/personal.js.map +0 -1
  982. package/dist/esm/w/call/progress.js.map +0 -1
  983. package/dist/esm/w/call/proof.js.map +0 -1
  984. package/dist/esm/w/call/repository.js.map +0 -1
  985. package/dist/esm/w/call/resource.js.map +0 -1
  986. package/dist/esm/w/call/reward.js.map +0 -1
  987. package/dist/esm/w/call/service.js.map +0 -1
  988. package/dist/esm/w/call/treasury.js.map +0 -1
  989. package/dist/esm/w/call/util.js.map +0 -1
  990. package/dist/esm/w/common.js.map +0 -1
  991. package/dist/esm/w/exception.js.map +0 -1
  992. package/dist/esm/w/index.js.map +0 -1
  993. package/dist/esm/w/local/account.js.map +0 -1
  994. package/dist/esm/w/local/cache.js.map +0 -1
  995. package/dist/esm/w/local/config.js.map +0 -1
  996. package/dist/esm/w/local/index.js.map +0 -1
  997. package/dist/esm/w/local/local.js.map +0 -1
  998. package/dist/esm/w/local/storage.js.map +0 -1
  999. package/dist/esm/w/local/token.js.map +0 -1
  1000. package/dist/esm/w/local/util.js.map +0 -1
  1001. package/dist/esm/w/local/wip.js.map +0 -1
  1002. package/dist/esm/w/messenger/crypto.js.map +0 -1
  1003. package/dist/esm/w/messenger/index.js.map +0 -1
  1004. package/dist/esm/w/messenger/messenger-api.js.map +0 -1
  1005. package/dist/esm/w/messenger/messenger-manager.js.map +0 -1
  1006. package/dist/esm/w/messenger/messenger.js.map +0 -1
  1007. package/dist/esm/w/messenger/server.js.map +0 -1
  1008. package/dist/esm/w/messenger/session.js.map +0 -1
  1009. package/dist/esm/w/messenger/storage.js.map +0 -1
  1010. package/dist/esm/w/messenger/templates/wts-html-template.js.map +0 -1
  1011. package/dist/esm/w/messenger/types.js.map +0 -1
  1012. package/dist/esm/w/messenger/utils.js.map +0 -1
  1013. package/dist/esm/w/query/bult-in.js.map +0 -1
  1014. package/dist/esm/w/query/event.js.map +0 -1
  1015. package/dist/esm/w/query/index.js.map +0 -1
  1016. package/dist/esm/w/query/object.js.map +0 -1
  1017. package/dist/esm/w/query/received.js.map +0 -1
  1018. package/dist/esm/w/query/util.js.map +0 -1
  1019. package/dist/esm/w/util.js.map +0 -1
@@ -1,1439 +1 @@
1
- // Copyright (c) Wowok.
2
- // SPDX-License-Identifier: Apache-2.0
3
- /**
4
- * Messenger 核心模块
5
- *
6
- * 提供完整的端到端加密消息功能:
7
- * 1. 发送加密消息(集成 Merkle Tree 时序证明)
8
- * 2. 接收并解密消息
9
- * 3. 链上证明提交(使用 proof.ts)
10
- * 4. 会话状态同步
11
- *
12
- * 三重信任模型:
13
- * - 身份信任:wowok 账户 Ed25519 签名
14
- * - 加密信任:Signal Protocol 双棘轮
15
- * - 时序信任:Merkle Tree + 服务器签名 + 链上证明
16
- */
17
- import { createHash } from "crypto";
18
- import * as fs from "fs";
19
- import * as path from "path";
20
- // eslint-disable-next-line import/no-cycle
21
- import { MessengerSession, DecryptionEngine } from "./session.js";
22
- import { MessengerServerClient } from "./server.js";
23
- import { MessageStorage, SessionStateStorage } from "./storage.js";
24
- import { hashPlaintext, verifyMessage, bytesToBase64 } from "./crypto.js";
25
- import { canonicalizeJson } from "./utils.js";
26
- import { DEFAULT_MESSENGER_CONFIG, MessengerError, MessengerErrorCode, MessageDirection, MessageStatus, WTS_FILE_BYTES_LIMIT, NORMAL_MESSAGE_BYTES_LIMIT, CHAIN_PROOF_TYPE, } from "./types.js";
27
- import { isValidWowAddress } from "../../utils/sui-types.js";
28
- // 动态获取 Account 实例的辅助函数
29
- async function getAccount() {
30
- // eslint-disable-next-line import/no-cycle
31
- const { Account } = await import("../local/account.js");
32
- return Account.Instance();
33
- }
34
- export class Messenger {
35
- session;
36
- serverClient;
37
- config;
38
- userAddress = null;
39
- onMessageCallback = null;
40
- pollingTimer = null;
41
- messageConsecutiveEmptyPulls = 0;
42
- prekeyConsecutiveOkCount = 0;
43
- currentMessageInterval;
44
- isPollingRunning = false;
45
- messageStorage;
46
- sessionStateStorage;
47
- decryptionEngine;
48
- // 【新增】等待解密的消息池(用于 Skip Keys 机制)
49
- waitingMessages = new Map();
50
- // 【新增】解密失败的消息(用于用户决策重发)
51
- failedMessages = new Map();
52
- // 【新增】重试计数器(3秒×3次机制)
53
- waitingMessageRetries = new Map();
54
- constructor(userAddress, config) {
55
- this.userAddress = userAddress;
56
- this.config = { ...DEFAULT_MESSENGER_CONFIG, ...config };
57
- this.session = new MessengerSession(userAddress, this.config);
58
- this.serverClient = new MessengerServerClient(this.config);
59
- this.messageStorage = new MessageStorage(userAddress);
60
- this.sessionStateStorage = new SessionStateStorage(userAddress);
61
- this.decryptionEngine = new DecryptionEngine(this.session["store"]); // 使用 session 的 store
62
- this.currentMessageInterval =
63
- this.config.message_poll_default_interval_ms ?? 6 * 60 * 1000;
64
- }
65
- /**
66
- * 获取用户地址
67
- * @returns 用户地址
68
- */
69
- getUserAddress() {
70
- if (!this.userAddress) {
71
- throw new MessengerError(MessengerErrorCode.IDENTITY_NOT_FOUND, "User address not set");
72
- }
73
- return this.userAddress;
74
- }
75
- /**
76
- * 获取用户公钥
77
- * @returns 公钥(带标志位)
78
- */
79
- async getPublicKey() {
80
- if (!this.userAddress) {
81
- throw new MessengerError(MessengerErrorCode.IDENTITY_NOT_FOUND, "User address not set");
82
- }
83
- const account = await (await getAccount()).get(this.userAddress, false);
84
- return account?.pubkey || "";
85
- }
86
- /**
87
- * 验证Guard消息格式
88
- * @param guardAddress Guard地址
89
- * @param passportAddress Passport地址
90
- * @returns 是否为有效的Guard消息
91
- */
92
- isValidGuardMessage(guardAddress, passportAddress) {
93
- return Boolean(guardAddress &&
94
- passportAddress &&
95
- isValidWowAddress(guardAddress) &&
96
- isValidWowAddress(passportAddress));
97
- }
98
- /**
99
- * 生成签名参数
100
- * 用于需要签名验证的 API 调用
101
- */
102
- async generateSignatureParams(operation) {
103
- if (!this.userAddress) {
104
- throw new MessengerError(MessengerErrorCode.IDENTITY_NOT_FOUND, "User address not set");
105
- }
106
- const account = await (await getAccount()).get(this.userAddress, false);
107
- if (!account?.secret) {
108
- throw new MessengerError(MessengerErrorCode.IDENTITY_NOT_FOUND, `Account not found or no secret key for ${this.userAddress}`);
109
- }
110
- const { Ed25519Keypair } = await import("../../keypairs/ed25519/index.js");
111
- const keypair = Ed25519Keypair.fromSecretKey(account.secret);
112
- const publicKey = keypair.getPublicKey();
113
- const publicKeyWithFlag = publicKey.toWPublicKey();
114
- const timestamp = Date.now(); //@ 使用ms时间戳
115
- const nonce = this.generateNonce();
116
- const message = `${operation}:${publicKeyWithFlag}:${timestamp}:${nonce}`;
117
- const signature = await keypair.sign(new TextEncoder().encode(message));
118
- return {
119
- signatureScheme: "ED25519",
120
- signature: Buffer.from(signature).toString("base64"),
121
- timestamp,
122
- nonce,
123
- };
124
- }
125
- /**
126
- * 生成随机 nonce
127
- */
128
- generateNonce() {
129
- const array = new Uint8Array(16);
130
- crypto.getRandomValues(array);
131
- return Array.from(array, (b) => b.toString(16).padStart(2, "0")).join("");
132
- }
133
- /**
134
- * 初始化 Messenger
135
- * 1. 确保本地身份
136
- * 2. 注册设备到服务器
137
- * 3. 上传预密钥
138
- * 4. 检查预密钥状态(如低于阈值则补充)
139
- * 5. 启动合并的polling timer
140
- */
141
- async initialize() {
142
- if (!this.userAddress) {
143
- throw new MessengerError(MessengerErrorCode.IDENTITY_NOT_FOUND, "User address not set");
144
- }
145
- // 确保身份
146
- await this.session.ensureIdentity(this.userAddress);
147
- // 【更新】每次都注册/更新设备!
148
- // Signal Protocol 最佳实践:每次初始化都可以更新预键
149
- // - 已有会话不受影响(使用双棘轮动态密钥)
150
- // - 新会话使用新的预键(确保本地和服务器一致)
151
- //console.log(`[Messenger] Registering/updating device...`);
152
- await this.session.registerDevice(this.userAddress);
153
- await this.session.ensurePreKeys(this.userAddress);
154
- // 初始化时检查预密钥状态
155
- await this.checkAndRefillPrekeys();
156
- // 启动合并的polling timer
157
- this.startPollingTimer();
158
- }
159
- /**
160
- * 检查并补充预密钥
161
- *
162
- * 逻辑:如果服务器预密钥未满,自动补充到最大容量
163
- */
164
- async checkAndRefillPrekeys() {
165
- if (!this.userAddress)
166
- return;
167
- // 直接调用 ensurePreKeys,它会查询服务器状态并按需补充
168
- await this.session.ensurePreKeys(this.userAddress, false);
169
- }
170
- /**
171
- * 启动合并的polling timer
172
- */
173
- startPollingTimer() {
174
- if (this.pollingTimer) {
175
- clearTimeout(this.pollingTimer);
176
- }
177
- this.isPollingRunning = true;
178
- this.scheduleNextPoll();
179
- }
180
- /**
181
- * 停止polling timer
182
- */
183
- stopPollingTimer() {
184
- this.isPollingRunning = false;
185
- if (this.pollingTimer) {
186
- clearTimeout(this.pollingTimer);
187
- this.pollingTimer = null;
188
- }
189
- }
190
- /**
191
- * 安排下一次poll
192
- */
193
- scheduleNextPoll() {
194
- if (!this.isPollingRunning)
195
- return;
196
- const interval = this.getNextPollInterval();
197
- this.pollingTimer = setTimeout(() => {
198
- this.poll()
199
- .catch((error) => {
200
- console.error("[Polling] Error during poll:", error);
201
- })
202
- .finally(() => {
203
- this.scheduleNextPoll();
204
- });
205
- }, interval);
206
- }
207
- /**
208
- * 获取下次poll的间隔时间
209
- * 【优化】增加3秒快速模式(有待解密消息时)
210
- */
211
- getNextPollInterval() {
212
- // 如果有等待解密的消息,使用3秒快速轮询
213
- if (this.waitingMessages.size > 0) {
214
- return this.config.message_poll_waiting_interval_ms ?? 3 * 1000;
215
- }
216
- return this.currentMessageInterval;
217
- }
218
- /**
219
- * 执行一次poll(拉取消息和检查prekey状态)
220
- */
221
- async poll() {
222
- if (!this.userAddress)
223
- return;
224
- try {
225
- const response = await this.pullMessages();
226
- // 处理消息
227
- if (response.messages.length > 0) {
228
- this.messageConsecutiveEmptyPulls = 0;
229
- this.currentMessageInterval =
230
- this.config.message_poll_fast_interval_ms ?? 6 * 1000;
231
- if (this.onMessageCallback) {
232
- this.onMessageCallback(response.messages);
233
- }
234
- }
235
- else {
236
- this.messageConsecutiveEmptyPulls++;
237
- if (this.messageConsecutiveEmptyPulls >=
238
- (this.config.message_poll_consecutive_empty_limit ?? 3)) {
239
- this.currentMessageInterval =
240
- this.config.message_poll_default_interval_ms ??
241
- 6 * 60 * 1000;
242
- this.messageConsecutiveEmptyPulls = 0;
243
- }
244
- }
245
- // 处理prekey状态
246
- if (response.prekey_status) {
247
- const prekeyStatus = response.prekey_status;
248
- if (prekeyStatus.shouldRefill) {
249
- this.prekeyConsecutiveOkCount = 0;
250
- await this.checkAndRefillPrekeys();
251
- }
252
- else {
253
- this.prekeyConsecutiveOkCount++;
254
- if (this.prekeyConsecutiveOkCount >=
255
- (this.config.prekey_poll_consecutive_ok_limit ?? 3)) {
256
- this.prekeyConsecutiveOkCount = 0;
257
- }
258
- }
259
- }
260
- }
261
- catch (error) {
262
- console.error("[Polling] Poll error:", error);
263
- }
264
- }
265
- /**
266
- * 触发快速poll(发送消息后调用)
267
- */
268
- triggerFastPoll() {
269
- this.currentMessageInterval =
270
- this.config.message_poll_fast_interval_ms ?? 6 * 1000;
271
- this.messageConsecutiveEmptyPulls = 0;
272
- if (this.isPollingRunning) {
273
- if (this.pollingTimer) {
274
- clearTimeout(this.pollingTimer);
275
- }
276
- this.scheduleNextPoll();
277
- }
278
- }
279
- /**
280
- * 发送加密消息
281
- *
282
- * 流程:
283
- * 1. 使用 Signal Protocol 加密消息
284
- * 2. 发送到服务器
285
- * 3. 接收服务器返回的 Merkle 证明数据
286
- * 4. 本地存储消息
287
- */
288
- async sendMessage(recipientAddress, plaintext, options) {
289
- if (!this.userAddress) {
290
- throw new MessengerError(MessengerErrorCode.IDENTITY_NOT_FOUND, "User address not set");
291
- }
292
- const createdAt = Date.now();
293
- const timestamp = Date.now();
294
- const nonce = this.generateNonce();
295
- // 检查普通消息大小限制(10KB)
296
- const plaintextBytes = new TextEncoder().encode(plaintext).length;
297
- if (plaintextBytes > NORMAL_MESSAGE_BYTES_LIMIT) {
298
- throw new MessengerError(MessengerErrorCode.INVALID_INPUT, `Message size (${plaintextBytes} bytes) exceeds maximum allowed size (${NORMAL_MESSAGE_BYTES_LIMIT} bytes). Consider using sendZipFile for large content.`);
299
- }
300
- // 【关键修复】发送前先拉取对方发送的最新消息
301
- // 确保 lastReceivedLeafIndex 包含所有已解密的消息
302
- await this.pullMessages();
303
- // 【新增】获取最后收到的消息序号(用于消息确认)
304
- const lastReceivedLeafIndex = this.messageStorage.getLastReceivedLeafIndex(this.userAddress, recipientAddress);
305
- // 1. 加密消息(明文就是原始消息内容)
306
- const encrypted = await this.session.encryptMessage(this.userAddress, recipientAddress, plaintext);
307
- const ciphertext = Buffer.from(new Uint8Array(encrypted.body)).toString("base64");
308
- // 2. 计算明文哈希(用于 Merkle Tree 证明)
309
- // 【更新】包含 lastReceivedLeafIndex 在哈希计算中
310
- const plaintextHash = hashPlaintext(plaintext, createdAt, options?.guardAddress, options?.passportAddress, lastReceivedLeafIndex);
311
- // 3. 签名消息
312
- // 注意: guard_address 和 passport_address 始终包含在签名中(可能为空字符串),防止参数篡改
313
- const account = await (await getAccount()).get(this.userAddress, false);
314
- if (!account) {
315
- throw new MessengerError(MessengerErrorCode.IDENTITY_NOT_FOUND, "User account not found");
316
- }
317
- const publicKey = account.pubkey;
318
- const guardAddr = options?.guardAddress || "";
319
- const passportAddr = options?.passportAddress || "";
320
- // 统一发送模式(合并 send 和 send_force)
321
- // 统一签名格式: send_message:{sender}:{recipient}:{guard_address}:{passport_address}:{plaintext_hash}:{last_received_leaf_index}:{public_key}:{timestamp}:{nonce}:{force}
322
- const lastReceivedStr = lastReceivedLeafIndex >= 0 ? lastReceivedLeafIndex.toString() : "";
323
- const forceStr = options?.force ? "true" : "false";
324
- const signMessage = `send_message:${this.userAddress}:${recipientAddress}:${guardAddr}:${passportAddr}:${plaintextHash}:${lastReceivedStr}:${publicKey}:${timestamp}:${nonce}:${forceStr}`;
325
- const signResult = await (await getAccount()).signData(this.userAddress, signMessage);
326
- const signatureBuffer = Buffer.from(signResult.signature.slice(2), "hex");
327
- const signatureBase64 = bytesToBase64(new Uint8Array(signatureBuffer));
328
- // 使用统一的 sendMessage API
329
- const response = await this.serverClient.sendMessage({
330
- sender: signResult.publicKey,
331
- recipient: recipientAddress,
332
- ciphertext,
333
- plaintextHash,
334
- clientTimestamp: createdAt,
335
- msgType: encrypted.type,
336
- signatureScheme: "ED25519",
337
- signature: signatureBase64,
338
- timestamp,
339
- nonce,
340
- guardAddress: options?.guardAddress,
341
- passportAddress: options?.passportAddress,
342
- force: options?.force,
343
- // 【修复】只有当 lastReceivedLeafIndex >= 0 时才发送,否则发送 undefined
344
- lastReceivedLeafIndex: lastReceivedLeafIndex >= 0
345
- ? lastReceivedLeafIndex
346
- : undefined,
347
- });
348
- // 4. 保存到本地存储
349
- const message = {
350
- messageId: response.messageId,
351
- fromAddress: this.userAddress,
352
- toAddress: recipientAddress,
353
- plaintextHash,
354
- plaintext,
355
- guardAddress: options?.guardAddress,
356
- passportAddress: options?.passportAddress,
357
- lastReceivedLeafIndex, // 【新增】保存消息确认字段
358
- direction: MessageDirection.SENT,
359
- status: response.status === "confirmed"
360
- ? MessageStatus.CONFIRMED
361
- : MessageStatus.PENDING,
362
- msgType: encrypted.type,
363
- createdAt,
364
- };
365
- if (response.merkleData) {
366
- message.leafIndex = response.merkleData.leafIndex;
367
- message.prevRoot = response.merkleData.prevRoot;
368
- message.newRoot = response.merkleData.newRoot;
369
- message.serverSignature = response.merkleData.serverSignature;
370
- message.serverTimestamp = response.merkleData.serverTimestamp;
371
- message.serverPublicKey = response.merkleData.serverPublicKey;
372
- // 更新会话状态
373
- this.sessionStateStorage.updateSessionState(this.userAddress, recipientAddress, {
374
- currentRoot: response.merkleData.newRoot,
375
- prevRoot: response.merkleData.prevRoot,
376
- lastLeafIndex: response.merkleData.leafIndex,
377
- lastSyncAt: Date.now(),
378
- });
379
- }
380
- this.messageStorage.saveMessage(message);
381
- // 方案B:处理服务器返回的其他已验证消息的 Merkle 数据
382
- // 这些消息可能之前因为发送方离线而没有收到 Merkle 数据
383
- if (response.pendingMerkleData) {
384
- for (const [msgId, merkleData] of Object.entries(response.pendingMerkleData)) {
385
- // 检查本地是否已有该消息
386
- const existingMsg = this.messageStorage.getMessage(msgId);
387
- if (existingMsg &&
388
- existingMsg.status === MessageStatus.PENDING) {
389
- // 更新消息的 Merkle 数据
390
- this.messageStorage.updateMessageStatus(msgId, MessageStatus.CONFIRMED, {
391
- leafIndex: merkleData.leafIndex,
392
- newRoot: merkleData.newRoot,
393
- serverSignature: merkleData.serverSignature,
394
- serverTimestamp: merkleData.serverTimestamp,
395
- serverPublicKey: merkleData.serverPublicKey,
396
- });
397
- /*console.log(
398
- `Updated pending message ${msgId} with merkle data from pendingMerkleData`,
399
- );*/
400
- }
401
- }
402
- }
403
- this.triggerFastPoll();
404
- return {
405
- messageId: response.messageId,
406
- status: message.status,
407
- merkleData: response.merkleData,
408
- guardList: response.guard_list,
409
- lastReceivedLeafIndex: lastReceivedLeafIndex >= 0 ? lastReceivedLeafIndex : undefined,
410
- };
411
- }
412
- /**
413
- * 拉取消息
414
- *
415
- * 流程:
416
- * 1. 从服务器拉取消息
417
- * 2. 解密消息(Signal Protocol)
418
- * 3. 验证 Merkle 证明
419
- * 4. 本地存储并确认消息
420
- */
421
- async pullMessages(limit) {
422
- if (!this.userAddress) {
423
- throw new MessengerError(MessengerErrorCode.IDENTITY_NOT_FOUND, "User address not set");
424
- }
425
- // 1. 生成签名参数
426
- // 签名格式: fetch_messages:{address}:{limit}:{timestamp}:{nonce}
427
- const timestamp = Date.now(); //@ 使用ms时间戳
428
- const nonce = this.generateNonce();
429
- const message = `fetch_messages:${this.userAddress}:${limit || 100}:${timestamp}:${nonce}`;
430
- const account = await (await getAccount()).get(this.userAddress, false);
431
- const publicKey = account?.pubkey || "";
432
- const signResult = await (await getAccount()).signData(this.userAddress, message);
433
- const signature = Buffer.from(signResult.signature.slice(2), "hex");
434
- const signatureParams = {
435
- signatureScheme: "ED25519",
436
- signature: bytesToBase64(signature),
437
- timestamp,
438
- nonce,
439
- };
440
- // 2. 拉取消息(带签名验证)
441
- const response = await this.serverClient.pullMessages(this.userAddress, publicKey, signatureParams, limit);
442
- /*console.log(`[Messenger] 服务器返回 ${response.messages.length} 条消息`);
443
- if (response.messages.length > 0) {
444
- console.log(`[Messenger] 消息 IDs: ${response.messages.map(m => m.id).join(', ')}`);
445
- }*/
446
- if (response.messages.length === 0) {
447
- return {
448
- messages: [],
449
- prekey_status: response.prekey_status,
450
- };
451
- }
452
- const decryptedMessages = [];
453
- const acknowledgedIds = [];
454
- // 按 clientTimestamp 排序消息(发送方本地时间)
455
- const sortedMessages = [...response.messages].sort(function (a, b) {
456
- return (a.clientTimestamp || 0) - (b.clientTimestamp || 0);
457
- });
458
- // 【优化】首先尝试处理 waitingMessages 池中的消息
459
- await this.processWaitingMessages(decryptedMessages, acknowledgedIds);
460
- // 处理新拉取的消息(已排序)
461
- for (const serverMsg of sortedMessages) {
462
- // 检查是否已在 waitingMessages 池中
463
- if (this.waitingMessages.has(serverMsg.id)) {
464
- acknowledgedIds.push(serverMsg.id);
465
- continue;
466
- }
467
- // 检查是否已在 failedMessages 中
468
- if (this.failedMessages.has(serverMsg.id)) {
469
- acknowledgedIds.push(serverMsg.id);
470
- continue;
471
- }
472
- // 检查消息是否已经在本地存储
473
- const existingMessage = this.messageStorage.getMessage(serverMsg.id);
474
- if (existingMessage) {
475
- // 消息已存在,直接确认
476
- acknowledgedIds.push(serverMsg.id);
477
- continue;
478
- }
479
- // 尝试解密消息
480
- const decryptResult = await this.tryDecryptMessage(serverMsg);
481
- if (decryptResult.success &&
482
- decryptResult.message &&
483
- decryptResult.decryptedData) {
484
- // 解密成功,保存并添加到结果
485
- this.messageStorage.saveMessage(decryptResult.message);
486
- decryptedMessages.push(decryptResult.decryptedData);
487
- acknowledgedIds.push(serverMsg.id);
488
- // 从 waitingMessages 中移除(如果存在)
489
- this.waitingMessages.delete(serverMsg.id);
490
- }
491
- else if (decryptResult.shouldRetry) {
492
- // 需要重试(Skip Keys 机制),加入等待池
493
- console.warn(`[Messenger] 消息 ${serverMsg.id} 解密失败,加入等待池: ${decryptResult.error}`);
494
- this.waitingMessages.set(serverMsg.id, serverMsg);
495
- // 不解密成功,不加入 acknowledgedIds,下次继续尝试
496
- }
497
- else {
498
- // 永久失败,保存失败状态
499
- console.error(`[Messenger] 消息 ${serverMsg.id} 解密永久失败: ${decryptResult.error}`);
500
- this.failedMessages.set(serverMsg.id, {
501
- message: serverMsg,
502
- error: decryptResult.error || "Unknown error",
503
- });
504
- // 保存失败状态到存储
505
- await this.saveFailedMessage(serverMsg, decryptResult.error || "Unknown error");
506
- acknowledgedIds.push(serverMsg.id);
507
- }
508
- }
509
- // 【优化】重新调度轮询(如果有等待消息,会切换到3秒快速模式)
510
- if (this.waitingMessages.size > 0 && this.isPollingRunning) {
511
- this.reschedulePolling();
512
- }
513
- // 5. 确认已处理的消息(带签名)
514
- if (acknowledgedIds.length > 0 && this.userAddress) {
515
- const ackTimestamp = Date.now(); //@ 使用ms时间戳
516
- const ackNonce = this.generateNonce();
517
- // 签名消息格式: ack_messages:{user}:{message_ids}:{public_key}:{timestamp}:{nonce}
518
- const account = await (await getAccount()).get(this.userAddress, false);
519
- if (account?.pubkey) {
520
- const ackMessage = `ack_messages:${this.userAddress}:${acknowledgedIds.join(",")}:${account.pubkey}:${ackTimestamp}:${ackNonce}`;
521
- const signResult = await (await getAccount()).signData(this.userAddress, ackMessage);
522
- const signatureBuffer = Buffer.from(signResult.signature.slice(2), "hex");
523
- const signatureBase64 = bytesToBase64(new Uint8Array(signatureBuffer));
524
- await this.serverClient.acknowledgeMessages(acknowledgedIds, signResult.publicKey, {
525
- publicKey: signResult.publicKey,
526
- signatureScheme: "ED25519",
527
- signature: signatureBase64,
528
- timestamp: ackTimestamp,
529
- nonce: ackNonce,
530
- });
531
- }
532
- }
533
- // 6. 补充预密钥(poll方法会根据prekey_status来决定是否补充)
534
- return {
535
- messages: decryptedMessages,
536
- prekey_status: response.prekey_status,
537
- };
538
- }
539
- /**
540
- * 获取最后发送的消息序号
541
- * @param peerAddress 对方地址
542
- * @returns 最后发送的消息 leafIndex,如果没有发送过返回 -1
543
- */
544
- getLastSentLeafIndex(peerAddress) {
545
- if (!this.userAddress)
546
- return -1;
547
- const messages = this.messageStorage.getMessagesBySession(this.userAddress, peerAddress);
548
- const sentMessages = messages.filter((m) => m.direction === MessageDirection.SENT &&
549
- m.leafIndex !== undefined);
550
- if (sentMessages.length === 0)
551
- return -1;
552
- return Math.max(...sentMessages.map((m) => m.leafIndex));
553
- }
554
- /**
555
- * 获取会话历史消息
556
- */
557
- getSessionMessages(peerAddress) {
558
- if (!this.userAddress) {
559
- return [];
560
- }
561
- return this.messageStorage.getMessagesBySession(this.userAddress, peerAddress);
562
- }
563
- /**
564
- * 获取会话当前状态
565
- */
566
- getSessionState(peerAddress) {
567
- if (!this.userAddress) {
568
- return undefined;
569
- }
570
- return this.sessionStateStorage.getSessionState(this.userAddress, peerAddress);
571
- }
572
- /**
573
- * 提交链上证明
574
- *
575
- * 使用 proof.ts 将 Merkle Root 提交到链上,获得时间证明
576
- *
577
- * @param env CallEnv 环境
578
- * @param peerAddress 对方地址
579
- * @param description 证明描述
580
- */
581
- async submitChainProof(env, peerAddress, description) {
582
- if (!this.userAddress) {
583
- throw new MessengerError(MessengerErrorCode.IDENTITY_NOT_FOUND, "User address not set");
584
- }
585
- // 获取当前会话状态
586
- const sessionState = this.sessionStateStorage.getSessionState(this.userAddress, peerAddress);
587
- if (!sessionState || !sessionState.currentRoot) {
588
- throw new MessengerError(MessengerErrorCode.SESSION_NOT_ESTABLISHED, "No session state found");
589
- }
590
- // 从会话消息中获取服务器公钥和签名
591
- const messages = this.messageStorage.getMessagesBySession(this.userAddress, peerAddress);
592
- const lastMessage = messages[messages.length - 1];
593
- if (!lastMessage ||
594
- !lastMessage.serverPublicKey ||
595
- !lastMessage.serverSignature) {
596
- throw new MessengerError(MessengerErrorCode.INVALID_PROOF, "No temporal proof (missing server public key or signature), cannot submit Proof to WoWok blockchain");
597
- }
598
- const serverPubKey = lastMessage.serverPublicKey;
599
- const serverSignature = lastMessage.serverSignature;
600
- // 构造证明数据
601
- const proofData = {
602
- sessionId: sessionState.sessionId,
603
- merkleRoot: sessionState.currentRoot,
604
- messageCount: sessionState.messageCount,
605
- timestamp: Date.now(),
606
- };
607
- // 使用 CallProof 提交到链上
608
- const { CallProof } = await import("../call/proof.js");
609
- const callProof = new CallProof({
610
- proof: JSON.stringify(proofData),
611
- server_pubkey: serverPubKey,
612
- server_signature: serverSignature,
613
- proof_type: CHAIN_PROOF_TYPE, // 1 = Messenger Session Proof
614
- description: description ||
615
- `Messenger session proof for ${this.userAddress} <-> ${peerAddress}`,
616
- item_count: sessionState.messageCount,
617
- about_address: sessionState.sessionId,
618
- });
619
- const result = await callProof.call(env);
620
- // 从结果中提取 proof 对象地址
621
- // 这里需要根据实际的 CallProof 返回格式调整
622
- const responseData = result?.objectChanges;
623
- const proofAddress = responseData?.find((change) => change.objectType?.includes("Proof"))?.objectId;
624
- return {
625
- proofAddress: proofAddress || "",
626
- txHash: result?.digest || "",
627
- };
628
- }
629
- /**
630
- * 销毁 Messenger 实例
631
- * 清理所有资源(定时器等)
632
- */
633
- destroy() {
634
- this.stopPollingTimer();
635
- //console.log("Messenger instance destroyed");
636
- }
637
- /**
638
- * 断开连接(destroy 的别名)
639
- * 用于清理资源
640
- */
641
- disconnect() {
642
- this.destroy();
643
- }
644
- /**
645
- * 设置新消息回调
646
- * @param onMessage 新消息回调函数
647
- */
648
- setOnMessageCallback(onMessage) {
649
- this.onMessageCallback = onMessage;
650
- }
651
- /**
652
- * 发送 ZIP 压缩文件
653
- *
654
- * 支持发送本地或网络 WTS/WIP 文件,经过 ZIP 压缩后发送给对方
655
- * 支持 Guard 验证,如果提供 guardAddress 和 passportAddress,消息将进入 Guard 验证流程
656
- *
657
- * @param recipientAddress 接收方地址
658
- * @param source 文件源(本地路径或网络 URL)
659
- * @param options 可选参数
660
- * @returns 发送结果
661
- */
662
- async sendZipFile(recipientAddress, source, options) {
663
- if (!this.userAddress) {
664
- throw new MessengerError(MessengerErrorCode.IDENTITY_NOT_FOUND, "User address not set");
665
- }
666
- // 1. 加载文件内容
667
- const fileData = await this.loadFileData(source);
668
- // 2. 创建 ZIP 压缩
669
- const { ZipWriter, BlobWriter, Uint8ArrayReader } = await import("@zip.js/zip.js");
670
- const fileName = options?.fileName || path.basename(source) || "file.zip";
671
- const contentType = options?.contentType || this.detectContentType(fileName);
672
- const zipFileWriter = new BlobWriter("application/zip");
673
- const zipWriter = new ZipWriter(zipFileWriter);
674
- await zipWriter.add(fileName, new Uint8ArrayReader(fileData));
675
- await zipWriter.close();
676
- const zipFileBlob = await zipFileWriter.getData();
677
- const zipBlob = new Uint8Array(await zipFileBlob.arrayBuffer());
678
- // 3. 本地文件大小限制检查(默认 5MB)
679
- if (zipBlob.length > WTS_FILE_BYTES_LIMIT) {
680
- throw new MessengerError(MessengerErrorCode.INVALID_INPUT, `ZIP file size (${zipBlob.length} bytes) exceeds local maximum allowed size (${WTS_FILE_BYTES_LIMIT} bytes)`);
681
- }
682
- // 4. 计算 ZIP 文件哈希(用于 zipMetadata)
683
- const zipFileHash = "0x" + createHash("sha256").update(zipBlob).digest("hex");
684
- // 4. 将 ZIP 数据转为 base64
685
- const zipBase64 = Buffer.from(zipBlob).toString("base64");
686
- // 5. 构造 ZIP 元数据
687
- const zipMetadata = {
688
- fileName: `${fileName}.zip`,
689
- fileSize: zipBlob.length,
690
- fileHash: zipFileHash,
691
- contentType: contentType,
692
- };
693
- // 【关键修复】发送前先拉取对方发送的最新消息
694
- // 确保 lastReceivedLeafIndex 包含所有已解密的消息
695
- await this.pullMessages();
696
- // 【新增】获取最后收到的消息序号
697
- const lastReceivedLeafIndex = this.messageStorage.getLastReceivedLeafIndex(this.userAddress, recipientAddress);
698
- // 6. 加密 ZIP 数据(作为普通消息发送,明文就是 ZIP 的 base64)
699
- const createdAt = Date.now();
700
- const encrypted = await this.session.encryptMessage(this.userAddress, recipientAddress, zipBase64);
701
- const ciphertext = Buffer.from(new Uint8Array(encrypted.body)).toString("base64");
702
- // 7. 计算 plaintextHash(使用与服务器一致的格式)
703
- // 【更新】包含 lastReceivedLeafIndex 在哈希计算中
704
- const guardAddr = options?.guardAddress || "";
705
- const passportAddr = options?.passportAddress || "";
706
- const plaintextHash = hashPlaintext(zipBase64, createdAt, guardAddr, passportAddr, lastReceivedLeafIndex);
707
- // 8. 发送到服务器(带 ZIP 元数据)
708
- const timestamp = Date.now();
709
- const nonce = this.generateNonce();
710
- const account = await (await getAccount()).get(this.userAddress, false);
711
- if (!account) {
712
- throw new MessengerError(MessengerErrorCode.IDENTITY_NOT_FOUND, "User account not found");
713
- }
714
- const publicKey = account.pubkey;
715
- // 统一发送模式(合并 send 和 send_force)
716
- // 统一签名格式: send_message:{sender}:{recipient}:{guard_address}:{passport_address}:{plaintext_hash}:{last_received_leaf_index}:{public_key}:{timestamp}:{nonce}:{force}
717
- const lastReceivedStr = lastReceivedLeafIndex >= 0 ? lastReceivedLeafIndex.toString() : "";
718
- const forceStr = options?.force ? "true" : "false";
719
- const signMessage = `send_message:${this.userAddress}:${recipientAddress}:${guardAddr}:${passportAddr}:${plaintextHash}:${lastReceivedStr}:${publicKey}:${timestamp}:${nonce}:${forceStr}`;
720
- const signResult = await (await getAccount()).signData(this.userAddress, signMessage);
721
- const signatureBuffer = Buffer.from(signResult.signature.slice(2), "hex");
722
- const signatureBase64 = bytesToBase64(new Uint8Array(signatureBuffer));
723
- // 使用统一的 sendMessage API
724
- const response = await this.serverClient.sendMessage({
725
- sender: signResult.publicKey,
726
- recipient: recipientAddress,
727
- ciphertext,
728
- plaintextHash,
729
- clientTimestamp: createdAt,
730
- msgType: encrypted.type, // 使用底层 Signal Protocol 消息类型(1 或 3)
731
- zipMetadata,
732
- guardAddress: options?.guardAddress,
733
- passportAddress: options?.passportAddress,
734
- force: options?.force,
735
- // 【修复】只有当 lastReceivedLeafIndex >= 0 时才发送,否则发送 undefined
736
- lastReceivedLeafIndex: lastReceivedLeafIndex >= 0
737
- ? lastReceivedLeafIndex
738
- : undefined,
739
- signatureScheme: "ED25519",
740
- signature: signatureBase64,
741
- timestamp,
742
- nonce,
743
- });
744
- // 9. 保存到本地存储
745
- // 使用底层 Signal Protocol 消息类型(1 或 3),通过 zipMetadata 标识这是 ZIP 文件
746
- const message = {
747
- messageId: response.messageId,
748
- fromAddress: this.userAddress,
749
- toAddress: recipientAddress,
750
- plaintextHash,
751
- plaintext: zipBase64, // 保存 ZIP 数据的 base64 编码,方便本地查看
752
- guardAddress: options?.guardAddress,
753
- passportAddress: options?.passportAddress,
754
- lastReceivedLeafIndex, // 【新增】保存消息确认字段
755
- direction: MessageDirection.SENT,
756
- status: response.status === "confirmed"
757
- ? MessageStatus.CONFIRMED
758
- : MessageStatus.PENDING,
759
- msgType: encrypted.type, // 使用底层 Signal Protocol 消息类型(1 或 3)
760
- zipMetadata,
761
- createdAt,
762
- };
763
- if (response.merkleData) {
764
- message.leafIndex = response.merkleData.leafIndex;
765
- message.prevRoot = response.merkleData.prevRoot;
766
- message.newRoot = response.merkleData.newRoot;
767
- message.serverSignature = response.merkleData.serverSignature;
768
- message.serverTimestamp = response.merkleData.serverTimestamp;
769
- message.serverPublicKey = response.merkleData.serverPublicKey;
770
- // 更新会话状态
771
- this.sessionStateStorage.updateSessionState(this.userAddress, recipientAddress, {
772
- currentRoot: response.merkleData.newRoot,
773
- prevRoot: response.merkleData.prevRoot,
774
- lastLeafIndex: response.merkleData.leafIndex,
775
- lastSyncAt: Date.now(),
776
- });
777
- }
778
- this.messageStorage.saveMessage(message);
779
- // 方案B:处理服务器返回的其他已验证消息的 Merkle 数据
780
- // 这些消息可能之前因为发送方离线而没有收到 Merkle 数据
781
- if (response.pendingMerkleData) {
782
- for (const [msgId, merkleData] of Object.entries(response.pendingMerkleData)) {
783
- // 检查本地是否已有该消息
784
- const existingMsg = this.messageStorage.getMessage(msgId);
785
- if (existingMsg &&
786
- existingMsg.status === MessageStatus.PENDING) {
787
- // 更新消息的 Merkle 数据
788
- this.messageStorage.updateMessageStatus(msgId, MessageStatus.CONFIRMED, {
789
- leafIndex: merkleData.leafIndex,
790
- newRoot: merkleData.newRoot,
791
- serverSignature: merkleData.serverSignature,
792
- serverTimestamp: merkleData.serverTimestamp,
793
- serverPublicKey: merkleData.serverPublicKey,
794
- });
795
- /*console.log(
796
- `[ForceSend] Updated pending message ${msgId} with merkle data from pendingMerkleData`,
797
- );*/
798
- }
799
- }
800
- }
801
- this.triggerFastPoll();
802
- return {
803
- messageId: response.messageId,
804
- status: message.status,
805
- merkleData: response.merkleData,
806
- guardList: response.guard_list,
807
- lastReceivedLeafIndex: lastReceivedLeafIndex >= 0 ? lastReceivedLeafIndex : undefined,
808
- };
809
- }
810
- /**
811
- * 加载文件数据(支持本地路径和网络 URL)
812
- */
813
- async loadFileData(source) {
814
- // 判断是否为网络 URL
815
- if (source.startsWith("http://") || source.startsWith("https://")) {
816
- // 从网络加载
817
- const response = await fetch(source);
818
- if (!response.ok) {
819
- throw new MessengerError(MessengerErrorCode.NETWORK_ERROR, `Failed to fetch file from ${source}: ${response.statusText}`);
820
- }
821
- const arrayBuffer = await response.arrayBuffer();
822
- return new Uint8Array(arrayBuffer);
823
- }
824
- // 从本地文件加载
825
- const resolvedPath = path.resolve(source);
826
- if (!fs.existsSync(resolvedPath)) {
827
- throw new MessengerError(MessengerErrorCode.FILE_NOT_FOUND, `File not found: ${resolvedPath}`);
828
- }
829
- const buffer = fs.readFileSync(resolvedPath);
830
- return new Uint8Array(buffer);
831
- }
832
- /**
833
- * 检测内容类型
834
- */
835
- detectContentType(fileName) {
836
- const ext = path.extname(fileName).toLowerCase();
837
- switch (ext) {
838
- case ".wts":
839
- return "wts";
840
- case ".wip":
841
- return "wip";
842
- default:
843
- return "zip";
844
- }
845
- }
846
- /**
847
- * 生成签名的请求
848
- */
849
- async _createSignedRequest(data) {
850
- if (!this.userAddress) {
851
- throw new MessengerError(MessengerErrorCode.IDENTITY_NOT_FOUND, "User address not set");
852
- }
853
- const timestamp = Date.now();
854
- const nonce = this.generateNonce();
855
- const dataJson = canonicalizeJson(data);
856
- const signMessage = `${timestamp}:${nonce}:${dataJson}`;
857
- const signResult = await (await getAccount()).signData(this.userAddress, signMessage);
858
- const signatureBuffer = Buffer.from(signResult.signature.slice(2), "hex");
859
- const signatureBase64 = bytesToBase64(new Uint8Array(signatureBuffer));
860
- // 获取公钥(带标志位)用于服务器验证
861
- const account = await (await getAccount()).get(this.userAddress, false);
862
- if (!account || !account.pubkey) {
863
- throw new MessengerError(MessengerErrorCode.IDENTITY_NOT_FOUND, "Account public key not found");
864
- }
865
- return {
866
- userAddress: this.userAddress,
867
- publicKey: account.pubkey,
868
- signatureScheme: "ED25519",
869
- signature: signatureBase64,
870
- timestamp,
871
- nonce,
872
- data,
873
- };
874
- }
875
- /**
876
- * 验证地址列表
877
- */
878
- _validateAddresses(addresses) {
879
- const valid = [];
880
- const invalid = [];
881
- for (const addr of addresses) {
882
- if (isValidWowAddress(addr)) {
883
- valid.push(addr);
884
- }
885
- else {
886
- invalid.push(addr);
887
- }
888
- }
889
- return { valid, invalid };
890
- }
891
- /**
892
- * 黑名单 - 添加地址
893
- */
894
- async addToBlacklist(addresses) {
895
- if (!this.userAddress) {
896
- throw new MessengerError(MessengerErrorCode.IDENTITY_NOT_FOUND, "User address not set");
897
- }
898
- const { valid, invalid } = this._validateAddresses(addresses);
899
- if (invalid.length > 0) {
900
- return {
901
- success: false,
902
- operation: "add",
903
- modifiedCount: 0,
904
- currentCount: 0,
905
- maxCount: 0,
906
- invalidAddresses: invalid,
907
- message: `Invalid addresses: ${invalid.join(", ")}`,
908
- };
909
- }
910
- const data = { addresses: valid };
911
- const signedRequest = await this._createSignedRequest(data);
912
- return this.serverClient.addToBlacklist(this.userAddress, signedRequest);
913
- }
914
- /**
915
- * 黑名单 - 移除地址
916
- */
917
- async removeFromBlacklist(addresses) {
918
- if (!this.userAddress) {
919
- throw new MessengerError(MessengerErrorCode.IDENTITY_NOT_FOUND, "User address not set");
920
- }
921
- const { valid, invalid } = this._validateAddresses(addresses);
922
- if (invalid.length > 0) {
923
- return {
924
- success: false,
925
- operation: "remove",
926
- modifiedCount: 0,
927
- currentCount: 0,
928
- maxCount: 0,
929
- invalidAddresses: invalid,
930
- message: `Invalid addresses: ${invalid.join(", ")}`,
931
- };
932
- }
933
- const data = { addresses: valid };
934
- const signedRequest = await this._createSignedRequest(data);
935
- return this.serverClient.removeFromBlacklist(this.userAddress, signedRequest);
936
- }
937
- /**
938
- * 黑名单 - 清空
939
- */
940
- async clearBlacklist() {
941
- if (!this.userAddress) {
942
- throw new MessengerError(MessengerErrorCode.IDENTITY_NOT_FOUND, "User address not set");
943
- }
944
- const data = {};
945
- const signedRequest = await this._createSignedRequest(data);
946
- return this.serverClient.clearBlacklist(this.userAddress, signedRequest);
947
- }
948
- /**
949
- * 黑名单 - 获取列表
950
- */
951
- async getBlacklist() {
952
- if (!this.userAddress) {
953
- throw new MessengerError(MessengerErrorCode.IDENTITY_NOT_FOUND, "User address not set");
954
- }
955
- const signedRequest = await this._createSignedRequest({});
956
- return this.serverClient.getBlacklist(this.userAddress, signedRequest);
957
- }
958
- /**
959
- * 黑名单 - 检查存在
960
- */
961
- async existInBlacklist(addresses) {
962
- if (!this.userAddress) {
963
- throw new MessengerError(MessengerErrorCode.IDENTITY_NOT_FOUND, "User address not set");
964
- }
965
- const { valid, invalid } = this._validateAddresses(addresses);
966
- if (invalid.length > 0) {
967
- return {
968
- success: false,
969
- operation: "exist",
970
- modifiedCount: 0,
971
- currentCount: 0,
972
- maxCount: 0,
973
- invalidAddresses: invalid,
974
- message: `Invalid addresses: ${invalid.join(", ")}`,
975
- };
976
- }
977
- const data = { addresses: valid };
978
- const signedRequest = await this._createSignedRequest(data);
979
- return this.serverClient.existInBlacklist(this.userAddress, signedRequest);
980
- }
981
- /**
982
- * 好友列表 - 添加地址
983
- */
984
- async addToFriendsList(addresses) {
985
- if (!this.userAddress) {
986
- throw new MessengerError(MessengerErrorCode.IDENTITY_NOT_FOUND, "User address not set");
987
- }
988
- const { valid, invalid } = this._validateAddresses(addresses);
989
- if (invalid.length > 0) {
990
- return {
991
- success: false,
992
- operation: "add",
993
- modifiedCount: 0,
994
- currentCount: 0,
995
- maxCount: 0,
996
- invalidAddresses: invalid,
997
- message: `Invalid addresses: ${invalid.join(", ")}`,
998
- };
999
- }
1000
- const data = { addresses: valid };
1001
- const signedRequest = await this._createSignedRequest(data);
1002
- return this.serverClient.addToFriendsList(this.userAddress, signedRequest);
1003
- }
1004
- /**
1005
- * 好友列表 - 移除地址
1006
- */
1007
- async removeFromFriendsList(addresses) {
1008
- if (!this.userAddress) {
1009
- throw new MessengerError(MessengerErrorCode.IDENTITY_NOT_FOUND, "User address not set");
1010
- }
1011
- const { valid, invalid } = this._validateAddresses(addresses);
1012
- if (invalid.length > 0) {
1013
- return {
1014
- success: false,
1015
- operation: "remove",
1016
- modifiedCount: 0,
1017
- currentCount: 0,
1018
- maxCount: 0,
1019
- invalidAddresses: invalid,
1020
- message: `Invalid addresses: ${invalid.join(", ")}`,
1021
- };
1022
- }
1023
- const data = { addresses: valid };
1024
- const signedRequest = await this._createSignedRequest(data);
1025
- return this.serverClient.removeFromFriendsList(this.userAddress, signedRequest);
1026
- }
1027
- /**
1028
- * 好友列表 - 清空
1029
- */
1030
- async clearFriendsList() {
1031
- if (!this.userAddress) {
1032
- throw new MessengerError(MessengerErrorCode.IDENTITY_NOT_FOUND, "User address not set");
1033
- }
1034
- const data = {};
1035
- const signedRequest = await this._createSignedRequest(data);
1036
- return this.serverClient.clearFriendsList(this.userAddress, signedRequest);
1037
- }
1038
- /**
1039
- * 好友列表 - 获取列表
1040
- */
1041
- async getFriendsList() {
1042
- if (!this.userAddress) {
1043
- throw new MessengerError(MessengerErrorCode.IDENTITY_NOT_FOUND, "User address not set");
1044
- }
1045
- const signedRequest = await this._createSignedRequest({});
1046
- return this.serverClient.getFriendsList(this.userAddress, signedRequest);
1047
- }
1048
- /**
1049
- * 好友列表 - 检查存在
1050
- */
1051
- async existInFriendsList(addresses) {
1052
- if (!this.userAddress) {
1053
- throw new MessengerError(MessengerErrorCode.IDENTITY_NOT_FOUND, "User address not set");
1054
- }
1055
- const { valid, invalid } = this._validateAddresses(addresses);
1056
- if (invalid.length > 0) {
1057
- return {
1058
- success: false,
1059
- operation: "exist",
1060
- modifiedCount: 0,
1061
- currentCount: 0,
1062
- maxCount: 0,
1063
- invalidAddresses: invalid,
1064
- message: `Invalid addresses: ${invalid.join(", ")}`,
1065
- };
1066
- }
1067
- const data = { addresses: valid };
1068
- const signedRequest = await this._createSignedRequest(data);
1069
- return this.serverClient.existInFriendsList(this.userAddress, signedRequest);
1070
- }
1071
- /**
1072
- * Guard 列表 - 添加
1073
- */
1074
- async addToGuardList(guards) {
1075
- if (!this.userAddress) {
1076
- throw new MessengerError(MessengerErrorCode.IDENTITY_NOT_FOUND, "User address not set");
1077
- }
1078
- const data = { guards };
1079
- const signedRequest = await this._createSignedRequest(data);
1080
- return this.serverClient.addToGuardList(this.userAddress, signedRequest);
1081
- }
1082
- /**
1083
- * Guard 列表 - 移除
1084
- */
1085
- async removeFromGuardList(addresses) {
1086
- if (!this.userAddress) {
1087
- throw new MessengerError(MessengerErrorCode.IDENTITY_NOT_FOUND, "User address not set");
1088
- }
1089
- const { valid, invalid } = this._validateAddresses(addresses);
1090
- if (invalid.length > 0) {
1091
- return {
1092
- success: false,
1093
- operation: "remove",
1094
- modifiedCount: 0,
1095
- currentCount: 0,
1096
- maxCount: 0,
1097
- invalidAddresses: invalid,
1098
- message: `Invalid addresses: ${invalid.join(", ")}`,
1099
- };
1100
- }
1101
- const data = { addresses: valid };
1102
- const signedRequest = await this._createSignedRequest(data);
1103
- return this.serverClient.removeFromGuardList(this.userAddress, signedRequest);
1104
- }
1105
- /**
1106
- * Guard 列表 - 获取列表
1107
- */
1108
- async getGuardList() {
1109
- if (!this.userAddress) {
1110
- throw new MessengerError(MessengerErrorCode.IDENTITY_NOT_FOUND, "User address not set");
1111
- }
1112
- const signedRequest = await this._createSignedRequest({});
1113
- return this.serverClient.getGuardList(this.userAddress, signedRequest);
1114
- }
1115
- /**
1116
- * 获取用户设置
1117
- */
1118
- async getSettings() {
1119
- if (!this.userAddress) {
1120
- throw new MessengerError(MessengerErrorCode.IDENTITY_NOT_FOUND, "User address not set");
1121
- }
1122
- const signedRequest = await this._createSignedRequest({});
1123
- return this.serverClient.getSettings(this.userAddress, signedRequest);
1124
- }
1125
- /**
1126
- * 设置用户设置
1127
- */
1128
- async setSettings(settings) {
1129
- if (!this.userAddress) {
1130
- throw new MessengerError(MessengerErrorCode.IDENTITY_NOT_FOUND, "User address not set");
1131
- }
1132
- // 构造完整请求对象
1133
- const fullSettings = {
1134
- allowStrangerMessages: settings.allowStrangerMessages,
1135
- maxInboxSize: settings.maxInboxSize,
1136
- };
1137
- const signedRequest = await this._createSignedRequest(fullSettings);
1138
- return this.serverClient.updateSettings(this.userAddress, signedRequest);
1139
- }
1140
- // ========== 【新增】Skip Keys 和消息池相关方法 ==========
1141
- /**
1142
- * 尝试解密单条消息
1143
- * @param serverMsg 服务器消息
1144
- * @returns 解密结果
1145
- */
1146
- async tryDecryptMessage(serverMsg) {
1147
- try {
1148
- // 1. 使用新的解密引擎解密消息
1149
- const ciphertext = Uint8Array.from(Buffer.from(serverMsg.bodyB64, "base64"));
1150
- const decryptResult = await this.decryptionEngine.decryptMessage(this.userAddress, serverMsg.from, ciphertext.buffer, serverMsg.msgType);
1151
- if (!decryptResult.success) {
1152
- // 解密失败,判断是否应该重试
1153
- const shouldRetry = this.isRetryableError(decryptResult.error || "");
1154
- return {
1155
- success: false,
1156
- shouldRetry,
1157
- error: decryptResult.error,
1158
- sessionUpdated: decryptResult.sessionUpdated,
1159
- };
1160
- }
1161
- const plaintext = decryptResult.plaintext;
1162
- // 2. 验证消息
1163
- if (!serverMsg.clientTimestamp) {
1164
- throw new Error(`Missing clientTimestamp for message ${serverMsg.id}`);
1165
- }
1166
- if (!serverMsg.plaintextHash) {
1167
- throw new Error(`Missing plaintextHash for message ${serverMsg.id}`);
1168
- }
1169
- const verificationResult = verifyMessage({
1170
- messageId: serverMsg.id,
1171
- plaintext,
1172
- plaintextHash: serverMsg.plaintextHash,
1173
- createdAt: serverMsg.clientTimestamp,
1174
- guardAddress: serverMsg.guardAddress,
1175
- passportAddress: serverMsg.passportAddress,
1176
- lastReceivedLeafIndex: serverMsg.lastReceivedLeafIndex,
1177
- serverSignature: serverMsg.merkleMetadata?.serverSignature,
1178
- serverPublicKey: serverMsg.merkleMetadata?.serverPublicKey,
1179
- merkleMetadata: serverMsg.merkleMetadata
1180
- ? {
1181
- prevRoot: serverMsg.merkleMetadata.prevRoot,
1182
- newRoot: serverMsg.merkleMetadata.newRoot,
1183
- serverTimestamp: serverMsg.merkleMetadata.serverTimestamp,
1184
- leafIndex: serverMsg.merkleMetadata.leafIndex,
1185
- proofSiblings: serverMsg.merkleMetadata.proofSiblings,
1186
- proofIndices: serverMsg.merkleMetadata.proofIndices,
1187
- }
1188
- : undefined,
1189
- });
1190
- if (!verificationResult.valid) {
1191
- throw new Error(verificationResult.error);
1192
- }
1193
- // 3. 构造消息对象
1194
- const message = {
1195
- messageId: serverMsg.id,
1196
- fromAddress: serverMsg.from,
1197
- toAddress: this.userAddress,
1198
- plaintextHash: serverMsg.plaintextHash,
1199
- plaintext,
1200
- guardAddress: serverMsg.guardAddress,
1201
- passportAddress: serverMsg.passportAddress,
1202
- lastReceivedLeafIndex: serverMsg.lastReceivedLeafIndex,
1203
- direction: MessageDirection.RECEIVED,
1204
- status: MessageStatus.DECRYPTED,
1205
- msgType: serverMsg.msgType,
1206
- leafIndex: serverMsg.merkleMetadata?.leafIndex,
1207
- prevRoot: serverMsg.merkleMetadata?.prevRoot,
1208
- newRoot: serverMsg.merkleMetadata?.newRoot,
1209
- serverSignature: serverMsg.merkleMetadata?.serverSignature,
1210
- serverTimestamp: serverMsg.merkleMetadata?.serverTimestamp,
1211
- serverPublicKey: serverMsg.merkleMetadata?.serverPublicKey,
1212
- createdAt: serverMsg.clientTimestamp,
1213
- receivedAt: Date.now(),
1214
- zipMetadata: serverMsg.zipMetadata,
1215
- };
1216
- // 4. 更新会话状态
1217
- if (serverMsg.merkleMetadata) {
1218
- this.sessionStateStorage.updateSessionState(this.userAddress, serverMsg.from, {
1219
- currentRoot: serverMsg.merkleMetadata.newRoot,
1220
- prevRoot: serverMsg.merkleMetadata.prevRoot,
1221
- lastLeafIndex: serverMsg.merkleMetadata.leafIndex,
1222
- lastSyncAt: Date.now(),
1223
- });
1224
- }
1225
- const timestamp = serverMsg.merkleMetadata?.serverTimestamp ||
1226
- serverMsg.clientTimestamp ||
1227
- Date.now();
1228
- // 【新增】根据收到的 lastReceivedLeafIndex,更新我发送的消息状态
1229
- if (serverMsg.lastReceivedLeafIndex !== undefined &&
1230
- serverMsg.lastReceivedLeafIndex >= 0) {
1231
- const mySentMessages = this.messageStorage
1232
- .getMessagesBySession(this.userAddress, serverMsg.from)
1233
- .filter((m) => m.direction === MessageDirection.SENT &&
1234
- m.status === MessageStatus.CONFIRMED &&
1235
- m.leafIndex !== undefined &&
1236
- m.leafIndex <= serverMsg.lastReceivedLeafIndex);
1237
- for (const sentMsg of mySentMessages) {
1238
- this.messageStorage.updateMessageStatus(sentMsg.messageId, MessageStatus.READ);
1239
- }
1240
- }
1241
- return {
1242
- success: true,
1243
- shouldRetry: false,
1244
- message,
1245
- decryptedData: {
1246
- id: serverMsg.id,
1247
- from: serverMsg.from,
1248
- plaintext,
1249
- timestamp,
1250
- merkleVerified: !!serverMsg.merkleMetadata,
1251
- merkleData: serverMsg.merkleMetadata
1252
- ? {
1253
- leafIndex: serverMsg.merkleMetadata.leafIndex,
1254
- rootHash: serverMsg.merkleMetadata.newRoot,
1255
- }
1256
- : undefined,
1257
- },
1258
- sessionUpdated: decryptResult.sessionUpdated,
1259
- };
1260
- }
1261
- catch (error) {
1262
- const errorMessage = error instanceof Error ? error.message : String(error);
1263
- // 判断是否应该重试(Skip Keys 机制)
1264
- const shouldRetry = this.isRetryableError(errorMessage);
1265
- return {
1266
- success: false,
1267
- shouldRetry,
1268
- error: errorMessage,
1269
- };
1270
- }
1271
- }
1272
- /**
1273
- * 判断错误是否可重试(Skip Keys 机制)
1274
- * @param errorMessage 错误信息
1275
- * @returns 是否可重试
1276
- */
1277
- isRetryableError(errorMessage) {
1278
- // Signal Protocol 内部已经处理了 Skip Keys
1279
- // 这里的错误通常是更严重的错误
1280
- const retryablePatterns = [
1281
- /message number/i,
1282
- /chain key/i,
1283
- /session not found/i,
1284
- /prekey not found/i,
1285
- /PREKEY 竞争:我的地址较小,保留我的会话/i, // 【用户要求】处理 PREKEY 竞争情况
1286
- /The operation failed for an operation-specific reason/i, // 【新增】处理 DOMException 类型错误
1287
- /DOMException/i, // 【新增】处理 DOMException 类型错误
1288
- /收到 WHISPER_MESSAGE 但无现有会话,需要等待 PREKEY_MESSAGE/i, // 【新增】处理无会话但收到 WHISPER_MESSAGE 的情况
1289
- ];
1290
- return retryablePatterns.some((pattern) => pattern.test(errorMessage));
1291
- }
1292
- /**
1293
- * 处理 waitingMessages 池中的消息
1294
- * @param decryptedMessages 解密成功的消息列表
1295
- * @param acknowledgedIds 已确认的消息ID列表
1296
- */
1297
- async processWaitingMessages(decryptedMessages, acknowledgedIds) {
1298
- if (this.waitingMessages.size === 0)
1299
- return;
1300
- console.log(`[Messenger] 尝试处理 ${this.waitingMessages.size} 条等待消息`);
1301
- const processedIds = [];
1302
- // 对等待消息按 clientTimestamp 排序(发送方本地时间)
1303
- const sortedWaitingMsgs = Array.from(this.waitingMessages.values()).sort(function (a, b) {
1304
- return (a.clientTimestamp || 0) - (b.clientTimestamp || 0);
1305
- });
1306
- for (const serverMsg of sortedWaitingMsgs) {
1307
- const id = serverMsg.id;
1308
- const decryptResult = await this.tryDecryptMessage(serverMsg);
1309
- if (decryptResult.success &&
1310
- decryptResult.message &&
1311
- decryptResult.decryptedData) {
1312
- // 解密成功
1313
- this.messageStorage.saveMessage(decryptResult.message);
1314
- decryptedMessages.push(decryptResult.decryptedData);
1315
- acknowledgedIds.push(id);
1316
- processedIds.push(id);
1317
- // 清除重试计数
1318
- this.waitingMessageRetries.delete(id);
1319
- }
1320
- else if (!decryptResult.shouldRetry) {
1321
- // 永久失败
1322
- console.error(`[Messenger] 等待消息 ${id} 解密永久失败: ${decryptResult.error}`);
1323
- this.failedMessages.set(id, {
1324
- message: serverMsg,
1325
- error: decryptResult.error || "Unknown error",
1326
- });
1327
- await this.saveFailedMessage(serverMsg, decryptResult.error || "Unknown error");
1328
- acknowledgedIds.push(id);
1329
- processedIds.push(id);
1330
- // 清除重试计数
1331
- this.waitingMessageRetries.delete(id);
1332
- }
1333
- else {
1334
- // 需要重试,增加重试计数
1335
- const currentRetries = this.waitingMessageRetries.get(id) || 0;
1336
- const newRetries = currentRetries + 1;
1337
- if (newRetries >= 3) {
1338
- // 超过3次重试,标记为永久失败
1339
- console.error(`[Messenger] 等待消息 ${id} 重试3次后仍失败,标记为永久失败`);
1340
- this.failedMessages.set(id, {
1341
- message: serverMsg,
1342
- error: decryptResult.error || "Retry limit exceeded",
1343
- });
1344
- await this.saveFailedMessage(serverMsg, decryptResult.error || "Retry limit exceeded");
1345
- acknowledgedIds.push(id);
1346
- processedIds.push(id);
1347
- this.waitingMessageRetries.delete(id);
1348
- }
1349
- else {
1350
- // 保留在 waitingMessages 中,等待下次重试
1351
- this.waitingMessageRetries.set(id, newRetries);
1352
- console.log(`[Messenger] 消息 ${id} 第 ${newRetries}/3 次重试失败,继续等待`);
1353
- }
1354
- }
1355
- }
1356
- // 从 waitingMessages 中移除已处理的消息
1357
- for (const id of processedIds) {
1358
- this.waitingMessages.delete(id);
1359
- }
1360
- if (processedIds.length > 0) {
1361
- console.log(`[Messenger] 成功处理 ${processedIds.length} 条等待消息`);
1362
- }
1363
- }
1364
- /**
1365
- * 保存解密失败的消息
1366
- * @param serverMsg 服务器消息
1367
- * @param error 错误信息
1368
- */
1369
- async saveFailedMessage(serverMsg, error) {
1370
- const failedMessage = {
1371
- messageId: serverMsg.id,
1372
- fromAddress: serverMsg.from,
1373
- toAddress: this.userAddress,
1374
- plaintextHash: serverMsg.plaintextHash || "",
1375
- guardAddress: serverMsg.guardAddress,
1376
- passportAddress: serverMsg.passportAddress,
1377
- lastReceivedLeafIndex: serverMsg.lastReceivedLeafIndex,
1378
- direction: MessageDirection.RECEIVED,
1379
- status: MessageStatus.DECRYPT_FAILED,
1380
- msgType: serverMsg.msgType,
1381
- leafIndex: serverMsg.merkleMetadata?.leafIndex,
1382
- prevRoot: serverMsg.merkleMetadata?.prevRoot,
1383
- newRoot: serverMsg.merkleMetadata?.newRoot,
1384
- serverSignature: serverMsg.merkleMetadata?.serverSignature,
1385
- serverTimestamp: serverMsg.merkleMetadata?.serverTimestamp,
1386
- serverPublicKey: serverMsg.merkleMetadata?.serverPublicKey,
1387
- createdAt: serverMsg.clientTimestamp || Date.now(),
1388
- receivedAt: Date.now(),
1389
- zipMetadata: serverMsg.zipMetadata,
1390
- decryptError: error,
1391
- decryptAttempts: 1,
1392
- lastDecryptAttemptAt: Date.now(),
1393
- };
1394
- this.messageStorage.saveMessage(failedMessage);
1395
- }
1396
- /**
1397
- * 重新调度轮询(用于切换到快速模式)
1398
- */
1399
- reschedulePolling() {
1400
- if (!this.isPollingRunning || !this.pollingTimer)
1401
- return;
1402
- console.log(`[Messenger] 重新调度轮询,切换到快速模式(等待消息: ${this.waitingMessages.size})`);
1403
- clearTimeout(this.pollingTimer);
1404
- this.pollingTimer = null;
1405
- this.scheduleNextPoll();
1406
- }
1407
- /**
1408
- * 获取解密失败的消息(供用户决策重发)
1409
- * @returns 失败消息列表
1410
- */
1411
- getFailedMessages() {
1412
- return Array.from(this.failedMessages.entries()).map(([id, data]) => ({
1413
- messageId: id,
1414
- from: data.message.from,
1415
- error: data.error,
1416
- leafIndex: data.message.merkleMetadata?.leafIndex,
1417
- }));
1418
- }
1419
- /**
1420
- * 清除解密失败的消息记录
1421
- * @param messageId 消息ID(可选,不提供则清除所有)
1422
- */
1423
- clearFailedMessages(messageId) {
1424
- if (messageId) {
1425
- this.failedMessages.delete(messageId);
1426
- }
1427
- else {
1428
- this.failedMessages.clear();
1429
- }
1430
- }
1431
- /**
1432
- * 获取等待解密的消息数量
1433
- * @returns 等待消息数量
1434
- */
1435
- getWaitingMessageCount() {
1436
- return this.waitingMessages.size;
1437
- }
1438
- }
1439
- //# sourceMappingURL=messenger.js.map
1
+ import{createHash}from'crypto';import*as a183a from'fs';import*as a183b from'path';import{MessengerSession,DecryptionEngine}from'./session.js';import{MessengerServerClient}from'./server.js';import{MessageStorage,SessionStateStorage}from'./storage.js';import{hashPlaintext,verifyMessage,bytesToBase64}from'./crypto.js';import{canonicalizeJson}from'./utils.js';import{DEFAULT_MESSENGER_CONFIG,MessengerError,MessengerErrorCode,MessageDirection,MessageStatus,WTS_FILE_BYTES_LIMIT,NORMAL_MESSAGE_BYTES_LIMIT,CHAIN_PROOF_TYPE}from'./types.js';import{isValidWowAddress}from'../../utils/sui-types.js';async function getAccount(){const {Account:a}=await import('../local/account.js');return a['Instance']();}export class Messenger{['session'];['serverClient'];['config'];['userAddress']=null;['onMessageCallback']=null;['pollingTimer']=null;['messageConsecutiveEmptyPulls']=0x0;['prekeyConsecutiveOkCount']=0x0;['currentMessageInterval'];['isPollingRunning']=![];['messageStorage'];['sessionStateStorage'];['decryptionEngine'];['waitingMessages']=new Map();['failedMessages']=new Map();['waitingMessageRetries']=new Map();constructor(a,b){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']),this['currentMessageInterval']=this['config']['message_poll_default_interval_ms']??0x6*0x3c*0x3e8;}['getUserAddress'](){if(!this['userAddress'])throw new MessengerError(MessengerErrorCode['IDENTITY_NOT_FOUND'],'User\x20address\x20not\x20set');return this['userAddress'];}async['getPublicKey'](){if(!this['userAddress'])throw new MessengerError(MessengerErrorCode['IDENTITY_NOT_FOUND'],'User\x20address\x20not\x20set');const a=await(await getAccount())['get'](this['userAddress'],![]);return a?.['pubkey']||'';}['isValidGuardMessage'](a,b){return Boolean(a&&b&&isValidWowAddress(a)&&isValidWowAddress(b));}async['generateSignatureParams'](a){if(!this['userAddress'])throw new MessengerError(MessengerErrorCode['IDENTITY_NOT_FOUND'],'User\x20address\x20not\x20set');const b=await(await getAccount())['get'](this['userAddress'],![]);if(!b?.['secret'])throw new MessengerError(MessengerErrorCode['IDENTITY_NOT_FOUND'],'Account\x20not\x20found\x20or\x20no\x20secret\x20key\x20for\x20'+this['userAddress']);const {Ed25519Keypair:c}=await import('../../keypairs/ed25519/index.js'),d=c['fromSecretKey'](b['secret']),e=d['getPublicKey'](),f=e['toWPublicKey'](),g=Date['now'](),h=this['generateNonce'](),i=a+':'+f+':'+g+':'+h,j=await d['sign'](new TextEncoder()['encode'](i));return{'signatureScheme':'ED25519','signature':Buffer['from'](j)['toString']('base64'),'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['initialize'](){if(!this['userAddress'])throw new MessengerError(MessengerErrorCode['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']),await this['checkAndRefillPrekeys'](),this['startPollingTimer']();}async['checkAndRefillPrekeys'](){if(!this['userAddress'])return;await this['session']['ensurePreKeys'](this['userAddress'],![]);}['startPollingTimer'](){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=>{console['error']('[Polling]\x20Error\x20during\x20poll:',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']();a['messages']['length']>0x0?(this['messageConsecutiveEmptyPulls']=0x0,this['currentMessageInterval']=this['config']['message_poll_fast_interval_ms']??0x6*0x3e8,this['onMessageCallback']&&this['onMessageCallback'](a['messages'])):(this['messageConsecutiveEmptyPulls']++,this['messageConsecutiveEmptyPulls']>=(this['config']['message_poll_consecutive_empty_limit']??0x3)&&(this['currentMessageInterval']=this['config']['message_poll_default_interval_ms']??0x6*0x3c*0x3e8,this['messageConsecutiveEmptyPulls']=0x0));if(a['prekey_status']){const b=a['prekey_status'];b['shouldRefill']?(this['prekeyConsecutiveOkCount']=0x0,await this['checkAndRefillPrekeys']()):(this['prekeyConsecutiveOkCount']++,this['prekeyConsecutiveOkCount']>=(this['config']['prekey_poll_consecutive_ok_limit']??0x3)&&(this['prekeyConsecutiveOkCount']=0x0));}}catch(c){console['error']('[Polling]\x20Poll\x20error:',c);}}['triggerFastPoll'](){this['currentMessageInterval']=this['config']['message_poll_fast_interval_ms']??0x6*0x3e8,this['messageConsecutiveEmptyPulls']=0x0,this['isPollingRunning']&&(this['pollingTimer']&&clearTimeout(this['pollingTimer']),this['scheduleNextPoll']());}async['sendMessage'](a,b,c){if(!this['userAddress'])throw new MessengerError(MessengerErrorCode['IDENTITY_NOT_FOUND'],'User\x20address\x20not\x20set');const d=Date['now'](),e=Date['now'](),f=this['generateNonce'](),g=new TextEncoder()['encode'](b)['length'];if(g>NORMAL_MESSAGE_BYTES_LIMIT)throw new MessengerError(MessengerErrorCode['INVALID_INPUT'],'Message\x20size\x20('+g+'\x20bytes)\x20exceeds\x20maximum\x20allowed\x20size\x20('+NORMAL_MESSAGE_BYTES_LIMIT+'\x20bytes).\x20Consider\x20using\x20sendZipFile\x20for\x20large\x20content.');await this['pullMessages']();const h=this['messageStorage']['getLastReceivedLeafIndex'](this['userAddress'],a),i=await this['session']['encryptMessage'](this['userAddress'],a,b),j=Buffer['from'](new Uint8Array(i['body']))['toString']('base64'),k=hashPlaintext(b,d,c?.['guardAddress'],c?.['passportAddress'],h),l=await(await getAccount())['get'](this['userAddress'],![]);if(!l)throw new MessengerError(MessengerErrorCode['IDENTITY_NOT_FOUND'],'User\x20account\x20not\x20found');const m=l['pubkey'],n=c?.['guardAddress']||'',o=c?.['passportAddress']||'',p=h>=0x0?h['toString']():'',q=c?.['force']?'true':'false',r='send_message:'+this['userAddress']+':'+a+':'+n+':'+o+':'+k+':'+p+':'+m+':'+e+':'+f+':'+q,s=await(await getAccount())['signData'](this['userAddress'],r),t=Buffer['from'](s['signature']['slice'](0x2),'hex'),u=bytesToBase64(new Uint8Array(t)),v=await this['serverClient']['sendMessage']({'sender':s['publicKey'],'recipient':a,'ciphertext':j,'plaintextHash':k,'clientTimestamp':d,'msgType':i['type'],'signatureScheme':'ED25519','signature':u,'timestamp':e,'nonce':f,'guardAddress':c?.['guardAddress'],'passportAddress':c?.['passportAddress'],'force':c?.['force'],'lastReceivedLeafIndex':h>=0x0?h:undefined}),w={'messageId':v['messageId'],'fromAddress':this['userAddress'],'toAddress':a,'plaintextHash':k,'plaintext':b,'guardAddress':c?.['guardAddress'],'passportAddress':c?.['passportAddress'],'lastReceivedLeafIndex':h,'direction':MessageDirection['SENT'],'status':v['status']==='confirmed'?MessageStatus['CONFIRMED']:MessageStatus['PENDING'],'msgType':i['type'],'createdAt':d};v['merkleData']&&(w['leafIndex']=v['merkleData']['leafIndex'],w['prevRoot']=v['merkleData']['prevRoot'],w['newRoot']=v['merkleData']['newRoot'],w['serverSignature']=v['merkleData']['serverSignature'],w['serverTimestamp']=v['merkleData']['serverTimestamp'],w['serverPublicKey']=v['merkleData']['serverPublicKey'],this['sessionStateStorage']['updateSessionState'](this['userAddress'],a,{'currentRoot':v['merkleData']['newRoot'],'prevRoot':v['merkleData']['prevRoot'],'lastLeafIndex':v['merkleData']['leafIndex'],'lastSyncAt':Date['now']()}));this['messageStorage']['saveMessage'](w);if(v['pendingMerkleData'])for(const [x,y]of Object['entries'](v['pendingMerkleData'])){const z=this['messageStorage']['getMessage'](x);z&&z['status']===MessageStatus['PENDING']&&this['messageStorage']['updateMessageStatus'](x,MessageStatus['CONFIRMED'],{'leafIndex':y['leafIndex'],'newRoot':y['newRoot'],'serverSignature':y['serverSignature'],'serverTimestamp':y['serverTimestamp'],'serverPublicKey':y['serverPublicKey']});}return this['triggerFastPoll'](),{'messageId':v['messageId'],'status':w['status'],'merkleData':v['merkleData'],'guardList':v['guard_list'],'lastReceivedLeafIndex':h>=0x0?h:undefined};}async['pullMessages'](a){if(!this['userAddress'])throw new MessengerError(MessengerErrorCode['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'],![]),f=e?.['pubkey']||'',g=await(await getAccount())['signData'](this['userAddress'],d),h=Buffer['from'](g['signature']['slice'](0x2),'hex'),i={'signatureScheme':'ED25519','signature':bytesToBase64(h),'timestamp':b,'nonce':c},j=await this['serverClient']['pullMessages'](this['userAddress'],f,i,a);if(j['messages']['length']===0x0)return{'messages':[],'prekey_status':j['prekey_status']};const k=[],l=[],m=[...j['messages']]['sort'](function(n,o){return(n['clientTimestamp']||0x0)-(o['clientTimestamp']||0x0);});await this['processWaitingMessages'](k,l);for(const n of m){if(this['waitingMessages']['has'](n['id'])){l['push'](n['id']);continue;}if(this['failedMessages']['has'](n['id'])){l['push'](n['id']);continue;}const o=this['messageStorage']['getMessage'](n['id']);if(o){l['push'](n['id']);continue;}const p=await this['tryDecryptMessage'](n);if(p['success']&&p['message']&&p['decryptedData'])this['messageStorage']['saveMessage'](p['message']),k['push'](p['decryptedData']),l['push'](n['id']),this['waitingMessages']['delete'](n['id']);else p['shouldRetry']?(console['warn']('[Messenger]\x20消息\x20'+n['id']+'\x20解密失败,加入等待池:\x20'+p['error']),this['waitingMessages']['set'](n['id'],n)):(console['error']('[Messenger]\x20消息\x20'+n['id']+'\x20解密永久失败:\x20'+p['error']),this['failedMessages']['set'](n['id'],{'message':n,'error':p['error']||'Unknown\x20error'}),await this['saveFailedMessage'](n,p['error']||'Unknown\x20error'),l['push'](n['id']));}this['waitingMessages']['size']>0x0&&this['isPollingRunning']&&this['reschedulePolling']();if(l['length']>0x0&&this['userAddress']){const q=Date['now'](),r=this['generateNonce'](),s=await(await getAccount())['get'](this['userAddress'],![]);if(s?.['pubkey']){const t='ack_messages:'+this['userAddress']+':'+l['join'](',')+':'+s['pubkey']+':'+q+':'+r,u=await(await getAccount())['signData'](this['userAddress'],t),v=Buffer['from'](u['signature']['slice'](0x2),'hex'),w=bytesToBase64(new Uint8Array(v));await this['serverClient']['acknowledgeMessages'](l,u['publicKey'],{'publicKey':u['publicKey'],'signatureScheme':'ED25519','signature':w,'timestamp':q,'nonce':r});}}return{'messages':k,'prekey_status':j['prekey_status']};}['getLastSentLeafIndex'](a){if(!this['userAddress'])return-0x1;const b=this['messageStorage']['getMessagesBySession'](this['userAddress'],a),c=b['filter'](d=>d['direction']===MessageDirection['SENT']&&d['leafIndex']!==undefined);if(c['length']===0x0)return-0x1;return Math['max'](...c['map'](d=>d['leafIndex']));}['getSessionMessages'](a){if(!this['userAddress'])return[];return this['messageStorage']['getMessagesBySession'](this['userAddress'],a);}['getSessionState'](a){if(!this['userAddress'])return undefined;return this['sessionStateStorage']['getSessionState'](this['userAddress'],a);}async['submitChainProof'](a,b,c){if(!this['userAddress'])throw new MessengerError(MessengerErrorCode['IDENTITY_NOT_FOUND'],'User\x20address\x20not\x20set');const d=this['sessionStateStorage']['getSessionState'](this['userAddress'],b);if(!d||!d['currentRoot'])throw new MessengerError(MessengerErrorCode['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(MessengerErrorCode['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('../call/proof.js'),k=new j({'proof':JSON['stringify'](i),'server_pubkey':g,'server_signature':h,'proof_type':CHAIN_PROOF_TYPE,'description':c||'Messenger\x20session\x20proof\x20for\x20'+this['userAddress']+'\x20<->\x20'+b,'item_count':d['messageCount'],'about_address':d['sessionId']}),l=await k['call'](a),m=l?.['objectChanges'],n=m?.['find'](o=>o['objectType']?.['includes']('Proof'))?.['objectId'];return{'proofAddress':n||'','txHash':l?.['digest']||''};}['destroy'](){this['stopPollingTimer']();}['disconnect'](){this['destroy']();}['setOnMessageCallback'](a){this['onMessageCallback']=a;}async['sendZipFile'](a,b,c){if(!this['userAddress'])throw new MessengerError(MessengerErrorCode['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']||a183b['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']>WTS_FILE_BYTES_LIMIT)throw new MessengerError(MessengerErrorCode['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=hashPlaintext(o,r,u,v,q),x=Date['now'](),y=this['generateNonce'](),z=await(await getAccount())['get'](this['userAddress'],![]);if(!z)throw new MessengerError(MessengerErrorCode['IDENTITY_NOT_FOUND'],'User\x20account\x20not\x20found');const A=z['pubkey'],B=q>=0x0?q['toString']():'',C=c?.['force']?'true':'false',D='send_message:'+this['userAddress']+':'+a+':'+u+':'+v+':'+w+':'+B+':'+A+':'+x+':'+y+':'+C,E=await(await getAccount())['signData'](this['userAddress'],D),F=Buffer['from'](E['signature']['slice'](0x2),'hex'),G=bytesToBase64(new Uint8Array(F)),H=await this['serverClient']['sendMessage']({'sender':E['publicKey'],'recipient':a,'ciphertext':t,'plaintextHash':w,'clientTimestamp':r,'msgType':s['type'],'zipMetadata':p,'guardAddress':c?.['guardAddress'],'passportAddress':c?.['passportAddress'],'force':c?.['force'],'lastReceivedLeafIndex':q>=0x0?q:undefined,'signatureScheme':'ED25519','signature':G,'timestamp':x,'nonce':y}),I={'messageId':H['messageId'],'fromAddress':this['userAddress'],'toAddress':a,'plaintextHash':w,'plaintext':o,'guardAddress':c?.['guardAddress'],'passportAddress':c?.['passportAddress'],'lastReceivedLeafIndex':q,'direction':MessageDirection['SENT'],'status':H['status']==='confirmed'?MessageStatus['CONFIRMED']:MessageStatus['PENDING'],'msgType':s['type'],'zipMetadata':p,'createdAt':r};H['merkleData']&&(I['leafIndex']=H['merkleData']['leafIndex'],I['prevRoot']=H['merkleData']['prevRoot'],I['newRoot']=H['merkleData']['newRoot'],I['serverSignature']=H['merkleData']['serverSignature'],I['serverTimestamp']=H['merkleData']['serverTimestamp'],I['serverPublicKey']=H['merkleData']['serverPublicKey'],this['sessionStateStorage']['updateSessionState'](this['userAddress'],a,{'currentRoot':H['merkleData']['newRoot'],'prevRoot':H['merkleData']['prevRoot'],'lastLeafIndex':H['merkleData']['leafIndex'],'lastSyncAt':Date['now']()}));this['messageStorage']['saveMessage'](I);if(H['pendingMerkleData'])for(const [J,K]of Object['entries'](H['pendingMerkleData'])){const L=this['messageStorage']['getMessage'](J);L&&L['status']===MessageStatus['PENDING']&&this['messageStorage']['updateMessageStatus'](J,MessageStatus['CONFIRMED'],{'leafIndex':K['leafIndex'],'newRoot':K['newRoot'],'serverSignature':K['serverSignature'],'serverTimestamp':K['serverTimestamp'],'serverPublicKey':K['serverPublicKey']});}return this['triggerFastPoll'](),{'messageId':H['messageId'],'status':I['status'],'merkleData':H['merkleData'],'guardList':H['guard_list'],'lastReceivedLeafIndex':q>=0x0?q:undefined};}async['loadFileData'](a){if(a['startsWith']('http://')||a['startsWith']('https://')){const d=await fetch(a);if(!d['ok'])throw new MessengerError(MessengerErrorCode['NETWORK_ERROR'],'Failed\x20to\x20fetch\x20file\x20from\x20'+a+':\x20'+d['statusText']);const e=await d['arrayBuffer']();return new Uint8Array(e);}const b=a183b['resolve'](a);if(!a183a['existsSync'](b))throw new MessengerError(MessengerErrorCode['FILE_NOT_FOUND'],'File\x20not\x20found:\x20'+b);const c=a183a['readFileSync'](b);return new Uint8Array(c);}['detectContentType'](a){const b=a183b['extname'](a)['toLowerCase']();switch(b){case'.wts':return'wts';case'.wip':return'wip';default:return'zip';}}async['_createSignedRequest'](a){if(!this['userAddress'])throw new MessengerError(MessengerErrorCode['IDENTITY_NOT_FOUND'],'User\x20address\x20not\x20set');const b=Date['now'](),c=this['generateNonce'](),d=canonicalizeJson(a),e=b+':'+c+':'+d,f=await(await getAccount())['signData'](this['userAddress'],e),g=Buffer['from'](f['signature']['slice'](0x2),'hex'),h=bytesToBase64(new Uint8Array(g)),i=await(await getAccount())['get'](this['userAddress'],![]);if(!i||!i['pubkey'])throw new MessengerError(MessengerErrorCode['IDENTITY_NOT_FOUND'],'Account\x20public\x20key\x20not\x20found');return{'userAddress':this['userAddress'],'publicKey':i['pubkey'],'signatureScheme':'ED25519','signature':h,'timestamp':b,'nonce':c,'data':a};}['_validateAddresses'](a){const b=[],c=[];for(const d of a){isValidWowAddress(d)?b['push'](d):c['push'](d);}return{'valid':b,'invalid':c};}async['addToBlacklist'](a){if(!this['userAddress'])throw new MessengerError(MessengerErrorCode['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(MessengerErrorCode['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(MessengerErrorCode['IDENTITY_NOT_FOUND'],'User\x20address\x20not\x20set');const a={},b=await this['_createSignedRequest'](a);return this['serverClient']['clearBlacklist'](this['userAddress'],b);}async['getBlacklist'](){if(!this['userAddress'])throw new MessengerError(MessengerErrorCode['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(MessengerErrorCode['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(MessengerErrorCode['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(MessengerErrorCode['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(MessengerErrorCode['IDENTITY_NOT_FOUND'],'User\x20address\x20not\x20set');const a={},b=await this['_createSignedRequest'](a);return this['serverClient']['clearFriendsList'](this['userAddress'],b);}async['getFriendsList'](){if(!this['userAddress'])throw new MessengerError(MessengerErrorCode['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(MessengerErrorCode['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(MessengerErrorCode['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(MessengerErrorCode['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(MessengerErrorCode['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(MessengerErrorCode['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(MessengerErrorCode['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']){const h=this['isRetryableError'](c['error']||'');return{'success':![],'shouldRetry':h,'error':c['error'],'sessionUpdated':c['sessionUpdated']};}const d=c['plaintext'];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 e=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']}:undefined});if(!e['valid'])throw new Error(e['error']);const f={'messageId':a['id'],'fromAddress':a['from'],'toAddress':this['userAddress'],'plaintextHash':a['plaintextHash'],'plaintext':d,'guardAddress':a['guardAddress'],'passportAddress':a['passportAddress'],'lastReceivedLeafIndex':a['lastReceivedLeafIndex'],'direction':MessageDirection['RECEIVED'],'status':MessageStatus['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']};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 g=a['merkleMetadata']?.['serverTimestamp']||a['clientTimestamp']||Date['now']();if(a['lastReceivedLeafIndex']!==undefined&&a['lastReceivedLeafIndex']>=0x0){const i=this['messageStorage']['getMessagesBySession'](this['userAddress'],a['from'])['filter'](j=>j['direction']===MessageDirection['SENT']&&j['status']===MessageStatus['CONFIRMED']&&j['leafIndex']!==undefined&&j['leafIndex']<=a['lastReceivedLeafIndex']);for(const j of i){this['messageStorage']['updateMessageStatus'](j['messageId'],MessageStatus['READ']);}}return{'success':!![],'shouldRetry':![],'message':f,'decryptedData':{'id':a['id'],'from':a['from'],'plaintext':d,'timestamp':g,'merkleVerified':!!a['merkleMetadata'],'merkleData':a['merkleMetadata']?{'leafIndex':a['merkleMetadata']['leafIndex'],'rootHash':a['merkleMetadata']['newRoot']}:undefined},'sessionUpdated':c['sessionUpdated']};}catch(k){const l=k instanceof Error?k['message']:String(k),m=this['isRetryableError'](l);return{'success':![],'shouldRetry':m,'error':l};}}['isRetryableError'](a){const b=[/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];return b['some'](c=>c['test'](a));}async['processWaitingMessages'](a,b){if(this['waitingMessages']['size']===0x0)return;console['log']('[Messenger]\x20尝试处理\x20'+this['waitingMessages']['size']+'\x20条等待消息');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'])console['error']('[Messenger]\x20等待消息\x20'+f+'\x20解密永久失败:\x20'+g['error']),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,i=h+0x1;i>=0x3?(console['error']('[Messenger]\x20等待消息\x20'+f+'\x20重试3次后仍失败,标记为永久失败'),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)):(this['waitingMessageRetries']['set'](f,i),console['log']('[Messenger]\x20消息\x20'+f+'\x20第\x20'+i+'/3\x20次重试失败,继续等待'));}}}for(const j of c){this['waitingMessages']['delete'](j);}c['length']>0x0&&console['log']('[Messenger]\x20成功处理\x20'+c['length']+'\x20条等待消息');}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':MessageDirection['RECEIVED'],'status':MessageStatus['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;console['log']('[Messenger]\x20重新调度轮询,切换到快速模式(等待消息:\x20'+this['waitingMessages']['size']+')'),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){a?this['failedMessages']['delete'](a):this['failedMessages']['clear']();}['getWaitingMessageCount'](){return this['waitingMessages']['size'];}}