zapo-js 0.3.0 → 1.0.1
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/LICENSE +21 -0
- package/README.md +98 -178
- package/dist/appstate/{WaAppStateCrypto.js → crypto/WaAppStateCrypto.js} +58 -49
- package/dist/appstate/index.js +7 -6
- package/dist/appstate/{encoding.js → parsers/encoding.js} +11 -4
- package/dist/appstate/{response-parser.js → parsers/response-parser.js} +20 -8
- package/dist/appstate/{WaAppStateSyncClient.js → sync/WaAppStateSyncClient.js} +174 -53
- package/dist/appstate/utils.js +16 -0
- package/dist/appstate-spec.js +89 -0
- package/dist/auth/WaAuthClient.js +100 -5
- package/dist/auth/credentials-flow.js +20 -8
- package/dist/auth/pairing/WaPairingFlow.js +35 -26
- package/dist/auth/pairing/pairing-code-crypto.js +17 -19
- package/dist/client/WaClient.js +343 -474
- package/dist/client/WaClientFactory.js +281 -78
- package/dist/client/connection/WaConnectionManager.js +28 -11
- package/dist/client/coordinators/WaAbPropsCoordinator.js +1 -2
- package/dist/client/coordinators/WaAppStateMutationCoordinator.js +663 -143
- package/dist/client/coordinators/WaBotCoordinator.js +345 -0
- package/dist/client/coordinators/WaBroadcastListCoordinator.js +20 -0
- package/dist/client/coordinators/WaBusinessCoordinator.js +81 -171
- package/dist/client/coordinators/WaEmailCoordinator.js +1 -0
- package/dist/client/coordinators/WaGroupCoordinator.js +529 -52
- package/dist/client/coordinators/WaIncomingNodeCoordinator.js +97 -12
- package/dist/client/coordinators/WaLowLevelCoordinator.js +41 -0
- package/dist/client/coordinators/WaMessageCoordinator.js +365 -0
- package/dist/client/coordinators/WaMessageDispatchCoordinator.js +685 -207
- package/dist/client/coordinators/WaNewsletterCoordinator.js +18 -0
- package/dist/client/coordinators/WaPassiveTasksCoordinator.js +17 -4
- package/dist/client/coordinators/WaPresenceCoordinator.js +21 -0
- package/dist/client/coordinators/WaPrivacyCoordinator.js +7 -5
- package/dist/client/coordinators/WaProfileCoordinator.js +220 -49
- package/dist/client/coordinators/WaRetryCoordinator.js +257 -126
- package/dist/client/coordinators/WaStatusCoordinator.js +49 -0
- package/dist/client/coordinators/WaStreamControlCoordinator.js +8 -9
- package/dist/client/coordinators/WaTrustedContactTokenCoordinator.js +7 -6
- package/dist/client/events/appstate-mutation.js +133 -0
- package/dist/client/events/business.js +375 -0
- package/dist/client/events/call.js +58 -0
- package/dist/client/events/chatstate.js +23 -0
- package/dist/client/events/devices.js +15 -16
- package/dist/client/{dirty.js → events/dirty.js} +33 -19
- package/dist/client/events/group.js +13 -24
- package/dist/client/events/identity.js +2 -1
- package/dist/client/events/incoming.js +502 -0
- package/dist/client/events/mex-notification.js +181 -0
- package/dist/client/events/picture.js +33 -0
- package/dist/client/events/presence.js +44 -0
- package/dist/client/events/receipt.js +26 -0
- package/dist/client/media.js +163 -6
- package/dist/client/messaging/fanout.js +9 -10
- package/dist/client/messaging/{participants.js → group-metadata.js} +93 -44
- package/dist/client/messaging/ignore-key.js +132 -0
- package/dist/client/messaging/key-protocol.js +4 -18
- package/dist/client/messaging/link-preview.js +159 -0
- package/dist/client/messaging/messages.js +671 -0
- package/dist/client/newsletter/admin.js +165 -0
- package/dist/client/newsletter/content.js +253 -0
- package/dist/client/newsletter/discovery.js +115 -0
- package/dist/client/newsletter/messaging.js +197 -0
- package/dist/client/newsletter/mex.js +41 -0
- package/dist/client/newsletter/parse.js +217 -0
- package/dist/client/persistence/WriteBehindPersistence.js +31 -4
- package/dist/client/{history-sync.js → persistence/history-sync.js} +125 -18
- package/dist/client/persistence/mailbox.js +104 -0
- package/dist/client/tokens/cs-token.js +11 -17
- package/dist/crypto/core/hkdf.js +12 -12
- package/dist/crypto/core/index.js +6 -8
- package/dist/crypto/core/keys.js +1 -8
- package/dist/crypto/core/nonce.js +12 -12
- package/dist/crypto/core/primitives.js +123 -93
- package/dist/crypto/core/random.js +6 -0
- package/dist/crypto/core/xeddsa.js +11 -9
- package/dist/crypto/curves/Ed25519.js +32 -21
- package/dist/crypto/curves/X25519.js +70 -34
- package/dist/crypto/curves/constants.js +2 -1
- package/dist/crypto/math/constants.js +1 -2
- package/dist/crypto/math/mod.js +0 -33
- package/dist/esm/appstate/{WaAppStateCrypto.js → crypto/WaAppStateCrypto.js} +58 -49
- package/dist/esm/appstate/index.js +5 -5
- package/dist/esm/appstate/{encoding.js → parsers/encoding.js} +11 -4
- package/dist/esm/appstate/{response-parser.js → parsers/response-parser.js} +20 -8
- package/dist/esm/appstate/{WaAppStateSyncClient.js → sync/WaAppStateSyncClient.js} +174 -52
- package/dist/esm/appstate/utils.js +16 -0
- package/dist/esm/appstate-spec.js +79 -0
- package/dist/esm/auth/WaAuthClient.js +100 -5
- package/dist/esm/auth/credentials-flow.js +18 -6
- package/dist/esm/auth/pairing/WaPairingFlow.js +34 -25
- package/dist/esm/auth/pairing/pairing-code-crypto.js +12 -14
- package/dist/esm/client/WaClient.js +345 -476
- package/dist/esm/client/WaClientFactory.js +282 -79
- package/dist/esm/client/connection/WaConnectionManager.js +28 -11
- package/dist/esm/client/coordinators/WaAbPropsCoordinator.js +2 -3
- package/dist/esm/client/coordinators/WaAppStateMutationCoordinator.js +665 -145
- package/dist/esm/client/coordinators/WaBotCoordinator.js +342 -0
- package/dist/esm/client/coordinators/WaBroadcastListCoordinator.js +17 -0
- package/dist/esm/client/coordinators/WaBusinessCoordinator.js +79 -169
- package/dist/esm/client/coordinators/WaEmailCoordinator.js +1 -0
- package/dist/esm/client/coordinators/WaGroupCoordinator.js +532 -55
- package/dist/esm/client/coordinators/WaIncomingNodeCoordinator.js +98 -13
- package/dist/esm/client/coordinators/WaLowLevelCoordinator.js +38 -0
- package/dist/esm/client/coordinators/WaMessageCoordinator.js +361 -0
- package/dist/esm/client/coordinators/WaMessageDispatchCoordinator.js +686 -208
- package/dist/esm/client/coordinators/WaNewsletterCoordinator.js +13 -0
- package/dist/esm/client/coordinators/WaPassiveTasksCoordinator.js +18 -5
- package/dist/esm/client/coordinators/WaPresenceCoordinator.js +18 -0
- package/dist/esm/client/coordinators/WaPrivacyCoordinator.js +7 -5
- package/dist/esm/client/coordinators/WaProfileCoordinator.js +223 -52
- package/dist/esm/client/coordinators/WaRetryCoordinator.js +258 -127
- package/dist/esm/client/coordinators/WaStatusCoordinator.js +46 -0
- package/dist/esm/client/coordinators/WaStreamControlCoordinator.js +8 -9
- package/dist/esm/client/coordinators/WaTrustedContactTokenCoordinator.js +7 -6
- package/dist/esm/client/events/appstate-mutation.js +130 -0
- package/dist/esm/client/events/business.js +370 -0
- package/dist/esm/client/events/call.js +55 -0
- package/dist/esm/client/events/chatstate.js +20 -0
- package/dist/esm/client/events/devices.js +15 -16
- package/dist/esm/client/{dirty.js → events/dirty.js} +33 -19
- package/dist/esm/client/events/group.js +14 -25
- package/dist/esm/client/events/identity.js +2 -1
- package/dist/esm/client/events/incoming.js +487 -0
- package/dist/esm/client/events/mex-notification.js +178 -0
- package/dist/esm/client/events/picture.js +30 -0
- package/dist/esm/client/events/presence.js +41 -0
- package/dist/esm/client/events/receipt.js +23 -0
- package/dist/esm/client/media.js +158 -8
- package/dist/esm/client/messaging/fanout.js +10 -11
- package/dist/esm/client/messaging/{participants.js → group-metadata.js} +92 -43
- package/dist/esm/client/messaging/ignore-key.js +126 -0
- package/dist/esm/client/messaging/key-protocol.js +3 -17
- package/dist/esm/client/messaging/link-preview.js +156 -0
- package/dist/esm/client/messaging/messages.js +667 -0
- package/dist/esm/client/newsletter/admin.js +162 -0
- package/dist/esm/client/newsletter/content.js +249 -0
- package/dist/esm/client/newsletter/discovery.js +112 -0
- package/dist/esm/client/newsletter/messaging.js +194 -0
- package/dist/esm/client/newsletter/mex.js +37 -0
- package/dist/esm/client/newsletter/parse.js +200 -0
- package/dist/esm/client/persistence/WriteBehindPersistence.js +31 -4
- package/dist/esm/client/{history-sync.js → persistence/history-sync.js} +124 -18
- package/dist/esm/client/persistence/mailbox.js +101 -0
- package/dist/esm/client/tokens/cs-token.js +12 -18
- package/dist/esm/crypto/core/hkdf.js +14 -14
- package/dist/esm/crypto/core/index.js +2 -2
- package/dist/esm/crypto/core/keys.js +1 -7
- package/dist/esm/crypto/core/nonce.js +11 -11
- package/dist/esm/crypto/core/primitives.js +121 -88
- package/dist/esm/crypto/core/random.js +6 -0
- package/dist/esm/crypto/core/xeddsa.js +11 -9
- package/dist/esm/crypto/curves/Ed25519.js +35 -24
- package/dist/esm/crypto/curves/X25519.js +72 -36
- package/dist/esm/crypto/curves/constants.js +1 -0
- package/dist/esm/crypto/math/constants.js +1 -2
- package/dist/esm/crypto/math/mod.js +0 -32
- package/dist/esm/index.js +7 -2
- package/dist/esm/infra/log/ConsoleLogger.js +30 -6
- package/dist/esm/infra/log/PinoLogger.js +64 -0
- package/dist/esm/infra/log/types.js +4 -2
- package/dist/esm/infra/perf/BackgroundQueue.js +55 -13
- package/dist/esm/media/constants.js +33 -2
- package/dist/esm/media/crypto/WaMediaCrypto.js +374 -0
- package/dist/esm/media/index.js +4 -3
- package/dist/esm/media/sticker/sticker-pack.js +133 -0
- package/dist/esm/media/{WaMediaTransferClient.js → transfer/WaMediaTransferClient.js} +37 -6
- package/dist/esm/media/{conn.js → transfer/conn.js} +10 -5
- package/dist/esm/message/WaMessageClient.js +46 -15
- package/dist/esm/message/addons/link-preview/builder.js +36 -0
- package/dist/esm/message/addons/link-preview/detect.js +55 -0
- package/dist/esm/message/addons/link-preview/fetcher.js +391 -0
- package/dist/esm/message/addons/link-preview/types.js +1 -0
- package/dist/esm/message/context-info.js +123 -0
- package/dist/esm/message/{addon-crypto.js → crypto/addon-crypto.js} +68 -10
- package/dist/esm/message/{icdc.js → crypto/icdc.js} +5 -7
- package/dist/esm/message/crypto/phash.js +133 -0
- package/dist/esm/message/{reporting-token.js → crypto/reporting-token.js} +6 -6
- package/dist/esm/message/{use-case-secret.js → crypto/use-case-secret.js} +20 -3
- package/dist/esm/message/{content.js → encode/content.js} +176 -7
- package/dist/esm/message/encode/media-payload.js +42 -0
- package/dist/esm/message/{padding.js → encode/padding.js} +9 -3
- package/dist/esm/message/index.js +2 -2
- package/dist/esm/message/kinds/bot.js +111 -0
- package/dist/esm/message/kinds/newsletter.js +244 -0
- package/dist/esm/message/kinds/sticker-pack.js +29 -0
- package/dist/esm/message/{ack.js → primitives/ack.js} +8 -1
- package/dist/esm/message/{incoming.js → primitives/incoming.js} +215 -31
- package/dist/esm/message/primitives/peer-data-operation.js +93 -0
- package/dist/esm/mex.js +1 -0
- package/dist/esm/protocol/abprops.js +10 -0
- package/dist/esm/protocol/appstate.js +6 -30
- package/dist/esm/protocol/auth.js +3 -2
- package/dist/esm/protocol/bot.js +77 -0
- package/dist/esm/protocol/browser.js +8 -0
- package/dist/esm/protocol/business.js +19 -0
- package/dist/esm/protocol/call.js +48 -0
- package/dist/esm/protocol/constants.js +8 -2
- package/dist/esm/protocol/defaults.js +3 -0
- package/dist/esm/protocol/index.js +1 -1
- package/dist/esm/protocol/jid.js +102 -5
- package/dist/esm/protocol/media.js +25 -12
- package/dist/esm/protocol/message.js +4 -1
- package/dist/esm/protocol/newsletter.js +61 -0
- package/dist/esm/protocol/nodes.js +22 -2
- package/dist/esm/protocol/notification.js +18 -2
- package/dist/esm/protocol/presence.js +13 -0
- package/dist/esm/protocol/status.js +6 -0
- package/dist/esm/retry/codec.js +5 -0
- package/dist/esm/retry/parse.js +20 -38
- package/dist/esm/retry/reason.js +5 -0
- package/dist/esm/retry/replay.js +131 -37
- package/dist/esm/retry/tracker.js +4 -8
- package/dist/esm/signal/api/SignalDeviceSyncApi.js +69 -20
- package/dist/esm/signal/api/SignalDigestSyncApi.js +7 -2
- package/dist/esm/signal/api/SignalIdentitySyncApi.js +9 -0
- package/dist/esm/signal/api/SignalMissingPreKeysSyncApi.js +24 -63
- package/dist/esm/signal/api/SignalRotateKeyApi.js +10 -0
- package/dist/esm/signal/api/SignalSessionSyncApi.js +23 -51
- package/dist/esm/signal/api/codec.js +52 -1
- package/dist/esm/signal/api/prekeys.js +4 -0
- package/dist/esm/signal/{crypto → attestation}/WaAdvSignature.js +5 -6
- package/dist/esm/signal/constants.js +3 -0
- package/dist/esm/signal/encoding.js +6 -289
- package/dist/esm/signal/group/SenderKeyChain.js +18 -33
- package/dist/esm/signal/group/SenderKeyManager.js +25 -8
- package/dist/esm/signal/group/encoding.js +96 -0
- package/dist/esm/signal/index.js +4 -1
- package/dist/esm/signal/registration/encoding.js +34 -0
- package/dist/esm/signal/registration/keygen.js +10 -0
- package/dist/esm/signal/registration/utils.js +8 -1
- package/dist/esm/signal/session/SignalProtocol.js +113 -11
- package/dist/esm/signal/session/SignalRatchet.js +29 -58
- package/dist/esm/signal/session/SignalSession.js +7 -14
- package/dist/esm/signal/session/encoding.js +173 -0
- package/dist/esm/signal/session/resolver.js +139 -30
- package/dist/esm/store/cache/identity.cache.js +75 -0
- package/dist/esm/store/cache/privacy-token.cache.js +57 -0
- package/dist/esm/store/cache/sender-key.cache.js +101 -0
- package/dist/esm/store/cache/session.cache.js +92 -0
- package/dist/esm/store/contracts/group-metadata.store.js +1 -0
- package/dist/esm/store/createStore.js +91 -37
- package/dist/esm/store/index.js +15 -14
- package/dist/esm/store/locks/contact.lock.js +1 -0
- package/dist/esm/store/locks/device-list.lock.js +1 -0
- package/dist/esm/store/locks/group-metadata.lock.js +20 -0
- package/dist/esm/store/locks/pre-key.lock.js +4 -1
- package/dist/esm/store/{providers/memory → memory}/appstate.store.js +5 -5
- package/dist/esm/store/memory/auth.store.js +24 -0
- package/dist/esm/store/memory/contact.store.js +79 -0
- package/dist/esm/store/memory/device-list.store.js +103 -0
- package/dist/esm/store/{providers/memory/participants.store.js → memory/group-metadata.store.js} +22 -13
- package/dist/esm/store/{providers/memory → memory}/identity.store.js +3 -3
- package/dist/esm/store/{providers/memory → memory}/message-secret.store.js +17 -8
- package/dist/esm/store/{providers/memory → memory}/message.store.js +2 -2
- package/dist/esm/store/{providers/memory → memory}/pre-key.store.js +2 -2
- package/dist/esm/store/{providers/memory → memory}/privacy-token.store.js +1 -1
- package/dist/esm/store/{providers/memory → memory}/retry.store.js +28 -7
- package/dist/esm/store/{providers/memory → memory}/sender-key.store.js +3 -3
- package/dist/esm/store/{providers/memory → memory}/session.store.js +3 -3
- package/dist/esm/store/{providers/memory → memory}/thread.store.js +2 -2
- package/dist/esm/store/noop.store.js +6 -4
- package/dist/esm/transport/WaComms.js +14 -5
- package/dist/esm/transport/WaWebSocket.js +32 -8
- package/dist/esm/transport/binary/constants.js +10 -4
- package/dist/esm/transport/binary/decoder.js +21 -15
- package/dist/esm/transport/binary/encoder.js +96 -21
- package/dist/esm/transport/binary/tokens.js +12 -12
- package/dist/esm/transport/index.js +1 -0
- package/dist/esm/transport/keepalive/WaKeepAlive.js +18 -4
- package/dist/esm/transport/node/WaMobileTcpSocket.js +6 -0
- package/dist/esm/transport/node/WaNodeOrchestrator.js +9 -5
- package/dist/esm/transport/node/WaNodeTransport.js +13 -0
- package/dist/esm/transport/node/builders/abprops.js +2 -2
- package/dist/esm/transport/node/builders/account-sync.js +7 -15
- package/dist/esm/transport/node/builders/bot.js +38 -0
- package/dist/esm/transport/node/builders/business.js +30 -30
- package/dist/esm/transport/node/builders/chatstate.js +28 -0
- package/dist/esm/transport/node/builders/community.js +53 -0
- package/dist/esm/transport/node/builders/device.js +2 -2
- package/dist/esm/transport/node/builders/email.js +6 -5
- package/dist/esm/transport/node/builders/global.js +1 -1
- package/dist/esm/transport/node/builders/group.js +114 -4
- package/dist/esm/transport/node/builders/media.js +2 -2
- package/dist/esm/transport/node/builders/message.js +83 -49
- package/dist/esm/transport/node/builders/newsletter.js +176 -0
- package/dist/esm/transport/node/builders/passive.js +7 -0
- package/dist/esm/transport/node/builders/prekeys.js +4 -4
- package/dist/esm/transport/node/builders/presence.js +27 -1
- package/dist/esm/transport/node/builders/privacy-token.js +2 -2
- package/dist/esm/transport/node/builders/privacy.js +6 -6
- package/dist/esm/transport/node/builders/profile.js +28 -8
- package/dist/esm/transport/node/builders/tos.js +58 -0
- package/dist/esm/transport/node/builders/usync.js +51 -2
- package/dist/esm/transport/node/helpers.js +3 -1
- package/dist/esm/transport/node/mex/argo-decoder.js +2 -2
- package/dist/esm/transport/node/mex/client.js +22 -0
- package/dist/esm/transport/node/query.js +17 -0
- package/dist/esm/transport/node/usync.js +12 -0
- package/dist/esm/transport/noise/WaClientPayload.js +8 -8
- package/dist/esm/transport/noise/WaMobileClientPayload.js +5 -0
- package/dist/esm/transport/noise/WaNoiseCert.js +5 -0
- package/dist/esm/transport/noise/WaNoiseHandshake.js +27 -25
- package/dist/esm/transport/noise/WaNoiseSession.js +39 -59
- package/dist/esm/transport/noise/WaNoiseSocket.js +19 -13
- package/dist/esm/transport/noise/constants.js +0 -1
- package/dist/esm/transport/proxy.js +5 -0
- package/dist/esm/transport/stream/parse.js +3 -7
- package/dist/esm/transport/wa-web-version-fetcher.js +91 -0
- package/dist/esm/util/async.js +4 -0
- package/dist/esm/util/bytes.js +37 -2
- package/dist/esm/util/clock.js +15 -0
- package/dist/esm/util/coercion.js +45 -3
- package/dist/esm/util/collections.js +11 -0
- package/dist/esm/util/index.js +2 -2
- package/dist/esm/util/primitives.js +19 -0
- package/dist/esm/util/runtime.js +5 -0
- package/dist/esm/version-spec.js +1 -0
- package/dist/index.js +35 -5
- package/dist/infra/log/ConsoleLogger.js +30 -6
- package/dist/infra/log/PinoLogger.js +64 -0
- package/dist/infra/log/types.js +4 -2
- package/dist/infra/perf/BackgroundQueue.js +55 -13
- package/dist/media/constants.js +34 -3
- package/dist/media/crypto/WaMediaCrypto.js +378 -0
- package/dist/media/index.js +9 -4
- package/dist/media/sticker/sticker-pack.js +136 -0
- package/dist/media/{WaMediaTransferClient.js → transfer/WaMediaTransferClient.js} +37 -6
- package/dist/media/{conn.js → transfer/conn.js} +10 -5
- package/dist/message/WaMessageClient.js +46 -15
- package/dist/message/addons/link-preview/builder.js +39 -0
- package/dist/message/addons/link-preview/detect.js +58 -0
- package/dist/message/addons/link-preview/fetcher.js +394 -0
- package/dist/message/addons/link-preview/types.js +2 -0
- package/dist/message/context-info.js +129 -0
- package/dist/message/{addon-crypto.js → crypto/addon-crypto.js} +68 -10
- package/dist/message/{icdc.js → crypto/icdc.js} +5 -7
- package/dist/message/crypto/phash.js +136 -0
- package/dist/message/{reporting-token.js → crypto/reporting-token.js} +6 -6
- package/dist/message/{use-case-secret.js → crypto/use-case-secret.js} +20 -3
- package/dist/message/{content.js → encode/content.js} +192 -7
- package/dist/message/encode/media-payload.js +45 -0
- package/dist/message/{padding.js → encode/padding.js} +9 -3
- package/dist/message/index.js +2 -2
- package/dist/message/kinds/bot.js +120 -0
- package/dist/message/kinds/newsletter.js +248 -0
- package/dist/message/kinds/sticker-pack.js +34 -0
- package/dist/message/{ack.js → primitives/ack.js} +8 -1
- package/dist/message/{incoming.js → primitives/incoming.js} +216 -31
- package/dist/message/primitives/peer-data-operation.js +96 -0
- package/dist/mex.js +6 -0
- package/dist/proto.js +1 -1
- package/dist/protocol/abprops.js +10 -0
- package/dist/protocol/appstate.js +7 -31
- package/dist/protocol/auth.js +3 -2
- package/dist/protocol/bot.js +81 -0
- package/dist/protocol/browser.js +8 -0
- package/dist/protocol/business.js +22 -0
- package/dist/protocol/call.js +51 -0
- package/dist/protocol/constants.js +39 -3
- package/dist/protocol/defaults.js +3 -0
- package/dist/protocol/index.js +12 -3
- package/dist/protocol/jid.js +107 -5
- package/dist/protocol/media.js +25 -12
- package/dist/protocol/message.js +4 -1
- package/dist/protocol/newsletter.js +64 -0
- package/dist/protocol/nodes.js +22 -2
- package/dist/protocol/notification.js +19 -3
- package/dist/protocol/presence.js +16 -0
- package/dist/protocol/status.js +9 -0
- package/dist/retry/codec.js +5 -0
- package/dist/retry/parse.js +16 -34
- package/dist/retry/reason.js +5 -0
- package/dist/retry/replay.js +130 -36
- package/dist/retry/tracker.js +3 -7
- package/dist/signal/api/SignalDeviceSyncApi.js +67 -18
- package/dist/signal/api/SignalDigestSyncApi.js +7 -2
- package/dist/signal/api/SignalIdentitySyncApi.js +9 -0
- package/dist/signal/api/SignalMissingPreKeysSyncApi.js +21 -60
- package/dist/signal/api/SignalRotateKeyApi.js +10 -0
- package/dist/signal/api/SignalSessionSyncApi.js +20 -48
- package/dist/signal/api/codec.js +52 -0
- package/dist/signal/api/prekeys.js +4 -0
- package/dist/signal/{crypto → attestation}/WaAdvSignature.js +6 -8
- package/dist/signal/constants.js +4 -1
- package/dist/signal/encoding.js +5 -303
- package/dist/signal/group/SenderKeyChain.js +18 -33
- package/dist/signal/group/SenderKeyCodec.js +2 -2
- package/dist/signal/group/SenderKeyManager.js +26 -9
- package/dist/signal/group/encoding.js +101 -0
- package/dist/signal/index.js +13 -10
- package/dist/signal/registration/encoding.js +39 -0
- package/dist/signal/registration/keygen.js +11 -1
- package/dist/signal/registration/utils.js +8 -1
- package/dist/signal/session/SignalProtocol.js +113 -11
- package/dist/signal/session/SignalRatchet.js +26 -56
- package/dist/signal/session/SignalSerializer.js +2 -2
- package/dist/signal/session/SignalSession.js +7 -15
- package/dist/signal/session/encoding.js +183 -0
- package/dist/signal/session/resolver.js +139 -30
- package/dist/store/cache/identity.cache.js +78 -0
- package/dist/store/cache/privacy-token.cache.js +60 -0
- package/dist/store/cache/sender-key.cache.js +104 -0
- package/dist/store/cache/session.cache.js +95 -0
- package/dist/store/contracts/group-metadata.store.js +2 -0
- package/dist/store/createStore.js +90 -36
- package/dist/store/index.js +18 -16
- package/dist/store/locks/contact.lock.js +1 -0
- package/dist/store/locks/device-list.lock.js +1 -0
- package/dist/store/locks/group-metadata.lock.js +23 -0
- package/dist/store/locks/pre-key.lock.js +4 -1
- package/dist/store/{providers/memory → memory}/appstate.store.js +5 -5
- package/dist/store/memory/auth.store.js +28 -0
- package/dist/store/memory/contact.store.js +83 -0
- package/dist/store/memory/device-list.store.js +107 -0
- package/dist/store/{providers/memory/participants.store.js → memory/group-metadata.store.js} +24 -15
- package/dist/store/{providers/memory → memory}/identity.store.js +3 -3
- package/dist/store/{providers/memory → memory}/message-secret.store.js +17 -8
- package/dist/store/{providers/memory → memory}/message.store.js +2 -2
- package/dist/store/{providers/memory → memory}/pre-key.store.js +2 -2
- package/dist/store/{providers/memory → memory}/privacy-token.store.js +1 -1
- package/dist/store/{providers/memory → memory}/retry.store.js +28 -7
- package/dist/store/{providers/memory → memory}/sender-key.store.js +3 -3
- package/dist/store/{providers/memory → memory}/session.store.js +3 -3
- package/dist/store/{providers/memory → memory}/thread.store.js +2 -2
- package/dist/store/noop.store.js +7 -5
- package/dist/transport/WaComms.js +14 -5
- package/dist/transport/WaWebSocket.js +32 -8
- package/dist/transport/binary/constants.js +11 -5
- package/dist/transport/binary/decoder.js +24 -18
- package/dist/transport/binary/encoder.js +109 -34
- package/dist/transport/binary/tokens.js +12 -12
- package/dist/transport/index.js +3 -1
- package/dist/transport/keepalive/WaKeepAlive.js +18 -4
- package/dist/transport/node/WaMobileTcpSocket.js +6 -0
- package/dist/transport/node/WaNodeOrchestrator.js +9 -5
- package/dist/transport/node/WaNodeTransport.js +13 -0
- package/dist/transport/node/builders/abprops.js +1 -1
- package/dist/transport/node/builders/account-sync.js +7 -16
- package/dist/transport/node/builders/bot.js +43 -0
- package/dist/transport/node/builders/business.js +31 -31
- package/dist/transport/node/builders/chatstate.js +31 -0
- package/dist/transport/node/builders/community.js +59 -0
- package/dist/transport/node/builders/device.js +1 -1
- package/dist/transport/node/builders/email.js +6 -5
- package/dist/transport/node/builders/global.js +2 -2
- package/dist/transport/node/builders/group.js +121 -3
- package/dist/transport/node/builders/media.js +1 -1
- package/dist/transport/node/builders/message.js +84 -49
- package/dist/transport/node/builders/newsletter.js +183 -0
- package/dist/transport/node/builders/passive.js +10 -0
- package/dist/transport/node/builders/prekeys.js +3 -3
- package/dist/transport/node/builders/presence.js +28 -1
- package/dist/transport/node/builders/privacy-token.js +1 -1
- package/dist/transport/node/builders/privacy.js +5 -5
- package/dist/transport/node/builders/profile.js +30 -7
- package/dist/transport/node/builders/tos.js +63 -0
- package/dist/transport/node/builders/usync.js +52 -1
- package/dist/transport/node/helpers.js +3 -2
- package/dist/transport/node/mex/argo-decoder.js +2 -2
- package/dist/transport/node/mex/client.js +23 -0
- package/dist/transport/node/query.js +17 -0
- package/dist/transport/node/usync.js +13 -0
- package/dist/transport/noise/WaClientPayload.js +9 -9
- package/dist/transport/noise/WaMobileClientPayload.js +6 -1
- package/dist/transport/noise/WaNoiseCert.js +7 -2
- package/dist/transport/noise/WaNoiseHandshake.js +26 -24
- package/dist/transport/noise/WaNoiseSession.js +41 -61
- package/dist/transport/noise/WaNoiseSocket.js +19 -13
- package/dist/transport/noise/constants.js +1 -2
- package/dist/transport/proxy.js +5 -0
- package/dist/transport/stream/parse.js +3 -7
- package/dist/transport/wa-web-version-fetcher.js +94 -0
- package/dist/types/appstate/constants.d.ts +1 -1
- package/dist/types/appstate/{WaAppStateCrypto.d.ts → crypto/WaAppStateCrypto.d.ts} +26 -9
- package/dist/types/appstate/index.d.ts +5 -5
- package/dist/types/appstate/{encoding.d.ts → parsers/encoding.d.ts} +8 -1
- package/dist/types/appstate/{response-parser.d.ts → parsers/response-parser.d.ts} +13 -3
- package/dist/types/appstate/sync/WaAppStateSyncClient.d.ts +105 -0
- package/dist/types/appstate/types.d.ts +1 -1
- package/dist/types/appstate/utils.d.ts +18 -2
- package/dist/types/appstate-spec.d.ts +24 -0
- package/dist/types/auth/WaAuthClient.d.ts +89 -3
- package/dist/types/auth/credentials-flow.d.ts +4 -3
- package/dist/types/auth/pairing/pairing-code-crypto.d.ts +0 -1
- package/dist/types/auth/types.d.ts +49 -2
- package/dist/types/client/WaClient.d.ts +178 -71
- package/dist/types/client/WaClientFactory.d.ts +30 -5
- package/dist/types/client/connection/WaConnectionManager.d.ts +4 -2
- package/dist/types/client/connection/WaReceiptQueue.d.ts +1 -1
- package/dist/types/client/coordinators/WaAppStateMutationCoordinator.d.ts +215 -5
- package/dist/types/client/coordinators/WaBotCoordinator.d.ts +117 -0
- package/dist/types/client/coordinators/WaBroadcastListCoordinator.d.ts +39 -0
- package/dist/types/client/coordinators/WaBusinessCoordinator.d.ts +44 -43
- package/dist/types/client/coordinators/WaEmailCoordinator.d.ts +16 -0
- package/dist/types/client/coordinators/WaGroupCoordinator.d.ts +311 -9
- package/dist/types/client/coordinators/WaIncomingNodeCoordinator.d.ts +11 -4
- package/dist/types/client/coordinators/WaLowLevelCoordinator.d.ts +47 -0
- package/dist/types/client/coordinators/WaMessageCoordinator.d.ts +232 -0
- package/dist/types/client/coordinators/WaMessageDispatchCoordinator.d.ts +55 -32
- package/dist/types/client/coordinators/WaNewsletterCoordinator.d.ts +13 -0
- package/dist/types/client/coordinators/WaPassiveTasksCoordinator.d.ts +4 -3
- package/dist/types/client/coordinators/WaPresenceCoordinator.d.ts +27 -0
- package/dist/types/client/coordinators/WaPrivacyCoordinator.d.ts +27 -0
- package/dist/types/client/coordinators/WaProfileCoordinator.d.ts +113 -0
- package/dist/types/client/coordinators/WaRetryCoordinator.d.ts +19 -17
- package/dist/types/client/coordinators/WaStatusCoordinator.d.ts +42 -0
- package/dist/types/client/coordinators/WaTrustedContactTokenCoordinator.d.ts +5 -1
- package/dist/types/client/events/abprops.d.ts +2 -1
- package/dist/types/client/events/appstate-mutation.d.ts +3 -0
- package/dist/types/client/events/business.d.ts +10 -0
- package/dist/types/client/events/call.d.ts +31 -0
- package/dist/types/client/events/chatstate.d.ts +9 -0
- package/dist/types/client/events/devices.d.ts +5 -4
- package/dist/types/client/{dirty.d.ts → events/dirty.d.ts} +4 -3
- package/dist/types/client/events/group.d.ts +2 -1
- package/dist/types/client/events/identity.d.ts +2 -1
- package/dist/types/client/{incoming.d.ts → events/incoming.d.ts} +27 -4
- package/dist/types/client/events/mex-notification.d.ts +6 -0
- package/dist/types/client/events/picture.d.ts +8 -0
- package/dist/types/client/events/presence.d.ts +28 -0
- package/dist/types/client/events/receipt.d.ts +14 -0
- package/dist/types/client/events/registration.d.ts +4 -3
- package/dist/types/client/index.d.ts +1 -1
- package/dist/types/client/media.d.ts +35 -1
- package/dist/types/client/messaging/fanout.d.ts +2 -2
- package/dist/types/client/messaging/group-metadata.d.ts +19 -0
- package/dist/types/client/messaging/ignore-key.d.ts +11 -0
- package/dist/types/client/messaging/key-protocol.d.ts +9 -7
- package/dist/types/client/messaging/link-preview.d.ts +19 -0
- package/dist/types/client/messaging/messages.d.ts +28 -0
- package/dist/types/client/newsletter/admin.d.ts +71 -0
- package/dist/types/client/newsletter/content.d.ts +42 -0
- package/dist/types/client/newsletter/discovery.d.ts +33 -0
- package/dist/types/client/newsletter/messaging.d.ts +66 -0
- package/dist/types/client/newsletter/mex.d.ts +14 -0
- package/dist/types/client/newsletter/parse.d.ts +19 -0
- package/dist/types/client/newsletter/types.d.ts +190 -0
- package/dist/types/client/persistence/WriteBehindPersistence.d.ts +12 -1
- package/dist/types/client/persistence/history-sync.d.ts +29 -0
- package/dist/types/client/{mailbox.d.ts → persistence/mailbox.d.ts} +4 -4
- package/dist/types/client/tokens/cs-token.d.ts +1 -3
- package/dist/types/client/types.d.ts +844 -72
- package/dist/types/crypto/core/hkdf.d.ts +10 -2
- package/dist/types/crypto/core/index.d.ts +2 -2
- package/dist/types/crypto/core/keys.d.ts +0 -4
- package/dist/types/crypto/core/nonce.d.ts +4 -5
- package/dist/types/crypto/core/primitives.d.ts +31 -20
- package/dist/types/crypto/core/random.d.ts +6 -0
- package/dist/types/crypto/core/xeddsa.d.ts +9 -0
- package/dist/types/crypto/curves/Ed25519.d.ts +7 -1
- package/dist/types/crypto/curves/X25519.d.ts +20 -1
- package/dist/types/crypto/curves/constants.d.ts +4 -3
- package/dist/types/crypto/curves/types.d.ts +0 -5
- package/dist/types/crypto/math/constants.d.ts +0 -1
- package/dist/types/crypto/math/mod.d.ts +0 -1
- package/dist/types/index.d.ts +34 -8
- package/dist/types/infra/log/ConsoleLogger.d.ts +18 -1
- package/dist/types/infra/log/PinoLogger.d.ts +55 -1
- package/dist/types/infra/log/types.d.ts +6 -0
- package/dist/types/infra/perf/BackgroundQueue.d.ts +19 -0
- package/dist/types/media/constants.d.ts +7 -2
- package/dist/types/media/crypto/WaMediaCrypto.d.ts +59 -0
- package/dist/types/media/index.d.ts +7 -5
- package/dist/types/media/processor.d.ts +27 -5
- package/dist/types/media/sticker/sticker-pack.d.ts +6 -0
- package/dist/types/media/{WaMediaTransferClient.d.ts → transfer/WaMediaTransferClient.d.ts} +30 -1
- package/dist/types/media/transfer/conn.d.ts +7 -0
- package/dist/types/media/types.d.ts +1 -2
- package/dist/types/message/WaMessageClient.d.ts +14 -0
- package/dist/types/message/addons/link-preview/builder.d.ts +13 -0
- package/dist/types/message/addons/link-preview/detect.d.ts +5 -0
- package/dist/types/message/addons/link-preview/fetcher.d.ts +13 -0
- package/dist/types/message/addons/link-preview/types.d.ts +51 -0
- package/dist/types/message/context-info.d.ts +66 -0
- package/dist/types/message/{addon-crypto.d.ts → crypto/addon-crypto.d.ts} +27 -5
- package/dist/types/message/{icdc.d.ts → crypto/icdc.d.ts} +4 -4
- package/dist/types/message/{phash.d.ts → crypto/phash.d.ts} +1 -1
- package/dist/types/message/{reporting-token.d.ts → crypto/reporting-token.d.ts} +2 -2
- package/dist/types/message/{use-case-secret.d.ts → crypto/use-case-secret.d.ts} +17 -1
- package/dist/types/message/encode/content.d.ts +43 -0
- package/dist/types/message/{device-sent.d.ts → encode/device-sent.d.ts} +1 -1
- package/dist/types/message/encode/media-payload.d.ts +12 -0
- package/dist/types/message/index.d.ts +2 -2
- package/dist/types/message/kinds/bot.d.ts +31 -0
- package/dist/types/message/kinds/newsletter.d.ts +12 -0
- package/dist/types/message/kinds/sticker-pack.d.ts +6 -0
- package/dist/types/message/{ack.d.ts → primitives/ack.d.ts} +1 -1
- package/dist/types/message/primitives/incoming.d.ts +21 -0
- package/dist/types/message/primitives/peer-data-operation.d.ts +23 -0
- package/dist/types/message/types.d.ts +209 -11
- package/dist/types/mex.d.ts +2 -0
- package/dist/types/proto.d.ts +2 -2
- package/dist/types/protocol/abprops.d.ts +9 -0
- package/dist/types/protocol/appstate.d.ts +4 -49
- package/dist/types/protocol/auth.d.ts +2 -2
- package/dist/types/protocol/bot.d.ts +45 -0
- package/dist/types/protocol/browser.d.ts +8 -0
- package/dist/types/protocol/business.d.ts +21 -0
- package/dist/types/protocol/call.d.ts +44 -0
- package/dist/types/protocol/constants.d.ts +16 -3
- package/dist/types/protocol/defaults.d.ts +3 -0
- package/dist/types/protocol/group.d.ts +1 -1
- package/dist/types/protocol/index.d.ts +2 -1
- package/dist/types/protocol/jid.d.ts +78 -0
- package/dist/types/protocol/media.d.ts +21 -13
- package/dist/types/protocol/message.d.ts +4 -0
- package/dist/types/protocol/newsletter.d.ts +65 -0
- package/dist/types/protocol/nodes.d.ts +20 -0
- package/dist/types/protocol/notification.d.ts +16 -0
- package/dist/types/protocol/presence.d.ts +16 -0
- package/dist/types/protocol/status.d.ts +7 -0
- package/dist/types/retry/codec.d.ts +5 -0
- package/dist/types/retry/index.d.ts +1 -1
- package/dist/types/retry/parse.d.ts +9 -0
- package/dist/types/retry/reason.d.ts +5 -0
- package/dist/types/retry/replay.d.ts +19 -5
- package/dist/types/retry/tracker.d.ts +10 -3
- package/dist/types/retry/types.d.ts +3 -8
- package/dist/types/signal/api/SignalDeviceSyncApi.d.ts +20 -0
- package/dist/types/signal/api/SignalDigestSyncApi.d.ts +10 -0
- package/dist/types/signal/api/SignalIdentitySyncApi.d.ts +9 -0
- package/dist/types/signal/api/SignalMissingPreKeysSyncApi.d.ts +8 -0
- package/dist/types/signal/api/SignalRotateKeyApi.d.ts +10 -0
- package/dist/types/signal/api/SignalSessionSyncApi.d.ts +13 -0
- package/dist/types/signal/api/codec.d.ts +20 -0
- package/dist/types/signal/api/constants.d.ts +1 -1
- package/dist/types/signal/api/prekeys.d.ts +4 -0
- package/dist/types/signal/{crypto → attestation}/WaAdvSignature.d.ts +2 -2
- package/dist/types/signal/attestation/constants.d.ts +4 -0
- package/dist/types/signal/constants.d.ts +7 -4
- package/dist/types/signal/encoding.d.ts +6 -68
- package/dist/types/signal/group/SenderKeyChain.d.ts +1 -1
- package/dist/types/signal/group/SenderKeyManager.d.ts +18 -1
- package/dist/types/signal/group/encoding.d.ts +25 -0
- package/dist/types/signal/index.d.ts +4 -1
- package/dist/types/signal/registration/encoding.d.ts +30 -0
- package/dist/types/signal/registration/keygen.d.ts +10 -0
- package/dist/types/signal/registration/utils.d.ts +5 -0
- package/dist/types/signal/session/SignalProtocol.d.ts +55 -0
- package/dist/types/signal/session/SignalRatchet.d.ts +2 -3
- package/dist/types/signal/session/SignalSession.d.ts +0 -1
- package/dist/types/signal/session/encoding.d.ts +28 -0
- package/dist/types/signal/session/resolver.d.ts +14 -0
- package/dist/types/signal/types.d.ts +1 -1
- package/dist/types/store/cache/identity.cache.d.ts +15 -0
- package/dist/types/store/cache/privacy-token.cache.d.ts +15 -0
- package/dist/types/store/cache/sender-key.cache.d.ts +18 -0
- package/dist/types/store/cache/session.cache.d.ts +23 -0
- package/dist/types/store/contracts/contact.store.d.ts +14 -0
- package/dist/types/store/contracts/device-list.store.d.ts +13 -0
- package/dist/types/store/contracts/group-metadata.store.d.ts +14 -0
- package/dist/types/store/contracts/message.store.d.ts +0 -2
- package/dist/types/store/createStore.d.ts +54 -2
- package/dist/types/store/index.d.ts +17 -16
- package/dist/types/store/locks/group-metadata.lock.d.ts +2 -0
- package/dist/types/store/{providers/memory → memory}/appstate.store.d.ts +2 -2
- package/dist/types/store/memory/auth.store.d.ts +18 -0
- package/dist/types/store/{providers/memory → memory}/contact.store.d.ts +6 -1
- package/dist/types/store/{providers/memory → memory}/device-list.store.d.ts +15 -2
- package/dist/types/store/memory/group-metadata.store.d.ts +27 -0
- package/dist/types/store/{providers/memory → memory}/identity.store.d.ts +2 -2
- package/dist/types/store/{providers/memory → memory}/message-secret.store.d.ts +12 -2
- package/dist/types/store/{providers/memory → memory}/message.store.d.ts +1 -1
- package/dist/types/store/{providers/memory → memory}/pre-key.store.d.ts +2 -2
- package/dist/types/store/{providers/memory → memory}/privacy-token.store.d.ts +1 -1
- package/dist/types/store/{providers/memory → memory}/retry.store.d.ts +16 -3
- package/dist/types/store/{providers/memory → memory}/sender-key.store.d.ts +2 -2
- package/dist/types/store/{providers/memory → memory}/session.store.d.ts +2 -2
- package/dist/types/store/{providers/memory → memory}/signal.store.d.ts +2 -2
- package/dist/types/store/{providers/memory → memory}/thread.store.d.ts +1 -1
- package/dist/types/store/noop.store.d.ts +2 -2
- package/dist/types/store/types.d.ts +250 -6
- package/dist/types/transport/WaComms.d.ts +5 -0
- package/dist/types/transport/WaWebSocket.d.ts +5 -0
- package/dist/types/transport/binary/constants.d.ts +8 -2
- package/dist/types/transport/binary/decoder.d.ts +5 -0
- package/dist/types/transport/binary/encoder.d.ts +5 -0
- package/dist/types/transport/binary/tokens.d.ts +6 -6
- package/dist/types/transport/index.d.ts +3 -1
- package/dist/types/transport/keepalive/WaKeepAlive.d.ts +7 -0
- package/dist/types/transport/node/WaMobileTcpSocket.d.ts +6 -0
- package/dist/types/transport/node/WaNodeOrchestrator.d.ts +5 -0
- package/dist/types/transport/node/WaNodeTransport.d.ts +13 -0
- package/dist/types/transport/node/builders/account-sync.d.ts +1 -2
- package/dist/types/transport/node/builders/bot.d.ts +4 -0
- package/dist/types/transport/node/builders/business.d.ts +21 -4
- package/dist/types/transport/node/builders/chatstate.d.ts +11 -0
- package/dist/types/transport/node/builders/community.d.ts +17 -0
- package/dist/types/transport/node/builders/group.d.ts +44 -2
- package/dist/types/transport/node/builders/message.d.ts +11 -6
- package/dist/types/transport/node/builders/newsletter.d.ts +73 -0
- package/dist/types/transport/node/builders/passive.d.ts +3 -0
- package/dist/types/transport/node/builders/presence.d.ts +8 -1
- package/dist/types/transport/node/builders/profile.d.ts +3 -0
- package/dist/types/transport/node/builders/tos.d.ts +12 -0
- package/dist/types/transport/node/builders/usync.d.ts +16 -0
- package/dist/types/transport/node/helpers.d.ts +1 -2
- package/dist/types/transport/node/mex/client.d.ts +12 -1
- package/dist/types/transport/node/query.d.ts +19 -1
- package/dist/types/transport/node/usync.d.ts +3 -0
- package/dist/types/transport/noise/WaMobileClientPayload.d.ts +6 -1
- package/dist/types/transport/noise/WaNoiseCert.d.ts +5 -0
- package/dist/types/transport/noise/WaNoiseHandshake.d.ts +12 -6
- package/dist/types/transport/noise/WaNoiseSession.d.ts +0 -1
- package/dist/types/transport/noise/WaNoiseSocket.d.ts +12 -6
- package/dist/types/transport/noise/constants.d.ts +4 -5
- package/dist/types/transport/noise/types.d.ts +1 -1
- package/dist/types/transport/proxy.d.ts +5 -0
- package/dist/types/transport/types.d.ts +14 -7
- package/dist/types/transport/wa-web-version-fetcher.d.ts +44 -0
- package/dist/types/util/async.d.ts +4 -0
- package/dist/types/util/bytes.d.ts +36 -1
- package/dist/types/util/clock.d.ts +6 -0
- package/dist/types/util/coercion.d.ts +25 -0
- package/dist/types/util/collections.d.ts +8 -0
- package/dist/types/util/index.d.ts +2 -2
- package/dist/types/util/primitives.d.ts +11 -0
- package/dist/types/util/runtime.d.ts +5 -0
- package/dist/types/version-spec.d.ts +1 -0
- package/dist/util/async.js +4 -0
- package/dist/util/bytes.js +37 -2
- package/dist/util/clock.js +18 -0
- package/dist/util/coercion.js +48 -3
- package/dist/util/collections.js +12 -0
- package/dist/util/index.js +7 -1
- package/dist/util/primitives.js +20 -0
- package/dist/util/runtime.js +5 -0
- package/dist/version-spec.js +5 -0
- package/package.json +32 -8
- package/spec/appstate/index.d.ts +188 -0
- package/spec/appstate/index.js +850 -0
- package/spec/mex/index.d.ts +4172 -0
- package/spec/mex/index.js +261 -0
- package/spec/proto/index.d.ts +16305 -0
- package/spec/proto/index.js +1 -0
- package/spec/version/index.d.ts +4 -0
- package/spec/version/index.js +9 -0
- package/spec/version/version.json +3 -0
- package/dist/client/events/chat.js +0 -227
- package/dist/client/incoming.js +0 -306
- package/dist/client/mailbox.js +0 -66
- package/dist/client/messages.js +0 -305
- package/dist/esm/client/events/chat.js +0 -224
- package/dist/esm/client/incoming.js +0 -296
- package/dist/esm/client/mailbox.js +0 -63
- package/dist/esm/client/messages.js +0 -301
- package/dist/esm/media/WaMediaCrypto.js +0 -499
- package/dist/esm/message/phash.js +0 -47
- package/dist/esm/store/locks/participants.lock.js +0 -20
- package/dist/esm/store/providers/memory/contact.store.js +0 -28
- package/dist/esm/store/providers/memory/device-list.store.js +0 -67
- package/dist/esm/transport/node/mex/persist-ids.js +0 -10
- package/dist/media/WaMediaCrypto.js +0 -503
- package/dist/message/phash.js +0 -50
- package/dist/store/locks/participants.lock.js +0 -23
- package/dist/store/providers/memory/contact.store.js +0 -32
- package/dist/store/providers/memory/device-list.store.js +0 -71
- package/dist/transport/node/mex/persist-ids.js +0 -13
- package/dist/types/appstate/WaAppStateSyncClient.d.ts +0 -70
- package/dist/types/client/events/chat.d.ts +0 -3
- package/dist/types/client/history-sync.d.ts +0 -20
- package/dist/types/client/messages.d.ts +0 -18
- package/dist/types/client/messaging/participants.d.ts +0 -13
- package/dist/types/media/WaMediaCrypto.d.ts +0 -22
- package/dist/types/media/conn.d.ts +0 -3
- package/dist/types/message/content.d.ts +0 -14
- package/dist/types/message/incoming.d.ts +0 -18
- package/dist/types/signal/crypto/constants.d.ts +0 -4
- package/dist/types/store/contracts/participants.store.d.ts +0 -13
- package/dist/types/store/locks/participants.lock.d.ts +0 -2
- package/dist/types/store/providers/memory/participants.store.d.ts +0 -17
- package/dist/types/transport/node/mex/persist-ids.d.ts +0 -14
- package/proto/index.d.ts +0 -10903
- package/proto/index.js +0 -1
- /package/dist/{store/contracts/participants.store.js → client/newsletter/types.js} +0 -0
- /package/dist/esm/{store/contracts/participants.store.js → client/newsletter/types.js} +0 -0
- /package/dist/esm/message/{device-sent.js → encode/device-sent.js} +0 -0
- /package/dist/esm/signal/{crypto → attestation}/constants.js +0 -0
- /package/dist/esm/store/{providers/memory → memory}/signal.store.js +0 -0
- /package/dist/message/{device-sent.js → encode/device-sent.js} +0 -0
- /package/dist/signal/{crypto → attestation}/constants.js +0 -0
- /package/dist/store/{providers/memory → memory}/signal.store.js +0 -0
- /package/dist/types/message/{padding.d.ts → encode/padding.d.ts} +0 -0
package/dist/store/{providers/memory/participants.store.js → memory/group-metadata.store.js}
RENAMED
|
@@ -1,32 +1,41 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
const coercion_1 = require("
|
|
5
|
-
const collections_1 = require("
|
|
3
|
+
exports.WaGroupMetadataMemoryStore = void 0;
|
|
4
|
+
const coercion_1 = require("../../util/coercion");
|
|
5
|
+
const collections_1 = require("../../util/collections");
|
|
6
6
|
const DEFAULTS = Object.freeze({
|
|
7
7
|
ttlMs: 5 * 60 * 1000,
|
|
8
8
|
maxGroups: 4096
|
|
9
9
|
});
|
|
10
|
-
class
|
|
10
|
+
class WaGroupMetadataMemoryStore {
|
|
11
11
|
constructor(ttlMs = DEFAULTS.ttlMs, options = {}) {
|
|
12
12
|
if (!Number.isFinite(ttlMs) || ttlMs <= 0) {
|
|
13
|
-
throw new Error('
|
|
13
|
+
throw new Error('groupMetadata ttlMs must be a positive finite number');
|
|
14
14
|
}
|
|
15
15
|
this.records = new Map();
|
|
16
16
|
this.ttlMs = ttlMs;
|
|
17
|
-
this.maxGroups = (0, coercion_1.resolvePositive)(options.maxGroups, DEFAULTS.maxGroups, '
|
|
18
|
-
this.
|
|
17
|
+
this.maxGroups = (0, coercion_1.resolvePositive)(options.maxGroups, DEFAULTS.maxGroups, 'WaGroupMetadataMemoryStoreOptions.maxGroups');
|
|
18
|
+
this.logger = options.logger;
|
|
19
|
+
this.capacityWarned = false;
|
|
20
|
+
this.cleanup = (0, collections_1.createPeriodicCleanup)(ttlMs, () => {
|
|
19
21
|
void this.cleanupExpired(Date.now());
|
|
20
|
-
}
|
|
21
|
-
this.cleanupTimer.unref();
|
|
22
|
+
});
|
|
22
23
|
}
|
|
23
|
-
|
|
24
|
+
warnCapacity() {
|
|
25
|
+
if (this.capacityWarned || !this.logger)
|
|
26
|
+
return;
|
|
27
|
+
this.capacityWarned = true;
|
|
28
|
+
this.logger.warn('group metadata store at capacity, evicting oldest', {
|
|
29
|
+
max: this.maxGroups
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
async upsertGroupMetadata(snapshot) {
|
|
24
33
|
(0, collections_1.setBoundedMapEntry)(this.records, snapshot.groupJid, {
|
|
25
34
|
...snapshot,
|
|
26
35
|
expiresAtMs: snapshot.updatedAtMs + this.ttlMs
|
|
27
|
-
}, this.maxGroups);
|
|
36
|
+
}, this.maxGroups, () => this.warnCapacity());
|
|
28
37
|
}
|
|
29
|
-
async
|
|
38
|
+
async getGroupMetadata(groupJid, nowMs = Date.now()) {
|
|
30
39
|
const record = this.records.get(groupJid);
|
|
31
40
|
if (!record) {
|
|
32
41
|
return null;
|
|
@@ -37,7 +46,7 @@ class WaParticipantsMemoryStore {
|
|
|
37
46
|
}
|
|
38
47
|
return record;
|
|
39
48
|
}
|
|
40
|
-
async
|
|
49
|
+
async deleteGroupMetadata(groupJid) {
|
|
41
50
|
return this.records.delete(groupJid) ? 1 : 0;
|
|
42
51
|
}
|
|
43
52
|
async cleanupExpired(nowMs) {
|
|
@@ -54,8 +63,8 @@ class WaParticipantsMemoryStore {
|
|
|
54
63
|
this.records.clear();
|
|
55
64
|
}
|
|
56
65
|
async destroy() {
|
|
57
|
-
|
|
66
|
+
this.cleanup.destroy();
|
|
58
67
|
await this.clear();
|
|
59
68
|
}
|
|
60
69
|
}
|
|
61
|
-
exports.
|
|
70
|
+
exports.WaGroupMetadataMemoryStore = WaGroupMetadataMemoryStore;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.WaIdentityMemoryStore = void 0;
|
|
4
|
-
const jid_1 = require("
|
|
5
|
-
const coercion_1 = require("
|
|
6
|
-
const collections_1 = require("
|
|
4
|
+
const jid_1 = require("../../protocol/jid");
|
|
5
|
+
const coercion_1 = require("../../util/coercion");
|
|
6
|
+
const collections_1 = require("../../util/collections");
|
|
7
7
|
const DEFAULT_MAX_REMOTE_IDENTITIES = 8192;
|
|
8
8
|
class WaIdentityMemoryStore {
|
|
9
9
|
constructor(options = {}) {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.WaMessageSecretMemoryStore = void 0;
|
|
4
|
-
const coercion_1 = require("
|
|
5
|
-
const collections_1 = require("
|
|
4
|
+
const coercion_1 = require("../../util/coercion");
|
|
5
|
+
const collections_1 = require("../../util/collections");
|
|
6
6
|
const DEFAULTS = Object.freeze({
|
|
7
7
|
ttlMs: 30 * 60 * 1000,
|
|
8
8
|
maxSecrets: 10000
|
|
@@ -15,10 +15,19 @@ class WaMessageSecretMemoryStore {
|
|
|
15
15
|
this.secrets = new Map();
|
|
16
16
|
this.ttlMs = ttlMs;
|
|
17
17
|
this.maxSecrets = (0, coercion_1.resolvePositive)(options.maxSecrets, DEFAULTS.maxSecrets, 'WaMessageSecretMemoryStoreOptions.maxSecrets');
|
|
18
|
-
this.
|
|
18
|
+
this.logger = options.logger;
|
|
19
|
+
this.capacityWarned = false;
|
|
20
|
+
this.cleanup = (0, collections_1.createPeriodicCleanup)(ttlMs, () => {
|
|
19
21
|
void this.cleanupExpired(Date.now());
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
warnCapacity() {
|
|
25
|
+
if (this.capacityWarned || !this.logger)
|
|
26
|
+
return;
|
|
27
|
+
this.capacityWarned = true;
|
|
28
|
+
this.logger.warn('message secret store at capacity, evicting oldest', {
|
|
29
|
+
max: this.maxSecrets
|
|
30
|
+
});
|
|
22
31
|
}
|
|
23
32
|
async get(messageId, nowMs = Date.now()) {
|
|
24
33
|
const cached = this.secrets.get(messageId);
|
|
@@ -52,7 +61,7 @@ class WaMessageSecretMemoryStore {
|
|
|
52
61
|
secret: entry.secret,
|
|
53
62
|
senderJid: entry.senderJid,
|
|
54
63
|
expiresAtMs: Date.now() + this.ttlMs
|
|
55
|
-
}, this.maxSecrets);
|
|
64
|
+
}, this.maxSecrets, () => this.warnCapacity());
|
|
56
65
|
}
|
|
57
66
|
async setBatch(entries) {
|
|
58
67
|
const nowMs = Date.now();
|
|
@@ -61,7 +70,7 @@ class WaMessageSecretMemoryStore {
|
|
|
61
70
|
secret: entries[i].entry.secret,
|
|
62
71
|
senderJid: entries[i].entry.senderJid,
|
|
63
72
|
expiresAtMs: nowMs + this.ttlMs
|
|
64
|
-
}, this.maxSecrets);
|
|
73
|
+
}, this.maxSecrets, () => this.warnCapacity());
|
|
65
74
|
}
|
|
66
75
|
}
|
|
67
76
|
async cleanupExpired(nowMs) {
|
|
@@ -78,7 +87,7 @@ class WaMessageSecretMemoryStore {
|
|
|
78
87
|
this.secrets.clear();
|
|
79
88
|
}
|
|
80
89
|
async destroy() {
|
|
81
|
-
|
|
90
|
+
this.cleanup.destroy();
|
|
82
91
|
this.secrets.clear();
|
|
83
92
|
}
|
|
84
93
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.WaMessageMemoryStore = void 0;
|
|
4
|
-
const coercion_1 = require("
|
|
5
|
-
const collections_1 = require("
|
|
4
|
+
const coercion_1 = require("../../util/coercion");
|
|
5
|
+
const collections_1 = require("../../util/collections");
|
|
6
6
|
const DEFAULT_MESSAGE_MEMORY_STORE_LIMITS = Object.freeze({
|
|
7
7
|
messages: 50000
|
|
8
8
|
});
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.WaPreKeyMemoryStore = void 0;
|
|
4
|
-
const coercion_1 = require("
|
|
5
|
-
const collections_1 = require("
|
|
4
|
+
const coercion_1 = require("../../util/coercion");
|
|
5
|
+
const collections_1 = require("../../util/collections");
|
|
6
6
|
const DEFAULT_MAX_PRE_KEYS = 4096;
|
|
7
7
|
class WaPreKeyMemoryStore {
|
|
8
8
|
constructor(options = {}) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.WaPrivacyTokenMemoryStore = void 0;
|
|
4
|
-
const collections_1 = require("
|
|
4
|
+
const collections_1 = require("../../util/collections");
|
|
5
5
|
const DEFAULT_MAX_ENTRIES = 10000;
|
|
6
6
|
class WaPrivacyTokenMemoryStore {
|
|
7
7
|
constructor(maxEntries = DEFAULT_MAX_ENTRIES) {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.WaRetryMemoryStore = void 0;
|
|
4
|
-
const coercion_1 = require("
|
|
5
|
-
const collections_1 = require("
|
|
4
|
+
const coercion_1 = require("../../util/coercion");
|
|
5
|
+
const collections_1 = require("../../util/collections");
|
|
6
6
|
const DEFAULTS = Object.freeze({
|
|
7
7
|
ttlMs: 60 * 1000,
|
|
8
8
|
maxOutboundMessages: 10000,
|
|
@@ -19,10 +19,28 @@ class WaRetryMemoryStore {
|
|
|
19
19
|
this.ttlMs = ttlMs;
|
|
20
20
|
this.maxOutboundMessages = (0, coercion_1.resolvePositive)(options.maxOutboundMessages, DEFAULTS.maxOutboundMessages, 'WaRetryMemoryStoreOptions.maxOutboundMessages');
|
|
21
21
|
this.maxInboundCounters = (0, coercion_1.resolvePositive)(options.maxInboundCounters, DEFAULTS.maxInboundCounters, 'WaRetryMemoryStoreOptions.maxInboundCounters');
|
|
22
|
-
this.
|
|
22
|
+
this.logger = options.logger;
|
|
23
|
+
this.outboundCapacityWarned = false;
|
|
24
|
+
this.inboundCapacityWarned = false;
|
|
25
|
+
this.cleanup = (0, collections_1.createPeriodicCleanup)(this.ttlMs, () => {
|
|
23
26
|
void this.cleanupExpired(Date.now());
|
|
24
|
-
}
|
|
25
|
-
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
warnOutboundCapacity() {
|
|
30
|
+
if (this.outboundCapacityWarned || !this.logger)
|
|
31
|
+
return;
|
|
32
|
+
this.outboundCapacityWarned = true;
|
|
33
|
+
this.logger.warn('retry outbound store at capacity, evicting oldest', {
|
|
34
|
+
max: this.maxOutboundMessages
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
warnInboundCapacity() {
|
|
38
|
+
if (this.inboundCapacityWarned || !this.logger)
|
|
39
|
+
return;
|
|
40
|
+
this.inboundCapacityWarned = true;
|
|
41
|
+
this.logger.warn('retry inbound counters at capacity, evicting oldest', {
|
|
42
|
+
max: this.maxInboundCounters
|
|
43
|
+
});
|
|
26
44
|
}
|
|
27
45
|
getTtlMs() {
|
|
28
46
|
return this.ttlMs;
|
|
@@ -78,6 +96,7 @@ class WaRetryMemoryStore {
|
|
|
78
96
|
};
|
|
79
97
|
(0, collections_1.setBoundedMapEntry)(this.outboundMessages, record.messageId, storedRecord, this.maxOutboundMessages, (messageId) => {
|
|
80
98
|
this.eligibleSets.delete(messageId);
|
|
99
|
+
this.warnOutboundCapacity();
|
|
81
100
|
});
|
|
82
101
|
if (record.eligibleRequesterDeviceJids && record.eligibleRequesterDeviceJids.length > 0) {
|
|
83
102
|
this.eligibleSets.set(record.messageId, new Set(record.eligibleRequesterDeviceJids));
|
|
@@ -106,6 +125,7 @@ class WaRetryMemoryStore {
|
|
|
106
125
|
expiresAtMs
|
|
107
126
|
}, this.maxOutboundMessages, (evictedMessageId) => {
|
|
108
127
|
this.eligibleSets.delete(evictedMessageId);
|
|
128
|
+
this.warnOutboundCapacity();
|
|
109
129
|
});
|
|
110
130
|
}
|
|
111
131
|
async markOutboundRequesterDelivered(messageId, requesterDeviceJid, updatedAtMs, expiresAtMs) {
|
|
@@ -122,13 +142,14 @@ class WaRetryMemoryStore {
|
|
|
122
142
|
expiresAtMs
|
|
123
143
|
}, this.maxOutboundMessages, (evictedMessageId) => {
|
|
124
144
|
this.eligibleSets.delete(evictedMessageId);
|
|
145
|
+
this.warnOutboundCapacity();
|
|
125
146
|
});
|
|
126
147
|
}
|
|
127
148
|
async incrementInboundCounter(messageId, requesterJid, _updatedAtMs, expiresAtMs) {
|
|
128
149
|
const key = this.counterKey(messageId, requesterJid);
|
|
129
150
|
const current = this.inboundCounters.get(key);
|
|
130
151
|
const count = current ? current.count + 1 : 1;
|
|
131
|
-
(0, collections_1.setBoundedMapEntry)(this.inboundCounters, key, { count, expiresAtMs }, this.maxInboundCounters);
|
|
152
|
+
(0, collections_1.setBoundedMapEntry)(this.inboundCounters, key, { count, expiresAtMs }, this.maxInboundCounters, () => this.warnInboundCapacity());
|
|
132
153
|
return count;
|
|
133
154
|
}
|
|
134
155
|
async cleanupExpired(nowMs) {
|
|
@@ -154,7 +175,7 @@ class WaRetryMemoryStore {
|
|
|
154
175
|
this.inboundCounters.clear();
|
|
155
176
|
}
|
|
156
177
|
async destroy() {
|
|
157
|
-
|
|
178
|
+
this.cleanup.destroy();
|
|
158
179
|
await this.clear();
|
|
159
180
|
}
|
|
160
181
|
counterKey(messageId, requesterJid) {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.SenderKeyMemoryStore = void 0;
|
|
4
|
-
const jid_1 = require("
|
|
5
|
-
const coercion_1 = require("
|
|
6
|
-
const collections_1 = require("
|
|
4
|
+
const jid_1 = require("../../protocol/jid");
|
|
5
|
+
const coercion_1 = require("../../util/coercion");
|
|
6
|
+
const collections_1 = require("../../util/collections");
|
|
7
7
|
const DEFAULT_SENDER_KEY_STORE_LIMITS = Object.freeze({
|
|
8
8
|
senderKeys: 8192,
|
|
9
9
|
senderDistributions: 8192
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.WaSessionMemoryStore = void 0;
|
|
4
|
-
const jid_1 = require("
|
|
5
|
-
const coercion_1 = require("
|
|
6
|
-
const collections_1 = require("
|
|
4
|
+
const jid_1 = require("../../protocol/jid");
|
|
5
|
+
const coercion_1 = require("../../util/coercion");
|
|
6
|
+
const collections_1 = require("../../util/collections");
|
|
7
7
|
const DEFAULT_MAX_SESSIONS = 8192;
|
|
8
8
|
class WaSessionMemoryStore {
|
|
9
9
|
constructor(options = {}) {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.WaThreadMemoryStore = void 0;
|
|
4
|
-
const coercion_1 = require("
|
|
5
|
-
const collections_1 = require("
|
|
4
|
+
const coercion_1 = require("../../util/coercion");
|
|
5
|
+
const collections_1 = require("../../util/collections");
|
|
6
6
|
const DEFAULT_THREAD_MEMORY_STORE_LIMITS = Object.freeze({
|
|
7
7
|
threads: 10000
|
|
8
8
|
});
|
package/dist/store/noop.store.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.NOOP_DEVICE_LIST_STORE = exports.
|
|
3
|
+
exports.NOOP_DEVICE_LIST_STORE = exports.NOOP_GROUP_METADATA_STORE = exports.NOOP_RETRY_STORE = exports.NOOP_CONTACT_STORE = exports.NOOP_THREAD_STORE = exports.NOOP_MESSAGE_STORE = exports.NOOP_MESSAGE_SECRET_STORE = void 0;
|
|
4
4
|
const EMPTY_STORE_LIST = Object.freeze([]);
|
|
5
5
|
exports.NOOP_MESSAGE_SECRET_STORE = Object.freeze({
|
|
6
6
|
get: async (_messageId) => null,
|
|
@@ -30,6 +30,7 @@ exports.NOOP_CONTACT_STORE = Object.freeze({
|
|
|
30
30
|
upsert: async (_record) => { },
|
|
31
31
|
upsertBatch: async (_records) => { },
|
|
32
32
|
getByJid: async (_jid) => null,
|
|
33
|
+
getByPhoneNumber: async (_pn) => null,
|
|
33
34
|
deleteByJid: async (_jid) => 0,
|
|
34
35
|
clear: async () => { }
|
|
35
36
|
});
|
|
@@ -45,10 +46,10 @@ exports.NOOP_RETRY_STORE = Object.freeze({
|
|
|
45
46
|
clear: async () => { },
|
|
46
47
|
destroy: async () => { }
|
|
47
48
|
});
|
|
48
|
-
exports.
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
49
|
+
exports.NOOP_GROUP_METADATA_STORE = Object.freeze({
|
|
50
|
+
upsertGroupMetadata: async (_snapshot) => { },
|
|
51
|
+
getGroupMetadata: async (_groupJid, _nowMs) => null,
|
|
52
|
+
deleteGroupMetadata: async (_groupJid) => 0,
|
|
52
53
|
cleanupExpired: async (_nowMs) => 0,
|
|
53
54
|
clear: async () => { },
|
|
54
55
|
destroy: async () => { }
|
|
@@ -56,6 +57,7 @@ exports.NOOP_PARTICIPANTS_STORE = Object.freeze({
|
|
|
56
57
|
exports.NOOP_DEVICE_LIST_STORE = Object.freeze({
|
|
57
58
|
upsertUserDevicesBatch: async (_snapshots) => { },
|
|
58
59
|
getUserDevicesBatch: async (userJids, _nowMs) => new Array(userJids.length).fill(null),
|
|
60
|
+
findByAnyUserJid: async (_jid, _nowMs) => null,
|
|
59
61
|
deleteUserDevices: async (_userJid) => 0,
|
|
60
62
|
cleanupExpired: async (_nowMs) => 0,
|
|
61
63
|
clear: async () => { },
|
|
@@ -12,6 +12,11 @@ const WA_FRAME_HANDLER_QUEUE_MAX_SIZE = 4096;
|
|
|
12
12
|
const WA_FRAME_HANDLER_MAX_CONCURRENCY = 8;
|
|
13
13
|
const WA_PENDING_FRAMES_MAX_COUNT = 2048;
|
|
14
14
|
const WA_PENDING_FRAMES_MAX_BYTES = 16 * 1024 * 1024;
|
|
15
|
+
/**
|
|
16
|
+
* Owns the WebSocket + Noise handshake lifecycle: opens the socket, drives
|
|
17
|
+
* the noise pairing/login exchange, persists routing-info/server-static
|
|
18
|
+
* updates, and delivers post-handshake binary frames to the caller.
|
|
19
|
+
*/
|
|
15
20
|
class WaComms {
|
|
16
21
|
constructor(config, logger = new ConsoleLogger_1.ConsoleLogger('info')) {
|
|
17
22
|
if (!config.noise) {
|
|
@@ -49,6 +54,7 @@ class WaComms {
|
|
|
49
54
|
onClose: async (info) => {
|
|
50
55
|
await this.onSocketClosed(info);
|
|
51
56
|
},
|
|
57
|
+
// eslint-disable-next-line @typescript-eslint/require-await
|
|
52
58
|
onError: async (error) => {
|
|
53
59
|
this.logger.warn('socket runtime error', { message: error.message });
|
|
54
60
|
},
|
|
@@ -113,7 +119,7 @@ class WaComms {
|
|
|
113
119
|
};
|
|
114
120
|
}
|
|
115
121
|
startComms(handleStanza, inflateFrame) {
|
|
116
|
-
this.logger.
|
|
122
|
+
this.logger.debug('comms start requested');
|
|
117
123
|
this.stanzaHandler = handleStanza;
|
|
118
124
|
this.inflateFrame = inflateFrame ?? null;
|
|
119
125
|
this.clearPendingFrames();
|
|
@@ -153,7 +159,7 @@ class WaComms {
|
|
|
153
159
|
this.frameProcessingQueue = this.frameProcessingQueue.then(() => this.flushPendingFrames(), () => this.flushPendingFrames());
|
|
154
160
|
}
|
|
155
161
|
async stopComms() {
|
|
156
|
-
this.logger.
|
|
162
|
+
this.logger.debug('comms stop requested');
|
|
157
163
|
this.resetConnectionState({
|
|
158
164
|
started: false,
|
|
159
165
|
connected: false,
|
|
@@ -166,7 +172,7 @@ class WaComms {
|
|
|
166
172
|
await this.socket.close(1000, 'stop_comms');
|
|
167
173
|
}
|
|
168
174
|
async closeSocketAndResume() {
|
|
169
|
-
this.logger.
|
|
175
|
+
this.logger.debug('comms close socket and resume requested');
|
|
170
176
|
this.resetConnectionState({
|
|
171
177
|
started: true,
|
|
172
178
|
connected: false,
|
|
@@ -251,6 +257,7 @@ class WaComms {
|
|
|
251
257
|
this.logger.warn('socket open failed', { message: (0, primitives_1.toError)(error).message });
|
|
252
258
|
}
|
|
253
259
|
}
|
|
260
|
+
// eslint-disable-next-line @typescript-eslint/require-await
|
|
254
261
|
async onSocketClosed(info) {
|
|
255
262
|
this.connected = false;
|
|
256
263
|
this.noiseSession?.onSocketClosed(new Error(`socket closed (${info.code}:${info.reason})`));
|
|
@@ -272,7 +279,8 @@ class WaComms {
|
|
|
272
279
|
this.logger.info('socket closed, scheduling reconnect', {
|
|
273
280
|
code: info.code,
|
|
274
281
|
reason: info.reason,
|
|
275
|
-
reconnectAfterMs: this.config.reconnectIntervalMs
|
|
282
|
+
reconnectAfterMs: this.config.reconnectIntervalMs,
|
|
283
|
+
reconnectAttempts: this.reconnectAttempts
|
|
276
284
|
});
|
|
277
285
|
}
|
|
278
286
|
onSocketMessage(payload) {
|
|
@@ -347,9 +355,10 @@ class WaComms {
|
|
|
347
355
|
this.lastServerStaticKey = session.getServerStaticKey();
|
|
348
356
|
this.connected = true;
|
|
349
357
|
this.reconnectAttempts = 0;
|
|
350
|
-
this.logger.
|
|
358
|
+
this.logger.debug('comms connected and noise session established');
|
|
351
359
|
this.drainWaiters((waiter) => waiter.resolve());
|
|
352
360
|
}
|
|
361
|
+
// eslint-disable-next-line @typescript-eslint/require-await
|
|
353
362
|
async flushPendingFrames() {
|
|
354
363
|
if (!this.handlingRequests || !this.stanzaHandler || this.pendingFrames.length === 0) {
|
|
355
364
|
return;
|
|
@@ -103,6 +103,11 @@ function resolveSocketRuntime() {
|
|
|
103
103
|
}
|
|
104
104
|
return 'browser';
|
|
105
105
|
}
|
|
106
|
+
/**
|
|
107
|
+
* Thin wrapper around a `RawWebSocket` (or Node `ws` constructor) used by
|
|
108
|
+
* {@link WaComms}. Iterates the configured URL list on failure and applies a
|
|
109
|
+
* connect/idle timeout.
|
|
110
|
+
*/
|
|
106
111
|
class WaWebSocket {
|
|
107
112
|
constructor(config, logger = new ConsoleLogger_1.ConsoleLogger('info')) {
|
|
108
113
|
this.config = Object.freeze({
|
|
@@ -208,6 +213,7 @@ class WaWebSocket {
|
|
|
208
213
|
}
|
|
209
214
|
});
|
|
210
215
|
}
|
|
216
|
+
// eslint-disable-next-line @typescript-eslint/require-await
|
|
211
217
|
async send(data) {
|
|
212
218
|
const socket = this.socket;
|
|
213
219
|
if (!socket || socket.readyState !== constants_1.WA_READY_STATES.OPEN) {
|
|
@@ -371,16 +377,30 @@ class WaWebSocket {
|
|
|
371
377
|
handlers.onOpen();
|
|
372
378
|
};
|
|
373
379
|
entry.socket.onerror = () => {
|
|
374
|
-
|
|
380
|
+
if (entry.settled) {
|
|
381
|
+
this.logger.trace('settled pending socket error', { url: entry.url });
|
|
382
|
+
}
|
|
383
|
+
else {
|
|
384
|
+
this.logger.warn('socket open error', { url: entry.url });
|
|
385
|
+
}
|
|
375
386
|
handlers.onFail(new Error(`websocket connect error for ${entry.url}`));
|
|
376
387
|
};
|
|
377
388
|
entry.socket.onclose = (event) => {
|
|
378
389
|
const info = this.toCloseInfo(event);
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
390
|
+
if (entry.settled) {
|
|
391
|
+
this.logger.trace('settled pending socket closed', {
|
|
392
|
+
url: entry.url,
|
|
393
|
+
code: info.code,
|
|
394
|
+
reason: info.reason
|
|
395
|
+
});
|
|
396
|
+
}
|
|
397
|
+
else {
|
|
398
|
+
this.logger.warn('socket closed before open', {
|
|
399
|
+
url: entry.url,
|
|
400
|
+
code: info.code,
|
|
401
|
+
reason: info.reason
|
|
402
|
+
});
|
|
403
|
+
}
|
|
384
404
|
handlers.onFail(new Error(`websocket closed before open (${info.code}:${info.reason}) for ${entry.url}`));
|
|
385
405
|
};
|
|
386
406
|
}
|
|
@@ -440,8 +460,12 @@ class WaWebSocket {
|
|
|
440
460
|
try {
|
|
441
461
|
socket.close(code, reason);
|
|
442
462
|
}
|
|
443
|
-
catch {
|
|
444
|
-
|
|
463
|
+
catch (error) {
|
|
464
|
+
this.logger.trace('socket close ignored', {
|
|
465
|
+
code,
|
|
466
|
+
reason,
|
|
467
|
+
message: (0, primitives_1.toError)(error).message
|
|
468
|
+
});
|
|
445
469
|
}
|
|
446
470
|
}
|
|
447
471
|
async createRawSocket(url) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DICTIONARY_TOKEN_MAPS = exports.SINGLE_BYTE_TOKEN_MAP = exports.HEX_ALPHABET = exports.NIBBLE_ALPHABET = exports.NIBBLE_8 = exports.BINARY_32 = exports.BINARY_20 = exports.BINARY_8 = exports.HEX_8 = exports.JID_PAIR = exports.LIST_16 = exports.LIST_8 = exports.JID_U = exports.JID_FB = exports.JID_INTEROP = exports.DICTIONARY_3 = exports.DICTIONARY_0 = exports.STREAM_END = exports.LIST_EMPTY = void 0;
|
|
3
|
+
exports.DICTIONARY_TOKEN_MAPS = exports.SINGLE_BYTE_TOKEN_MAP = exports.HEX_ALPHABET = exports.NIBBLE_ALPHABET = exports.JID_U_DOMAIN_TYPE_LID_MASK = exports.JID_U_DOMAIN_TYPE_HOSTED_MASK = exports.JID_U_DOMAIN_TYPE_HOSTED_LID = exports.JID_U_DOMAIN_TYPE_HOSTED = exports.JID_U_DOMAIN_TYPE_LID = exports.JID_U_DOMAIN_TYPE_PN = exports.NIBBLE_8 = exports.BINARY_32 = exports.BINARY_20 = exports.BINARY_8 = exports.HEX_8 = exports.JID_PAIR = exports.LIST_16 = exports.LIST_8 = exports.JID_U = exports.JID_FB = exports.JID_INTEROP = exports.DICTIONARY_3 = exports.DICTIONARY_0 = exports.STREAM_END = exports.LIST_EMPTY = void 0;
|
|
4
4
|
const tokens_1 = require("../binary/tokens");
|
|
5
5
|
exports.LIST_EMPTY = 0;
|
|
6
6
|
exports.STREAM_END = 2;
|
|
@@ -17,7 +17,13 @@ exports.BINARY_8 = 252;
|
|
|
17
17
|
exports.BINARY_20 = 253;
|
|
18
18
|
exports.BINARY_32 = 254;
|
|
19
19
|
exports.NIBBLE_8 = 255;
|
|
20
|
-
exports.
|
|
20
|
+
exports.JID_U_DOMAIN_TYPE_PN = 0x00;
|
|
21
|
+
exports.JID_U_DOMAIN_TYPE_LID = 0x01;
|
|
22
|
+
exports.JID_U_DOMAIN_TYPE_HOSTED = 0x80;
|
|
23
|
+
exports.JID_U_DOMAIN_TYPE_HOSTED_LID = 0x81;
|
|
24
|
+
exports.JID_U_DOMAIN_TYPE_HOSTED_MASK = 0x80;
|
|
25
|
+
exports.JID_U_DOMAIN_TYPE_LID_MASK = 0x01;
|
|
26
|
+
exports.NIBBLE_ALPHABET = Object.freeze([
|
|
21
27
|
'0',
|
|
22
28
|
'1',
|
|
23
29
|
'2',
|
|
@@ -34,8 +40,8 @@ exports.NIBBLE_ALPHABET = [
|
|
|
34
40
|
'\uFFFD',
|
|
35
41
|
'\uFFFD',
|
|
36
42
|
'\uFFFD'
|
|
37
|
-
];
|
|
38
|
-
exports.HEX_ALPHABET = [
|
|
43
|
+
]);
|
|
44
|
+
exports.HEX_ALPHABET = Object.freeze([
|
|
39
45
|
'0',
|
|
40
46
|
'1',
|
|
41
47
|
'2',
|
|
@@ -52,7 +58,7 @@ exports.HEX_ALPHABET = [
|
|
|
52
58
|
'D',
|
|
53
59
|
'E',
|
|
54
60
|
'F'
|
|
55
|
-
];
|
|
61
|
+
]);
|
|
56
62
|
exports.SINGLE_BYTE_TOKEN_MAP = (() => {
|
|
57
63
|
const map = new Map();
|
|
58
64
|
for (let i = 0; i < tokens_1.SINGLE_BYTE_TOKENS.length; i += 1) {
|
|
@@ -10,13 +10,6 @@ const tokens_1 = require("../binary/tokens");
|
|
|
10
10
|
const bytes_1 = require("../../util/bytes");
|
|
11
11
|
const unzipAsync = (0, node_util_1.promisify)(node_zlib_1.unzip);
|
|
12
12
|
const inflateRawAsync = (0, node_util_1.promisify)(node_zlib_1.inflateRaw);
|
|
13
|
-
const JID_U_DOMAIN_TYPE_LID = 0x01;
|
|
14
|
-
const JID_U_DOMAIN_TYPE_HOSTED_LID = 0x81;
|
|
15
|
-
const JID_U_DOMAIN_TYPE_HOSTED_MASK = 0x80;
|
|
16
|
-
const JID_U_DOMAIN_TYPE_LID_MASK = 0x01;
|
|
17
|
-
const JID_U_DOMAIN_LID = 'lid';
|
|
18
|
-
const JID_U_DOMAIN_HOSTED = 'hosted';
|
|
19
|
-
const JID_U_DOMAIN_HOSTED_LID = 'hosted.lid';
|
|
20
13
|
class ByteReader {
|
|
21
14
|
constructor(data) {
|
|
22
15
|
this.data = data;
|
|
@@ -58,27 +51,35 @@ class ByteReader {
|
|
|
58
51
|
}
|
|
59
52
|
}
|
|
60
53
|
}
|
|
54
|
+
// Reusable scratch buffer for nibble/hex unpack. Max output is
|
|
55
|
+
// `(0x7f) * 2 = 254` bytes (length byte holds the packed-byte count in
|
|
56
|
+
// its low 7 bits, each byte unpacks to ≤2 chars). Single-threaded JS +
|
|
57
|
+
// non-reentrant decoder makes module-level reuse safe – `TextDecoder`
|
|
58
|
+
// copies into the returned string before we touch the buffer again.
|
|
59
|
+
const PACKED_SCRATCH = new Uint8Array(256);
|
|
61
60
|
function parsePacked(reader, alphabet) {
|
|
62
61
|
const lengthByte = reader.readUint8();
|
|
63
62
|
const odd = (lengthByte & 0x80) !== 0;
|
|
64
63
|
const byteCount = lengthByte & 0x7f;
|
|
65
64
|
const outLength = byteCount * 2 - (odd ? 1 : 0);
|
|
66
|
-
|
|
65
|
+
if (outLength < 0) {
|
|
66
|
+
throw new Error(`invalid packed length byte 0x${lengthByte.toString(16)}`);
|
|
67
|
+
}
|
|
67
68
|
let outIndex = 0;
|
|
68
69
|
for (let i = 0; i < byteCount; i += 1) {
|
|
69
70
|
const packed = reader.readUint8();
|
|
70
71
|
const high = (packed >>> 4) & 0x0f;
|
|
71
72
|
const low = packed & 0x0f;
|
|
72
73
|
if (outIndex < outLength) {
|
|
73
|
-
|
|
74
|
+
PACKED_SCRATCH[outIndex] = alphabet[high].charCodeAt(0);
|
|
74
75
|
outIndex += 1;
|
|
75
76
|
}
|
|
76
77
|
if (outIndex < outLength) {
|
|
77
|
-
|
|
78
|
+
PACKED_SCRATCH[outIndex] = alphabet[low].charCodeAt(0);
|
|
78
79
|
outIndex += 1;
|
|
79
80
|
}
|
|
80
81
|
}
|
|
81
|
-
return bytes_1.TEXT_DECODER.decode(
|
|
82
|
+
return bytes_1.TEXT_DECODER.decode(PACKED_SCRATCH.subarray(0, outLength));
|
|
82
83
|
}
|
|
83
84
|
function readBinary(reader, token) {
|
|
84
85
|
if (token === constants_2.BINARY_8) {
|
|
@@ -131,15 +132,15 @@ function decodeJidU(reader) {
|
|
|
131
132
|
const device = reader.readUint8();
|
|
132
133
|
const user = decodeTokenString(reader.readUint8(), reader);
|
|
133
134
|
let domain = constants_1.WA_DEFAULTS.HOST_DOMAIN;
|
|
134
|
-
if (domainType === JID_U_DOMAIN_TYPE_LID) {
|
|
135
|
-
domain =
|
|
135
|
+
if (domainType === constants_2.JID_U_DOMAIN_TYPE_LID) {
|
|
136
|
+
domain = constants_1.WA_DEFAULTS.LID_SERVER;
|
|
136
137
|
}
|
|
137
|
-
else if (domainType === JID_U_DOMAIN_TYPE_HOSTED_LID) {
|
|
138
|
-
domain =
|
|
138
|
+
else if (domainType === constants_2.JID_U_DOMAIN_TYPE_HOSTED_LID) {
|
|
139
|
+
domain = constants_1.WA_DEFAULTS.HOSTED_LID_SERVER;
|
|
139
140
|
}
|
|
140
|
-
else if ((domainType & JID_U_DOMAIN_TYPE_HOSTED_MASK) !== 0 &&
|
|
141
|
-
(domainType & JID_U_DOMAIN_TYPE_LID_MASK) === 0) {
|
|
142
|
-
domain =
|
|
141
|
+
else if ((domainType & constants_2.JID_U_DOMAIN_TYPE_HOSTED_MASK) !== 0 &&
|
|
142
|
+
(domainType & constants_2.JID_U_DOMAIN_TYPE_LID_MASK) === 0) {
|
|
143
|
+
domain = constants_1.WA_DEFAULTS.HOSTED_SERVER;
|
|
143
144
|
}
|
|
144
145
|
if (device > 0) {
|
|
145
146
|
return `${user}:${device}@${domain}`;
|
|
@@ -247,6 +248,7 @@ function decodeNodeInternal(reader) {
|
|
|
247
248
|
: { tag: tagValue, attrs, content };
|
|
248
249
|
return node;
|
|
249
250
|
}
|
|
251
|
+
/** Decodes raw WhatsApp binary node bytes into a {@link BinaryNode}. */
|
|
250
252
|
function decodeBinaryNode(data) {
|
|
251
253
|
const reader = new ByteReader(data);
|
|
252
254
|
return decodeNodeInternal(reader);
|
|
@@ -265,6 +267,10 @@ async function inflateCompressedStanza(data) {
|
|
|
265
267
|
}
|
|
266
268
|
}
|
|
267
269
|
}
|
|
270
|
+
/**
|
|
271
|
+
* Decodes a framed stanza: reads the 1-byte flag, inflates the body when the
|
|
272
|
+
* `0x02` compression bit is set, then parses the result as a {@link BinaryNode}.
|
|
273
|
+
*/
|
|
268
274
|
async function decodeBinaryNodeStanza(stanza) {
|
|
269
275
|
const reader = new ByteReader(stanza);
|
|
270
276
|
const flag = reader.readUint8();
|