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