wowok 2.1.9 → 2.1.12

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 (887) hide show
  1. package/NOTICE +46 -0
  2. package/dist/cjs/bcs/bcs.d.ts +199 -199
  3. package/dist/cjs/bcs/bcs.js +273 -318
  4. package/dist/cjs/bcs/bcs.js.map +1 -0
  5. package/dist/cjs/bcs/effects.d.ts +109 -109
  6. package/dist/cjs/bcs/effects.js +205 -230
  7. package/dist/cjs/bcs/effects.js.map +1 -0
  8. package/dist/cjs/bcs/index.d.ts +1 -2584
  9. package/dist/cjs/bcs/index.js +61 -76
  10. package/dist/cjs/bcs/index.js.map +1 -0
  11. package/dist/cjs/bcs/pure.js +38 -58
  12. package/dist/cjs/bcs/pure.js.map +1 -0
  13. package/dist/cjs/bcs/type-tag-serializer.js +102 -114
  14. package/dist/cjs/bcs/type-tag-serializer.js.map +1 -0
  15. package/dist/cjs/bcs/types.js +6 -23
  16. package/dist/cjs/bcs/types.js.map +1 -0
  17. package/dist/cjs/client/index.js +17 -33
  18. package/dist/cjs/client/index.js.map +1 -0
  19. package/dist/cjs/client/network.js +25 -40
  20. package/dist/cjs/client/network.js.map +1 -0
  21. package/dist/cjs/cryptography/index.js +29 -45
  22. package/dist/cjs/cryptography/index.js.map +1 -0
  23. package/dist/cjs/cryptography/intent.d.ts +1 -1
  24. package/dist/cjs/cryptography/intent.js +20 -31
  25. package/dist/cjs/cryptography/intent.js.map +1 -0
  26. package/dist/cjs/cryptography/keypair.js +102 -116
  27. package/dist/cjs/cryptography/keypair.js.map +1 -0
  28. package/dist/cjs/cryptography/mnemonics.js +43 -41
  29. package/dist/cjs/cryptography/mnemonics.js.map +1 -0
  30. package/dist/cjs/cryptography/publickey.js +112 -134
  31. package/dist/cjs/cryptography/publickey.js.map +1 -0
  32. package/dist/cjs/cryptography/signature-scheme.js +24 -43
  33. package/dist/cjs/cryptography/signature-scheme.js.map +1 -0
  34. package/dist/cjs/cryptography/signature.d.ts +2 -24
  35. package/dist/cjs/cryptography/signature.js +50 -67
  36. package/dist/cjs/cryptography/signature.js.map +1 -0
  37. package/dist/cjs/experimental/cache.js +65 -0
  38. package/dist/cjs/experimental/cache.js.map +1 -0
  39. package/dist/cjs/experimental/client.js +27 -0
  40. package/dist/cjs/experimental/client.js.map +1 -0
  41. package/dist/cjs/experimental/core.js +89 -0
  42. package/dist/cjs/experimental/core.js.map +1 -0
  43. package/dist/cjs/experimental/errors.js +32 -0
  44. package/dist/cjs/experimental/errors.js.map +1 -0
  45. package/dist/cjs/experimental/index.js +15 -0
  46. package/dist/cjs/experimental/index.js.map +1 -0
  47. package/dist/cjs/experimental/persistent-storage.js +343 -0
  48. package/dist/cjs/experimental/persistent-storage.js.map +1 -0
  49. package/dist/cjs/experimental/persistent-storage.test.js +200 -0
  50. package/dist/cjs/experimental/persistent-storage.test.js.map +1 -0
  51. package/dist/cjs/experimental/transports/utils.js +104 -0
  52. package/dist/cjs/experimental/transports/utils.js.map +1 -0
  53. package/dist/cjs/experimental/types.js +6 -0
  54. package/dist/cjs/experimental/types.js.map +1 -0
  55. package/dist/cjs/faucet/faucet.js +106 -124
  56. package/dist/cjs/faucet/faucet.js.map +1 -0
  57. package/dist/cjs/faucet/index.js +12 -28
  58. package/dist/cjs/faucet/index.js.map +1 -0
  59. package/dist/cjs/grpc/client.js +47 -62
  60. package/dist/cjs/grpc/client.js.map +1 -0
  61. package/dist/cjs/grpc/core.js +580 -617
  62. package/dist/cjs/grpc/core.js.map +1 -0
  63. package/dist/cjs/grpc/index.js +9 -25
  64. package/dist/cjs/grpc/index.js.map +1 -0
  65. package/dist/cjs/grpc/proto/google/protobuf/any.js +168 -135
  66. package/dist/cjs/grpc/proto/google/protobuf/any.js.map +1 -0
  67. package/dist/cjs/grpc/proto/google/protobuf/duration.js +105 -90
  68. package/dist/cjs/grpc/proto/google/protobuf/duration.js.map +1 -0
  69. package/dist/cjs/grpc/proto/google/protobuf/empty.js +50 -28
  70. package/dist/cjs/grpc/proto/google/protobuf/empty.js.map +1 -0
  71. package/dist/cjs/grpc/proto/google/protobuf/field_mask.js +96 -75
  72. package/dist/cjs/grpc/proto/google/protobuf/field_mask.js.map +1 -0
  73. package/dist/cjs/grpc/proto/google/protobuf/struct.js +266 -215
  74. package/dist/cjs/grpc/proto/google/protobuf/struct.js.map +1 -0
  75. package/dist/cjs/grpc/proto/google/protobuf/timestamp.js +150 -131
  76. package/dist/cjs/grpc/proto/google/protobuf/timestamp.js.map +1 -0
  77. package/dist/cjs/grpc/proto/google/rpc/error_details.js +331 -302
  78. package/dist/cjs/grpc/proto/google/rpc/error_details.js.map +1 -0
  79. package/dist/cjs/grpc/proto/google/rpc/status.js +50 -50
  80. package/dist/cjs/grpc/proto/google/rpc/status.js.map +1 -0
  81. package/dist/cjs/grpc/proto/sui/rpc/v2/argument.js +84 -68
  82. package/dist/cjs/grpc/proto/sui/rpc/v2/argument.js.map +1 -0
  83. package/dist/cjs/grpc/proto/sui/rpc/v2/balance_change.js +45 -50
  84. package/dist/cjs/grpc/proto/sui/rpc/v2/balance_change.js.map +1 -0
  85. package/dist/cjs/grpc/proto/sui/rpc/v2/bcs.js +38 -43
  86. package/dist/cjs/grpc/proto/sui/rpc/v2/bcs.js.map +1 -0
  87. package/dist/cjs/grpc/proto/sui/rpc/v2/checkpoint.js +70 -75
  88. package/dist/cjs/grpc/proto/sui/rpc/v2/checkpoint.js.map +1 -0
  89. package/dist/cjs/grpc/proto/sui/rpc/v2/checkpoint_contents.js +79 -81
  90. package/dist/cjs/grpc/proto/sui/rpc/v2/checkpoint_contents.js.map +1 -0
  91. package/dist/cjs/grpc/proto/sui/rpc/v2/checkpoint_summary.js +183 -166
  92. package/dist/cjs/grpc/proto/sui/rpc/v2/checkpoint_summary.js.map +1 -0
  93. package/dist/cjs/grpc/proto/sui/rpc/v2/effects.js +369 -296
  94. package/dist/cjs/grpc/proto/sui/rpc/v2/effects.js.map +1 -0
  95. package/dist/cjs/grpc/proto/sui/rpc/v2/epoch.js +80 -85
  96. package/dist/cjs/grpc/proto/sui/rpc/v2/epoch.js.map +1 -0
  97. package/dist/cjs/grpc/proto/sui/rpc/v2/error_reason.js +31 -28
  98. package/dist/cjs/grpc/proto/sui/rpc/v2/error_reason.js.map +1 -0
  99. package/dist/cjs/grpc/proto/sui/rpc/v2/event.js +81 -83
  100. package/dist/cjs/grpc/proto/sui/rpc/v2/event.js.map +1 -0
  101. package/dist/cjs/grpc/proto/sui/rpc/v2/executed_transaction.js +80 -85
  102. package/dist/cjs/grpc/proto/sui/rpc/v2/executed_transaction.js.map +1 -0
  103. package/dist/cjs/grpc/proto/sui/rpc/v2/execution_status.js +876 -506
  104. package/dist/cjs/grpc/proto/sui/rpc/v2/execution_status.js.map +1 -0
  105. package/dist/cjs/grpc/proto/sui/rpc/v2/gas_cost_summary.js +56 -61
  106. package/dist/cjs/grpc/proto/sui/rpc/v2/gas_cost_summary.js.map +1 -0
  107. package/dist/cjs/grpc/proto/sui/rpc/v2/input.js +103 -83
  108. package/dist/cjs/grpc/proto/sui/rpc/v2/input.js.map +1 -0
  109. package/dist/cjs/grpc/proto/sui/rpc/v2/jwk.js +76 -78
  110. package/dist/cjs/grpc/proto/sui/rpc/v2/jwk.js.map +1 -0
  111. package/dist/cjs/grpc/proto/sui/rpc/v2/ledger_service.client.js +69 -119
  112. package/dist/cjs/grpc/proto/sui/rpc/v2/ledger_service.client.js.map +1 -0
  113. package/dist/cjs/grpc/proto/sui/rpc/v2/ledger_service.js +392 -350
  114. package/dist/cjs/grpc/proto/sui/rpc/v2/ledger_service.js.map +1 -0
  115. package/dist/cjs/grpc/proto/sui/rpc/v2/move_package.js +599 -473
  116. package/dist/cjs/grpc/proto/sui/rpc/v2/move_package.js.map +1 -0
  117. package/dist/cjs/grpc/proto/sui/rpc/v2/move_package_service.client.js +46 -78
  118. package/dist/cjs/grpc/proto/sui/rpc/v2/move_package_service.client.js.map +1 -0
  119. package/dist/cjs/grpc/proto/sui/rpc/v2/move_package_service.js +242 -224
  120. package/dist/cjs/grpc/proto/sui/rpc/v2/move_package_service.js.map +1 -0
  121. package/dist/cjs/grpc/proto/sui/rpc/v2/name_service.client.js +32 -52
  122. package/dist/cjs/grpc/proto/sui/rpc/v2/name_service.client.js.map +1 -0
  123. package/dist/cjs/grpc/proto/sui/rpc/v2/name_service.js +139 -134
  124. package/dist/cjs/grpc/proto/sui/rpc/v2/name_service.js.map +1 -0
  125. package/dist/cjs/grpc/proto/sui/rpc/v2/object.js +109 -111
  126. package/dist/cjs/grpc/proto/sui/rpc/v2/object.js.map +1 -0
  127. package/dist/cjs/grpc/proto/sui/rpc/v2/object_reference.js +46 -51
  128. package/dist/cjs/grpc/proto/sui/rpc/v2/object_reference.js.map +1 -0
  129. package/dist/cjs/grpc/proto/sui/rpc/v2/owner.js +76 -61
  130. package/dist/cjs/grpc/proto/sui/rpc/v2/owner.js.map +1 -0
  131. package/dist/cjs/grpc/proto/sui/rpc/v2/protocol_config.js +46 -59
  132. package/dist/cjs/grpc/proto/sui/rpc/v2/protocol_config.js.map +1 -0
  133. package/dist/cjs/grpc/proto/sui/rpc/v2/signature.js +568 -522
  134. package/dist/cjs/grpc/proto/sui/rpc/v2/signature.js.map +1 -0
  135. package/dist/cjs/grpc/proto/sui/rpc/v2/signature_scheme.js +54 -32
  136. package/dist/cjs/grpc/proto/sui/rpc/v2/signature_scheme.js.map +1 -0
  137. package/dist/cjs/grpc/proto/sui/rpc/v2/signature_verification_service.client.js +27 -47
  138. package/dist/cjs/grpc/proto/sui/rpc/v2/signature_verification_service.client.js.map +1 -0
  139. package/dist/cjs/grpc/proto/sui/rpc/v2/signature_verification_service.js +83 -86
  140. package/dist/cjs/grpc/proto/sui/rpc/v2/signature_verification_service.js.map +1 -0
  141. package/dist/cjs/grpc/proto/sui/rpc/v2/state_service.client.js +53 -85
  142. package/dist/cjs/grpc/proto/sui/rpc/v2/state_service.client.js.map +1 -0
  143. package/dist/cjs/grpc/proto/sui/rpc/v2/state_service.js +645 -529
  144. package/dist/cjs/grpc/proto/sui/rpc/v2/state_service.js.map +1 -0
  145. package/dist/cjs/grpc/proto/sui/rpc/v2/subscription_service.client.js +37 -51
  146. package/dist/cjs/grpc/proto/sui/rpc/v2/subscription_service.client.js.map +1 -0
  147. package/dist/cjs/grpc/proto/sui/rpc/v2/subscription_service.js +58 -61
  148. package/dist/cjs/grpc/proto/sui/rpc/v2/subscription_service.js.map +1 -0
  149. package/dist/cjs/grpc/proto/sui/rpc/v2/system_state.js +749 -730
  150. package/dist/cjs/grpc/proto/sui/rpc/v2/system_state.js.map +1 -0
  151. package/dist/cjs/grpc/proto/sui/rpc/v2/transaction.js +1218 -975
  152. package/dist/cjs/grpc/proto/sui/rpc/v2/transaction.js.map +1 -0
  153. package/dist/cjs/grpc/proto/sui/rpc/v2/transaction_execution_service.client.js +32 -46
  154. package/dist/cjs/grpc/proto/sui/rpc/v2/transaction_execution_service.client.js.map +1 -0
  155. package/dist/cjs/grpc/proto/sui/rpc/v2/transaction_execution_service.js +186 -167
  156. package/dist/cjs/grpc/proto/sui/rpc/v2/transaction_execution_service.js.map +1 -0
  157. package/dist/cjs/index.js +96 -91
  158. package/dist/cjs/index.js.map +1 -0
  159. package/dist/cjs/jsonRpc/client.js +654 -743
  160. package/dist/cjs/jsonRpc/client.js.map +1 -0
  161. package/dist/cjs/jsonRpc/core.d.ts +7 -7
  162. package/dist/cjs/jsonRpc/core.js +562 -606
  163. package/dist/cjs/jsonRpc/core.js.map +1 -0
  164. package/dist/cjs/jsonRpc/errors.js +38 -56
  165. package/dist/cjs/jsonRpc/errors.js.map +1 -0
  166. package/dist/cjs/jsonRpc/http-transport.js +70 -114
  167. package/dist/cjs/jsonRpc/http-transport.js.map +1 -0
  168. package/dist/cjs/jsonRpc/index.js +14 -30
  169. package/dist/cjs/jsonRpc/index.js.map +1 -0
  170. package/dist/cjs/jsonRpc/json-rpc-resolver.js +286 -290
  171. package/dist/cjs/jsonRpc/json-rpc-resolver.js.map +1 -0
  172. package/dist/cjs/jsonRpc/rpc-websocket-client.js +150 -207
  173. package/dist/cjs/jsonRpc/rpc-websocket-client.js.map +1 -0
  174. package/dist/cjs/jsonRpc/types/chain.js +4 -15
  175. package/dist/cjs/jsonRpc/types/chain.js.map +1 -0
  176. package/dist/cjs/jsonRpc/types/changes.js +4 -15
  177. package/dist/cjs/jsonRpc/types/changes.js.map +1 -0
  178. package/dist/cjs/jsonRpc/types/coins.js +4 -15
  179. package/dist/cjs/jsonRpc/types/coins.js.map +1 -0
  180. package/dist/cjs/jsonRpc/types/common.js +4 -15
  181. package/dist/cjs/jsonRpc/types/common.js.map +1 -0
  182. package/dist/cjs/jsonRpc/types/generated.d.ts +1 -1
  183. package/dist/cjs/jsonRpc/types/generated.js +4 -15
  184. package/dist/cjs/jsonRpc/types/generated.js.map +1 -0
  185. package/dist/cjs/jsonRpc/types/index.js +4 -15
  186. package/dist/cjs/jsonRpc/types/index.js.map +1 -0
  187. package/dist/cjs/jsonRpc/types/params.js +4 -15
  188. package/dist/cjs/jsonRpc/types/params.js.map +1 -0
  189. package/dist/cjs/keypairs/ed25519/ed25519-hd-key.js +54 -69
  190. package/dist/cjs/keypairs/ed25519/ed25519-hd-key.js.map +1 -0
  191. package/dist/cjs/keypairs/ed25519/index.js +10 -26
  192. package/dist/cjs/keypairs/ed25519/index.js.map +1 -0
  193. package/dist/cjs/keypairs/ed25519/keypair.js +134 -159
  194. package/dist/cjs/keypairs/ed25519/keypair.js.map +1 -0
  195. package/dist/cjs/keypairs/ed25519/publickey.js +70 -84
  196. package/dist/cjs/keypairs/ed25519/publickey.js.map +1 -0
  197. package/dist/cjs/keypairs/index.js +21 -19
  198. package/dist/cjs/keypairs/index.js.map +1 -0
  199. package/dist/cjs/keypairs/passkey/index.js +11 -27
  200. package/dist/cjs/keypairs/passkey/index.js.map +1 -0
  201. package/dist/cjs/keypairs/passkey/keypair.js +245 -256
  202. package/dist/cjs/keypairs/passkey/keypair.js.map +1 -0
  203. package/dist/cjs/keypairs/passkey/publickey.js +163 -162
  204. package/dist/cjs/keypairs/passkey/publickey.js.map +1 -0
  205. package/dist/cjs/keypairs/passkey/types.js +4 -15
  206. package/dist/cjs/keypairs/passkey/types.js.map +1 -0
  207. package/dist/cjs/keypairs/secp256k1/index.js +10 -26
  208. package/dist/cjs/keypairs/secp256k1/index.js.map +1 -0
  209. package/dist/cjs/keypairs/secp256k1/keypair.js +129 -151
  210. package/dist/cjs/keypairs/secp256k1/keypair.js.map +1 -0
  211. package/dist/cjs/keypairs/secp256k1/publickey.js +71 -89
  212. package/dist/cjs/keypairs/secp256k1/publickey.js.map +1 -0
  213. package/dist/cjs/keypairs/secp256r1/index.js +10 -26
  214. package/dist/cjs/keypairs/secp256r1/index.js.map +1 -0
  215. package/dist/cjs/keypairs/secp256r1/keypair.js +127 -148
  216. package/dist/cjs/keypairs/secp256r1/keypair.js.map +1 -0
  217. package/dist/cjs/keypairs/secp256r1/publickey.js +72 -90
  218. package/dist/cjs/keypairs/secp256r1/publickey.js.map +1 -0
  219. package/dist/cjs/multisig/index.js +10 -26
  220. package/dist/cjs/multisig/index.js.map +1 -0
  221. package/dist/cjs/multisig/publickey.d.ts +1 -1
  222. package/dist/cjs/multisig/publickey.js +228 -276
  223. package/dist/cjs/multisig/publickey.js.map +1 -0
  224. package/dist/cjs/multisig/signer.js +62 -110
  225. package/dist/cjs/multisig/signer.js.map +1 -0
  226. package/dist/cjs/transactions/Arguments.d.ts +4 -4
  227. package/dist/cjs/transactions/Arguments.js +13 -34
  228. package/dist/cjs/transactions/Arguments.js.map +1 -0
  229. package/dist/cjs/transactions/Commands.js +111 -141
  230. package/dist/cjs/transactions/Commands.js.map +1 -0
  231. package/dist/cjs/transactions/Inputs.js +53 -82
  232. package/dist/cjs/transactions/Inputs.js.map +1 -0
  233. package/dist/cjs/transactions/ObjectCache.d.ts +8 -8
  234. package/dist/cjs/transactions/ObjectCache.js +204 -241
  235. package/dist/cjs/transactions/ObjectCache.js.map +1 -0
  236. package/dist/cjs/transactions/Transaction.d.ts +31 -31
  237. package/dist/cjs/transactions/Transaction.js +628 -719
  238. package/dist/cjs/transactions/Transaction.js.map +1 -0
  239. package/dist/cjs/transactions/TransactionData.d.ts +9 -9
  240. package/dist/cjs/transactions/TransactionData.js +396 -440
  241. package/dist/cjs/transactions/TransactionData.js.map +1 -0
  242. package/dist/cjs/transactions/__tests__/Transaction.test.js +169 -0
  243. package/dist/cjs/transactions/__tests__/Transaction.test.js.map +1 -0
  244. package/dist/cjs/transactions/__tests__/bcs.test.js +202 -0
  245. package/dist/cjs/transactions/__tests__/bcs.test.js.map +1 -0
  246. package/dist/cjs/transactions/data/internal.js +166 -207
  247. package/dist/cjs/transactions/data/internal.js.map +1 -0
  248. package/dist/cjs/transactions/data/v1.js +436 -495
  249. package/dist/cjs/transactions/data/v1.js.map +1 -0
  250. package/dist/cjs/transactions/data/v2.d.ts +5 -5
  251. package/dist/cjs/transactions/data/v2.js +94 -107
  252. package/dist/cjs/transactions/data/v2.js.map +1 -0
  253. package/dist/cjs/transactions/executor/caching.js +71 -113
  254. package/dist/cjs/transactions/executor/caching.js.map +1 -0
  255. package/dist/cjs/transactions/executor/parallel.js +339 -378
  256. package/dist/cjs/transactions/executor/parallel.js.map +1 -0
  257. package/dist/cjs/transactions/executor/queue.js +60 -80
  258. package/dist/cjs/transactions/executor/queue.js.map +1 -0
  259. package/dist/cjs/transactions/executor/serial.d.ts +4 -4
  260. package/dist/cjs/transactions/executor/serial.js +102 -131
  261. package/dist/cjs/transactions/executor/serial.js.map +1 -0
  262. package/dist/cjs/transactions/hash.js +17 -28
  263. package/dist/cjs/transactions/hash.js.map +1 -0
  264. package/dist/cjs/transactions/index.js +33 -49
  265. package/dist/cjs/transactions/index.js.map +1 -0
  266. package/dist/cjs/transactions/intents/CoinWithBalance.js +137 -191
  267. package/dist/cjs/transactions/intents/CoinWithBalance.js.map +1 -0
  268. package/dist/cjs/transactions/object.js +88 -111
  269. package/dist/cjs/transactions/object.js.map +1 -0
  270. package/dist/cjs/transactions/plugins/NamedPackagesPlugin.js +20 -32
  271. package/dist/cjs/transactions/plugins/NamedPackagesPlugin.js.map +1 -0
  272. package/dist/cjs/transactions/pure.js +38 -60
  273. package/dist/cjs/transactions/pure.js.map +1 -0
  274. package/dist/cjs/transactions/resolve.js +62 -88
  275. package/dist/cjs/transactions/resolve.js.map +1 -0
  276. package/dist/cjs/transactions/serializer.js +150 -163
  277. package/dist/cjs/transactions/serializer.js.map +1 -0
  278. package/dist/cjs/transactions/utils.d.ts +1 -1
  279. package/dist/cjs/transactions/utils.js +114 -125
  280. package/dist/cjs/transactions/utils.js.map +1 -0
  281. package/dist/cjs/utils/constants.js +29 -56
  282. package/dist/cjs/utils/constants.js.map +1 -0
  283. package/dist/cjs/utils/derived-objects.js +14 -30
  284. package/dist/cjs/utils/derived-objects.js.map +1 -0
  285. package/dist/cjs/utils/dynamic-fields.js +20 -37
  286. package/dist/cjs/utils/dynamic-fields.js.map +1 -0
  287. package/dist/cjs/utils/format.js +14 -30
  288. package/dist/cjs/utils/format.js.map +1 -0
  289. package/dist/cjs/utils/index.js +50 -64
  290. package/dist/cjs/utils/index.js.map +1 -0
  291. package/dist/cjs/utils/move-registry.js +37 -35
  292. package/dist/cjs/utils/move-registry.js.map +1 -0
  293. package/dist/cjs/utils/sui-types.js +74 -68
  294. package/dist/cjs/utils/sui-types.js.map +1 -0
  295. package/dist/cjs/utils/suins.js +30 -46
  296. package/dist/cjs/utils/suins.js.map +1 -0
  297. package/dist/cjs/verify/index.js +12 -27
  298. package/dist/cjs/verify/index.js.map +1 -0
  299. package/dist/cjs/verify/verify.js +83 -110
  300. package/dist/cjs/verify/verify.js.map +1 -0
  301. package/dist/cjs/version.js +8 -25
  302. package/dist/cjs/version.js.map +1 -0
  303. package/dist/cjs/w/call/allocation.js +323 -413
  304. package/dist/cjs/w/call/allocation.js.map +1 -0
  305. package/dist/cjs/w/call/arb.js +105 -136
  306. package/dist/cjs/w/call/arb.js.map +1 -0
  307. package/dist/cjs/w/call/arbitration.js +1206 -1581
  308. package/dist/cjs/w/call/arbitration.js.map +1 -0
  309. package/dist/cjs/w/call/base.js +303 -333
  310. package/dist/cjs/w/call/base.js.map +1 -0
  311. package/dist/cjs/w/call/contact.js +335 -452
  312. package/dist/cjs/w/call/contact.js.map +1 -0
  313. package/dist/cjs/w/call/demand.js +690 -844
  314. package/dist/cjs/w/call/demand.js.map +1 -0
  315. package/dist/cjs/w/call/entity.js +167 -201
  316. package/dist/cjs/w/call/entity.js.map +1 -0
  317. package/dist/cjs/w/call/guard-ins.d.ts +1 -0
  318. package/dist/cjs/w/call/guard-ins.js +4376 -4384
  319. package/dist/cjs/w/call/guard-ins.js.map +1 -0
  320. package/dist/cjs/w/call/guard.d.ts +10 -0
  321. package/dist/cjs/w/call/guard.js +1078 -1119
  322. package/dist/cjs/w/call/guard.js.map +1 -0
  323. package/dist/cjs/w/call/index.d.ts +1 -1
  324. package/dist/cjs/w/call/index.js +69 -69
  325. package/dist/cjs/w/call/index.js.map +1 -0
  326. package/dist/cjs/w/call/machine.js +1105 -1419
  327. package/dist/cjs/w/call/machine.js.map +1 -0
  328. package/dist/cjs/w/call/order.js +314 -454
  329. package/dist/cjs/w/call/order.js.map +1 -0
  330. package/dist/cjs/w/call/passport.js +214 -253
  331. package/dist/cjs/w/call/passport.js.map +1 -0
  332. package/dist/cjs/w/call/payment.js +187 -224
  333. package/dist/cjs/w/call/payment.js.map +1 -0
  334. package/dist/cjs/w/call/permission.js +1183 -1294
  335. package/dist/cjs/w/call/permission.js.map +1 -0
  336. package/dist/cjs/w/call/personal.js +132 -170
  337. package/dist/cjs/w/call/personal.js.map +1 -0
  338. package/dist/cjs/w/call/progress.js +634 -794
  339. package/dist/cjs/w/call/progress.js.map +1 -0
  340. package/dist/cjs/w/call/proof.js +67 -116
  341. package/dist/cjs/w/call/proof.js.map +1 -0
  342. package/dist/cjs/w/call/repository.js +1037 -1251
  343. package/dist/cjs/w/call/repository.js.map +1 -0
  344. package/dist/cjs/w/call/resource.js +111 -131
  345. package/dist/cjs/w/call/resource.js.map +1 -0
  346. package/dist/cjs/w/call/reward.js +675 -853
  347. package/dist/cjs/w/call/reward.js.map +1 -0
  348. package/dist/cjs/w/call/service.js +1879 -2385
  349. package/dist/cjs/w/call/service.js.map +1 -0
  350. package/dist/cjs/w/call/treasury.js +841 -1138
  351. package/dist/cjs/w/call/treasury.js.map +1 -0
  352. package/dist/cjs/w/call/util.js +593 -624
  353. package/dist/cjs/w/call/util.js.map +1 -0
  354. package/dist/cjs/w/common.d.ts +1 -1
  355. package/dist/cjs/w/common.js +548 -518
  356. package/dist/cjs/w/common.js.map +1 -0
  357. package/dist/cjs/w/exception.js +574 -584
  358. package/dist/cjs/w/exception.js.map +1 -0
  359. package/dist/cjs/w/index.js +26 -23
  360. package/dist/cjs/w/index.js.map +1 -0
  361. package/dist/cjs/w/local/account.js +664 -741
  362. package/dist/cjs/w/local/account.js.map +1 -0
  363. package/dist/cjs/w/local/cache.js +180 -166
  364. package/dist/cjs/w/local/cache.js.map +1 -0
  365. package/dist/cjs/w/local/config.js +51 -80
  366. package/dist/cjs/w/local/config.js.map +1 -0
  367. package/dist/cjs/w/local/index.js +225 -290
  368. package/dist/cjs/w/local/index.js.map +1 -0
  369. package/dist/cjs/w/local/local.d.ts +2 -2
  370. package/dist/cjs/w/local/local.js +638 -646
  371. package/dist/cjs/w/local/local.js.map +1 -0
  372. package/dist/cjs/w/local/storage.js +210 -164
  373. package/dist/cjs/w/local/storage.js.map +1 -0
  374. package/dist/cjs/w/local/token.js +158 -175
  375. package/dist/cjs/w/local/token.js.map +1 -0
  376. package/dist/cjs/w/local/util.js +80 -51
  377. package/dist/cjs/w/local/util.js.map +1 -0
  378. package/dist/cjs/w/local/wip.js +1078 -802
  379. package/dist/cjs/w/local/wip.js.map +1 -0
  380. package/dist/cjs/w/messenger/crypto.js +496 -389
  381. package/dist/cjs/w/messenger/crypto.js.map +1 -0
  382. package/dist/cjs/w/messenger/index.js +53 -35
  383. package/dist/cjs/w/messenger/index.js.map +1 -0
  384. package/dist/cjs/w/messenger/messenger-api.js +1159 -1035
  385. package/dist/cjs/w/messenger/messenger-api.js.map +1 -0
  386. package/dist/cjs/w/messenger/messenger-manager.js +954 -1083
  387. package/dist/cjs/w/messenger/messenger-manager.js.map +1 -0
  388. package/dist/cjs/w/messenger/messenger.d.ts +1 -1
  389. package/dist/cjs/w/messenger/messenger.js +1304 -1450
  390. package/dist/cjs/w/messenger/messenger.js.map +1 -0
  391. package/dist/cjs/w/messenger/server.js +390 -512
  392. package/dist/cjs/w/messenger/server.js.map +1 -0
  393. package/dist/cjs/w/messenger/session.js +399 -403
  394. package/dist/cjs/w/messenger/session.js.map +1 -0
  395. package/dist/cjs/w/messenger/storage.js +881 -777
  396. package/dist/cjs/w/messenger/storage.js.map +1 -0
  397. package/dist/cjs/w/messenger/types.d.ts +2 -2
  398. package/dist/cjs/w/messenger/types.js +83 -103
  399. package/dist/cjs/w/messenger/types.js.map +1 -0
  400. package/dist/cjs/w/messenger/utils.js +29 -34
  401. package/dist/cjs/w/messenger/utils.js.map +1 -0
  402. package/dist/cjs/w/query/bult-in.js +101 -110
  403. package/dist/cjs/w/query/bult-in.js.map +1 -0
  404. package/dist/cjs/w/query/event.js +134 -146
  405. package/dist/cjs/w/query/event.js.map +1 -0
  406. package/dist/cjs/w/query/index.js +22 -20
  407. package/dist/cjs/w/query/index.js.map +1 -0
  408. package/dist/cjs/w/query/object.js +1576 -1576
  409. package/dist/cjs/w/query/object.js.map +1 -0
  410. package/dist/cjs/w/query/received.js +66 -88
  411. package/dist/cjs/w/query/received.js.map +1 -0
  412. package/dist/cjs/w/query/util.js +53 -77
  413. package/dist/cjs/w/query/util.js.map +1 -0
  414. package/dist/cjs/w/util.js +589 -675
  415. package/dist/cjs/w/util.js.map +1 -0
  416. package/dist/esm/bcs/bcs.d.ts +199 -199
  417. package/dist/esm/bcs/bcs.js +269 -310
  418. package/dist/esm/bcs/bcs.js.map +1 -0
  419. package/dist/esm/bcs/effects.d.ts +109 -109
  420. package/dist/esm/bcs/effects.js +171 -179
  421. package/dist/esm/bcs/effects.js.map +1 -0
  422. package/dist/esm/bcs/index.d.ts +1 -2584
  423. package/dist/esm/bcs/index.js +51 -94
  424. package/dist/esm/bcs/index.js.map +1 -0
  425. package/dist/esm/bcs/pure.js +35 -38
  426. package/dist/esm/bcs/pure.js.map +1 -0
  427. package/dist/esm/bcs/type-tag-serializer.js +98 -95
  428. package/dist/esm/bcs/type-tag-serializer.js.map +1 -0
  429. package/dist/esm/bcs/types.js +5 -5
  430. package/dist/esm/bcs/types.js.map +1 -0
  431. package/dist/esm/client/index.js +7 -23
  432. package/dist/esm/client/index.js.map +1 -0
  433. package/dist/esm/client/network.js +23 -22
  434. package/dist/esm/client/network.js.map +1 -0
  435. package/dist/esm/cryptography/index.js +9 -46
  436. package/dist/esm/cryptography/index.js.map +1 -0
  437. package/dist/esm/cryptography/intent.d.ts +1 -1
  438. package/dist/esm/cryptography/intent.js +18 -12
  439. package/dist/esm/cryptography/intent.js.map +1 -0
  440. package/dist/esm/cryptography/keypair.js +95 -99
  441. package/dist/esm/cryptography/keypair.js.map +1 -0
  442. package/dist/esm/cryptography/mnemonics.js +40 -24
  443. package/dist/esm/cryptography/mnemonics.js.map +1 -0
  444. package/dist/esm/cryptography/publickey.js +104 -115
  445. package/dist/esm/cryptography/publickey.js.map +1 -0
  446. package/dist/esm/cryptography/signature-scheme.js +22 -24
  447. package/dist/esm/cryptography/signature-scheme.js.map +1 -0
  448. package/dist/esm/cryptography/signature.d.ts +2 -24
  449. package/dist/esm/cryptography/signature.js +44 -48
  450. package/dist/esm/cryptography/signature.js.map +1 -0
  451. package/dist/esm/experimental/cache.js +61 -0
  452. package/dist/esm/experimental/cache.js.map +1 -0
  453. package/dist/esm/experimental/client.js +23 -0
  454. package/dist/esm/experimental/client.js.map +1 -0
  455. package/dist/esm/experimental/core.js +85 -0
  456. package/dist/esm/experimental/core.js.map +1 -0
  457. package/dist/esm/experimental/errors.js +27 -0
  458. package/dist/esm/experimental/errors.js.map +1 -0
  459. package/dist/esm/experimental/index.js +8 -0
  460. package/dist/esm/experimental/index.js.map +1 -0
  461. package/dist/esm/experimental/persistent-storage.js +337 -0
  462. package/dist/esm/experimental/persistent-storage.js.map +1 -0
  463. package/dist/esm/experimental/persistent-storage.test.js +198 -0
  464. package/dist/esm/experimental/persistent-storage.test.js.map +1 -0
  465. package/dist/esm/experimental/transports/utils.js +100 -0
  466. package/dist/esm/experimental/transports/utils.js.map +1 -0
  467. package/dist/esm/experimental/types.js +5 -0
  468. package/dist/esm/experimental/types.js.map +1 -0
  469. package/dist/esm/faucet/faucet.js +104 -111
  470. package/dist/esm/faucet/faucet.js.map +1 -0
  471. package/dist/esm/faucet/index.js +4 -16
  472. package/dist/esm/faucet/index.js.map +1 -0
  473. package/dist/esm/grpc/client.js +34 -34
  474. package/dist/esm/grpc/client.js.map +1 -0
  475. package/dist/esm/grpc/core.js +570 -601
  476. package/dist/esm/grpc/core.js.map +1 -0
  477. package/dist/esm/grpc/index.js +5 -6
  478. package/dist/esm/grpc/index.js.map +1 -0
  479. package/dist/esm/grpc/proto/google/protobuf/any.js +161 -111
  480. package/dist/esm/grpc/proto/google/protobuf/any.js.map +1 -0
  481. package/dist/esm/grpc/proto/google/protobuf/duration.js +99 -67
  482. package/dist/esm/grpc/proto/google/protobuf/duration.js.map +1 -0
  483. package/dist/esm/grpc/proto/google/protobuf/empty.js +46 -7
  484. package/dist/esm/grpc/proto/google/protobuf/empty.js.map +1 -0
  485. package/dist/esm/grpc/proto/google/protobuf/field_mask.js +90 -52
  486. package/dist/esm/grpc/proto/google/protobuf/field_mask.js.map +1 -0
  487. package/dist/esm/grpc/proto/google/protobuf/struct.js +258 -190
  488. package/dist/esm/grpc/proto/google/protobuf/struct.js.map +1 -0
  489. package/dist/esm/grpc/proto/google/protobuf/timestamp.js +144 -108
  490. package/dist/esm/grpc/proto/google/protobuf/timestamp.js.map +1 -0
  491. package/dist/esm/grpc/proto/google/rpc/error_details.js +313 -267
  492. package/dist/esm/grpc/proto/google/rpc/error_details.js.map +1 -0
  493. package/dist/esm/grpc/proto/google/rpc/status.js +45 -28
  494. package/dist/esm/grpc/proto/google/rpc/status.js.map +1 -0
  495. package/dist/esm/grpc/proto/sui/rpc/v2/argument.js +80 -47
  496. package/dist/esm/grpc/proto/sui/rpc/v2/argument.js.map +1 -0
  497. package/dist/esm/grpc/proto/sui/rpc/v2/balance_change.js +41 -29
  498. package/dist/esm/grpc/proto/sui/rpc/v2/balance_change.js.map +1 -0
  499. package/dist/esm/grpc/proto/sui/rpc/v2/bcs.js +34 -22
  500. package/dist/esm/grpc/proto/sui/rpc/v2/bcs.js.map +1 -0
  501. package/dist/esm/grpc/proto/sui/rpc/v2/checkpoint.js +61 -49
  502. package/dist/esm/grpc/proto/sui/rpc/v2/checkpoint.js.map +1 -0
  503. package/dist/esm/grpc/proto/sui/rpc/v2/checkpoint_contents.js +72 -57
  504. package/dist/esm/grpc/proto/sui/rpc/v2/checkpoint_contents.js.map +1 -0
  505. package/dist/esm/grpc/proto/sui/rpc/v2/checkpoint_summary.js +173 -139
  506. package/dist/esm/grpc/proto/sui/rpc/v2/checkpoint_summary.js.map +1 -0
  507. package/dist/esm/grpc/proto/sui/rpc/v2/effects.js +358 -268
  508. package/dist/esm/grpc/proto/sui/rpc/v2/effects.js.map +1 -0
  509. package/dist/esm/grpc/proto/sui/rpc/v2/epoch.js +72 -60
  510. package/dist/esm/grpc/proto/sui/rpc/v2/epoch.js.map +1 -0
  511. package/dist/esm/grpc/proto/sui/rpc/v2/error_reason.js +29 -9
  512. package/dist/esm/grpc/proto/sui/rpc/v2/error_reason.js.map +1 -0
  513. package/dist/esm/grpc/proto/sui/rpc/v2/event.js +74 -59
  514. package/dist/esm/grpc/proto/sui/rpc/v2/event.js.map +1 -0
  515. package/dist/esm/grpc/proto/sui/rpc/v2/executed_transaction.js +69 -57
  516. package/dist/esm/grpc/proto/sui/rpc/v2/executed_transaction.js.map +1 -0
  517. package/dist/esm/grpc/proto/sui/rpc/v2/execution_status.js +861 -474
  518. package/dist/esm/grpc/proto/sui/rpc/v2/execution_status.js.map +1 -0
  519. package/dist/esm/grpc/proto/sui/rpc/v2/gas_cost_summary.js +52 -40
  520. package/dist/esm/grpc/proto/sui/rpc/v2/gas_cost_summary.js.map +1 -0
  521. package/dist/esm/grpc/proto/sui/rpc/v2/input.js +98 -61
  522. package/dist/esm/grpc/proto/sui/rpc/v2/input.js.map +1 -0
  523. package/dist/esm/grpc/proto/sui/rpc/v2/jwk.js +71 -56
  524. package/dist/esm/grpc/proto/sui/rpc/v2/jwk.js.map +1 -0
  525. package/dist/esm/grpc/proto/sui/rpc/v2/ledger_service.client.js +65 -100
  526. package/dist/esm/grpc/proto/sui/rpc/v2/ledger_service.client.js.map +1 -0
  527. package/dist/esm/grpc/proto/sui/rpc/v2/ledger_service.js +365 -306
  528. package/dist/esm/grpc/proto/sui/rpc/v2/ledger_service.js.map +1 -0
  529. package/dist/esm/grpc/proto/sui/rpc/v2/move_package.js +585 -442
  530. package/dist/esm/grpc/proto/sui/rpc/v2/move_package.js.map +1 -0
  531. package/dist/esm/grpc/proto/sui/rpc/v2/move_package_service.client.js +42 -59
  532. package/dist/esm/grpc/proto/sui/rpc/v2/move_package_service.client.js.map +1 -0
  533. package/dist/esm/grpc/proto/sui/rpc/v2/move_package_service.js +226 -191
  534. package/dist/esm/grpc/proto/sui/rpc/v2/move_package_service.js.map +1 -0
  535. package/dist/esm/grpc/proto/sui/rpc/v2/name_service.client.js +28 -33
  536. package/dist/esm/grpc/proto/sui/rpc/v2/name_service.client.js.map +1 -0
  537. package/dist/esm/grpc/proto/sui/rpc/v2/name_service.js +129 -107
  538. package/dist/esm/grpc/proto/sui/rpc/v2/name_service.js.map +1 -0
  539. package/dist/esm/grpc/proto/sui/rpc/v2/object.js +100 -85
  540. package/dist/esm/grpc/proto/sui/rpc/v2/object.js.map +1 -0
  541. package/dist/esm/grpc/proto/sui/rpc/v2/object_reference.js +42 -30
  542. package/dist/esm/grpc/proto/sui/rpc/v2/object_reference.js.map +1 -0
  543. package/dist/esm/grpc/proto/sui/rpc/v2/owner.js +72 -40
  544. package/dist/esm/grpc/proto/sui/rpc/v2/owner.js.map +1 -0
  545. package/dist/esm/grpc/proto/sui/rpc/v2/protocol_config.js +42 -38
  546. package/dist/esm/grpc/proto/sui/rpc/v2/protocol_config.js.map +1 -0
  547. package/dist/esm/grpc/proto/sui/rpc/v2/signature.js +544 -481
  548. package/dist/esm/grpc/proto/sui/rpc/v2/signature.js.map +1 -0
  549. package/dist/esm/grpc/proto/sui/rpc/v2/signature_scheme.js +52 -13
  550. package/dist/esm/grpc/proto/sui/rpc/v2/signature_scheme.js.map +1 -0
  551. package/dist/esm/grpc/proto/sui/rpc/v2/signature_verification_service.client.js +23 -28
  552. package/dist/esm/grpc/proto/sui/rpc/v2/signature_verification_service.client.js.map +1 -0
  553. package/dist/esm/grpc/proto/sui/rpc/v2/signature_verification_service.js +74 -60
  554. package/dist/esm/grpc/proto/sui/rpc/v2/signature_verification_service.js.map +1 -0
  555. package/dist/esm/grpc/proto/sui/rpc/v2/state_service.client.js +49 -66
  556. package/dist/esm/grpc/proto/sui/rpc/v2/state_service.client.js.map +1 -0
  557. package/dist/esm/grpc/proto/sui/rpc/v2/state_service.js +623 -490
  558. package/dist/esm/grpc/proto/sui/rpc/v2/state_service.js.map +1 -0
  559. package/dist/esm/grpc/proto/sui/rpc/v2/subscription_service.client.js +33 -32
  560. package/dist/esm/grpc/proto/sui/rpc/v2/subscription_service.client.js.map +1 -0
  561. package/dist/esm/grpc/proto/sui/rpc/v2/subscription_service.js +50 -36
  562. package/dist/esm/grpc/proto/sui/rpc/v2/subscription_service.js.map +1 -0
  563. package/dist/esm/grpc/proto/sui/rpc/v2/system_state.js +737 -701
  564. package/dist/esm/grpc/proto/sui/rpc/v2/system_state.js.map +1 -0
  565. package/dist/esm/grpc/proto/sui/rpc/v2/transaction.js +1177 -917
  566. package/dist/esm/grpc/proto/sui/rpc/v2/transaction.js.map +1 -0
  567. package/dist/esm/grpc/proto/sui/rpc/v2/transaction_execution_service.client.js +28 -27
  568. package/dist/esm/grpc/proto/sui/rpc/v2/transaction_execution_service.client.js.map +1 -0
  569. package/dist/esm/grpc/proto/sui/rpc/v2/transaction_execution_service.js +169 -133
  570. package/dist/esm/grpc/proto/sui/rpc/v2/transaction_execution_service.js.map +1 -0
  571. package/dist/esm/index.js +21 -107
  572. package/dist/esm/index.js.map +1 -0
  573. package/dist/esm/jsonRpc/client.js +646 -727
  574. package/dist/esm/jsonRpc/client.js.map +1 -0
  575. package/dist/esm/jsonRpc/core.d.ts +7 -7
  576. package/dist/esm/jsonRpc/core.js +550 -581
  577. package/dist/esm/jsonRpc/core.js.map +1 -0
  578. package/dist/esm/jsonRpc/errors.js +36 -41
  579. package/dist/esm/jsonRpc/errors.js.map +1 -0
  580. package/dist/esm/jsonRpc/http-transport.js +65 -93
  581. package/dist/esm/jsonRpc/http-transport.js.map +1 -0
  582. package/dist/esm/jsonRpc/index.js +6 -20
  583. package/dist/esm/jsonRpc/index.js.map +1 -0
  584. package/dist/esm/jsonRpc/json-rpc-resolver.js +281 -276
  585. package/dist/esm/jsonRpc/json-rpc-resolver.js.map +1 -0
  586. package/dist/esm/jsonRpc/rpc-websocket-client.js +147 -189
  587. package/dist/esm/jsonRpc/rpc-websocket-client.js.map +1 -0
  588. package/dist/esm/jsonRpc/types/chain.js +4 -0
  589. package/dist/esm/jsonRpc/types/chain.js.map +1 -0
  590. package/dist/esm/jsonRpc/types/changes.js +4 -0
  591. package/dist/esm/jsonRpc/types/changes.js.map +1 -0
  592. package/dist/esm/jsonRpc/types/coins.js +4 -0
  593. package/dist/esm/jsonRpc/types/coins.js.map +1 -0
  594. package/dist/esm/jsonRpc/types/common.js +4 -0
  595. package/dist/esm/jsonRpc/types/common.js.map +1 -0
  596. package/dist/esm/jsonRpc/types/generated.d.ts +1 -1
  597. package/dist/esm/jsonRpc/types/generated.js +4 -0
  598. package/dist/esm/jsonRpc/types/generated.js.map +1 -0
  599. package/dist/esm/jsonRpc/types/index.js +4 -0
  600. package/dist/esm/jsonRpc/types/index.js.map +1 -0
  601. package/dist/esm/jsonRpc/types/params.js +4 -0
  602. package/dist/esm/jsonRpc/types/params.js.map +1 -0
  603. package/dist/esm/keypairs/ed25519/ed25519-hd-key.js +49 -48
  604. package/dist/esm/keypairs/ed25519/ed25519-hd-key.js.map +1 -0
  605. package/dist/esm/keypairs/ed25519/index.js +5 -10
  606. package/dist/esm/keypairs/ed25519/index.js.map +1 -0
  607. package/dist/esm/keypairs/ed25519/keypair.js +128 -146
  608. package/dist/esm/keypairs/ed25519/keypair.js.map +1 -0
  609. package/dist/esm/keypairs/ed25519/publickey.js +64 -67
  610. package/dist/esm/keypairs/ed25519/publickey.js.map +1 -0
  611. package/dist/esm/keypairs/index.js +3 -0
  612. package/dist/esm/keypairs/index.js.map +1 -0
  613. package/dist/esm/keypairs/passkey/index.js +5 -12
  614. package/dist/esm/keypairs/passkey/index.js.map +1 -0
  615. package/dist/esm/keypairs/passkey/keypair.js +236 -243
  616. package/dist/esm/keypairs/passkey/keypair.js.map +1 -0
  617. package/dist/esm/keypairs/passkey/publickey.js +154 -140
  618. package/dist/esm/keypairs/passkey/publickey.js.map +1 -0
  619. package/dist/esm/keypairs/passkey/types.js +4 -0
  620. package/dist/esm/keypairs/passkey/types.js.map +1 -0
  621. package/dist/esm/keypairs/secp256k1/index.js +5 -10
  622. package/dist/esm/keypairs/secp256k1/index.js.map +1 -0
  623. package/dist/esm/keypairs/secp256k1/keypair.js +120 -134
  624. package/dist/esm/keypairs/secp256k1/keypair.js.map +1 -0
  625. package/dist/esm/keypairs/secp256k1/publickey.js +64 -71
  626. package/dist/esm/keypairs/secp256k1/publickey.js.map +1 -0
  627. package/dist/esm/keypairs/secp256r1/index.js +5 -10
  628. package/dist/esm/keypairs/secp256r1/index.js.map +1 -0
  629. package/dist/esm/keypairs/secp256r1/keypair.js +118 -131
  630. package/dist/esm/keypairs/secp256r1/keypair.js.map +1 -0
  631. package/dist/esm/keypairs/secp256r1/publickey.js +63 -66
  632. package/dist/esm/keypairs/secp256r1/publickey.js.map +1 -0
  633. package/dist/esm/multisig/index.js +5 -10
  634. package/dist/esm/multisig/index.js.map +1 -0
  635. package/dist/esm/multisig/publickey.d.ts +1 -1
  636. package/dist/esm/multisig/publickey.js +216 -253
  637. package/dist/esm/multisig/publickey.js.map +1 -0
  638. package/dist/esm/multisig/signer.js +57 -89
  639. package/dist/esm/multisig/signer.js.map +1 -0
  640. package/dist/esm/transactions/Arguments.d.ts +4 -4
  641. package/dist/esm/transactions/Arguments.js +9 -13
  642. package/dist/esm/transactions/Arguments.js.map +1 -0
  643. package/dist/esm/transactions/Commands.js +105 -118
  644. package/dist/esm/transactions/Commands.js.map +1 -0
  645. package/dist/esm/transactions/Inputs.js +49 -61
  646. package/dist/esm/transactions/Inputs.js.map +1 -0
  647. package/dist/esm/transactions/ObjectCache.d.ts +8 -8
  648. package/dist/esm/transactions/ObjectCache.js +200 -223
  649. package/dist/esm/transactions/ObjectCache.js.map +1 -0
  650. package/dist/esm/transactions/Transaction.d.ts +32 -32
  651. package/dist/esm/transactions/Transaction.js +611 -696
  652. package/dist/esm/transactions/Transaction.js.map +1 -0
  653. package/dist/esm/transactions/TransactionData.d.ts +9 -9
  654. package/dist/esm/transactions/TransactionData.js +386 -415
  655. package/dist/esm/transactions/TransactionData.js.map +1 -0
  656. package/dist/esm/transactions/__tests__/Transaction.test.js +167 -0
  657. package/dist/esm/transactions/__tests__/Transaction.test.js.map +1 -0
  658. package/dist/esm/transactions/__tests__/bcs.test.js +200 -0
  659. package/dist/esm/transactions/__tests__/bcs.test.js.map +1 -0
  660. package/dist/esm/transactions/data/internal.js +158 -205
  661. package/dist/esm/transactions/data/internal.js.map +1 -0
  662. package/dist/esm/transactions/data/v1.js +419 -487
  663. package/dist/esm/transactions/data/v1.js.map +1 -0
  664. package/dist/esm/transactions/data/v2.d.ts +5 -5
  665. package/dist/esm/transactions/data/v2.js +89 -107
  666. package/dist/esm/transactions/data/v2.js.map +1 -0
  667. package/dist/esm/transactions/executor/caching.d.ts +2 -2
  668. package/dist/esm/transactions/executor/caching.js +66 -93
  669. package/dist/esm/transactions/executor/caching.js.map +1 -0
  670. package/dist/esm/transactions/executor/parallel.js +329 -352
  671. package/dist/esm/transactions/executor/parallel.js.map +1 -0
  672. package/dist/esm/transactions/executor/queue.js +58 -64
  673. package/dist/esm/transactions/executor/queue.js.map +1 -0
  674. package/dist/esm/transactions/executor/serial.d.ts +5 -5
  675. package/dist/esm/transactions/executor/serial.js +96 -110
  676. package/dist/esm/transactions/executor/serial.js.map +1 -0
  677. package/dist/esm/transactions/hash.js +15 -9
  678. package/dist/esm/transactions/hash.js.map +1 -0
  679. package/dist/esm/transactions/index.js +15 -41
  680. package/dist/esm/transactions/index.js.map +1 -0
  681. package/dist/esm/transactions/intents/CoinWithBalance.js +127 -165
  682. package/dist/esm/transactions/intents/CoinWithBalance.js.map +1 -0
  683. package/dist/esm/transactions/object.js +86 -92
  684. package/dist/esm/transactions/object.js.map +1 -0
  685. package/dist/esm/transactions/plugins/NamedPackagesPlugin.js +18 -15
  686. package/dist/esm/transactions/plugins/NamedPackagesPlugin.js.map +1 -0
  687. package/dist/esm/transactions/pure.js +34 -39
  688. package/dist/esm/transactions/pure.js.map +1 -0
  689. package/dist/esm/transactions/resolve.js +58 -69
  690. package/dist/esm/transactions/resolve.js.map +1 -0
  691. package/dist/esm/transactions/serializer.js +145 -144
  692. package/dist/esm/transactions/serializer.js.map +1 -0
  693. package/dist/esm/transactions/utils.d.ts +1 -1
  694. package/dist/esm/transactions/utils.js +110 -109
  695. package/dist/esm/transactions/utils.js.map +1 -0
  696. package/dist/esm/utils/constants.js +26 -36
  697. package/dist/esm/utils/constants.js.map +1 -0
  698. package/dist/esm/utils/derived-objects.js +11 -10
  699. package/dist/esm/utils/derived-objects.js.map +1 -0
  700. package/dist/esm/utils/dynamic-fields.js +16 -16
  701. package/dist/esm/utils/dynamic-fields.js.map +1 -0
  702. package/dist/esm/utils/format.js +13 -13
  703. package/dist/esm/utils/format.js.map +1 -0
  704. package/dist/esm/utils/index.js +15 -76
  705. package/dist/esm/utils/index.js.map +1 -0
  706. package/dist/esm/utils/move-registry.js +34 -17
  707. package/dist/esm/utils/move-registry.js.map +1 -0
  708. package/dist/esm/utils/sui-types.js +70 -54
  709. package/dist/esm/utils/sui-types.js.map +1 -0
  710. package/dist/esm/utils/suins.js +29 -29
  711. package/dist/esm/utils/suins.js.map +1 -0
  712. package/dist/esm/verify/index.js +5 -14
  713. package/dist/esm/verify/index.js.map +1 -0
  714. package/dist/esm/verify/verify.js +76 -93
  715. package/dist/esm/verify/verify.js.map +1 -0
  716. package/dist/esm/version.js +6 -6
  717. package/dist/esm/version.js.map +1 -0
  718. package/dist/esm/w/call/allocation.js +307 -402
  719. package/dist/esm/w/call/allocation.js.map +1 -0
  720. package/dist/esm/w/call/arb.js +100 -129
  721. package/dist/esm/w/call/arb.js.map +1 -0
  722. package/dist/esm/w/call/arbitration.js +1170 -1568
  723. package/dist/esm/w/call/arbitration.js.map +1 -0
  724. package/dist/esm/w/call/base.js +288 -315
  725. package/dist/esm/w/call/base.js.map +1 -0
  726. package/dist/esm/w/call/contact.js +318 -442
  727. package/dist/esm/w/call/contact.js.map +1 -0
  728. package/dist/esm/w/call/demand.js +673 -841
  729. package/dist/esm/w/call/demand.js.map +1 -0
  730. package/dist/esm/w/call/entity.js +162 -203
  731. package/dist/esm/w/call/entity.js.map +1 -0
  732. package/dist/esm/w/call/guard-ins.d.ts +1 -0
  733. package/dist/esm/w/call/guard-ins.js +4373 -4366
  734. package/dist/esm/w/call/guard-ins.js.map +1 -0
  735. package/dist/esm/w/call/guard.d.ts +10 -0
  736. package/dist/esm/w/call/guard.js +1061 -1115
  737. package/dist/esm/w/call/guard.js.map +1 -0
  738. package/dist/esm/w/call/index.d.ts +1 -1
  739. package/dist/esm/w/call/index.js +24 -54
  740. package/dist/esm/w/call/index.js.map +1 -0
  741. package/dist/esm/w/call/machine.js +1086 -1433
  742. package/dist/esm/w/call/machine.js.map +1 -0
  743. package/dist/esm/w/call/order.js +301 -448
  744. package/dist/esm/w/call/order.js.map +1 -0
  745. package/dist/esm/w/call/passport.js +204 -240
  746. package/dist/esm/w/call/passport.js.map +1 -0
  747. package/dist/esm/w/call/payment.js +177 -215
  748. package/dist/esm/w/call/payment.js.map +1 -0
  749. package/dist/esm/w/call/permission.js +1172 -1320
  750. package/dist/esm/w/call/permission.js.map +1 -0
  751. package/dist/esm/w/call/personal.js +121 -156
  752. package/dist/esm/w/call/personal.js.map +1 -0
  753. package/dist/esm/w/call/progress.js +625 -797
  754. package/dist/esm/w/call/progress.js.map +1 -0
  755. package/dist/esm/w/call/proof.js +61 -103
  756. package/dist/esm/w/call/proof.js.map +1 -0
  757. package/dist/esm/w/call/repository.js +1017 -1251
  758. package/dist/esm/w/call/repository.js.map +1 -0
  759. package/dist/esm/w/call/resource.js +108 -124
  760. package/dist/esm/w/call/resource.js.map +1 -0
  761. package/dist/esm/w/call/reward.js +660 -847
  762. package/dist/esm/w/call/reward.js.map +1 -0
  763. package/dist/esm/w/call/service.js +1849 -2400
  764. package/dist/esm/w/call/service.js.map +1 -0
  765. package/dist/esm/w/call/treasury.js +815 -1125
  766. package/dist/esm/w/call/treasury.js.map +1 -0
  767. package/dist/esm/w/call/util.js +553 -576
  768. package/dist/esm/w/call/util.js.map +1 -0
  769. package/dist/esm/w/common.d.ts +1 -1
  770. package/dist/esm/w/common.js +579 -580
  771. package/dist/esm/w/common.js.map +1 -0
  772. package/dist/esm/w/exception.js +570 -573
  773. package/dist/esm/w/exception.js.map +1 -0
  774. package/dist/esm/w/index.js +4 -0
  775. package/dist/esm/w/index.js.map +1 -0
  776. package/dist/esm/w/local/account.js +652 -709
  777. package/dist/esm/w/local/account.js.map +1 -0
  778. package/dist/esm/w/local/cache.js +176 -147
  779. package/dist/esm/w/local/cache.js.map +1 -0
  780. package/dist/esm/w/local/config.js +46 -60
  781. package/dist/esm/w/local/config.js.map +1 -0
  782. package/dist/esm/w/local/index.js +196 -273
  783. package/dist/esm/w/local/index.js.map +1 -0
  784. package/dist/esm/w/local/local.d.ts +2 -2
  785. package/dist/esm/w/local/local.js +631 -626
  786. package/dist/esm/w/local/local.js.map +1 -0
  787. package/dist/esm/w/local/storage.js +168 -136
  788. package/dist/esm/w/local/storage.js.map +1 -0
  789. package/dist/esm/w/local/token.js +149 -151
  790. package/dist/esm/w/local/token.js.map +1 -0
  791. package/dist/esm/w/local/util.js +45 -22
  792. package/dist/esm/w/local/util.js.map +1 -0
  793. package/dist/esm/w/local/wip.js +1038 -781
  794. package/dist/esm/w/local/wip.js.map +1 -0
  795. package/dist/esm/w/messenger/crypto.js +491 -387
  796. package/dist/esm/w/messenger/crypto.js.map +1 -0
  797. package/dist/esm/w/messenger/index.js +27 -24
  798. package/dist/esm/w/messenger/index.js.map +1 -0
  799. package/dist/esm/w/messenger/messenger-api.js +1111 -1017
  800. package/dist/esm/w/messenger/messenger-api.js.map +1 -0
  801. package/dist/esm/w/messenger/messenger-manager.js +944 -1052
  802. package/dist/esm/w/messenger/messenger-manager.js.map +1 -0
  803. package/dist/esm/w/messenger/messenger.d.ts +1 -1
  804. package/dist/esm/w/messenger/messenger.js +1258 -1421
  805. package/dist/esm/w/messenger/messenger.js.map +1 -0
  806. package/dist/esm/w/messenger/server.js +388 -499
  807. package/dist/esm/w/messenger/server.js.map +1 -0
  808. package/dist/esm/w/messenger/session.js +394 -399
  809. package/dist/esm/w/messenger/session.js.map +1 -0
  810. package/dist/esm/w/messenger/storage.js +840 -751
  811. package/dist/esm/w/messenger/storage.js.map +1 -0
  812. package/dist/esm/w/messenger/types.d.ts +2 -2
  813. package/dist/esm/w/messenger/types.js +80 -85
  814. package/dist/esm/w/messenger/types.js.map +1 -0
  815. package/dist/esm/w/messenger/utils.js +28 -16
  816. package/dist/esm/w/messenger/utils.js.map +1 -0
  817. package/dist/esm/w/query/bult-in.js +95 -100
  818. package/dist/esm/w/query/bult-in.js.map +1 -0
  819. package/dist/esm/w/query/event.js +128 -125
  820. package/dist/esm/w/query/event.js.map +1 -0
  821. package/dist/esm/w/query/index.js +3 -0
  822. package/dist/esm/w/query/index.js.map +1 -0
  823. package/dist/esm/w/query/object.js +1560 -1574
  824. package/dist/esm/w/query/object.js.map +1 -0
  825. package/dist/esm/w/query/received.js +57 -63
  826. package/dist/esm/w/query/received.js.map +1 -0
  827. package/dist/esm/w/query/util.js +48 -56
  828. package/dist/esm/w/query/util.js.map +1 -0
  829. package/dist/esm/w/util.js +578 -673
  830. package/dist/esm/w/util.js.map +1 -0
  831. package/package.json +14 -9
  832. package/dist/cjs/graphql/client.js +0 -98
  833. package/dist/cjs/graphql/core.js +0 -506
  834. package/dist/cjs/graphql/generated/2024.1/tada-env.js +0 -13141
  835. package/dist/cjs/graphql/generated/2024.1/tsconfig.tada.js +0 -11
  836. package/dist/cjs/graphql/generated/2024.4/tada-env.js +0 -13287
  837. package/dist/cjs/graphql/generated/2024.4/tsconfig.tada.js +0 -11
  838. package/dist/cjs/graphql/generated/latest/tada-env.js +0 -12925
  839. package/dist/cjs/graphql/generated/latest/tsconfig.tada.js +0 -11
  840. package/dist/cjs/graphql/generated/queries.js +0 -807
  841. package/dist/cjs/graphql/index.js +0 -25
  842. package/dist/cjs/graphql/schemas/2024.1/index.js +0 -28
  843. package/dist/cjs/graphql/schemas/2024.4/index.js +0 -28
  844. package/dist/cjs/graphql/schemas/latest/index.js +0 -28
  845. package/dist/cjs/graphql/types.js +0 -16
  846. package/dist/cjs/package.json +0 -5
  847. package/dist/cjs/w/local/.eslintrc.js +0 -15
  848. package/dist/cjs/w/messenger/.eslintrc.js +0 -15
  849. package/dist/cjs/zklogin/address.js +0 -93
  850. package/dist/cjs/zklogin/bcs.js +0 -41
  851. package/dist/cjs/zklogin/index.js +0 -45
  852. package/dist/cjs/zklogin/jwt-decode.js +0 -88
  853. package/dist/cjs/zklogin/jwt-utils.js +0 -128
  854. package/dist/cjs/zklogin/nonce.js +0 -60
  855. package/dist/cjs/zklogin/poseidon.js +0 -64
  856. package/dist/cjs/zklogin/publickey.js +0 -281
  857. package/dist/cjs/zklogin/signature.js +0 -57
  858. package/dist/cjs/zklogin/utils.js +0 -98
  859. package/dist/esm/graphql/client.js +0 -79
  860. package/dist/esm/graphql/core.js +0 -505
  861. package/dist/esm/graphql/generated/2024.1/tada-env.js +0 -13121
  862. package/dist/esm/graphql/generated/2024.1/tsconfig.tada.js +0 -16
  863. package/dist/esm/graphql/generated/2024.4/tada-env.js +0 -13267
  864. package/dist/esm/graphql/generated/2024.4/tsconfig.tada.js +0 -16
  865. package/dist/esm/graphql/generated/latest/tada-env.js +0 -12905
  866. package/dist/esm/graphql/generated/latest/tsconfig.tada.js +0 -16
  867. package/dist/esm/graphql/generated/queries.js +0 -788
  868. package/dist/esm/graphql/index.js +0 -8
  869. package/dist/esm/graphql/schemas/2024.1/index.js +0 -8
  870. package/dist/esm/graphql/schemas/2024.4/index.js +0 -8
  871. package/dist/esm/graphql/schemas/latest/index.js +0 -8
  872. package/dist/esm/graphql/types.js +0 -0
  873. package/dist/esm/package.json +0 -5
  874. package/dist/esm/w/local/.eslintrc.js +0 -23
  875. package/dist/esm/w/messenger/.eslintrc.js +0 -23
  876. package/dist/esm/zklogin/address.js +0 -78
  877. package/dist/esm/zklogin/bcs.js +0 -21
  878. package/dist/esm/zklogin/index.js +0 -38
  879. package/dist/esm/zklogin/jwt-decode.js +0 -68
  880. package/dist/esm/zklogin/jwt-utils.js +0 -108
  881. package/dist/esm/zklogin/nonce.js +0 -40
  882. package/dist/esm/zklogin/poseidon.js +0 -61
  883. package/dist/esm/zklogin/publickey.js +0 -265
  884. package/dist/esm/zklogin/signature.js +0 -37
  885. package/dist/esm/zklogin/utils.js +0 -78
  886. package/dist/tsconfig.esm.tsbuildinfo +0 -1
  887. package/dist/tsconfig.tsbuildinfo +0 -1
