zapo-js 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -7
- package/dist/appstate/WaAppStateCrypto.js +18 -25
- package/dist/appstate/WaAppStateSyncClient.js +181 -114
- package/dist/appstate/WaAppStateSyncResponseParser.js +16 -5
- package/dist/appstate/constants.js +4 -3
- package/dist/appstate/utils.js +10 -30
- package/dist/auth/WaAuthClient.js +48 -55
- package/dist/auth/flow/WaAuthCredentialsFlow.js +21 -14
- package/dist/auth/index.js +1 -3
- package/dist/auth/pairing/WaPairingFlow.js +21 -23
- package/dist/auth/pairing/WaQrFlow.js +37 -24
- package/dist/client/WaClient.js +103 -276
- package/dist/client/WaClientFactory.js +227 -110
- package/dist/client/connection/WaConnectionManager.js +292 -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/WaGroupCoordinator.js +27 -17
- package/dist/client/coordinators/WaIncomingNodeCoordinator.js +20 -27
- package/dist/client/coordinators/WaMessageDispatchCoordinator.js +231 -686
- package/dist/client/coordinators/WaRetryCoordinator.js +70 -37
- package/dist/client/dirty.js +35 -29
- package/dist/client/events/chat.js +4 -3
- package/dist/client/events/group.js +59 -36
- package/dist/client/history-sync.js +53 -63
- package/dist/client/incoming.js +23 -20
- package/dist/client/mailbox.js +8 -8
- package/dist/client/messages.js +4 -4
- package/dist/client/messaging/fanout.js +189 -0
- package/dist/client/messaging/key-protocol.js +130 -0
- package/dist/client/messaging/participants.js +191 -0
- package/dist/crypto/core/hkdf.js +3 -8
- package/dist/crypto/core/index.js +1 -4
- package/dist/crypto/core/keys.js +2 -3
- package/dist/crypto/core/primitives.js +12 -15
- package/dist/crypto/core/random.js +7 -26
- package/dist/crypto/curves/Ed25519.js +7 -8
- package/dist/crypto/curves/X25519.js +13 -16
- package/dist/crypto/index.js +0 -5
- package/dist/esm/appstate/WaAppStateCrypto.js +6 -13
- package/dist/esm/appstate/WaAppStateSyncClient.js +174 -107
- package/dist/esm/appstate/WaAppStateSyncResponseParser.js +17 -6
- package/dist/esm/appstate/constants.js +3 -2
- package/dist/esm/appstate/utils.js +8 -27
- package/dist/esm/auth/WaAuthClient.js +48 -55
- package/dist/esm/auth/flow/WaAuthCredentialsFlow.js +21 -14
- package/dist/esm/auth/index.js +0 -1
- package/dist/esm/auth/pairing/WaPairingFlow.js +14 -16
- package/dist/esm/auth/pairing/WaQrFlow.js +37 -24
- package/dist/esm/client/WaClient.js +103 -276
- package/dist/esm/client/WaClientFactory.js +227 -110
- package/dist/esm/client/connection/WaConnectionManager.js +288 -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/WaGroupCoordinator.js +20 -10
- package/dist/esm/client/coordinators/WaIncomingNodeCoordinator.js +20 -27
- package/dist/esm/client/coordinators/WaMessageDispatchCoordinator.js +232 -687
- package/dist/esm/client/coordinators/WaRetryCoordinator.js +71 -38
- package/dist/esm/client/dirty.js +30 -24
- package/dist/esm/client/events/chat.js +4 -3
- package/dist/esm/client/events/group.js +50 -28
- package/dist/esm/client/history-sync.js +50 -60
- package/dist/esm/client/incoming.js +23 -20
- package/dist/esm/client/mailbox.js +8 -8
- package/dist/esm/client/messages.js +1 -1
- package/dist/esm/client/messaging/fanout.js +186 -0
- package/dist/esm/client/messaging/key-protocol.js +127 -0
- package/dist/esm/client/messaging/participants.js +188 -0
- package/dist/esm/crypto/core/hkdf.js +3 -8
- package/dist/esm/crypto/core/index.js +0 -1
- package/dist/esm/crypto/core/keys.js +2 -3
- package/dist/esm/crypto/core/primitives.js +12 -15
- package/dist/esm/crypto/core/random.js +6 -25
- package/dist/esm/crypto/curves/Ed25519.js +4 -5
- package/dist/esm/crypto/curves/X25519.js +10 -13
- package/dist/esm/crypto/index.js +0 -2
- 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/BoundedTaskQueue.js +13 -17
- package/dist/esm/media/WaMediaCrypto.js +2 -4
- package/dist/esm/media/WaMediaTransferClient.js +226 -58
- package/dist/esm/media/conn.js +10 -6
- package/dist/esm/media/constants.js +4 -1
- package/dist/esm/message/WaMessageClient.js +4 -13
- package/dist/esm/message/ack.js +6 -6
- package/dist/esm/message/addon-crypto.js +59 -0
- package/dist/esm/message/incoming.js +106 -111
- package/dist/esm/message/index.js +2 -0
- package/dist/esm/message/reporting-token.js +438 -0
- package/dist/esm/message/use-case-secret.js +49 -0
- package/dist/esm/protocol/appstate.js +58 -0
- package/dist/esm/protocol/constants.js +2 -1
- package/dist/esm/protocol/index.js +2 -10
- package/dist/esm/protocol/jid.js +63 -51
- package/dist/esm/protocol/media.js +3 -3
- package/dist/esm/protocol/nodes.js +2 -0
- package/dist/esm/protocol/usync.js +11 -0
- package/dist/esm/retry/index.js +1 -0
- package/dist/esm/retry/outbound.js +4 -5
- package/dist/esm/retry/parse.js +58 -76
- package/dist/esm/retry/replay.js +48 -49
- package/dist/esm/retry/tracker.js +56 -0
- package/dist/esm/signal/api/SignalDeviceSyncApi.js +249 -82
- package/dist/esm/signal/api/SignalDigestSyncApi.js +6 -1
- package/dist/esm/signal/api/SignalIdentitySyncApi.js +49 -34
- package/dist/esm/signal/api/SignalMissingPreKeysSyncApi.js +70 -62
- package/dist/esm/signal/api/SignalSessionSyncApi.js +23 -30
- package/dist/esm/signal/crypto/WaAdvSignature.js +3 -5
- package/dist/esm/signal/group/SenderKeyChain.js +28 -23
- package/dist/esm/signal/group/SenderKeyCodec.js +2 -4
- package/dist/esm/signal/group/SenderKeyManager.js +26 -16
- package/dist/esm/signal/index.js +1 -0
- package/dist/esm/signal/session/SignalProtocol.js +49 -14
- 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 +186 -0
- package/dist/esm/signal/store/sqlite.js +16 -37
- package/dist/esm/store/createStore.js +16 -18
- package/dist/esm/store/noop.store.js +3 -6
- package/dist/esm/store/providers/memory/appstate.store.js +30 -6
- package/dist/esm/store/providers/memory/contact.store.js +5 -0
- package/dist/esm/store/providers/memory/device-list.store.js +3 -30
- 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/sender-key.store.js +5 -7
- package/dist/esm/store/providers/memory/signal.store.js +13 -1
- package/dist/esm/store/providers/memory/thread.store.js +5 -0
- package/dist/esm/store/providers/sqlite/appstate.store.js +82 -1
- package/dist/esm/store/providers/sqlite/connection.js +18 -13
- package/dist/esm/store/providers/sqlite/contact.store.js +31 -18
- package/dist/esm/store/providers/sqlite/device-list.store.js +7 -35
- package/dist/esm/store/providers/sqlite/message.store.js +45 -32
- package/dist/esm/store/providers/sqlite/migrations.js +1 -1
- package/dist/esm/store/providers/sqlite/participants.store.js +1 -9
- package/dist/esm/store/providers/sqlite/retry.store.js +8 -11
- package/dist/esm/store/providers/sqlite/sender-key.store.js +25 -30
- package/dist/esm/store/providers/sqlite/signal.store.js +104 -22
- package/dist/esm/store/providers/sqlite/table-names.js +107 -0
- package/dist/esm/store/providers/sqlite/thread.store.js +35 -22
- package/dist/esm/transport/WaComms.js +25 -23
- package/dist/esm/transport/WaWebSocket.js +115 -12
- package/dist/esm/transport/binary/decoder.js +4 -4
- package/dist/esm/transport/binary/encoder.js +12 -4
- package/dist/esm/transport/index.js +1 -0
- package/dist/esm/transport/keepalive/WaKeepAlive.js +2 -8
- package/dist/esm/transport/node/WaNodeOrchestrator.js +2 -4
- 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/index.js +2 -1
- package/dist/esm/transport/node/builders/message.js +9 -0
- package/dist/esm/transport/node/builders/pairing.js +4 -5
- package/dist/esm/transport/node/builders/usync.js +41 -0
- package/dist/esm/transport/node/helpers.js +107 -5
- package/dist/esm/transport/node/usync.js +35 -0
- package/dist/esm/transport/noise/WaFrameCodec.js +48 -33
- package/dist/esm/transport/noise/WaNoiseCert.js +3 -6
- package/dist/esm/transport/noise/WaNoiseSession.js +17 -10
- package/dist/esm/transport/proxy.js +27 -0
- package/dist/esm/transport/stream/parse.js +13 -48
- package/dist/esm/util/bytes.js +50 -32
- package/dist/esm/util/coercion.js +6 -14
- package/dist/esm/util/primitives.js +39 -14
- 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/BoundedTaskQueue.js +13 -17
- package/dist/media/WaMediaCrypto.js +1 -3
- package/dist/media/WaMediaTransferClient.js +259 -58
- package/dist/media/conn.js +10 -6
- package/dist/media/constants.js +4 -1
- package/dist/message/WaMessageClient.js +5 -14
- package/dist/message/ack.js +6 -6
- package/dist/message/addon-crypto.js +65 -0
- package/dist/message/incoming.js +104 -109
- package/dist/message/index.js +2 -0
- package/dist/message/reporting-token.js +443 -0
- package/dist/message/use-case-secret.js +55 -0
- package/dist/protocol/appstate.js +59 -1
- package/dist/protocol/constants.js +7 -1
- package/dist/protocol/index.js +20 -42
- package/dist/protocol/jid.js +64 -51
- package/dist/protocol/media.js +3 -3
- package/dist/protocol/nodes.js +2 -0
- package/dist/protocol/usync.js +14 -0
- package/dist/retry/index.js +3 -1
- package/dist/retry/outbound.js +6 -7
- package/dist/retry/parse.js +57 -75
- package/dist/retry/replay.js +46 -47
- package/dist/retry/tracker.js +59 -0
- package/dist/signal/api/SignalDeviceSyncApi.js +247 -80
- package/dist/signal/api/SignalDigestSyncApi.js +6 -1
- package/dist/signal/api/SignalIdentitySyncApi.js +49 -34
- package/dist/signal/api/SignalMissingPreKeysSyncApi.js +67 -59
- package/dist/signal/api/SignalSessionSyncApi.js +23 -30
- package/dist/signal/crypto/WaAdvSignature.js +2 -4
- package/dist/signal/group/SenderKeyChain.js +27 -22
- package/dist/signal/group/SenderKeyCodec.js +1 -3
- package/dist/signal/group/SenderKeyManager.js +26 -16
- package/dist/signal/index.js +3 -1
- package/dist/signal/session/SignalProtocol.js +49 -14
- package/dist/signal/session/SignalRatchet.js +24 -15
- package/dist/signal/session/SignalSession.js +14 -9
- package/dist/signal/session/resolver.js +189 -0
- package/dist/signal/store/sqlite.js +16 -37
- package/dist/store/createStore.js +16 -18
- package/dist/store/noop.store.js +3 -6
- package/dist/store/providers/memory/appstate.store.js +28 -4
- package/dist/store/providers/memory/contact.store.js +5 -0
- package/dist/store/providers/memory/device-list.store.js +3 -30
- 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/sender-key.store.js +8 -10
- package/dist/store/providers/memory/signal.store.js +21 -9
- package/dist/store/providers/memory/thread.store.js +5 -0
- package/dist/store/providers/sqlite/appstate.store.js +81 -0
- package/dist/store/providers/sqlite/connection.js +18 -13
- package/dist/store/providers/sqlite/contact.store.js +31 -18
- package/dist/store/providers/sqlite/device-list.store.js +7 -35
- package/dist/store/providers/sqlite/message.store.js +45 -32
- package/dist/store/providers/sqlite/migrations.js +1 -1
- package/dist/store/providers/sqlite/participants.store.js +1 -9
- package/dist/store/providers/sqlite/retry.store.js +8 -11
- package/dist/store/providers/sqlite/sender-key.store.js +24 -29
- package/dist/store/providers/sqlite/signal.store.js +105 -23
- package/dist/store/providers/sqlite/table-names.js +113 -0
- package/dist/store/providers/sqlite/thread.store.js +35 -22
- package/dist/transport/WaComms.js +27 -25
- package/dist/transport/WaWebSocket.js +148 -12
- package/dist/transport/binary/decoder.js +4 -4
- package/dist/transport/binary/encoder.js +12 -4
- package/dist/transport/index.js +7 -1
- package/dist/transport/keepalive/WaKeepAlive.js +1 -7
- package/dist/transport/node/WaNodeOrchestrator.js +2 -4
- 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/index.js +12 -9
- package/dist/transport/node/builders/message.js +9 -0
- package/dist/transport/node/builders/pairing.js +4 -5
- package/dist/transport/node/builders/usync.js +45 -0
- package/dist/transport/node/helpers.js +112 -4
- package/dist/transport/node/usync.js +38 -0
- package/dist/transport/noise/WaFrameCodec.js +47 -32
- package/dist/transport/noise/WaNoiseCert.js +5 -8
- package/dist/transport/noise/WaNoiseSession.js +17 -10
- package/dist/transport/proxy.js +34 -0
- package/dist/transport/stream/parse.js +17 -53
- 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/store/sqlite.d.ts +4 -18
- package/dist/types/appstate/utils.d.ts +0 -1
- package/dist/types/auth/WaAuthClient.d.ts +10 -12
- package/dist/types/auth/index.d.ts +0 -2
- package/dist/types/auth/pairing/WaQrFlow.d.ts +1 -1
- package/dist/types/auth/types.d.ts +6 -9
- package/dist/types/client/WaClient.d.ts +27 -25
- package/dist/types/client/WaClientFactory.d.ts +22 -23
- package/dist/types/client/connection/WaConnectionManager.d.ts +64 -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/WaIncomingNodeCoordinator.d.ts +0 -1
- package/dist/types/client/coordinators/WaMessageDispatchCoordinator.d.ts +18 -41
- package/dist/types/client/coordinators/WaRetryCoordinator.d.ts +2 -0
- package/dist/types/client/dirty.d.ts +1 -0
- package/dist/types/client/events/group.d.ts +2 -1
- package/dist/types/client/index.d.ts +1 -1
- 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/types.d.ts +24 -1
- package/dist/types/crypto/core/hkdf.d.ts +0 -6
- package/dist/types/crypto/core/index.d.ts +0 -1
- package/dist/types/crypto/core/random.d.ts +1 -7
- package/dist/types/crypto/index.d.ts +0 -2
- package/dist/types/index.d.ts +1 -1
- 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/BoundedTaskQueue.d.ts +1 -1
- package/dist/types/media/WaMediaTransferClient.d.ts +13 -3
- package/dist/types/media/types.d.ts +5 -0
- package/dist/types/message/addon-crypto.d.ts +25 -0
- package/dist/types/message/index.d.ts +2 -0
- package/dist/types/message/reporting-token.d.ts +19 -0
- package/dist/types/message/use-case-secret.d.ts +20 -0
- package/dist/types/protocol/appstate.d.ts +58 -0
- package/dist/types/protocol/constants.d.ts +2 -1
- package/dist/types/protocol/index.d.ts +2 -10
- package/dist/types/protocol/jid.d.ts +3 -3
- package/dist/types/protocol/nodes.d.ts +2 -0
- package/dist/types/protocol/usync.d.ts +11 -0
- package/dist/types/retry/index.d.ts +1 -0
- package/dist/types/retry/replay.d.ts +0 -4
- package/dist/types/retry/tracker.d.ts +19 -0
- package/dist/types/retry/types.d.ts +4 -3
- package/dist/types/signal/api/SignalDeviceSyncApi.d.ts +13 -1
- package/dist/types/signal/group/SenderKeyCodec.d.ts +4 -6
- package/dist/types/signal/index.d.ts +1 -0
- package/dist/types/signal/session/SignalProtocol.d.ts +9 -0
- package/dist/types/signal/session/resolver.d.ts +17 -0
- package/dist/types/store/contracts/appstate.store.d.ts +3 -0
- 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/sender-key.store.d.ts +0 -1
- package/dist/types/store/contracts/signal.store.d.ts +6 -0
- package/dist/types/store/contracts/thread.store.d.ts +1 -0
- package/dist/types/store/index.d.ts +1 -1
- package/dist/types/store/providers/memory/appstate.store.d.ts +2 -0
- 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/sender-key.store.d.ts +0 -1
- package/dist/types/store/providers/memory/signal.store.d.ts +6 -0
- package/dist/types/store/providers/memory/thread.store.d.ts +1 -0
- package/dist/types/store/providers/sqlite/appstate.store.d.ts +2 -0
- package/dist/types/store/providers/sqlite/contact.store.d.ts +2 -0
- package/dist/types/store/providers/sqlite/device-list.store.d.ts +0 -3
- package/dist/types/store/providers/sqlite/message.store.d.ts +2 -0
- package/dist/types/store/providers/sqlite/participants.store.d.ts +0 -1
- package/dist/types/store/providers/sqlite/retry.store.d.ts +0 -1
- package/dist/types/store/providers/sqlite/sender-key.store.d.ts +0 -1
- package/dist/types/store/providers/sqlite/signal.store.d.ts +7 -0
- package/dist/types/store/providers/sqlite/table-names.d.ts +5 -0
- package/dist/types/store/providers/sqlite/thread.store.d.ts +2 -0
- package/dist/types/store/types.d.ts +3 -0
- package/dist/types/transport/WaWebSocket.d.ts +3 -0
- package/dist/types/transport/index.d.ts +2 -1
- package/dist/types/transport/keepalive/WaKeepAlive.d.ts +0 -1
- package/dist/types/transport/node/WaNodeTransport.d.ts +0 -9
- package/dist/types/transport/node/builders/group.d.ts +4 -6
- package/dist/types/transport/node/builders/index.d.ts +2 -1
- package/dist/types/transport/node/builders/message.d.ts +14 -25
- package/dist/types/transport/node/builders/retry.d.ts +2 -4
- package/dist/types/transport/node/builders/usync.d.ts +21 -0
- package/dist/types/transport/node/helpers.d.ts +8 -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 +1 -0
- 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/primitives.d.ts +3 -0
- package/dist/util/bytes.js +55 -33
- package/dist/util/coercion.js +6 -14
- package/dist/util/primitives.js +42 -14
- package/package.json +27 -9
- package/proto/index.d.ts +1090 -1048
- package/proto/index.js +1 -1
- package/scripts/check-node-version.cjs +0 -1
- package/dist/crypto/core/encoding.js +0 -29
- package/dist/esm/crypto/core/encoding.js +0 -25
- package/dist/esm/util/base64.js +0 -18
- package/dist/esm/util/signal-address.js +0 -5
- package/dist/types/crypto/core/encoding.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
|
@@ -4,6 +4,10 @@ exports.resolveWaClientBase = resolveWaClientBase;
|
|
|
4
4
|
exports.buildWaClientDependencies = buildWaClientDependencies;
|
|
5
5
|
const WaAppStateSyncClient_1 = require("../appstate/WaAppStateSyncClient");
|
|
6
6
|
const WaAuthClient_1 = require("../auth/WaAuthClient");
|
|
7
|
+
const WaConnectionManager_1 = require("./connection/WaConnectionManager");
|
|
8
|
+
const WaKeyShareCoordinator_1 = require("./connection/WaKeyShareCoordinator");
|
|
9
|
+
const WaReceiptQueue_1 = require("./connection/WaReceiptQueue");
|
|
10
|
+
const WaAppStateMutationCoordinator_1 = require("./coordinators/WaAppStateMutationCoordinator");
|
|
7
11
|
const WaGroupCoordinator_1 = require("./coordinators/WaGroupCoordinator");
|
|
8
12
|
const WaIncomingNodeCoordinator_1 = require("./coordinators/WaIncomingNodeCoordinator");
|
|
9
13
|
const WaMessageDispatchCoordinator_1 = require("./coordinators/WaMessageDispatchCoordinator");
|
|
@@ -12,10 +16,14 @@ const WaRetryCoordinator_1 = require("./coordinators/WaRetryCoordinator");
|
|
|
12
16
|
const WaStreamControlCoordinator_1 = require("./coordinators/WaStreamControlCoordinator");
|
|
13
17
|
const dirty_1 = require("./dirty");
|
|
14
18
|
const messages_1 = require("./messages");
|
|
19
|
+
const fanout_1 = require("./messaging/fanout");
|
|
20
|
+
const key_protocol_1 = require("./messaging/key-protocol");
|
|
21
|
+
const participants_1 = require("./messaging/participants");
|
|
15
22
|
const WaMediaTransferClient_1 = require("../media/WaMediaTransferClient");
|
|
16
23
|
const incoming_1 = require("../message/incoming");
|
|
17
24
|
const WaMessageClient_1 = require("../message/WaMessageClient");
|
|
18
25
|
const constants_1 = require("../protocol/constants");
|
|
26
|
+
const tracker_1 = require("../retry/tracker");
|
|
19
27
|
const SignalDeviceSyncApi_1 = require("../signal/api/SignalDeviceSyncApi");
|
|
20
28
|
const SignalDigestSyncApi_1 = require("../signal/api/SignalDigestSyncApi");
|
|
21
29
|
const SignalIdentitySyncApi_1 = require("../signal/api/SignalIdentitySyncApi");
|
|
@@ -23,13 +31,38 @@ const SignalMissingPreKeysSyncApi_1 = require("../signal/api/SignalMissingPreKey
|
|
|
23
31
|
const SignalRotateKeyApi_1 = require("../signal/api/SignalRotateKeyApi");
|
|
24
32
|
const SignalSessionSyncApi_1 = require("../signal/api/SignalSessionSyncApi");
|
|
25
33
|
const SenderKeyManager_1 = require("../signal/group/SenderKeyManager");
|
|
34
|
+
const resolver_1 = require("../signal/session/resolver");
|
|
26
35
|
const SignalProtocol_1 = require("../signal/session/SignalProtocol");
|
|
27
36
|
const WaKeepAlive_1 = require("../transport/keepalive/WaKeepAlive");
|
|
37
|
+
const usync_1 = require("../transport/node/usync");
|
|
28
38
|
const WaNodeOrchestrator_1 = require("../transport/node/WaNodeOrchestrator");
|
|
29
39
|
const WaNodeTransport_1 = require("../transport/node/WaNodeTransport");
|
|
40
|
+
const proxy_1 = require("../transport/proxy");
|
|
30
41
|
const primitives_1 = require("../util/primitives");
|
|
31
42
|
const runtime_1 = require("../util/runtime");
|
|
43
|
+
function assertProxyTransport(value, path) {
|
|
44
|
+
if (value === undefined) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
if (!(0, proxy_1.isProxyTransport)(value)) {
|
|
48
|
+
throw new Error(`${path} must be a proxy transport instance (dispatcher with dispatch(...) or agent with addRequest(...))`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
function validateProxyOptions(options) {
|
|
52
|
+
const rawProxy = options.proxy;
|
|
53
|
+
if (rawProxy === undefined) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
if (typeof rawProxy !== 'object' || rawProxy === null || Array.isArray(rawProxy)) {
|
|
57
|
+
throw new Error('proxy must be an object with optional ws/mediaUpload/mediaDownload');
|
|
58
|
+
}
|
|
59
|
+
const proxy = rawProxy;
|
|
60
|
+
assertProxyTransport(proxy?.ws, 'proxy.ws');
|
|
61
|
+
assertProxyTransport(proxy?.mediaUpload, 'proxy.mediaUpload');
|
|
62
|
+
assertProxyTransport(proxy?.mediaDownload, 'proxy.mediaDownload');
|
|
63
|
+
}
|
|
32
64
|
function resolveWaClientBase(options, logger) {
|
|
65
|
+
validateProxyOptions(options);
|
|
33
66
|
const deviceBrowser = options.deviceBrowser ?? constants_1.WA_DEFAULTS.DEVICE_BROWSER;
|
|
34
67
|
const sessionId = options.sessionId.trim();
|
|
35
68
|
if (sessionId.length === 0) {
|
|
@@ -61,79 +94,39 @@ function resolveWaClientBase(options, logger) {
|
|
|
61
94
|
sessionStore
|
|
62
95
|
};
|
|
63
96
|
}
|
|
64
|
-
function createAuthClient(input) {
|
|
65
|
-
const { options, logger, sessionStore, host } = input;
|
|
66
|
-
return new WaAuthClient_1.WaAuthClient({
|
|
67
|
-
deviceBrowser: options.deviceBrowser,
|
|
68
|
-
deviceOsDisplayName: options.deviceOsDisplayName,
|
|
69
|
-
devicePlatform: options.devicePlatform,
|
|
70
|
-
requireFullSync: options.requireFullSync
|
|
71
|
-
}, {
|
|
72
|
-
logger,
|
|
73
|
-
authStore: sessionStore.auth,
|
|
74
|
-
signalStore: sessionStore.signal,
|
|
75
|
-
socket: {
|
|
76
|
-
sendNode: host.sendNode,
|
|
77
|
-
query: host.query
|
|
78
|
-
},
|
|
79
|
-
callbacks: {
|
|
80
|
-
onQr: (qr, ttlMs) => host.emitEvent('auth_qr', { qr, ttlMs }),
|
|
81
|
-
onPairingCode: (code) => host.emitEvent('auth_pairing_code', { code }),
|
|
82
|
-
onPairingRefresh: (forceManual) => host.emitEvent('auth_pairing_refresh', { forceManual }),
|
|
83
|
-
onPaired: (credentials) => {
|
|
84
|
-
host.emitEvent('auth_paired', { credentials });
|
|
85
|
-
host.scheduleReconnectAfterPairing();
|
|
86
|
-
},
|
|
87
|
-
onError: (error) => host.handleError(error)
|
|
88
|
-
}
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
function createCurrentAuthGetters(authClient) {
|
|
92
|
-
const getCurrentCredentials = () => authClient.getCurrentCredentials();
|
|
93
|
-
return {
|
|
94
|
-
getCurrentCredentials,
|
|
95
|
-
getCurrentMeJid: () => getCurrentCredentials()?.meJid,
|
|
96
|
-
getCurrentMeLid: () => getCurrentCredentials()?.meLid,
|
|
97
|
-
getCurrentSignedIdentity: () => getCurrentCredentials()?.signedIdentity
|
|
98
|
-
};
|
|
99
|
-
}
|
|
100
97
|
function createIncomingMessageAckOptions(input) {
|
|
101
|
-
const { logger,
|
|
98
|
+
const { logger, sendNode, emitEvent, handleIncomingMessageEvent, handleError, getCurrentMeJid, signalProtocol, senderKeyManager, retryCoordinator } = input;
|
|
102
99
|
return {
|
|
103
100
|
logger,
|
|
104
|
-
sendNode
|
|
101
|
+
sendNode,
|
|
105
102
|
getMeJid: getCurrentMeJid,
|
|
106
103
|
signalProtocol,
|
|
107
104
|
senderKeyManager,
|
|
108
105
|
onDecryptFailure: (context, error) => retryCoordinator.onDecryptFailure(context, error),
|
|
109
106
|
emitIncomingMessage: (event) => {
|
|
110
|
-
void
|
|
111
|
-
.handleIncomingMessageEvent(event)
|
|
112
|
-
.catch((err) => host.handleError((0, primitives_1.toError)(err)));
|
|
107
|
+
void handleIncomingMessageEvent(event).catch((err) => handleError((0, primitives_1.toError)(err)));
|
|
113
108
|
},
|
|
114
|
-
emitUnhandledStanza: (event) =>
|
|
109
|
+
emitUnhandledStanza: (event) => emitEvent('stanza_unhandled', event)
|
|
115
110
|
};
|
|
116
111
|
}
|
|
117
112
|
function createHandleClientDirtyBits(input) {
|
|
118
|
-
const { logger,
|
|
113
|
+
const { logger, queryWithContext, syncAppState, getCurrentCredentials, generateUsyncSid } = input;
|
|
119
114
|
return (dirtyBits) => (0, dirty_1.handleDirtyBits)({
|
|
120
115
|
logger,
|
|
121
|
-
queryWithContext
|
|
116
|
+
queryWithContext,
|
|
122
117
|
getCurrentCredentials,
|
|
123
|
-
syncAppState
|
|
118
|
+
syncAppState,
|
|
119
|
+
generateUsyncSid
|
|
124
120
|
}, dirtyBits);
|
|
125
121
|
}
|
|
126
122
|
function createIncomingNodeRuntime(input) {
|
|
127
|
-
const { logger,
|
|
123
|
+
const { logger, emitEvent, authClient, connectionManager, nodeOrchestrator, streamControl, mediaMessageBuildOptions, retryCoordinator, messageDispatch, sendNode, syncAppState, disconnect, clearStoredCredentials, getCurrentMeJid, handleClientDirtyBits, incomingMessageAckOptions } = input;
|
|
128
124
|
return {
|
|
129
125
|
handleStreamControlResult: streamControl.handleStreamControlResult,
|
|
130
126
|
persistSuccessAttributes: (attributes) => authClient.persistSuccessAttributes(attributes),
|
|
131
|
-
emitSuccessNode: (node) =>
|
|
132
|
-
updateClockSkewFromSuccess:
|
|
133
|
-
shouldWarmupMediaConn: () =>
|
|
134
|
-
const comms = host.getComms();
|
|
135
|
-
return !!(getCurrentMeJid() && comms && comms.getCommsState().connected);
|
|
136
|
-
},
|
|
127
|
+
emitSuccessNode: (node) => emitEvent('connection_success', { node }),
|
|
128
|
+
updateClockSkewFromSuccess: (serverUnixSeconds) => connectionManager.updateClockSkewFromSuccess(serverUnixSeconds),
|
|
129
|
+
shouldWarmupMediaConn: () => !!(getCurrentMeJid() && connectionManager.isConnected()),
|
|
137
130
|
warmupMediaConn: async () => {
|
|
138
131
|
await (0, messages_1.getMediaConn)(mediaMessageBuildOptions, true);
|
|
139
132
|
},
|
|
@@ -144,18 +137,18 @@ function createIncomingNodeRuntime(input) {
|
|
|
144
137
|
handleLinkCodeNotificationNode: (node) => authClient.handleLinkCodeNotification(node),
|
|
145
138
|
handleCompanionRegRefreshNotificationNode: (node) => authClient.handleCompanionRegRefreshNotification(node),
|
|
146
139
|
handleIncomingMessageNode: (node) => (0, incoming_1.handleIncomingMessageAck)(node, incomingMessageAckOptions),
|
|
147
|
-
sendNode
|
|
140
|
+
sendNode,
|
|
148
141
|
handleIncomingRetryReceipt: (node) => retryCoordinator.handleIncomingRetryReceipt(node),
|
|
149
142
|
trackOutboundReceipt: (node) => retryCoordinator.trackOutboundReceipt(node),
|
|
150
|
-
emitIncomingReceipt: (event) =>
|
|
151
|
-
emitIncomingPresence: (event) =>
|
|
152
|
-
emitIncomingChatstate: (event) =>
|
|
153
|
-
emitIncomingCall: (event) =>
|
|
154
|
-
emitIncomingFailure: (event) =>
|
|
155
|
-
emitIncomingErrorStanza: (event) =>
|
|
156
|
-
emitIncomingNotification: (event) =>
|
|
143
|
+
emitIncomingReceipt: (event) => emitEvent('message_receipt', event),
|
|
144
|
+
emitIncomingPresence: (event) => emitEvent('presence', event),
|
|
145
|
+
emitIncomingChatstate: (event) => emitEvent('chatstate', event),
|
|
146
|
+
emitIncomingCall: (event) => emitEvent('call', event),
|
|
147
|
+
emitIncomingFailure: (event) => emitEvent('failure', event),
|
|
148
|
+
emitIncomingErrorStanza: (event) => emitEvent('stanza_error', event),
|
|
149
|
+
emitIncomingNotification: (event) => emitEvent('notification', event),
|
|
157
150
|
emitGroupEvent: (event) => {
|
|
158
|
-
|
|
151
|
+
emitEvent('group_event', event);
|
|
159
152
|
void messageDispatch.mutateParticipantsCacheFromGroupEvent(event).catch((error) => {
|
|
160
153
|
logger.warn('failed to mutate participants cache from group event', {
|
|
161
154
|
action: event.action,
|
|
@@ -165,29 +158,35 @@ function createIncomingNodeRuntime(input) {
|
|
|
165
158
|
});
|
|
166
159
|
});
|
|
167
160
|
},
|
|
168
|
-
emitUnhandledIncomingNode: (event) =>
|
|
169
|
-
syncAppState
|
|
170
|
-
disconnect
|
|
171
|
-
clearStoredCredentials
|
|
161
|
+
emitUnhandledIncomingNode: (event) => emitEvent('stanza_unhandled', event),
|
|
162
|
+
syncAppState,
|
|
163
|
+
disconnect,
|
|
164
|
+
clearStoredCredentials,
|
|
172
165
|
parseDirtyBits: (nodes) => (0, dirty_1.parseDirtyBits)(nodes, logger),
|
|
173
166
|
handleDirtyBits: (dirtyBits) => handleClientDirtyBits(dirtyBits)
|
|
174
167
|
};
|
|
175
168
|
}
|
|
176
169
|
function createPassiveTasksRuntime(input) {
|
|
177
|
-
const {
|
|
170
|
+
const { queryWithContext, authClient, nodeOrchestrator, receiptQueue, getCurrentCredentials } = input;
|
|
178
171
|
return {
|
|
179
|
-
queryWithContext
|
|
172
|
+
queryWithContext,
|
|
180
173
|
getCurrentCredentials,
|
|
181
174
|
persistServerHasPreKeys: (serverHasPreKeys) => authClient.persistServerHasPreKeys(serverHasPreKeys),
|
|
182
175
|
sendNodeDirect: (node) => nodeOrchestrator.sendNode(node),
|
|
183
|
-
takeDanglingReceipts:
|
|
184
|
-
requeueDanglingReceipt:
|
|
185
|
-
shouldQueueDanglingReceipt:
|
|
176
|
+
takeDanglingReceipts: () => receiptQueue.take(),
|
|
177
|
+
requeueDanglingReceipt: (node) => receiptQueue.enqueue(node),
|
|
178
|
+
shouldQueueDanglingReceipt: (node, error) => receiptQueue.shouldQueue(node, error)
|
|
186
179
|
};
|
|
187
180
|
}
|
|
188
181
|
function buildWaClientDependencies(input) {
|
|
189
|
-
const { base,
|
|
182
|
+
const { base, runtime } = input;
|
|
190
183
|
const { options, logger, sessionStore } = base;
|
|
184
|
+
const receiptQueue = new WaReceiptQueue_1.WaReceiptQueue();
|
|
185
|
+
const keyShareCoordinator = new WaKeyShareCoordinator_1.WaKeyShareCoordinator();
|
|
186
|
+
let connectionManager = null;
|
|
187
|
+
let passiveTasks = null;
|
|
188
|
+
let mediaConnCacheFallback = null;
|
|
189
|
+
let scheduleReconnectAfterPairing = () => undefined;
|
|
191
190
|
const nodeTransport = new WaNodeTransport_1.WaNodeTransport(logger);
|
|
192
191
|
const nodeOrchestrator = new WaNodeOrchestrator_1.WaNodeOrchestrator({
|
|
193
192
|
sendNode: async (node) => nodeTransport.sendNode(node),
|
|
@@ -198,27 +197,39 @@ function buildWaClientDependencies(input) {
|
|
|
198
197
|
const keepAlive = new WaKeepAlive_1.WaKeepAlive({
|
|
199
198
|
logger,
|
|
200
199
|
nodeOrchestrator,
|
|
201
|
-
getComms:
|
|
200
|
+
getComms: () => connectionManager?.getComms() ?? null,
|
|
202
201
|
intervalMs: options.keepAliveIntervalMs,
|
|
203
202
|
timeoutMs: options.deadSocketTimeoutMs,
|
|
204
203
|
hostDomain: constants_1.WA_DEFAULTS.HOST_DOMAIN
|
|
205
204
|
});
|
|
206
205
|
const mediaTransfer = new WaMediaTransferClient_1.WaMediaTransferClient({
|
|
207
206
|
logger,
|
|
208
|
-
defaultTimeoutMs: options.mediaTimeoutMs
|
|
207
|
+
defaultTimeoutMs: options.mediaTimeoutMs,
|
|
208
|
+
defaultUploadDispatcher: (0, proxy_1.toProxyDispatcher)(options.proxy?.mediaUpload),
|
|
209
|
+
defaultDownloadDispatcher: (0, proxy_1.toProxyDispatcher)(options.proxy?.mediaDownload),
|
|
210
|
+
defaultUploadAgent: (0, proxy_1.toProxyAgent)(options.proxy?.mediaUpload),
|
|
211
|
+
defaultDownloadAgent: (0, proxy_1.toProxyAgent)(options.proxy?.mediaDownload)
|
|
209
212
|
});
|
|
210
213
|
const mediaMessageBuildOptions = {
|
|
211
214
|
logger,
|
|
212
215
|
mediaTransfer,
|
|
213
216
|
iqTimeoutMs: options.iqTimeoutMs,
|
|
214
|
-
queryWithContext:
|
|
215
|
-
getMediaConnCache:
|
|
216
|
-
|
|
217
|
+
queryWithContext: runtime.queryWithContext,
|
|
218
|
+
getMediaConnCache: () => {
|
|
219
|
+
if (connectionManager) {
|
|
220
|
+
return connectionManager.getMediaConnCache();
|
|
221
|
+
}
|
|
222
|
+
return mediaConnCacheFallback;
|
|
223
|
+
},
|
|
224
|
+
setMediaConnCache: (mediaConn) => {
|
|
225
|
+
mediaConnCacheFallback = mediaConn;
|
|
226
|
+
connectionManager?.setMediaConnCache(mediaConn);
|
|
227
|
+
}
|
|
217
228
|
};
|
|
218
229
|
const messageClient = new WaMessageClient_1.WaMessageClient({
|
|
219
230
|
logger,
|
|
220
|
-
sendNode:
|
|
221
|
-
query:
|
|
231
|
+
sendNode: runtime.sendNode,
|
|
232
|
+
query: runtime.query,
|
|
222
233
|
defaultAckTimeoutMs: options.messageAckTimeoutMs,
|
|
223
234
|
defaultMaxAttempts: options.messageMaxAttempts,
|
|
224
235
|
defaultRetryDelayMs: options.messageRetryDelayMs
|
|
@@ -227,56 +238,112 @@ function buildWaClientDependencies(input) {
|
|
|
227
238
|
const signalProtocol = new SignalProtocol_1.SignalProtocol(sessionStore.signal, logger);
|
|
228
239
|
const signalDigestSync = new SignalDigestSyncApi_1.SignalDigestSyncApi({
|
|
229
240
|
logger,
|
|
230
|
-
query:
|
|
241
|
+
query: runtime.query,
|
|
231
242
|
signalStore: sessionStore.signal,
|
|
232
243
|
defaultTimeoutMs: options.signalFetchKeyBundlesTimeoutMs
|
|
233
244
|
});
|
|
245
|
+
const generateUsyncSid = (0, usync_1.createUsyncSidGenerator)();
|
|
234
246
|
const signalDeviceSync = new SignalDeviceSyncApi_1.SignalDeviceSyncApi({
|
|
235
247
|
logger,
|
|
236
|
-
query:
|
|
248
|
+
query: runtime.query,
|
|
237
249
|
deviceListStore: sessionStore.deviceList,
|
|
238
|
-
defaultTimeoutMs: options.signalFetchKeyBundlesTimeoutMs
|
|
250
|
+
defaultTimeoutMs: options.signalFetchKeyBundlesTimeoutMs,
|
|
251
|
+
generateSid: generateUsyncSid
|
|
239
252
|
});
|
|
240
253
|
const signalIdentitySync = new SignalIdentitySyncApi_1.SignalIdentitySyncApi({
|
|
241
254
|
logger,
|
|
242
|
-
query:
|
|
255
|
+
query: runtime.query,
|
|
243
256
|
signalStore: sessionStore.signal,
|
|
244
257
|
defaultTimeoutMs: options.signalFetchKeyBundlesTimeoutMs
|
|
245
258
|
});
|
|
246
259
|
const signalMissingPreKeysSync = new SignalMissingPreKeysSyncApi_1.SignalMissingPreKeysSyncApi({
|
|
247
260
|
logger,
|
|
248
|
-
query:
|
|
261
|
+
query: runtime.query,
|
|
249
262
|
defaultTimeoutMs: options.signalFetchKeyBundlesTimeoutMs
|
|
250
263
|
});
|
|
251
264
|
const signalRotateKey = new SignalRotateKeyApi_1.SignalRotateKeyApi({
|
|
252
265
|
logger,
|
|
253
|
-
query:
|
|
266
|
+
query: runtime.query,
|
|
254
267
|
signalStore: sessionStore.signal,
|
|
255
268
|
defaultTimeoutMs: options.signalFetchKeyBundlesTimeoutMs
|
|
256
269
|
});
|
|
257
270
|
const signalSessionSync = new SignalSessionSyncApi_1.SignalSessionSyncApi({
|
|
258
271
|
logger,
|
|
259
|
-
query:
|
|
272
|
+
query: runtime.query,
|
|
260
273
|
defaultTimeoutMs: options.signalFetchKeyBundlesTimeoutMs
|
|
261
274
|
});
|
|
262
|
-
const authClient =
|
|
263
|
-
|
|
275
|
+
const authClient = new WaAuthClient_1.WaAuthClient({
|
|
276
|
+
deviceBrowser: options.deviceBrowser,
|
|
277
|
+
deviceOsDisplayName: options.deviceOsDisplayName,
|
|
278
|
+
devicePlatform: options.devicePlatform,
|
|
279
|
+
requireFullSync: options.requireFullSync
|
|
280
|
+
}, {
|
|
281
|
+
logger,
|
|
282
|
+
authStore: sessionStore.auth,
|
|
283
|
+
signalStore: sessionStore.signal,
|
|
284
|
+
socket: {
|
|
285
|
+
sendNode: runtime.sendNode,
|
|
286
|
+
query: runtime.query
|
|
287
|
+
},
|
|
288
|
+
callbacks: {
|
|
289
|
+
onQr: (qr, ttlMs) => runtime.emitEvent('auth_qr', { qr, ttlMs }),
|
|
290
|
+
onPairingCode: (code) => runtime.emitEvent('auth_pairing_code', { code }),
|
|
291
|
+
onPairingRefresh: (forceManual) => runtime.emitEvent('auth_pairing_refresh', { forceManual }),
|
|
292
|
+
onPaired: (credentials) => {
|
|
293
|
+
runtime.emitEvent('auth_paired', { credentials });
|
|
294
|
+
scheduleReconnectAfterPairing();
|
|
295
|
+
},
|
|
296
|
+
onError: (error) => runtime.handleError(error)
|
|
297
|
+
}
|
|
298
|
+
});
|
|
299
|
+
const getCurrentCredentials = authClient.getCurrentCredentials.bind(authClient);
|
|
300
|
+
const getCurrentMeJid = () => getCurrentCredentials()?.meJid;
|
|
301
|
+
const getCurrentMeLid = () => getCurrentCredentials()?.meLid;
|
|
302
|
+
const getCurrentSignedIdentity = () => getCurrentCredentials()?.signedIdentity;
|
|
264
303
|
const groupCoordinator = (0, WaGroupCoordinator_1.createGroupCoordinator)({
|
|
265
|
-
queryWithContext:
|
|
304
|
+
queryWithContext: runtime.queryWithContext
|
|
266
305
|
});
|
|
267
|
-
const
|
|
268
|
-
logger,
|
|
269
|
-
messageClient,
|
|
306
|
+
const retryTracker = (0, tracker_1.createOutboundRetryTracker)({
|
|
270
307
|
retryStore: sessionStore.retry,
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
senderKeyManager,
|
|
308
|
+
logger
|
|
309
|
+
});
|
|
310
|
+
const sessionResolver = (0, resolver_1.createSignalSessionResolver)({
|
|
275
311
|
signalProtocol,
|
|
276
312
|
signalStore: sessionStore.signal,
|
|
277
|
-
signalDeviceSync,
|
|
278
313
|
signalIdentitySync,
|
|
279
314
|
signalSessionSync,
|
|
315
|
+
logger
|
|
316
|
+
});
|
|
317
|
+
const fanoutResolver = (0, fanout_1.createDeviceFanoutResolver)({
|
|
318
|
+
signalDeviceSync,
|
|
319
|
+
getCurrentMeJid,
|
|
320
|
+
getCurrentMeLid,
|
|
321
|
+
logger
|
|
322
|
+
});
|
|
323
|
+
const participantsCache = (0, participants_1.createGroupParticipantsCache)({
|
|
324
|
+
participantsStore: sessionStore.participants,
|
|
325
|
+
queryGroupParticipantJids: async (groupJid) => (await groupCoordinator.queryGroupMetadata(groupJid)).participants.map((participant) => participant.jid),
|
|
326
|
+
logger
|
|
327
|
+
});
|
|
328
|
+
let messageDispatch;
|
|
329
|
+
const appStateSyncKeyProtocol = (0, key_protocol_1.createAppStateSyncKeyProtocol)({
|
|
330
|
+
publishSignalMessage: (signalInput, publishOptions) => messageDispatch.publishSignalMessage(signalInput, publishOptions),
|
|
331
|
+
fanoutResolver,
|
|
332
|
+
getCurrentMeJid,
|
|
333
|
+
getCurrentMeLid,
|
|
334
|
+
logger
|
|
335
|
+
});
|
|
336
|
+
messageDispatch = new WaMessageDispatchCoordinator_1.WaMessageDispatchCoordinator({
|
|
337
|
+
logger,
|
|
338
|
+
messageClient,
|
|
339
|
+
retryTracker,
|
|
340
|
+
sessionResolver,
|
|
341
|
+
fanoutResolver,
|
|
342
|
+
participantsCache,
|
|
343
|
+
appStateSyncKeyProtocol,
|
|
344
|
+
buildMessageContent: async (content) => (0, messages_1.buildMediaMessageContent)(mediaMessageBuildOptions, content),
|
|
345
|
+
senderKeyManager,
|
|
346
|
+
signalProtocol,
|
|
280
347
|
getCurrentMeJid,
|
|
281
348
|
getCurrentMeLid,
|
|
282
349
|
getCurrentSignedIdentity
|
|
@@ -290,32 +357,70 @@ function buildWaClientDependencies(input) {
|
|
|
290
357
|
signalDeviceSync,
|
|
291
358
|
signalMissingPreKeysSync,
|
|
292
359
|
messageClient,
|
|
293
|
-
sendNode:
|
|
360
|
+
sendNode: runtime.sendNode,
|
|
294
361
|
getCurrentMeJid,
|
|
295
362
|
getCurrentMeLid,
|
|
296
363
|
getCurrentSignedIdentity
|
|
297
364
|
});
|
|
298
365
|
const appStateSync = new WaAppStateSyncClient_1.WaAppStateSyncClient({
|
|
299
366
|
logger,
|
|
300
|
-
query:
|
|
367
|
+
query: runtime.query,
|
|
368
|
+
getCurrentMeJid,
|
|
301
369
|
defaultTimeoutMs: options.appStateSyncTimeoutMs,
|
|
302
370
|
store: sessionStore.appState,
|
|
303
371
|
onMissingKeys: async ({ keyIds }) => {
|
|
304
372
|
await messageDispatch.requestAppStateSyncKeys(keyIds);
|
|
305
373
|
}
|
|
306
374
|
});
|
|
375
|
+
const appStateMutations = new WaAppStateMutationCoordinator_1.WaAppStateMutationCoordinator({
|
|
376
|
+
logger,
|
|
377
|
+
messageStore: sessionStore.messages,
|
|
378
|
+
syncAppState: runtime.syncAppStateWithOptions
|
|
379
|
+
});
|
|
380
|
+
connectionManager = new WaConnectionManager_1.WaConnectionManager({
|
|
381
|
+
logger,
|
|
382
|
+
options,
|
|
383
|
+
authClient,
|
|
384
|
+
keepAlive,
|
|
385
|
+
nodeOrchestrator,
|
|
386
|
+
nodeTransport,
|
|
387
|
+
getPassiveTasks: () => passiveTasks,
|
|
388
|
+
clearStoredCredentials: runtime.clearStoredState
|
|
389
|
+
});
|
|
390
|
+
if (mediaConnCacheFallback !== null) {
|
|
391
|
+
connectionManager.setMediaConnCache(mediaConnCacheFallback);
|
|
392
|
+
}
|
|
393
|
+
scheduleReconnectAfterPairing = () => connectionManager?.scheduleReconnectAfterPairing();
|
|
394
|
+
const disconnectWithClientSideEffects = async () => {
|
|
395
|
+
keyShareCoordinator.notifyDisconnected();
|
|
396
|
+
await connectionManager?.disconnect();
|
|
397
|
+
runtime.emitEvent('connection_close', {});
|
|
398
|
+
};
|
|
399
|
+
const connectWithClientSideEffects = async () => {
|
|
400
|
+
await connectionManager?.connect(runtime.handleIncomingFrame);
|
|
401
|
+
runtime.emitEvent('connection_open', {});
|
|
402
|
+
};
|
|
403
|
+
const clearStoredCredentialsWithClientSideEffects = async () => {
|
|
404
|
+
await connectionManager?.clearStoredCredentials();
|
|
405
|
+
};
|
|
307
406
|
const streamControl = (0, WaStreamControlCoordinator_1.createStreamControlHandler)({
|
|
308
407
|
logger,
|
|
309
|
-
getComms:
|
|
408
|
+
getComms: () => connectionManager?.getComms() ?? null,
|
|
310
409
|
clearPendingQueries: (error) => nodeOrchestrator.clearPending(error),
|
|
311
|
-
clearMediaConnCache: () =>
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
410
|
+
clearMediaConnCache: () => {
|
|
411
|
+
mediaConnCacheFallback = null;
|
|
412
|
+
connectionManager?.setMediaConnCache(null);
|
|
413
|
+
},
|
|
414
|
+
disconnect: disconnectWithClientSideEffects,
|
|
415
|
+
clearStoredCredentials: clearStoredCredentialsWithClientSideEffects,
|
|
416
|
+
connect: connectWithClientSideEffects
|
|
315
417
|
});
|
|
316
418
|
const incomingMessageAckOptions = createIncomingMessageAckOptions({
|
|
317
419
|
logger,
|
|
318
|
-
|
|
420
|
+
sendNode: runtime.sendNode,
|
|
421
|
+
emitEvent: runtime.emitEvent,
|
|
422
|
+
handleIncomingMessageEvent: runtime.handleIncomingMessageEvent,
|
|
423
|
+
handleError: runtime.handleError,
|
|
319
424
|
getCurrentMeJid,
|
|
320
425
|
signalProtocol,
|
|
321
426
|
senderKeyManager,
|
|
@@ -323,34 +428,42 @@ function buildWaClientDependencies(input) {
|
|
|
323
428
|
});
|
|
324
429
|
const handleClientDirtyBits = createHandleClientDirtyBits({
|
|
325
430
|
logger,
|
|
326
|
-
|
|
327
|
-
|
|
431
|
+
queryWithContext: runtime.queryWithContext,
|
|
432
|
+
syncAppState: runtime.syncAppState,
|
|
433
|
+
getCurrentCredentials,
|
|
434
|
+
generateUsyncSid
|
|
328
435
|
});
|
|
329
436
|
const incomingNode = new WaIncomingNodeCoordinator_1.WaIncomingNodeCoordinator({
|
|
330
437
|
logger,
|
|
331
438
|
runtime: createIncomingNodeRuntime({
|
|
332
439
|
logger,
|
|
333
|
-
|
|
440
|
+
emitEvent: runtime.emitEvent,
|
|
334
441
|
authClient,
|
|
442
|
+
connectionManager,
|
|
335
443
|
nodeOrchestrator,
|
|
336
444
|
streamControl,
|
|
337
445
|
mediaMessageBuildOptions,
|
|
338
446
|
retryCoordinator,
|
|
339
447
|
messageDispatch,
|
|
448
|
+
sendNode: runtime.sendNode,
|
|
449
|
+
syncAppState: runtime.syncAppState,
|
|
450
|
+
disconnect: disconnectWithClientSideEffects,
|
|
451
|
+
clearStoredCredentials: clearStoredCredentialsWithClientSideEffects,
|
|
340
452
|
getCurrentMeJid,
|
|
341
453
|
handleClientDirtyBits,
|
|
342
454
|
incomingMessageAckOptions
|
|
343
455
|
})
|
|
344
456
|
});
|
|
345
|
-
|
|
457
|
+
passiveTasks = new WaPassiveTasksCoordinator_1.WaPassiveTasksCoordinator({
|
|
346
458
|
logger,
|
|
347
459
|
signalStore: sessionStore.signal,
|
|
348
460
|
signalDigestSync,
|
|
349
461
|
signalRotateKey,
|
|
350
462
|
runtime: createPassiveTasksRuntime({
|
|
351
|
-
|
|
463
|
+
queryWithContext: runtime.queryWithContext,
|
|
352
464
|
authClient,
|
|
353
465
|
nodeOrchestrator,
|
|
466
|
+
receiptQueue,
|
|
354
467
|
getCurrentCredentials
|
|
355
468
|
})
|
|
356
469
|
});
|
|
@@ -373,9 +486,13 @@ function buildWaClientDependencies(input) {
|
|
|
373
486
|
messageDispatch,
|
|
374
487
|
retryCoordinator,
|
|
375
488
|
appStateSync,
|
|
489
|
+
appStateMutations,
|
|
376
490
|
streamControl,
|
|
377
491
|
incomingNode,
|
|
378
492
|
passiveTasks,
|
|
379
|
-
groupCoordinator
|
|
493
|
+
groupCoordinator,
|
|
494
|
+
receiptQueue,
|
|
495
|
+
keyShareCoordinator,
|
|
496
|
+
connectionManager
|
|
380
497
|
};
|
|
381
498
|
}
|