zapo-js 0.1.1 → 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 +20 -4
- package/dist/appstate/WaAppStateCrypto.js +19 -26
- package/dist/appstate/WaAppStateSyncClient.js +293 -181
- package/dist/appstate/WaAppStateSyncResponseParser.js +16 -5
- package/dist/appstate/constants.js +4 -3
- package/dist/appstate/{store/sqlite.js → encoding.js} +13 -8
- package/dist/appstate/index.js +8 -6
- package/dist/appstate/utils.js +9 -34
- package/dist/auth/WaAuthClient.js +43 -61
- package/dist/auth/flow/WaAuthCredentialsFlow.js +22 -15
- package/dist/auth/index.js +1 -8
- package/dist/auth/pairing/WaPairingCodeCrypto.js +6 -4
- package/dist/auth/pairing/WaPairingFlow.js +34 -26
- package/dist/auth/pairing/WaQrFlow.js +37 -24
- package/dist/client/WaClient.js +275 -324
- package/dist/client/WaClientFactory.js +500 -133
- package/dist/client/connection/WaConnectionManager.js +301 -0
- package/dist/client/connection/WaKeyShareCoordinator.js +63 -0
- package/dist/client/connection/WaReceiptQueue.js +51 -0
- package/dist/client/coordinators/WaAppStateMutationCoordinator.js +471 -0
- package/dist/client/coordinators/WaBusinessCoordinator.js +241 -0
- package/dist/client/coordinators/WaGroupCoordinator.js +30 -16
- package/dist/client/coordinators/WaIncomingNodeCoordinator.js +21 -27
- package/dist/client/coordinators/WaMessageDispatchCoordinator.js +439 -701
- 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 +242 -57
- package/dist/client/coordinators/WaStreamControlCoordinator.js +18 -11
- package/dist/client/coordinators/WaTrustedContactTokenCoordinator.js +166 -0
- package/dist/client/dirty.js +74 -48
- package/dist/client/events/chat.js +4 -3
- package/dist/client/events/devices.js +72 -0
- package/dist/client/events/group.js +62 -47
- package/dist/client/events/identity.js +22 -0
- package/dist/client/events/privacy-token.js +39 -0
- package/dist/client/history-sync.js +94 -63
- package/dist/client/incoming.js +60 -27
- package/dist/client/mailbox.js +24 -23
- package/dist/client/messages.js +107 -31
- package/dist/client/messaging/fanout.js +199 -0
- package/dist/client/messaging/key-protocol.js +130 -0
- package/dist/client/messaging/participants.js +193 -0
- 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/hkdf.js +3 -8
- package/dist/crypto/core/index.js +2 -5
- package/dist/crypto/core/keys.js +6 -7
- package/dist/crypto/core/nonce.js +2 -0
- package/dist/crypto/core/primitives.js +12 -23
- package/dist/crypto/core/random.js +26 -23
- package/dist/crypto/curves/Ed25519.js +7 -8
- package/dist/crypto/curves/X25519.js +38 -22
- package/dist/crypto/index.js +1 -3
- 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 +7 -14
- package/dist/esm/appstate/WaAppStateSyncClient.js +284 -172
- package/dist/esm/appstate/WaAppStateSyncResponseParser.js +17 -6
- package/dist/esm/appstate/constants.js +3 -2
- 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 +8 -30
- package/dist/esm/auth/WaAuthClient.js +43 -61
- package/dist/esm/auth/flow/WaAuthCredentialsFlow.js +22 -15
- package/dist/esm/auth/index.js +0 -3
- package/dist/esm/auth/pairing/WaPairingCodeCrypto.js +6 -4
- package/dist/esm/auth/pairing/WaPairingFlow.js +28 -20
- package/dist/esm/auth/pairing/WaQrFlow.js +37 -24
- package/dist/esm/client/WaClient.js +275 -324
- package/dist/esm/client/WaClientFactory.js +501 -134
- package/dist/esm/client/connection/WaConnectionManager.js +297 -0
- package/dist/esm/client/connection/WaKeyShareCoordinator.js +59 -0
- package/dist/esm/client/connection/WaReceiptQueue.js +47 -0
- package/dist/esm/client/coordinators/WaAppStateMutationCoordinator.js +467 -0
- package/dist/esm/client/coordinators/WaBusinessCoordinator.js +238 -0
- package/dist/esm/client/coordinators/WaGroupCoordinator.js +23 -9
- package/dist/esm/client/coordinators/WaIncomingNodeCoordinator.js +21 -27
- package/dist/esm/client/coordinators/WaMessageDispatchCoordinator.js +443 -705
- 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 +244 -59
- package/dist/esm/client/coordinators/WaStreamControlCoordinator.js +19 -12
- package/dist/esm/client/coordinators/WaTrustedContactTokenCoordinator.js +162 -0
- package/dist/esm/client/dirty.js +69 -43
- package/dist/esm/client/events/chat.js +4 -3
- package/dist/esm/client/events/devices.js +68 -0
- package/dist/esm/client/events/group.js +53 -39
- 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 +91 -60
- package/dist/esm/client/incoming.js +61 -28
- package/dist/esm/client/mailbox.js +24 -23
- package/dist/esm/client/messages.js +108 -32
- package/dist/esm/client/messaging/fanout.js +196 -0
- package/dist/esm/client/messaging/key-protocol.js +127 -0
- package/dist/esm/client/messaging/participants.js +190 -0
- 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/hkdf.js +3 -8
- package/dist/esm/crypto/core/index.js +2 -3
- package/dist/esm/crypto/core/keys.js +3 -4
- package/dist/esm/crypto/core/nonce.js +2 -0
- package/dist/esm/crypto/core/primitives.js +12 -22
- package/dist/esm/crypto/core/random.js +25 -23
- package/dist/esm/crypto/curves/Ed25519.js +4 -5
- package/dist/esm/crypto/curves/X25519.js +35 -19
- package/dist/esm/crypto/index.js +0 -1
- 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/log/ConsoleLogger.js +18 -17
- package/dist/esm/infra/log/PinoLogger.js +15 -9
- package/dist/esm/infra/log/types.js +11 -1
- package/dist/esm/infra/perf/BackgroundQueue.js +478 -0
- package/dist/esm/infra/perf/BoundedTaskQueue.js +16 -18
- 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 +96 -16
- package/dist/esm/media/WaMediaTransferClient.js +251 -91
- package/dist/esm/media/conn.js +10 -6
- package/dist/esm/media/constants.js +6 -2
- package/dist/esm/message/WaMessageClient.js +30 -32
- package/dist/esm/message/ack.js +6 -6
- package/dist/esm/message/addon-crypto.js +59 -0
- package/dist/esm/message/content.js +195 -9
- package/dist/esm/message/icdc.js +76 -0
- package/dist/esm/message/incoming.js +129 -122
- package/dist/esm/message/index.js +2 -0
- package/dist/esm/message/phash.js +3 -1
- package/dist/esm/message/reporting-token.js +425 -0
- package/dist/esm/message/use-case-secret.js +49 -0
- package/dist/esm/protocol/appstate.js +27 -0
- package/dist/esm/protocol/browser.js +10 -18
- package/dist/esm/protocol/constants.js +6 -3
- package/dist/esm/protocol/defaults.js +6 -0
- package/dist/esm/protocol/index.js +2 -11
- package/dist/esm/protocol/jid.js +133 -52
- package/dist/esm/protocol/media.js +3 -3
- package/dist/esm/protocol/message.js +61 -1
- package/dist/esm/protocol/nodes.js +4 -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/protocol/usync.js +11 -0
- package/dist/esm/retry/codec.js +216 -0
- package/dist/esm/retry/constants.js +1 -1
- package/dist/esm/retry/index.js +3 -2
- package/dist/esm/retry/parse.js +88 -86
- package/dist/esm/retry/replay.js +54 -51
- package/dist/esm/retry/tracker.js +94 -0
- package/dist/esm/signal/api/SignalDeviceSyncApi.js +276 -92
- package/dist/esm/signal/api/SignalDigestSyncApi.js +17 -8
- package/dist/esm/signal/api/SignalIdentitySyncApi.js +67 -37
- package/dist/esm/signal/api/SignalMissingPreKeysSyncApi.js +86 -67
- package/dist/esm/signal/api/SignalRotateKeyApi.js +4 -2
- package/dist/esm/signal/api/SignalSessionSyncApi.js +36 -34
- 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 +13 -9
- package/dist/esm/signal/{store/sqlite.js → encoding.js} +93 -60
- package/dist/esm/signal/group/SenderKeyChain.js +28 -23
- package/dist/esm/signal/group/SenderKeyCodec.js +5 -6
- package/dist/esm/signal/group/SenderKeyManager.js +144 -115
- package/dist/esm/signal/index.js +2 -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 +164 -53
- package/dist/esm/signal/session/SignalRatchet.js +24 -15
- package/dist/esm/signal/session/SignalSession.js +14 -9
- package/dist/esm/signal/session/resolver.js +221 -0
- package/dist/esm/store/contracts/privacy-token.store.js +1 -0
- package/dist/esm/store/createStore.js +100 -188
- 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 +4 -7
- package/dist/esm/store/providers/memory/appstate.store.js +38 -16
- package/dist/esm/store/providers/memory/contact.store.js +5 -0
- package/dist/esm/store/providers/memory/device-list.store.js +12 -34
- package/dist/esm/store/providers/memory/message.store.js +11 -5
- package/dist/esm/store/providers/memory/participants.store.js +1 -8
- 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 +11 -8
- package/dist/esm/store/providers/memory/signal.store.js +47 -18
- package/dist/esm/store/providers/memory/thread.store.js +5 -0
- package/dist/esm/transport/WaComms.js +28 -24
- package/dist/esm/transport/WaWebSocket.js +115 -18
- package/dist/esm/transport/binary/constants.js +0 -30
- package/dist/esm/transport/binary/decoder.js +8 -8
- package/dist/esm/transport/binary/encoder.js +10 -9
- package/dist/esm/transport/binary/index.js +0 -1
- package/dist/esm/transport/index.js +1 -0
- package/dist/esm/transport/keepalive/WaKeepAlive.js +2 -8
- package/dist/esm/transport/node/WaNodeOrchestrator.js +25 -21
- package/dist/esm/transport/node/WaNodeTransport.js +0 -3
- package/dist/esm/transport/node/builders/{accountSync.js → account-sync.js} +16 -36
- 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 +7 -3
- package/dist/esm/transport/node/builders/message.js +63 -230
- package/dist/esm/transport/node/builders/pairing.js +2 -27
- 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 +45 -0
- package/dist/esm/transport/node/helpers.js +125 -5
- package/dist/esm/transport/node/usync.js +5 -0
- package/dist/esm/transport/node/xml.js +35 -14
- package/dist/esm/transport/noise/WaClientPayload.js +10 -10
- package/dist/esm/transport/noise/WaFrameCodec.js +48 -33
- package/dist/esm/transport/noise/WaNoiseCert.js +4 -7
- package/dist/esm/transport/noise/WaNoiseSession.js +77 -29
- package/dist/esm/transport/noise/WaNoiseSocket.js +8 -4
- package/dist/esm/transport/proxy.js +27 -0
- package/dist/esm/transport/stream/parse.js +17 -48
- package/dist/esm/util/bytes.js +67 -45
- package/dist/esm/util/coercion.js +6 -14
- package/dist/esm/util/index.js +5 -0
- package/dist/esm/util/primitives.js +40 -14
- package/dist/index.js +7 -1
- package/dist/infra/log/ConsoleLogger.js +18 -17
- package/dist/infra/log/PinoLogger.js +15 -9
- package/dist/infra/log/types.js +12 -0
- package/dist/infra/perf/BackgroundQueue.js +482 -0
- package/dist/infra/perf/BoundedTaskQueue.js +16 -18
- 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 +95 -15
- package/dist/media/WaMediaTransferClient.js +284 -91
- package/dist/media/conn.js +10 -6
- package/dist/media/constants.js +6 -2
- package/dist/message/WaMessageClient.js +31 -33
- package/dist/message/ack.js +6 -6
- package/dist/message/addon-crypto.js +65 -0
- package/dist/message/content.js +198 -9
- package/dist/message/icdc.js +81 -0
- package/dist/message/incoming.js +127 -120
- package/dist/message/index.js +2 -0
- package/dist/message/phash.js +3 -1
- package/dist/message/reporting-token.js +429 -0
- package/dist/message/use-case-secret.js +55 -0
- package/dist/protocol/appstate.js +28 -1
- package/dist/protocol/browser.js +10 -18
- package/dist/protocol/constants.js +26 -1
- package/dist/protocol/defaults.js +6 -0
- package/dist/protocol/index.js +23 -42
- package/dist/protocol/jid.js +140 -52
- package/dist/protocol/media.js +3 -3
- package/dist/protocol/message.js +62 -2
- package/dist/protocol/nodes.js +4 -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/protocol/usync.js +14 -0
- package/dist/retry/codec.js +220 -0
- package/dist/retry/constants.js +1 -1
- package/dist/retry/index.js +7 -5
- package/dist/retry/parse.js +88 -85
- package/dist/retry/replay.js +52 -49
- package/dist/retry/tracker.js +97 -0
- package/dist/signal/api/SignalDeviceSyncApi.js +273 -89
- package/dist/signal/api/SignalDigestSyncApi.js +17 -8
- package/dist/signal/api/SignalIdentitySyncApi.js +66 -36
- package/dist/signal/api/SignalMissingPreKeysSyncApi.js +82 -63
- package/dist/signal/api/SignalRotateKeyApi.js +4 -2
- package/dist/signal/api/SignalSessionSyncApi.js +36 -34
- package/dist/signal/api/result-map.js +13 -0
- package/dist/signal/constants.js +1 -5
- package/dist/signal/crypto/WaAdvSignature.js +11 -7
- package/dist/signal/{store/sqlite.js → encoding.js} +94 -61
- package/dist/signal/group/SenderKeyChain.js +27 -22
- package/dist/signal/group/SenderKeyCodec.js +5 -6
- package/dist/signal/group/SenderKeyManager.js +144 -115
- package/dist/signal/index.js +15 -1
- package/dist/signal/registration/keygen.js +6 -2
- package/dist/signal/registration/utils.js +1 -0
- package/dist/signal/session/SignalProtocol.js +164 -53
- package/dist/signal/session/SignalRatchet.js +24 -15
- package/dist/signal/session/SignalSession.js +14 -9
- package/dist/signal/session/resolver.js +224 -0
- package/dist/store/contracts/privacy-token.store.js +2 -0
- package/dist/store/createStore.js +100 -188
- 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 +4 -7
- package/dist/store/providers/memory/appstate.store.js +36 -14
- package/dist/store/providers/memory/contact.store.js +5 -0
- package/dist/store/providers/memory/device-list.store.js +12 -34
- package/dist/store/providers/memory/message.store.js +11 -5
- package/dist/store/providers/memory/participants.store.js +1 -8
- 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 +14 -11
- package/dist/store/providers/memory/signal.store.js +54 -25
- package/dist/store/providers/memory/thread.store.js +5 -0
- package/dist/transport/WaComms.js +30 -26
- package/dist/transport/WaWebSocket.js +148 -18
- package/dist/transport/binary/constants.js +1 -31
- package/dist/transport/binary/decoder.js +8 -8
- package/dist/transport/binary/encoder.js +10 -9
- package/dist/transport/binary/index.js +0 -4
- package/dist/transport/index.js +7 -1
- package/dist/transport/keepalive/WaKeepAlive.js +1 -7
- package/dist/transport/node/WaNodeOrchestrator.js +25 -21
- package/dist/transport/node/WaNodeTransport.js +0 -3
- package/dist/transport/node/builders/{accountSync.js → account-sync.js} +15 -35
- 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 +29 -17
- package/dist/transport/node/builders/message.js +64 -236
- package/dist/transport/node/builders/pairing.js +2 -29
- 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 +49 -0
- package/dist/transport/node/helpers.js +131 -4
- package/dist/transport/node/usync.js +8 -0
- package/dist/transport/node/xml.js +35 -14
- package/dist/transport/noise/WaClientPayload.js +13 -13
- package/dist/transport/noise/WaFrameCodec.js +47 -32
- package/dist/transport/noise/WaNoiseCert.js +5 -8
- package/dist/transport/noise/WaNoiseSession.js +77 -29
- package/dist/transport/noise/WaNoiseSocket.js +8 -4
- package/dist/transport/proxy.js +34 -0
- package/dist/transport/stream/parse.js +20 -52
- package/dist/types/appstate/WaAppStateCrypto.d.ts +0 -1
- package/dist/types/appstate/WaAppStateSyncClient.d.ts +5 -2
- package/dist/types/appstate/constants.d.ts +1 -0
- 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 -3
- package/dist/types/auth/WaAuthClient.d.ts +10 -12
- package/dist/types/auth/flow/WaAuthCredentialsFlow.d.ts +1 -1
- package/dist/types/auth/index.d.ts +0 -4
- package/dist/types/auth/pairing/WaQrFlow.d.ts +1 -1
- package/dist/types/auth/types.d.ts +7 -9
- package/dist/types/client/WaClient.d.ts +42 -25
- package/dist/types/client/WaClientFactory.d.ts +33 -26
- package/dist/types/client/connection/WaConnectionManager.d.ts +66 -0
- package/dist/types/client/connection/WaKeyShareCoordinator.d.ts +14 -0
- package/dist/types/client/connection/WaReceiptQueue.d.ts +13 -0
- package/dist/types/client/coordinators/WaAppStateMutationCoordinator.d.ts +46 -0
- package/dist/types/client/coordinators/WaBusinessCoordinator.d.ts +57 -0
- package/dist/types/client/coordinators/WaIncomingNodeCoordinator.d.ts +3 -2
- package/dist/types/client/coordinators/WaMessageDispatchCoordinator.d.ts +29 -38
- 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 +8 -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/dirty.d.ts +1 -0
- package/dist/types/client/events/devices.d.ts +20 -0
- package/dist/types/client/events/group.d.ts +2 -1
- 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/messaging/fanout.d.ts +14 -0
- package/dist/types/client/messaging/key-protocol.d.ts +18 -0
- package/dist/types/client/messaging/participants.d.ts +13 -0
- 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 +75 -4
- package/dist/types/crypto/core/hkdf.d.ts +0 -6
- package/dist/types/crypto/core/index.d.ts +2 -3
- 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 +2 -7
- package/dist/types/crypto/index.d.ts +0 -1
- 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/log/ConsoleLogger.d.ts +2 -1
- package/dist/types/infra/log/PinoLogger.d.ts +1 -1
- package/dist/types/infra/log/types.d.ts +1 -0
- package/dist/types/infra/perf/BackgroundQueue.d.ts +58 -0
- package/dist/types/infra/perf/BoundedTaskQueue.d.ts +1 -1
- 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 +16 -15
- 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 +15 -2
- package/dist/types/message/addon-crypto.d.ts +25 -0
- package/dist/types/message/content.d.ts +8 -0
- package/dist/types/message/icdc.d.ts +13 -0
- package/dist/types/message/index.d.ts +2 -0
- package/dist/types/message/reporting-token.d.ts +18 -0
- package/dist/types/message/types.d.ts +45 -6
- package/dist/types/message/use-case-secret.d.ts +20 -0
- package/dist/types/protocol/appstate.d.ts +47 -0
- package/dist/types/protocol/constants.d.ts +8 -3
- package/dist/types/protocol/defaults.d.ts +6 -0
- package/dist/types/protocol/index.d.ts +2 -11
- package/dist/types/protocol/jid.d.ts +22 -5
- package/dist/types/protocol/message.d.ts +60 -0
- package/dist/types/protocol/nodes.d.ts +4 -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/protocol/usync.d.ts +11 -0
- package/dist/types/retry/codec.d.ts +3 -0
- package/dist/types/retry/index.d.ts +4 -3
- package/dist/types/retry/parse.d.ts +5 -2
- package/dist/types/retry/replay.d.ts +0 -4
- package/dist/types/retry/tracker.d.ts +20 -0
- package/dist/types/retry/types.d.ts +10 -4
- package/dist/types/signal/api/SignalDeviceSyncApi.d.ts +15 -2
- 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/SenderKeyCodec.d.ts +4 -6
- package/dist/types/signal/group/SenderKeyManager.d.ts +10 -5
- package/dist/types/signal/index.d.ts +3 -0
- package/dist/types/signal/session/SignalProtocol.d.ts +19 -4
- package/dist/types/signal/session/resolver.d.ts +22 -0
- package/dist/types/store/contracts/appstate.store.d.ts +4 -1
- package/dist/types/store/contracts/contact.store.d.ts +1 -0
- package/dist/types/store/contracts/device-list.store.d.ts +0 -3
- package/dist/types/store/contracts/message.store.d.ts +1 -0
- package/dist/types/store/contracts/participants.store.d.ts +0 -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/sender-key.store.d.ts +0 -1
- package/dist/types/store/contracts/signal.store.d.ts +13 -0
- package/dist/types/store/contracts/thread.store.d.ts +1 -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 +3 -1
- package/dist/types/store/providers/memory/contact.store.d.ts +1 -0
- package/dist/types/store/providers/memory/device-list.store.d.ts +0 -3
- package/dist/types/store/providers/memory/message.store.d.ts +1 -0
- package/dist/types/store/providers/memory/participants.store.d.ts +0 -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/sender-key.store.d.ts +0 -1
- package/dist/types/store/providers/memory/signal.store.d.ts +8 -1
- package/dist/types/store/providers/memory/thread.store.d.ts +1 -0
- package/dist/types/store/types.d.ts +49 -58
- package/dist/types/transport/WaWebSocket.d.ts +3 -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/index.d.ts +2 -1
- package/dist/types/transport/keepalive/WaKeepAlive.d.ts +0 -1
- package/dist/types/transport/node/WaNodeOrchestrator.d.ts +3 -4
- package/dist/types/transport/node/WaNodeTransport.d.ts +0 -9
- 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/group.d.ts +4 -6
- package/dist/types/transport/node/builders/index.d.ts +7 -3
- package/dist/types/transport/node/builders/message.d.ts +20 -30
- 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 +2 -5
- package/dist/types/transport/node/builders/usync.d.ts +21 -0
- package/dist/types/transport/node/helpers.d.ts +13 -0
- package/dist/types/transport/node/usync.d.ts +2 -0
- package/dist/types/transport/noise/WaFrameCodec.d.ts +3 -0
- package/dist/types/transport/noise/WaNoiseSession.d.ts +4 -2
- package/dist/types/transport/noise/WaNoiseSocket.d.ts +4 -2
- package/dist/types/transport/proxy.d.ts +6 -0
- package/dist/types/transport/stream/parse.d.ts +0 -1
- package/dist/types/transport/types.d.ts +18 -1
- package/dist/types/util/bytes.d.ts +5 -0
- package/dist/types/util/index.d.ts +5 -0
- package/dist/types/util/primitives.d.ts +2 -0
- package/dist/util/bytes.js +72 -46
- package/dist/util/coercion.js +6 -14
- package/dist/util/index.js +23 -0
- package/dist/util/primitives.js +42 -14
- package/package.json +52 -9
- package/proto/index.js +1 -1
- package/dist/crypto/core/constants.js +0 -4
- package/dist/crypto/core/encoding.js +0 -29
- package/dist/esm/crypto/core/constants.js +0 -1
- package/dist/esm/crypto/core/encoding.js +0 -25
- package/dist/esm/retry/outbound.js +0 -83
- package/dist/esm/store/providers/sqlite/BaseSqliteStore.js +0 -37
- package/dist/esm/store/providers/sqlite/appstate.store.js +0 -169
- package/dist/esm/store/providers/sqlite/auth.store.js +0 -176
- package/dist/esm/store/providers/sqlite/connection.js +0 -240
- package/dist/esm/store/providers/sqlite/contact.store.js +0 -61
- package/dist/esm/store/providers/sqlite/device-list.store.js +0 -155
- package/dist/esm/store/providers/sqlite/message.store.js +0 -119
- package/dist/esm/store/providers/sqlite/migrations.js +0 -347
- package/dist/esm/store/providers/sqlite/participants.store.js +0 -85
- package/dist/esm/store/providers/sqlite/retry.store.js +0 -144
- package/dist/esm/store/providers/sqlite/sender-key.store.js +0 -203
- package/dist/esm/store/providers/sqlite/signal.store.js +0 -353
- package/dist/esm/store/providers/sqlite/thread.store.js +0 -72
- package/dist/esm/util/base64.js +0 -18
- package/dist/esm/util/signal-address.js +0 -5
- package/dist/retry/outbound.js +0 -88
- package/dist/store/providers/sqlite/BaseSqliteStore.js +0 -41
- package/dist/store/providers/sqlite/appstate.store.js +0 -173
- package/dist/store/providers/sqlite/auth.store.js +0 -180
- package/dist/store/providers/sqlite/connection.js +0 -276
- package/dist/store/providers/sqlite/contact.store.js +0 -65
- package/dist/store/providers/sqlite/device-list.store.js +0 -159
- package/dist/store/providers/sqlite/message.store.js +0 -123
- package/dist/store/providers/sqlite/migrations.js +0 -350
- package/dist/store/providers/sqlite/participants.store.js +0 -89
- package/dist/store/providers/sqlite/retry.store.js +0 -148
- package/dist/store/providers/sqlite/sender-key.store.js +0 -207
- package/dist/store/providers/sqlite/signal.store.js +0 -357
- package/dist/store/providers/sqlite/thread.store.js +0 -76
- package/dist/types/appstate/store/sqlite.d.ts +0 -21
- package/dist/types/crypto/core/constants.d.ts +0 -1
- package/dist/types/crypto/core/encoding.d.ts +0 -11
- 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 -15
- 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 -10
- package/dist/types/store/providers/sqlite/device-list.store.d.ts +0 -18
- package/dist/types/store/providers/sqlite/message.store.d.ts +0 -11
- package/dist/types/store/providers/sqlite/migrations.d.ts +0 -3
- package/dist/types/store/providers/sqlite/participants.store.d.ts +0 -13
- package/dist/types/store/providers/sqlite/retry.store.d.ts +0 -16
- package/dist/types/store/providers/sqlite/sender-key.store.d.ts +0 -25
- package/dist/types/store/providers/sqlite/signal.store.d.ts +0 -46
- package/dist/types/store/providers/sqlite/thread.store.d.ts +0 -11
- package/dist/types/util/base64.d.ts +0 -4
- package/dist/types/util/signal-address.d.ts +0 -2
- package/dist/util/base64.js +0 -24
- package/dist/util/signal-address.js +0 -8
- /package/dist/types/transport/node/builders/{accountSync.d.ts → account-sync.d.ts} +0 -0
|
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.WaNoiseSession = void 0;
|
|
4
4
|
const _crypto_1 = require("../../crypto/index.js");
|
|
5
5
|
const ConsoleLogger_1 = require("../../infra/log/ConsoleLogger");
|
|
6
|
-
const BoundedTaskQueue_1 = require("../../infra/perf/BoundedTaskQueue");
|
|
7
6
|
const _proto_1 = require("../../proto.js");
|
|
8
7
|
const constants_1 = require("../../protocol/constants");
|
|
9
8
|
const constants_2 = require("../noise/constants");
|
|
@@ -51,12 +50,11 @@ function buildRoutingInfoPrefix(routingInfo) {
|
|
|
51
50
|
}
|
|
52
51
|
class WaNoiseSession {
|
|
53
52
|
constructor(sendWire, logger = new ConsoleLogger_1.ConsoleLogger('info')) {
|
|
54
|
-
this.
|
|
55
|
-
this.
|
|
56
|
-
this.writeQueue = new BoundedTaskQueue_1.BoundedTaskQueue(4096, 1);
|
|
57
|
-
this.readQueue = new BoundedTaskQueue_1.BoundedTaskQueue(4096, 1);
|
|
53
|
+
this.writeChain = Promise.resolve();
|
|
54
|
+
this.readChain = Promise.resolve();
|
|
58
55
|
this.frameCodec = null;
|
|
59
56
|
this.handshakeInbox = [];
|
|
57
|
+
this.handshakeInboxHead = 0;
|
|
60
58
|
this.handshakeWaiter = null;
|
|
61
59
|
this.handshakeRejecter = null;
|
|
62
60
|
this.pendingDecryptedFrames = [];
|
|
@@ -64,6 +62,8 @@ class WaNoiseSession {
|
|
|
64
62
|
this.noiseSocket = null;
|
|
65
63
|
this.serverStaticKey = null;
|
|
66
64
|
this.handshakeFrameTimeoutMs = constants_1.WA_DEFAULTS.CONNECT_TIMEOUT_MS;
|
|
65
|
+
this.sendWire = sendWire;
|
|
66
|
+
this.logger = logger;
|
|
67
67
|
}
|
|
68
68
|
async start(config) {
|
|
69
69
|
this.reset();
|
|
@@ -95,12 +95,24 @@ class WaNoiseSession {
|
|
|
95
95
|
await this.decodeBufferedPostHandshakeFrames();
|
|
96
96
|
this.logger.info('noise session established via full handshake');
|
|
97
97
|
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
98
|
+
encryptFrame(frame) {
|
|
99
|
+
const socket = this.noiseSocket;
|
|
100
|
+
const codec = this.frameCodec;
|
|
101
|
+
if (!socket || !codec) {
|
|
102
|
+
return Promise.reject(new Error('noise session is not established'));
|
|
101
103
|
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
+
let encryptPromise;
|
|
105
|
+
try {
|
|
106
|
+
encryptPromise = socket.encrypt(socket.reserveWriteNonce(), frame);
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
return Promise.reject(error);
|
|
110
|
+
}
|
|
111
|
+
const result = this.writeChain
|
|
112
|
+
.then(() => encryptPromise)
|
|
113
|
+
.then((encrypted) => codec.encodeFrame(encrypted));
|
|
114
|
+
this.writeChain = result.then(() => { }, () => { });
|
|
115
|
+
return result;
|
|
104
116
|
}
|
|
105
117
|
async pushWireChunk(chunk) {
|
|
106
118
|
const codec = this.frameCodec;
|
|
@@ -109,7 +121,9 @@ class WaNoiseSession {
|
|
|
109
121
|
}
|
|
110
122
|
const out = [];
|
|
111
123
|
if (this.pendingDecryptedFrames.length > 0) {
|
|
112
|
-
|
|
124
|
+
for (let i = 0; i < this.pendingDecryptedFrames.length; i += 1) {
|
|
125
|
+
out.push(this.pendingDecryptedFrames[i]);
|
|
126
|
+
}
|
|
113
127
|
this.pendingDecryptedFrames = [];
|
|
114
128
|
}
|
|
115
129
|
const frames = codec.pushWireChunk(chunk);
|
|
@@ -127,9 +141,15 @@ class WaNoiseSession {
|
|
|
127
141
|
}
|
|
128
142
|
return out;
|
|
129
143
|
}
|
|
130
|
-
|
|
131
|
-
const
|
|
132
|
-
|
|
144
|
+
if (frames.length > 0) {
|
|
145
|
+
const decryptBatch = this.decryptFramesBatch(this.noiseSocket, frames);
|
|
146
|
+
this.readChain = this.readChain
|
|
147
|
+
.then(() => decryptBatch)
|
|
148
|
+
.then(() => { }, () => { });
|
|
149
|
+
const decrypted = await decryptBatch;
|
|
150
|
+
for (let i = 0; i < decrypted.length; i++) {
|
|
151
|
+
out.push(decrypted[i]);
|
|
152
|
+
}
|
|
133
153
|
}
|
|
134
154
|
return out;
|
|
135
155
|
}
|
|
@@ -144,21 +164,30 @@ class WaNoiseSession {
|
|
|
144
164
|
rejecter(closeError);
|
|
145
165
|
}
|
|
146
166
|
}
|
|
167
|
+
async decryptFramesBatch(socket, frames) {
|
|
168
|
+
if (frames.length === 1) {
|
|
169
|
+
return [await socket.decrypt(socket.reserveReadNonce(), frames[0])];
|
|
170
|
+
}
|
|
171
|
+
const pending = new Array(frames.length);
|
|
172
|
+
for (let i = 0; i < frames.length; i++) {
|
|
173
|
+
pending[i] = socket.decrypt(socket.reserveReadNonce(), frames[i]);
|
|
174
|
+
}
|
|
175
|
+
return Promise.all(pending);
|
|
176
|
+
}
|
|
147
177
|
reset() {
|
|
148
178
|
this.logger.trace('noise session reset');
|
|
149
179
|
this.frameCodec = null;
|
|
150
|
-
this.handshakeInbox =
|
|
180
|
+
this.handshakeInbox.length = this.handshakeInboxHead = 0;
|
|
151
181
|
this.handshakeWaiter = null;
|
|
152
182
|
this.handshakeRejecter = null;
|
|
153
183
|
this.pendingDecryptedFrames = [];
|
|
154
184
|
this.closedError = null;
|
|
155
185
|
this.noiseSocket = null;
|
|
156
186
|
this.serverStaticKey = null;
|
|
187
|
+
this.writeChain = Promise.resolve();
|
|
188
|
+
this.readChain = Promise.resolve();
|
|
157
189
|
}
|
|
158
190
|
getServerStaticKey() {
|
|
159
|
-
if (!this.serverStaticKey) {
|
|
160
|
-
return null;
|
|
161
|
-
}
|
|
162
191
|
return this.serverStaticKey;
|
|
163
192
|
}
|
|
164
193
|
async fullHandshake(clientStaticKeyPair, ephemeralKeyPair, payload, protocolHeader, verifyCertificates) {
|
|
@@ -188,10 +217,12 @@ class WaNoiseSession {
|
|
|
188
217
|
await handshake.start(constants_2.NOISE_IK_NAME, protocolHeader);
|
|
189
218
|
await handshake.authenticate(serverStaticKey);
|
|
190
219
|
await handshake.authenticate(ephemeralKeyPair.pubKey);
|
|
191
|
-
const agreement1 = await
|
|
220
|
+
const [agreement1, agreement2] = await Promise.all([
|
|
221
|
+
_crypto_1.X25519.scalarMult(ephemeralKeyPair.privKey, serverStaticKey),
|
|
222
|
+
_crypto_1.X25519.scalarMult(clientStaticKeyPair.privKey, serverStaticKey)
|
|
223
|
+
]);
|
|
192
224
|
await handshake.mixIntoKey(agreement1);
|
|
193
225
|
const encryptedClientStatic = await handshake.encrypt(clientStaticKeyPair.pubKey);
|
|
194
|
-
const agreement2 = await _crypto_1.X25519.scalarMult(clientStaticKeyPair.privKey, serverStaticKey);
|
|
195
226
|
await handshake.mixIntoKey(agreement2);
|
|
196
227
|
const encryptedPayload = await handshake.encrypt(payload);
|
|
197
228
|
const clientHello = _proto_1.proto.HandshakeMessage.encode({
|
|
@@ -218,8 +249,12 @@ class WaNoiseSession {
|
|
|
218
249
|
}
|
|
219
250
|
const serverEphemeral = (0, bytes_1.toBytesView)(serverHello.ephemeral);
|
|
220
251
|
await handshake.authenticate(serverEphemeral);
|
|
221
|
-
|
|
222
|
-
|
|
252
|
+
const [dh1, dh2] = await Promise.all([
|
|
253
|
+
_crypto_1.X25519.scalarMult(ephemeralKeyPair.privKey, serverEphemeral),
|
|
254
|
+
_crypto_1.X25519.scalarMult(clientStaticKeyPair.privKey, serverEphemeral)
|
|
255
|
+
]);
|
|
256
|
+
await handshake.mixIntoKey(dh1);
|
|
257
|
+
await handshake.mixIntoKey(dh2);
|
|
223
258
|
await handshake.decrypt((0, bytes_1.toBytesView)(serverHello.payload));
|
|
224
259
|
this.serverStaticKey = serverStaticKey;
|
|
225
260
|
this.logger.info('noise resume handshake successful without fallback');
|
|
@@ -278,8 +313,13 @@ class WaNoiseSession {
|
|
|
278
313
|
if (this.closedError) {
|
|
279
314
|
throw this.closedError;
|
|
280
315
|
}
|
|
281
|
-
const queued = this.handshakeInbox.
|
|
316
|
+
const queued = this.handshakeInboxHead < this.handshakeInbox.length
|
|
317
|
+
? this.handshakeInbox[this.handshakeInboxHead++]
|
|
318
|
+
: undefined;
|
|
282
319
|
if (queued) {
|
|
320
|
+
if (this.handshakeInboxHead === this.handshakeInbox.length) {
|
|
321
|
+
this.handshakeInbox.length = this.handshakeInboxHead = 0;
|
|
322
|
+
}
|
|
283
323
|
this.logger.trace('noise handshake frame consumed from queue');
|
|
284
324
|
return queued;
|
|
285
325
|
}
|
|
@@ -310,17 +350,25 @@ class WaNoiseSession {
|
|
|
310
350
|
});
|
|
311
351
|
}
|
|
312
352
|
async decodeBufferedPostHandshakeFrames() {
|
|
313
|
-
if (!this.noiseSocket || this.handshakeInbox.length
|
|
353
|
+
if (!this.noiseSocket || this.handshakeInboxHead >= this.handshakeInbox.length) {
|
|
314
354
|
return;
|
|
315
355
|
}
|
|
316
356
|
this.logger.debug('decoding buffered post-handshake frames', {
|
|
317
|
-
count: this.handshakeInbox.length
|
|
357
|
+
count: this.handshakeInbox.length - this.handshakeInboxHead
|
|
318
358
|
});
|
|
319
|
-
const
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
this.
|
|
359
|
+
const start = this.handshakeInboxHead;
|
|
360
|
+
const frames = this.handshakeInbox.slice(start);
|
|
361
|
+
if (frames.length > 0) {
|
|
362
|
+
const decryptBatch = this.decryptFramesBatch(this.noiseSocket, frames);
|
|
363
|
+
this.readChain = this.readChain
|
|
364
|
+
.then(() => decryptBatch)
|
|
365
|
+
.then(() => { }, () => { });
|
|
366
|
+
const decrypted = await decryptBatch;
|
|
367
|
+
for (let i = 0; i < decrypted.length; i++) {
|
|
368
|
+
this.pendingDecryptedFrames.push(decrypted[i]);
|
|
369
|
+
}
|
|
323
370
|
}
|
|
371
|
+
this.handshakeInbox.length = this.handshakeInboxHead = 0;
|
|
324
372
|
}
|
|
325
373
|
}
|
|
326
374
|
exports.WaNoiseSession = WaNoiseSession;
|
|
@@ -9,12 +9,16 @@ class WaNoiseSocket {
|
|
|
9
9
|
this.writeCounter = 0;
|
|
10
10
|
this.readCounter = 0;
|
|
11
11
|
}
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
reserveWriteNonce() {
|
|
13
|
+
return (0, _crypto_1.buildNonce)(this.writeCounter++);
|
|
14
|
+
}
|
|
15
|
+
encrypt(nonce, frame, additionalData) {
|
|
14
16
|
return (0, _crypto_1.aesGcmEncrypt)(this.encryptKey, nonce, frame, additionalData);
|
|
15
17
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
+
reserveReadNonce() {
|
|
19
|
+
return (0, _crypto_1.buildNonce)(this.readCounter++);
|
|
20
|
+
}
|
|
21
|
+
decrypt(nonce, frame, additionalData) {
|
|
18
22
|
return (0, _crypto_1.aesGcmDecrypt)(this.decryptKey, nonce, frame, additionalData);
|
|
19
23
|
}
|
|
20
24
|
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isProxyDispatcher = isProxyDispatcher;
|
|
4
|
+
exports.isProxyAgent = isProxyAgent;
|
|
5
|
+
exports.isProxyTransport = isProxyTransport;
|
|
6
|
+
exports.toProxyDispatcher = toProxyDispatcher;
|
|
7
|
+
exports.toProxyAgent = toProxyAgent;
|
|
8
|
+
function isProxyDispatcher(value) {
|
|
9
|
+
return (typeof value === 'object' &&
|
|
10
|
+
value !== null &&
|
|
11
|
+
'dispatch' in value &&
|
|
12
|
+
typeof value.dispatch === 'function');
|
|
13
|
+
}
|
|
14
|
+
function isProxyAgent(value) {
|
|
15
|
+
return (typeof value === 'object' &&
|
|
16
|
+
value !== null &&
|
|
17
|
+
'addRequest' in value &&
|
|
18
|
+
typeof value.addRequest === 'function');
|
|
19
|
+
}
|
|
20
|
+
function isProxyTransport(value) {
|
|
21
|
+
return isProxyDispatcher(value) || isProxyAgent(value);
|
|
22
|
+
}
|
|
23
|
+
function toProxyDispatcher(proxy) {
|
|
24
|
+
if (!proxy || !isProxyDispatcher(proxy)) {
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
return proxy;
|
|
28
|
+
}
|
|
29
|
+
function toProxyAgent(proxy) {
|
|
30
|
+
if (!proxy || !isProxyAgent(proxy)) {
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
return proxy;
|
|
34
|
+
}
|
|
@@ -1,80 +1,48 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.parseStreamControlNode = parseStreamControlNode;
|
|
4
|
-
exports.parseOptionalInt = parseOptionalInt;
|
|
5
4
|
exports.parseCompanionEncStatic = parseCompanionEncStatic;
|
|
6
5
|
exports.parseSuccessPersistAttributes = parseSuccessPersistAttributes;
|
|
7
6
|
const constants_1 = require("../../protocol/constants");
|
|
8
7
|
const helpers_1 = require("../node/helpers");
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
return undefined;
|
|
13
|
-
}
|
|
14
|
-
const parsed = Number(value);
|
|
15
|
-
if (!Number.isSafeInteger(parsed)) {
|
|
16
|
-
return undefined;
|
|
17
|
-
}
|
|
18
|
-
return parsed;
|
|
19
|
-
}
|
|
8
|
+
const bytes_1 = require("../../util/bytes");
|
|
9
|
+
const primitives_1 = require("../../util/primitives");
|
|
10
|
+
const DIGITS_ONLY_RE = /^\d+$/;
|
|
20
11
|
function parseStreamControlNode(node) {
|
|
21
12
|
if (node.tag === constants_1.WA_STREAM_SIGNALING.XML_STREAM_END_TAG) {
|
|
22
|
-
return {
|
|
23
|
-
kind: 'xmlstreamend'
|
|
24
|
-
};
|
|
13
|
+
return { kind: 'xmlstreamend' };
|
|
25
14
|
}
|
|
26
15
|
if (node.tag !== constants_1.WA_STREAM_SIGNALING.STREAM_ERROR_TAG) {
|
|
27
16
|
return null;
|
|
28
17
|
}
|
|
29
18
|
const conflictNode = (0, helpers_1.findNodeChild)(node, constants_1.WA_STREAM_SIGNALING.CONFLICT_TAG);
|
|
30
19
|
if (conflictNode) {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
return {
|
|
37
|
-
kind: 'stream_error_device_removed'
|
|
38
|
-
};
|
|
20
|
+
return conflictNode.attrs.type === constants_1.WA_STREAM_SIGNALING.REPLACED_TYPE
|
|
21
|
+
? { kind: 'stream_error_replaced' }
|
|
22
|
+
: { kind: 'stream_error_device_removed' };
|
|
39
23
|
}
|
|
40
|
-
const
|
|
41
|
-
if (
|
|
42
|
-
const code =
|
|
43
|
-
if (code
|
|
44
|
-
return {
|
|
45
|
-
kind: 'stream_error_code',
|
|
46
|
-
code
|
|
47
|
-
};
|
|
24
|
+
const codeStr = node.attrs.code;
|
|
25
|
+
if (codeStr && DIGITS_ONLY_RE.test(codeStr)) {
|
|
26
|
+
const code = Number(codeStr);
|
|
27
|
+
if (Number.isSafeInteger(code)) {
|
|
28
|
+
return { kind: 'stream_error_code', code };
|
|
48
29
|
}
|
|
49
30
|
}
|
|
50
31
|
const ackNode = (0, helpers_1.findNodeChild)(node, constants_1.WA_STREAM_SIGNALING.ACK_TAG);
|
|
51
32
|
if (ackNode) {
|
|
52
|
-
return {
|
|
53
|
-
kind: 'stream_error_ack',
|
|
54
|
-
id: ackNode.attrs.id
|
|
55
|
-
};
|
|
33
|
+
return { kind: 'stream_error_ack', id: ackNode.attrs.id };
|
|
56
34
|
}
|
|
57
35
|
if ((0, helpers_1.hasNodeChild)(node, constants_1.WA_STREAM_SIGNALING.XML_NOT_WELL_FORMED_TAG)) {
|
|
58
|
-
return {
|
|
59
|
-
kind: 'stream_error_xml_not_well_formed'
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
return {
|
|
63
|
-
kind: 'stream_error_other'
|
|
64
|
-
};
|
|
65
|
-
}
|
|
66
|
-
function parseOptionalInt(value) {
|
|
67
|
-
if (!value) {
|
|
68
|
-
return undefined;
|
|
36
|
+
return { kind: 'stream_error_xml_not_well_formed' };
|
|
69
37
|
}
|
|
70
|
-
return
|
|
38
|
+
return { kind: 'stream_error_other' };
|
|
71
39
|
}
|
|
72
40
|
function parseCompanionEncStatic(value, onError) {
|
|
73
41
|
if (!value) {
|
|
74
42
|
return undefined;
|
|
75
43
|
}
|
|
76
44
|
try {
|
|
77
|
-
return (0,
|
|
45
|
+
return (0, bytes_1.base64ToBytesChecked)(value, 'success.companion_enc_static');
|
|
78
46
|
}
|
|
79
47
|
catch (error) {
|
|
80
48
|
if (error instanceof Error) {
|
|
@@ -88,10 +56,10 @@ function parseSuccessPersistAttributes(node, onCompanionParseError) {
|
|
|
88
56
|
meLid: node.attrs.lid,
|
|
89
57
|
meDisplayName: node.attrs.display_name,
|
|
90
58
|
companionEncStatic: parseCompanionEncStatic(node.attrs.companion_enc_static, onCompanionParseError),
|
|
91
|
-
lastSuccessTs: parseOptionalInt(node.attrs.t),
|
|
92
|
-
propsVersion: parseOptionalInt(node.attrs.props),
|
|
93
|
-
abPropsVersion: parseOptionalInt(node.attrs.abprops),
|
|
59
|
+
lastSuccessTs: (0, primitives_1.parseOptionalInt)(node.attrs.t),
|
|
60
|
+
propsVersion: (0, primitives_1.parseOptionalInt)(node.attrs.props),
|
|
61
|
+
abPropsVersion: (0, primitives_1.parseOptionalInt)(node.attrs.abprops),
|
|
94
62
|
connectionLocation: node.attrs.location,
|
|
95
|
-
accountCreationTs: parseOptionalInt(node.attrs.creation)
|
|
63
|
+
accountCreationTs: (0, primitives_1.parseOptionalInt)(node.attrs.creation)
|
|
96
64
|
};
|
|
97
65
|
}
|
|
@@ -7,6 +7,7 @@ interface WaAppStateSyncClientOptions {
|
|
|
7
7
|
readonly logger: Logger;
|
|
8
8
|
readonly query: (node: BinaryNode, timeoutMs: number) => Promise<BinaryNode>;
|
|
9
9
|
readonly store: WaAppStateStore;
|
|
10
|
+
readonly getCurrentMeJid?: () => string | null | undefined;
|
|
10
11
|
readonly hostDomain?: string;
|
|
11
12
|
readonly defaultTimeoutMs?: number;
|
|
12
13
|
readonly onMissingKeys?: (event: WaAppStateMissingKeysEvent) => Promise<void>;
|
|
@@ -20,6 +21,7 @@ export declare class WaAppStateSyncClient {
|
|
|
20
21
|
private readonly logger;
|
|
21
22
|
private readonly query;
|
|
22
23
|
private readonly store;
|
|
24
|
+
private readonly getCurrentMeJid?;
|
|
23
25
|
private readonly hostDomain;
|
|
24
26
|
private readonly defaultTimeoutMs;
|
|
25
27
|
private readonly onMissingKeys?;
|
|
@@ -33,13 +35,11 @@ export declare class WaAppStateSyncClient {
|
|
|
33
35
|
sync(options?: WaAppStateSyncOptions): Promise<WaAppStateSyncResult>;
|
|
34
36
|
private syncOnce;
|
|
35
37
|
private syncCollectionsRound;
|
|
36
|
-
private prepareSyncRoundRequest;
|
|
37
38
|
private buildCollectionSyncRequest;
|
|
38
39
|
private buildSyncIqNode;
|
|
39
40
|
private fetchSyncPayloadByCollection;
|
|
40
41
|
private processCollectionRound;
|
|
41
42
|
private createCollectionOutcome;
|
|
42
|
-
private collectDistinctMissingKeyIds;
|
|
43
43
|
private notifyMissingKeys;
|
|
44
44
|
private resolveReadyPatches;
|
|
45
45
|
private validateSnapshot;
|
|
@@ -51,9 +51,12 @@ export declare class WaAppStateSyncClient {
|
|
|
51
51
|
private decryptPatchMutations;
|
|
52
52
|
private assertPatchMacsMatch;
|
|
53
53
|
private buildOutgoingPatch;
|
|
54
|
+
private resolveDeviceIndex;
|
|
55
|
+
private buildPatchClientDebugData;
|
|
54
56
|
private computeNextCollectionState;
|
|
55
57
|
private normalizeProtoLong;
|
|
56
58
|
private groupPendingMutations;
|
|
59
|
+
private preloadKeyData;
|
|
57
60
|
private getKeyData;
|
|
58
61
|
private getCollectionState;
|
|
59
62
|
private setCollectionState;
|
|
@@ -11,4 +11,5 @@ export declare const APP_STATE_IV_LENGTH = 16;
|
|
|
11
11
|
export declare const APP_STATE_LT_HASH_SIZE = 128;
|
|
12
12
|
export declare const APP_STATE_POINT_SIZE = 2;
|
|
13
13
|
export declare const APP_STATE_EMPTY_LT_HASH: Uint8Array<ArrayBuffer>;
|
|
14
|
+
export declare const APP_STATE_DEFAULT_COLLECTION_VERSION = 0;
|
|
14
15
|
export declare const APP_STATE_DEFAULT_COLLECTIONS: readonly AppStateCollectionName[];
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { WaAppStateStoreData, WaAppStateSyncKey } from './types';
|
|
2
|
+
type StoreRow = Readonly<Record<string, unknown>>;
|
|
3
|
+
export declare function encodeAppStateFingerprint(fingerprint: WaAppStateSyncKey['fingerprint']): Uint8Array | null;
|
|
4
|
+
export declare function decodeAppStateFingerprint(raw: unknown): WaAppStateSyncKey['fingerprint'] | undefined;
|
|
5
|
+
export declare function decodeAppStateSyncKeys(rows: readonly StoreRow[]): readonly WaAppStateSyncKey[];
|
|
6
|
+
export declare function decodeAppStateCollections(versionRows: readonly StoreRow[], valueRows: readonly StoreRow[]): WaAppStateStoreData['collections'];
|
|
7
|
+
export {};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export * from './constants';
|
|
2
|
-
export type { WaAppStateSyncOptions } from './types';
|
|
2
|
+
export type { AppStateCollectionName, WaAppStateStoreData, WaAppStateSyncKey, WaAppStateSyncOptions } from './types';
|
|
3
|
+
export { encodeAppStateFingerprint, decodeAppStateFingerprint, decodeAppStateCollections, decodeAppStateSyncKeys } from './encoding';
|
|
3
4
|
export * from './utils';
|
|
4
5
|
export { WaAppStateCrypto } from './WaAppStateCrypto';
|
|
5
|
-
export {
|
|
6
|
-
export { parseCollectionState, parseSyncResponse, type CollectionResponsePayload } from './WaAppStateSyncResponseParser';
|
|
6
|
+
export { parseSyncResponse } from './WaAppStateSyncResponseParser';
|
|
7
7
|
export { WaAppStateSyncClient } from './WaAppStateSyncClient';
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
import type { AppStateCollectionName, WaAppStateSyncKey } from './types';
|
|
2
2
|
import type { WaMediaTransferClient } from '../media/WaMediaTransferClient';
|
|
3
3
|
import type { Proto } from '..';
|
|
4
|
-
export declare function keyIdToHex(keyId: Uint8Array): string;
|
|
5
4
|
export declare function parseCollectionName(value: string | undefined): AppStateCollectionName | null;
|
|
6
|
-
export declare function keyDeviceId(keyId: Uint8Array): number | null;
|
|
7
5
|
export declare function keyEpoch(keyId: Uint8Array): number;
|
|
8
6
|
export declare function pickActiveSyncKey(keys: Iterable<WaAppStateSyncKey>): WaAppStateSyncKey | null;
|
|
9
|
-
export declare function toNetworkOrder64(value: number): Uint8Array;
|
|
10
7
|
export declare function downloadExternalBlobReference(mediaTransfer: WaMediaTransferClient, reference: Proto.IExternalBlobReference): Promise<Uint8Array>;
|
|
@@ -3,14 +3,7 @@ import type { Logger } from '../infra/log/types';
|
|
|
3
3
|
import type { WaAuthStore } from '../store/contracts/auth.store';
|
|
4
4
|
import type { WaSignalStore } from '../store/contracts/signal.store';
|
|
5
5
|
import type { BinaryNode } from '../transport/types';
|
|
6
|
-
|
|
7
|
-
readonly onQr?: (qr: string, ttlMs: number) => void;
|
|
8
|
-
readonly onPairingCode?: (code: string) => void;
|
|
9
|
-
readonly onPairingRefresh?: (forceManual: boolean) => void;
|
|
10
|
-
readonly onPaired?: (credentials: WaAuthCredentials) => void;
|
|
11
|
-
readonly onError?: (error: Error) => void;
|
|
12
|
-
}
|
|
13
|
-
interface WaAuthClientDependencies {
|
|
6
|
+
type WaAuthClientDeps = Readonly<{
|
|
14
7
|
readonly logger: Logger;
|
|
15
8
|
readonly authStore: WaAuthStore;
|
|
16
9
|
readonly signalStore: WaSignalStore;
|
|
@@ -18,8 +11,14 @@ interface WaAuthClientDependencies {
|
|
|
18
11
|
readonly sendNode: (node: BinaryNode) => Promise<void>;
|
|
19
12
|
readonly query: (node: BinaryNode, timeoutMs?: number) => Promise<BinaryNode>;
|
|
20
13
|
};
|
|
21
|
-
readonly callbacks?:
|
|
22
|
-
|
|
14
|
+
readonly callbacks?: {
|
|
15
|
+
readonly onQr?: (qr: string, ttlMs: number) => void;
|
|
16
|
+
readonly onPairingCode?: (code: string) => void;
|
|
17
|
+
readonly onPairingRefresh?: (forceManual: boolean) => void;
|
|
18
|
+
readonly onPaired?: (credentials: WaAuthCredentials) => void;
|
|
19
|
+
readonly onError?: (error: Error) => void;
|
|
20
|
+
};
|
|
21
|
+
}>;
|
|
23
22
|
export declare class WaAuthClient {
|
|
24
23
|
private readonly options;
|
|
25
24
|
private readonly logger;
|
|
@@ -29,7 +28,7 @@ export declare class WaAuthClient {
|
|
|
29
28
|
private readonly qrFlow;
|
|
30
29
|
private readonly pairingFlow;
|
|
31
30
|
private credentials;
|
|
32
|
-
constructor(options: WaAuthClientOptions, deps:
|
|
31
|
+
constructor(options: WaAuthClientOptions, deps: WaAuthClientDeps);
|
|
33
32
|
getState(connected?: boolean): {
|
|
34
33
|
connected: boolean;
|
|
35
34
|
registered: boolean;
|
|
@@ -45,7 +44,6 @@ export declare class WaAuthClient {
|
|
|
45
44
|
persistServerHasPreKeys(serverHasPreKeys: boolean): Promise<void>;
|
|
46
45
|
persistRoutingInfo(routingInfo: Uint8Array): Promise<void>;
|
|
47
46
|
clearRoutingInfo(): Promise<WaAuthCredentials>;
|
|
48
|
-
persistMeLid(meLid: string): Promise<void>;
|
|
49
47
|
persistSuccessAttributes(attributes: WaSuccessPersistAttributes): Promise<void>;
|
|
50
48
|
requestPairingCode(phoneNumber: string, shouldShowPushNotification?: boolean): Promise<string>;
|
|
51
49
|
fetchPairingCountryCodeIso(): Promise<string>;
|
|
@@ -10,5 +10,5 @@ interface WaAuthCredentialsFlowArgs {
|
|
|
10
10
|
}
|
|
11
11
|
export declare function loadOrCreateCredentials(args: WaAuthCredentialsFlowArgs): Promise<WaAuthCredentials>;
|
|
12
12
|
export declare function persistCredentials(args: WaAuthCredentialsFlowArgs, credentials: WaAuthCredentials): Promise<void>;
|
|
13
|
-
export declare function buildCommsConfig(logger: Logger, credentials: WaAuthCredentials, socketOptions: WaAuthSocketOptions, clientOptions: Pick<WaAuthClientOptions, 'deviceBrowser' | 'deviceOsDisplayName' | 'requireFullSync'>): WaCommsConfig;
|
|
13
|
+
export declare function buildCommsConfig(logger: Logger, credentials: WaAuthCredentials, socketOptions: WaAuthSocketOptions, clientOptions: Pick<WaAuthClientOptions, 'deviceBrowser' | 'deviceOsDisplayName' | 'requireFullSync' | 'version'>): WaCommsConfig;
|
|
14
14
|
export {};
|
|
@@ -1,6 +1,2 @@
|
|
|
1
1
|
export * from './types';
|
|
2
|
-
export { getLoginIdentity } from '../protocol/jid';
|
|
3
2
|
export { WaAuthClient } from './WaAuthClient';
|
|
4
|
-
export { completeCompanionFinish, createCompanionHello } from './pairing/WaPairingCodeCrypto';
|
|
5
|
-
export { WaAuthSqliteStore } from '../store/providers/sqlite/auth.store';
|
|
6
|
-
export type { WaAuthStore } from '../store/contracts/auth.store';
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { SignalKeyPair } from '../crypto/curves/types';
|
|
2
2
|
import type { Proto } from '..';
|
|
3
3
|
import type { RegistrationInfo, SignedPreKeyRecord } from '../signal/types';
|
|
4
|
+
import type { WaCommsConfig, WaProxyTransport } from '../transport/types';
|
|
4
5
|
export interface WaAuthCredentials {
|
|
5
6
|
readonly noiseKeyPair: SignalKeyPair;
|
|
6
7
|
readonly registrationInfo: RegistrationInfo;
|
|
@@ -21,20 +22,17 @@ export interface WaAuthCredentials {
|
|
|
21
22
|
readonly connectionLocation?: string;
|
|
22
23
|
readonly accountCreationTs?: number;
|
|
23
24
|
}
|
|
24
|
-
export
|
|
25
|
-
readonly
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
readonly reconnectIntervalMs?: number;
|
|
30
|
-
readonly timeoutIntervalMs?: number;
|
|
31
|
-
readonly maxReconnectAttempts?: number;
|
|
32
|
-
}
|
|
25
|
+
export type WaAuthSocketOptions = Pick<WaCommsConfig, 'url' | 'urls' | 'protocols' | 'connectTimeoutMs' | 'reconnectIntervalMs' | 'timeoutIntervalMs' | 'maxReconnectAttempts'> & {
|
|
26
|
+
readonly proxy?: {
|
|
27
|
+
readonly ws?: WaProxyTransport;
|
|
28
|
+
};
|
|
29
|
+
};
|
|
33
30
|
export interface WaAuthClientOptions {
|
|
34
31
|
readonly deviceBrowser?: string;
|
|
35
32
|
readonly devicePlatform?: string;
|
|
36
33
|
readonly deviceOsDisplayName?: string;
|
|
37
34
|
readonly requireFullSync?: boolean;
|
|
35
|
+
readonly version?: string;
|
|
38
36
|
}
|
|
39
37
|
export interface WaSuccessPersistAttributes {
|
|
40
38
|
readonly meLid?: string;
|