zapo-js 0.2.0 → 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 +7 -3
- package/dist/appstate/WaAppStateCrypto.js +49 -41
- package/dist/appstate/WaAppStateSyncClient.js +79 -42
- package/dist/appstate/index.js +2 -2
- package/dist/auth/WaAuthClient.js +20 -11
- package/dist/auth/{flow/WaAuthCredentialsFlow.js → credentials-flow.js} +83 -18
- package/dist/auth/pairing/WaPairingFlow.js +26 -29
- package/dist/auth/pairing/{WaPairingCodeCrypto.js → pairing-code-crypto.js} +29 -13
- package/dist/client/WaClient.js +115 -75
- package/dist/client/WaClientFactory.js +113 -30
- package/dist/client/connection/WaConnectionManager.js +4 -1
- package/dist/client/coordinators/WaAbPropsCoordinator.js +141 -0
- package/dist/client/coordinators/WaBusinessCoordinator.js +3 -12
- package/dist/client/coordinators/WaEmailCoordinator.js +63 -0
- package/dist/client/coordinators/WaIncomingNodeCoordinator.js +33 -8
- package/dist/client/coordinators/WaMessageDispatchCoordinator.js +55 -25
- package/dist/client/coordinators/WaOfflineResumeCoordinator.js +114 -0
- package/dist/client/coordinators/WaPassiveTasksCoordinator.js +38 -20
- package/dist/client/coordinators/WaProfileCoordinator.js +3 -1
- package/dist/client/coordinators/WaRetryCoordinator.js +11 -9
- package/dist/client/coordinators/WaTrustedContactTokenCoordinator.js +22 -4
- package/dist/client/dirty.js +1 -1
- package/dist/client/events/abprops.js +43 -0
- package/dist/client/events/privacy-token.js +1 -2
- package/dist/client/events/registration.js +42 -0
- package/dist/client/incoming.js +37 -0
- package/dist/client/mailbox.js +17 -1
- package/dist/client/media.js +243 -0
- package/dist/client/messages.js +163 -86
- package/dist/crypto/core/index.js +4 -1
- package/dist/crypto/core/random.js +3 -9
- package/dist/crypto/core/xeddsa.js +57 -0
- package/dist/crypto/curves/X25519.js +18 -0
- package/dist/crypto/curves/constants.js +2 -1
- package/dist/esm/appstate/WaAppStateCrypto.js +39 -31
- package/dist/esm/appstate/WaAppStateSyncClient.js +68 -31
- package/dist/esm/appstate/index.js +1 -1
- package/dist/esm/appstate/{WaAppStateSyncResponseParser.js → response-parser.js} +1 -1
- package/dist/esm/auth/WaAuthClient.js +17 -8
- package/dist/esm/auth/{flow/WaAuthCredentialsFlow.js → credentials-flow.js} +83 -18
- package/dist/esm/auth/pairing/WaPairingFlow.js +25 -28
- package/dist/esm/auth/pairing/{WaPairingCodeCrypto.js → pairing-code-crypto.js} +20 -6
- package/dist/esm/client/WaClient.js +116 -76
- package/dist/esm/client/WaClientFactory.js +114 -31
- package/dist/esm/client/connection/WaConnectionManager.js +4 -1
- package/dist/esm/client/coordinators/WaAbPropsCoordinator.js +137 -0
- package/dist/esm/client/coordinators/WaBusinessCoordinator.js +4 -13
- package/dist/esm/client/coordinators/WaEmailCoordinator.js +60 -0
- package/dist/esm/client/coordinators/WaIncomingNodeCoordinator.js +35 -10
- package/dist/esm/client/coordinators/WaMessageDispatchCoordinator.js +47 -17
- package/dist/esm/client/coordinators/WaOfflineResumeCoordinator.js +110 -0
- package/dist/esm/client/coordinators/WaPassiveTasksCoordinator.js +38 -20
- package/dist/esm/client/coordinators/WaProfileCoordinator.js +3 -1
- package/dist/esm/client/coordinators/WaRetryCoordinator.js +11 -9
- package/dist/esm/client/coordinators/WaTrustedContactTokenCoordinator.js +24 -6
- package/dist/esm/client/dirty.js +1 -1
- package/dist/esm/client/events/abprops.js +40 -0
- package/dist/esm/client/events/privacy-token.js +1 -2
- package/dist/esm/client/events/registration.js +39 -0
- package/dist/esm/client/incoming.js +36 -0
- package/dist/esm/client/mailbox.js +17 -1
- package/dist/esm/client/media.js +234 -0
- package/dist/esm/client/messages.js +162 -85
- package/dist/esm/crypto/core/index.js +1 -0
- package/dist/esm/crypto/core/random.js +2 -7
- package/dist/esm/crypto/core/xeddsa.js +53 -0
- package/dist/esm/crypto/curves/X25519.js +20 -2
- package/dist/esm/crypto/curves/constants.js +1 -0
- package/dist/esm/infra/perf/StoreLock.js +7 -4
- package/dist/esm/media/WaMediaCrypto.js +257 -62
- package/dist/esm/media/WaMediaTransferClient.js +47 -190
- package/dist/esm/media/constants.js +2 -0
- package/dist/esm/media/processor.js +1 -0
- package/dist/esm/message/addon-crypto.js +130 -3
- package/dist/esm/message/content.js +12 -6
- package/dist/esm/message/icdc.js +8 -8
- package/dist/esm/message/incoming.js +14 -12
- package/dist/esm/message/phash.js +32 -12
- package/dist/esm/message/reporting-token.js +3 -3
- package/dist/esm/message/use-case-secret.js +1 -1
- package/dist/esm/protocol/abprops.js +159 -0
- package/dist/esm/protocol/browser.js +14 -0
- package/dist/esm/protocol/constants.js +3 -1
- package/dist/esm/protocol/email.js +30 -0
- package/dist/esm/protocol/jid.js +44 -10
- package/dist/esm/protocol/nodes.js +6 -2
- package/dist/esm/protocol/notification.js +7 -1
- package/dist/esm/retry/reason.js +1 -1
- package/dist/esm/signal/api/SignalDeviceSyncApi.js +5 -2
- package/dist/esm/signal/api/SignalDigestSyncApi.js +8 -6
- package/dist/esm/signal/api/SignalIdentitySyncApi.js +4 -4
- package/dist/esm/signal/api/SignalMissingPreKeysSyncApi.js +1 -1
- package/dist/esm/signal/api/SignalSessionSyncApi.js +1 -1
- package/dist/esm/signal/crypto/WaAdvSignature.js +5 -51
- package/dist/esm/signal/crypto/constants.js +0 -4
- package/dist/esm/signal/encoding.js +11 -54
- package/dist/esm/signal/group/SenderKeyChain.js +3 -3
- package/dist/esm/signal/group/SenderKeyCodec.js +5 -6
- package/dist/esm/signal/group/SenderKeyManager.js +13 -10
- package/dist/esm/signal/registration/keygen.js +2 -3
- package/dist/esm/signal/registration/utils.js +2 -2
- package/dist/esm/signal/session/SignalProtocol.js +18 -17
- 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 +6 -6
- 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/session.store.js +1 -0
- package/dist/esm/store/createStore.js +48 -12
- package/dist/esm/store/index.js +4 -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/pre-key.lock.js +27 -0
- package/dist/esm/store/locks/session.lock.js +19 -0
- package/dist/esm/store/locks/signal.lock.js +0 -24
- package/dist/esm/store/noop.store.js +20 -0
- package/dist/esm/store/providers/memory/device-list.store.js +3 -0
- 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/retry.store.js +25 -11
- package/dist/esm/store/providers/memory/session.store.js +45 -0
- package/dist/esm/store/providers/memory/signal.store.js +1 -164
- package/dist/esm/transport/WaComms.js +4 -3
- package/dist/esm/transport/WaWebSocket.js +9 -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 +17 -8
- package/dist/esm/transport/node/builders/abprops.js +20 -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/offline.js +14 -0
- 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 +19 -23
- package/dist/esm/transport/node/builders/retry.js +1 -1
- package/dist/esm/transport/node/helpers.js +24 -0
- 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/noise/WaClientPayload.js +15 -10
- 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 +12 -11
- package/dist/infra/perf/StoreLock.js +7 -4
- package/dist/media/WaMediaCrypto.js +253 -58
- package/dist/media/WaMediaTransferClient.js +50 -223
- package/dist/media/constants.js +3 -1
- package/dist/media/processor.js +2 -0
- package/dist/message/addon-crypto.js +131 -0
- package/dist/message/content.js +13 -5
- package/dist/message/icdc.js +8 -8
- package/dist/message/incoming.js +14 -12
- package/dist/message/phash.js +32 -12
- package/dist/message/reporting-token.js +2 -2
- package/dist/message/use-case-secret.js +1 -1
- package/dist/protocol/abprops.js +163 -0
- package/dist/protocol/browser.js +15 -0
- package/dist/protocol/constants.js +14 -2
- package/dist/protocol/email.js +33 -0
- package/dist/protocol/jid.js +45 -10
- package/dist/protocol/nodes.js +6 -2
- package/dist/protocol/notification.js +8 -2
- package/dist/retry/reason.js +1 -1
- package/dist/signal/api/SignalDeviceSyncApi.js +5 -2
- package/dist/signal/api/SignalDigestSyncApi.js +8 -6
- package/dist/signal/api/SignalIdentitySyncApi.js +4 -4
- package/dist/signal/crypto/WaAdvSignature.js +2 -50
- package/dist/signal/crypto/constants.js +1 -5
- package/dist/signal/encoding.js +11 -49
- package/dist/signal/group/SenderKeyChain.js +2 -2
- package/dist/signal/group/SenderKeyCodec.js +4 -5
- package/dist/signal/group/SenderKeyManager.js +12 -9
- package/dist/signal/registration/keygen.js +1 -2
- package/dist/signal/registration/utils.js +2 -2
- package/dist/signal/session/SignalProtocol.js +18 -17
- 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 +6 -6
- 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/session.store.js +2 -0
- package/dist/store/createStore.js +47 -11
- package/dist/store/index.js +9 -1
- package/dist/store/locks/identity.lock.js +19 -0
- package/dist/store/locks/message-secret.lock.js +20 -0
- package/dist/store/locks/pre-key.lock.js +30 -0
- package/dist/store/locks/session.lock.js +22 -0
- package/dist/store/locks/signal.lock.js +0 -24
- package/dist/store/noop.store.js +21 -1
- package/dist/store/providers/memory/device-list.store.js +3 -0
- 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/retry.store.js +24 -10
- package/dist/store/providers/memory/session.store.js +49 -0
- package/dist/store/providers/memory/signal.store.js +1 -164
- package/dist/transport/WaComms.js +4 -3
- package/dist/transport/WaWebSocket.js +9 -1
- 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 +16 -7
- package/dist/transport/node/builders/abprops.js +23 -0
- package/dist/transport/node/builders/device.js +14 -0
- package/dist/transport/node/builders/email.js +72 -0
- package/dist/transport/node/builders/offline.js +17 -0
- 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 +18 -22
- package/dist/transport/node/builders/retry.js +1 -1
- package/dist/transport/node/helpers.js +26 -0
- 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/noise/WaClientPayload.js +14 -9
- 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 +11 -10
- package/dist/types/appstate/WaAppStateCrypto.d.ts +11 -8
- package/dist/types/appstate/WaAppStateSyncClient.d.ts +6 -2
- package/dist/types/appstate/index.d.ts +1 -1
- 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/auth/WaAuthClient.d.ts +9 -3
- package/dist/types/auth/credentials-flow.d.ts +20 -0
- 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 +40 -0
- package/dist/types/client/WaClient.d.ts +19 -8
- package/dist/types/client/WaClientFactory.d.ts +10 -4
- package/dist/types/client/coordinators/WaAbPropsCoordinator.d.ts +26 -0
- package/dist/types/client/coordinators/WaBusinessCoordinator.d.ts +1 -1
- package/dist/types/client/coordinators/WaEmailCoordinator.d.ts +24 -0
- package/dist/types/client/coordinators/WaIncomingNodeCoordinator.d.ts +6 -1
- package/dist/types/client/coordinators/WaMessageDispatchCoordinator.d.ts +15 -2
- package/dist/types/client/coordinators/WaOfflineResumeCoordinator.d.ts +31 -0
- package/dist/types/client/coordinators/WaPassiveTasksCoordinator.d.ts +13 -2
- package/dist/types/client/coordinators/WaPrivacyCoordinator.d.ts +1 -1
- package/dist/types/client/coordinators/WaProfileCoordinator.d.ts +4 -2
- package/dist/types/client/coordinators/WaRetryCoordinator.d.ts +6 -0
- package/dist/types/client/coordinators/WaTrustedContactTokenCoordinator.d.ts +11 -1
- package/dist/types/client/dirty.d.ts +3 -1
- package/dist/types/client/events/abprops.d.ts +14 -0
- package/dist/types/client/events/registration.d.ts +17 -0
- package/dist/types/client/incoming.d.ts +6 -1
- package/dist/types/client/mailbox.d.ts +2 -0
- package/dist/types/client/media.d.ts +31 -0
- package/dist/types/client/messages.d.ts +2 -0
- package/dist/types/client/persistence/WriteBehindPersistence.d.ts +1 -1
- package/dist/types/client/types.d.ts +100 -1
- package/dist/types/crypto/core/index.d.ts +1 -0
- package/dist/types/crypto/core/primitives.d.ts +1 -1
- package/dist/types/crypto/core/random.d.ts +1 -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 +1 -0
- package/dist/types/index.d.ts +2 -1
- 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/StoreLock.d.ts +1 -0
- package/dist/types/media/WaMediaCrypto.d.ts +15 -6
- package/dist/types/media/WaMediaTransferClient.d.ts +3 -11
- package/dist/types/media/constants.d.ts +2 -0
- package/dist/types/media/index.d.ts +1 -0
- package/dist/types/media/processor.d.ts +28 -0
- package/dist/types/media/types.d.ts +9 -3
- package/dist/types/message/addon-crypto.d.ts +34 -3
- package/dist/types/message/content.d.ts +3 -1
- package/dist/types/message/icdc.d.ts +4 -4
- package/dist/types/message/types.d.ts +16 -24
- package/dist/types/protocol/abprops.d.ts +142 -0
- package/dist/types/protocol/browser.d.ts +1 -0
- package/dist/types/protocol/constants.d.ts +5 -1
- package/dist/types/protocol/email.d.ts +32 -0
- package/dist/types/protocol/jid.d.ts +1 -0
- package/dist/types/protocol/nodes.d.ts +4 -0
- package/dist/types/protocol/notification.d.ts +6 -0
- package/dist/types/protocol/stream.d.ts +1 -0
- package/dist/types/retry/reason.d.ts +1 -1
- package/dist/types/signal/api/SignalDigestSyncApi.d.ts +3 -0
- package/dist/types/signal/api/SignalIdentitySyncApi.d.ts +3 -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/encoding.d.ts +7 -1
- package/dist/types/signal/group/SenderKeyChain.d.ts +1 -1
- package/dist/types/signal/group/SenderKeyManager.d.ts +7 -2
- package/dist/types/signal/registration/utils.d.ts +2 -1
- package/dist/types/signal/session/SignalProtocol.d.ts +11 -2
- package/dist/types/signal/session/SignalSerializer.d.ts +2 -1
- package/dist/types/signal/session/resolver.d.ts +4 -2
- package/dist/types/signal/types.d.ts +16 -4
- 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/session.store.d.ts +14 -0
- package/dist/types/store/contracts/signal.store.d.ts +1 -34
- package/dist/types/store/index.d.ts +9 -1
- 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/pre-key.lock.d.ts +3 -0
- package/dist/types/store/locks/session.lock.d.ts +3 -0
- package/dist/types/store/noop.store.d.ts +4 -0
- 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/retry.store.d.ts +7 -1
- package/dist/types/store/providers/memory/session.store.d.ts +21 -0
- package/dist/types/store/providers/memory/signal.store.d.ts +3 -45
- package/dist/types/store/providers/memory/thread.store.d.ts +1 -1
- package/dist/types/store/types.d.ts +21 -1
- package/dist/types/transport/WaWebSocket.d.ts +1 -0
- 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 +6 -2
- package/dist/types/transport/node/builders/abprops.d.ts +5 -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/offline.d.ts +2 -0
- 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/helpers.d.ts +3 -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 +1 -0
- package/dist/types/transport/types.d.ts +8 -0
- package/package.json +6 -4
- package/dist/auth/pairing/constants.js +0 -5
- package/dist/client/connection/WaKeyShareCoordinator.js +0 -63
- package/dist/esm/auth/pairing/constants.js +0 -2
- package/dist/esm/client/connection/WaKeyShareCoordinator.js +0 -59
- package/dist/esm/transport/node/builders/index.js +0 -11
- package/dist/transport/node/builders/index.js +0 -51
- 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/transport/node/builders/index.d.ts +0 -11
- /package/dist/appstate/{WaAppStateSyncResponseParser.js → response-parser.js} +0 -0
package/dist/client/WaClient.js
CHANGED
|
@@ -9,12 +9,16 @@ const mailbox_1 = require("./mailbox");
|
|
|
9
9
|
const WriteBehindPersistence_1 = require("./persistence/WriteBehindPersistence");
|
|
10
10
|
const WaClientFactory_1 = require("./WaClientFactory");
|
|
11
11
|
const ConsoleLogger_1 = require("../infra/log/ConsoleLogger");
|
|
12
|
+
const addon_crypto_1 = require("../message/addon-crypto");
|
|
12
13
|
const _proto_1 = require("../proto.js");
|
|
13
14
|
const constants_1 = require("../protocol/constants");
|
|
14
15
|
const jid_1 = require("../protocol/jid");
|
|
16
|
+
const stream_1 = require("../protocol/stream");
|
|
17
|
+
const noop_store_1 = require("../store/noop.store");
|
|
18
|
+
const device_1 = require("../transport/node/builders/device");
|
|
19
|
+
const presence_1 = require("../transport/node/builders/presence");
|
|
15
20
|
const query_1 = require("../transport/node/query");
|
|
16
21
|
const bytes_1 = require("../util/bytes");
|
|
17
|
-
const bytes_2 = require("../util/bytes");
|
|
18
22
|
const primitives_1 = require("../util/primitives");
|
|
19
23
|
const SYNC_RELATED_PROTOCOL_TYPES = new Set([
|
|
20
24
|
_proto_1.proto.Message.ProtocolMessage.Type.APP_STATE_SYNC_KEY_REQUEST,
|
|
@@ -22,8 +26,6 @@ const SYNC_RELATED_PROTOCOL_TYPES = new Set([
|
|
|
22
26
|
_proto_1.proto.Message.ProtocolMessage.Type.PEER_DATA_OPERATION_REQUEST_MESSAGE,
|
|
23
27
|
_proto_1.proto.Message.ProtocolMessage.Type.PEER_DATA_OPERATION_REQUEST_RESPONSE_MESSAGE
|
|
24
28
|
]);
|
|
25
|
-
const WA_APP_STATE_KEY_SHARE_WAIT_TIMEOUT_MS = 15000;
|
|
26
|
-
const WA_APP_STATE_KEY_SHARE_MAX_RETRIES = 2;
|
|
27
29
|
class WaClient extends node_events_1.EventEmitter {
|
|
28
30
|
constructor(options, logger = new ConsoleLogger_1.ConsoleLogger('info')) {
|
|
29
31
|
super();
|
|
@@ -37,11 +39,15 @@ class WaClient extends node_events_1.EventEmitter {
|
|
|
37
39
|
this.appStateStore = base.sessionStore.appState;
|
|
38
40
|
this.contactStore = base.sessionStore.contacts;
|
|
39
41
|
this.messageStore = base.sessionStore.messages;
|
|
42
|
+
this.messageSecretStore = base.sessionStore.messageSecret;
|
|
40
43
|
this.participantsStore = base.sessionStore.participants;
|
|
41
44
|
this.privacyTokenStore = base.sessionStore.privacyToken;
|
|
42
45
|
this.deviceListStore = base.sessionStore.deviceList;
|
|
43
46
|
this.retryStore = base.sessionStore.retry;
|
|
44
47
|
this.signalStore = base.sessionStore.signal;
|
|
48
|
+
this.preKeyStore = base.sessionStore.preKey;
|
|
49
|
+
this.sessionStore = base.sessionStore.session;
|
|
50
|
+
this.identityStore = base.sessionStore.identity;
|
|
45
51
|
this.senderKeyStore = base.sessionStore.senderKey;
|
|
46
52
|
this.threadStore = base.sessionStore.threads;
|
|
47
53
|
this.writeBehind = new WriteBehindPersistence_1.WriteBehindPersistence({
|
|
@@ -49,11 +55,16 @@ class WaClient extends node_events_1.EventEmitter {
|
|
|
49
55
|
threadStore: this.threadStore,
|
|
50
56
|
contactStore: this.contactStore
|
|
51
57
|
}, this.logger, this.options.writeBehind);
|
|
58
|
+
if (this.options.addons?.autoDecrypt &&
|
|
59
|
+
this.messageSecretStore === noop_store_1.NOOP_MESSAGE_SECRET_STORE) {
|
|
60
|
+
this.logger.warn('addons.autoDecrypt is enabled but messageSecret cache is noop — ' +
|
|
61
|
+
'addon decryption will only work if secrets are in the message store');
|
|
62
|
+
}
|
|
52
63
|
const dependencies = (0, WaClientFactory_1.buildWaClientDependencies)({
|
|
53
64
|
base,
|
|
54
65
|
runtime: {
|
|
55
66
|
sendNode: (node) => this.sendNode(node),
|
|
56
|
-
query: (node, timeoutMs) => this.query(node, timeoutMs),
|
|
67
|
+
query: (node, timeoutMs, options) => this.query(node, timeoutMs, options),
|
|
57
68
|
queryWithContext: this.queryWithContext.bind(this),
|
|
58
69
|
syncAppState: () => this.syncAppState().then(() => { }),
|
|
59
70
|
syncAppStateWithOptions: (syncOptions) => this.syncAppState(syncOptions),
|
|
@@ -112,12 +123,16 @@ class WaClient extends node_events_1.EventEmitter {
|
|
|
112
123
|
throw normalized;
|
|
113
124
|
}
|
|
114
125
|
}
|
|
115
|
-
async
|
|
126
|
+
async sendPresence(type) {
|
|
127
|
+
const credentials = this.authClient.getCurrentCredentials();
|
|
128
|
+
await this.nodeOrchestrator.sendNode((0, presence_1.buildPresenceNode)({ type, name: credentials?.meDisplayName ?? undefined }), false);
|
|
129
|
+
}
|
|
130
|
+
async query(node, timeoutMs = this.options.iqTimeoutMs ?? constants_1.WA_DEFAULTS.IQ_TIMEOUT_MS, options = {}) {
|
|
116
131
|
if (!this.connectionManager.isConnected()) {
|
|
117
132
|
throw new Error('client is not connected');
|
|
118
133
|
}
|
|
119
134
|
this.logger.debug('wa client query', { tag: node.tag, id: node.attrs.id, timeoutMs });
|
|
120
|
-
return this.nodeOrchestrator.query(node, timeoutMs);
|
|
135
|
+
return this.nodeOrchestrator.query(node, timeoutMs, options);
|
|
121
136
|
}
|
|
122
137
|
registerIncomingHandler(registration) {
|
|
123
138
|
return this.incomingNode.registerIncomingHandler(registration);
|
|
@@ -144,8 +159,17 @@ class WaClient extends node_events_1.EventEmitter {
|
|
|
144
159
|
void (0, mailbox_1.persistIncomingMailboxEntities)({
|
|
145
160
|
logger: this.logger,
|
|
146
161
|
writeBehind: this.writeBehind,
|
|
162
|
+
messageSecretStore: this.messageSecretStore,
|
|
147
163
|
event
|
|
148
164
|
});
|
|
165
|
+
if (this.options.addons?.autoDecrypt && event.message) {
|
|
166
|
+
void this.tryDecryptAddon(event).catch((err) => {
|
|
167
|
+
this.logger.warn('addon auto-decrypt failed', {
|
|
168
|
+
id: event.stanzaId,
|
|
169
|
+
message: (0, primitives_1.toError)(err).message
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
}
|
|
149
173
|
const protocolMessage = event.message?.protocolMessage;
|
|
150
174
|
if (!protocolMessage) {
|
|
151
175
|
return;
|
|
@@ -212,16 +236,6 @@ class WaClient extends node_events_1.EventEmitter {
|
|
|
212
236
|
imported
|
|
213
237
|
});
|
|
214
238
|
if (imported > 0) {
|
|
215
|
-
const hadWaiters = this.keyShareCoordinator.hasWaiters();
|
|
216
|
-
this.keyShareCoordinator.notifyReceived();
|
|
217
|
-
if (hadWaiters) {
|
|
218
|
-
this.logger.debug('app-state key share imported and waiters released', {
|
|
219
|
-
id: event.stanzaId,
|
|
220
|
-
from: event.chatJid,
|
|
221
|
-
imported
|
|
222
|
-
});
|
|
223
|
-
return;
|
|
224
|
-
}
|
|
225
239
|
void this.syncAppState().catch((error) => {
|
|
226
240
|
this.logger.warn('failed to sync app-state after key share import', {
|
|
227
241
|
id: event.stanzaId,
|
|
@@ -320,7 +334,7 @@ class WaClient extends node_events_1.EventEmitter {
|
|
|
320
334
|
for (const key of request.keyIds ?? []) {
|
|
321
335
|
try {
|
|
322
336
|
const keyId = (0, bytes_1.decodeProtoBytes)(key.keyId, 'appStateSyncKeyRequest.keyIds[].keyId');
|
|
323
|
-
const keyHex = (0,
|
|
337
|
+
const keyHex = (0, bytes_1.bytesToHex)(keyId);
|
|
324
338
|
if (deduped.has(keyHex)) {
|
|
325
339
|
continue;
|
|
326
340
|
}
|
|
@@ -362,8 +376,8 @@ class WaClient extends node_events_1.EventEmitter {
|
|
|
362
376
|
});
|
|
363
377
|
}
|
|
364
378
|
}
|
|
365
|
-
async queryWithContext(context, node, timeoutMs = this.options.iqTimeoutMs ?? constants_1.WA_DEFAULTS.IQ_TIMEOUT_MS, contextData = {}) {
|
|
366
|
-
return (0, query_1.queryWithContext)(async (queryNode, queryTimeoutMs) => this.query(queryNode, queryTimeoutMs), this.logger, context, node, timeoutMs, contextData);
|
|
379
|
+
async queryWithContext(context, node, timeoutMs = this.options.iqTimeoutMs ?? constants_1.WA_DEFAULTS.IQ_TIMEOUT_MS, contextData = {}, options = {}) {
|
|
380
|
+
return (0, query_1.queryWithContext)(async (queryNode, queryTimeoutMs) => this.query(queryNode, queryTimeoutMs, options), this.logger, context, node, timeoutMs, contextData);
|
|
367
381
|
}
|
|
368
382
|
async handleIncomingFrame(frame) {
|
|
369
383
|
try {
|
|
@@ -403,7 +417,6 @@ class WaClient extends node_events_1.EventEmitter {
|
|
|
403
417
|
remaining: writeBehindFlush.remaining
|
|
404
418
|
});
|
|
405
419
|
}
|
|
406
|
-
this.keyShareCoordinator.notifyDisconnected();
|
|
407
420
|
await this.connectionManager.disconnect();
|
|
408
421
|
this.emit('connection', {
|
|
409
422
|
status: 'close',
|
|
@@ -413,12 +426,12 @@ class WaClient extends node_events_1.EventEmitter {
|
|
|
413
426
|
isNewLogin: false
|
|
414
427
|
});
|
|
415
428
|
}
|
|
416
|
-
async requestPairingCode(phoneNumber, shouldShowPushNotification = false) {
|
|
429
|
+
async requestPairingCode(phoneNumber, shouldShowPushNotification = false, customCode) {
|
|
417
430
|
if (!this.connectionManager.isConnected() || !this.authClient.getCurrentCredentials()) {
|
|
418
431
|
throw new Error('client is not connected');
|
|
419
432
|
}
|
|
420
433
|
this.logger.debug('wa client request pairing code');
|
|
421
|
-
return this.authClient.requestPairingCode(phoneNumber, shouldShowPushNotification);
|
|
434
|
+
return this.authClient.requestPairingCode(phoneNumber, shouldShowPushNotification, customCode);
|
|
422
435
|
}
|
|
423
436
|
async fetchPairingCountryCodeIso() {
|
|
424
437
|
if (!this.connectionManager.isConnected() || !this.authClient.getCurrentCredentials()) {
|
|
@@ -467,6 +480,22 @@ class WaClient extends node_events_1.EventEmitter {
|
|
|
467
480
|
get business() {
|
|
468
481
|
return this.businessCoordinator;
|
|
469
482
|
}
|
|
483
|
+
get email() {
|
|
484
|
+
return this.emailCoordinator;
|
|
485
|
+
}
|
|
486
|
+
async logout(reason = stream_1.WA_LOGOUT_REASONS.USER_INITIATED) {
|
|
487
|
+
const meJid = this.authClient.getCurrentCredentials()?.meJid;
|
|
488
|
+
if (!meJid) {
|
|
489
|
+
throw new Error('cannot logout: client is not authenticated');
|
|
490
|
+
}
|
|
491
|
+
const deviceJid = (0, jid_1.normalizeDeviceJid)(meJid);
|
|
492
|
+
const node = (0, device_1.buildRemoveCompanionDeviceIq)(deviceJid, reason);
|
|
493
|
+
const result = await this.queryWithContext('client.logout', node, undefined, {
|
|
494
|
+
jid: deviceJid,
|
|
495
|
+
reason
|
|
496
|
+
});
|
|
497
|
+
(0, query_1.assertIqResult)(result, 'client.logout');
|
|
498
|
+
}
|
|
470
499
|
sendReceipt(input) {
|
|
471
500
|
return this.messageDispatch.sendReceipt(input);
|
|
472
501
|
}
|
|
@@ -483,60 +512,11 @@ class WaClient extends node_events_1.EventEmitter {
|
|
|
483
512
|
if (!this.connectionManager.isConnected()) {
|
|
484
513
|
throw new Error('client is not connected');
|
|
485
514
|
}
|
|
486
|
-
const
|
|
487
|
-
|
|
488
|
-
this.keyShareCoordinator.markBootstrapDone();
|
|
489
|
-
this.logger.info('app-state bootstrap pre-sync waiting for key share', {
|
|
490
|
-
timeoutMs: WA_APP_STATE_KEY_SHARE_WAIT_TIMEOUT_MS
|
|
491
|
-
});
|
|
492
|
-
const received = await this.keyShareCoordinator.waitForShare(WA_APP_STATE_KEY_SHARE_WAIT_TIMEOUT_MS);
|
|
493
|
-
if (received) {
|
|
494
|
-
this.logger.info('app-state bootstrap pre-sync received key share, continuing sync');
|
|
495
|
-
}
|
|
496
|
-
else {
|
|
497
|
-
this.logger.warn('app-state bootstrap pre-sync key share wait timed out, continuing sync', {
|
|
498
|
-
timeoutMs: WA_APP_STATE_KEY_SHARE_WAIT_TIMEOUT_MS
|
|
499
|
-
});
|
|
500
|
-
}
|
|
501
|
-
}
|
|
502
|
-
let syncResult = await this.executeAppStateSync(options);
|
|
503
|
-
let blockedCollections = this.getBlockedAppStateCollections(syncResult);
|
|
504
|
-
if (!shouldWaitForKeyShare || blockedCollections.length === 0) {
|
|
505
|
-
this.emitChatEventsFromAppStateSyncResult(syncResult);
|
|
506
|
-
return syncResult;
|
|
507
|
-
}
|
|
508
|
-
let retryCount = 0;
|
|
509
|
-
let observedKeyShareVersion = this.keyShareCoordinator.getVersion();
|
|
510
|
-
while (blockedCollections.length > 0 && retryCount < WA_APP_STATE_KEY_SHARE_MAX_RETRIES) {
|
|
511
|
-
const hasFreshShare = this.keyShareCoordinator.getVersion() !== observedKeyShareVersion;
|
|
512
|
-
if (!hasFreshShare) {
|
|
513
|
-
this.logger.info('app-state bootstrap waiting for key share', {
|
|
514
|
-
blockedCollections: blockedCollections.join(','),
|
|
515
|
-
timeoutMs: WA_APP_STATE_KEY_SHARE_WAIT_TIMEOUT_MS,
|
|
516
|
-
retryCount: retryCount + 1
|
|
517
|
-
});
|
|
518
|
-
const received = await this.keyShareCoordinator.waitForShare(WA_APP_STATE_KEY_SHARE_WAIT_TIMEOUT_MS);
|
|
519
|
-
if (!received) {
|
|
520
|
-
this.logger.warn('app-state bootstrap key share wait timed out', {
|
|
521
|
-
blockedCollections: blockedCollections.join(','),
|
|
522
|
-
timeoutMs: WA_APP_STATE_KEY_SHARE_WAIT_TIMEOUT_MS
|
|
523
|
-
});
|
|
524
|
-
break;
|
|
525
|
-
}
|
|
526
|
-
}
|
|
527
|
-
observedKeyShareVersion = this.keyShareCoordinator.getVersion();
|
|
528
|
-
retryCount += 1;
|
|
529
|
-
this.logger.info('app-state bootstrap retrying sync after key share', {
|
|
530
|
-
retryCount,
|
|
531
|
-
blockedCollections: blockedCollections.join(',')
|
|
532
|
-
});
|
|
533
|
-
syncResult = await this.executeAppStateSync(options);
|
|
534
|
-
blockedCollections = this.getBlockedAppStateCollections(syncResult);
|
|
535
|
-
}
|
|
515
|
+
const syncResult = await this.executeAppStateSync(options);
|
|
516
|
+
const blockedCollections = this.getBlockedAppStateCollections(syncResult);
|
|
536
517
|
if (blockedCollections.length > 0) {
|
|
537
|
-
this.logger.warn('app-state
|
|
538
|
-
blockedCollections: blockedCollections.join(',')
|
|
539
|
-
retries: retryCount
|
|
518
|
+
this.logger.warn('app-state sync has blocked collections', {
|
|
519
|
+
blockedCollections: blockedCollections.join(',')
|
|
540
520
|
});
|
|
541
521
|
}
|
|
542
522
|
this.emitChatEventsFromAppStateSyncResult(syncResult);
|
|
@@ -637,6 +617,8 @@ class WaClient extends node_events_1.EventEmitter {
|
|
|
637
617
|
await this.contactStore.clear();
|
|
638
618
|
if (shouldClear('messages'))
|
|
639
619
|
await this.messageStore.clear();
|
|
620
|
+
if (shouldClear('messageSecret'))
|
|
621
|
+
await this.messageSecretStore.clear();
|
|
640
622
|
if (shouldClear('participants'))
|
|
641
623
|
await this.participantsStore.clear();
|
|
642
624
|
if (shouldClear('deviceList'))
|
|
@@ -645,6 +627,12 @@ class WaClient extends node_events_1.EventEmitter {
|
|
|
645
627
|
await this.retryStore.clear();
|
|
646
628
|
if (shouldClear('signal'))
|
|
647
629
|
await this.signalStore.clear();
|
|
630
|
+
if (shouldClear('preKey'))
|
|
631
|
+
await this.preKeyStore.clear();
|
|
632
|
+
if (shouldClear('session'))
|
|
633
|
+
await this.sessionStore.clear();
|
|
634
|
+
if (shouldClear('identity'))
|
|
635
|
+
await this.identityStore.clear();
|
|
648
636
|
if (shouldClear('senderKey'))
|
|
649
637
|
await this.senderKeyStore.clear();
|
|
650
638
|
if (shouldClear('threads'))
|
|
@@ -652,6 +640,58 @@ class WaClient extends node_events_1.EventEmitter {
|
|
|
652
640
|
if (shouldClear('privacyToken'))
|
|
653
641
|
await this.privacyTokenStore.clear();
|
|
654
642
|
}
|
|
643
|
+
async tryDecryptAddon(event) {
|
|
644
|
+
const message = event.message;
|
|
645
|
+
if (!message)
|
|
646
|
+
return;
|
|
647
|
+
const addon = (0, addon_crypto_1.identifyEncryptedAddon)(message);
|
|
648
|
+
if (!addon)
|
|
649
|
+
return;
|
|
650
|
+
const targetMessageId = addon.targetMessageKey.id;
|
|
651
|
+
if (!targetMessageId)
|
|
652
|
+
return;
|
|
653
|
+
const parentEntry = await (0, addon_crypto_1.resolveParentMessageSecret)(targetMessageId, this.messageSecretStore, this.messageStore);
|
|
654
|
+
if (!parentEntry) {
|
|
655
|
+
this.logger.debug('addon parent message secret not found', {
|
|
656
|
+
id: event.stanzaId,
|
|
657
|
+
targetId: targetMessageId
|
|
658
|
+
});
|
|
659
|
+
return;
|
|
660
|
+
}
|
|
661
|
+
const parentMsgOriginalSender = parentEntry.senderJid;
|
|
662
|
+
const modificationSender = event.senderJid ?? '';
|
|
663
|
+
const plaintext = await (0, addon_crypto_1.decryptAddonPayload)({
|
|
664
|
+
messageSecret: parentEntry.secret,
|
|
665
|
+
stanzaId: targetMessageId,
|
|
666
|
+
parentMsgOriginalSender,
|
|
667
|
+
modificationSender,
|
|
668
|
+
modificationType: addon.modificationType,
|
|
669
|
+
ciphertext: addon.encPayload,
|
|
670
|
+
iv: addon.encIv,
|
|
671
|
+
additionalData: (0, addon_crypto_1.shouldUseAddonAdditionalData)(addon.modificationType)
|
|
672
|
+
? (0, addon_crypto_1.buildAddonAdditionalData)(targetMessageId, modificationSender)
|
|
673
|
+
: undefined
|
|
674
|
+
});
|
|
675
|
+
let decrypted = (0, addon_crypto_1.decodeAddonPlaintext)(addon.kind, plaintext);
|
|
676
|
+
if (decrypted.kind === 'poll_vote' && decrypted.pollVote.selectedOptions) {
|
|
677
|
+
const names = await (0, addon_crypto_1.resolvePollOptionNames)(decrypted.pollVote.selectedOptions, targetMessageId, this.messageStore);
|
|
678
|
+
if (names) {
|
|
679
|
+
decrypted = { ...decrypted, selectedOptionNames: names };
|
|
680
|
+
}
|
|
681
|
+
}
|
|
682
|
+
const addonEvent = {
|
|
683
|
+
rawNode: event.rawNode,
|
|
684
|
+
stanzaId: event.stanzaId,
|
|
685
|
+
chatJid: event.chatJid,
|
|
686
|
+
stanzaType: event.stanzaType,
|
|
687
|
+
kind: addon.kind,
|
|
688
|
+
targetMessageId,
|
|
689
|
+
senderJid: modificationSender,
|
|
690
|
+
decrypted,
|
|
691
|
+
raw: message
|
|
692
|
+
};
|
|
693
|
+
this.emit('message_addon', addonEvent);
|
|
694
|
+
}
|
|
655
695
|
tryEnterIncomingHandler() {
|
|
656
696
|
if (!this.acceptingIncomingEvents) {
|
|
657
697
|
return false;
|