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
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import type { AppStateCollectionName } from '../appstate/types';
|
|
2
|
-
import type { WaAuthClientOptions, WaAuthCredentials, WaAuthSocketOptions } from '../auth/types';
|
|
2
|
+
import type { WaAuthClientOptions, WaAuthCredentials, WaAuthDangerousOptions, WaAuthSocketOptions } from '../auth/types';
|
|
3
|
+
import type { WaMediaProcessor } from '../media/processor';
|
|
4
|
+
import type { WaDecodedAddon } from '../message/addon-crypto';
|
|
3
5
|
import type { WaMessagePublishOptions } from '../message/types';
|
|
4
6
|
import type { Proto } from '..';
|
|
7
|
+
import type { WaConnectionCode, WaConnectionOpenReason, WaDisconnectReason } from '../protocol/stream';
|
|
5
8
|
import type { WaStore } from '../store/types';
|
|
6
9
|
import type { BinaryNode, WaProxyTransport } from '../transport/types';
|
|
7
10
|
export interface WaClientProxyOptions {
|
|
@@ -9,6 +12,23 @@ export interface WaClientProxyOptions {
|
|
|
9
12
|
readonly mediaUpload?: WaProxyTransport;
|
|
10
13
|
readonly mediaDownload?: WaProxyTransport;
|
|
11
14
|
}
|
|
15
|
+
export interface WaLogoutStoreClearOptions {
|
|
16
|
+
readonly auth?: boolean;
|
|
17
|
+
readonly signal?: boolean;
|
|
18
|
+
readonly preKey?: boolean;
|
|
19
|
+
readonly session?: boolean;
|
|
20
|
+
readonly identity?: boolean;
|
|
21
|
+
readonly senderKey?: boolean;
|
|
22
|
+
readonly appState?: boolean;
|
|
23
|
+
readonly retry?: boolean;
|
|
24
|
+
readonly participants?: boolean;
|
|
25
|
+
readonly deviceList?: boolean;
|
|
26
|
+
readonly messages?: boolean;
|
|
27
|
+
readonly messageSecret?: boolean;
|
|
28
|
+
readonly threads?: boolean;
|
|
29
|
+
readonly contacts?: boolean;
|
|
30
|
+
readonly privacyToken?: boolean;
|
|
31
|
+
}
|
|
12
32
|
export interface WaClientOptions extends WaAuthClientOptions, WaAuthSocketOptions {
|
|
13
33
|
readonly store: WaStore;
|
|
14
34
|
readonly sessionId: string;
|
|
@@ -24,10 +44,88 @@ export interface WaClientOptions extends WaAuthClientOptions, WaAuthSocketOption
|
|
|
24
44
|
readonly messageAckTimeoutMs?: number;
|
|
25
45
|
readonly messageMaxAttempts?: number;
|
|
26
46
|
readonly messageRetryDelayMs?: number;
|
|
47
|
+
readonly writeBehind?: WaWriteBehindOptions;
|
|
27
48
|
readonly history?: WaHistorySyncOptions;
|
|
28
49
|
readonly chatEvents?: {
|
|
29
50
|
readonly emitSnapshotMutations?: boolean;
|
|
30
51
|
};
|
|
52
|
+
readonly privacyToken?: WaPrivacyTokenOptions;
|
|
53
|
+
readonly addons?: WaAddonOptions;
|
|
54
|
+
readonly logoutStoreClear?: WaLogoutStoreClearOptions;
|
|
55
|
+
readonly media?: WaMediaOptions;
|
|
56
|
+
/**
|
|
57
|
+
* Test-only overrides intended for running against a fake server.
|
|
58
|
+
*
|
|
59
|
+
* These hooks **do not** bypass any security checks — they only swap in
|
|
60
|
+
* test fixtures (e.g. a different root CA) so the full verification code
|
|
61
|
+
* path still runs end-to-end. If you actually need to skip a check, use
|
|
62
|
+
* `dangerous` instead.
|
|
63
|
+
*/
|
|
64
|
+
readonly testHooks?: WaClientTestHooks;
|
|
65
|
+
/**
|
|
66
|
+
* Dangerous escape hatches. **Do not enable in production.** Each flag here
|
|
67
|
+
* disables a security check the production code path enforces.
|
|
68
|
+
*/
|
|
69
|
+
readonly dangerous?: WaClientDangerousOptions;
|
|
70
|
+
}
|
|
71
|
+
export interface WaClientDangerousOptions extends WaAuthDangerousOptions {
|
|
72
|
+
/**
|
|
73
|
+
* Skip the XEdDSA signature check on incoming group sender-key messages.
|
|
74
|
+
* Ciphertexts will be decrypted even if the trailing signature does not
|
|
75
|
+
* verify against the stored sender signing public key.
|
|
76
|
+
*/
|
|
77
|
+
readonly disableSenderKeySignatureVerification?: boolean;
|
|
78
|
+
/**
|
|
79
|
+
* Skip HMAC verification across the app-state sync pipeline: per-mutation
|
|
80
|
+
* value and index MACs, snapshot MACs, and patch MACs. Tampered server
|
|
81
|
+
* payloads will be accepted as long as the ciphertext decrypts cleanly.
|
|
82
|
+
*/
|
|
83
|
+
readonly disableAppStateMacVerification?: boolean;
|
|
84
|
+
/**
|
|
85
|
+
* Skip the truncated HMAC-SHA256 check on encrypted media payloads
|
|
86
|
+
* during download. Tampered ciphertexts will still be decrypted.
|
|
87
|
+
*/
|
|
88
|
+
readonly disableMediaMacVerification?: boolean;
|
|
89
|
+
}
|
|
90
|
+
export interface WaClientTestHooks {
|
|
91
|
+
/**
|
|
92
|
+
* Override the noise certificate-chain root CA used to verify the
|
|
93
|
+
* server's static key during the handshake.
|
|
94
|
+
*
|
|
95
|
+
* The default is the production WhatsApp root. Tests against a fake
|
|
96
|
+
* server inject the fake server's ephemeral root here so that the lib
|
|
97
|
+
* still runs the full certificate-verification code path against a
|
|
98
|
+
* chain signed by a known key — no validation logic is bypassed.
|
|
99
|
+
*/
|
|
100
|
+
readonly noiseRootCa?: WaNoiseRootCaOverride;
|
|
101
|
+
}
|
|
102
|
+
export interface WaNoiseRootCaOverride {
|
|
103
|
+
/** Serialized X25519 public key (32 bytes raw, no version prefix). */
|
|
104
|
+
readonly publicKey: Uint8Array;
|
|
105
|
+
/** Serial number that intermediate certificates issued by this root must declare. */
|
|
106
|
+
readonly serial: number;
|
|
107
|
+
}
|
|
108
|
+
export interface WaMediaOptions {
|
|
109
|
+
readonly processor?: WaMediaProcessor;
|
|
110
|
+
readonly generateThumbnail?: boolean;
|
|
111
|
+
readonly generateProbe?: boolean;
|
|
112
|
+
readonly generateWaveform?: boolean;
|
|
113
|
+
readonly generateStickerThumbnail?: boolean;
|
|
114
|
+
}
|
|
115
|
+
export interface WaAddonOptions {
|
|
116
|
+
readonly autoDecrypt?: boolean;
|
|
117
|
+
}
|
|
118
|
+
export interface WaPrivacyTokenOptions {
|
|
119
|
+
readonly tcTokenDurationS?: number;
|
|
120
|
+
readonly tcTokenNumBuckets?: number;
|
|
121
|
+
readonly tcTokenSenderDurationS?: number;
|
|
122
|
+
readonly tcTokenSenderNumBuckets?: number;
|
|
123
|
+
readonly tcTokenMaxDurationS?: number;
|
|
124
|
+
}
|
|
125
|
+
export interface WaWriteBehindOptions {
|
|
126
|
+
readonly maxPendingKeys?: number;
|
|
127
|
+
readonly maxWriteConcurrency?: number;
|
|
128
|
+
readonly flushTimeoutMs?: number;
|
|
31
129
|
}
|
|
32
130
|
export interface WaHistorySyncOptions {
|
|
33
131
|
readonly enabled?: boolean;
|
|
@@ -47,6 +145,7 @@ export interface WaSignalMessagePublishInput {
|
|
|
47
145
|
export interface WaSendMessageOptions extends WaMessagePublishOptions {
|
|
48
146
|
readonly id?: string;
|
|
49
147
|
readonly expectedIdentity?: Uint8Array;
|
|
148
|
+
readonly subtype?: string;
|
|
50
149
|
}
|
|
51
150
|
export interface WaClearChatOptions {
|
|
52
151
|
readonly deleteStarred?: boolean;
|
|
@@ -106,6 +205,26 @@ export interface WaIncomingNotificationEvent extends WaIncomingBaseEvent {
|
|
|
106
205
|
readonly classification?: 'core' | 'out_of_scope' | 'unknown' | 'info_bulletin';
|
|
107
206
|
readonly details?: Readonly<Record<string, unknown>>;
|
|
108
207
|
}
|
|
208
|
+
export interface WaRegistrationCodeEvent extends WaIncomingBaseEvent {
|
|
209
|
+
readonly code: string;
|
|
210
|
+
readonly expiryTimestampMs: number;
|
|
211
|
+
readonly fromDeviceId: string;
|
|
212
|
+
}
|
|
213
|
+
export interface WaAccountTakeoverNoticeEvent extends WaIncomingBaseEvent {
|
|
214
|
+
readonly serverToken: string;
|
|
215
|
+
readonly attemptTimestampMs: number;
|
|
216
|
+
readonly newDeviceName?: string;
|
|
217
|
+
readonly newDevicePlatform?: string;
|
|
218
|
+
readonly newDeviceAppVersion?: string;
|
|
219
|
+
}
|
|
220
|
+
export type WaAddonKind = 'reaction' | 'poll_vote' | 'event_response' | 'comment';
|
|
221
|
+
export interface WaIncomingAddonEvent extends WaIncomingBaseEvent {
|
|
222
|
+
readonly kind: WaAddonKind;
|
|
223
|
+
readonly targetMessageId: string;
|
|
224
|
+
readonly senderJid: string;
|
|
225
|
+
readonly decrypted: WaDecodedAddon;
|
|
226
|
+
readonly raw: Proto.IMessage;
|
|
227
|
+
}
|
|
109
228
|
export interface WaIncomingFailureEvent extends WaIncomingBaseEvent {
|
|
110
229
|
readonly failureReason?: number;
|
|
111
230
|
readonly failureCode?: number;
|
|
@@ -201,7 +320,19 @@ export interface WaChatEvent {
|
|
|
201
320
|
readonly locked?: boolean;
|
|
202
321
|
readonly deviceAgentId?: string;
|
|
203
322
|
}
|
|
204
|
-
export type
|
|
323
|
+
export type WaConnectionEvent = {
|
|
324
|
+
readonly status: 'open';
|
|
325
|
+
readonly reason: WaConnectionOpenReason;
|
|
326
|
+
readonly code: null;
|
|
327
|
+
readonly isLogout: false;
|
|
328
|
+
readonly isNewLogin: boolean;
|
|
329
|
+
} | {
|
|
330
|
+
readonly status: 'close';
|
|
331
|
+
readonly reason: WaDisconnectReason;
|
|
332
|
+
readonly code: WaConnectionCode | null;
|
|
333
|
+
readonly isLogout: boolean;
|
|
334
|
+
readonly isNewLogin: false;
|
|
335
|
+
};
|
|
205
336
|
export interface WaClientEventMap {
|
|
206
337
|
readonly auth_qr: (event: {
|
|
207
338
|
readonly qr: string;
|
|
@@ -222,8 +353,7 @@ export interface WaClientEventMap {
|
|
|
222
353
|
readonly client_error: (event: {
|
|
223
354
|
readonly error: Error;
|
|
224
355
|
}) => void;
|
|
225
|
-
readonly
|
|
226
|
-
readonly connection_close: (event: WaEmptyEvent) => void;
|
|
356
|
+
readonly connection: (event: WaConnectionEvent) => void;
|
|
227
357
|
readonly transport_frame_in: (event: {
|
|
228
358
|
readonly frame: Uint8Array;
|
|
229
359
|
}) => void;
|
|
@@ -243,16 +373,33 @@ export interface WaClientEventMap {
|
|
|
243
373
|
readonly frame: Uint8Array;
|
|
244
374
|
}) => void;
|
|
245
375
|
readonly message: (event: WaIncomingMessageEvent) => void;
|
|
376
|
+
readonly message_addon: (event: WaIncomingAddonEvent) => void;
|
|
246
377
|
readonly message_protocol: (event: WaIncomingProtocolMessageEvent) => void;
|
|
247
378
|
readonly message_receipt: (event: WaIncomingReceiptEvent) => void;
|
|
248
379
|
readonly presence: (event: WaIncomingPresenceEvent) => void;
|
|
249
380
|
readonly chatstate: (event: WaIncomingChatstateEvent) => void;
|
|
250
381
|
readonly call: (event: WaIncomingCallEvent) => void;
|
|
251
382
|
readonly notification: (event: WaIncomingNotificationEvent) => void;
|
|
383
|
+
readonly registration_code_received: (event: WaRegistrationCodeEvent) => void;
|
|
384
|
+
readonly account_takeover_notice: (event: WaAccountTakeoverNoticeEvent) => void;
|
|
252
385
|
readonly failure: (event: WaIncomingFailureEvent) => void;
|
|
253
386
|
readonly stanza_error: (event: WaIncomingBaseEvent) => void;
|
|
254
387
|
readonly stanza_unhandled: (event: WaIncomingUnhandledStanzaEvent) => void;
|
|
255
388
|
readonly group_event: (event: WaGroupEvent) => void;
|
|
256
389
|
readonly chat_event: (event: WaChatEvent) => void;
|
|
257
390
|
readonly history_sync_chunk: (event: WaHistorySyncChunkEvent) => void;
|
|
391
|
+
readonly privacy_token_update: (event: WaPrivacyTokenUpdateEvent) => void;
|
|
392
|
+
readonly offline_resume: (event: WaOfflineResumeEvent) => void;
|
|
393
|
+
}
|
|
394
|
+
export interface WaOfflineResumeEvent {
|
|
395
|
+
readonly status: 'resuming' | 'complete';
|
|
396
|
+
readonly totalStanzas: number;
|
|
397
|
+
readonly remainingStanzas: number;
|
|
398
|
+
readonly forced: boolean;
|
|
399
|
+
}
|
|
400
|
+
export interface WaPrivacyTokenUpdateEvent {
|
|
401
|
+
readonly jid: string;
|
|
402
|
+
readonly timestampS: number;
|
|
403
|
+
readonly type: string;
|
|
404
|
+
readonly source: 'notification' | 'history_sync';
|
|
258
405
|
}
|
|
@@ -6,5 +6,6 @@ export { X25519 } from '../curves/X25519';
|
|
|
6
6
|
export { hkdf, hkdfSplit } from '../core/hkdf';
|
|
7
7
|
export { toSerializedPubKey, toRawPubKey, prependVersion, readVersionedContent } from '../core/keys';
|
|
8
8
|
export { buildNonce } from '../core/nonce';
|
|
9
|
-
export { randomBytesAsync, randomIntAsync } from '../core/random';
|
|
10
|
-
export { type CryptoKey, sha1, sha256, sha512, importAesGcmKey, aesGcmEncrypt, aesGcmDecrypt, importAesCbcKey, aesCbcEncrypt, aesCbcDecrypt, importHmacKey, importHmacSha512Key, hmacSign, pbkdf2DeriveAesCtrKey, aesCtrEncrypt, aesCtrDecrypt
|
|
9
|
+
export { randomBytesAsync, randomFillAsync, randomIntAsync } from '../core/random';
|
|
10
|
+
export { type CryptoKey, sha1, sha256, sha512, importAesGcmKey, aesGcmEncrypt, aesGcmDecrypt, importAesCbcKey, aesCbcEncrypt, aesCbcDecrypt, importHmacKey, importHmacSha512Key, hmacSign, pbkdf2DeriveAesCtrKey, aesCtrEncrypt, aesCtrDecrypt } from '../core/primitives';
|
|
11
|
+
export { xeddsaSign, xeddsaVerify } from '../core/xeddsa';
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Builds a 12-byte nonce for AES-GCM encryption with counter in the last 4 bytes.
|
|
3
|
+
* Allocates a new buffer per call because concurrent Noise encrypt/decrypt operations
|
|
4
|
+
* may hold references to different nonces simultaneously.
|
|
3
5
|
* Throws if counter exceeds uint32 range to prevent nonce reuse.
|
|
4
6
|
*/
|
|
5
7
|
export declare function buildNonce(counter: number): Uint8Array;
|
|
@@ -9,7 +9,7 @@ export type CryptoKey = webcrypto.CryptoKey;
|
|
|
9
9
|
export declare function sha256(value: Uint8Array): Promise<Uint8Array>;
|
|
10
10
|
export declare function sha1(value: Uint8Array): Promise<Uint8Array>;
|
|
11
11
|
export declare function sha512(value: Uint8Array): Promise<Uint8Array>;
|
|
12
|
-
export declare function md5Bytes(input: string): Uint8Array;
|
|
12
|
+
export declare function md5Bytes(input: string | Uint8Array): Uint8Array;
|
|
13
13
|
export declare function importAesGcmKey(raw: Uint8Array, usages: ('encrypt' | 'decrypt')[]): Promise<webcrypto.CryptoKey>;
|
|
14
14
|
export declare function aesGcmEncrypt(key: webcrypto.CryptoKey, nonce: Uint8Array, plaintext: Uint8Array, aad?: Uint8Array): Promise<Uint8Array>;
|
|
15
15
|
export declare function aesGcmDecrypt(key: webcrypto.CryptoKey, nonce: Uint8Array, ciphertext: Uint8Array, aad?: Uint8Array): Promise<Uint8Array>;
|
|
@@ -22,4 +22,3 @@ export declare function hmacSign(key: webcrypto.CryptoKey, data: Uint8Array): Pr
|
|
|
22
22
|
export declare function pbkdf2DeriveAesCtrKey(password: Uint8Array, salt: Uint8Array, iterations: number): Promise<CryptoKey>;
|
|
23
23
|
export declare function aesCtrEncrypt(key: CryptoKey, counter: Uint8Array, plaintext: Uint8Array): Promise<Uint8Array>;
|
|
24
24
|
export declare function aesCtrDecrypt(key: CryptoKey, counter: Uint8Array, ciphertext: Uint8Array): Promise<Uint8Array>;
|
|
25
|
-
export declare function ed25519VerifyRaw(publicKey: Uint8Array, signature: Uint8Array, message: Uint8Array): Promise<boolean>;
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
export declare function
|
|
1
|
+
export declare function randomFillAsync(target: Uint8Array, offset?: number, size?: number): Promise<Uint8Array>;
|
|
2
2
|
export declare const randomIntAsync: (min: number, max: number) => Promise<number>;
|
|
3
|
+
export declare const randomBytesAsync: (size: number) => Promise<Uint8Array>;
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import { type Fe } from '../math/fe';
|
|
1
2
|
import type { ExtendedPoint } from '../math/types';
|
|
2
3
|
export declare const FIELD_P: bigint;
|
|
3
4
|
export declare const GROUP_L: bigint;
|
|
4
|
-
export declare const
|
|
5
|
-
export declare const
|
|
5
|
+
export declare const FE_TWO_D: Fe;
|
|
6
|
+
export declare const FE_ZERO: Fe;
|
|
7
|
+
export declare const FE_ONE: Fe;
|
|
6
8
|
export declare const BASE_POINT: ExtendedPoint;
|
|
7
9
|
export declare const IDENTITY_POINT: ExtendedPoint;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Field element arithmetic for GF(2^255-19).
|
|
3
|
+
* Representation: 16 limbs of 16 bits in Float64Array (tweetnacl style).
|
|
4
|
+
* Hot-path operations are allocation-free using pre-allocated temporaries.
|
|
5
|
+
*/
|
|
6
|
+
export type Fe = Float64Array;
|
|
7
|
+
export declare function fe(): Fe;
|
|
8
|
+
export declare function feCopy(o: Fe, a: Fe): void;
|
|
9
|
+
export declare function feFromBigInt(n: bigint): Fe;
|
|
10
|
+
export declare function feToBigInt(a: Fe): bigint;
|
|
11
|
+
export declare function feFromBytes(o: Fe, s: Uint8Array): void;
|
|
12
|
+
export declare function fePack(o: Uint8Array, n: Fe): void;
|
|
13
|
+
export declare function feAdd(o: Fe, a: Fe, b: Fe): void;
|
|
14
|
+
export declare function feSub(o: Fe, a: Fe, b: Fe): void;
|
|
15
|
+
export declare function feNeg(o: Fe, a: Fe): void;
|
|
16
|
+
/**
|
|
17
|
+
* Fully unrolled field multiplication with folded reduction.
|
|
18
|
+
* Computes o = a * b mod (2^255-19) using negacyclic convolution:
|
|
19
|
+
* t[i] = Σ a[j]*b[i-j] (direct) + 38 * Σ a[j]*b[i+16-j] (wrapped)
|
|
20
|
+
* All values in local variables for register allocation.
|
|
21
|
+
*/
|
|
22
|
+
export declare function feMul(o: Fe, a: Fe, b: Fe): void;
|
|
23
|
+
/**
|
|
24
|
+
* Fully unrolled field squaring with folded reduction and symmetry.
|
|
25
|
+
* Exploits a[j]*a[k] == a[k]*a[j] to halve off-diagonal multiplications.
|
|
26
|
+
* Combined with negacyclic reduction: wrapped terms use a38[k] = 38*a[k].
|
|
27
|
+
*/
|
|
28
|
+
export declare function feSqr(o: Fe, a: Fe): void;
|
|
29
|
+
export declare function feSqrN(o: Fe, a: Fe, n: number): void;
|
|
30
|
+
export declare function feInv(o: Fe, a: Fe): void;
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import { FIELD_P, GROUP_L } from '../math/constants';
|
|
2
|
-
export { FIELD_P, GROUP_L };
|
|
3
1
|
export declare function mod(value: bigint, modulus?: bigint): bigint;
|
|
4
2
|
export declare function modGroup(value: bigint): bigint;
|
|
5
3
|
export declare function modInv(value: bigint, modulus?: bigint): bigint;
|
|
@@ -1,6 +1,13 @@
|
|
|
1
|
+
import type { Fe } from '../math/fe';
|
|
1
2
|
export interface ExtendedPoint {
|
|
2
|
-
readonly x:
|
|
3
|
-
readonly y:
|
|
4
|
-
readonly z:
|
|
5
|
-
readonly t:
|
|
3
|
+
readonly x: Fe;
|
|
4
|
+
readonly y: Fe;
|
|
5
|
+
readonly z: Fe;
|
|
6
|
+
readonly t: Fe;
|
|
7
|
+
}
|
|
8
|
+
export interface MutablePoint {
|
|
9
|
+
x: Fe;
|
|
10
|
+
y: Fe;
|
|
11
|
+
z: Fe;
|
|
12
|
+
t: Fe;
|
|
6
13
|
}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
export { WaClient } from '@client';
|
|
2
|
-
export type { WaClientEventMap, WaClientOptions, WaClientProxyOptions, WaHistorySyncChunkEvent, WaHistorySyncOptions } from '@client';
|
|
2
|
+
export type { WaClientEventMap, WaClientOptions, WaClientProxyOptions, WaHistorySyncChunkEvent, WaHistorySyncOptions, WaWriteBehindOptions } from '@client';
|
|
3
|
+
export type { WaBlocklistResult, WaPrivacyCoordinator, WaPrivacyDisallowedListResult, WaPrivacySettings } from './client/coordinators/WaPrivacyCoordinator';
|
|
4
|
+
export type { WaAuthCredentials } from './auth/types';
|
|
3
5
|
export { ConsoleLogger } from './infra/log/ConsoleLogger';
|
|
4
6
|
export { PinoLogger, createPinoLogger } from './infra/log/PinoLogger';
|
|
5
7
|
export type { PinoLoggerOptions } from './infra/log/PinoLogger';
|
|
6
8
|
export type { Logger, LogLevel } from './infra/log/types';
|
|
7
9
|
export { createStore } from '@store';
|
|
8
|
-
export type { WaAppStateCollectionStoreState, WaAppStateStore, WaAuthStore, WaContactStore,
|
|
9
|
-
export { getLoginIdentity, getWaCompanionPlatformId, getWaMediaHkdfInfo, isGroupJid, normalizeDeviceJid, normalizeRecipientJid, parsePhoneJid, parseSignalAddressFromJid, splitJid, toUserJid, WA_ACCOUNT_SYNC_PROTOCOLS, WA_APP_STATE_COLLECTIONS, WA_APP_STATE_COLLECTION_STATES, WA_APP_STATE_ERROR_CODES, WA_APP_STATE_KDF_INFO, WA_APP_STATE_KEY_TYPES, WA_APP_STATE_SYNC_DATA_TYPE, WA_BROWSERS, WA_COMPANION_PLATFORM_IDS, WA_DEFAULTS, WA_DIRTY_PROTOCOLS, WA_DIRTY_TYPES, WA_DISCONNECT_REASONS, WA_IQ_TYPES, WA_LOGOUT_REASONS, WA_MESSAGE_TAGS, WA_MESSAGE_TYPES, WA_MEDIA_HKDF_INFO, WA_NODE_TAGS, WA_PAIRING_KDF_INFO, WA_PREVIEW_MEDIA_HKDF_INFO, WA_READY_STATES, WA_RETRYABLE_ACK_CODES, WA_SIGNALING, WA_STREAM_SIGNALING, WA_SUPPORTED_DIRTY_TYPES, WA_XMLNS } from '@protocol';
|
|
10
|
+
export type { WaAppStateCollectionStoreState, WaAppStateStore, WaAuthStore, WaContactStore, WaCreateStoreOptions, WaDeviceListSnapshot, WaDeviceListStore, WaMessageStore, WaParticipantsSnapshot, WaParticipantsStore, WaRetryStore, WaSenderKeyStore, WaSessionStore, WaSignalStore, WaIdentityStore, WaPreKeyStore, WaStoredContactRecord, WaStoredMessageRecord, WaStoredThreadRecord, WaStore, WaStoreBackend, WaStoreSession, WaThreadStore } from '@store';
|
|
11
|
+
export { getLoginIdentity, getWaCompanionPlatformId, getWaMediaHkdfInfo, isGroupJid, normalizeDeviceJid, normalizeRecipientJid, parsePhoneJid, parseSignalAddressFromJid, splitJid, toUserJid, WA_ACCOUNT_SYNC_PROTOCOLS, WA_APP_STATE_COLLECTIONS, WA_APP_STATE_COLLECTION_STATES, WA_APP_STATE_ERROR_CODES, WA_APP_STATE_KDF_INFO, WA_APP_STATE_KEY_TYPES, WA_APP_STATE_SYNC_DATA_TYPE, WA_BROWSERS, WA_COMPANION_PLATFORM_IDS, WA_DEFAULTS, WA_DIRTY_PROTOCOLS, WA_DIRTY_TYPES, WA_DISCONNECT_REASONS, WA_IQ_TYPES, WA_LOGOUT_REASONS, WA_MESSAGE_TAGS, WA_MESSAGE_TYPES, WA_MEDIA_HKDF_INFO, WA_NODE_TAGS, WA_PAIRING_KDF_INFO, WA_PREVIEW_MEDIA_HKDF_INFO, WA_READY_STATES, WA_RETRYABLE_ACK_CODES, WA_SIGNALING, WA_STREAM_SIGNALING, WA_SUPPORTED_DIRTY_TYPES, WA_PRIVACY_CATEGORIES, WA_PRIVACY_CATEGORY_TO_SETTING, WA_PRIVACY_DISALLOWED_LIST_CATEGORIES, WA_PRIVACY_SETTING_TO_CATEGORY, WA_PRIVACY_TAGS, WA_PRIVACY_VALUES, WA_XMLNS } from '@protocol';
|
|
12
|
+
export type { WaPrivacyCategory, WaPrivacySettingName, WaPrivacyValue } from '@protocol';
|
|
10
13
|
export { proto } from '.';
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
export interface BackgroundQueueOptions<K extends string, V> {
|
|
2
|
+
readonly coalesce?: (previous: V, incoming: V, key: K) => V;
|
|
3
|
+
readonly maxPendingKeys?: number;
|
|
4
|
+
readonly maxWriteConcurrency?: number;
|
|
5
|
+
readonly flushTimeoutMs?: number;
|
|
6
|
+
readonly onError?: (key: K, error: unknown, attempt: number) => void;
|
|
7
|
+
readonly onPressure?: (pendingKeys: number) => void;
|
|
8
|
+
readonly onDiscard?: (key: K, value: V) => void;
|
|
9
|
+
}
|
|
10
|
+
export interface BackgroundQueueFlushResult {
|
|
11
|
+
readonly flushed: number;
|
|
12
|
+
readonly remaining: number;
|
|
13
|
+
}
|
|
14
|
+
export declare class BackgroundQueue<K extends string, V> {
|
|
15
|
+
private readonly writer;
|
|
16
|
+
private readonly coalesce;
|
|
17
|
+
private readonly maxPendingKeys;
|
|
18
|
+
private readonly maxWriteConcurrency;
|
|
19
|
+
private readonly flushTimeoutMs;
|
|
20
|
+
private readonly onError?;
|
|
21
|
+
private readonly onPressure?;
|
|
22
|
+
private readonly onDiscard?;
|
|
23
|
+
private readonly pendingByKey;
|
|
24
|
+
private readonly retryTimersByKey;
|
|
25
|
+
private readonly stateWaiters;
|
|
26
|
+
private drainingPromise;
|
|
27
|
+
private inFlight;
|
|
28
|
+
private flushedCount;
|
|
29
|
+
private shutdownRequested;
|
|
30
|
+
private retryDisabled;
|
|
31
|
+
constructor(writer: (key: K, value: V) => Promise<void>, options?: BackgroundQueueOptions<K, V>);
|
|
32
|
+
enqueue(key: K, value: V): void;
|
|
33
|
+
enqueueAsync(key: K, value: V): Promise<void>;
|
|
34
|
+
private waitForCapacity;
|
|
35
|
+
private addPendingEntry;
|
|
36
|
+
private detachRetryEntry;
|
|
37
|
+
flush(timeoutMs?: number): Promise<BackgroundQueueFlushResult>;
|
|
38
|
+
destroy(timeoutMs?: number): Promise<BackgroundQueueFlushResult>;
|
|
39
|
+
private ensureDrain;
|
|
40
|
+
private drainLoop;
|
|
41
|
+
private takeBatch;
|
|
42
|
+
private processEntry;
|
|
43
|
+
private takeNext;
|
|
44
|
+
private mergeForRetry;
|
|
45
|
+
private retryDelayMs;
|
|
46
|
+
private scheduleRetry;
|
|
47
|
+
private resolveEntry;
|
|
48
|
+
private discardEntry;
|
|
49
|
+
private discardPending;
|
|
50
|
+
private remaining;
|
|
51
|
+
private trackedKeys;
|
|
52
|
+
private notifyStateChange;
|
|
53
|
+
private waitForStateChange;
|
|
54
|
+
private removeStateWaiter;
|
|
55
|
+
private invokeOnError;
|
|
56
|
+
private invokeOnPressure;
|
|
57
|
+
private invokeOnDiscard;
|
|
58
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
type SharedExclusiveTask<T> = () => Promise<T>;
|
|
2
|
+
export declare class SharedExclusiveGate {
|
|
3
|
+
private activeShared;
|
|
4
|
+
private pendingExclusive;
|
|
5
|
+
private exclusiveActive;
|
|
6
|
+
private closed;
|
|
7
|
+
private readonly waiters;
|
|
8
|
+
runShared<T>(task: SharedExclusiveTask<T>): Promise<T>;
|
|
9
|
+
private runSharedSlow;
|
|
10
|
+
runExclusive<T>(task: SharedExclusiveTask<T>): Promise<T>;
|
|
11
|
+
close(): Promise<void>;
|
|
12
|
+
private acquireShared;
|
|
13
|
+
private acquireExclusive;
|
|
14
|
+
private notifyStateChange;
|
|
15
|
+
private waitForStateChange;
|
|
16
|
+
}
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
type StoreTask<T> = () => Promise<T>;
|
|
2
|
+
export declare class StoreLock {
|
|
3
|
+
private static readonly _noop;
|
|
4
|
+
private readonly chains;
|
|
5
|
+
private closed;
|
|
6
|
+
run<T>(key: string, task: StoreTask<T>): Promise<T>;
|
|
7
|
+
private runInternal;
|
|
8
|
+
runMany<T>(keys: readonly string[], task: StoreTask<T>): Promise<T>;
|
|
9
|
+
shutdown(): Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
export {};
|
|
@@ -1,12 +1,22 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import type { MediaCryptoType,
|
|
1
|
+
import { type Readable } from 'node:stream';
|
|
2
|
+
import type { MediaCryptoType, WaMediaDecryptionResult, WaMediaDecryptReadableOptions, WaMediaDerivedKeys, WaMediaEncryptionResult, WaMediaFileEncryptionResult, WaMediaReadableDecryptionResult, WaMediaReadableEncryptionResult } from './types';
|
|
3
3
|
export declare class WaMediaCrypto {
|
|
4
4
|
static generateMediaKey(): Promise<Uint8Array>;
|
|
5
5
|
static deriveKeys(mediaType: MediaCryptoType, mediaKey: Uint8Array): Promise<WaMediaDerivedKeys>;
|
|
6
|
-
static encryptBytes(mediaType: MediaCryptoType, mediaKey: Uint8Array, plaintext: Uint8Array
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
static encryptBytes(mediaType: MediaCryptoType, mediaKey: Uint8Array, plaintext: Uint8Array, options?: {
|
|
7
|
+
readonly sidecar?: boolean;
|
|
8
|
+
readonly firstFrameLength?: number;
|
|
9
|
+
}): Promise<WaMediaEncryptionResult>;
|
|
10
|
+
static decryptBytes(mediaType: MediaCryptoType, mediaKey: Uint8Array, ciphertextHmac: Uint8Array, expectedFileSha256?: Uint8Array, expectedFileEncSha256?: Uint8Array, skipMacVerification?: boolean): Promise<WaMediaDecryptionResult>;
|
|
11
|
+
static encryptReadable(mediaType: MediaCryptoType, mediaKey: Uint8Array, plaintext: Readable, options?: {
|
|
12
|
+
readonly sidecar?: boolean;
|
|
13
|
+
readonly firstFrameLength?: number;
|
|
14
|
+
}): Promise<WaMediaReadableEncryptionResult>;
|
|
15
|
+
static encryptToFile(mediaType: MediaCryptoType, mediaKey: Uint8Array, plaintext: Readable, options?: {
|
|
16
|
+
readonly sidecar?: boolean;
|
|
17
|
+
readonly firstFrameLength?: number;
|
|
18
|
+
}): Promise<WaMediaFileEncryptionResult>;
|
|
19
|
+
static cleanupEncryptedFile(filePath: string): Promise<void>;
|
|
10
20
|
static decryptReadable(encrypted: Readable, options: WaMediaDecryptReadableOptions): Promise<WaMediaReadableDecryptionResult>;
|
|
11
21
|
static encryptedLength(plaintextLength: number): number;
|
|
12
22
|
}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import { Readable } from 'node:stream';
|
|
2
|
-
import type { MediaCryptoType, WaMediaTransferClientOptions } from './types';
|
|
1
|
+
import type { Readable } from 'node:stream';
|
|
2
|
+
import type { MediaCryptoType, WaMediaReadableDecryptionResult, WaMediaTransferClientOptions } from './types';
|
|
3
3
|
interface StreamDownloadRequest {
|
|
4
4
|
readonly url?: string;
|
|
5
5
|
readonly directPath?: string;
|
|
6
6
|
readonly hosts?: readonly string[];
|
|
7
7
|
readonly headers?: Readonly<Record<string, string>>;
|
|
8
|
-
readonly dispatcher?: WaMediaTransferClientOptions['defaultDownloadDispatcher'];
|
|
9
8
|
readonly agent?: WaMediaTransferClientOptions['defaultDownloadAgent'];
|
|
10
9
|
readonly timeoutMs?: number;
|
|
11
10
|
readonly signal?: AbortSignal;
|
|
@@ -37,6 +36,7 @@ interface EncryptedUploadResult {
|
|
|
37
36
|
readonly mediaKey: Uint8Array;
|
|
38
37
|
readonly fileSha256: Uint8Array;
|
|
39
38
|
readonly fileEncSha256: Uint8Array;
|
|
39
|
+
readonly plaintextLength: number;
|
|
40
40
|
}
|
|
41
41
|
interface EncryptedDownloadRequest extends StreamDownloadRequest {
|
|
42
42
|
readonly mediaType: MediaCryptoType;
|
|
@@ -44,48 +44,31 @@ interface EncryptedDownloadRequest extends StreamDownloadRequest {
|
|
|
44
44
|
readonly fileSha256?: Uint8Array;
|
|
45
45
|
readonly fileEncSha256?: Uint8Array;
|
|
46
46
|
}
|
|
47
|
-
interface EncryptedDownloadStream {
|
|
48
|
-
readonly plaintext: Readable;
|
|
49
|
-
readonly metadata: Promise<{
|
|
50
|
-
readonly fileSha256: Uint8Array;
|
|
51
|
-
readonly fileEncSha256: Uint8Array;
|
|
52
|
-
}>;
|
|
53
|
-
}
|
|
54
47
|
export declare class WaMediaTransferClient {
|
|
55
48
|
private readonly logger?;
|
|
56
49
|
private readonly defaultHosts;
|
|
57
50
|
private readonly defaultTimeoutMs;
|
|
58
51
|
private readonly defaultMaxReadBytes;
|
|
59
52
|
private readonly defaultHeaders;
|
|
60
|
-
private readonly defaultUploadDispatcher;
|
|
61
|
-
private readonly defaultDownloadDispatcher;
|
|
62
53
|
private readonly defaultUploadAgent;
|
|
63
54
|
private readonly defaultDownloadAgent;
|
|
64
|
-
private
|
|
55
|
+
private readonly skipMacVerification;
|
|
65
56
|
constructor(options?: WaMediaTransferClientOptions);
|
|
66
57
|
downloadStream(request: StreamDownloadRequest): Promise<StreamTransferResponse>;
|
|
67
58
|
downloadBytes(request: StreamDownloadRequest): Promise<Uint8Array>;
|
|
68
59
|
uploadStream(request: StreamUploadRequest): Promise<StreamTransferResponse>;
|
|
69
60
|
uploadEncrypted(request: EncryptedUploadRequest): Promise<EncryptedUploadResult>;
|
|
70
61
|
downloadAndDecrypt(request: EncryptedDownloadRequest): Promise<Uint8Array>;
|
|
71
|
-
downloadAndDecryptStream(request: EncryptedDownloadRequest): Promise<
|
|
62
|
+
downloadAndDecryptStream(request: EncryptedDownloadRequest): Promise<WaMediaReadableDecryptionResult>;
|
|
72
63
|
readResponseBytes(response: StreamTransferResponse, maxBytes?: number): Promise<Uint8Array>;
|
|
73
|
-
private
|
|
74
|
-
private fetchWithDispatcher;
|
|
75
|
-
private toFetchTransferResponse;
|
|
76
|
-
private gotWithAgent;
|
|
77
|
-
private loadGotModule;
|
|
78
|
-
private toGotTransferResponse;
|
|
64
|
+
private httpRequest;
|
|
79
65
|
private resolveTransferRequest;
|
|
80
|
-
private executeTransfer;
|
|
81
66
|
private prepareEncryptedUpload;
|
|
82
67
|
private assertSuccessfulResponse;
|
|
83
68
|
private requireResponseBody;
|
|
84
69
|
private resolveUrls;
|
|
85
|
-
private readAllBytesWithLimit;
|
|
86
70
|
private fetchWithFallback;
|
|
87
71
|
private createAbortContext;
|
|
88
|
-
private headersToRecord;
|
|
89
72
|
private drainBody;
|
|
90
73
|
}
|
|
91
74
|
export {};
|
|
@@ -7,4 +7,6 @@ export declare const ENC_KEY_END = 48;
|
|
|
7
7
|
export declare const MAC_KEY_START = 48;
|
|
8
8
|
export declare const MAC_KEY_END = 80;
|
|
9
9
|
export declare const HMAC_TRUNCATED_SIZE = 10;
|
|
10
|
-
export declare const
|
|
10
|
+
export declare const SIDECAR_CHUNK_SIZE = 65536;
|
|
11
|
+
export declare const SIDECAR_HMAC_SIZE = 10;
|
|
12
|
+
export declare const MEDIA_UPLOAD_PATHS: Readonly<Record<'image' | 'video' | 'audio' | 'document' | 'sticker' | 'gif' | 'ptt' | 'ptv', string>>;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { WaMediaTransferClient } from './WaMediaTransferClient';
|
|
2
2
|
export { parseMediaConnResponse } from './conn';
|
|
3
|
-
export type { WaMediaConn
|
|
3
|
+
export type { WaMediaConn } from './types';
|
|
4
4
|
export { WaMediaCrypto } from './WaMediaCrypto';
|
|
5
|
+
export type { WaMediaProcessor, WaMediaProcessorImageResult, WaMediaProcessorInput, WaMediaProcessorProbeResult, WaMediaProcessorStickerThumbnailResult, WaMediaProcessorWaveformResult } from './processor';
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { Readable } from 'node:stream';
|
|
2
|
+
export interface WaMediaProcessorImageResult {
|
|
3
|
+
readonly jpegThumbnail: Uint8Array;
|
|
4
|
+
readonly width: number;
|
|
5
|
+
readonly height: number;
|
|
6
|
+
}
|
|
7
|
+
export interface WaMediaProcessorStickerThumbnailResult {
|
|
8
|
+
readonly pngThumbnail: Uint8Array;
|
|
9
|
+
readonly width: number;
|
|
10
|
+
readonly height: number;
|
|
11
|
+
}
|
|
12
|
+
export interface WaMediaProcessorProbeResult {
|
|
13
|
+
readonly durationSeconds?: number;
|
|
14
|
+
readonly width?: number;
|
|
15
|
+
readonly height?: number;
|
|
16
|
+
}
|
|
17
|
+
export interface WaMediaProcessorWaveformResult {
|
|
18
|
+
readonly waveform: Uint8Array;
|
|
19
|
+
readonly durationSeconds: number;
|
|
20
|
+
}
|
|
21
|
+
export type WaMediaProcessorInput = Uint8Array | Readable | string;
|
|
22
|
+
export interface WaMediaProcessor {
|
|
23
|
+
readonly generateImageThumbnail?: (input: WaMediaProcessorInput, maxEdge: number) => Promise<WaMediaProcessorImageResult>;
|
|
24
|
+
readonly generateVideoThumbnail?: (input: WaMediaProcessorInput, maxEdge: number) => Promise<WaMediaProcessorImageResult | null>;
|
|
25
|
+
readonly probeMedia?: (input: WaMediaProcessorInput) => Promise<WaMediaProcessorProbeResult>;
|
|
26
|
+
readonly computeWaveform?: (input: WaMediaProcessorInput) => Promise<WaMediaProcessorWaveformResult | null>;
|
|
27
|
+
readonly generateStickerThumbnail?: (input: WaMediaProcessorInput, maxEdge: number) => Promise<WaMediaProcessorStickerThumbnailResult>;
|
|
28
|
+
}
|