@@ -1,48 +1,74 @@
1
- var __defProp = Object.defineProperty;
2
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
- var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
1
+ // Copyright (c) Wowok.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ /**
4
+ * Messenger 存储模块
5
+ *
6
+ * 使用与 wowok SDK 相同的 SQLite 存储方案
7
+ * 数据库文件:messenger.db(位于 ~/.wow/ 目录)
8
+ *
9
+ * 存储内容:
10
+ * 1. Signal Protocol 状态(身份密钥、预密钥、会话)
11
+ * 2. 消息记录
12
+ * 3. 会话状态(Merkle Tree 根哈希等)
13
+ */
4
14
  import Database from "better-sqlite3";
5
15
  import * as path from "path";
6
16
  import * as fs from "fs";
7
17
  import { getWowDir } from "../local/util.js";
18
+ // 动态获取数据目录(支持测试时通过环境变量覆盖)
8
19
  function getWowDirDynamic() {
9
- return getWowDir();
20
+ return getWowDir();
10
21
  }
22
+ // 按用户分库的数据库目录(动态计算)
11
23
  function getMessengerDbDir() {
12
- return path.join(getWowDirDynamic(), "messenger");
24
+ return path.join(getWowDirDynamic(), "messenger");
13
25
  }
14
26
  function ensureDirExists(dir) {
15
- if (!fs.existsSync(dir)) {
16
- fs.mkdirSync(dir, { recursive: true });
17
- }
27
+ if (!fs.existsSync(dir)) {
28
+ fs.mkdirSync(dir, { recursive: true });
29
+ }
18
30
  }
