zapo-js 0.1.2 → 0.3.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 +16 -4
- package/dist/appstate/WaAppStateCrypto.js +50 -42
- package/dist/appstate/WaAppStateSyncClient.js +215 -133
- package/dist/appstate/{store/sqlite.js → encoding.js} +13 -8
- package/dist/appstate/index.js +9 -7
- package/dist/appstate/utils.js +0 -5
- package/dist/auth/WaAuthClient.js +55 -57
- package/dist/auth/credentials-flow.js +195 -0
- package/dist/auth/index.js +1 -6
- package/dist/auth/pairing/WaPairingFlow.js +39 -32
- package/dist/auth/pairing/{WaPairingCodeCrypto.js → pairing-code-crypto.js} +35 -17
- package/dist/client/WaClient.js +338 -174
- package/dist/client/WaClientFactory.js +399 -66
- package/dist/client/connection/WaConnectionManager.js +23 -11
- package/dist/client/coordinators/WaAbPropsCoordinator.js +141 -0
- package/dist/client/coordinators/WaBusinessCoordinator.js +232 -0
- package/dist/client/coordinators/WaEmailCoordinator.js +63 -0
- package/dist/client/coordinators/WaGroupCoordinator.js +11 -7
- package/dist/client/coordinators/WaIncomingNodeCoordinator.js +34 -8
- package/dist/client/coordinators/WaMessageDispatchCoordinator.js +341 -118
- package/dist/client/coordinators/WaOfflineResumeCoordinator.js +114 -0
- package/dist/client/coordinators/WaPassiveTasksCoordinator.js +97 -36
- package/dist/client/coordinators/WaPrivacyCoordinator.js +134 -0
- package/dist/client/coordinators/WaProfileCoordinator.js +214 -0
- package/dist/client/coordinators/WaRetryCoordinator.js +184 -30
- package/dist/client/coordinators/WaStreamControlCoordinator.js +18 -11
- package/dist/client/coordinators/WaTrustedContactTokenCoordinator.js +184 -0
- package/dist/client/dirty.js +41 -21
- package/dist/client/events/abprops.js +43 -0
- 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 +38 -0
- package/dist/client/events/registration.js +42 -0
- package/dist/client/history-sync.js +50 -9
- package/dist/client/incoming.js +74 -7
- package/dist/client/mailbox.js +40 -23
- package/dist/client/media.js +243 -0
- package/dist/client/messages.js +245 -92
- 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 +5 -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 +24 -8
- package/dist/crypto/core/xeddsa.js +57 -0
- package/dist/crypto/curves/X25519.js +43 -6
- package/dist/crypto/curves/constants.js +2 -1
- 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 +40 -32
- package/dist/esm/appstate/WaAppStateSyncClient.js +206 -124
- package/dist/esm/appstate/{store/sqlite.js → encoding.js} +13 -8
- package/dist/esm/appstate/index.js +2 -2
- package/dist/esm/appstate/{WaAppStateSyncResponseParser.js → response-parser.js} +1 -1
- package/dist/esm/appstate/utils.js +2 -5
- package/dist/esm/auth/WaAuthClient.js +52 -54
- package/dist/esm/auth/credentials-flow.js +190 -0
- package/dist/esm/auth/index.js +0 -2
- package/dist/esm/auth/pairing/WaPairingFlow.js +39 -32
- package/dist/esm/auth/pairing/{WaPairingCodeCrypto.js → pairing-code-crypto.js} +26 -10
- package/dist/esm/client/WaClient.js +339 -175
- package/dist/esm/client/WaClientFactory.js +401 -68
- package/dist/esm/client/connection/WaConnectionManager.js +23 -11
- package/dist/esm/client/coordinators/WaAbPropsCoordinator.js +137 -0
- package/dist/esm/client/coordinators/WaBusinessCoordinator.js +229 -0
- package/dist/esm/client/coordinators/WaEmailCoordinator.js +60 -0
- package/dist/esm/client/coordinators/WaGroupCoordinator.js +11 -7
- package/dist/esm/client/coordinators/WaIncomingNodeCoordinator.js +36 -10
- package/dist/esm/client/coordinators/WaMessageDispatchCoordinator.js +337 -114
- package/dist/esm/client/coordinators/WaOfflineResumeCoordinator.js +110 -0
- package/dist/esm/client/coordinators/WaPassiveTasksCoordinator.js +97 -36
- package/dist/esm/client/coordinators/WaPrivacyCoordinator.js +131 -0
- package/dist/esm/client/coordinators/WaProfileCoordinator.js +211 -0
- package/dist/esm/client/coordinators/WaRetryCoordinator.js +186 -32
- package/dist/esm/client/coordinators/WaStreamControlCoordinator.js +19 -12
- package/dist/esm/client/coordinators/WaTrustedContactTokenCoordinator.js +180 -0
- package/dist/esm/client/dirty.js +41 -21
- package/dist/esm/client/events/abprops.js +40 -0
- 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 +35 -0
- package/dist/esm/client/events/registration.js +39 -0
- package/dist/esm/client/history-sync.js +50 -9
- package/dist/esm/client/incoming.js +74 -8
- package/dist/esm/client/mailbox.js +40 -23
- package/dist/esm/client/media.js +234 -0
- package/dist/esm/client/messages.js +244 -91
- 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 +3 -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 +23 -7
- package/dist/esm/crypto/core/xeddsa.js +53 -0
- package/dist/esm/crypto/curves/X25519.js +45 -8
- package/dist/esm/crypto/curves/constants.js +1 -0
- 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 +80 -0
- package/dist/esm/media/WaMediaCrypto.js +332 -55
- package/dist/esm/media/WaMediaTransferClient.js +69 -220
- package/dist/esm/media/constants.js +4 -1
- package/dist/esm/media/processor.js +1 -0
- package/dist/esm/message/WaMessageClient.js +26 -19
- package/dist/esm/message/addon-crypto.js +130 -3
- package/dist/esm/message/content.js +206 -14
- package/dist/esm/message/icdc.js +76 -0
- package/dist/esm/message/incoming.js +38 -24
- package/dist/esm/message/phash.js +35 -13
- package/dist/esm/message/reporting-token.js +17 -30
- package/dist/esm/message/use-case-secret.js +1 -1
- package/dist/esm/protocol/abprops.js +159 -0
- package/dist/esm/protocol/appstate.js +9 -40
- package/dist/esm/protocol/browser.js +24 -18
- package/dist/esm/protocol/constants.js +8 -4
- package/dist/esm/protocol/defaults.js +6 -0
- package/dist/esm/protocol/email.js +30 -0
- package/dist/esm/protocol/index.js +1 -2
- package/dist/esm/protocol/jid.js +142 -39
- package/dist/esm/protocol/message.js +61 -1
- package/dist/esm/protocol/nodes.js +8 -2
- package/dist/esm/protocol/notification.js +9 -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/reason.js +1 -1
- package/dist/esm/retry/replay.js +11 -7
- package/dist/esm/retry/tracker.js +50 -12
- package/dist/esm/signal/api/SignalDeviceSyncApi.js +52 -32
- package/dist/esm/signal/api/SignalDigestSyncApi.js +21 -15
- package/dist/esm/signal/api/SignalIdentitySyncApi.js +30 -15
- package/dist/esm/signal/api/SignalMissingPreKeysSyncApi.js +19 -8
- package/dist/esm/signal/api/SignalRotateKeyApi.js +4 -2
- package/dist/esm/signal/api/SignalSessionSyncApi.js +17 -8
- 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 +5 -45
- package/dist/esm/signal/crypto/constants.js +0 -4
- package/dist/esm/signal/{store/sqlite.js → encoding.js} +40 -29
- package/dist/esm/signal/group/SenderKeyChain.js +3 -3
- package/dist/esm/signal/group/SenderKeyCodec.js +8 -8
- package/dist/esm/signal/group/SenderKeyManager.js +131 -109
- package/dist/esm/signal/index.js +1 -0
- package/dist/esm/signal/registration/keygen.js +8 -5
- package/dist/esm/signal/registration/utils.js +3 -2
- package/dist/esm/signal/session/SignalProtocol.js +158 -81
- package/dist/esm/signal/session/SignalRatchet.js +21 -10
- package/dist/esm/signal/session/SignalSerializer.js +5 -6
- package/dist/esm/signal/session/SignalSession.js +11 -9
- package/dist/esm/signal/session/resolver.js +140 -105
- package/dist/esm/store/contracts/identity.store.js +1 -0
- package/dist/esm/store/contracts/message-secret.store.js +1 -0
- package/dist/esm/store/contracts/pre-key.store.js +1 -0
- package/dist/esm/store/contracts/privacy-token.store.js +1 -0
- package/dist/esm/store/contracts/session.store.js +1 -0
- package/dist/esm/store/createStore.js +143 -193
- package/dist/esm/store/index.js +5 -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/identity.lock.js +16 -0
- package/dist/esm/store/locks/message-secret.lock.js +17 -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/pre-key.lock.js +27 -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/session.lock.js +19 -0
- package/dist/esm/store/locks/signal.lock.js +39 -0
- package/dist/esm/store/locks/thread.lock.js +21 -0
- package/dist/esm/store/noop.store.js +21 -1
- package/dist/esm/store/providers/memory/appstate.store.js +22 -24
- package/dist/esm/store/providers/memory/device-list.store.js +13 -5
- package/dist/esm/store/providers/memory/identity.store.js +31 -0
- package/dist/esm/store/providers/memory/message-secret.store.js +81 -0
- package/dist/esm/store/providers/memory/participants.store.js +3 -0
- package/dist/esm/store/providers/memory/pre-key.store.js +97 -0
- package/dist/esm/store/providers/memory/privacy-token.store.js +43 -0
- package/dist/esm/store/providers/memory/retry.store.js +99 -10
- package/dist/esm/store/providers/memory/sender-key.store.js +6 -1
- package/dist/esm/store/providers/memory/session.store.js +45 -0
- package/dist/esm/store/providers/memory/signal.store.js +1 -147
- package/dist/esm/transport/WaComms.js +7 -4
- package/dist/esm/transport/WaWebSocket.js +9 -7
- 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/index.js +6 -0
- package/dist/esm/transport/keepalive/WaKeepAlive.js +17 -8
- package/dist/esm/transport/node/WaMobileTcpSocket.js +114 -0
- package/dist/esm/transport/node/WaNodeOrchestrator.js +37 -22
- package/dist/esm/transport/node/builders/abprops.js +20 -0
- package/dist/esm/transport/node/builders/business.js +129 -0
- package/dist/esm/transport/node/builders/device.js +11 -0
- package/dist/esm/transport/node/builders/email.js +65 -0
- package/dist/esm/transport/node/builders/global.js +370 -0
- package/dist/esm/transport/node/builders/message.js +63 -239
- package/dist/esm/transport/node/builders/offline.js +14 -0
- package/dist/esm/transport/node/builders/pairing.js +0 -24
- package/dist/esm/transport/node/builders/prekeys.js +37 -40
- package/dist/esm/transport/node/builders/presence.js +13 -0
- package/dist/esm/transport/node/builders/privacy-token.js +37 -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 +11 -23
- package/dist/esm/transport/node/builders/usync.js +6 -2
- package/dist/esm/transport/node/helpers.js +43 -1
- package/dist/esm/transport/node/mex/argo-decoder.js +152 -0
- package/dist/esm/transport/node/mex/client.js +83 -0
- package/dist/esm/transport/node/mex/persist-ids.js +10 -0
- 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 +24 -19
- package/dist/esm/transport/noise/WaFrameCodec.js +2 -2
- package/dist/esm/transport/noise/WaMobileClientPayload.js +53 -0
- package/dist/esm/transport/noise/WaNoiseCert.js +9 -27
- package/dist/esm/transport/noise/WaNoiseSession.js +76 -34
- 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 +84 -0
- package/dist/media/WaMediaCrypto.js +328 -51
- package/dist/media/WaMediaTransferClient.js +72 -253
- package/dist/media/constants.js +5 -2
- package/dist/media/processor.js +2 -0
- package/dist/message/WaMessageClient.js +26 -19
- package/dist/message/addon-crypto.js +131 -0
- package/dist/message/content.js +211 -14
- package/dist/message/icdc.js +81 -0
- package/dist/message/incoming.js +38 -24
- package/dist/message/phash.js +35 -13
- package/dist/message/reporting-token.js +16 -30
- package/dist/message/use-case-secret.js +1 -1
- package/dist/protocol/abprops.js +163 -0
- package/dist/protocol/appstate.js +10 -41
- package/dist/protocol/browser.js +25 -18
- package/dist/protocol/constants.js +33 -2
- package/dist/protocol/defaults.js +6 -0
- package/dist/protocol/email.js +33 -0
- package/dist/protocol/index.js +8 -5
- package/dist/protocol/jid.js +149 -39
- package/dist/protocol/message.js +62 -2
- package/dist/protocol/nodes.js +8 -2
- package/dist/protocol/notification.js +10 -2
- 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/reason.js +1 -1
- package/dist/retry/replay.js +10 -6
- package/dist/retry/tracker.js +50 -12
- package/dist/signal/api/SignalDeviceSyncApi.js +51 -31
- package/dist/signal/api/SignalDigestSyncApi.js +21 -15
- package/dist/signal/api/SignalIdentitySyncApi.js +29 -14
- 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 +2 -44
- package/dist/signal/crypto/constants.js +1 -5
- package/dist/signal/{store/sqlite.js → encoding.js} +41 -25
- package/dist/signal/group/SenderKeyChain.js +2 -2
- package/dist/signal/group/SenderKeyCodec.js +8 -8
- package/dist/signal/group/SenderKeyManager.js +130 -108
- package/dist/signal/index.js +13 -1
- package/dist/signal/registration/keygen.js +7 -4
- package/dist/signal/registration/utils.js +3 -2
- package/dist/signal/session/SignalProtocol.js +158 -81
- package/dist/signal/session/SignalRatchet.js +19 -8
- package/dist/signal/session/SignalSerializer.js +5 -6
- package/dist/signal/session/SignalSession.js +11 -9
- package/dist/signal/session/resolver.js +138 -103
- package/dist/store/contracts/identity.store.js +2 -0
- package/dist/store/contracts/message-secret.store.js +2 -0
- package/dist/store/contracts/pre-key.store.js +2 -0
- package/dist/store/contracts/privacy-token.store.js +2 -0
- package/dist/store/contracts/session.store.js +2 -0
- package/dist/store/createStore.js +142 -192
- package/dist/store/index.js +23 -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/identity.lock.js +19 -0
- package/dist/store/locks/message-secret.lock.js +20 -0
- package/dist/store/locks/message.lock.js +24 -0
- package/dist/store/locks/participants.lock.js +23 -0
- package/dist/store/locks/pre-key.lock.js +30 -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/session.lock.js +22 -0
- package/dist/store/locks/signal.lock.js +42 -0
- package/dist/store/locks/thread.lock.js +24 -0
- package/dist/store/noop.store.js +22 -2
- package/dist/store/providers/memory/appstate.store.js +22 -24
- package/dist/store/providers/memory/device-list.store.js +13 -5
- package/dist/store/providers/memory/identity.store.js +35 -0
- package/dist/store/providers/memory/message-secret.store.js +85 -0
- package/dist/store/providers/memory/participants.store.js +3 -0
- package/dist/store/providers/memory/pre-key.store.js +101 -0
- package/dist/store/providers/memory/privacy-token.store.js +47 -0
- package/dist/store/providers/memory/retry.store.js +98 -9
- package/dist/store/providers/memory/sender-key.store.js +6 -1
- package/dist/store/providers/memory/session.store.js +49 -0
- package/dist/store/providers/memory/signal.store.js +1 -147
- package/dist/transport/WaComms.js +7 -4
- package/dist/transport/WaWebSocket.js +9 -7
- 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/index.js +17 -1
- package/dist/transport/keepalive/WaKeepAlive.js +17 -8
- package/dist/transport/node/WaMobileTcpSocket.js +118 -0
- package/dist/transport/node/WaNodeOrchestrator.js +36 -21
- package/dist/transport/node/builders/abprops.js +23 -0
- package/dist/transport/node/builders/business.js +137 -0
- package/dist/transport/node/builders/device.js +14 -0
- package/dist/transport/node/builders/email.js +72 -0
- package/dist/transport/node/builders/global.js +375 -0
- package/dist/transport/node/builders/message.js +64 -245
- package/dist/transport/node/builders/offline.js +17 -0
- package/dist/transport/node/builders/pairing.js +0 -26
- package/dist/transport/node/builders/prekeys.js +36 -39
- package/dist/transport/node/builders/presence.js +16 -0
- package/dist/transport/node/builders/privacy-token.js +42 -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 +10 -22
- package/dist/transport/node/builders/usync.js +6 -2
- package/dist/transport/node/helpers.js +46 -1
- package/dist/transport/node/mex/argo-decoder.js +189 -0
- package/dist/transport/node/mex/client.js +86 -0
- package/dist/transport/node/mex/persist-ids.js +13 -0
- package/dist/transport/node/usync.js +2 -32
- package/dist/transport/node/xml.js +35 -14
- package/dist/transport/noise/WaClientPayload.js +26 -21
- package/dist/transport/noise/WaFrameCodec.js +1 -1
- package/dist/transport/noise/WaMobileClientPayload.js +56 -0
- package/dist/transport/noise/WaNoiseCert.js +8 -26
- package/dist/transport/noise/WaNoiseSession.js +75 -33
- package/dist/transport/noise/WaNoiseSocket.js +8 -4
- package/dist/transport/stream/parse.js +7 -3
- package/dist/types/appstate/WaAppStateCrypto.d.ts +11 -8
- package/dist/types/appstate/WaAppStateSyncClient.d.ts +6 -2
- package/dist/types/appstate/encoding.d.ts +7 -0
- package/dist/types/appstate/index.d.ts +3 -3
- package/dist/types/appstate/{WaAppStateSyncResponseParser.d.ts → response-parser.d.ts} +1 -1
- package/dist/types/appstate/types.d.ts +1 -1
- package/dist/types/appstate/utils.d.ts +0 -2
- package/dist/types/auth/WaAuthClient.d.ts +9 -3
- package/dist/types/auth/credentials-flow.d.ts +20 -0
- package/dist/types/auth/index.d.ts +0 -2
- package/dist/types/auth/pairing/WaPairingFlow.d.ts +3 -2
- package/dist/types/auth/pairing/{WaPairingCodeCrypto.d.ts → pairing-code-crypto.d.ts} +6 -1
- package/dist/types/auth/types.d.ts +41 -0
- package/dist/types/client/WaClient.d.ts +44 -18
- package/dist/types/client/WaClientFactory.d.ts +22 -8
- package/dist/types/client/connection/WaConnectionManager.d.ts +2 -0
- package/dist/types/client/coordinators/WaAbPropsCoordinator.d.ts +26 -0
- package/dist/types/client/coordinators/WaBusinessCoordinator.d.ts +57 -0
- package/dist/types/client/coordinators/WaEmailCoordinator.d.ts +24 -0
- package/dist/types/client/coordinators/WaIncomingNodeCoordinator.d.ts +9 -2
- package/dist/types/client/coordinators/WaMessageDispatchCoordinator.d.ts +29 -2
- package/dist/types/client/coordinators/WaOfflineResumeCoordinator.d.ts +31 -0
- package/dist/types/client/coordinators/WaPassiveTasksCoordinator.d.ts +16 -1
- package/dist/types/client/coordinators/WaPrivacyCoordinator.d.ts +26 -0
- package/dist/types/client/coordinators/WaProfileCoordinator.d.ts +38 -0
- package/dist/types/client/coordinators/WaRetryCoordinator.d.ts +12 -0
- package/dist/types/client/coordinators/WaStreamControlCoordinator.d.ts +3 -2
- package/dist/types/client/coordinators/WaTrustedContactTokenCoordinator.d.ts +55 -0
- package/dist/types/client/dirty.d.ts +3 -1
- package/dist/types/client/events/abprops.d.ts +14 -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/events/registration.d.ts +17 -0
- package/dist/types/client/history-sync.d.ts +9 -6
- package/dist/types/client/incoming.d.ts +9 -2
- package/dist/types/client/index.d.ts +1 -1
- package/dist/types/client/mailbox.d.ts +5 -5
- package/dist/types/client/media.d.ts +31 -0
- package/dist/types/client/messages.d.ts +3 -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 +151 -4
- package/dist/types/crypto/core/index.d.ts +3 -2
- package/dist/types/crypto/core/nonce.d.ts +2 -0
- package/dist/types/crypto/core/primitives.d.ts +1 -2
- package/dist/types/crypto/core/random.d.ts +2 -1
- package/dist/types/crypto/core/xeddsa.d.ts +2 -0
- package/dist/types/crypto/curves/constants.d.ts +1 -0
- package/dist/types/crypto/index.d.ts +2 -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 +6 -3
- package/dist/types/infra/log/ConsoleLogger.d.ts +1 -1
- package/dist/types/infra/log/PinoLogger.d.ts +1 -1
- 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 +11 -0
- package/dist/types/media/WaMediaCrypto.d.ts +16 -6
- package/dist/types/media/WaMediaTransferClient.d.ts +6 -23
- package/dist/types/media/constants.d.ts +3 -1
- package/dist/types/media/index.d.ts +2 -1
- package/dist/types/media/processor.d.ts +28 -0
- package/dist/types/media/types.d.ts +19 -5
- package/dist/types/message/addon-crypto.d.ts +34 -3
- package/dist/types/message/content.d.ts +11 -1
- 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 +42 -11
- package/dist/types/protocol/abprops.d.ts +142 -0
- package/dist/types/protocol/appstate.d.ts +0 -11
- package/dist/types/protocol/browser.d.ts +1 -0
- package/dist/types/protocol/constants.d.ts +12 -4
- package/dist/types/protocol/defaults.d.ts +6 -0
- package/dist/types/protocol/email.d.ts +32 -0
- package/dist/types/protocol/index.d.ts +1 -2
- package/dist/types/protocol/jid.d.ts +20 -2
- package/dist/types/protocol/message.d.ts +60 -0
- package/dist/types/protocol/nodes.d.ts +6 -0
- package/dist/types/protocol/notification.d.ts +8 -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 +31 -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/reason.d.ts +1 -1
- 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 +9 -0
- package/dist/types/signal/api/SignalIdentitySyncApi.d.ts +5 -3
- 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/crypto/WaAdvSignature.d.ts +0 -2
- package/dist/types/signal/crypto/constants.d.ts +0 -1
- package/dist/types/signal/{store/sqlite.d.ts → encoding.d.ts} +9 -3
- package/dist/types/signal/group/SenderKeyChain.d.ts +1 -1
- package/dist/types/signal/group/SenderKeyManager.d.ts +17 -7
- package/dist/types/signal/index.d.ts +2 -0
- package/dist/types/signal/registration/utils.d.ts +2 -1
- package/dist/types/signal/session/SignalProtocol.d.ts +21 -6
- package/dist/types/signal/session/SignalSerializer.d.ts +2 -1
- package/dist/types/signal/session/resolver.d.ts +11 -4
- package/dist/types/signal/types.d.ts +16 -4
- package/dist/types/store/contracts/appstate.store.d.ts +1 -1
- package/dist/types/store/contracts/identity.store.d.ts +11 -0
- package/dist/types/store/contracts/message-secret.store.d.ts +16 -0
- package/dist/types/store/contracts/pre-key.store.d.ts +13 -0
- 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/session.store.d.ts +14 -0
- package/dist/types/store/contracts/signal.store.d.ts +1 -27
- package/dist/types/store/createStore.d.ts +1 -1
- package/dist/types/store/index.d.ts +12 -12
- 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/identity.lock.d.ts +3 -0
- package/dist/types/store/locks/message-secret.lock.d.ts +3 -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/pre-key.lock.d.ts +3 -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/session.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/noop.store.d.ts +4 -0
- package/dist/types/store/providers/memory/appstate.store.d.ts +1 -1
- package/dist/types/store/providers/memory/identity.store.d.ts +18 -0
- package/dist/types/store/providers/memory/message-secret.store.d.ts +21 -0
- package/dist/types/store/providers/memory/pre-key.store.d.ts +23 -0
- package/dist/types/store/providers/memory/privacy-token.store.d.ts +13 -0
- package/dist/types/store/providers/memory/retry.store.d.ts +15 -1
- package/dist/types/store/providers/memory/session.store.d.ts +21 -0
- package/dist/types/store/providers/memory/signal.store.d.ts +2 -43
- package/dist/types/store/providers/memory/thread.store.d.ts +1 -1
- package/dist/types/store/types.d.ts +69 -61
- package/dist/types/transport/WaWebSocket.d.ts +1 -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 +8 -1
- package/dist/types/transport/keepalive/WaKeepAlive.d.ts +4 -1
- package/dist/types/transport/node/WaMobileTcpSocket.d.ts +18 -0
- package/dist/types/transport/node/WaNodeOrchestrator.d.ts +9 -6
- package/dist/types/transport/node/builders/abprops.d.ts +5 -0
- package/dist/types/transport/node/builders/business.d.ts +29 -0
- package/dist/types/transport/node/builders/device.d.ts +2 -0
- package/dist/types/transport/node/builders/email.d.ts +11 -0
- package/dist/types/transport/node/builders/global.d.ts +102 -0
- package/dist/types/transport/node/builders/message.d.ts +8 -7
- package/dist/types/transport/node/builders/offline.d.ts +2 -0
- package/dist/types/transport/node/builders/pairing.d.ts +0 -2
- package/dist/types/transport/node/builders/prekeys.d.ts +4 -3
- package/dist/types/transport/node/builders/presence.d.ts +6 -0
- 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 +8 -0
- package/dist/types/transport/node/mex/argo-decoder.d.ts +11 -0
- package/dist/types/transport/node/mex/client.d.ts +18 -0
- package/dist/types/transport/node/mex/persist-ids.d.ts +14 -0
- package/dist/types/transport/noise/WaMobileClientPayload.d.ts +29 -0
- package/dist/types/transport/noise/WaNoiseCert.d.ts +7 -1
- package/dist/types/transport/noise/WaNoiseSession.d.ts +4 -2
- package/dist/types/transport/noise/WaNoiseSocket.d.ts +4 -2
- package/dist/types/transport/types.d.ts +8 -0
- 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 +34 -10
- package/proto/index.js +1 -1
- package/dist/auth/flow/WaAuthCredentialsFlow.js +0 -130
- package/dist/auth/pairing/constants.js +0 -5
- package/dist/client/connection/WaKeyShareCoordinator.js +0 -63
- package/dist/crypto/core/constants.js +0 -4
- package/dist/esm/auth/flow/WaAuthCredentialsFlow.js +0 -125
- package/dist/esm/auth/pairing/constants.js +0 -2
- package/dist/esm/client/connection/WaKeyShareCoordinator.js +0 -59
- 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/esm/transport/node/builders/index.js +0 -8
- 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/transport/node/builders/index.js +0 -42
- package/dist/types/appstate/store/sqlite.d.ts +0 -7
- package/dist/types/auth/flow/WaAuthCredentialsFlow.d.ts +0 -14
- package/dist/types/auth/pairing/constants.d.ts +0 -2
- package/dist/types/client/connection/WaKeyShareCoordinator.d.ts +0 -14
- 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
- package/dist/types/transport/node/builders/index.d.ts +0 -8
- /package/dist/appstate/{WaAppStateSyncResponseParser.js → response-parser.js} +0 -0
|
@@ -5,16 +5,25 @@ exports.buildWaClientDependencies = buildWaClientDependencies;
|
|
|
5
5
|
const WaAppStateSyncClient_1 = require("../appstate/WaAppStateSyncClient");
|
|
6
6
|
const WaAuthClient_1 = require("../auth/WaAuthClient");
|
|
7
7
|
const WaConnectionManager_1 = require("./connection/WaConnectionManager");
|
|
8
|
-
const WaKeyShareCoordinator_1 = require("./connection/WaKeyShareCoordinator");
|
|
9
8
|
const WaReceiptQueue_1 = require("./connection/WaReceiptQueue");
|
|
9
|
+
const WaAbPropsCoordinator_1 = require("./coordinators/WaAbPropsCoordinator");
|
|
10
10
|
const WaAppStateMutationCoordinator_1 = require("./coordinators/WaAppStateMutationCoordinator");
|
|
11
|
+
const WaBusinessCoordinator_1 = require("./coordinators/WaBusinessCoordinator");
|
|
12
|
+
const WaEmailCoordinator_1 = require("./coordinators/WaEmailCoordinator");
|
|
11
13
|
const WaGroupCoordinator_1 = require("./coordinators/WaGroupCoordinator");
|
|
12
14
|
const WaIncomingNodeCoordinator_1 = require("./coordinators/WaIncomingNodeCoordinator");
|
|
13
15
|
const WaMessageDispatchCoordinator_1 = require("./coordinators/WaMessageDispatchCoordinator");
|
|
16
|
+
const WaOfflineResumeCoordinator_1 = require("./coordinators/WaOfflineResumeCoordinator");
|
|
14
17
|
const WaPassiveTasksCoordinator_1 = require("./coordinators/WaPassiveTasksCoordinator");
|
|
18
|
+
const WaPrivacyCoordinator_1 = require("./coordinators/WaPrivacyCoordinator");
|
|
19
|
+
const WaProfileCoordinator_1 = require("./coordinators/WaProfileCoordinator");
|
|
15
20
|
const WaRetryCoordinator_1 = require("./coordinators/WaRetryCoordinator");
|
|
16
21
|
const WaStreamControlCoordinator_1 = require("./coordinators/WaStreamControlCoordinator");
|
|
22
|
+
const WaTrustedContactTokenCoordinator_1 = require("./coordinators/WaTrustedContactTokenCoordinator");
|
|
17
23
|
const dirty_1 = require("./dirty");
|
|
24
|
+
const devices_1 = require("./events/devices");
|
|
25
|
+
const identity_1 = require("./events/identity");
|
|
26
|
+
const privacy_token_1 = require("./events/privacy-token");
|
|
18
27
|
const messages_1 = require("./messages");
|
|
19
28
|
const fanout_1 = require("./messaging/fanout");
|
|
20
29
|
const key_protocol_1 = require("./messaging/key-protocol");
|
|
@@ -23,6 +32,7 @@ const WaMediaTransferClient_1 = require("../media/WaMediaTransferClient");
|
|
|
23
32
|
const incoming_1 = require("../message/incoming");
|
|
24
33
|
const WaMessageClient_1 = require("../message/WaMessageClient");
|
|
25
34
|
const constants_1 = require("../protocol/constants");
|
|
35
|
+
const jid_1 = require("../protocol/jid");
|
|
26
36
|
const tracker_1 = require("../retry/tracker");
|
|
27
37
|
const SignalDeviceSyncApi_1 = require("../signal/api/SignalDeviceSyncApi");
|
|
28
38
|
const SignalDigestSyncApi_1 = require("../signal/api/SignalDigestSyncApi");
|
|
@@ -34,6 +44,9 @@ const SenderKeyManager_1 = require("../signal/group/SenderKeyManager");
|
|
|
34
44
|
const resolver_1 = require("../signal/session/resolver");
|
|
35
45
|
const SignalProtocol_1 = require("../signal/session/SignalProtocol");
|
|
36
46
|
const WaKeepAlive_1 = require("../transport/keepalive/WaKeepAlive");
|
|
47
|
+
const global_1 = require("../transport/node/builders/global");
|
|
48
|
+
const presence_1 = require("../transport/node/builders/presence");
|
|
49
|
+
const helpers_1 = require("../transport/node/helpers");
|
|
37
50
|
const usync_1 = require("../transport/node/usync");
|
|
38
51
|
const WaNodeOrchestrator_1 = require("../transport/node/WaNodeOrchestrator");
|
|
39
52
|
const WaNodeTransport_1 = require("../transport/node/WaNodeTransport");
|
|
@@ -94,31 +107,6 @@ function resolveWaClientBase(options, logger) {
|
|
|
94
107
|
sessionStore
|
|
95
108
|
};
|
|
96
109
|
}
|
|
97
|
-
function createIncomingMessageAckOptions(input) {
|
|
98
|
-
const { logger, sendNode, emitEvent, handleIncomingMessageEvent, handleError, getCurrentMeJid, signalProtocol, senderKeyManager, retryCoordinator } = input;
|
|
99
|
-
return {
|
|
100
|
-
logger,
|
|
101
|
-
sendNode,
|
|
102
|
-
getMeJid: getCurrentMeJid,
|
|
103
|
-
signalProtocol,
|
|
104
|
-
senderKeyManager,
|
|
105
|
-
onDecryptFailure: (context, error) => retryCoordinator.onDecryptFailure(context, error),
|
|
106
|
-
emitIncomingMessage: (event) => {
|
|
107
|
-
void handleIncomingMessageEvent(event).catch((err) => handleError((0, primitives_1.toError)(err)));
|
|
108
|
-
},
|
|
109
|
-
emitUnhandledStanza: (event) => emitEvent('stanza_unhandled', event)
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
function createHandleClientDirtyBits(input) {
|
|
113
|
-
const { logger, queryWithContext, syncAppState, getCurrentCredentials, generateUsyncSid } = input;
|
|
114
|
-
return (dirtyBits) => (0, dirty_1.handleDirtyBits)({
|
|
115
|
-
logger,
|
|
116
|
-
queryWithContext,
|
|
117
|
-
getCurrentCredentials,
|
|
118
|
-
syncAppState,
|
|
119
|
-
generateUsyncSid
|
|
120
|
-
}, dirtyBits);
|
|
121
|
-
}
|
|
122
110
|
function createIncomingNodeRuntime(input) {
|
|
123
111
|
const { logger, emitEvent, authClient, connectionManager, nodeOrchestrator, streamControl, mediaMessageBuildOptions, retryCoordinator, messageDispatch, sendNode, syncAppState, disconnect, clearStoredCredentials, getCurrentMeJid, handleClientDirtyBits, incomingMessageAckOptions } = input;
|
|
124
112
|
return {
|
|
@@ -147,6 +135,8 @@ function createIncomingNodeRuntime(input) {
|
|
|
147
135
|
emitIncomingFailure: (event) => emitEvent('failure', event),
|
|
148
136
|
emitIncomingErrorStanza: (event) => emitEvent('stanza_error', event),
|
|
149
137
|
emitIncomingNotification: (event) => emitEvent('notification', event),
|
|
138
|
+
emitRegistrationCode: (event) => emitEvent('registration_code_received', event),
|
|
139
|
+
emitAccountTakeoverNotice: (event) => emitEvent('account_takeover_notice', event),
|
|
150
140
|
emitGroupEvent: (event) => {
|
|
151
141
|
emitEvent('group_event', event);
|
|
152
142
|
void messageDispatch.mutateParticipantsCacheFromGroupEvent(event).catch((error) => {
|
|
@@ -160,6 +150,9 @@ function createIncomingNodeRuntime(input) {
|
|
|
160
150
|
},
|
|
161
151
|
emitUnhandledIncomingNode: (event) => emitEvent('stanza_unhandled', event),
|
|
162
152
|
syncAppState,
|
|
153
|
+
stopComms: () => {
|
|
154
|
+
void connectionManager.getComms()?.stopComms();
|
|
155
|
+
},
|
|
163
156
|
disconnect,
|
|
164
157
|
clearStoredCredentials,
|
|
165
158
|
parseDirtyBits: (nodes) => (0, dirty_1.parseDirtyBits)(nodes, logger),
|
|
@@ -167,7 +160,7 @@ function createIncomingNodeRuntime(input) {
|
|
|
167
160
|
};
|
|
168
161
|
}
|
|
169
162
|
function createPassiveTasksRuntime(input) {
|
|
170
|
-
const { queryWithContext, authClient, nodeOrchestrator, receiptQueue, getCurrentCredentials } = input;
|
|
163
|
+
const { queryWithContext, authClient, nodeOrchestrator, receiptQueue, getCurrentCredentials, abPropsCoordinator } = input;
|
|
171
164
|
return {
|
|
172
165
|
queryWithContext,
|
|
173
166
|
getCurrentCredentials,
|
|
@@ -175,14 +168,18 @@ function createPassiveTasksRuntime(input) {
|
|
|
175
168
|
sendNodeDirect: (node) => nodeOrchestrator.sendNode(node),
|
|
176
169
|
takeDanglingReceipts: () => receiptQueue.take(),
|
|
177
170
|
requeueDanglingReceipt: (node) => receiptQueue.enqueue(node),
|
|
178
|
-
shouldQueueDanglingReceipt: (node, error) => receiptQueue.shouldQueue(node, error)
|
|
171
|
+
shouldQueueDanglingReceipt: (node, error) => receiptQueue.shouldQueue(node, error),
|
|
172
|
+
syncAbProps: () => abPropsCoordinator.sync(),
|
|
173
|
+
sendPresenceAvailable: async () => {
|
|
174
|
+
const credentials = getCurrentCredentials();
|
|
175
|
+
await nodeOrchestrator.sendNode((0, presence_1.buildPresenceNode)({ name: credentials?.meDisplayName ?? undefined }), false);
|
|
176
|
+
}
|
|
179
177
|
};
|
|
180
178
|
}
|
|
181
179
|
function buildWaClientDependencies(input) {
|
|
182
180
|
const { base, runtime } = input;
|
|
183
181
|
const { options, logger, sessionStore } = base;
|
|
184
182
|
const receiptQueue = new WaReceiptQueue_1.WaReceiptQueue();
|
|
185
|
-
const keyShareCoordinator = new WaKeyShareCoordinator_1.WaKeyShareCoordinator();
|
|
186
183
|
let connectionManager = null;
|
|
187
184
|
let passiveTasks = null;
|
|
188
185
|
let mediaConnCacheFallback = null;
|
|
@@ -192,23 +189,24 @@ function buildWaClientDependencies(input) {
|
|
|
192
189
|
sendNode: async (node) => nodeTransport.sendNode(node),
|
|
193
190
|
logger,
|
|
194
191
|
defaultTimeoutMs: options.nodeQueryTimeoutMs,
|
|
195
|
-
hostDomain: constants_1.WA_DEFAULTS.HOST_DOMAIN
|
|
192
|
+
hostDomain: constants_1.WA_DEFAULTS.HOST_DOMAIN,
|
|
193
|
+
mobileIqIdFormat: options.mobileTransport !== undefined
|
|
196
194
|
});
|
|
197
195
|
const keepAlive = new WaKeepAlive_1.WaKeepAlive({
|
|
198
196
|
logger,
|
|
199
197
|
nodeOrchestrator,
|
|
200
198
|
getComms: () => connectionManager?.getComms() ?? null,
|
|
201
199
|
intervalMs: options.keepAliveIntervalMs,
|
|
200
|
+
getIntervalMs: () => abPropsCoordinator.getConfigValue('heartbeat_interval_s') * 1000,
|
|
202
201
|
timeoutMs: options.deadSocketTimeoutMs,
|
|
203
202
|
hostDomain: constants_1.WA_DEFAULTS.HOST_DOMAIN
|
|
204
203
|
});
|
|
205
204
|
const mediaTransfer = new WaMediaTransferClient_1.WaMediaTransferClient({
|
|
206
205
|
logger,
|
|
207
206
|
defaultTimeoutMs: options.mediaTimeoutMs,
|
|
208
|
-
defaultUploadDispatcher: (0, proxy_1.toProxyDispatcher)(options.proxy?.mediaUpload),
|
|
209
|
-
defaultDownloadDispatcher: (0, proxy_1.toProxyDispatcher)(options.proxy?.mediaDownload),
|
|
210
207
|
defaultUploadAgent: (0, proxy_1.toProxyAgent)(options.proxy?.mediaUpload),
|
|
211
|
-
defaultDownloadAgent: (0, proxy_1.toProxyAgent)(options.proxy?.mediaDownload)
|
|
208
|
+
defaultDownloadAgent: (0, proxy_1.toProxyAgent)(options.proxy?.mediaDownload),
|
|
209
|
+
skipMacVerification: options.dangerous?.disableMediaMacVerification
|
|
212
210
|
});
|
|
213
211
|
const mediaMessageBuildOptions = {
|
|
214
212
|
logger,
|
|
@@ -224,7 +222,8 @@ function buildWaClientDependencies(input) {
|
|
|
224
222
|
setMediaConnCache: (mediaConn) => {
|
|
225
223
|
mediaConnCacheFallback = mediaConn;
|
|
226
224
|
connectionManager?.setMediaConnCache(mediaConn);
|
|
227
|
-
}
|
|
225
|
+
},
|
|
226
|
+
media: options.media
|
|
228
227
|
};
|
|
229
228
|
const messageClient = new WaMessageClient_1.WaMessageClient({
|
|
230
229
|
logger,
|
|
@@ -234,12 +233,22 @@ function buildWaClientDependencies(input) {
|
|
|
234
233
|
defaultMaxAttempts: options.messageMaxAttempts,
|
|
235
234
|
defaultRetryDelayMs: options.messageRetryDelayMs
|
|
236
235
|
});
|
|
237
|
-
const senderKeyManager = new SenderKeyManager_1.SenderKeyManager(sessionStore.senderKey
|
|
238
|
-
|
|
236
|
+
const senderKeyManager = new SenderKeyManager_1.SenderKeyManager(sessionStore.senderKey, {
|
|
237
|
+
getFutureMessagesMax: () => abPropsCoordinator.getConfigValue('web_signal_future_messages_max'),
|
|
238
|
+
skipSignatureVerification: options.dangerous?.disableSenderKeySignatureVerification
|
|
239
|
+
});
|
|
240
|
+
const signalProtocol = new SignalProtocol_1.SignalProtocol({
|
|
241
|
+
signal: sessionStore.signal,
|
|
242
|
+
preKey: sessionStore.preKey,
|
|
243
|
+
session: sessionStore.session,
|
|
244
|
+
identity: sessionStore.identity
|
|
245
|
+
}, logger);
|
|
246
|
+
const signalSystemQuery = (node, timeoutMs) => runtime.query(node, timeoutMs, { useSystemId: true });
|
|
239
247
|
const signalDigestSync = new SignalDigestSyncApi_1.SignalDigestSyncApi({
|
|
240
248
|
logger,
|
|
241
|
-
query:
|
|
249
|
+
query: signalSystemQuery,
|
|
242
250
|
signalStore: sessionStore.signal,
|
|
251
|
+
preKeyStore: sessionStore.preKey,
|
|
243
252
|
defaultTimeoutMs: options.signalFetchKeyBundlesTimeoutMs
|
|
244
253
|
});
|
|
245
254
|
const generateUsyncSid = (0, usync_1.createUsyncSidGenerator)();
|
|
@@ -252,35 +261,39 @@ function buildWaClientDependencies(input) {
|
|
|
252
261
|
});
|
|
253
262
|
const signalIdentitySync = new SignalIdentitySyncApi_1.SignalIdentitySyncApi({
|
|
254
263
|
logger,
|
|
255
|
-
query:
|
|
256
|
-
|
|
264
|
+
query: signalSystemQuery,
|
|
265
|
+
identityStore: sessionStore.identity,
|
|
257
266
|
defaultTimeoutMs: options.signalFetchKeyBundlesTimeoutMs
|
|
258
267
|
});
|
|
259
268
|
const signalMissingPreKeysSync = new SignalMissingPreKeysSyncApi_1.SignalMissingPreKeysSyncApi({
|
|
260
269
|
logger,
|
|
261
|
-
query:
|
|
270
|
+
query: signalSystemQuery,
|
|
262
271
|
defaultTimeoutMs: options.signalFetchKeyBundlesTimeoutMs
|
|
263
272
|
});
|
|
264
273
|
const signalRotateKey = new SignalRotateKeyApi_1.SignalRotateKeyApi({
|
|
265
274
|
logger,
|
|
266
|
-
query:
|
|
275
|
+
query: signalSystemQuery,
|
|
267
276
|
signalStore: sessionStore.signal,
|
|
268
277
|
defaultTimeoutMs: options.signalFetchKeyBundlesTimeoutMs
|
|
269
278
|
});
|
|
270
279
|
const signalSessionSync = new SignalSessionSyncApi_1.SignalSessionSyncApi({
|
|
271
280
|
logger,
|
|
272
|
-
query:
|
|
281
|
+
query: signalSystemQuery,
|
|
273
282
|
defaultTimeoutMs: options.signalFetchKeyBundlesTimeoutMs
|
|
274
283
|
});
|
|
275
284
|
const authClient = new WaAuthClient_1.WaAuthClient({
|
|
276
285
|
deviceBrowser: options.deviceBrowser,
|
|
277
286
|
deviceOsDisplayName: options.deviceOsDisplayName,
|
|
278
287
|
devicePlatform: options.devicePlatform,
|
|
279
|
-
requireFullSync: options.requireFullSync
|
|
288
|
+
requireFullSync: options.requireFullSync,
|
|
289
|
+
version: options.version,
|
|
290
|
+
dangerous: options.dangerous,
|
|
291
|
+
mobileTransport: options.mobileTransport
|
|
280
292
|
}, {
|
|
281
293
|
logger,
|
|
282
294
|
authStore: sessionStore.auth,
|
|
283
295
|
signalStore: sessionStore.signal,
|
|
296
|
+
preKeyStore: sessionStore.preKey,
|
|
284
297
|
socket: {
|
|
285
298
|
sendNode: runtime.sendNode,
|
|
286
299
|
query: runtime.query
|
|
@@ -303,13 +316,27 @@ function buildWaClientDependencies(input) {
|
|
|
303
316
|
const groupCoordinator = (0, WaGroupCoordinator_1.createGroupCoordinator)({
|
|
304
317
|
queryWithContext: runtime.queryWithContext
|
|
305
318
|
});
|
|
319
|
+
const privacyCoordinator = (0, WaPrivacyCoordinator_1.createPrivacyCoordinator)({
|
|
320
|
+
queryWithContext: runtime.queryWithContext
|
|
321
|
+
});
|
|
322
|
+
const profileCoordinator = (0, WaProfileCoordinator_1.createProfileCoordinator)({
|
|
323
|
+
queryWithContext: runtime.queryWithContext,
|
|
324
|
+
generateSid: generateUsyncSid
|
|
325
|
+
});
|
|
326
|
+
const businessCoordinator = (0, WaBusinessCoordinator_1.createBusinessCoordinator)({
|
|
327
|
+
queryWithContext: runtime.queryWithContext
|
|
328
|
+
});
|
|
329
|
+
const emailCoordinator = (0, WaEmailCoordinator_1.createEmailCoordinator)({
|
|
330
|
+
queryWithContext: runtime.queryWithContext
|
|
331
|
+
});
|
|
306
332
|
const retryTracker = (0, tracker_1.createOutboundRetryTracker)({
|
|
307
333
|
retryStore: sessionStore.retry,
|
|
308
334
|
logger
|
|
309
335
|
});
|
|
310
336
|
const sessionResolver = (0, resolver_1.createSignalSessionResolver)({
|
|
311
337
|
signalProtocol,
|
|
312
|
-
|
|
338
|
+
sessionStore: sessionStore.session,
|
|
339
|
+
identityStore: sessionStore.identity,
|
|
313
340
|
signalIdentitySync,
|
|
314
341
|
signalSessionSync,
|
|
315
342
|
logger
|
|
@@ -322,9 +349,42 @@ function buildWaClientDependencies(input) {
|
|
|
322
349
|
});
|
|
323
350
|
const participantsCache = (0, participants_1.createGroupParticipantsCache)({
|
|
324
351
|
participantsStore: sessionStore.participants,
|
|
325
|
-
queryGroupParticipantJids: async (groupJid) =>
|
|
352
|
+
queryGroupParticipantJids: async (groupJid) => {
|
|
353
|
+
const metadata = await groupCoordinator.queryGroupMetadata(groupJid);
|
|
354
|
+
const participantJids = new Array(metadata.participants.length);
|
|
355
|
+
for (let index = 0; index < metadata.participants.length; index += 1) {
|
|
356
|
+
participantJids[index] = metadata.participants[index].jid;
|
|
357
|
+
}
|
|
358
|
+
return participantJids;
|
|
359
|
+
},
|
|
326
360
|
logger
|
|
327
361
|
});
|
|
362
|
+
const trustedContactToken = new WaTrustedContactTokenCoordinator_1.WaTrustedContactTokenCoordinator({
|
|
363
|
+
logger,
|
|
364
|
+
store: sessionStore.privacyToken,
|
|
365
|
+
runtime: {
|
|
366
|
+
queryWithContext: runtime.queryWithContext,
|
|
367
|
+
emitEvent: runtime.emitEvent,
|
|
368
|
+
getCurrentMeLid: () => getCurrentMeLid() ?? null
|
|
369
|
+
},
|
|
370
|
+
durationS: options.privacyToken?.tcTokenDurationS,
|
|
371
|
+
numBuckets: options.privacyToken?.tcTokenNumBuckets,
|
|
372
|
+
senderDurationS: options.privacyToken?.tcTokenSenderDurationS,
|
|
373
|
+
senderNumBuckets: options.privacyToken?.tcTokenSenderNumBuckets,
|
|
374
|
+
maxDurationS: options.privacyToken?.tcTokenMaxDurationS,
|
|
375
|
+
getConfigOverrides: () => ({
|
|
376
|
+
durationS: abPropsCoordinator.getConfigValue('tctoken_duration'),
|
|
377
|
+
numBuckets: abPropsCoordinator.getConfigValue('tctoken_num_buckets'),
|
|
378
|
+
senderDurationS: abPropsCoordinator.getConfigValue('tctoken_duration_sender'),
|
|
379
|
+
senderNumBuckets: abPropsCoordinator.getConfigValue('tctoken_num_buckets_sender')
|
|
380
|
+
})
|
|
381
|
+
});
|
|
382
|
+
const abPropsCoordinator = new WaAbPropsCoordinator_1.WaAbPropsCoordinator({
|
|
383
|
+
logger,
|
|
384
|
+
runtime: {
|
|
385
|
+
queryWithContext: runtime.queryWithContext
|
|
386
|
+
}
|
|
387
|
+
});
|
|
328
388
|
let messageDispatch;
|
|
329
389
|
const appStateSyncKeyProtocol = (0, key_protocol_1.createAppStateSyncKeyProtocol)({
|
|
330
390
|
publishSignalMessage: (signalInput, publishOptions) => messageDispatch.publishSignalMessage(signalInput, publishOptions),
|
|
@@ -344,14 +404,30 @@ function buildWaClientDependencies(input) {
|
|
|
344
404
|
buildMessageContent: async (content) => (0, messages_1.buildMediaMessageContent)(mediaMessageBuildOptions, content),
|
|
345
405
|
senderKeyManager,
|
|
346
406
|
signalProtocol,
|
|
407
|
+
signalStore: sessionStore.signal,
|
|
408
|
+
sessionStore: sessionStore.session,
|
|
409
|
+
identityStore: sessionStore.identity,
|
|
410
|
+
deviceListStore: sessionStore.deviceList,
|
|
411
|
+
messageSecretStore: sessionStore.messageSecret,
|
|
347
412
|
getCurrentMeJid,
|
|
348
413
|
getCurrentMeLid,
|
|
349
|
-
getCurrentSignedIdentity
|
|
414
|
+
getCurrentSignedIdentity,
|
|
415
|
+
resolvePrivacyTokenNode: (recipientJid) => trustedContactToken.resolveTokenForMessage(recipientJid),
|
|
416
|
+
onDirectMessageSent: (recipientJid) => {
|
|
417
|
+
trustedContactToken.maybeIssueSenderToken(recipientJid).catch((err) => logger.warn('sender token issue failed', {
|
|
418
|
+
to: recipientJid,
|
|
419
|
+
message: (0, primitives_1.toError)(err).message
|
|
420
|
+
}));
|
|
421
|
+
},
|
|
422
|
+
getIcdcHashLength: () => abPropsCoordinator.getConfigValue('md_icdc_hash_length'),
|
|
423
|
+
mobileMessageIdFormat: options.mobileTransport !== undefined
|
|
350
424
|
});
|
|
351
425
|
const retryCoordinator = new WaRetryCoordinator_1.WaRetryCoordinator({
|
|
352
426
|
logger,
|
|
353
427
|
retryStore: sessionStore.retry,
|
|
354
428
|
signalStore: sessionStore.signal,
|
|
429
|
+
preKeyStore: sessionStore.preKey,
|
|
430
|
+
sessionStore: sessionStore.session,
|
|
355
431
|
senderKeyStore: sessionStore.senderKey,
|
|
356
432
|
signalProtocol,
|
|
357
433
|
signalDeviceSync,
|
|
@@ -370,7 +446,9 @@ function buildWaClientDependencies(input) {
|
|
|
370
446
|
store: sessionStore.appState,
|
|
371
447
|
onMissingKeys: async ({ keyIds }) => {
|
|
372
448
|
await messageDispatch.requestAppStateSyncKeys(keyIds);
|
|
373
|
-
}
|
|
449
|
+
},
|
|
450
|
+
skipMacVerification: options.dangerous?.disableAppStateMacVerification,
|
|
451
|
+
mobilePrimary: options.mobileTransport !== undefined
|
|
374
452
|
});
|
|
375
453
|
const appStateMutations = new WaAppStateMutationCoordinator_1.WaAppStateMutationCoordinator({
|
|
376
454
|
logger,
|
|
@@ -391,14 +469,28 @@ function buildWaClientDependencies(input) {
|
|
|
391
469
|
connectionManager.setMediaConnCache(mediaConnCacheFallback);
|
|
392
470
|
}
|
|
393
471
|
scheduleReconnectAfterPairing = () => connectionManager?.scheduleReconnectAfterPairing();
|
|
394
|
-
const disconnectWithClientSideEffects = async () => {
|
|
395
|
-
|
|
472
|
+
const disconnectWithClientSideEffects = async (reason, isLogout, code) => {
|
|
473
|
+
abPropsCoordinator.reset();
|
|
474
|
+
offlineResume.reset();
|
|
396
475
|
await connectionManager?.disconnect();
|
|
397
|
-
runtime.emitEvent('
|
|
476
|
+
runtime.emitEvent('connection', {
|
|
477
|
+
status: 'close',
|
|
478
|
+
reason,
|
|
479
|
+
code,
|
|
480
|
+
isLogout,
|
|
481
|
+
isNewLogin: false
|
|
482
|
+
});
|
|
398
483
|
};
|
|
399
|
-
const connectWithClientSideEffects = async () => {
|
|
484
|
+
const connectWithClientSideEffects = async (reason) => {
|
|
485
|
+
runtime.resumeIncomingEvents();
|
|
400
486
|
await connectionManager?.connect(runtime.handleIncomingFrame);
|
|
401
|
-
runtime.emitEvent('
|
|
487
|
+
runtime.emitEvent('connection', {
|
|
488
|
+
status: 'open',
|
|
489
|
+
reason,
|
|
490
|
+
code: null,
|
|
491
|
+
isLogout: false,
|
|
492
|
+
isNewLogin: connectionManager?.wasNewLogin() ?? false
|
|
493
|
+
});
|
|
402
494
|
};
|
|
403
495
|
const clearStoredCredentialsWithClientSideEffects = async () => {
|
|
404
496
|
await connectionManager?.clearStoredCredentials();
|
|
@@ -415,26 +507,37 @@ function buildWaClientDependencies(input) {
|
|
|
415
507
|
clearStoredCredentials: clearStoredCredentialsWithClientSideEffects,
|
|
416
508
|
connect: connectWithClientSideEffects
|
|
417
509
|
});
|
|
418
|
-
const incomingMessageAckOptions =
|
|
510
|
+
const incomingMessageAckOptions = {
|
|
419
511
|
logger,
|
|
420
512
|
sendNode: runtime.sendNode,
|
|
421
|
-
|
|
422
|
-
handleIncomingMessageEvent: runtime.handleIncomingMessageEvent,
|
|
423
|
-
handleError: runtime.handleError,
|
|
424
|
-
getCurrentMeJid,
|
|
513
|
+
getMeJid: getCurrentMeJid,
|
|
425
514
|
signalProtocol,
|
|
426
515
|
senderKeyManager,
|
|
427
|
-
retryCoordinator
|
|
428
|
-
|
|
429
|
-
|
|
516
|
+
onDecryptFailure: (context, error) => retryCoordinator.onDecryptFailure(context, error),
|
|
517
|
+
emitIncomingMessage: (event) => {
|
|
518
|
+
void runtime
|
|
519
|
+
.handleIncomingMessageEvent(event)
|
|
520
|
+
.catch((err) => runtime.handleError((0, primitives_1.toError)(err)));
|
|
521
|
+
},
|
|
522
|
+
emitUnhandledStanza: (event) => runtime.emitEvent('stanza_unhandled', event)
|
|
523
|
+
};
|
|
524
|
+
const handleClientDirtyBits = (dirtyBits) => (0, dirty_1.handleDirtyBits)({
|
|
430
525
|
logger,
|
|
431
526
|
queryWithContext: runtime.queryWithContext,
|
|
432
|
-
syncAppState: runtime.syncAppState,
|
|
433
527
|
getCurrentCredentials,
|
|
528
|
+
syncAppState: runtime.syncAppState,
|
|
434
529
|
generateUsyncSid
|
|
530
|
+
}, dirtyBits);
|
|
531
|
+
const offlineResume = new WaOfflineResumeCoordinator_1.WaOfflineResumeCoordinator({
|
|
532
|
+
logger,
|
|
533
|
+
runtime: {
|
|
534
|
+
sendNode: (node) => nodeOrchestrator.sendNode(node, false),
|
|
535
|
+
emitOfflineResume: (event) => runtime.emitEvent('offline_resume', event)
|
|
536
|
+
}
|
|
435
537
|
});
|
|
436
538
|
const incomingNode = new WaIncomingNodeCoordinator_1.WaIncomingNodeCoordinator({
|
|
437
539
|
logger,
|
|
540
|
+
offlineResume,
|
|
438
541
|
runtime: createIncomingNodeRuntime({
|
|
439
542
|
logger,
|
|
440
543
|
emitEvent: runtime.emitEvent,
|
|
@@ -454,9 +557,231 @@ function buildWaClientDependencies(input) {
|
|
|
454
557
|
incomingMessageAckOptions
|
|
455
558
|
})
|
|
456
559
|
});
|
|
560
|
+
incomingNode.registerIncomingHandler({
|
|
561
|
+
tag: constants_1.WA_NODE_TAGS.NOTIFICATION,
|
|
562
|
+
subtype: constants_1.WA_NOTIFICATION_TYPES.ENCRYPT,
|
|
563
|
+
prepend: true,
|
|
564
|
+
handler: async (node) => {
|
|
565
|
+
const firstChild = (0, helpers_1.getFirstNodeChild)(node);
|
|
566
|
+
if (!firstChild) {
|
|
567
|
+
return false;
|
|
568
|
+
}
|
|
569
|
+
const childTag = firstChild.tag;
|
|
570
|
+
// <count value="N"/> — server prekeys running low
|
|
571
|
+
if (childTag === 'count') {
|
|
572
|
+
const ackNode = (0, global_1.buildAckNode)({
|
|
573
|
+
kind: 'notification',
|
|
574
|
+
node,
|
|
575
|
+
includeType: false
|
|
576
|
+
});
|
|
577
|
+
await runtime.sendNode(ackNode);
|
|
578
|
+
const tasks = passiveTasks;
|
|
579
|
+
if (!tasks) {
|
|
580
|
+
logger.warn('encrypt-count: passive tasks not available');
|
|
581
|
+
return true;
|
|
582
|
+
}
|
|
583
|
+
await tasks.handlePreKeyLowNotification().catch((error) => {
|
|
584
|
+
logger.warn('encrypt-count: prekey upload failed', {
|
|
585
|
+
message: (0, primitives_1.toError)(error).message
|
|
586
|
+
});
|
|
587
|
+
});
|
|
588
|
+
return true;
|
|
589
|
+
}
|
|
590
|
+
// <digest/> — digest key sync
|
|
591
|
+
if (childTag === 'digest') {
|
|
592
|
+
const ackNode = (0, global_1.buildAckNode)({
|
|
593
|
+
kind: 'notification',
|
|
594
|
+
node,
|
|
595
|
+
includeType: false
|
|
596
|
+
});
|
|
597
|
+
await runtime.sendNode(ackNode);
|
|
598
|
+
const tasks = passiveTasks;
|
|
599
|
+
if (!tasks) {
|
|
600
|
+
logger.warn('encrypt-digest: passive tasks not available');
|
|
601
|
+
return true;
|
|
602
|
+
}
|
|
603
|
+
await tasks.handleDigestNotification().catch((error) => {
|
|
604
|
+
logger.warn('encrypt-digest: digest sync failed', {
|
|
605
|
+
message: (0, primitives_1.toError)(error).message
|
|
606
|
+
});
|
|
607
|
+
});
|
|
608
|
+
return true;
|
|
609
|
+
}
|
|
610
|
+
// <identity/> — contact identity key changed
|
|
611
|
+
if (childTag === 'identity') {
|
|
612
|
+
const parsed = (0, identity_1.parseIdentityChangeNotification)(node);
|
|
613
|
+
if (!parsed) {
|
|
614
|
+
return false;
|
|
615
|
+
}
|
|
616
|
+
const ackNode = (0, global_1.buildAckNode)({
|
|
617
|
+
kind: 'notification',
|
|
618
|
+
node,
|
|
619
|
+
includeType: false
|
|
620
|
+
});
|
|
621
|
+
await runtime.sendNode(ackNode);
|
|
622
|
+
const address = (0, jid_1.parseSignalAddressFromJid)(parsed.fromJid);
|
|
623
|
+
// ignore companion devices (non-primary)
|
|
624
|
+
if (address.device !== 0) {
|
|
625
|
+
logger.debug('identity-change: ignoring companion device', {
|
|
626
|
+
jid: parsed.fromJid
|
|
627
|
+
});
|
|
628
|
+
return true;
|
|
629
|
+
}
|
|
630
|
+
// self-primary identity change → must disconnect
|
|
631
|
+
const meJid = getCurrentMeJid();
|
|
632
|
+
if (meJid) {
|
|
633
|
+
const meUser = (0, jid_1.toUserJid)(meJid);
|
|
634
|
+
const fromUser = (0, jid_1.toUserJid)(parsed.fromJid);
|
|
635
|
+
if (meUser === fromUser) {
|
|
636
|
+
logger.error('self primary identity changed, disconnecting');
|
|
637
|
+
void connectionManager?.getComms()?.stopComms();
|
|
638
|
+
await disconnectWithClientSideEffects(constants_1.WA_DISCONNECT_REASONS.PRIMARY_IDENTITY_KEY_CHANGE, true, null);
|
|
639
|
+
await clearStoredCredentialsWithClientSideEffects();
|
|
640
|
+
return true;
|
|
641
|
+
}
|
|
642
|
+
}
|
|
643
|
+
const oldIdentity = await sessionStore.identity.getRemoteIdentity(address);
|
|
644
|
+
if (oldIdentity) {
|
|
645
|
+
logger.info('identity-change: clearing session', {
|
|
646
|
+
jid: parsed.fromJid
|
|
647
|
+
});
|
|
648
|
+
await sessionStore.session.deleteSession(address);
|
|
649
|
+
const userJid = (0, jid_1.toUserJid)(parsed.fromJid);
|
|
650
|
+
await trustedContactToken.reissueOnIdentityChange(userJid).catch((error) => {
|
|
651
|
+
logger.warn('identity-change: reissue tc token failed', {
|
|
652
|
+
message: (0, primitives_1.toError)(error).message
|
|
653
|
+
});
|
|
654
|
+
});
|
|
655
|
+
}
|
|
656
|
+
runtime.emitEvent('notification', {
|
|
657
|
+
rawNode: node,
|
|
658
|
+
stanzaId: parsed.stanzaId,
|
|
659
|
+
chatJid: parsed.fromJid,
|
|
660
|
+
stanzaType: 'encrypt',
|
|
661
|
+
notificationType: 'encrypt',
|
|
662
|
+
classification: 'core',
|
|
663
|
+
details: {
|
|
664
|
+
kind: 'identity_change',
|
|
665
|
+
displayName: parsed.displayName,
|
|
666
|
+
lid: parsed.lid,
|
|
667
|
+
hadPreviousIdentity: !!oldIdentity
|
|
668
|
+
}
|
|
669
|
+
});
|
|
670
|
+
return true;
|
|
671
|
+
}
|
|
672
|
+
return false;
|
|
673
|
+
}
|
|
674
|
+
});
|
|
675
|
+
incomingNode.registerIncomingHandler({
|
|
676
|
+
tag: constants_1.WA_NODE_TAGS.NOTIFICATION,
|
|
677
|
+
subtype: constants_1.WA_NOTIFICATION_TYPES.DEVICES,
|
|
678
|
+
prepend: true,
|
|
679
|
+
handler: async (node) => {
|
|
680
|
+
const parsed = (0, devices_1.parseDeviceNotification)(node);
|
|
681
|
+
if (!parsed) {
|
|
682
|
+
return false;
|
|
683
|
+
}
|
|
684
|
+
const ackNode = (0, global_1.buildAckNode)({
|
|
685
|
+
kind: 'notification',
|
|
686
|
+
node,
|
|
687
|
+
includeType: false
|
|
688
|
+
});
|
|
689
|
+
await runtime.sendNode(ackNode);
|
|
690
|
+
const userJid = (0, jid_1.toUserJid)(parsed.fromJid);
|
|
691
|
+
if (parsed.action === devices_1.DEVICE_NOTIFICATION_ACTIONS.REMOVE) {
|
|
692
|
+
const baseAddress = (0, jid_1.parseSignalAddressFromJid)(parsed.fromJid);
|
|
693
|
+
for (const device of parsed.devices) {
|
|
694
|
+
const address = {
|
|
695
|
+
user: baseAddress.user,
|
|
696
|
+
server: baseAddress.server,
|
|
697
|
+
device: device.deviceId
|
|
698
|
+
};
|
|
699
|
+
await sessionStore.session.deleteSession(address).catch((error) => {
|
|
700
|
+
logger.warn('devices-notification: delete session failed', {
|
|
701
|
+
message: (0, primitives_1.toError)(error).message
|
|
702
|
+
});
|
|
703
|
+
});
|
|
704
|
+
}
|
|
705
|
+
}
|
|
706
|
+
// invalidate device list cache so next fanout fetches fresh list
|
|
707
|
+
if (sessionStore.deviceList) {
|
|
708
|
+
await sessionStore.deviceList.deleteUserDevices(userJid).catch((error) => {
|
|
709
|
+
logger.warn('devices-notification: invalidate cache failed', {
|
|
710
|
+
message: (0, primitives_1.toError)(error).message
|
|
711
|
+
});
|
|
712
|
+
});
|
|
713
|
+
}
|
|
714
|
+
// for update notifications, re-sync immediately
|
|
715
|
+
if (parsed.action === devices_1.DEVICE_NOTIFICATION_ACTIONS.UPDATE) {
|
|
716
|
+
signalDeviceSync.syncDeviceList([userJid]).catch((error) => {
|
|
717
|
+
logger.warn('devices-notification: sync device list failed', {
|
|
718
|
+
message: (0, primitives_1.toError)(error).message
|
|
719
|
+
});
|
|
720
|
+
});
|
|
721
|
+
}
|
|
722
|
+
runtime.emitEvent('notification', {
|
|
723
|
+
rawNode: node,
|
|
724
|
+
stanzaId: parsed.stanzaId,
|
|
725
|
+
chatJid: parsed.fromJid,
|
|
726
|
+
stanzaType: 'devices',
|
|
727
|
+
notificationType: 'devices',
|
|
728
|
+
classification: 'core',
|
|
729
|
+
details: {
|
|
730
|
+
kind: 'device_list_change',
|
|
731
|
+
action: parsed.action,
|
|
732
|
+
devices: parsed.devices
|
|
733
|
+
}
|
|
734
|
+
});
|
|
735
|
+
return true;
|
|
736
|
+
}
|
|
737
|
+
});
|
|
738
|
+
incomingNode.registerIncomingHandler({
|
|
739
|
+
tag: constants_1.WA_NODE_TAGS.NOTIFICATION,
|
|
740
|
+
subtype: constants_1.WA_PRIVACY_TOKEN_NOTIFICATION_TYPE,
|
|
741
|
+
prepend: true,
|
|
742
|
+
handler: async (node) => {
|
|
743
|
+
const fromJid = node.attrs.from ?? node.attrs.sender_lid;
|
|
744
|
+
if (!fromJid) {
|
|
745
|
+
return false;
|
|
746
|
+
}
|
|
747
|
+
const tokens = (0, privacy_token_1.parsePrivacyTokenNotification)(node);
|
|
748
|
+
if (tokens.length === 0) {
|
|
749
|
+
return false;
|
|
750
|
+
}
|
|
751
|
+
await trustedContactToken.handleIncomingToken(fromJid, tokens);
|
|
752
|
+
const ackNode = (0, global_1.buildAckNode)({
|
|
753
|
+
kind: 'notification',
|
|
754
|
+
node,
|
|
755
|
+
typeOverride: constants_1.WA_PRIVACY_TOKEN_NOTIFICATION_TYPE
|
|
756
|
+
});
|
|
757
|
+
await runtime.sendNode(ackNode);
|
|
758
|
+
return true;
|
|
759
|
+
}
|
|
760
|
+
});
|
|
761
|
+
// AB Props: sync after successful login and on server notification
|
|
762
|
+
incomingNode.registerIncomingHandler({
|
|
763
|
+
tag: constants_1.WA_NODE_TAGS.NOTIFICATION,
|
|
764
|
+
subtype: constants_1.WA_NOTIFICATION_TYPES.SERVER,
|
|
765
|
+
prepend: true,
|
|
766
|
+
handler: async (node) => {
|
|
767
|
+
const firstChild = (0, helpers_1.getFirstNodeChild)(node);
|
|
768
|
+
if (!firstChild || firstChild.tag !== constants_1.WA_NODE_TAGS.ABPROPS) {
|
|
769
|
+
return false;
|
|
770
|
+
}
|
|
771
|
+
const ackNode = (0, global_1.buildAckNode)({
|
|
772
|
+
kind: 'notification',
|
|
773
|
+
node,
|
|
774
|
+
includeType: false
|
|
775
|
+
});
|
|
776
|
+
await runtime.sendNode(ackNode);
|
|
777
|
+
abPropsCoordinator.sync();
|
|
778
|
+
return true;
|
|
779
|
+
}
|
|
780
|
+
});
|
|
457
781
|
passiveTasks = new WaPassiveTasksCoordinator_1.WaPassiveTasksCoordinator({
|
|
458
782
|
logger,
|
|
459
783
|
signalStore: sessionStore.signal,
|
|
784
|
+
preKeyStore: sessionStore.preKey,
|
|
460
785
|
signalDigestSync,
|
|
461
786
|
signalRotateKey,
|
|
462
787
|
runtime: createPassiveTasksRuntime({
|
|
@@ -464,8 +789,11 @@ function buildWaClientDependencies(input) {
|
|
|
464
789
|
authClient,
|
|
465
790
|
nodeOrchestrator,
|
|
466
791
|
receiptQueue,
|
|
467
|
-
getCurrentCredentials
|
|
468
|
-
|
|
792
|
+
getCurrentCredentials,
|
|
793
|
+
abPropsCoordinator
|
|
794
|
+
}),
|
|
795
|
+
mobilePrimary: options.mobileTransport !== undefined,
|
|
796
|
+
appStateSync
|
|
469
797
|
});
|
|
470
798
|
return {
|
|
471
799
|
nodeTransport,
|
|
@@ -486,13 +814,18 @@ function buildWaClientDependencies(input) {
|
|
|
486
814
|
messageDispatch,
|
|
487
815
|
retryCoordinator,
|
|
488
816
|
appStateSync,
|
|
489
|
-
appStateMutations,
|
|
817
|
+
chatCoordinator: appStateMutations,
|
|
490
818
|
streamControl,
|
|
491
819
|
incomingNode,
|
|
492
820
|
passiveTasks,
|
|
493
821
|
groupCoordinator,
|
|
822
|
+
privacyCoordinator,
|
|
823
|
+
profileCoordinator,
|
|
824
|
+
businessCoordinator,
|
|
825
|
+
emailCoordinator,
|
|
494
826
|
receiptQueue,
|
|
495
|
-
|
|
496
|
-
|
|
827
|
+
connectionManager,
|
|
828
|
+
trustedContactToken,
|
|
829
|
+
abPropsCoordinator
|
|
497
830
|
};
|
|
498
831
|
}
|