zapo-js 0.1.2 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -4
- package/dist/appstate/WaAppStateCrypto.js +1 -1
- package/dist/appstate/WaAppStateSyncClient.js +138 -93
- package/dist/appstate/{store/sqlite.js → encoding.js} +13 -8
- package/dist/appstate/index.js +8 -6
- package/dist/appstate/utils.js +0 -5
- package/dist/auth/WaAuthClient.js +36 -47
- package/dist/auth/flow/WaAuthCredentialsFlow.js +7 -7
- package/dist/auth/index.js +1 -6
- package/dist/auth/pairing/WaPairingCodeCrypto.js +6 -4
- package/dist/auth/pairing/WaPairingFlow.js +13 -3
- package/dist/client/WaClient.js +225 -101
- package/dist/client/WaClientFactory.js +294 -44
- package/dist/client/connection/WaConnectionManager.js +19 -10
- package/dist/client/coordinators/WaBusinessCoordinator.js +241 -0
- package/dist/client/coordinators/WaGroupCoordinator.js +11 -7
- package/dist/client/coordinators/WaIncomingNodeCoordinator.js +1 -0
- package/dist/client/coordinators/WaMessageDispatchCoordinator.js +292 -99
- package/dist/client/coordinators/WaPassiveTasksCoordinator.js +74 -31
- package/dist/client/coordinators/WaPrivacyCoordinator.js +134 -0
- package/dist/client/coordinators/WaProfileCoordinator.js +212 -0
- package/dist/client/coordinators/WaRetryCoordinator.js +179 -27
- package/dist/client/coordinators/WaStreamControlCoordinator.js +18 -11
- package/dist/client/coordinators/WaTrustedContactTokenCoordinator.js +166 -0
- package/dist/client/dirty.js +40 -20
- package/dist/client/events/devices.js +72 -0
- package/dist/client/events/group.js +3 -11
- package/dist/client/events/identity.js +22 -0
- package/dist/client/events/privacy-token.js +39 -0
- package/dist/client/history-sync.js +50 -9
- package/dist/client/incoming.js +37 -7
- package/dist/client/mailbox.js +24 -23
- package/dist/client/messages.js +107 -31
- package/dist/client/messaging/fanout.js +21 -11
- package/dist/client/messaging/participants.js +6 -4
- package/dist/client/persistence/WriteBehindPersistence.js +129 -0
- package/dist/client/tokens/cs-token.js +50 -0
- package/dist/client/tokens/tc-token.js +25 -0
- package/dist/crypto/core/index.js +2 -2
- package/dist/crypto/core/keys.js +4 -4
- package/dist/crypto/core/nonce.js +2 -0
- package/dist/crypto/core/primitives.js +0 -8
- package/dist/crypto/core/random.js +22 -0
- package/dist/crypto/curves/X25519.js +25 -6
- package/dist/crypto/index.js +3 -0
- package/dist/crypto/math/constants.js +13 -36
- package/dist/crypto/math/edwards.js +171 -44
- package/dist/crypto/math/fe.js +706 -0
- package/dist/crypto/math/mod.js +10 -3
- package/dist/esm/appstate/WaAppStateCrypto.js +1 -1
- package/dist/esm/appstate/WaAppStateSyncClient.js +138 -93
- package/dist/esm/appstate/{store/sqlite.js → encoding.js} +13 -8
- package/dist/esm/appstate/index.js +2 -2
- package/dist/esm/appstate/utils.js +2 -5
- package/dist/esm/auth/WaAuthClient.js +36 -47
- package/dist/esm/auth/flow/WaAuthCredentialsFlow.js +7 -7
- package/dist/esm/auth/index.js +0 -2
- package/dist/esm/auth/pairing/WaPairingCodeCrypto.js +6 -4
- package/dist/esm/auth/pairing/WaPairingFlow.js +14 -4
- package/dist/esm/client/WaClient.js +225 -101
- package/dist/esm/client/WaClientFactory.js +295 -45
- package/dist/esm/client/connection/WaConnectionManager.js +19 -10
- package/dist/esm/client/coordinators/WaBusinessCoordinator.js +238 -0
- package/dist/esm/client/coordinators/WaGroupCoordinator.js +11 -7
- package/dist/esm/client/coordinators/WaIncomingNodeCoordinator.js +1 -0
- package/dist/esm/client/coordinators/WaMessageDispatchCoordinator.js +295 -102
- package/dist/esm/client/coordinators/WaPassiveTasksCoordinator.js +74 -31
- package/dist/esm/client/coordinators/WaPrivacyCoordinator.js +131 -0
- package/dist/esm/client/coordinators/WaProfileCoordinator.js +209 -0
- package/dist/esm/client/coordinators/WaRetryCoordinator.js +181 -29
- package/dist/esm/client/coordinators/WaStreamControlCoordinator.js +19 -12
- package/dist/esm/client/coordinators/WaTrustedContactTokenCoordinator.js +162 -0
- package/dist/esm/client/dirty.js +40 -20
- package/dist/esm/client/events/devices.js +68 -0
- package/dist/esm/client/events/group.js +3 -11
- package/dist/esm/client/events/identity.js +19 -0
- package/dist/esm/client/events/privacy-token.js +36 -0
- package/dist/esm/client/history-sync.js +50 -9
- package/dist/esm/client/incoming.js +38 -8
- package/dist/esm/client/mailbox.js +24 -23
- package/dist/esm/client/messages.js +108 -32
- package/dist/esm/client/messaging/fanout.js +22 -12
- package/dist/esm/client/messaging/participants.js +6 -4
- package/dist/esm/client/persistence/WriteBehindPersistence.js +125 -0
- package/dist/esm/client/tokens/cs-token.js +46 -0
- package/dist/esm/client/tokens/tc-token.js +18 -0
- package/dist/esm/crypto/core/index.js +2 -2
- package/dist/esm/crypto/core/keys.js +1 -1
- package/dist/esm/crypto/core/nonce.js +2 -0
- package/dist/esm/crypto/core/primitives.js +0 -7
- package/dist/esm/crypto/core/random.js +22 -1
- package/dist/esm/crypto/curves/X25519.js +25 -6
- package/dist/esm/crypto/index.js +1 -0
- package/dist/esm/crypto/math/constants.js +12 -35
- package/dist/esm/crypto/math/edwards.js +174 -47
- package/dist/esm/crypto/math/fe.js +691 -0
- package/dist/esm/crypto/math/mod.js +10 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/infra/perf/BackgroundQueue.js +478 -0
- package/dist/esm/infra/perf/BoundedTaskQueue.js +3 -1
- package/dist/esm/infra/perf/PromiseDedup.js +20 -0
- package/dist/esm/infra/perf/SharedExclusiveGate.js +109 -0
- package/dist/esm/infra/perf/StoreLock.js +77 -0
- package/dist/esm/media/WaMediaCrypto.js +95 -13
- package/dist/esm/media/WaMediaTransferClient.js +39 -47
- package/dist/esm/media/constants.js +2 -1
- package/dist/esm/message/WaMessageClient.js +26 -19
- package/dist/esm/message/content.js +195 -9
- package/dist/esm/message/icdc.js +76 -0
- package/dist/esm/message/incoming.js +24 -12
- package/dist/esm/message/phash.js +3 -1
- package/dist/esm/message/reporting-token.js +14 -27
- package/dist/esm/protocol/appstate.js +9 -40
- package/dist/esm/protocol/browser.js +10 -18
- package/dist/esm/protocol/constants.js +5 -3
- package/dist/esm/protocol/defaults.js +6 -0
- package/dist/esm/protocol/index.js +1 -2
- package/dist/esm/protocol/jid.js +105 -36
- package/dist/esm/protocol/message.js +61 -1
- package/dist/esm/protocol/nodes.js +2 -0
- package/dist/esm/protocol/notification.js +3 -1
- package/dist/esm/protocol/privacy-token.js +17 -0
- package/dist/esm/protocol/privacy.js +55 -0
- package/dist/esm/protocol/stream.js +26 -1
- package/dist/esm/retry/codec.js +216 -0
- package/dist/esm/retry/constants.js +1 -1
- package/dist/esm/retry/index.js +2 -2
- package/dist/esm/retry/parse.js +50 -30
- package/dist/esm/retry/replay.js +11 -7
- package/dist/esm/retry/tracker.js +50 -12
- package/dist/esm/signal/api/SignalDeviceSyncApi.js +49 -32
- package/dist/esm/signal/api/SignalDigestSyncApi.js +13 -9
- package/dist/esm/signal/api/SignalIdentitySyncApi.js +26 -11
- package/dist/esm/signal/api/SignalMissingPreKeysSyncApi.js +18 -7
- package/dist/esm/signal/api/SignalRotateKeyApi.js +4 -2
- package/dist/esm/signal/api/SignalSessionSyncApi.js +16 -7
- package/dist/esm/signal/api/result-map.js +10 -0
- package/dist/esm/signal/constants.js +0 -4
- package/dist/esm/signal/crypto/WaAdvSignature.js +12 -6
- package/dist/esm/signal/{store/sqlite.js → encoding.js} +78 -24
- package/dist/esm/signal/group/SenderKeyCodec.js +3 -2
- package/dist/esm/signal/group/SenderKeyManager.js +125 -106
- package/dist/esm/signal/index.js +1 -0
- package/dist/esm/signal/registration/keygen.js +6 -2
- package/dist/esm/signal/registration/utils.js +1 -0
- package/dist/esm/signal/session/SignalProtocol.js +150 -74
- package/dist/esm/signal/session/resolver.js +137 -102
- package/dist/esm/store/contracts/privacy-token.store.js +1 -0
- package/dist/esm/store/createStore.js +101 -187
- package/dist/esm/store/index.js +1 -10
- package/dist/esm/store/locks/appstate.lock.js +26 -0
- package/dist/esm/store/locks/auth.lock.js +15 -0
- package/dist/esm/store/locks/contact.lock.js +20 -0
- package/dist/esm/store/locks/device-list.lock.js +20 -0
- package/dist/esm/store/locks/message.lock.js +21 -0
- package/dist/esm/store/locks/participants.lock.js +20 -0
- package/dist/esm/store/locks/privacy-token.lock.js +18 -0
- package/dist/esm/store/locks/retry.lock.js +29 -0
- package/dist/esm/store/locks/sender-key.lock.js +52 -0
- package/dist/esm/store/locks/signal.lock.js +63 -0
- package/dist/esm/store/locks/thread.lock.js +21 -0
- package/dist/esm/store/noop.store.js +1 -1
- package/dist/esm/store/providers/memory/appstate.store.js +22 -24
- package/dist/esm/store/providers/memory/device-list.store.js +10 -5
- package/dist/esm/store/providers/memory/privacy-token.store.js +43 -0
- package/dist/esm/store/providers/memory/retry.store.js +77 -2
- package/dist/esm/store/providers/memory/sender-key.store.js +6 -1
- package/dist/esm/store/providers/memory/signal.store.js +36 -19
- package/dist/esm/transport/WaComms.js +3 -1
- package/dist/esm/transport/WaWebSocket.js +0 -6
- package/dist/esm/transport/binary/constants.js +0 -30
- package/dist/esm/transport/binary/decoder.js +4 -4
- package/dist/esm/transport/binary/encoder.js +8 -15
- package/dist/esm/transport/binary/index.js +0 -1
- package/dist/esm/transport/node/WaNodeOrchestrator.js +25 -19
- package/dist/esm/transport/node/builders/business.js +129 -0
- package/dist/esm/transport/node/builders/global.js +370 -0
- package/dist/esm/transport/node/builders/index.js +5 -2
- package/dist/esm/transport/node/builders/message.js +63 -239
- package/dist/esm/transport/node/builders/pairing.js +0 -24
- package/dist/esm/transport/node/builders/privacy-token.js +41 -0
- package/dist/esm/transport/node/builders/privacy.js +48 -0
- package/dist/esm/transport/node/builders/profile.js +70 -0
- package/dist/esm/transport/node/builders/retry.js +10 -22
- package/dist/esm/transport/node/builders/usync.js +6 -2
- package/dist/esm/transport/node/helpers.js +19 -1
- package/dist/esm/transport/node/usync.js +3 -33
- package/dist/esm/transport/node/xml.js +35 -14
- package/dist/esm/transport/noise/WaClientPayload.js +10 -10
- package/dist/esm/transport/noise/WaNoiseCert.js +3 -3
- package/dist/esm/transport/noise/WaNoiseSession.js +64 -23
- package/dist/esm/transport/noise/WaNoiseSocket.js +8 -4
- package/dist/esm/transport/stream/parse.js +8 -4
- package/dist/esm/util/bytes.js +22 -18
- package/dist/esm/util/index.js +5 -0
- package/dist/esm/util/primitives.js +3 -2
- package/dist/index.js +7 -1
- package/dist/infra/perf/BackgroundQueue.js +482 -0
- package/dist/infra/perf/BoundedTaskQueue.js +3 -1
- package/dist/infra/perf/PromiseDedup.js +24 -0
- package/dist/infra/perf/SharedExclusiveGate.js +113 -0
- package/dist/infra/perf/StoreLock.js +81 -0
- package/dist/media/WaMediaCrypto.js +94 -12
- package/dist/media/WaMediaTransferClient.js +39 -47
- package/dist/media/constants.js +2 -1
- package/dist/message/WaMessageClient.js +26 -19
- package/dist/message/content.js +198 -9
- package/dist/message/icdc.js +81 -0
- package/dist/message/incoming.js +24 -12
- package/dist/message/phash.js +3 -1
- package/dist/message/reporting-token.js +14 -28
- package/dist/protocol/appstate.js +10 -41
- package/dist/protocol/browser.js +10 -18
- package/dist/protocol/constants.js +21 -2
- package/dist/protocol/defaults.js +6 -0
- package/dist/protocol/index.js +8 -5
- package/dist/protocol/jid.js +111 -36
- package/dist/protocol/message.js +62 -2
- package/dist/protocol/nodes.js +2 -0
- package/dist/protocol/notification.js +3 -1
- package/dist/protocol/privacy-token.js +20 -0
- package/dist/protocol/privacy.js +58 -0
- package/dist/protocol/stream.js +27 -2
- package/dist/retry/codec.js +220 -0
- package/dist/retry/constants.js +1 -1
- package/dist/retry/index.js +5 -5
- package/dist/retry/parse.js +51 -30
- package/dist/retry/replay.js +10 -6
- package/dist/retry/tracker.js +50 -12
- package/dist/signal/api/SignalDeviceSyncApi.js +48 -31
- package/dist/signal/api/SignalDigestSyncApi.js +13 -9
- package/dist/signal/api/SignalIdentitySyncApi.js +25 -10
- package/dist/signal/api/SignalMissingPreKeysSyncApi.js +17 -6
- package/dist/signal/api/SignalRotateKeyApi.js +4 -2
- package/dist/signal/api/SignalSessionSyncApi.js +16 -7
- package/dist/signal/api/result-map.js +13 -0
- package/dist/signal/constants.js +1 -5
- package/dist/signal/crypto/WaAdvSignature.js +11 -5
- package/dist/signal/{store/sqlite.js → encoding.js} +79 -25
- package/dist/signal/group/SenderKeyCodec.js +4 -3
- package/dist/signal/group/SenderKeyManager.js +125 -106
- package/dist/signal/index.js +13 -1
- package/dist/signal/registration/keygen.js +6 -2
- package/dist/signal/registration/utils.js +1 -0
- package/dist/signal/session/SignalProtocol.js +150 -74
- package/dist/signal/session/resolver.js +135 -100
- package/dist/store/contracts/privacy-token.store.js +2 -0
- package/dist/store/createStore.js +101 -187
- package/dist/store/index.js +15 -33
- package/dist/store/locks/appstate.lock.js +29 -0
- package/dist/store/locks/auth.lock.js +18 -0
- package/dist/store/locks/contact.lock.js +23 -0
- package/dist/store/locks/device-list.lock.js +23 -0
- package/dist/store/locks/message.lock.js +24 -0
- package/dist/store/locks/participants.lock.js +23 -0
- package/dist/store/locks/privacy-token.lock.js +21 -0
- package/dist/store/locks/retry.lock.js +32 -0
- package/dist/store/locks/sender-key.lock.js +55 -0
- package/dist/store/locks/signal.lock.js +66 -0
- package/dist/store/locks/thread.lock.js +24 -0
- package/dist/store/noop.store.js +1 -1
- package/dist/store/providers/memory/appstate.store.js +22 -24
- package/dist/store/providers/memory/device-list.store.js +10 -5
- package/dist/store/providers/memory/privacy-token.store.js +47 -0
- package/dist/store/providers/memory/retry.store.js +77 -2
- package/dist/store/providers/memory/sender-key.store.js +6 -1
- package/dist/store/providers/memory/signal.store.js +36 -19
- package/dist/transport/WaComms.js +3 -1
- package/dist/transport/WaWebSocket.js +0 -6
- package/dist/transport/binary/constants.js +1 -31
- package/dist/transport/binary/decoder.js +4 -4
- package/dist/transport/binary/encoder.js +8 -15
- package/dist/transport/binary/index.js +0 -4
- package/dist/transport/node/WaNodeOrchestrator.js +24 -18
- package/dist/transport/node/builders/business.js +137 -0
- package/dist/transport/node/builders/global.js +375 -0
- package/dist/transport/node/builders/index.js +18 -9
- package/dist/transport/node/builders/message.js +64 -245
- package/dist/transport/node/builders/pairing.js +0 -26
- package/dist/transport/node/builders/privacy-token.js +46 -0
- package/dist/transport/node/builders/privacy.js +55 -0
- package/dist/transport/node/builders/profile.js +78 -0
- package/dist/transport/node/builders/retry.js +9 -21
- package/dist/transport/node/builders/usync.js +6 -2
- package/dist/transport/node/helpers.js +20 -1
- package/dist/transport/node/usync.js +2 -32
- package/dist/transport/node/xml.js +35 -14
- package/dist/transport/noise/WaClientPayload.js +13 -13
- package/dist/transport/noise/WaNoiseCert.js +2 -2
- package/dist/transport/noise/WaNoiseSession.js +64 -23
- package/dist/transport/noise/WaNoiseSocket.js +8 -4
- package/dist/transport/stream/parse.js +7 -3
- package/dist/types/appstate/encoding.d.ts +7 -0
- package/dist/types/appstate/index.d.ts +3 -3
- package/dist/types/appstate/utils.d.ts +0 -2
- package/dist/types/auth/flow/WaAuthCredentialsFlow.d.ts +1 -1
- package/dist/types/auth/index.d.ts +0 -2
- package/dist/types/auth/types.d.ts +1 -0
- package/dist/types/client/WaClient.d.ts +27 -12
- package/dist/types/client/WaClientFactory.d.ts +12 -4
- package/dist/types/client/connection/WaConnectionManager.d.ts +2 -0
- package/dist/types/client/coordinators/WaBusinessCoordinator.d.ts +57 -0
- package/dist/types/client/coordinators/WaIncomingNodeCoordinator.d.ts +3 -1
- package/dist/types/client/coordinators/WaMessageDispatchCoordinator.d.ts +14 -0
- package/dist/types/client/coordinators/WaPassiveTasksCoordinator.d.ts +4 -0
- package/dist/types/client/coordinators/WaPrivacyCoordinator.d.ts +26 -0
- package/dist/types/client/coordinators/WaProfileCoordinator.d.ts +36 -0
- package/dist/types/client/coordinators/WaRetryCoordinator.d.ts +6 -0
- package/dist/types/client/coordinators/WaStreamControlCoordinator.d.ts +3 -2
- package/dist/types/client/coordinators/WaTrustedContactTokenCoordinator.d.ts +45 -0
- package/dist/types/client/events/devices.d.ts +20 -0
- package/dist/types/client/events/identity.d.ts +9 -0
- package/dist/types/client/events/privacy-token.d.ts +7 -0
- package/dist/types/client/history-sync.d.ts +9 -6
- package/dist/types/client/incoming.d.ts +3 -1
- package/dist/types/client/index.d.ts +1 -1
- package/dist/types/client/mailbox.d.ts +3 -5
- package/dist/types/client/messages.d.ts +1 -2
- package/dist/types/client/persistence/WriteBehindPersistence.d.ts +34 -0
- package/dist/types/client/tokens/cs-token.d.ts +10 -0
- package/dist/types/client/tokens/tc-token.d.ts +5 -0
- package/dist/types/client/types.d.ts +51 -3
- package/dist/types/crypto/core/index.d.ts +2 -2
- package/dist/types/crypto/core/nonce.d.ts +2 -0
- package/dist/types/crypto/core/primitives.d.ts +0 -1
- package/dist/types/crypto/core/random.d.ts +1 -0
- package/dist/types/crypto/index.d.ts +1 -0
- package/dist/types/crypto/math/constants.d.ts +4 -2
- package/dist/types/crypto/math/fe.d.ts +30 -0
- package/dist/types/crypto/math/mod.d.ts +0 -2
- package/dist/types/crypto/math/types.d.ts +11 -4
- package/dist/types/index.d.ts +5 -3
- package/dist/types/infra/perf/BackgroundQueue.d.ts +58 -0
- package/dist/types/infra/perf/PromiseDedup.d.ts +4 -0
- package/dist/types/infra/perf/SharedExclusiveGate.d.ts +17 -0
- package/dist/types/infra/perf/StoreLock.d.ts +10 -0
- package/dist/types/media/WaMediaCrypto.d.ts +3 -2
- package/dist/types/media/WaMediaTransferClient.d.ts +3 -12
- package/dist/types/media/constants.d.ts +1 -1
- package/dist/types/media/index.d.ts +1 -1
- package/dist/types/media/types.d.ts +10 -2
- package/dist/types/message/content.d.ts +8 -0
- package/dist/types/message/icdc.d.ts +13 -0
- package/dist/types/message/reporting-token.d.ts +0 -1
- package/dist/types/message/types.d.ts +45 -6
- package/dist/types/protocol/appstate.d.ts +0 -11
- package/dist/types/protocol/constants.d.ts +7 -3
- package/dist/types/protocol/defaults.d.ts +6 -0
- package/dist/types/protocol/index.d.ts +1 -2
- package/dist/types/protocol/jid.d.ts +19 -2
- package/dist/types/protocol/message.d.ts +60 -0
- package/dist/types/protocol/nodes.d.ts +2 -0
- package/dist/types/protocol/notification.d.ts +2 -0
- package/dist/types/protocol/privacy-token.d.ts +17 -0
- package/dist/types/protocol/privacy.d.ts +75 -0
- package/dist/types/protocol/stream.d.ts +30 -0
- package/dist/types/retry/codec.d.ts +3 -0
- package/dist/types/retry/index.d.ts +3 -3
- package/dist/types/retry/parse.d.ts +5 -2
- package/dist/types/retry/tracker.d.ts +1 -0
- package/dist/types/retry/types.d.ts +6 -1
- package/dist/types/signal/api/SignalDeviceSyncApi.d.ts +2 -1
- package/dist/types/signal/api/SignalDigestSyncApi.d.ts +6 -0
- package/dist/types/signal/api/SignalIdentitySyncApi.d.ts +2 -0
- package/dist/types/signal/api/SignalRotateKeyApi.d.ts +4 -5
- package/dist/types/signal/api/SignalSessionSyncApi.d.ts +8 -6
- package/dist/types/signal/api/result-map.d.ts +1 -0
- package/dist/types/signal/constants.d.ts +0 -3
- package/dist/types/signal/{store/sqlite.d.ts → encoding.d.ts} +3 -3
- package/dist/types/signal/group/SenderKeyManager.d.ts +10 -5
- package/dist/types/signal/index.d.ts +2 -0
- package/dist/types/signal/session/SignalProtocol.d.ts +10 -4
- package/dist/types/signal/session/resolver.d.ts +7 -2
- package/dist/types/store/contracts/appstate.store.d.ts +1 -1
- package/dist/types/store/contracts/privacy-token.store.d.ts +16 -0
- package/dist/types/store/contracts/retry.store.d.ts +7 -0
- package/dist/types/store/contracts/signal.store.d.ts +7 -0
- package/dist/types/store/createStore.d.ts +1 -1
- package/dist/types/store/index.d.ts +5 -13
- package/dist/types/store/locks/appstate.lock.d.ts +3 -0
- package/dist/types/store/locks/auth.lock.d.ts +3 -0
- package/dist/types/store/locks/contact.lock.d.ts +3 -0
- package/dist/types/store/locks/device-list.lock.d.ts +2 -0
- package/dist/types/store/locks/message.lock.d.ts +3 -0
- package/dist/types/store/locks/participants.lock.d.ts +2 -0
- package/dist/types/store/locks/privacy-token.lock.d.ts +2 -0
- package/dist/types/store/locks/retry.lock.d.ts +2 -0
- package/dist/types/store/locks/sender-key.lock.d.ts +3 -0
- package/dist/types/store/locks/signal.lock.d.ts +3 -0
- package/dist/types/store/locks/thread.lock.d.ts +3 -0
- package/dist/types/store/providers/memory/appstate.store.d.ts +1 -1
- package/dist/types/store/providers/memory/privacy-token.store.d.ts +13 -0
- package/dist/types/store/providers/memory/retry.store.d.ts +8 -0
- package/dist/types/store/providers/memory/signal.store.d.ts +2 -1
- package/dist/types/store/types.d.ts +49 -61
- package/dist/types/transport/WaWebSocket.d.ts +0 -1
- package/dist/types/transport/binary/constants.d.ts +0 -30
- package/dist/types/transport/binary/index.d.ts +0 -1
- package/dist/types/transport/node/WaNodeOrchestrator.d.ts +3 -4
- package/dist/types/transport/node/builders/business.d.ts +29 -0
- package/dist/types/transport/node/builders/global.d.ts +102 -0
- package/dist/types/transport/node/builders/index.d.ts +5 -2
- package/dist/types/transport/node/builders/message.d.ts +8 -7
- package/dist/types/transport/node/builders/pairing.d.ts +0 -2
- package/dist/types/transport/node/builders/privacy-token.d.ts +9 -0
- package/dist/types/transport/node/builders/privacy.d.ts +7 -0
- package/dist/types/transport/node/builders/profile.d.ts +8 -0
- package/dist/types/transport/node/builders/retry.d.ts +0 -1
- package/dist/types/transport/node/helpers.d.ts +5 -0
- package/dist/types/transport/noise/WaNoiseSession.d.ts +3 -2
- package/dist/types/transport/noise/WaNoiseSocket.d.ts +4 -2
- package/dist/types/util/bytes.d.ts +1 -1
- package/dist/types/util/index.d.ts +5 -0
- package/dist/types/util/primitives.d.ts +0 -1
- package/dist/util/bytes.js +22 -18
- package/dist/util/index.js +23 -0
- package/dist/util/primitives.js +2 -2
- package/package.json +29 -7
- package/proto/index.js +1 -1
- package/dist/crypto/core/constants.js +0 -4
- package/dist/esm/crypto/core/constants.js +0 -1
- package/dist/esm/retry/outbound.js +0 -82
- package/dist/esm/store/providers/sqlite/BaseSqliteStore.js +0 -37
- package/dist/esm/store/providers/sqlite/appstate.store.js +0 -250
- package/dist/esm/store/providers/sqlite/auth.store.js +0 -176
- package/dist/esm/store/providers/sqlite/connection.js +0 -245
- package/dist/esm/store/providers/sqlite/contact.store.js +0 -74
- package/dist/esm/store/providers/sqlite/device-list.store.js +0 -127
- package/dist/esm/store/providers/sqlite/message.store.js +0 -132
- package/dist/esm/store/providers/sqlite/migrations.js +0 -347
- package/dist/esm/store/providers/sqlite/participants.store.js +0 -77
- package/dist/esm/store/providers/sqlite/retry.store.js +0 -141
- package/dist/esm/store/providers/sqlite/sender-key.store.js +0 -198
- package/dist/esm/store/providers/sqlite/signal.store.js +0 -435
- package/dist/esm/store/providers/sqlite/table-names.js +0 -107
- package/dist/esm/store/providers/sqlite/thread.store.js +0 -85
- package/dist/retry/outbound.js +0 -87
- package/dist/store/providers/sqlite/BaseSqliteStore.js +0 -41
- package/dist/store/providers/sqlite/appstate.store.js +0 -254
- package/dist/store/providers/sqlite/auth.store.js +0 -180
- package/dist/store/providers/sqlite/connection.js +0 -281
- package/dist/store/providers/sqlite/contact.store.js +0 -78
- package/dist/store/providers/sqlite/device-list.store.js +0 -131
- package/dist/store/providers/sqlite/message.store.js +0 -136
- package/dist/store/providers/sqlite/migrations.js +0 -350
- package/dist/store/providers/sqlite/participants.store.js +0 -81
- package/dist/store/providers/sqlite/retry.store.js +0 -145
- package/dist/store/providers/sqlite/sender-key.store.js +0 -202
- package/dist/store/providers/sqlite/signal.store.js +0 -439
- package/dist/store/providers/sqlite/table-names.js +0 -113
- package/dist/store/providers/sqlite/thread.store.js +0 -89
- package/dist/types/appstate/store/sqlite.d.ts +0 -7
- package/dist/types/crypto/core/constants.d.ts +0 -1
- package/dist/types/retry/outbound.d.ts +0 -4
- package/dist/types/store/providers/sqlite/BaseSqliteStore.d.ts +0 -12
- package/dist/types/store/providers/sqlite/appstate.store.d.ts +0 -17
- package/dist/types/store/providers/sqlite/auth.store.d.ts +0 -10
- package/dist/types/store/providers/sqlite/connection.d.ts +0 -10
- package/dist/types/store/providers/sqlite/contact.store.d.ts +0 -12
- package/dist/types/store/providers/sqlite/device-list.store.d.ts +0 -15
- package/dist/types/store/providers/sqlite/message.store.d.ts +0 -13
- package/dist/types/store/providers/sqlite/migrations.d.ts +0 -3
- package/dist/types/store/providers/sqlite/participants.store.d.ts +0 -12
- package/dist/types/store/providers/sqlite/retry.store.d.ts +0 -15
- package/dist/types/store/providers/sqlite/sender-key.store.d.ts +0 -24
- package/dist/types/store/providers/sqlite/signal.store.d.ts +0 -53
- package/dist/types/store/providers/sqlite/table-names.d.ts +0 -5
- package/dist/types/store/providers/sqlite/thread.store.d.ts +0 -13
|
@@ -1,347 +0,0 @@
|
|
|
1
|
-
const SQLITE_MIGRATIONS = [
|
|
2
|
-
{
|
|
3
|
-
id: '0001_auth_credentials_schema',
|
|
4
|
-
domain: 'auth',
|
|
5
|
-
up: (db) => {
|
|
6
|
-
db.exec(`
|
|
7
|
-
CREATE TABLE IF NOT EXISTS auth_credentials (
|
|
8
|
-
session_id TEXT PRIMARY KEY,
|
|
9
|
-
noise_pub_key BLOB NOT NULL,
|
|
10
|
-
noise_priv_key BLOB NOT NULL,
|
|
11
|
-
registration_id INTEGER NOT NULL,
|
|
12
|
-
identity_pub_key BLOB NOT NULL,
|
|
13
|
-
identity_priv_key BLOB NOT NULL,
|
|
14
|
-
signed_prekey_id INTEGER NOT NULL,
|
|
15
|
-
signed_prekey_pub_key BLOB NOT NULL,
|
|
16
|
-
signed_prekey_priv_key BLOB NOT NULL,
|
|
17
|
-
signed_prekey_signature BLOB NOT NULL,
|
|
18
|
-
adv_secret_key BLOB NOT NULL,
|
|
19
|
-
signed_identity BLOB,
|
|
20
|
-
me_jid TEXT,
|
|
21
|
-
me_lid TEXT,
|
|
22
|
-
me_display_name TEXT,
|
|
23
|
-
companion_enc_static BLOB,
|
|
24
|
-
platform TEXT,
|
|
25
|
-
server_static_key BLOB,
|
|
26
|
-
server_has_prekeys INTEGER,
|
|
27
|
-
routing_info BLOB,
|
|
28
|
-
last_success_ts INTEGER,
|
|
29
|
-
props_version INTEGER,
|
|
30
|
-
ab_props_version INTEGER,
|
|
31
|
-
connection_location TEXT,
|
|
32
|
-
account_creation_ts INTEGER
|
|
33
|
-
);
|
|
34
|
-
`);
|
|
35
|
-
}
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
id: '0001_signal_schema',
|
|
39
|
-
domain: 'signal',
|
|
40
|
-
up: (db) => {
|
|
41
|
-
db.exec(`
|
|
42
|
-
CREATE TABLE IF NOT EXISTS signal_meta (
|
|
43
|
-
session_id TEXT PRIMARY KEY,
|
|
44
|
-
server_has_prekeys INTEGER NOT NULL DEFAULT 0,
|
|
45
|
-
next_prekey_id INTEGER NOT NULL DEFAULT 1
|
|
46
|
-
);
|
|
47
|
-
|
|
48
|
-
CREATE TABLE IF NOT EXISTS signal_registration (
|
|
49
|
-
session_id TEXT PRIMARY KEY,
|
|
50
|
-
registration_id INTEGER NOT NULL,
|
|
51
|
-
identity_pub_key BLOB NOT NULL,
|
|
52
|
-
identity_priv_key BLOB NOT NULL
|
|
53
|
-
);
|
|
54
|
-
|
|
55
|
-
CREATE TABLE IF NOT EXISTS signal_signed_prekey (
|
|
56
|
-
session_id TEXT PRIMARY KEY,
|
|
57
|
-
key_id INTEGER NOT NULL,
|
|
58
|
-
pub_key BLOB NOT NULL,
|
|
59
|
-
priv_key BLOB NOT NULL,
|
|
60
|
-
signature BLOB NOT NULL,
|
|
61
|
-
uploaded INTEGER NOT NULL DEFAULT 0
|
|
62
|
-
);
|
|
63
|
-
|
|
64
|
-
CREATE TABLE IF NOT EXISTS signal_prekey (
|
|
65
|
-
session_id TEXT NOT NULL,
|
|
66
|
-
key_id INTEGER NOT NULL,
|
|
67
|
-
pub_key BLOB NOT NULL,
|
|
68
|
-
priv_key BLOB NOT NULL,
|
|
69
|
-
uploaded INTEGER NOT NULL DEFAULT 0,
|
|
70
|
-
PRIMARY KEY (session_id, key_id)
|
|
71
|
-
);
|
|
72
|
-
|
|
73
|
-
CREATE TABLE IF NOT EXISTS signal_session (
|
|
74
|
-
session_id TEXT NOT NULL,
|
|
75
|
-
user TEXT NOT NULL,
|
|
76
|
-
server TEXT NOT NULL,
|
|
77
|
-
device INTEGER NOT NULL,
|
|
78
|
-
record BLOB NOT NULL,
|
|
79
|
-
PRIMARY KEY (session_id, user, server, device)
|
|
80
|
-
);
|
|
81
|
-
|
|
82
|
-
CREATE TABLE IF NOT EXISTS signal_identity (
|
|
83
|
-
session_id TEXT NOT NULL,
|
|
84
|
-
user TEXT NOT NULL,
|
|
85
|
-
server TEXT NOT NULL,
|
|
86
|
-
device INTEGER NOT NULL,
|
|
87
|
-
identity_key BLOB NOT NULL,
|
|
88
|
-
PRIMARY KEY (session_id, user, server, device)
|
|
89
|
-
);
|
|
90
|
-
`);
|
|
91
|
-
}
|
|
92
|
-
},
|
|
93
|
-
{
|
|
94
|
-
id: '0001_sender_key_schema',
|
|
95
|
-
domain: 'senderKey',
|
|
96
|
-
up: (db) => {
|
|
97
|
-
db.exec(`
|
|
98
|
-
CREATE TABLE IF NOT EXISTS sender_keys (
|
|
99
|
-
session_id TEXT NOT NULL,
|
|
100
|
-
group_id TEXT NOT NULL,
|
|
101
|
-
sender_user TEXT NOT NULL,
|
|
102
|
-
sender_server TEXT NOT NULL,
|
|
103
|
-
sender_device INTEGER NOT NULL,
|
|
104
|
-
record BLOB NOT NULL,
|
|
105
|
-
PRIMARY KEY (session_id, group_id, sender_user, sender_server, sender_device)
|
|
106
|
-
);
|
|
107
|
-
|
|
108
|
-
CREATE TABLE IF NOT EXISTS sender_key_distribution (
|
|
109
|
-
session_id TEXT NOT NULL,
|
|
110
|
-
group_id TEXT NOT NULL,
|
|
111
|
-
sender_user TEXT NOT NULL,
|
|
112
|
-
sender_server TEXT NOT NULL,
|
|
113
|
-
sender_device INTEGER NOT NULL,
|
|
114
|
-
key_id INTEGER NOT NULL,
|
|
115
|
-
timestamp_ms INTEGER NOT NULL,
|
|
116
|
-
PRIMARY KEY (session_id, group_id, sender_user, sender_server, sender_device)
|
|
117
|
-
);
|
|
118
|
-
`);
|
|
119
|
-
}
|
|
120
|
-
},
|
|
121
|
-
{
|
|
122
|
-
id: '0001_appstate_schema',
|
|
123
|
-
domain: 'appState',
|
|
124
|
-
up: (db) => {
|
|
125
|
-
db.exec(`
|
|
126
|
-
CREATE TABLE IF NOT EXISTS appstate_sync_keys (
|
|
127
|
-
session_id TEXT NOT NULL,
|
|
128
|
-
key_id BLOB NOT NULL,
|
|
129
|
-
key_data BLOB NOT NULL,
|
|
130
|
-
timestamp INTEGER NOT NULL,
|
|
131
|
-
fingerprint BLOB,
|
|
132
|
-
key_epoch INTEGER,
|
|
133
|
-
PRIMARY KEY (session_id, key_id)
|
|
134
|
-
);
|
|
135
|
-
|
|
136
|
-
CREATE TABLE IF NOT EXISTS appstate_collection_versions (
|
|
137
|
-
session_id TEXT NOT NULL,
|
|
138
|
-
collection TEXT NOT NULL,
|
|
139
|
-
version INTEGER NOT NULL,
|
|
140
|
-
hash BLOB NOT NULL,
|
|
141
|
-
PRIMARY KEY (session_id, collection)
|
|
142
|
-
);
|
|
143
|
-
|
|
144
|
-
CREATE TABLE IF NOT EXISTS appstate_collection_index_values (
|
|
145
|
-
session_id TEXT NOT NULL,
|
|
146
|
-
collection TEXT NOT NULL,
|
|
147
|
-
index_mac_hex TEXT NOT NULL,
|
|
148
|
-
value_mac BLOB NOT NULL,
|
|
149
|
-
PRIMARY KEY (session_id, collection, index_mac_hex)
|
|
150
|
-
);
|
|
151
|
-
`);
|
|
152
|
-
}
|
|
153
|
-
},
|
|
154
|
-
{
|
|
155
|
-
id: '0003_retry_message_schema',
|
|
156
|
-
domain: 'retry',
|
|
157
|
-
up: (db) => {
|
|
158
|
-
db.exec(`
|
|
159
|
-
CREATE TABLE IF NOT EXISTS retry_outbound_messages (
|
|
160
|
-
session_id TEXT NOT NULL,
|
|
161
|
-
message_id TEXT NOT NULL,
|
|
162
|
-
to_jid TEXT NOT NULL,
|
|
163
|
-
participant_jid TEXT,
|
|
164
|
-
recipient_jid TEXT,
|
|
165
|
-
message_type TEXT NOT NULL,
|
|
166
|
-
replay_mode TEXT NOT NULL,
|
|
167
|
-
replay_payload BLOB NOT NULL,
|
|
168
|
-
state TEXT NOT NULL,
|
|
169
|
-
created_at_ms INTEGER NOT NULL,
|
|
170
|
-
updated_at_ms INTEGER NOT NULL,
|
|
171
|
-
expires_at_ms INTEGER NOT NULL,
|
|
172
|
-
PRIMARY KEY (session_id, message_id)
|
|
173
|
-
);
|
|
174
|
-
|
|
175
|
-
CREATE INDEX IF NOT EXISTS retry_outbound_messages_by_expiry
|
|
176
|
-
ON retry_outbound_messages (session_id, expires_at_ms);
|
|
177
|
-
CREATE INDEX IF NOT EXISTS retry_outbound_messages_by_state
|
|
178
|
-
ON retry_outbound_messages (session_id, state);
|
|
179
|
-
|
|
180
|
-
CREATE TABLE IF NOT EXISTS retry_inbound_counters (
|
|
181
|
-
session_id TEXT NOT NULL,
|
|
182
|
-
message_id TEXT NOT NULL,
|
|
183
|
-
requester_jid TEXT NOT NULL,
|
|
184
|
-
retry_count INTEGER NOT NULL,
|
|
185
|
-
updated_at_ms INTEGER NOT NULL,
|
|
186
|
-
expires_at_ms INTEGER NOT NULL,
|
|
187
|
-
PRIMARY KEY (session_id, message_id, requester_jid)
|
|
188
|
-
);
|
|
189
|
-
|
|
190
|
-
CREATE INDEX IF NOT EXISTS retry_inbound_counters_by_expiry
|
|
191
|
-
ON retry_inbound_counters (session_id, expires_at_ms);
|
|
192
|
-
`);
|
|
193
|
-
}
|
|
194
|
-
},
|
|
195
|
-
{
|
|
196
|
-
id: '0004_mailbox_schema',
|
|
197
|
-
domain: 'mailbox',
|
|
198
|
-
up: (db) => {
|
|
199
|
-
db.exec(`
|
|
200
|
-
CREATE TABLE IF NOT EXISTS mailbox_messages (
|
|
201
|
-
session_id TEXT NOT NULL,
|
|
202
|
-
message_id TEXT NOT NULL,
|
|
203
|
-
thread_jid TEXT NOT NULL,
|
|
204
|
-
sender_jid TEXT,
|
|
205
|
-
participant_jid TEXT,
|
|
206
|
-
from_me INTEGER NOT NULL,
|
|
207
|
-
timestamp_ms INTEGER,
|
|
208
|
-
enc_type TEXT,
|
|
209
|
-
plaintext BLOB,
|
|
210
|
-
message_bytes BLOB,
|
|
211
|
-
PRIMARY KEY (session_id, message_id)
|
|
212
|
-
);
|
|
213
|
-
|
|
214
|
-
CREATE INDEX IF NOT EXISTS mailbox_messages_by_thread_timestamp
|
|
215
|
-
ON mailbox_messages (session_id, thread_jid, timestamp_ms DESC);
|
|
216
|
-
|
|
217
|
-
CREATE TABLE IF NOT EXISTS mailbox_threads (
|
|
218
|
-
session_id TEXT NOT NULL,
|
|
219
|
-
jid TEXT NOT NULL,
|
|
220
|
-
name TEXT,
|
|
221
|
-
unread_count INTEGER,
|
|
222
|
-
archived INTEGER,
|
|
223
|
-
pinned INTEGER,
|
|
224
|
-
mute_end_ms INTEGER,
|
|
225
|
-
marked_as_unread INTEGER,
|
|
226
|
-
ephemeral_expiration INTEGER,
|
|
227
|
-
PRIMARY KEY (session_id, jid)
|
|
228
|
-
);
|
|
229
|
-
|
|
230
|
-
CREATE TABLE IF NOT EXISTS mailbox_contacts (
|
|
231
|
-
session_id TEXT NOT NULL,
|
|
232
|
-
jid TEXT NOT NULL,
|
|
233
|
-
display_name TEXT,
|
|
234
|
-
push_name TEXT,
|
|
235
|
-
lid TEXT,
|
|
236
|
-
phone_number TEXT,
|
|
237
|
-
last_updated_ms INTEGER NOT NULL,
|
|
238
|
-
PRIMARY KEY (session_id, jid)
|
|
239
|
-
);
|
|
240
|
-
`);
|
|
241
|
-
}
|
|
242
|
-
},
|
|
243
|
-
{
|
|
244
|
-
id: '0005_participants_cache_schema',
|
|
245
|
-
domain: 'participants',
|
|
246
|
-
up: (db) => {
|
|
247
|
-
db.exec(`
|
|
248
|
-
CREATE TABLE IF NOT EXISTS group_participants_cache (
|
|
249
|
-
session_id TEXT NOT NULL,
|
|
250
|
-
group_jid TEXT NOT NULL,
|
|
251
|
-
participants_json TEXT NOT NULL,
|
|
252
|
-
updated_at_ms INTEGER NOT NULL,
|
|
253
|
-
expires_at_ms INTEGER NOT NULL,
|
|
254
|
-
PRIMARY KEY (session_id, group_jid)
|
|
255
|
-
);
|
|
256
|
-
|
|
257
|
-
CREATE INDEX IF NOT EXISTS group_participants_cache_by_expiry
|
|
258
|
-
ON group_participants_cache (session_id, expires_at_ms);
|
|
259
|
-
`);
|
|
260
|
-
}
|
|
261
|
-
},
|
|
262
|
-
{
|
|
263
|
-
id: '0006_device_list_cache_schema',
|
|
264
|
-
domain: 'deviceList',
|
|
265
|
-
up: (db) => {
|
|
266
|
-
db.exec(`
|
|
267
|
-
CREATE TABLE IF NOT EXISTS device_list_cache (
|
|
268
|
-
session_id TEXT NOT NULL,
|
|
269
|
-
user_jid TEXT NOT NULL,
|
|
270
|
-
device_jids_json TEXT NOT NULL,
|
|
271
|
-
updated_at_ms INTEGER NOT NULL,
|
|
272
|
-
expires_at_ms INTEGER NOT NULL,
|
|
273
|
-
PRIMARY KEY (session_id, user_jid)
|
|
274
|
-
);
|
|
275
|
-
|
|
276
|
-
CREATE INDEX IF NOT EXISTS device_list_cache_by_expiry
|
|
277
|
-
ON device_list_cache (session_id, expires_at_ms);
|
|
278
|
-
`);
|
|
279
|
-
}
|
|
280
|
-
},
|
|
281
|
-
{
|
|
282
|
-
id: '0007_signal_signed_prekey_rotation_ts',
|
|
283
|
-
domain: 'signal',
|
|
284
|
-
up: (db) => {
|
|
285
|
-
db.exec(`
|
|
286
|
-
ALTER TABLE signal_meta
|
|
287
|
-
ADD COLUMN signed_prekey_rotation_ts INTEGER;
|
|
288
|
-
`);
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
];
|
|
292
|
-
function isMigrationAlreadyAppliedRace(error) {
|
|
293
|
-
if (!(error instanceof Error)) {
|
|
294
|
-
return false;
|
|
295
|
-
}
|
|
296
|
-
return /UNIQUE constraint failed: [A-Za-z_][A-Za-z0-9_]*\.id/.test(error.message);
|
|
297
|
-
}
|
|
298
|
-
function ensureMigrationTable(db) {
|
|
299
|
-
db.exec(`
|
|
300
|
-
CREATE TABLE IF NOT EXISTS wa_migrations (
|
|
301
|
-
id TEXT PRIMARY KEY,
|
|
302
|
-
applied_at INTEGER NOT NULL
|
|
303
|
-
);
|
|
304
|
-
`);
|
|
305
|
-
}
|
|
306
|
-
function hasMigration(db, id) {
|
|
307
|
-
const row = db.get(`SELECT id
|
|
308
|
-
FROM wa_migrations
|
|
309
|
-
WHERE id = ?`, [id]);
|
|
310
|
-
return !!row;
|
|
311
|
-
}
|
|
312
|
-
function hasDomain(domainSet, migration) {
|
|
313
|
-
return domainSet.has(migration.domain);
|
|
314
|
-
}
|
|
315
|
-
export async function ensureSqliteMigrations(db, domains) {
|
|
316
|
-
ensureMigrationTable(db);
|
|
317
|
-
const domainSet = new Set(domains);
|
|
318
|
-
if (domainSet.size === 0) {
|
|
319
|
-
return;
|
|
320
|
-
}
|
|
321
|
-
for (const migration of SQLITE_MIGRATIONS) {
|
|
322
|
-
if (!hasDomain(domainSet, migration)) {
|
|
323
|
-
continue;
|
|
324
|
-
}
|
|
325
|
-
if (hasMigration(db, migration.id)) {
|
|
326
|
-
continue;
|
|
327
|
-
}
|
|
328
|
-
db.exec('BEGIN');
|
|
329
|
-
try {
|
|
330
|
-
if (hasMigration(db, migration.id)) {
|
|
331
|
-
db.exec('COMMIT');
|
|
332
|
-
continue;
|
|
333
|
-
}
|
|
334
|
-
db.run(`INSERT INTO wa_migrations (id, applied_at)
|
|
335
|
-
VALUES (?, ?)`, [migration.id, Date.now()]);
|
|
336
|
-
migration.up(db);
|
|
337
|
-
db.exec('COMMIT');
|
|
338
|
-
}
|
|
339
|
-
catch (error) {
|
|
340
|
-
db.exec('ROLLBACK');
|
|
341
|
-
if (isMigrationAlreadyAppliedRace(error)) {
|
|
342
|
-
continue;
|
|
343
|
-
}
|
|
344
|
-
throw error;
|
|
345
|
-
}
|
|
346
|
-
}
|
|
347
|
-
}
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import { BaseSqliteStore } from '../../providers/sqlite/BaseSqliteStore.js';
|
|
2
|
-
import { asNumber, asString } from '../../../util/coercion.js';
|
|
3
|
-
const DEFAULT_PARTICIPANTS_TTL_MS = 5 * 60 * 1000;
|
|
4
|
-
export class WaParticipantsSqliteStore extends BaseSqliteStore {
|
|
5
|
-
constructor(options, ttlMs = DEFAULT_PARTICIPANTS_TTL_MS) {
|
|
6
|
-
super(options, ['participants']);
|
|
7
|
-
this.ttlMs = ttlMs;
|
|
8
|
-
}
|
|
9
|
-
async upsertGroupParticipants(snapshot) {
|
|
10
|
-
const db = await this.getConnection();
|
|
11
|
-
db.run(`INSERT INTO group_participants_cache (
|
|
12
|
-
session_id,
|
|
13
|
-
group_jid,
|
|
14
|
-
participants_json,
|
|
15
|
-
updated_at_ms,
|
|
16
|
-
expires_at_ms
|
|
17
|
-
) VALUES (?, ?, ?, ?, ?)
|
|
18
|
-
ON CONFLICT(session_id, group_jid) DO UPDATE SET
|
|
19
|
-
participants_json=excluded.participants_json,
|
|
20
|
-
updated_at_ms=excluded.updated_at_ms,
|
|
21
|
-
expires_at_ms=excluded.expires_at_ms`, [
|
|
22
|
-
this.options.sessionId,
|
|
23
|
-
snapshot.groupJid,
|
|
24
|
-
JSON.stringify(snapshot.participants),
|
|
25
|
-
snapshot.updatedAtMs,
|
|
26
|
-
snapshot.updatedAtMs + this.ttlMs
|
|
27
|
-
]);
|
|
28
|
-
}
|
|
29
|
-
async getGroupParticipants(groupJid, nowMs = Date.now()) {
|
|
30
|
-
const db = await this.getConnection();
|
|
31
|
-
const row = db.get(`SELECT group_jid, participants_json, updated_at_ms, expires_at_ms
|
|
32
|
-
FROM group_participants_cache
|
|
33
|
-
WHERE session_id = ? AND group_jid = ?`, [this.options.sessionId, groupJid]);
|
|
34
|
-
if (!row) {
|
|
35
|
-
return null;
|
|
36
|
-
}
|
|
37
|
-
const expiresAtMs = asNumber(row.expires_at_ms, 'group_participants_cache.expires_at_ms');
|
|
38
|
-
if (expiresAtMs <= nowMs) {
|
|
39
|
-
db.run(`DELETE FROM group_participants_cache
|
|
40
|
-
WHERE session_id = ? AND group_jid = ?`, [this.options.sessionId, groupJid]);
|
|
41
|
-
return null;
|
|
42
|
-
}
|
|
43
|
-
return {
|
|
44
|
-
groupJid: asString(row.group_jid, 'group_participants_cache.group_jid'),
|
|
45
|
-
participants: decodeParticipants(row.participants_json),
|
|
46
|
-
updatedAtMs: asNumber(row.updated_at_ms, 'group_participants_cache.updated_at_ms')
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
async deleteGroupParticipants(groupJid) {
|
|
50
|
-
const db = await this.getConnection();
|
|
51
|
-
db.run(`DELETE FROM group_participants_cache
|
|
52
|
-
WHERE session_id = ? AND group_jid = ?`, [this.options.sessionId, groupJid]);
|
|
53
|
-
const row = db.get('SELECT changes() AS total', []);
|
|
54
|
-
return row ? Number(row.total) : 0;
|
|
55
|
-
}
|
|
56
|
-
async cleanupExpired(nowMs) {
|
|
57
|
-
const db = await this.getConnection();
|
|
58
|
-
db.run(`DELETE FROM group_participants_cache
|
|
59
|
-
WHERE session_id = ? AND expires_at_ms <= ?`, [this.options.sessionId, nowMs]);
|
|
60
|
-
const row = db.get('SELECT changes() AS total', []);
|
|
61
|
-
return row ? Number(row.total) : 0;
|
|
62
|
-
}
|
|
63
|
-
async clear() {
|
|
64
|
-
const db = await this.getConnection();
|
|
65
|
-
db.run('DELETE FROM group_participants_cache WHERE session_id = ?', [
|
|
66
|
-
this.options.sessionId
|
|
67
|
-
]);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
function decodeParticipants(raw) {
|
|
71
|
-
const json = asString(raw, 'group_participants_cache.participants_json');
|
|
72
|
-
const parsed = JSON.parse(json);
|
|
73
|
-
if (!Array.isArray(parsed)) {
|
|
74
|
-
throw new Error('group_participants_cache.participants_json must be an array');
|
|
75
|
-
}
|
|
76
|
-
return parsed.map((entry) => asString(entry, 'group_participants_cache.participants_json entry'));
|
|
77
|
-
}
|
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
import { BaseSqliteStore } from '../../providers/sqlite/BaseSqliteStore.js';
|
|
2
|
-
import { asBytes, asNumber, asOptionalString, asString } from '../../../util/coercion.js';
|
|
3
|
-
const DEFAULT_RETRY_TTL_MS = 7 * 24 * 60 * 60 * 1000;
|
|
4
|
-
export class WaRetrySqliteStore extends BaseSqliteStore {
|
|
5
|
-
constructor(options, ttlMs = DEFAULT_RETRY_TTL_MS) {
|
|
6
|
-
super(options, ['retry']);
|
|
7
|
-
this.ttlMs = ttlMs;
|
|
8
|
-
}
|
|
9
|
-
getTtlMs() {
|
|
10
|
-
return this.ttlMs;
|
|
11
|
-
}
|
|
12
|
-
async upsertOutboundMessage(record) {
|
|
13
|
-
const db = await this.getConnection();
|
|
14
|
-
db.run(`INSERT INTO retry_outbound_messages (
|
|
15
|
-
session_id,
|
|
16
|
-
message_id,
|
|
17
|
-
to_jid,
|
|
18
|
-
participant_jid,
|
|
19
|
-
recipient_jid,
|
|
20
|
-
message_type,
|
|
21
|
-
replay_mode,
|
|
22
|
-
replay_payload,
|
|
23
|
-
state,
|
|
24
|
-
created_at_ms,
|
|
25
|
-
updated_at_ms,
|
|
26
|
-
expires_at_ms
|
|
27
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
28
|
-
ON CONFLICT(session_id, message_id) DO UPDATE SET
|
|
29
|
-
to_jid=excluded.to_jid,
|
|
30
|
-
participant_jid=excluded.participant_jid,
|
|
31
|
-
recipient_jid=excluded.recipient_jid,
|
|
32
|
-
message_type=excluded.message_type,
|
|
33
|
-
replay_mode=excluded.replay_mode,
|
|
34
|
-
replay_payload=excluded.replay_payload,
|
|
35
|
-
state=excluded.state,
|
|
36
|
-
created_at_ms=excluded.created_at_ms,
|
|
37
|
-
updated_at_ms=excluded.updated_at_ms,
|
|
38
|
-
expires_at_ms=excluded.expires_at_ms`, [
|
|
39
|
-
this.options.sessionId,
|
|
40
|
-
record.messageId,
|
|
41
|
-
record.toJid,
|
|
42
|
-
record.participantJid ?? null,
|
|
43
|
-
record.recipientJid ?? null,
|
|
44
|
-
record.messageType,
|
|
45
|
-
record.replayMode,
|
|
46
|
-
record.replayPayload,
|
|
47
|
-
record.state,
|
|
48
|
-
record.createdAtMs,
|
|
49
|
-
record.updatedAtMs,
|
|
50
|
-
record.expiresAtMs
|
|
51
|
-
]);
|
|
52
|
-
}
|
|
53
|
-
async getOutboundMessage(messageId) {
|
|
54
|
-
const db = await this.getConnection();
|
|
55
|
-
const row = db.get(`SELECT
|
|
56
|
-
message_id,
|
|
57
|
-
to_jid,
|
|
58
|
-
participant_jid,
|
|
59
|
-
recipient_jid,
|
|
60
|
-
message_type,
|
|
61
|
-
replay_mode,
|
|
62
|
-
replay_payload,
|
|
63
|
-
state,
|
|
64
|
-
created_at_ms,
|
|
65
|
-
updated_at_ms,
|
|
66
|
-
expires_at_ms
|
|
67
|
-
FROM retry_outbound_messages
|
|
68
|
-
WHERE session_id = ? AND message_id = ?`, [this.options.sessionId, messageId]);
|
|
69
|
-
if (!row) {
|
|
70
|
-
return null;
|
|
71
|
-
}
|
|
72
|
-
return {
|
|
73
|
-
messageId: asString(row.message_id, 'retry_outbound_messages.message_id'),
|
|
74
|
-
toJid: asString(row.to_jid, 'retry_outbound_messages.to_jid'),
|
|
75
|
-
participantJid: asOptionalString(row.participant_jid, 'retry_outbound_messages.participant_jid'),
|
|
76
|
-
recipientJid: asOptionalString(row.recipient_jid, 'retry_outbound_messages.recipient_jid'),
|
|
77
|
-
messageType: asString(row.message_type, 'retry_outbound_messages.message_type'),
|
|
78
|
-
replayMode: asString(row.replay_mode, 'retry_outbound_messages.replay_mode'),
|
|
79
|
-
replayPayload: asBytes(row.replay_payload, 'retry_outbound_messages.replay_payload'),
|
|
80
|
-
state: asString(row.state, 'retry_outbound_messages.state'),
|
|
81
|
-
createdAtMs: asNumber(row.created_at_ms, 'retry_outbound_messages.created_at_ms'),
|
|
82
|
-
updatedAtMs: asNumber(row.updated_at_ms, 'retry_outbound_messages.updated_at_ms'),
|
|
83
|
-
expiresAtMs: asNumber(row.expires_at_ms, 'retry_outbound_messages.expires_at_ms')
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
async updateOutboundMessageState(messageId, state, updatedAtMs, expiresAtMs) {
|
|
87
|
-
const db = await this.getConnection();
|
|
88
|
-
db.run(`UPDATE retry_outbound_messages
|
|
89
|
-
SET state = ?, updated_at_ms = ?, expires_at_ms = ?
|
|
90
|
-
WHERE session_id = ? AND message_id = ?`, [state, updatedAtMs, expiresAtMs, this.options.sessionId, messageId]);
|
|
91
|
-
}
|
|
92
|
-
async incrementInboundCounter(messageId, requesterJid, updatedAtMs, expiresAtMs) {
|
|
93
|
-
const db = await this.getConnection();
|
|
94
|
-
db.run(`INSERT INTO retry_inbound_counters (
|
|
95
|
-
session_id,
|
|
96
|
-
message_id,
|
|
97
|
-
requester_jid,
|
|
98
|
-
retry_count,
|
|
99
|
-
updated_at_ms,
|
|
100
|
-
expires_at_ms
|
|
101
|
-
) VALUES (?, ?, ?, 1, ?, ?)
|
|
102
|
-
ON CONFLICT(session_id, message_id, requester_jid) DO UPDATE SET
|
|
103
|
-
retry_count=retry_inbound_counters.retry_count + 1,
|
|
104
|
-
updated_at_ms=excluded.updated_at_ms,
|
|
105
|
-
expires_at_ms=excluded.expires_at_ms`, [this.options.sessionId, messageId, requesterJid, updatedAtMs, expiresAtMs]);
|
|
106
|
-
const row = db.get(`SELECT retry_count
|
|
107
|
-
FROM retry_inbound_counters
|
|
108
|
-
WHERE session_id = ? AND message_id = ? AND requester_jid = ?`, [this.options.sessionId, messageId, requesterJid]);
|
|
109
|
-
if (!row) {
|
|
110
|
-
return 1;
|
|
111
|
-
}
|
|
112
|
-
return asNumber(row.retry_count, 'retry_inbound_counters.retry_count');
|
|
113
|
-
}
|
|
114
|
-
async cleanupExpired(nowMs) {
|
|
115
|
-
return this.withTransaction(async (db) => {
|
|
116
|
-
db.run(`DELETE FROM retry_outbound_messages
|
|
117
|
-
WHERE session_id = ? AND expires_at_ms <= ?`, [this.options.sessionId, nowMs]);
|
|
118
|
-
const outboundCountRow = db.get('SELECT changes() AS total', []);
|
|
119
|
-
const outboundCount = outboundCountRow
|
|
120
|
-
? asNumber(outboundCountRow.total, 'retry_outbound_messages.changes')
|
|
121
|
-
: 0;
|
|
122
|
-
db.run(`DELETE FROM retry_inbound_counters
|
|
123
|
-
WHERE session_id = ? AND expires_at_ms <= ?`, [this.options.sessionId, nowMs]);
|
|
124
|
-
const inboundCountRow = db.get('SELECT changes() AS total', []);
|
|
125
|
-
const inboundCount = inboundCountRow
|
|
126
|
-
? asNumber(inboundCountRow.total, 'retry_inbound_counters.changes')
|
|
127
|
-
: 0;
|
|
128
|
-
return outboundCount + inboundCount;
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
async clear() {
|
|
132
|
-
await this.withTransaction((db) => {
|
|
133
|
-
db.run('DELETE FROM retry_outbound_messages WHERE session_id = ?', [
|
|
134
|
-
this.options.sessionId
|
|
135
|
-
]);
|
|
136
|
-
db.run('DELETE FROM retry_inbound_counters WHERE session_id = ?', [
|
|
137
|
-
this.options.sessionId
|
|
138
|
-
]);
|
|
139
|
-
});
|
|
140
|
-
}
|
|
141
|
-
}
|