31
+ // 获取用户特定的数据库路径
19
32
  function getUserDbPath(userAddress) {
20
- const shortAddress = userAddress.toLowerCase().replace(/^0x/, "").slice(0, 16);
21
- const messengerDbDir = getMessengerDbDir();
22
- ensureDirExists(messengerDbDir);
23
- return path.join(messengerDbDir, `${shortAddress}.db`);
33
+ // 使用用户地址的前16位作为数据库文件名
34
+ const shortAddress = userAddress
35
+ .toLowerCase()
36
+ .replace(/^0x/, "")
37
+ .slice(0, 16);
38
+ const messengerDbDir = getMessengerDbDir();
39
+ ensureDirExists(messengerDbDir);
40
+ return path.join(messengerDbDir, `${shortAddress}.db`);
24
41
  }
42
+ // 获取全局数据库路径(用于 MessengerManager 状态和 SSE 锁)
25
43
  function getGlobalDbPath() {
26
- const messengerDbDir = getMessengerDbDir();
27
- ensureDirExists(messengerDbDir);
28
- return path.join(messengerDbDir, "global.db");
44
+ const messengerDbDir = getMessengerDbDir();
45
+ ensureDirExists(messengerDbDir);
46
+ return path.join(messengerDbDir, "global.db");
29
47
  }
