zapo-js 0.3.0 → 1.0.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/LICENSE +21 -0
- package/README.md +97 -177
- 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 +19 -7
- package/dist/auth/pairing/WaPairingFlow.js +33 -24
- package/dist/auth/pairing/pairing-code-crypto.js +16 -18
- package/dist/client/WaClient.js +342 -473
- package/dist/client/WaClientFactory.js +279 -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 +682 -204
- 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 +256 -125
- package/dist/client/coordinators/WaStatusCoordinator.js +49 -0
- package/dist/client/coordinators/WaStreamControlCoordinator.js +6 -6
- 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 +161 -4
- package/dist/client/messaging/fanout.js +9 -10
- package/dist/client/messaging/{participants.js → group-metadata.js} +73 -35
- package/dist/client/messaging/ignore-key.js +132 -0
- package/dist/client/messaging/key-protocol.js +3 -17
- 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 +280 -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 +6 -6
- 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 +156 -6
- package/dist/esm/client/messaging/fanout.js +10 -11
- package/dist/esm/client/messaging/{participants.js → group-metadata.js} +72 -34
- 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 +66 -19
- 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 +6 -0
- 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/{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 +31 -1
- 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 +129 -35
- package/dist/retry/tracker.js +3 -7
- package/dist/signal/api/SignalDeviceSyncApi.js +64 -17
- package/dist/signal/api/SignalDigestSyncApi.js +6 -1
- 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 +5 -7
- package/dist/signal/constants.js +4 -1
- package/dist/signal/encoding.js +5 -303
- package/dist/signal/group/SenderKeyChain.js +17 -32
- package/dist/signal/group/SenderKeyManager.js +24 -7
- 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 +10 -0
- package/dist/signal/registration/utils.js +6 -0
- package/dist/signal/session/SignalProtocol.js +112 -10
- package/dist/signal/session/SignalRatchet.js +24 -54
- package/dist/signal/session/SignalSession.js +6 -14
- 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/{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 +1 -1
- 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 +2 -1
- 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 +8 -8
- package/dist/transport/noise/WaMobileClientPayload.js +5 -0
- package/dist/transport/noise/WaNoiseCert.js +5 -0
- package/dist/transport/noise/WaNoiseHandshake.js +25 -23
- package/dist/transport/noise/WaNoiseSession.js +39 -59
- package/dist/transport/noise/WaNoiseSocket.js +18 -12
- 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/utils.d.ts +17 -1
- 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 +48 -1
- 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 +54 -31
- 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 +843 -71
- 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 +32 -6
- 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 +208 -10
- 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 +17 -0
- 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/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 +5 -0
- 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/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
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { proto } from '../../proto.js';
|
|
2
|
+
import { toUserJid } from '../../protocol/jid.js';
|
|
3
|
+
import { setBoundedMapEntry } from '../../util/collections.js';
|
|
4
|
+
const DEFAULT_TIMEOUT_MS = 30000;
|
|
5
|
+
const DEFAULT_MAX_PENDING = 256;
|
|
6
|
+
function buildRequestProtocolMessage(type, body) {
|
|
7
|
+
return {
|
|
8
|
+
type: proto.Message.ProtocolMessage.Type.PEER_DATA_OPERATION_REQUEST_MESSAGE,
|
|
9
|
+
peerDataOperationRequestMessage: {
|
|
10
|
+
...body,
|
|
11
|
+
peerDataOperationRequestType: type
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export function createPeerDataOperationRequester(options) {
|
|
16
|
+
const { logger, publishProtocolMessageToDevice, getCurrentCredentials, generateOutgoingMessageId, subscribeToProtocolMessage } = options;
|
|
17
|
+
const defaultTimeoutMs = options.defaultTimeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
18
|
+
const maxPending = options.maxPending ?? DEFAULT_MAX_PENDING;
|
|
19
|
+
const pending = new Map();
|
|
20
|
+
subscribeToProtocolMessage((event) => {
|
|
21
|
+
const protocolMessage = event.protocolMessage;
|
|
22
|
+
if (protocolMessage.type !==
|
|
23
|
+
proto.Message.ProtocolMessage.Type.PEER_DATA_OPERATION_REQUEST_RESPONSE_MESSAGE) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const response = protocolMessage.peerDataOperationRequestResponseMessage;
|
|
27
|
+
if (!response) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
const stanzaId = response.stanzaId;
|
|
31
|
+
const results = response.peerDataOperationResult ?? [];
|
|
32
|
+
if (!stanzaId) {
|
|
33
|
+
logger.debug('pdo response without stanzaId', {
|
|
34
|
+
from: event.key.remoteJid,
|
|
35
|
+
resultCount: results.length
|
|
36
|
+
});
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
const entry = pending.get(stanzaId);
|
|
40
|
+
if (!entry) {
|
|
41
|
+
logger.debug('pdo response for unknown stanzaId', {
|
|
42
|
+
stanzaId,
|
|
43
|
+
resultCount: results.length
|
|
44
|
+
});
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
clearTimeout(entry.timeout);
|
|
48
|
+
pending.delete(stanzaId);
|
|
49
|
+
entry.resolve(results);
|
|
50
|
+
});
|
|
51
|
+
const publish = async (type, body, id) => {
|
|
52
|
+
const meJid = getCurrentCredentials()?.meJid;
|
|
53
|
+
if (!meJid) {
|
|
54
|
+
throw new Error('peer data operation requires current me jid');
|
|
55
|
+
}
|
|
56
|
+
const result = await publishProtocolMessageToDevice(toUserJid(meJid), buildRequestProtocolMessage(type, body), { id, pushPriority: 'high_force' });
|
|
57
|
+
return result.id;
|
|
58
|
+
};
|
|
59
|
+
return {
|
|
60
|
+
request: async (type, body, requestOptions) => {
|
|
61
|
+
const messageId = await generateOutgoingMessageId();
|
|
62
|
+
const timeoutMs = requestOptions?.timeoutMs ?? defaultTimeoutMs;
|
|
63
|
+
return new Promise((resolve, reject) => {
|
|
64
|
+
const timeout = setTimeout(() => {
|
|
65
|
+
if (!pending.delete(messageId)) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
logger.debug('pdo request timed out', { messageId, timeoutMs, type });
|
|
69
|
+
reject(new Error(`peer data operation timed out after ${timeoutMs}ms (id=${messageId})`));
|
|
70
|
+
}, timeoutMs);
|
|
71
|
+
const entry = { resolve, reject, timeout };
|
|
72
|
+
setBoundedMapEntry(pending, messageId, entry, maxPending, (evictedKey, evicted) => {
|
|
73
|
+
clearTimeout(evicted.timeout);
|
|
74
|
+
logger.warn('pdo pending entry evicted: capacity reached', {
|
|
75
|
+
evictedId: evictedKey,
|
|
76
|
+
maxPending
|
|
77
|
+
});
|
|
78
|
+
evicted.reject(new Error(`peer data operation evicted from pending map (id=${String(evictedKey)})`));
|
|
79
|
+
});
|
|
80
|
+
publish(type, body, messageId).catch((error) => {
|
|
81
|
+
clearTimeout(timeout);
|
|
82
|
+
if (pending.delete(messageId)) {
|
|
83
|
+
reject(error instanceof Error ? error : new Error(String(error)));
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
},
|
|
88
|
+
send: async (type, body) => {
|
|
89
|
+
const messageId = await generateOutgoingMessageId();
|
|
90
|
+
return { messageId: await publish(type, body, messageId) };
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
}
|
package/dist/esm/mex.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { WA_MEX_PERSIST_IDS, WA_MEX_OPERATION_SCHEMAS } from '../spec/mex';
|
|
@@ -28,6 +28,16 @@ export const AB_PROP_CONFIGS = Object.freeze({
|
|
|
28
28
|
enable_syncd_debug_data_in_patch: prop(6614, 'bool', false),
|
|
29
29
|
enable_mention_everyone_syncd_sender: prop(24244, 'bool', false),
|
|
30
30
|
username_contact_syncd_support_enable: prop(17614, 'bool', false),
|
|
31
|
+
// --- newsletter ToS / NUX notice ids ---
|
|
32
|
+
newsletter_tos_notice_id: prop(3810, 'string', '20601216'),
|
|
33
|
+
newsletter_tos_notice_id_smb_web: prop(5597, 'string', '20601216'),
|
|
34
|
+
newsletter_creation_tos_id: prop(3834, 'string', '20601217'),
|
|
35
|
+
newsletter_creation_tos_id_smb_web: prop(5598, 'string', '20601217'),
|
|
36
|
+
newsletter_admin_invite_tos_id: prop(6498, 'string', '20610101'),
|
|
37
|
+
newsletter_admin_invite_tos_id_smb_web: prop(6536, 'string', '20610104'),
|
|
38
|
+
newsletter_creation_nux_id: prop(3835, 'string', '20601218'),
|
|
39
|
+
newsletter_nux_notice_id: prop(15255, 'string', '20610210'),
|
|
40
|
+
newsletter_admin_invite_nux_id: prop(15256, 'string', '20610220'),
|
|
31
41
|
// --- message sending / encryption ---
|
|
32
42
|
after_read_sending_enabled: prop(7293, 'bool', false),
|
|
33
43
|
after_read_fallback_duration: prop(7294, 'int', 86400),
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { TEXT_ENCODER } from '../util/bytes.js';
|
|
1
2
|
export const WA_APP_STATE_COLLECTIONS = Object.freeze({
|
|
2
3
|
REGULAR: 'regular',
|
|
3
4
|
REGULAR_LOW: 'regular_low',
|
|
@@ -17,7 +18,9 @@ export const WA_APP_STATE_COLLECTION_STATES = Object.freeze({
|
|
|
17
18
|
export const WA_APP_STATE_ERROR_CODES = Object.freeze({
|
|
18
19
|
CONFLICT: '409',
|
|
19
20
|
BAD_REQUEST: '400',
|
|
20
|
-
NOT_FOUND: '404'
|
|
21
|
+
NOT_FOUND: '404',
|
|
22
|
+
NOT_ALLOWED: '405',
|
|
23
|
+
NOT_ACCEPTABLE: '406'
|
|
21
24
|
});
|
|
22
25
|
export const WA_APP_STATE_SYNC_DATA_TYPE = Object.freeze({
|
|
23
26
|
PATCH: 'Patch',
|
|
@@ -29,33 +32,6 @@ export const WA_APP_STATE_KEY_TYPES = Object.freeze({
|
|
|
29
32
|
MD_MSG_HIST: 'md-msg-hist'
|
|
30
33
|
});
|
|
31
34
|
export const WA_APP_STATE_KDF_INFO = Object.freeze({
|
|
32
|
-
MUTATION_KEYS: 'WhatsApp Mutation Keys',
|
|
33
|
-
PATCH_INTEGRITY: 'WhatsApp Patch Integrity'
|
|
34
|
-
});
|
|
35
|
-
export const WA_APP_STATE_CHAT_MUTATION_SPECS = Object.freeze({
|
|
36
|
-
STAR: { collection: WA_APP_STATE_COLLECTIONS.REGULAR_HIGH, action: 'star', version: 2 },
|
|
37
|
-
MUTE: { collection: WA_APP_STATE_COLLECTIONS.REGULAR_HIGH, action: 'mute', version: 2 },
|
|
38
|
-
PIN: { collection: WA_APP_STATE_COLLECTIONS.REGULAR_LOW, action: 'pin_v1', version: 5 },
|
|
39
|
-
ARCHIVE: { collection: WA_APP_STATE_COLLECTIONS.REGULAR_LOW, action: 'archive', version: 3 },
|
|
40
|
-
DELETE_MESSAGE_FOR_ME: {
|
|
41
|
-
collection: WA_APP_STATE_COLLECTIONS.REGULAR_HIGH,
|
|
42
|
-
action: 'deleteMessageForMe',
|
|
43
|
-
version: 3
|
|
44
|
-
},
|
|
45
|
-
MARK_CHAT_AS_READ: {
|
|
46
|
-
collection: WA_APP_STATE_COLLECTIONS.REGULAR_LOW,
|
|
47
|
-
action: 'markChatAsRead',
|
|
48
|
-
version: 3
|
|
49
|
-
},
|
|
50
|
-
CLEAR_CHAT: {
|
|
51
|
-
collection: WA_APP_STATE_COLLECTIONS.REGULAR_HIGH,
|
|
52
|
-
action: 'clearChat',
|
|
53
|
-
version: 6
|
|
54
|
-
},
|
|
55
|
-
DELETE_CHAT: {
|
|
56
|
-
collection: WA_APP_STATE_COLLECTIONS.REGULAR_HIGH,
|
|
57
|
-
action: 'deleteChat',
|
|
58
|
-
version: 6
|
|
59
|
-
},
|
|
60
|
-
LOCK_CHAT: { collection: WA_APP_STATE_COLLECTIONS.REGULAR_LOW, action: 'lock', version: 7 }
|
|
35
|
+
MUTATION_KEYS: TEXT_ENCODER.encode('WhatsApp Mutation Keys'),
|
|
36
|
+
PATCH_INTEGRITY: TEXT_ENCODER.encode('WhatsApp Patch Integrity')
|
|
61
37
|
});
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { TEXT_ENCODER } from '../util/bytes.js';
|
|
1
2
|
export const WA_SIGNALING = Object.freeze({
|
|
2
3
|
LINK_CODE_STAGE_COMPANION_HELLO: 'companion_hello',
|
|
3
4
|
LINK_CODE_STAGE_GET_COUNTRY_CODE: 'get_country_code',
|
|
@@ -7,6 +8,6 @@ export const WA_SIGNALING = Object.freeze({
|
|
|
7
8
|
COMPANION_REG_REFRESH_NOTIFICATION: 'companion_reg_refresh'
|
|
8
9
|
});
|
|
9
10
|
export const WA_PAIRING_KDF_INFO = Object.freeze({
|
|
10
|
-
LINK_CODE_BUNDLE: 'link_code_pairing_key_bundle_encryption_key',
|
|
11
|
-
ADV_SECRET: 'adv_secret'
|
|
11
|
+
LINK_CODE_BUNDLE: TEXT_ENCODER.encode('link_code_pairing_key_bundle_encryption_key'),
|
|
12
|
+
ADV_SECRET: TEXT_ENCODER.encode('adv_secret')
|
|
12
13
|
});
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { proto } from '../proto.js';
|
|
2
|
+
import { WA_DEFAULTS } from './defaults.js';
|
|
3
|
+
import { isBotJid } from './jid.js';
|
|
4
|
+
import { TEXT_ENCODER } from '../util/bytes.js';
|
|
5
|
+
export const WA_BOT_MSG_EDIT_TYPES = Object.freeze({
|
|
6
|
+
FIRST: 'first',
|
|
7
|
+
INNER: 'inner',
|
|
8
|
+
LAST: 'last',
|
|
9
|
+
FULL: 'full'
|
|
10
|
+
});
|
|
11
|
+
export const WA_BOT_MSG_BODY_TYPES = Object.freeze({
|
|
12
|
+
PROMPT: 'prompt',
|
|
13
|
+
COMMAND: 'command',
|
|
14
|
+
VOICE: 'voice'
|
|
15
|
+
});
|
|
16
|
+
export const WA_BIZ_BOT_TYPES = Object.freeze({
|
|
17
|
+
ONE_P: '1',
|
|
18
|
+
THREE_P: '3'
|
|
19
|
+
});
|
|
20
|
+
const META_AI_PN_USER = '13135550002';
|
|
21
|
+
const META_AI_FBID_USER = '867051314767696';
|
|
22
|
+
const META_AI_TEE_FBID_USER = '1273596044787272';
|
|
23
|
+
const META_AI_SIDECHAT_FBID_USER = '867051314767696555';
|
|
24
|
+
const MANUS_FBID_USER = '1807055946647696';
|
|
25
|
+
const HATCH_FBID_USER = '1807055946647697';
|
|
26
|
+
export const WA_BOT_KNOWN_JIDS = Object.freeze({
|
|
27
|
+
META_AI_PN: `${META_AI_PN_USER}@${WA_DEFAULTS.HOST_DOMAIN}`,
|
|
28
|
+
META_AI_FBID: `${META_AI_FBID_USER}@${WA_DEFAULTS.BOT_SERVER}`,
|
|
29
|
+
META_AI_TEE_FBID: `${META_AI_TEE_FBID_USER}@${WA_DEFAULTS.BOT_SERVER}`,
|
|
30
|
+
META_AI_SIDECHAT_FBID: `${META_AI_SIDECHAT_FBID_USER}@${WA_DEFAULTS.BOT_SERVER}`,
|
|
31
|
+
MANUS_FBID: `${MANUS_FBID_USER}@${WA_DEFAULTS.BOT_SERVER}`,
|
|
32
|
+
HATCH_FBID: `${HATCH_FBID_USER}@${WA_DEFAULTS.BOT_SERVER}`
|
|
33
|
+
});
|
|
34
|
+
const PN_TO_FBID_BOT = Object.freeze({
|
|
35
|
+
[WA_BOT_KNOWN_JIDS.META_AI_PN]: WA_BOT_KNOWN_JIDS.META_AI_FBID
|
|
36
|
+
});
|
|
37
|
+
export function resolveBotFbidJid(jid) {
|
|
38
|
+
if (isBotJid(jid))
|
|
39
|
+
return jid;
|
|
40
|
+
return PN_TO_FBID_BOT[jid] ?? null;
|
|
41
|
+
}
|
|
42
|
+
export const WA_BOT_NODE_ATTRS = Object.freeze({
|
|
43
|
+
EDIT: 'edit',
|
|
44
|
+
EDIT_TARGET_ID: 'edit_target_id',
|
|
45
|
+
SENDER_TIMESTAMP_MS: 'sender_timestamp_ms',
|
|
46
|
+
BIZ_BOT: 'biz_bot',
|
|
47
|
+
TYPE: 'type'
|
|
48
|
+
});
|
|
49
|
+
export const WA_META_NODE_ATTRS_BOT = Object.freeze({
|
|
50
|
+
TARGET_ID: 'target_id',
|
|
51
|
+
TARGET_SENDER_JID: 'target_sender_jid',
|
|
52
|
+
TARGET_CHAT_JID: 'target_chat_jid'
|
|
53
|
+
});
|
|
54
|
+
export const WA_BOT_HKDF_INFO = TEXT_ENCODER.encode('Bot Message');
|
|
55
|
+
export const WA_BOT_MSG_SECRET_BYTES = 32;
|
|
56
|
+
// Without a matching Bloks hash, Meta AI silently drops invoke mentions.
|
|
57
|
+
// Bump alongside the Bloks bundle versions shipped by WA Web.
|
|
58
|
+
export const WA_BLOKS_VERSIONING_ID = '98153664e5d904059a94ea08a59fc7eeaf977544cec64ab3ab793c0ce001eb92';
|
|
59
|
+
export const WA_BOT_RENDERING_PIXEL_DENSITY = 2.8125;
|
|
60
|
+
// Default rich-response capability set; bots may reject prompts without one.
|
|
61
|
+
export const WA_BOT_DEFAULT_CAPABILITIES = Object.freeze([
|
|
62
|
+
proto.BotCapabilityMetadata.BotCapabilityType.RICH_RESPONSE_HEADING,
|
|
63
|
+
proto.BotCapabilityMetadata.BotCapabilityType.RICH_RESPONSE_NESTED_LIST,
|
|
64
|
+
proto.BotCapabilityMetadata.BotCapabilityType.RICH_RESPONSE_TABLE,
|
|
65
|
+
proto.BotCapabilityMetadata.BotCapabilityType.RICH_RESPONSE_CODE,
|
|
66
|
+
proto.BotCapabilityMetadata.BotCapabilityType.RICH_RESPONSE_STRUCTURED_RESPONSE,
|
|
67
|
+
proto.BotCapabilityMetadata.BotCapabilityType.RICH_RESPONSE_SUB_HEADING,
|
|
68
|
+
proto.BotCapabilityMetadata.BotCapabilityType.RICH_RESPONSE_LATEX,
|
|
69
|
+
proto.BotCapabilityMetadata.BotCapabilityType.RICH_RESPONSE_INLINE_REELS,
|
|
70
|
+
proto.BotCapabilityMetadata.BotCapabilityType.RICH_RESPONSE_LATEX_INLINE,
|
|
71
|
+
proto.BotCapabilityMetadata.BotCapabilityType.RICH_RESPONSE_UNIFIED_RESPONSE,
|
|
72
|
+
proto.BotCapabilityMetadata.BotCapabilityType.RICH_RESPONSE_SOURCES_IN_MESSAGE,
|
|
73
|
+
proto.BotCapabilityMetadata.BotCapabilityType.RICH_RESPONSE_UNIFIED_TEXT_COMPONENT,
|
|
74
|
+
proto.BotCapabilityMetadata.BotCapabilityType.RICH_RESPONSE_UNIFIED_SOURCES,
|
|
75
|
+
proto.BotCapabilityMetadata.BotCapabilityType.RICH_RESPONSE_UNIFIED_DOMAIN_CITATIONS,
|
|
76
|
+
proto.BotCapabilityMetadata.BotCapabilityType.RICH_RESPONSE_UR_INLINE_REELS_ENABLED
|
|
77
|
+
]);
|
|
@@ -38,10 +38,18 @@ const BROWSER_TO_DISPLAY_NAME = {
|
|
|
38
38
|
[WA_BROWSERS.SAFARI]: 'Safari',
|
|
39
39
|
[WA_BROWSERS.EDGE]: 'Edge'
|
|
40
40
|
};
|
|
41
|
+
/**
|
|
42
|
+
* Maps a {@link WA_BROWSERS} value to the companion platform id sent in the
|
|
43
|
+
* pairing `link_code` stanza. Unknown inputs fall back to `OTHER_WEB_CLIENT`.
|
|
44
|
+
*/
|
|
41
45
|
export function getWaCompanionPlatformId(browser) {
|
|
42
46
|
return (BROWSER_TO_PLATFORM_ID[browser.trim().toLowerCase()] ??
|
|
43
47
|
WA_COMPANION_PLATFORM_IDS.OTHER_WEB_CLIENT);
|
|
44
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* Returns the human-readable browser name advertised during pairing.
|
|
51
|
+
* Unknown inputs are echoed back unchanged.
|
|
52
|
+
*/
|
|
45
53
|
export function getWaBrowserDisplayName(browser) {
|
|
46
54
|
return BROWSER_TO_DISPLAY_NAME[browser.trim().toLowerCase()] ?? browser;
|
|
47
55
|
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export const WA_BUSINESS_HOURS_DAYS = Object.freeze({
|
|
2
|
+
SUN: 'sun',
|
|
3
|
+
MON: 'mon',
|
|
4
|
+
TUE: 'tue',
|
|
5
|
+
WED: 'wed',
|
|
6
|
+
THU: 'thu',
|
|
7
|
+
FRI: 'fri',
|
|
8
|
+
SAT: 'sat'
|
|
9
|
+
});
|
|
10
|
+
/**
|
|
11
|
+
* Per-day open mode accepted by the `business_profile` edit IQ. A closed day is
|
|
12
|
+
* expressed by omitting it from the config entirely, not by a dedicated mode.
|
|
13
|
+
* `open_time` / `close_time` are only meaningful for `specific_hours`.
|
|
14
|
+
*/
|
|
15
|
+
export const WA_BUSINESS_HOURS_MODES = Object.freeze({
|
|
16
|
+
OPEN_24H: 'open_24h',
|
|
17
|
+
SPECIFIC_HOURS: 'specific_hours',
|
|
18
|
+
APPOINTMENT_ONLY: 'appointment_only'
|
|
19
|
+
});
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
export const WA_CALL_PAYLOAD_TAGS = Object.freeze({
|
|
2
|
+
OFFER: 'offer',
|
|
3
|
+
OFFER_NOTICE: 'offer_notice',
|
|
4
|
+
ACCEPT: 'accept',
|
|
5
|
+
PREACCEPT: 'preaccept',
|
|
6
|
+
REJECT: 'reject',
|
|
7
|
+
TERMINATE: 'terminate',
|
|
8
|
+
TRANSPORT: 'transport',
|
|
9
|
+
MUTE: 'mute',
|
|
10
|
+
VIDEO_STATE: 'video_state',
|
|
11
|
+
GROUP_INFO: 'group_info',
|
|
12
|
+
GROUP_UPDATE: 'group_update',
|
|
13
|
+
ENC_REKEY: 'enc_rekey',
|
|
14
|
+
PEER_STATE: 'peer_state',
|
|
15
|
+
FLOW_CONTROL: 'flow_control',
|
|
16
|
+
WEB_CLIENT: 'web_client'
|
|
17
|
+
});
|
|
18
|
+
/**
|
|
19
|
+
* Payload tags that wa-web responds to with a `<receipt>` carrying a typed
|
|
20
|
+
* child node (`<offer call-id call-creator/>`, etc.) instead of a plain
|
|
21
|
+
* `<ack class="call"/>`. Source: `WAWebHandleVoipCall.js`.
|
|
22
|
+
*/
|
|
23
|
+
export const WA_CALL_RECEIPT_PAYLOAD_TAGS = new Set([
|
|
24
|
+
WA_CALL_PAYLOAD_TAGS.OFFER,
|
|
25
|
+
WA_CALL_PAYLOAD_TAGS.ACCEPT,
|
|
26
|
+
WA_CALL_PAYLOAD_TAGS.REJECT,
|
|
27
|
+
WA_CALL_PAYLOAD_TAGS.ENC_REKEY
|
|
28
|
+
]);
|
|
29
|
+
export const WA_CALL_NODE_ATTRS = Object.freeze({
|
|
30
|
+
CALL_ID: 'call-id',
|
|
31
|
+
CALL_CREATOR: 'call-creator',
|
|
32
|
+
GROUP_JID: 'group-jid',
|
|
33
|
+
CALLER_PN: 'caller_pn',
|
|
34
|
+
CALLER_COUNTRY_CODE: 'caller_country_code',
|
|
35
|
+
USERNAME: 'username',
|
|
36
|
+
NOTIFY: 'notify',
|
|
37
|
+
SENDER_LID: 'sender_lid',
|
|
38
|
+
PLATFORM: 'platform',
|
|
39
|
+
VERSION: 'version',
|
|
40
|
+
REASON: 'reason',
|
|
41
|
+
USER_PN: 'user_pn',
|
|
42
|
+
GUEST_NAME: 'guest_name'
|
|
43
|
+
});
|
|
44
|
+
export const WA_CALL_CHILD_TAGS = Object.freeze({
|
|
45
|
+
VIDEO: 'video',
|
|
46
|
+
SILENCE: 'silence',
|
|
47
|
+
GROUP_INFO: 'group_info'
|
|
48
|
+
});
|
|
@@ -2,15 +2,21 @@ export { getWaCompanionPlatformId, WA_BROWSERS, WA_COMPANION_PLATFORM_IDS } from
|
|
|
2
2
|
export { WA_SIGNALING, WA_PAIRING_KDF_INFO } from './auth.js';
|
|
3
3
|
export { WA_CONNECTION_REASONS, WA_DISCONNECT_REASONS, WA_FAILURE_REASONS, WA_LOGOUT_REASONS, WA_READY_STATES, WA_STREAM_SIGNALING } from './stream.js';
|
|
4
4
|
export { WA_IQ_TYPES, WA_NODE_TAGS, WA_XMLNS } from './nodes.js';
|
|
5
|
+
export { WA_CALL_CHILD_TAGS, WA_CALL_NODE_ATTRS, WA_CALL_PAYLOAD_TAGS, WA_CALL_RECEIPT_PAYLOAD_TAGS } from './call.js';
|
|
5
6
|
export { WA_EDIT_ATTRS, WA_ENC_MEDIA_TYPES, WA_EVENT_META_TYPES, WA_MESSAGE_TAGS, WA_MESSAGE_TYPES, WA_POLL_META_TYPES, WA_RETRYABLE_ACK_CODES, WA_STANZA_MSG_TYPES } from './message.js';
|
|
6
|
-
export { WA_APP_STATE_COLLECTIONS, WA_APP_STATE_COLLECTION_STATES,
|
|
7
|
+
export { 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 } from './appstate.js';
|
|
7
8
|
export { getWaMediaHkdfInfo, WA_MEDIA_HKDF_INFO, WA_PREVIEW_MEDIA_HKDF_INFO } from './media.js';
|
|
8
9
|
export { WA_ACCOUNT_SYNC_PROTOCOLS, WA_DIRTY_PROTOCOLS, WA_DIRTY_TYPES, WA_SUPPORTED_DIRTY_TYPES } from './dirty.js';
|
|
9
|
-
export { WA_GROUP_NOTIFICATION_TAGS, WA_NOTIFICATION_TYPES, WA_REGISTRATION_NOTIFICATION_TAGS } from './notification.js';
|
|
10
|
+
export { WA_BUSINESS_NOTIFICATION_TAGS, WA_GROUP_NOTIFICATION_TAGS, WA_NEWSLETTER_NOTIFICATION_TAGS, WA_NOTIFICATION_TYPES, WA_REGISTRATION_NOTIFICATION_TAGS } from './notification.js';
|
|
11
|
+
export { WA_BUSINESS_HOURS_DAYS, WA_BUSINESS_HOURS_MODES } from './business.js';
|
|
12
|
+
export { WA_CHATSTATE_MEDIA, WA_PRESENCE_LAST_SENTINELS, WA_PRESENCE_TYPES } from './presence.js';
|
|
10
13
|
export { WA_PRIVACY_TOKEN_NOTIFICATION_TYPE, WA_PRIVACY_TOKEN_TAGS, WA_PRIVACY_TOKEN_TYPES, WA_TC_TOKEN_DEFAULTS } from './privacy-token.js';
|
|
11
14
|
export { WA_PRIVACY_CATEGORIES, WA_PRIVACY_CATEGORY_TO_SETTING, WA_PRIVACY_DISALLOWED_LIST_CATEGORIES, WA_PRIVACY_SETTING_TO_CATEGORY, WA_PRIVACY_TAGS, WA_PRIVACY_VALUES } from './privacy.js';
|
|
12
15
|
export { WA_DEFAULTS } from './defaults.js';
|
|
16
|
+
export { WA_BIZ_BOT_TYPES, WA_BOT_DEFAULT_CAPABILITIES, WA_BOT_HKDF_INFO, WA_BOT_KNOWN_JIDS, WA_BOT_MSG_BODY_TYPES, WA_BOT_MSG_EDIT_TYPES, WA_BOT_MSG_SECRET_BYTES, WA_BOT_NODE_ATTRS, WA_META_NODE_ATTRS_BOT } from './bot.js';
|
|
17
|
+
export { WA_STATUS_DISTRIBUTION_SETTINGS } from './status.js';
|
|
13
18
|
export { WA_EMAIL_CONTEXTS, WA_EMAIL_ERROR_CODES, WA_EMAIL_LIMITS, WA_EMAIL_TAGS, WA_EMAIL_XMLNS } from './email.js';
|
|
14
19
|
export { AB_PROP_CONFIGS, resolveAbPropNameByCode, WA_ABPROPS_PROTOCOL_VERSION, WA_ABPROPS_REFRESH_BOUNDS } from './abprops.js';
|
|
15
20
|
export { WA_GROUP_PARTICIPANT_TYPES } from './group.js';
|
|
16
21
|
export { WA_USYNC_CONTEXTS, WA_USYNC_DEFAULTS, WA_USYNC_MODES } from './usync.js';
|
|
22
|
+
export { WA_NEWSLETTER_FETCH_KEY_TYPES, WA_NEWSLETTER_MUTE_TYPES, WA_NEWSLETTER_MUTE_VALUES, WA_NEWSLETTER_PICTURE_TYPES, WA_NEWSLETTER_RECEIVE_TYPES, WA_NEWSLETTER_ROLES, WA_NEWSLETTER_SEND_TYPES, WA_NEWSLETTER_STATE_TYPES, WA_NEWSLETTER_VERIFICATION_STATES, WA_NEWSLETTER_VIEW_ROLES } from './newsletter.js';
|
|
@@ -9,6 +9,9 @@ export const WA_DEFAULTS = Object.freeze({
|
|
|
9
9
|
HOSTED_DEVICE_ID: 99,
|
|
10
10
|
MSGR_SERVER: 'msgr',
|
|
11
11
|
INTEROP_SERVER: 'interop',
|
|
12
|
+
NEWSLETTER_SERVER: 'newsletter',
|
|
13
|
+
BOT_SERVER: 'bot',
|
|
14
|
+
STATUS_BROADCAST_JID: 'status@broadcast',
|
|
12
15
|
DEVICE_BROWSER: WA_BROWSERS.FIREFOX,
|
|
13
16
|
DEVICE_PLATFORM: getWaCompanionPlatformId(WA_BROWSERS.FIREFOX),
|
|
14
17
|
CHAT_SOCKET_URLS: ['wss://web.whatsapp.com/ws/chat', 'wss://web.whatsapp.com:5222/ws/chat'],
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export * from './constants.js';
|
|
2
|
-
export { buildDeviceJid, canonicalizeSignalJid, canonicalizeSignalServer, getLoginIdentity, isHostedDeviceId, isHostedDeviceJid, isHostedServer,
|
|
2
|
+
export { applyDeviceToJid, buildDeviceJid, canonicalizeSignalJid, canonicalizeSignalServer, getLoginIdentity, isBotJid, isBroadcastJid, isGroupJid, isGroupOrBroadcastJid, isHostedDeviceId, isHostedDeviceJid, isHostedServer, isLidJid, isNewsletterJid, isStatusBroadcastJid, isUserJid, normalizeDeviceJid, normalizeRecipientJid, parseJidFull, parsePhoneJid, parseSignalAddressFromJid, signalAddressKey, splitJid, toUserJid } from './jid.js';
|
package/dist/esm/protocol/jid.js
CHANGED
|
@@ -7,7 +7,9 @@ const KNOWN_SERVERS = {
|
|
|
7
7
|
[WA_DEFAULTS.HOSTED_SERVER]: WA_DEFAULTS.HOSTED_SERVER,
|
|
8
8
|
[WA_DEFAULTS.HOSTED_LID_SERVER]: WA_DEFAULTS.HOSTED_LID_SERVER,
|
|
9
9
|
[WA_DEFAULTS.MSGR_SERVER]: WA_DEFAULTS.MSGR_SERVER,
|
|
10
|
-
[WA_DEFAULTS.INTEROP_SERVER]: WA_DEFAULTS.INTEROP_SERVER
|
|
10
|
+
[WA_DEFAULTS.INTEROP_SERVER]: WA_DEFAULTS.INTEROP_SERVER,
|
|
11
|
+
[WA_DEFAULTS.NEWSLETTER_SERVER]: WA_DEFAULTS.NEWSLETTER_SERVER,
|
|
12
|
+
[WA_DEFAULTS.BOT_SERVER]: WA_DEFAULTS.BOT_SERVER
|
|
11
13
|
};
|
|
12
14
|
/**
|
|
13
15
|
* Returns the canonical reference for known server strings, avoiding
|
|
@@ -32,10 +34,20 @@ function findAtIndex(jid) {
|
|
|
32
34
|
throw new Error(`invalid jid: ${jid}`);
|
|
33
35
|
return atIndex;
|
|
34
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* Splits a JID into `user` and `server` parts at the `@` separator.
|
|
39
|
+
* Throws if the input does not contain a valid `user@server` shape.
|
|
40
|
+
*/
|
|
35
41
|
export function splitJid(jid) {
|
|
36
42
|
const atIndex = findAtIndex(jid);
|
|
37
43
|
return { user: jid.slice(0, atIndex), server: internServer(jid.slice(atIndex + 1)) };
|
|
38
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* Normalizes a user-supplied recipient (phone number, group id, or full JID)
|
|
47
|
+
* into a canonical JID. Strings already containing `@` are returned as-is;
|
|
48
|
+
* dashed inputs map to `<input>@g.us` (group); pure-digit inputs map to
|
|
49
|
+
* `<digits>@s.whatsapp.net`.
|
|
50
|
+
*/
|
|
39
51
|
export function normalizeRecipientJid(to) {
|
|
40
52
|
const input = to.trim();
|
|
41
53
|
if (input.length === 0)
|
|
@@ -58,23 +70,51 @@ export function normalizeRecipientJid(to) {
|
|
|
58
70
|
}
|
|
59
71
|
function isJidType(jid, type) {
|
|
60
72
|
const atIndex = jid.length - type.length - 1;
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
73
|
+
if (atIndex < 1 || jid.charCodeAt(atIndex) !== 64 || !jid.endsWith(type))
|
|
74
|
+
return false;
|
|
75
|
+
// Reject multi-@ JIDs (consistency with splitJid). Manual loop beats indexOf.
|
|
76
|
+
for (let i = 0; i < atIndex; i += 1) {
|
|
77
|
+
if (jid.charCodeAt(i) === 64)
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
return true;
|
|
65
81
|
}
|
|
82
|
+
/** Returns `true` for JIDs in the `@lid` server (linked-device identity). */
|
|
66
83
|
export function isLidJid(jid) {
|
|
67
84
|
return isJidType(jid, WA_DEFAULTS.LID_SERVER);
|
|
68
85
|
}
|
|
86
|
+
/** Returns `true` for JIDs in the `@s.whatsapp.net` server (phone-number user JIDs). */
|
|
87
|
+
export function isUserJid(jid) {
|
|
88
|
+
return isJidType(jid, WA_DEFAULTS.HOST_DOMAIN);
|
|
89
|
+
}
|
|
90
|
+
/** Returns `true` for JIDs in the `@bot` server. */
|
|
91
|
+
export function isBotJid(jid) {
|
|
92
|
+
return isJidType(jid, WA_DEFAULTS.BOT_SERVER);
|
|
93
|
+
}
|
|
94
|
+
/** Returns `true` for JIDs in the `@g.us` server (groups). */
|
|
69
95
|
export function isGroupJid(jid) {
|
|
70
96
|
return isJidType(jid, WA_DEFAULTS.GROUP_SERVER);
|
|
71
97
|
}
|
|
98
|
+
/** Returns `true` for JIDs in the `@broadcast` server (broadcast lists). */
|
|
72
99
|
export function isBroadcastJid(jid) {
|
|
73
100
|
return isJidType(jid, WA_DEFAULTS.BROADCAST_SERVER);
|
|
74
101
|
}
|
|
102
|
+
/** Returns `true` for the special `status@broadcast` JID. */
|
|
103
|
+
export function isStatusBroadcastJid(jid) {
|
|
104
|
+
return jid === WA_DEFAULTS.STATUS_BROADCAST_JID;
|
|
105
|
+
}
|
|
106
|
+
/** Returns `true` for JIDs in the `@newsletter` server. */
|
|
107
|
+
export function isNewsletterJid(jid) {
|
|
108
|
+
return isJidType(jid, WA_DEFAULTS.NEWSLETTER_SERVER);
|
|
109
|
+
}
|
|
110
|
+
/** Returns `true` for any group or broadcast JID. */
|
|
75
111
|
export function isGroupOrBroadcastJid(jid) {
|
|
76
112
|
return isGroupJid(jid) || isBroadcastJid(jid);
|
|
77
113
|
}
|
|
114
|
+
/**
|
|
115
|
+
* Parses a JID into a Signal-style `{ user, server, device }` address.
|
|
116
|
+
* `device` is `0` when the JID has no `:device` segment.
|
|
117
|
+
*/
|
|
78
118
|
export function parseSignalAddressFromJid(jid) {
|
|
79
119
|
const atIndex = findAtIndex(jid);
|
|
80
120
|
const colonIndex = jid.indexOf(':', 0);
|
|
@@ -95,12 +135,21 @@ export function parseSignalAddressFromJid(jid) {
|
|
|
95
135
|
}
|
|
96
136
|
return { user: jid.slice(0, colonIndex), server, device };
|
|
97
137
|
}
|
|
138
|
+
/**
|
|
139
|
+
* Parses a JID and returns the Signal address plus the user-only and
|
|
140
|
+
* fully-normalized device JID forms in a single pass.
|
|
141
|
+
*/
|
|
98
142
|
export function parseJidFull(jid) {
|
|
99
143
|
const address = parseSignalAddressFromJid(jid);
|
|
100
144
|
const userJid = `${address.user}@${address.server}`;
|
|
101
145
|
const normalizedJid = address.device === 0 ? userJid : `${address.user}:${address.device}@${address.server}`;
|
|
102
146
|
return { address, userJid, normalizedJid };
|
|
103
147
|
}
|
|
148
|
+
/**
|
|
149
|
+
* Maps the hosted-account server variants (`hosted` / `hosted.lid`) back to
|
|
150
|
+
* their canonical Signal server (`hostDomain` / `lid`). Other servers are
|
|
151
|
+
* returned unchanged.
|
|
152
|
+
*/
|
|
104
153
|
export function canonicalizeSignalServer(server, hostDomain = WA_DEFAULTS.HOST_DOMAIN) {
|
|
105
154
|
if (server === WA_DEFAULTS.HOSTED_SERVER)
|
|
106
155
|
return hostDomain;
|
|
@@ -108,6 +157,11 @@ export function canonicalizeSignalServer(server, hostDomain = WA_DEFAULTS.HOST_D
|
|
|
108
157
|
return WA_DEFAULTS.LID_SERVER;
|
|
109
158
|
return server;
|
|
110
159
|
}
|
|
160
|
+
/**
|
|
161
|
+
* Returns the JID rewritten with its server canonicalized via
|
|
162
|
+
* {@link canonicalizeSignalServer} – used to derive the address Signal
|
|
163
|
+
* sessions are keyed by.
|
|
164
|
+
*/
|
|
111
165
|
export function canonicalizeSignalJid(jid, hostDomain = WA_DEFAULTS.HOST_DOMAIN) {
|
|
112
166
|
const address = parseSignalAddressFromJid(jid);
|
|
113
167
|
const server = canonicalizeSignalServer(address.server ?? WA_DEFAULTS.HOST_DOMAIN, hostDomain);
|
|
@@ -115,6 +169,11 @@ export function canonicalizeSignalJid(jid, hostDomain = WA_DEFAULTS.HOST_DOMAIN)
|
|
|
115
169
|
return `${address.user}@${server}`;
|
|
116
170
|
return `${address.user}:${address.device}@${server}`;
|
|
117
171
|
}
|
|
172
|
+
/**
|
|
173
|
+
* Strips the `:device` segment from a JID, returning the bare `user@server`
|
|
174
|
+
* form. Set `options.canonicalizeSignalServer` to also rewrite hosted servers
|
|
175
|
+
* via {@link canonicalizeSignalServer}.
|
|
176
|
+
*/
|
|
118
177
|
export function toUserJid(jid, options = {}) {
|
|
119
178
|
const canonicalize = options.canonicalizeSignalServer === true;
|
|
120
179
|
if (!canonicalize) {
|
|
@@ -132,18 +191,38 @@ export function toUserJid(jid, options = {}) {
|
|
|
132
191
|
: address.server;
|
|
133
192
|
return `${address.user}@${server}`;
|
|
134
193
|
}
|
|
194
|
+
/**
|
|
195
|
+
* Returns the JID in its full device form. JIDs with `device === 0` lose the
|
|
196
|
+
* device segment (`user@server`); all others keep `user:device@server`.
|
|
197
|
+
*/
|
|
135
198
|
export function normalizeDeviceJid(jid) {
|
|
136
199
|
const address = parseSignalAddressFromJid(jid);
|
|
137
200
|
if (address.device === 0)
|
|
138
201
|
return `${address.user}@${address.server}`;
|
|
139
202
|
return `${address.user}:${address.device}@${address.server}`;
|
|
140
203
|
}
|
|
204
|
+
/**
|
|
205
|
+
* Appends `:device` to a bare user JID. A falsy `device` returns the input
|
|
206
|
+
* unchanged.
|
|
207
|
+
*/
|
|
208
|
+
export function applyDeviceToJid(userJid, device) {
|
|
209
|
+
if (!device)
|
|
210
|
+
return userJid;
|
|
211
|
+
const address = parseSignalAddressFromJid(userJid);
|
|
212
|
+
return buildDeviceJid(address.user, address.server ?? WA_DEFAULTS.HOST_DOMAIN, device);
|
|
213
|
+
}
|
|
214
|
+
/** Returns `true` when `deviceId` matches the WhatsApp hosted-device id. */
|
|
141
215
|
export function isHostedDeviceId(deviceId) {
|
|
142
216
|
return deviceId === WA_DEFAULTS.HOSTED_DEVICE_ID;
|
|
143
217
|
}
|
|
218
|
+
/** Returns `true` for the hosted server variants (`hosted` and `hosted.lid`). */
|
|
144
219
|
export function isHostedServer(server) {
|
|
145
220
|
return server === WA_DEFAULTS.HOSTED_SERVER || server === WA_DEFAULTS.HOSTED_LID_SERVER;
|
|
146
221
|
}
|
|
222
|
+
/**
|
|
223
|
+
* Returns `true` when the JID refers to a hosted device – either by server
|
|
224
|
+
* (`@hosted` / `@hosted.lid`) or by a `:HOSTED_DEVICE_ID@…` device segment.
|
|
225
|
+
*/
|
|
147
226
|
export function isHostedDeviceJid(jid) {
|
|
148
227
|
if (isJidType(jid, WA_DEFAULTS.HOSTED_SERVER) ||
|
|
149
228
|
isJidType(jid, WA_DEFAULTS.HOSTED_LID_SERVER)) {
|
|
@@ -166,6 +245,11 @@ export function isHostedDeviceJid(jid) {
|
|
|
166
245
|
}
|
|
167
246
|
return isHostedDeviceId(deviceId);
|
|
168
247
|
}
|
|
248
|
+
/**
|
|
249
|
+
* Builds a device JID from its parts. When `options.isHosted` is set, the
|
|
250
|
+
* hosted-server variant is selected (preserving LID vs phone) and the canonical
|
|
251
|
+
* hosted device id is used.
|
|
252
|
+
*/
|
|
169
253
|
export function buildDeviceJid(user, normalizedServer, deviceId, options = {}) {
|
|
170
254
|
if (options.isHosted === true) {
|
|
171
255
|
if (!isHostedDeviceId(deviceId)) {
|
|
@@ -182,6 +266,11 @@ export function buildDeviceJid(user, normalizedServer, deviceId, options = {}) {
|
|
|
182
266
|
}
|
|
183
267
|
return `${user}:${deviceId}@${normalizedServer}`;
|
|
184
268
|
}
|
|
269
|
+
/**
|
|
270
|
+
* Extracts the numeric username and device id from the authenticated user's
|
|
271
|
+
* own JID. Throws when either segment is missing, non-numeric, or out of the
|
|
272
|
+
* safe-integer range.
|
|
273
|
+
*/
|
|
185
274
|
export function getLoginIdentity(meJid) {
|
|
186
275
|
const atIndex = findAtIndex(meJid);
|
|
187
276
|
const colonIndex = meJid.indexOf(':', 0);
|
|
@@ -197,12 +286,20 @@ export function getLoginIdentity(meJid) {
|
|
|
197
286
|
throw new Error(`invalid device from ${meJid}`);
|
|
198
287
|
return { username, device };
|
|
199
288
|
}
|
|
289
|
+
/**
|
|
290
|
+
* Builds a `<digits>@s.whatsapp.net` JID from a free-form phone number,
|
|
291
|
+
* stripping non-digit characters. Throws when no digits are found.
|
|
292
|
+
*/
|
|
200
293
|
export function parsePhoneJid(input) {
|
|
201
294
|
const digits = extractDigits(input);
|
|
202
295
|
if (!digits)
|
|
203
296
|
throw new Error('phone number is empty after normalization');
|
|
204
297
|
return `${digits}@${WA_DEFAULTS.HOST_DOMAIN}`;
|
|
205
298
|
}
|
|
299
|
+
/**
|
|
300
|
+
* Returns a stable `user|server|device` key for a Signal address, suitable
|
|
301
|
+
* as a Map/Set key.
|
|
302
|
+
*/
|
|
206
303
|
export function signalAddressKey(address) {
|
|
207
304
|
const server = address.server ?? WA_DEFAULTS.HOST_DOMAIN;
|
|
208
305
|
return `${address.user}|${server}|${address.device}`;
|
|
@@ -1,17 +1,30 @@
|
|
|
1
|
+
import { TEXT_ENCODER } from '../util/bytes.js';
|
|
2
|
+
const IMAGE_KEYS = TEXT_ENCODER.encode('WhatsApp Image Keys');
|
|
3
|
+
const VIDEO_KEYS = TEXT_ENCODER.encode('WhatsApp Video Keys');
|
|
4
|
+
const AUDIO_KEYS = TEXT_ENCODER.encode('WhatsApp Audio Keys');
|
|
5
|
+
const HISTORY_KEYS = TEXT_ENCODER.encode('WhatsApp History Keys');
|
|
1
6
|
export const WA_MEDIA_HKDF_INFO = Object.freeze({
|
|
2
|
-
document: 'WhatsApp Document Keys',
|
|
3
|
-
image:
|
|
4
|
-
sticker:
|
|
5
|
-
'xma-image':
|
|
6
|
-
video:
|
|
7
|
-
gif:
|
|
8
|
-
audio:
|
|
9
|
-
ptt:
|
|
10
|
-
'md-app-state': 'WhatsApp App State Keys',
|
|
11
|
-
'md-msg-hist':
|
|
12
|
-
history:
|
|
7
|
+
document: TEXT_ENCODER.encode('WhatsApp Document Keys'),
|
|
8
|
+
image: IMAGE_KEYS,
|
|
9
|
+
sticker: IMAGE_KEYS,
|
|
10
|
+
'xma-image': IMAGE_KEYS,
|
|
11
|
+
video: VIDEO_KEYS,
|
|
12
|
+
gif: VIDEO_KEYS,
|
|
13
|
+
audio: AUDIO_KEYS,
|
|
14
|
+
ptt: AUDIO_KEYS,
|
|
15
|
+
'md-app-state': TEXT_ENCODER.encode('WhatsApp App State Keys'),
|
|
16
|
+
'md-msg-hist': HISTORY_KEYS,
|
|
17
|
+
history: HISTORY_KEYS,
|
|
18
|
+
'sticker-pack': TEXT_ENCODER.encode('WhatsApp Sticker Pack Keys'),
|
|
19
|
+
'thumbnail-sticker-pack': TEXT_ENCODER.encode('WhatsApp Sticker Pack Thumbnail Keys'),
|
|
20
|
+
'thumbnail-link': TEXT_ENCODER.encode('WhatsApp Link Thumbnail Keys')
|
|
13
21
|
});
|
|
14
|
-
export const WA_PREVIEW_MEDIA_HKDF_INFO = 'Messenger Preview Keys';
|
|
22
|
+
export const WA_PREVIEW_MEDIA_HKDF_INFO = TEXT_ENCODER.encode('Messenger Preview Keys');
|
|
23
|
+
/**
|
|
24
|
+
* Returns the HKDF `info` bytes used to derive per-media keys for a given
|
|
25
|
+
* media type. Throws for unsupported types – see {@link WA_MEDIA_HKDF_INFO}
|
|
26
|
+
* for the supported set.
|
|
27
|
+
*/
|
|
15
28
|
export function getWaMediaHkdfInfo(mediaType) {
|
|
16
29
|
const info = WA_MEDIA_HKDF_INFO[mediaType];
|
|
17
30
|
if (info !== undefined)
|