30
- const userDbInstances = /* @__PURE__ */ new Map();
48
+ // 用户数据库实例缓存
49
+ const userDbInstances = new Map();
50
+ // 全局数据库实例缓存
31
51
  let globalDbInstance = null;
32
52
  function getDatabase(userAddress) {
33
- if (!userAddress) {
34
- throw new Error("userAddress is required to get database");
35
- }
36
- const cached = userDbInstances.get(userAddress);
37
- if (cached) {
38
- return cached;
39
- }
40
- const dbPath = getUserDbPath(userAddress);
41
- const db = new Database(dbPath);
42
- db.pragma("journal_mode = WAL");
43
- db.pragma("synchronous = NORMAL");
44
- db.pragma("cache_size = -64000");
45
- db.exec(`
53
+ if (!userAddress) {
54
+ throw new Error("userAddress is required to get database");
55
+ }
56
+ // 检查缓存
57
+ const cached = userDbInstances.get(userAddress);
58
+ if (cached) {
59
+ return cached;
60
+ }
61
+ // 创建新连接
62
+ const dbPath = getUserDbPath(userAddress);
63
+ const db = new Database(dbPath);
64
+ // 启用 WAL 模式以支持多进程访问
65
+ db.pragma("journal_mode = WAL");
66
+ // 设置同步模式为 NORMAL 以平衡性能和安全性
67
+ db.pragma("synchronous = NORMAL");
68
+ // 启用内存共享缓存
69
+ db.pragma("cache_size = -64000");
70
+ // Signal Protocol 存储表
71
+ db.exec(`
46
72
  CREATE TABLE IF NOT EXISTS signal_store (
47
73
  store_type TEXT NOT NULL,
48
74
  key TEXT NOT NULL,
@@ -52,8 +78,9 @@ function getDatabase(userAddress) {
52
78
  );
53
79
  CREATE INDEX IF NOT EXISTS idx_signal_store_type ON signal_store(store_type);
54
80
  `);
55
- try {
56
- db.exec(`
81
+ // 消息表 - 分开创建,先不创建索引
82
+ try {
83
+ db.exec(`
57
84
  CREATE TABLE IF NOT EXISTS messages (
58
85
  message_id TEXT PRIMARY KEY,
59
86
  from_address TEXT NOT NULL,
@@ -80,59 +107,68 @@ function getDatabase(userAddress) {
80
107
  received_at INTEGER
81
108
  );
82
109
  `);
83
- } catch (e) {
84
- }
85
- try {
86
- db.exec("ALTER TABLE messages ADD COLUMN guard_address TEXT");
87
- } catch (e) {
88
- }
89
- try {
90
- db.exec("ALTER TABLE messages ADD COLUMN passport_address TEXT");
91
- } catch (e) {
92
- }
93
- try {
94
- db.exec(
95
- "ALTER TABLE messages ADD COLUMN last_received_leaf_index INTEGER"
96
- );
97
- } catch (e) {
98
- }
99
- try {
100
- db.exec(
101
- "CREATE INDEX IF NOT EXISTS idx_messages_from_to ON messages(from_address, to_address)"
102
- );
103
- } catch (e) {
104
- }
105
- try {
106
- db.exec(
107
- "CREATE INDEX IF NOT EXISTS idx_messages_status ON messages(status)"
108
- );
109
- } catch (e) {
110
- }
111
- try {
112
- db.exec(
113
- "CREATE INDEX IF NOT EXISTS idx_messages_leaf ON messages(leaf_index)"
114
- );
115
- } catch (e) {
116
- }
117
- try {
118
- db.exec(
119
- "CREATE INDEX IF NOT EXISTS idx_messages_created_at ON messages(created_at)"
120
- );
121
- } catch (e) {
122
- }
123
- try {
124
- db.exec(
125
- "CREATE INDEX IF NOT EXISTS idx_messages_server_ts ON messages(server_timestamp)"
126
- );
127
- } catch (e) {
128
- }
129
- try {
130
- db.exec(
131
- "CREATE INDEX IF NOT EXISTS idx_messages_received_at ON messages(received_at)"
132
- );
133
- } catch (e) {
134
- }
135
- db.exec(`
110
+ }
111
+ catch (e) {
112
+ // 表可能已存在,忽略错误
113
+ }
114
+ // 安全地添加新列(如果还不存在)
115
+ try {
116
+ db.exec("ALTER TABLE messages ADD COLUMN guard_address TEXT");
117
+ }
118
+ catch (e) {
119
+ // 列可能已存在,忽略错误
120
+ }
121
+ try {
122
+ db.exec("ALTER TABLE messages ADD COLUMN passport_address TEXT");
123
+ }
124
+ catch (e) {
125
+ // 列可能已存在,忽略错误
126
+ }
127
+ try {
128
+ db.exec("ALTER TABLE messages ADD COLUMN last_received_leaf_index INTEGER");
129
+ }
130
+ catch (e) {
131
+ // 列可能已存在,忽略错误
132
+ }
133
+ // 安全地创建索引
134
+ try {
135
+ db.exec("CREATE INDEX IF NOT EXISTS idx_messages_from_to ON messages(from_address, to_address)");
136
+ }
137
+ catch (e) {
138
+ // 索引可能已存在,忽略错误
139
+ }
140
+ try {
141
+ db.exec("CREATE INDEX IF NOT EXISTS idx_messages_status ON messages(status)");
142
+ }
143
+ catch (e) {
144
+ // 索引可能已存在,忽略错误
145
+ }
146
+ try {
147
+ db.exec("CREATE INDEX IF NOT EXISTS idx_messages_leaf ON messages(leaf_index)");
148
+ }
149
+ catch (e) {
150
+ // 索引可能已存在,忽略错误
151
+ }
152
+ try {
153
+ db.exec("CREATE INDEX IF NOT EXISTS idx_messages_created_at ON messages(created_at)");
154
+ }
155
+ catch (e) {
156
+ // 索引可能已存在,忽略错误
157
+ }
158
+ try {
159
+ db.exec("CREATE INDEX IF NOT EXISTS idx_messages_server_ts ON messages(server_timestamp)");
160
+ }
161
+ catch (e) {
162
+ // 索引可能已存在,忽略错误
163
+ }
164
+ try {
165
+ db.exec("CREATE INDEX IF NOT EXISTS idx_messages_received_at ON messages(received_at)");
166
+ }
167
+ catch (e) {
168
+ // 索引可能已存在,忽略错误
169
+ }
170
+ // 会话状态表
171
+ db.exec(`
136
172
  CREATE TABLE IF NOT EXISTS session_states (
137
173
  session_id TEXT PRIMARY KEY,
138
174
  my_address TEXT NOT NULL,
@@ -148,249 +184,293 @@ function getDatabase(userAddress) {
148
184
  );
149
185
  CREATE INDEX IF NOT EXISTS idx_session_my_peer ON session_states(my_address, peer_address);
150
186
  `);
151
- userDbInstances.set(userAddress, db);
152
- return db;
187
+ // 缓存实例
188
+ userDbInstances.set(userAddress, db);
189
+ return db;
153
190
  }
191
+ // 获取全局数据库实例(用于 MessengerManager 状态和 SSE 锁)
154
192
  function getGlobalDatabase() {
155
- if (globalDbInstance) {
156
- return globalDbInstance;
157
- }
158
- const dbPath = getGlobalDbPath();
159
- const db = new Database(dbPath);
160
- db.pragma("journal_mode = WAL");
161
- db.pragma("synchronous = NORMAL");
162
- db.pragma("cache_size = -10000");
163
- db.pragma("busy_timeout = 5000");
164
- globalDbInstance = db;
165
- return db;
166
- }
167
- function resetDbConnection() {
168
- for (const [_, db] of userDbInstances) {
169
- try {
170
- db.pragma("journal_mode = DELETE");
171
- } catch (e) {
193
+ if (globalDbInstance) {
194
+ return globalDbInstance;
172
195
  }
173
- }
174
- for (const [_, db] of userDbInstances) {
175
- try {
176
- db.close();
177
- } catch (e) {
196
+ // 创建新连接
197
+ const dbPath = getGlobalDbPath();
198
+ const db = new Database(dbPath);
199
+ // 启用 WAL 模式以支持多进程访问
200
+ db.pragma("journal_mode = WAL");
201
+ // 设置同步模式为 NORMAL 以平衡性能和安全性
202
+ db.pragma("synchronous = NORMAL");
203
+ // 设置缓存大小
204
+ db.pragma("cache_size = -10000");
205
+ // 设置忙等待超时(5秒)
206
+ db.pragma("busy_timeout = 5000");
207
+ // 缓存实例
208
+ globalDbInstance = db;
209
+ return db;
210
+ }
211
+ /**
212
+ * 重置数据库连接
213
+ * 用于测试时清理数据后重新创建连接
214
+ */
215
+ export function resetDbConnection() {
216
+ // 先切换到 DELETE 模式,这样就不会有 WAL 文件
217
+ for (const [_, db] of userDbInstances) {
218
+ try {
219
+ db.pragma("journal_mode = DELETE");
220
+ }
221
+ catch (e) {
222
+ // 忽略模式切换错误
223
+ }
178
224
  }
179
- }
180
- userDbInstances.clear();
181
- if (globalDbInstance) {
182
- try {
183
- globalDbInstance.pragma("journal_mode = DELETE");
184
- } catch (e) {
225
+ // 关闭所有用户的数据库连接
226
+ for (const [_, db] of userDbInstances) {
227
+ try {
228
+ db.close();
229
+ }
230
+ catch (e) {
231
+ // 忽略关闭错误
232
+ }
185
233
  }
186
- try {
187
- globalDbInstance.close();
188
- } catch (e) {
234
+ userDbInstances.clear();
235
+ // 关闭全局数据库连接
236
+ if (globalDbInstance) {
237
+ try {
238
+ globalDbInstance.pragma("journal_mode = DELETE");
239
+ }
240
+ catch (e) {
241
+ // 忽略模式切换错误
242
+ }
243
+ try {
244
+ globalDbInstance.close();
245
+ }
246
+ catch (e) {
247
+ // 忽略关闭错误
248
+ }
249
+ globalDbInstance = null;
189
250
  }
190
- globalDbInstance = null;
191
- }
192
251
  }
252
+ // 注册进程退出时的清理函数
193
253
  process.on("exit", () => {
194
- resetDbConnection();
254
+ resetDbConnection();
195
255
  });
256
+ // 处理 SIGINT (Ctrl+C)
196
257
  process.on("SIGINT", () => {
197
- resetDbConnection();
198
- process.exit(0);
258
+ resetDbConnection();
259
+ process.exit(0);
199
260
  });
261
+ // 处理 SIGTERM
200
262
  process.on("SIGTERM", () => {
201
- resetDbConnection();
202
- process.exit(0);
263
+ resetDbConnection();
264
+ process.exit(0);
203
265
  });
266
+ // ========== Signal Protocol 存储 ==========
204
267
  const STORE_TYPES = {
205
- IDENTITY: "identity",
206
- REGISTRATION_ID: "registration_id",
207
- IDENTITIES: "identities",
208
- PREKEYS: "prekeys",
209
- SIGNED_PREKEYS: "signed_prekeys",
210
- SESSIONS: "sessions",
211
- META: "meta"
268
+ IDENTITY: "identity",
269
+ REGISTRATION_ID: "registration_id",
270
+ IDENTITIES: "identities",
271
+ PREKEYS: "prekeys",
272
+ SIGNED_PREKEYS: "signed_prekeys",
273
+ SESSIONS: "sessions",
274
+ META: "meta",
212
275
  };
213
276
  function arrayBufferToBase64(buffer) {
214
- return Buffer.from(new Uint8Array(buffer)).toString("base64");
277
+ return Buffer.from(new Uint8Array(buffer)).toString("base64");
215
278
  }
216
279
  function base64ToArrayBuffer(base64) {
217
- return Uint8Array.from(Buffer.from(base64, "base64")).buffer;
280
+ return Uint8Array.from(Buffer.from(base64, "base64")).buffer;
218
281
  }
219
282
  function bufferEqual(a, b) {
220
- if (a.byteLength !== b.byteLength) return false;
221
- const va = new Uint8Array(a);
222
- const vb = new Uint8Array(b);
223
- for (let i = 0; i < va.length; i++) {
224
- if (va[i] !== vb[i]) return false;
225
- }
226
- return true;
283
+ if (a.byteLength !== b.byteLength)
284
+ return false;
285
+ const va = new Uint8Array(a);
286
+ const vb = new Uint8Array(b);
287
+ for (let i = 0; i < va.length; i++) {
288
+ if (va[i] !== vb[i])
289
+ return false;
290
+ }
291
+ return true;
227
292
  }
228
- class SignalProtocolStorage {
229
- constructor(userAddress, storeType = "default") {
230
- __publicField(this, "storePrefix");
231
- __publicField(this, "userAddress");
232
- this.userAddress = userAddress;
233
- this.storePrefix = storeType;
234
- }
235
- get db() {
236
- return getDatabase(this.userAddress);
237
- }
238
- // Identity
239
- async setIdentity(identity, registrationId) {
240
- const persisted = {
241
- pubKey: arrayBufferToBase64(identity.pubKey),
242
- privKey: arrayBufferToBase64(identity.privKey)
243
- };
244
- this.putValue(STORE_TYPES.IDENTITY, JSON.stringify(persisted));
245
- this.putValue(STORE_TYPES.REGISTRATION_ID, registrationId.toString());
246
- }
247
- async getIdentityKeyPair() {
248
- const value = this.getValue(STORE_TYPES.IDENTITY);
249
- if (!value) return void 0;
250
- const persisted = JSON.parse(value);
251
- return {
252
- pubKey: base64ToArrayBuffer(persisted.pubKey),
253
- privKey: base64ToArrayBuffer(persisted.privKey)
254
- };
255
- }
256
- async getLocalRegistrationId() {
257
- const value = this.getValue(STORE_TYPES.REGISTRATION_ID);
258
- return value ? parseInt(value, 10) : void 0;
259
- }
260
- // Identity verification
261
- async isTrustedIdentity(identifier, identityKey) {
262
- const key = `${STORE_TYPES.IDENTITIES}:${identifier}`;
263
- const existing = this.getValue(key);
264
- if (!existing) return true;
265
- return bufferEqual(base64ToArrayBuffer(existing), identityKey);
266
- }
267
- async saveIdentity(encodedAddress, publicKey) {
268
- const key = `${STORE_TYPES.IDENTITIES}:${encodedAddress}`;
269
- const existing = this.getValue(key);
270
- const newValue = arrayBufferToBase64(publicKey);
271
- this.putValue(key, newValue);
272
- return existing ? bufferEqual(base64ToArrayBuffer(existing), publicKey) : true;
273
- }
274
- async loadIdentity(address) {
275
- const key = `${STORE_TYPES.IDENTITIES}:${address}`;
276
- const value = this.getValue(key);
277
- return value ? base64ToArrayBuffer(value) : void 0;
278
- }
279
- // PreKeys
280
- async loadPreKey(keyId) {
281
- const key = `${STORE_TYPES.PREKEYS}:${keyId}`;
282
- const value = this.getValue(key);
283
- if (!value) return void 0;
284
- const persisted = JSON.parse(value);
285
- return {
286
- pubKey: base64ToArrayBuffer(persisted.pubKey),
287
- privKey: base64ToArrayBuffer(persisted.privKey)
288
- };
289
- }
290
- async storePreKey(keyId, keyPair) {
291
- const key = `${STORE_TYPES.PREKEYS}:${keyId}`;
292
- const persisted = {
293
- pubKey: arrayBufferToBase64(keyPair.pubKey),
294
- privKey: arrayBufferToBase64(keyPair.privKey)
295
- };
296
- this.putValue(key, JSON.stringify(persisted));
297
- }
298
- async removePreKey(keyId) {
299
- const key = `${STORE_TYPES.PREKEYS}:${keyId}`;
300
- this.delValue(key);
301
- }
302
- // Signed PreKeys
303
- async loadSignedPreKey(keyId) {
304
- const key = `${STORE_TYPES.SIGNED_PREKEYS}:${keyId}`;
305
- const value = this.getValue(key);
306
- if (!value) return void 0;
307
- const persisted = JSON.parse(value);
308
- return {
309
- pubKey: base64ToArrayBuffer(persisted.pubKey),
310
- privKey: base64ToArrayBuffer(persisted.privKey)
311
- };
312
- }
313
- async storeSignedPreKey(keyId, keyPair) {
314
- const key = `${STORE_TYPES.SIGNED_PREKEYS}:${keyId}`;
315
- const persisted = {
316
- pubKey: arrayBufferToBase64(keyPair.pubKey),
317
- privKey: arrayBufferToBase64(keyPair.privKey)
318
- };
319
- this.putValue(key, JSON.stringify(persisted));
320
- }
321
- async removeSignedPreKey(keyId) {
322
- const key = `${STORE_TYPES.SIGNED_PREKEYS}:${keyId}`;
323
- this.delValue(key);
324
- }
325
- // Sessions
326
- async loadSession(encodedAddress) {
327
- const key = `${STORE_TYPES.SESSIONS}:${encodedAddress}`;
328
- return this.getValue(key);
329
- }
330
- async storeSession(encodedAddress, record) {
331
- const key = `${STORE_TYPES.SESSIONS}:${encodedAddress}`;
332
- this.putValue(key, record);
333
- }
334
- async removeSession(encodedAddress) {
335
- const key = `${STORE_TYPES.SESSIONS}:${encodedAddress}`;
336
- this.delValue(key);
337
- }
338
- // Meta
339
- async getMeta() {
340
- const value = this.getValue(STORE_TYPES.META);
341
- if (!value) return { nextPreKeyId: 1 };
342
- return JSON.parse(value);
343
- }
344
- async setMeta(meta) {
345
- const current = await this.getMeta();
346
- const updated = { ...current, ...meta };
347
- this.putValue(STORE_TYPES.META, JSON.stringify(updated));
348
- }
349
- listPreKeys() {
350
- const rows = this.db.prepare(
351
- "SELECT key FROM signal_store WHERE store_type = ? AND key LIKE ?"
352
- ).all(this.storePrefix, `${STORE_TYPES.PREKEYS}:%`);
353
- return rows.map((r) => {
354
- const id = r.key.replace(`${STORE_TYPES.PREKEYS}:`, "");
355
- return Number(id);
356
- });
357
- }
358
- // Private helpers
359
- getValue(key) {
360
- const row = this.db.prepare(
361
- "SELECT value FROM signal_store WHERE store_type = ? AND key = ?"
362
- ).get(this.storePrefix, key);
363
- return row?.value;
364
- }
365
- putValue(key, value) {
366
- this.db.prepare(
367
- `
293
+ /**
294
+ * Signal Protocol SQLite 存储
295
+ * 兼容 libsignal-protocol-typescript 的 StorageType 接口
296
+ */
297
+ export class SignalProtocolStorage {
298
+ storePrefix;
299
+ userAddress;
300
+ constructor(userAddress, storeType = "default") {
301
+ this.userAddress = userAddress;
302
+ this.storePrefix = storeType;
303
+ }
304
+ get db() {
305
+ return getDatabase(this.userAddress);
306
+ }
307
+ // Identity
308
+ async setIdentity(identity, registrationId) {
309
+ const persisted = {
310
+ pubKey: arrayBufferToBase64(identity.pubKey),
311
+ privKey: arrayBufferToBase64(identity.privKey),
312
+ };
313
+ this.putValue(STORE_TYPES.IDENTITY, JSON.stringify(persisted));
314
+ this.putValue(STORE_TYPES.REGISTRATION_ID, registrationId.toString());
315
+ }
316
+ async getIdentityKeyPair() {
317
+ const value = this.getValue(STORE_TYPES.IDENTITY);
318
+ if (!value)
319
+ return undefined;
320
+ const persisted = JSON.parse(value);
321
+ return {
322
+ pubKey: base64ToArrayBuffer(persisted.pubKey),
323
+ privKey: base64ToArrayBuffer(persisted.privKey),
324
+ };
325
+ }
326
+ async getLocalRegistrationId() {
327
+ const value = this.getValue(STORE_TYPES.REGISTRATION_ID);
328
+ return value ? parseInt(value, 10) : undefined;
329
+ }
330
+ // Identity verification
331
+ async isTrustedIdentity(identifier, identityKey) {
332
+ const key = `${STORE_TYPES.IDENTITIES}:${identifier}`;
333
+ const existing = this.getValue(key);
334
+ if (!existing)
335
+ return true;
336
+ return bufferEqual(base64ToArrayBuffer(existing), identityKey);
337
+ }
338
+ async saveIdentity(encodedAddress, publicKey) {
339
+ const key = `${STORE_TYPES.IDENTITIES}:${encodedAddress}`;
340
+ const existing = this.getValue(key);
341
+ const newValue = arrayBufferToBase64(publicKey);
342
+ this.putValue(key, newValue);
343
+ return existing
344
+ ? bufferEqual(base64ToArrayBuffer(existing), publicKey)
345
+ : true;
346
+ }
347
+ async loadIdentity(address) {
348
+ const key = `${STORE_TYPES.IDENTITIES}:${address}`;
349
+ const value = this.getValue(key);
350
+ return value ? base64ToArrayBuffer(value) : undefined;
351
+ }
352
+ // PreKeys
353
+ async loadPreKey(keyId) {
354
+ const key = `${STORE_TYPES.PREKEYS}:${keyId}`;
355
+ const value = this.getValue(key);
356
+ if (!value)
357
+ return undefined;
358
+ const persisted = JSON.parse(value);
359
+ return {
360
+ pubKey: base64ToArrayBuffer(persisted.pubKey),
361
+ privKey: base64ToArrayBuffer(persisted.privKey),
362
+ };
363
+ }
364
+ async storePreKey(keyId, keyPair) {
365
+ const key = `${STORE_TYPES.PREKEYS}:${keyId}`;
366
+ const persisted = {
367
+ pubKey: arrayBufferToBase64(keyPair.pubKey),
368
+ privKey: arrayBufferToBase64(keyPair.privKey),
369
+ };
370
+ this.putValue(key, JSON.stringify(persisted));
371
+ }
372
+ async removePreKey(keyId) {
373
+ const key = `${STORE_TYPES.PREKEYS}:${keyId}`;
374
+ this.delValue(key);
375
+ }
376
+ // Signed PreKeys
377
+ async loadSignedPreKey(keyId) {
378
+ const key = `${STORE_TYPES.SIGNED_PREKEYS}:${keyId}`;
379
+ const value = this.getValue(key);
380
+ if (!value)
381
+ return undefined;
382
+ const persisted = JSON.parse(value);
383
+ return {
384
+ pubKey: base64ToArrayBuffer(persisted.pubKey),
385
+ privKey: base64ToArrayBuffer(persisted.privKey),
386
+ };
387
+ }
388
+ async storeSignedPreKey(keyId, keyPair) {
389
+ const key = `${STORE_TYPES.SIGNED_PREKEYS}:${keyId}`;
390
+ const persisted = {
391
+ pubKey: arrayBufferToBase64(keyPair.pubKey),
392
+ privKey: arrayBufferToBase64(keyPair.privKey),
393
+ };
394
+ this.putValue(key, JSON.stringify(persisted));
395
+ }
396
+ async removeSignedPreKey(keyId) {
397
+ const key = `${STORE_TYPES.SIGNED_PREKEYS}:${keyId}`;
398
+ this.delValue(key);
399
+ }
400
+ // Sessions
401
+ async loadSession(encodedAddress) {
402
+ const key = `${STORE_TYPES.SESSIONS}:${encodedAddress}`;
403
+ return this.getValue(key);
404
+ }
405
+ async storeSession(encodedAddress, record) {
406
+ const key = `${STORE_TYPES.SESSIONS}:${encodedAddress}`;
407
+ this.putValue(key, record);
408
+ }
409
+ async removeSession(encodedAddress) {
410
+ const key = `${STORE_TYPES.SESSIONS}:${encodedAddress}`;
411
+ this.delValue(key);
412
+ }
413
+ // Meta
414
+ async getMeta() {
415
+ const value = this.getValue(STORE_TYPES.META);
416
+ if (!value)
417
+ return { nextPreKeyId: 1 };
418
+ return JSON.parse(value);
419
+ }
420
+ async setMeta(meta) {
421
+ const current = await this.getMeta();
422
+ const updated = { ...current, ...meta };
423
+ this.putValue(STORE_TYPES.META, JSON.stringify(updated));
424
+ }
425
+ listPreKeys() {
426
+ const rows = this.db
427
+ .prepare("SELECT key FROM signal_store WHERE store_type = ? AND key LIKE ?")
428
+ .all(this.storePrefix, `${STORE_TYPES.PREKEYS}:%`);
429
+ return rows.map((r) => {
430
+ const id = r.key.replace(`${STORE_TYPES.PREKEYS}:`, "");
431
+ return Number(id);
432
+ });
433
+ }
434
+ // Private helpers
435
+ getValue(key) {
436
+ const row = this.db
437
+ .prepare("SELECT value FROM signal_store WHERE store_type = ? AND key = ?")
438
+ .get(this.storePrefix, key);
439
+ return row?.value;
440
+ }
441
+ putValue(key, value) {
442
+ this.db
443
+ .prepare(`
368
444
  INSERT INTO signal_store (store_type, key, value, updated_at)
369
445
  VALUES (?, ?, ?, strftime('%s', 'now'))
370
446
  ON CONFLICT(store_type, key) DO UPDATE SET
371
447
  value = excluded.value,
372
448
  updated_at = excluded.updated_at
373
- `
374
- ).run(this.storePrefix, key, value);
375
- }
376
- delValue(key) {
377
- this.db.prepare(
378
- "DELETE FROM signal_store WHERE store_type = ? AND key = ?"
379
- ).run(this.storePrefix, key);
380
- }
449
+ `)
450
+ .run(this.storePrefix, key, value);
451
+ }
452
+ delValue(key) {
453
+ this.db
454
+ .prepare("DELETE FROM signal_store WHERE store_type = ? AND key = ?")
455
+ .run(this.storePrefix, key);
456
+ }
381
457
  }
382
- class MessageStorage {
383
- constructor(userAddress) {
384
- __publicField(this, "userAddress");
385
- this.userAddress = userAddress;
386
- }
387
- get db() {
388
- return getDatabase(this.userAddress);
389
- }
390
- saveMessage(message) {
391
- const receivedAt = message.direction === "received" && !message.receivedAt ? Date.now() : message.receivedAt;
392
- this.db.prepare(
393
- `
458
+ // ========== 消息存储 ==========
459
+ export class MessageStorage {
460
+ userAddress;
461
+ constructor(userAddress) {
462
+ this.userAddress = userAddress;
463
+ }
464
+ get db() {
465
+ return getDatabase(this.userAddress);
466
+ }
467
+ saveMessage(message) {
468
+ // 如果是接收消息且没有 receivedAt,设置当前时间
469
+ const receivedAt = message.direction === "received" && !message.receivedAt
470
+ ? Date.now()
471
+ : message.receivedAt;
472
+ this.db
473
+ .prepare(`
394
474
  INSERT INTO messages (
395
475
  message_id, from_address, to_address, plaintext_hash,
396
476
  plaintext, guard_address, passport_address, last_received_leaf_index, direction, status, msg_type,
@@ -416,279 +496,311 @@ class MessageStorage {
416
496
  ark_timestamp = COALESCE(excluded.ark_timestamp, ark_timestamp),
417
497
  zip_metadata = COALESCE(excluded.zip_metadata, zip_metadata),
418
498
  received_at = COALESCE(excluded.received_at, received_at)
419
- `
420
- ).run(
421
- message.messageId,
422
- message.fromAddress,
423
- message.toAddress,
424
- message.plaintextHash,
425
- message.plaintext === void 0 ? null : message.plaintext,
426
- message.guardAddress === void 0 ? null : message.guardAddress,
427
- message.passportAddress === void 0 ? null : message.passportAddress,
428
- message.lastReceivedLeafIndex === void 0 ? null : message.lastReceivedLeafIndex,
429
- message.direction,
430
- message.status,
431
- message.msgType,
432
- message.leafIndex === void 0 ? null : message.leafIndex,
433
- message.prevRoot === void 0 ? null : message.prevRoot,
434
- message.newRoot === void 0 ? null : message.newRoot,
435
- message.serverSignature === void 0 ? null : message.serverSignature,
436
- message.serverPublicKey === void 0 ? null : message.serverPublicKey,
437
- message.serverTimestamp === void 0 ? null : message.serverTimestamp,
438
- message.arkConfirmed?.recipient === void 0 ? null : message.arkConfirmed?.recipient,
439
- message.arkConfirmed?.recipientPublicKey === void 0 ? null : message.arkConfirmed?.recipientPublicKey,
440
- message.arkConfirmed?.signature === void 0 ? null : message.arkConfirmed?.signature,
441
- message.arkConfirmed?.timestamp === void 0 ? null : message.arkConfirmed?.timestamp,
442
- message.zipMetadata ? JSON.stringify(message.zipMetadata) : null,
443
- message.createdAt,
444
- receivedAt === void 0 ? null : receivedAt
445
- );
446
- }
447
- getMessage(messageId) {
448
- const row = this.db.prepare("SELECT * FROM messages WHERE message_id = ?").get(messageId);
449
- if (!row) return void 0;
450
- return this.rowToMessage(row);
451
- }
452
- getMessagesBySession(myAddress, peerAddress) {
453
- const rows = this.db.prepare(
454
- `
499
+ `)
500
+ .run(message.messageId, message.fromAddress, message.toAddress, message.plaintextHash, message.plaintext === undefined ? null : message.plaintext, message.guardAddress === undefined
501
+ ? null
502
+ : message.guardAddress, message.passportAddress === undefined
503
+ ? null
504
+ : message.passportAddress, message.lastReceivedLeafIndex === undefined
505
+ ? null
506
+ : message.lastReceivedLeafIndex, message.direction, message.status, message.msgType, message.leafIndex === undefined ? null : message.leafIndex, message.prevRoot === undefined ? null : message.prevRoot, message.newRoot === undefined ? null : message.newRoot, message.serverSignature === undefined
507
+ ? null
508
+ : message.serverSignature, message.serverPublicKey === undefined
509
+ ? null
510
+ : message.serverPublicKey, message.serverTimestamp === undefined
511
+ ? null
512
+ : message.serverTimestamp, message.arkConfirmed?.recipient === undefined
513
+ ? null
514
+ : message.arkConfirmed?.recipient, message.arkConfirmed?.recipientPublicKey === undefined
515
+ ? null
516
+ : message.arkConfirmed?.recipientPublicKey, message.arkConfirmed?.signature === undefined
517
+ ? null
518
+ : message.arkConfirmed?.signature, message.arkConfirmed?.timestamp === undefined
519
+ ? null
520
+ : message.arkConfirmed?.timestamp, message.zipMetadata
521
+ ? JSON.stringify(message.zipMetadata)
522
+ : null, message.createdAt, receivedAt === undefined ? null : receivedAt);
523
+ }
524
+ getMessage(messageId) {
525
+ const row = this.db
526
+ .prepare("SELECT * FROM messages WHERE message_id = ?")
527
+ .get(messageId);
528
+ if (!row)
529
+ return undefined;
530
+ return this.rowToMessage(row);
531
+ }
532
+ getMessagesBySession(myAddress, peerAddress) {
533
+ const rows = this.db
534
+ .prepare(`
455
535
  SELECT * FROM messages
456
536
  WHERE (from_address = ? AND to_address = ?)
457
537
  OR (from_address = ? AND to_address = ?)
458
538
  ORDER BY created_at ASC
459
- `
460
- ).all(myAddress, peerAddress, peerAddress, myAddress);
461
- return rows.map((r) => this.rowToMessage(r));
462
- }
463
- getPendingMessages(myAddress) {
464
- const rows = this.db.prepare(
465
- `
539
+ `)
540
+ .all(myAddress, peerAddress, peerAddress, myAddress);
541
+ return rows.map((r) => this.rowToMessage(r));
542
+ }
543
+ getPendingMessages(myAddress) {
544
+ const rows = this.db
545
+ .prepare(`
466
546
  SELECT * FROM messages
467
547
  WHERE (from_address = ? OR to_address = ?) AND status = ?
468
548
  ORDER BY created_at ASC
469
- `
470
- ).all(myAddress, myAddress, "pending");
471
- return rows.map((r) => this.rowToMessage(r));
472
- }
473
- updateMessageStatus(messageId, status, updates) {
474
- const fields = ["status = ?"];
475
- const values = [status];
476
- if (updates?.leafIndex !== void 0) {
477
- fields.push("leaf_index = ?");
478
- values.push(updates.leafIndex);
479
- }
480
- if (updates?.newRoot !== void 0) {
481
- fields.push("new_root = ?");
482
- values.push(updates.newRoot);
483
- }
484
- if (updates?.serverSignature !== void 0) {
485
- fields.push("server_signature = ?");
486
- values.push(updates.serverSignature);
487
- }
488
- if (updates?.serverTimestamp !== void 0) {
489
- fields.push("server_timestamp = ?");
490
- values.push(updates.serverTimestamp);
491
- }
492
- if (updates?.serverPublicKey !== void 0) {
493
- fields.push("server_public_key = ?");
494
- values.push(updates.serverPublicKey);
495
- }
496
- values.push(messageId);
497
- this.db.prepare(
498
- `
549
+ `)
550
+ .all(myAddress, myAddress, "pending");
551
+ return rows.map((r) => this.rowToMessage(r));
552
+ }
553
+ updateMessageStatus(messageId, status, updates) {
554
+ const fields = ["status = ?"];
555
+ const values = [status];
556
+ if (updates?.leafIndex !== undefined) {
557
+ fields.push("leaf_index = ?");
558
+ values.push(updates.leafIndex);
559
+ }
560
+ if (updates?.newRoot !== undefined) {
561
+ fields.push("new_root = ?");
562
+ values.push(updates.newRoot);
563
+ }
564
+ if (updates?.serverSignature !== undefined) {
565
+ fields.push("server_signature = ?");
566
+ values.push(updates.serverSignature);
567
+ }
568
+ if (updates?.serverTimestamp !== undefined) {
569
+ fields.push("server_timestamp = ?");
570
+ values.push(updates.serverTimestamp);
571
+ }
572
+ if (updates?.serverPublicKey !== undefined) {
573
+ fields.push("server_public_key = ?");
574
+ values.push(updates.serverPublicKey);
575
+ }
576
+ values.push(messageId);
577
+ this.db
578
+ .prepare(`
499
579
  UPDATE messages SET ${fields.join(", ")} WHERE message_id = ?
500
- `
501
- ).run(...values);
502
- }
503
- /**
504
- * 获取用户的所有消息
505
- *
506
- * @param userAddress 用户地址
507
- * @returns 所有相关消息(发送和接收的)
508
- */
509
- getAllMessages(userAddress) {
510
- const rows = this.db.prepare(
511
- `
580
+ `)
581
+ .run(...values);
582
+ }
583
+ /**
584
+ * 获取用户的所有消息
585
+ *
586
+ * @param userAddress 用户地址
587
+ * @returns 所有相关消息(发送和接收的)
588
+ */
589
+ getAllMessages(userAddress) {
590
+ const rows = this.db
591
+ .prepare(`
512
592
  SELECT * FROM messages
513
593
  WHERE from_address = ? OR to_address = ?
514
594
  ORDER BY created_at DESC
515
- `
516
- ).all(userAddress, userAddress);
517
- return rows.map((r) => this.rowToMessage(r));
518
- }
519
- /**
520
- * 通过消息 ID 获取消息
521
- *
522
- * @param messageId 消息 ID
523
- * @returns 消息对象或 undefined
524
- */
525
- getMessageById(messageId) {
526
- const row = this.db.prepare(
527
- `
595
+ `)
596
+ .all(userAddress, userAddress);
597
+ return rows.map((r) => this.rowToMessage(r));
598
+ }
599
+ /**
600
+ * 通过消息 ID 获取消息
601
+ *
602
+ * @param messageId 消息 ID
603
+ * @returns 消息对象或 undefined
604
+ */
605
+ getMessageById(messageId) {
606
+ const row = this.db
607
+ .prepare(`
528
608
  SELECT * FROM messages
529
609
  WHERE message_id = ?
530
- `
531
- ).get(messageId);
532
- if (!row) return void 0;
533
- return this.rowToMessage(row);
534
- }
535
- /**
536
- * 更新消息 ID(用于 Guard 消息确认后更新 messageId)
537
- *
538
- * 由于 message_id 是主键,需要通过删除旧记录并插入新记录来实现
539
- *
540
- * @param oldMessageId 旧消息 ID(internal_id)
541
- * @param newMessageId 新消息 ID(正式的 message_id
542
- * @param updates 可选的更新字段
543
- * @returns 是否成功更新
544
- */
545
- updateMessageId(oldMessageId, newMessageId, updates) {
546
- const row = this.db.prepare("SELECT * FROM messages WHERE message_id = ?").get(oldMessageId);
547
- if (!row) return false;
548
- const getUpdatedValue = (updateValue, originalValue) => {
549
- if (updateValue !== void 0) return updateValue;
550
- return originalValue === null ? void 0 : originalValue;
551
- };
552
- const message = {
553
- messageId: newMessageId,
554
- fromAddress: row.from_address,
555
- toAddress: row.to_address,
556
- plaintextHash: row.plaintext_hash,
557
- plaintext: row.plaintext === null ? void 0 : row.plaintext,
558
- guardAddress: row.guard_address === null ? void 0 : row.guard_address,
559
- passportAddress: row.passport_address === null ? void 0 : row.passport_address,
560
- direction: row.direction,
561
- status: updates?.status !== void 0 ? updates.status : row.status,
562
- msgType: row.msg_type,
563
- leafIndex: getUpdatedValue(updates?.leafIndex, row.leaf_index),
564
- prevRoot: getUpdatedValue(updates?.prevRoot, row.prev_root),
565
- newRoot: getUpdatedValue(updates?.newRoot, row.new_root),
566
- serverSignature: getUpdatedValue(
567
- updates?.serverSignature,
568
- row.server_signature
569
- ),
570
- serverPublicKey: getUpdatedValue(
571
- updates?.serverPublicKey,
572
- row.server_public_key
573
- ),
574
- serverTimestamp: getUpdatedValue(
575
- updates?.serverTimestamp,
576
- row.server_timestamp
577
- ),
578
- arkConfirmed: row.ark_recipient ? {
579
- recipient: row.ark_recipient,
580
- recipientPublicKey: row.ark_recipient_pubkey,
581
- signature: row.ark_signature,
582
- timestamp: row.ark_timestamp
583
- } : void 0,
584
- zipMetadata: row.zip_metadata ? JSON.parse(row.zip_metadata) : void 0,
585
- createdAt: row.created_at,
586
- receivedAt: row.received_at === null ? void 0 : row.received_at
587
- };
588
- const transaction = this.db.transaction(() => {
589
- this.db.prepare("DELETE FROM messages WHERE message_id = ?").run(oldMessageId);
590
- this.saveMessage(message);
591
- });
592
- try {
593
- transaction();
594
- return true;
595
- } catch (error) {
596
- return false;
597
- }
598
- }
599
- rowToMessage(row) {
600
- if (row.to_address === null) {
601
- throw new Error(`Message ${row.message_id} has null toAddress`);
602
- }
603
- return {
604
- messageId: row.message_id,
605
- fromAddress: row.from_address,
606
- toAddress: row.to_address,
607
- plaintextHash: row.plaintext_hash,
608
- plaintext: row.plaintext === null ? void 0 : row.plaintext,
609
- guardAddress: row.guard_address === null ? void 0 : row.guard_address,
610
- passportAddress: row.passport_address === null ? void 0 : row.passport_address,
611
- lastReceivedLeafIndex: row.last_received_leaf_index === null ? void 0 : row.last_received_leaf_index,
612
- direction: row.direction,
613
- status: row.status,
614
- msgType: row.msg_type,
615
- leafIndex: row.leaf_index === null ? void 0 : row.leaf_index,
616
- prevRoot: row.prev_root === null ? void 0 : row.prev_root,
617
- newRoot: row.new_root === null ? void 0 : row.new_root,
618
- serverSignature: row.server_signature === null ? void 0 : row.server_signature,
619
- serverPublicKey: row.server_public_key === null ? void 0 : row.server_public_key,
620
- serverTimestamp: row.server_timestamp === null ? void 0 : row.server_timestamp,
621
- arkConfirmed: row.ark_recipient ? {
622
- recipient: row.ark_recipient,
623
- recipientPublicKey: row.ark_recipient_pubkey,
624
- signature: row.ark_signature,
625
- timestamp: row.ark_timestamp
626
- } : void 0,
627
- zipMetadata: row.zip_metadata ? JSON.parse(row.zip_metadata) : void 0,
628
- createdAt: row.created_at,
629
- receivedAt: row.received_at === null ? void 0 : row.received_at
630
- };
631
- }
632
- /**
633
- * 获取最后收到的消息序号(用于消息同步确认)
634
- *
635
- * 查询指定会话中,用户作为接收者时,发送者最后收到的消息序号
636
- * 用于在发送新消息时,告诉对方我已经收到了哪些消息
637
- *
638
- * @param myAddress 当前用户地址
639
- * @param peerAddress 对方地址
640
- * @returns 最后收到的消息序号(leafIndex),如果没有则返回 -1
641
- */
642
- getLastReceivedLeafIndex(myAddress, peerAddress) {
643
- const row = this.db.prepare(
644
- `
610
+ `)
611
+ .get(messageId);
612
+ if (!row)
613
+ return undefined;
614
+ return this.rowToMessage(row);
615
+ }
616
+ /**
617
+ * 更新消息 ID(用于 Guard 消息确认后更新 messageId)
618
+ *
619
+ * 由于 message_id 是主键,需要通过删除旧记录并插入新记录来实现
620
+ *
621
+ * @param oldMessageId 旧消息 ID(internal_id
622
+ * @param newMessageId 新消息 ID(正式的 message_id)
623
+ * @param updates 可选的更新字段
624
+ * @returns 是否成功更新
625
+ */
626
+ updateMessageId(oldMessageId, newMessageId, updates) {
627
+ const row = this.db
628
+ .prepare("SELECT * FROM messages WHERE message_id = ?")
629
+ .get(oldMessageId);
630
+ if (!row)
631
+ return false;
632
+ // 辅助函数:获取更新值,优先使用 updates 中的值,但不使用 ?? 避免改写数据
633
+ // 如果 updates 中有定义该字段(包括 null),使用 updates 的值;否则使用原值
634
+ const getUpdatedValue = (updateValue, originalValue) => {
635
+ if (updateValue !== undefined)
636
+ return updateValue;
637
+ return originalValue === null ? undefined : originalValue;
638
+ };
639
+ // 构建更新后的消息对象
640
+ const message = {
641
+ messageId: newMessageId,
642
+ fromAddress: row.from_address,
643
+ toAddress: row.to_address,
644
+ plaintextHash: row.plaintext_hash,
645
+ plaintext: row.plaintext === null ? undefined : row.plaintext,
646
+ guardAddress: row.guard_address === null ? undefined : row.guard_address,
647
+ passportAddress: row.passport_address === null
648
+ ? undefined
649
+ : row.passport_address,
650
+ direction: row.direction,
651
+ status: updates?.status !== undefined ? updates.status : row.status,
652
+ msgType: row.msg_type,
653
+ leafIndex: getUpdatedValue(updates?.leafIndex, row.leaf_index),
654
+ prevRoot: getUpdatedValue(updates?.prevRoot, row.prev_root),
655
+ newRoot: getUpdatedValue(updates?.newRoot, row.new_root),
656
+ serverSignature: getUpdatedValue(updates?.serverSignature, row.server_signature),
657
+ serverPublicKey: getUpdatedValue(updates?.serverPublicKey, row.server_public_key),
658
+ serverTimestamp: getUpdatedValue(updates?.serverTimestamp, row.server_timestamp),
659
+ arkConfirmed: row.ark_recipient
660
+ ? {
661
+ recipient: row.ark_recipient,
662
+ recipientPublicKey: row.ark_recipient_pubkey,
663
+ signature: row.ark_signature,
664
+ timestamp: row.ark_timestamp,
665
+ }
666
+ : undefined,
667
+ zipMetadata: row.zip_metadata
668
+ ? JSON.parse(row.zip_metadata)
669
+ : undefined,
670
+ createdAt: row.created_at,
671
+ receivedAt: row.received_at === null ? undefined : row.received_at,
672
+ };
673
+ // 使用事务确保原子性
674
+ const transaction = this.db.transaction(() => {
675
+ // 删除旧记录
676
+ this.db
677
+ .prepare("DELETE FROM messages WHERE message_id = ?")
678
+ .run(oldMessageId);
679
+ // 插入新记录
680
+ this.saveMessage(message);
681
+ });
682
+ try {
683
+ transaction();
684
+ return true;
685
+ }
686
+ catch (error) {
687
+ //console.error("Failed to update message ID:", error);
688
+ return false;
689
+ }
690
+ }
691
+ rowToMessage(row) {
692
+ if (row.to_address === null) {
693
+ throw new Error(`Message ${row.message_id} has null toAddress`);
694
+ }
695
+ return {
696
+ messageId: row.message_id,
697
+ fromAddress: row.from_address,
698
+ toAddress: row.to_address,
699
+ plaintextHash: row.plaintext_hash,
700
+ plaintext: row.plaintext === null ? undefined : row.plaintext,
701
+ guardAddress: row.guard_address === null ? undefined : row.guard_address,
702
+ passportAddress: row.passport_address === null
703
+ ? undefined
704
+ : row.passport_address,
705
+ lastReceivedLeafIndex: row.last_received_leaf_index === null
706
+ ? undefined
707
+ : row.last_received_leaf_index,
708
+ direction: row.direction,
709
+ status: row.status,
710
+ msgType: row.msg_type,
711
+ leafIndex: row.leaf_index === null ? undefined : row.leaf_index,
712
+ prevRoot: row.prev_root === null ? undefined : row.prev_root,
713
+ newRoot: row.new_root === null ? undefined : row.new_root,
714
+ serverSignature: row.server_signature === null
715
+ ? undefined
716
+ : row.server_signature,
717
+ serverPublicKey: row.server_public_key === null
718
+ ? undefined
719
+ : row.server_public_key,
720
+ serverTimestamp: row.server_timestamp === null
721
+ ? undefined
722
+ : row.server_timestamp,
723
+ arkConfirmed: row.ark_recipient
724
+ ? {
725
+ recipient: row.ark_recipient,
726
+ recipientPublicKey: row.ark_recipient_pubkey,
727
+ signature: row.ark_signature,
728
+ timestamp: row.ark_timestamp,
729
+ }
730
+ : undefined,
731
+ zipMetadata: row.zip_metadata
732
+ ? JSON.parse(row.zip_metadata)
733
+ : undefined,
734
+ createdAt: row.created_at,
735
+ receivedAt: row.received_at === null ? undefined : row.received_at,
736
+ };
737
+ }
738
+ /**
739
+ * 获取最后收到的消息序号(用于消息同步确认)
740
+ *
741
+ * 查询指定会话中,用户作为接收者时,发送者最后收到的消息序号
742
+ * 用于在发送新消息时,告诉对方我已经收到了哪些消息
743
+ *
744
+ * @param myAddress 当前用户地址
745
+ * @param peerAddress 对方地址
746
+ * @returns 最后收到的消息序号(leafIndex),如果没有则返回 -1
747
+ */
748
+ getLastReceivedLeafIndex(myAddress, peerAddress) {
749
+ // 查询从 peerAddress 发送给 myAddress 的消息中,
750
+ // 最大的 last_received_leaf_index
751
+ const row = this.db
752
+ .prepare(`
645
753
  SELECT MAX(last_received_leaf_index) as max_index
646
754
  FROM messages
647
755
  WHERE from_address = ? AND to_address = ?
648
756
  AND last_received_leaf_index IS NOT NULL
649
- `
650
- ).get(peerAddress, myAddress);
651
- return row?.max_index ?? -1;
652
- }
757
+ `)
758
+ .get(peerAddress, myAddress);
759
+ return row?.max_index ?? -1;
760
+ }
653
761
  }
654
- class SessionStateStorage {
655
- constructor(userAddress) {
656
- __publicField(this, "userAddress");
657
- this.userAddress = userAddress;
658
- }
659
- get db() {
660
- return getDatabase(this.userAddress);
661
- }
662
- getSessionId(myAddress, peerAddress) {
663
- const addresses = [myAddress, peerAddress].sort();
664
- return `${addresses[0]}:${addresses[1]}`;
665
- }
666
- getSessionState(myAddress, peerAddress) {
667
- const sessionId = this.getSessionId(myAddress, peerAddress);
668
- const row = this.db.prepare("SELECT * FROM session_states WHERE session_id = ?").get(sessionId);
669
- if (!row) return void 0;
670
- return {
671
- sessionId: row.session_id,
672
- myAddress: row.my_address,
673
- peerAddress: row.peer_address,
674
- currentRoot: row.current_root,
675
- prevRoot: row.prev_root,
676
- messageCount: row.message_count,
677
- lastLeafIndex: row.last_leaf_index,
678
- lastConfirmedHash: row.last_confirmed_hash === null ? "" : row.last_confirmed_hash,
679
- lastSyncAt: row.last_sync_at === null ? 0 : row.last_sync_at,
680
- createdAt: row.created_at,
681
- updatedAt: row.updated_at
682
- };
683
- }
684
- updateSessionState(myAddress, peerAddress, updates) {
685
- const sessionId = this.getSessionId(myAddress, peerAddress);
686
- const existing = this.getSessionState(myAddress, peerAddress);
687
- const now = Date.now();
688
- if (existing) {
689
- const updated = { ...existing, ...updates, updatedAt: now };
690
- this.db.prepare(
691
- `
762
+ // ========== 会话状态存储 ==========
763
+ export class SessionStateStorage {
764
+ userAddress;
765
+ constructor(userAddress) {
766
+ this.userAddress = userAddress;
767
+ }
768
+ get db() {
769
+ return getDatabase(this.userAddress);
770
+ }
771
+ getSessionId(myAddress, peerAddress) {
772
+ const addresses = [myAddress, peerAddress].sort();
773
+ return `${addresses[0]}:${addresses[1]}`;
774
+ }
775
+ getSessionState(myAddress, peerAddress) {
776
+ const sessionId = this.getSessionId(myAddress, peerAddress);
777
+ const row = this.db
778
+ .prepare("SELECT * FROM session_states WHERE session_id = ?")
779
+ .get(sessionId);
780
+ if (!row)
781
+ return undefined;
782
+ return {
783
+ sessionId: row.session_id,
784
+ myAddress: row.my_address,
785
+ peerAddress: row.peer_address,
786
+ currentRoot: row.current_root,
787
+ prevRoot: row.prev_root,
788
+ messageCount: row.message_count,
789
+ lastLeafIndex: row.last_leaf_index,
790
+ lastConfirmedHash: row.last_confirmed_hash === null ? "" : row.last_confirmed_hash,
791
+ lastSyncAt: row.last_sync_at === null ? 0 : row.last_sync_at,
792
+ createdAt: row.created_at,
793
+ updatedAt: row.updated_at,
794
+ };
795
+ }
796
+ updateSessionState(myAddress, peerAddress, updates) {
797
+ const sessionId = this.getSessionId(myAddress, peerAddress);
798
+ const existing = this.getSessionState(myAddress, peerAddress);
799
+ const now = Date.now();
800
+ if (existing) {
801
+ const updated = { ...existing, ...updates, updatedAt: now };
802
+ this.db
803
+ .prepare(`
692
804
  UPDATE session_states SET
693
805
  current_root = ?,
694
806
  prev_root = ?,
@@ -698,64 +810,47 @@ class SessionStateStorage {
698
810
  last_sync_at = ?,
699
811
  updated_at = ?
700
812
  WHERE session_id = ?
701
- `
702
- ).run(
703
- updated.currentRoot,
704
- updated.prevRoot,
705
- updated.messageCount,
706
- updated.lastLeafIndex,
707
- updated.lastConfirmedHash,
708
- updated.lastSyncAt,
709
- updated.updatedAt,
710
- sessionId
711
- );
712
- } else {
713
- const initialRoot = "0".repeat(64);
714
- this.db.prepare(
715
- `
813
+ `)
814
+ .run(updated.currentRoot, updated.prevRoot, updated.messageCount, updated.lastLeafIndex, updated.lastConfirmedHash, updated.lastSyncAt, updated.updatedAt, sessionId);
815
+ }
816
+ else {
817
+ const initialRoot = "0".repeat(64);
818
+ this.db
819
+ .prepare(`
716
820
  INSERT INTO session_states (
717
821
  session_id, my_address, peer_address, current_root, prev_root,
718
822
  message_count, last_leaf_index, last_confirmed_hash, last_sync_at,
719
823
  created_at, updated_at
720
824
  ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
721
- `
722
- ).run(
723
- sessionId,
724
- myAddress,
725
- peerAddress,
726
- updates.currentRoot ?? initialRoot,
727
- updates.prevRoot ?? initialRoot,
728
- updates.messageCount ?? 0,
729
- updates.lastLeafIndex ?? 0,
730
- updates.lastConfirmedHash ?? "",
731
- updates.lastSyncAt ?? 0,
732
- now,
733
- now
734
- );
825
+ `)
826
+ .run(sessionId, myAddress, peerAddress, updates.currentRoot ?? initialRoot, updates.prevRoot ?? initialRoot, updates.messageCount ?? 0, updates.lastLeafIndex ?? 0, updates.lastConfirmedHash ?? "", updates.lastSyncAt ?? 0, now, now);
827
+ }
828
+ }
829
+ getCurrentRoot(myAddress, peerAddress) {
830
+ const state = this.getSessionState(myAddress, peerAddress);
831
+ return state?.currentRoot ?? "0".repeat(64);
735
832
  }
736
- }
737
- getCurrentRoot(myAddress, peerAddress) {
738
- const state = this.getSessionState(myAddress, peerAddress);
739
- return state?.currentRoot ?? "0".repeat(64);
740
- }
741
833
  }
742
- class MessengerPersistStorage {
743
- constructor() {
744
- __publicField(this, "initialized", false);
745
- }
746
- get db() {
747
- const db = getGlobalDatabase();
748
- if (!this.initialized) {
749
- this.initTable(db);
750
- this.initialized = true;
834
+ /**
835
+ * MessengerManager 持久化存储类
836
+ *
837
+ * 使用 SQLite 存储 MessengerManager 的配置和状态
838
+ */
839
+ export class MessengerPersistStorage {
840
+ initialized = false;
841
+ get db() {
842
+ const db = getGlobalDatabase();
843
+ if (!this.initialized) {
844
+ this.initTable(db);
845
+ this.initialized = true;
846
+ }
847
+ return db;
751
848
  }
752
- return db;
753
- }
754
- /**
755
- * 初始化存储表
756
- */
757
- initTable(db) {
758
- db.exec(`
849
+ /**
850
+ * 初始化存储表
851
+ */
852
+ initTable(db) {
853
+ db.exec(`
759
854
  CREATE TABLE IF NOT EXISTS messenger_manager_state (
760
855
  instance_id TEXT PRIMARY KEY,
761
856
  state_data TEXT NOT NULL,
@@ -763,7 +858,7 @@ class MessengerPersistStorage {
763
858
  );
764
859
  CREATE INDEX IF NOT EXISTS idx_messenger_state_updated ON messenger_manager_state(updated_at);
765
860
  `);
766
- db.exec(`
861
+ db.exec(`
767
862
  CREATE TABLE IF NOT EXISTS sse_connection_locks (
768
863
  account_address TEXT PRIMARY KEY,
769
864
  process_id TEXT NOT NULL,
@@ -773,91 +868,94 @@ class MessengerPersistStorage {
773
868
  );
774
869
  CREATE INDEX IF NOT EXISTS idx_sse_lock_heartbeat ON sse_connection_locks(last_heartbeat);
775
870
  `);
776
- }
777
- /**
778
- * 保存 Messenger 配置和账号信息
779
- *
780
- * @param instanceId 实例标识(用于区分不同的 MessengerManager 实例)
781
- * @param state 要保存的状态
782
- */
783
- saveState(instanceId, state) {
784
- const data = JSON.stringify(state);
785
- const now = Date.now();
786
- this.db.prepare(
787
- `
871
+ }
872
+ /**
873
+ * 保存 Messenger 配置和账号信息
874
+ *
875
+ * @param instanceId 实例标识(用于区分不同的 MessengerManager 实例)
876
+ * @param state 要保存的状态
877
+ */
878
+ saveState(instanceId, state) {
879
+ const data = JSON.stringify(state);
880
+ const now = Date.now();
881
+ this.db
882
+ .prepare(`
788
883
  INSERT INTO messenger_manager_state (instance_id, state_data, updated_at)
789
884
  VALUES (?, ?, ?)
790
885
  ON CONFLICT(instance_id) DO UPDATE SET
791
886
  state_data = excluded.state_data,
792
887
  updated_at = excluded.updated_at
793
- `
794
- ).run(instanceId, data, now);
795
- }
796
- /**
797
- * 加载 Messenger 配置和账号信息
798
- *
799
- * @param instanceId 实例标识
800
- * @returns 保存的状态,如果不存在返回 null
801
- */
802
- loadState(instanceId) {
803
- const row = this.db.prepare(
804
- "SELECT state_data FROM messenger_manager_state WHERE instance_id = ?"
805
- ).get(instanceId);
806
- if (!row?.state_data) return null;
807
- try {
808
- return JSON.parse(row.state_data);
809
- } catch (error) {
810
- return null;
811
- }
812
- }
813
- /**
814
- * 删除保存的状态
815
- *
816
- * @param instanceId 实例标识
817
- */
818
- deleteState(instanceId) {
819
- this.db.prepare(
820
- "DELETE FROM messenger_manager_state WHERE instance_id = ?"
821
- ).run(instanceId);
822
- }
823
- /**
824
- * 获取所有实例ID列表
825
- */
826
- getAllInstanceIds() {
827
- const rows = this.db.prepare(
828
- "SELECT instance_id FROM messenger_manager_state ORDER BY updated_at DESC"
829
- ).all();
830
- return rows.map((r) => r.instance_id);
831
- }
832
- get processId() {
833
- return `pid_${process.pid}_${Date.now()}`;
834
- }
835
- /**
836
- * 尝试获取指定账号的 SSE 连接锁
837
- * @param accountAddress 账号地址
838
- * @param instanceId 当前实例ID
839
- * @returns 是否成功获取锁
840
- */
841
- tryAcquireSSELock(accountAddress, instanceId) {
842
- const now = Date.now();
843
- const heartbeatTimeout = 15e3;
844
- const transaction = this.db.transaction(() => {
845
- const row = this.db.prepare(
846
- "SELECT * FROM sse_connection_locks WHERE account_address = ?"
847
- ).get(accountAddress.toLowerCase());
848
- if (row) {
849
- if (row.instance_id === instanceId) {
850
- this.db.prepare(
851
- "UPDATE sse_connection_locks SET last_heartbeat = ? WHERE account_address = ?"
852
- ).run(now, accountAddress.toLowerCase());
853
- return true;
888
+ `)
889
+ .run(instanceId, data, now);
890
+ }
891
+ /**
892
+ * 加载 Messenger 配置和账号信息
893
+ *
894
+ * @param instanceId 实例标识
895
+ * @returns 保存的状态,如果不存在返回 null
896
+ */
897
+ loadState(instanceId) {
898
+ const row = this.db
899
+ .prepare("SELECT state_data FROM messenger_manager_state WHERE instance_id = ?")
900
+ .get(instanceId);
901
+ if (!row?.state_data)
902
+ return null;
903
+ try {
904
+ return JSON.parse(row.state_data);
854
905
  }
855
- if (now - row.last_heartbeat < heartbeatTimeout) {
856
- return false;
906
+ catch (error) {
907
+ //console.error("Failed to parse persisted state:", error);
908
+ return null;
857
909
  }
858
- }
859
- this.db.prepare(
860
- `
910
+ }
911
+ /**
912
+ * 删除保存的状态
913
+ *
914
+ * @param instanceId 实例标识
915
+ */
916
+ deleteState(instanceId) {
917
+ this.db
918
+ .prepare("DELETE FROM messenger_manager_state WHERE instance_id = ?")
919
+ .run(instanceId);
920
+ }
921
+ /**
922
+ * 获取所有实例ID列表
923
+ */
924
+ getAllInstanceIds() {
925
+ const rows = this.db
926
+ .prepare("SELECT instance_id FROM messenger_manager_state ORDER BY updated_at DESC")
927
+ .all();
928
+ return rows.map((r) => r.instance_id);
929
+ }
930
+ get processId() {
931
+ return `pid_${process.pid}_${Date.now()}`;
932
+ }
933
+ /**
934
+ * 尝试获取指定账号的 SSE 连接锁
935
+ * @param accountAddress 账号地址
936
+ * @param instanceId 当前实例ID
937
+ * @returns 是否成功获取锁
938
+ */
939
+ tryAcquireSSELock(accountAddress, instanceId) {
940
+ const now = Date.now();
941
+ const heartbeatTimeout = 15000;
942
+ const transaction = this.db.transaction(() => {
943
+ const row = this.db
944
+ .prepare("SELECT * FROM sse_connection_locks WHERE account_address = ?")
945
+ .get(accountAddress.toLowerCase());
946
+ if (row) {
947
+ if (row.instance_id === instanceId) {
948
+ this.db
949
+ .prepare("UPDATE sse_connection_locks SET last_heartbeat = ? WHERE account_address = ?")
950
+ .run(now, accountAddress.toLowerCase());
951
+ return true;
952
+ }
953
+ if (now - row.last_heartbeat < heartbeatTimeout) {
954
+ return false;
955
+ }
956
+ }
957
+ this.db
958
+ .prepare(`
861
959
  INSERT INTO sse_connection_locks (
862
960
  account_address, process_id, instance_id, last_heartbeat, created_at
863
961
  ) VALUES (?, ?, ?, ?, ?)
@@ -865,71 +963,62 @@ class MessengerPersistStorage {
865
963
  process_id = excluded.process_id,
866
964
  instance_id = excluded.instance_id,
867
965
  last_heartbeat = excluded.last_heartbeat
868
- `
869
- ).run(
870
- accountAddress.toLowerCase(),
871
- this.processId,
872
- instanceId,
873
- now,
874
- now
875
- );
876
- return true;
877
- });
878
- try {
879
- return transaction();
880
- } catch (error) {
881
- console.warn("Failed to acquire SSE lock:", error);
882
- return false;
883
- }
884
- }
885
- /**
886
- * 更新 SSE 连接锁的心跳
887
- * @param accountAddress 账号地址
888
- * @param instanceId 当前实例ID
889
- */
890
- updateSSELockHeartbeat(accountAddress, instanceId) {
891
- const now = Date.now();
892
- try {
893
- this.db.prepare(
894
- "UPDATE sse_connection_locks SET last_heartbeat = ? WHERE account_address = ? AND instance_id = ?"
895
- ).run(now, accountAddress.toLowerCase(), instanceId);
896
- } catch (error) {
897
- console.warn("Failed to update SSE lock heartbeat:", error);
898
- }
899
- }
900
- /**
901
- * 释放指定账号的 SSE 连接锁
902
- * @param accountAddress 账号地址
903
- * @param instanceId 当前实例ID
904
- */
905
- releaseSSELock(accountAddress, instanceId) {
906
- try {
907
- this.db.prepare(
908
- "DELETE FROM sse_connection_locks WHERE account_address = ? AND instance_id = ?"
909
- ).run(accountAddress.toLowerCase(), instanceId);
910
- } catch (error) {
911
- console.warn("Failed to release SSE lock:", error);
912
- }
913
- }
914
- /**
915
- * 检查是否持有指定账号的 SSE 连接锁
916
- * @param accountAddress 账号地址
917
- * @param instanceId 当前实例ID
918
- * @returns 是否持有锁
919
- */
920
- holdsSSELock(accountAddress, instanceId) {
921
- const row = this.db.prepare(
922
- "SELECT * FROM sse_connection_locks WHERE account_address = ? AND instance_id = ?"
923
- ).get(accountAddress.toLowerCase(), instanceId);
924
- return !!row;
925
- }
966
+ `)
967
+ .run(accountAddress.toLowerCase(), this.processId, instanceId, now, now);
968
+ return true;
969
+ });
970
+ try {
971
+ return transaction();
972
+ }
973
+ catch (error) {
974
+ console.warn("Failed to acquire SSE lock:", error);
975
+ return false;
976
+ }
977
+ }
978
+ /**
979
+ * 更新 SSE 连接锁的心跳
980
+ * @param accountAddress 账号地址
981
+ * @param instanceId 当前实例ID
982
+ */
983
+ updateSSELockHeartbeat(accountAddress, instanceId) {
984
+ const now = Date.now();
985
+ try {
986
+ this.db
987
+ .prepare("UPDATE sse_connection_locks SET last_heartbeat = ? WHERE account_address = ? AND instance_id = ?")
988
+ .run(now, accountAddress.toLowerCase(), instanceId);
989
+ }
990
+ catch (error) {
991
+ console.warn("Failed to update SSE lock heartbeat:", error);
992
+ }
993
+ }
994
+ /**
995
+ * 释放指定账号的 SSE 连接锁
996
+ * @param accountAddress 账号地址
997
+ * @param instanceId 当前实例ID
998
+ */
999
+ releaseSSELock(accountAddress, instanceId) {
1000
+ try {
1001
+ this.db
1002
+ .prepare("DELETE FROM sse_connection_locks WHERE account_address = ? AND instance_id = ?")
1003
+ .run(accountAddress.toLowerCase(), instanceId);
1004
+ }
1005
+ catch (error) {
1006
+ console.warn("Failed to release SSE lock:", error);
1007
+ }
1008
+ }
1009
+ /**
1010
+ * 检查是否持有指定账号的 SSE 连接锁
1011
+ * @param accountAddress 账号地址
1012
+ * @param instanceId 当前实例ID
1013
+ * @returns 是否持有锁
1014
+ */
1015
+ holdsSSELock(accountAddress, instanceId) {
1016
+ const row = this.db
1017
+ .prepare("SELECT * FROM sse_connection_locks WHERE account_address = ? AND instance_id = ?")
1018
+ .get(accountAddress.toLowerCase(), instanceId);
1019
+ return !!row;
1020
+ }
926
1021
  }
927
- const defaultPersistStorage = new MessengerPersistStorage();
928
- export {
929
- MessageStorage,
930
- MessengerPersistStorage,
931
- SessionStateStorage,
932
- SignalProtocolStorage,
933
- defaultPersistStorage,
934
- resetDbConnection
935
- };
1022
+ // 默认持久化存储实例
1023
+ export const defaultPersistStorage = new MessengerPersistStorage();
1024
+ //# sourceMappingURL=storage.js.map