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
|
@@ -16,12 +16,21 @@ export type SignalSessionKeyBundleResult = {
|
|
|
16
16
|
readonly errorCode?: string;
|
|
17
17
|
readonly errorText: string;
|
|
18
18
|
};
|
|
19
|
+
/**
|
|
20
|
+
* Fetches per-device prekey bundles required to start a Signal session.
|
|
21
|
+
* Use {@link fetchKeyBundle} for single-JID calls or {@link fetchKeyBundles}
|
|
22
|
+
* for batched encryption.
|
|
23
|
+
*/
|
|
19
24
|
export declare class SignalSessionSyncApi {
|
|
20
25
|
private readonly logger;
|
|
21
26
|
private readonly query;
|
|
22
27
|
private readonly defaultTimeoutMs;
|
|
23
28
|
private readonly hostDomain;
|
|
24
29
|
constructor(options: SignalSessionSyncApiOptions);
|
|
30
|
+
/**
|
|
31
|
+
* Convenience wrapper for {@link fetchKeyBundles} that fetches a single
|
|
32
|
+
* bundle and throws on server error envelopes.
|
|
33
|
+
*/
|
|
25
34
|
fetchKeyBundle(target: {
|
|
26
35
|
readonly jid: string;
|
|
27
36
|
readonly reasonIdentity?: boolean;
|
|
@@ -30,6 +39,10 @@ export declare class SignalSessionSyncApi {
|
|
|
30
39
|
readonly bundle: SignalPreKeyBundle;
|
|
31
40
|
readonly deviceIdentity?: Uint8Array;
|
|
32
41
|
}>;
|
|
42
|
+
/**
|
|
43
|
+
* Batched key-bundle fetch. Returns one entry per JID – either a bundle
|
|
44
|
+
* (success) or an error envelope. Duplicate JIDs are coalesced.
|
|
45
|
+
*/
|
|
33
46
|
fetchKeyBundles(targets: readonly {
|
|
34
47
|
readonly jid: string;
|
|
35
48
|
readonly reasonIdentity?: boolean;
|
|
@@ -1,3 +1,23 @@
|
|
|
1
1
|
import type { BinaryNode } from '../../transport/types';
|
|
2
2
|
export declare function decodeExactLength(value: BinaryNode['content'], field: string, expectedLength: number): Uint8Array;
|
|
3
3
|
export declare function parseUint(bytes: Uint8Array, field: string): number;
|
|
4
|
+
export interface ParsedSignalKeyBundleNode {
|
|
5
|
+
readonly identity: Uint8Array;
|
|
6
|
+
readonly signedKey: {
|
|
7
|
+
readonly id: number;
|
|
8
|
+
readonly publicKey: Uint8Array;
|
|
9
|
+
readonly signature: Uint8Array;
|
|
10
|
+
};
|
|
11
|
+
readonly oneTimeKey?: {
|
|
12
|
+
readonly id: number;
|
|
13
|
+
readonly publicKey: Uint8Array;
|
|
14
|
+
};
|
|
15
|
+
readonly deviceIdentity?: Uint8Array;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Parses the shared `<identity><skey id|value|signature><key id|value><device-identity>`
|
|
19
|
+
* shape used by session pre-key bundles, missing pre-key device bundles, and retry
|
|
20
|
+
* receipt key bundles. Caller is responsible for parsing the `<registration>` node
|
|
21
|
+
* separately when it lives at the same level (it's omitted from retry bundles).
|
|
22
|
+
*/
|
|
23
|
+
export declare function parseSignalKeyBundleFromNode(node: BinaryNode, fieldPrefix: string): ParsedSignalKeyBundleNode;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export declare const SIGNAL_UPLOAD_PREKEYS_COUNT = 812;
|
|
2
2
|
export declare const SIGNAL_SIGNED_PREKEY_ROTATION_INTERVAL_MS: number;
|
|
3
3
|
export declare const SIGNAL_SIGNED_PREKEY_SERVER_ERROR_BACKOFF_MS: number;
|
|
4
|
-
export declare const SIGNAL_KEY_BUNDLE_TYPE_BYTES: Uint8Array
|
|
4
|
+
export declare const SIGNAL_KEY_BUNDLE_TYPE_BYTES: Readonly<Uint8Array>;
|
|
5
5
|
export declare const SIGNAL_KEY_BUNDLE_TYPE_LENGTH = 1;
|
|
6
6
|
export declare const SIGNAL_REGISTRATION_ID_LENGTH = 4;
|
|
7
7
|
export declare const SIGNAL_KEY_ID_LENGTH = 3;
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import type { BinaryNode } from '../../transport/types';
|
|
2
2
|
export { buildMissingPreKeysFetchIq, buildPreKeyUploadIq, buildSignedPreKeyRotateIq } from '../../transport/node/builders/prekeys';
|
|
3
|
+
/**
|
|
4
|
+
* Extracts the numeric error code and text from a failed `prekey` upload IQ
|
|
5
|
+
* response. Use after a non-success status to decide whether to retry.
|
|
6
|
+
*/
|
|
3
7
|
export declare function parsePreKeyUploadFailure(node: BinaryNode): {
|
|
4
8
|
readonly errorCode?: number;
|
|
5
9
|
readonly errorText: string;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { SignalKeyPair } from '../../crypto/curves/types';
|
|
2
|
-
export { ADV_PREFIX_ACCOUNT_SIGNATURE, ADV_PREFIX_DEVICE_SIGNATURE, ADV_PREFIX_HOSTED_ACCOUNT_SIGNATURE
|
|
2
|
+
export { ADV_PREFIX_ACCOUNT_SIGNATURE, ADV_PREFIX_DEVICE_SIGNATURE, ADV_PREFIX_HOSTED_ACCOUNT_SIGNATURE } from '../attestation/constants';
|
|
3
3
|
export declare function verifyDeviceIdentityAccountSignature(details: Uint8Array, accountSignature: Uint8Array, identityPublicKey: Uint8Array, accountSignatureKey: Uint8Array, isHosted?: boolean): Promise<boolean>;
|
|
4
4
|
export declare function generateDeviceSignature(details: Uint8Array, identityKeyPair: SignalKeyPair, accountSignatureKey: Uint8Array, isHosted?: boolean): Promise<Uint8Array>;
|
|
5
|
-
export declare function computeAdvIdentityHmac(secretKey: Uint8Array, details: Uint8Array):
|
|
5
|
+
export declare function computeAdvIdentityHmac(secretKey: Uint8Array, details: Uint8Array): Uint8Array;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare const ADV_PREFIX_ACCOUNT_SIGNATURE: Readonly<Uint8Array>;
|
|
2
|
+
export declare const ADV_PREFIX_DEVICE_SIGNATURE: Readonly<Uint8Array>;
|
|
3
|
+
export declare const ADV_PREFIX_HOSTED_ACCOUNT_SIGNATURE: Readonly<Uint8Array>;
|
|
4
|
+
export declare const ADV_PREFIX_HOSTED_DEVICE_SIGNATURE: Readonly<Uint8Array>;
|
|
@@ -5,7 +5,10 @@ export declare const MAX_PREV_SESSIONS = 40;
|
|
|
5
5
|
export declare const MAX_UNUSED_KEYS = 2000;
|
|
6
6
|
export declare const FUTURE_MESSAGES_MAX = 2000;
|
|
7
7
|
export declare const SENDER_KEY_FUTURE_MESSAGES_MAX = 20000;
|
|
8
|
-
export declare const MESSAGE_KEY_LABEL: Uint8Array
|
|
9
|
-
export declare const CHAIN_KEY_LABEL: Uint8Array
|
|
10
|
-
export declare const WHISPER_GROUP_INFO:
|
|
11
|
-
export declare const
|
|
8
|
+
export declare const MESSAGE_KEY_LABEL: Readonly<Uint8Array>;
|
|
9
|
+
export declare const CHAIN_KEY_LABEL: Readonly<Uint8Array>;
|
|
10
|
+
export declare const WHISPER_GROUP_INFO: Readonly<Uint8Array>;
|
|
11
|
+
export declare const WHISPER_MESSAGE_KEYS_INFO: Readonly<Uint8Array>;
|
|
12
|
+
export declare const WHISPER_TEXT_INFO: Readonly<Uint8Array>;
|
|
13
|
+
export declare const WHISPER_RATCHET_INFO: Readonly<Uint8Array>;
|
|
14
|
+
export declare const SIGNAL_PREFIX: Readonly<Uint8Array>;
|
|
@@ -1,78 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type { PreKeyRecord, RegistrationInfo, SenderKeyDistributionRecord, SenderKeyRecord, SignalAddress, SignalMessageKey, SignalRecvChain, SignalSessionRecord, SignalSessionSnapshot, SignedPreKeyRecord } from './types';
|
|
1
|
+
import type { SignalAddress } from './types';
|
|
3
2
|
export interface SignalAddressParts {
|
|
4
3
|
readonly user: string;
|
|
5
4
|
readonly server: string;
|
|
6
5
|
readonly device: number;
|
|
7
6
|
}
|
|
8
|
-
export interface SignalRegistrationRow extends Record<string, unknown> {
|
|
9
|
-
readonly registration_id: unknown;
|
|
10
|
-
readonly identity_pub_key: unknown;
|
|
11
|
-
readonly identity_priv_key: unknown;
|
|
12
|
-
}
|
|
13
|
-
export interface SignalSignedPreKeyRow extends Record<string, unknown> {
|
|
14
|
-
readonly key_id: unknown;
|
|
15
|
-
readonly pub_key: unknown;
|
|
16
|
-
readonly priv_key: unknown;
|
|
17
|
-
readonly signature: unknown;
|
|
18
|
-
readonly uploaded: unknown;
|
|
19
|
-
}
|
|
20
|
-
export interface SignalPreKeyRow extends Record<string, unknown> {
|
|
21
|
-
readonly key_id: unknown;
|
|
22
|
-
readonly pub_key: unknown;
|
|
23
|
-
readonly priv_key: unknown;
|
|
24
|
-
readonly uploaded: unknown;
|
|
25
|
-
}
|
|
26
|
-
export interface SignalMetaRow extends Record<string, unknown> {
|
|
27
|
-
readonly server_has_prekeys: unknown;
|
|
28
|
-
readonly next_prekey_id: unknown;
|
|
29
|
-
readonly signed_prekey_rotation_ts: unknown;
|
|
30
|
-
}
|
|
31
|
-
export interface SignalSessionRow extends Record<string, unknown> {
|
|
32
|
-
readonly user: unknown;
|
|
33
|
-
readonly server: unknown;
|
|
34
|
-
readonly device: unknown;
|
|
35
|
-
readonly record: unknown;
|
|
36
|
-
}
|
|
37
|
-
export interface SignalIdentityRow extends Record<string, unknown> {
|
|
38
|
-
readonly identity_key: unknown;
|
|
39
|
-
}
|
|
40
|
-
export interface SenderKeyRow extends Record<string, unknown> {
|
|
41
|
-
readonly group_id: unknown;
|
|
42
|
-
readonly sender_user: unknown;
|
|
43
|
-
readonly sender_server: unknown;
|
|
44
|
-
readonly sender_device: unknown;
|
|
45
|
-
readonly record: unknown;
|
|
46
|
-
}
|
|
47
|
-
export interface SenderKeyDistributionRow extends Record<string, unknown> {
|
|
48
|
-
readonly group_id: unknown;
|
|
49
|
-
readonly sender_user: unknown;
|
|
50
|
-
readonly sender_server: unknown;
|
|
51
|
-
readonly sender_device: unknown;
|
|
52
|
-
readonly key_id: unknown;
|
|
53
|
-
readonly timestamp_ms: unknown;
|
|
54
|
-
}
|
|
55
7
|
export interface StoreCountRow extends Record<string, unknown> {
|
|
56
8
|
readonly count: unknown;
|
|
57
9
|
}
|
|
10
|
+
/** Flattens a {@link SignalAddress} into plain fields, defaulting `server` to the host domain. */
|
|
58
11
|
export declare function toSignalAddressParts(address: SignalAddress): SignalAddressParts;
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
}): SignalAddress;
|
|
64
|
-
export declare function decodeSignalRegistrationRow(row: SignalRegistrationRow): RegistrationInfo;
|
|
65
|
-
export declare function decodeSignalPreKeyRow(row: SignalPreKeyRow): PreKeyRecord;
|
|
66
|
-
export declare function decodeSignalSignedPreKeyRow(row: SignalSignedPreKeyRow): SignedPreKeyRecord;
|
|
67
|
-
export declare function encodeSignalSessionSnapshot(session: SignalSessionSnapshot): Proto.ISessionStructure;
|
|
68
|
-
export declare function encodeSignalRecvChain(chain: SignalRecvChain): Proto.SessionStructure.IChain;
|
|
69
|
-
export declare function decodeSignalMessageKey(messageKey: Proto.SessionStructure.Chain.IMessageKey, field: string): SignalMessageKey;
|
|
70
|
-
export declare function decodeSignalRecvChain(chain: Proto.SessionStructure.IChain, field: string): SignalRecvChain;
|
|
71
|
-
export declare function decodeSignalSessionSnapshot(session: Proto.ISessionStructure, field: string): SignalSessionSnapshot;
|
|
72
|
-
export declare function encodeSignalSessionRecord(record: SignalSessionRecord): Uint8Array;
|
|
73
|
-
export declare function decodeSignalSessionRecord(raw: unknown): SignalSessionRecord;
|
|
74
|
-
export declare function encodeSenderKeyRecord(record: SenderKeyRecord): Uint8Array;
|
|
75
|
-
export declare function decodeSenderKeyRecord(raw: unknown, groupId: string, sender: SignalAddress): SenderKeyRecord;
|
|
76
|
-
export declare function decodeSenderKeyDistributionRow(row: SenderKeyDistributionRow): SenderKeyDistributionRecord;
|
|
12
|
+
/**
|
|
13
|
+
* Reads the `count` field of a single-row SQL `COUNT(*)` result, returning
|
|
14
|
+
* `0` when the row is missing.
|
|
15
|
+
*/
|
|
77
16
|
export declare function decodeStoreCount(row: StoreCountRow | null, field: string): number;
|
|
78
|
-
export declare function decodeSignalRemoteIdentity(raw: unknown): Uint8Array;
|
|
@@ -8,4 +8,4 @@ export interface SenderKeyMessageKeySelection {
|
|
|
8
8
|
readonly updatedRecord: SenderKeyRecord;
|
|
9
9
|
}
|
|
10
10
|
export declare function selectMessageKey(senderKey: SenderKeyRecord, targetIteration: number, futureMessagesMax?: number): Promise<SenderKeyMessageKeySelection>;
|
|
11
|
-
export declare function deriveSenderKeyMsgKey(iteration: number, chainKey: Uint8Array):
|
|
11
|
+
export declare function deriveSenderKeyMsgKey(iteration: number, chainKey: Uint8Array): SenderKeyMessageKeyDerivation;
|
|
@@ -8,6 +8,11 @@ interface GroupSenderKeyCiphertext {
|
|
|
8
8
|
readonly iteration?: number;
|
|
9
9
|
readonly ciphertext: Uint8Array;
|
|
10
10
|
}
|
|
11
|
+
/**
|
|
12
|
+
* Implements the sender-key group encryption side of Signal: creates and
|
|
13
|
+
* rotates sender keys, encrypts/decrypts group messages, and tracks which
|
|
14
|
+
* participants have already received the distribution message.
|
|
15
|
+
*/
|
|
11
16
|
export declare class SenderKeyManager {
|
|
12
17
|
private readonly store;
|
|
13
18
|
private readonly senderLock;
|
|
@@ -17,14 +22,26 @@ export declare class SenderKeyManager {
|
|
|
17
22
|
readonly getFutureMessagesMax?: () => number;
|
|
18
23
|
readonly skipSignatureVerification?: boolean;
|
|
19
24
|
});
|
|
25
|
+
/**
|
|
26
|
+
* Produces the distribution message and ciphertext for `plaintext` sent by
|
|
27
|
+
* `sender` into `groupId`. Initializes a sender key when none exists yet.
|
|
28
|
+
*/
|
|
20
29
|
prepareGroupEncryption(groupId: string, sender: SignalAddress, plaintext: Uint8Array): Promise<{
|
|
21
30
|
readonly distributionMessage: Proto.Message.ISenderKeyDistributionMessage;
|
|
22
31
|
readonly ciphertext: GroupSenderKeyCiphertext;
|
|
23
32
|
readonly keyId: number;
|
|
24
33
|
}>;
|
|
34
|
+
/** Filters a participant list down to those who have not yet received the current sender key distribution. */
|
|
25
35
|
filterParticipantsNeedingDistribution(groupId: string, senderKeyId: number, participants: readonly SignalAddress[]): Promise<readonly SignalAddress[]>;
|
|
36
|
+
/** Records that the sender key was successfully delivered to the given participants. */
|
|
26
37
|
markSenderKeyDistributed(groupId: string, senderKeyId: number, participants: readonly SignalAddress[]): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* Verifies (per `skipSignatureVerification`) and stores an incoming sender
|
|
40
|
+
* key distribution so subsequent group ciphertexts from `sender` can be
|
|
41
|
+
* decrypted.
|
|
42
|
+
*/
|
|
27
43
|
processSenderKeyDistributionPayload(groupId: string, sender: SignalAddress, payload: Uint8Array): Promise<SenderKeyRecord>;
|
|
44
|
+
/** Decrypts an incoming sender-key group ciphertext into plaintext. */
|
|
28
45
|
decryptGroupMessage(payload: GroupSenderKeyCiphertext): Promise<Uint8Array>;
|
|
29
46
|
private ensureSenderKeyInternal;
|
|
30
47
|
private runWithSenderLock;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { SenderKeyDistributionRecord, SenderKeyRecord, SignalAddress } from '../types';
|
|
2
|
+
export interface SenderKeyRow extends Record<string, unknown> {
|
|
3
|
+
readonly group_id: unknown;
|
|
4
|
+
readonly sender_user: unknown;
|
|
5
|
+
readonly sender_server: unknown;
|
|
6
|
+
readonly sender_device: unknown;
|
|
7
|
+
readonly record: unknown;
|
|
8
|
+
}
|
|
9
|
+
export interface SenderKeyDistributionRow extends Record<string, unknown> {
|
|
10
|
+
readonly group_id: unknown;
|
|
11
|
+
readonly sender_user: unknown;
|
|
12
|
+
readonly sender_server: unknown;
|
|
13
|
+
readonly sender_device: unknown;
|
|
14
|
+
readonly key_id: unknown;
|
|
15
|
+
readonly timestamp_ms: unknown;
|
|
16
|
+
}
|
|
17
|
+
/** Serializes a {@link SenderKeyRecord} into the Signal `SenderKeyRecordStructure` protobuf. */
|
|
18
|
+
export declare function encodeSenderKeyRecord(record: SenderKeyRecord): Uint8Array;
|
|
19
|
+
/**
|
|
20
|
+
* Decodes a stored sender-key blob into a {@link SenderKeyRecord}.
|
|
21
|
+
* `groupId`/`sender` are re-attached from the row key (not in the protobuf).
|
|
22
|
+
*/
|
|
23
|
+
export declare function decodeSenderKeyRecord(raw: unknown, groupId: string, sender: SignalAddress): SenderKeyRecord;
|
|
24
|
+
/** Decodes a sender-key-distribution SQL row into a {@link SenderKeyDistributionRecord}. */
|
|
25
|
+
export declare function decodeSenderKeyDistributionRow(row: SenderKeyDistributionRow): SenderKeyDistributionRecord;
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
export { PreKeyRecord, RegistrationInfo, SenderKeyDistributionRecord, SenderKeyRecord, SignalAddress, SignalPreKeyBundle, SignedPreKeyRecord } from './types';
|
|
2
2
|
export type { SignalSessionRecord } from './types';
|
|
3
|
-
export {
|
|
3
|
+
export { decodeStoreCount, toSignalAddressParts, type SignalAddressParts, type StoreCountRow } from './encoding';
|
|
4
|
+
export { decodeSignalRemoteIdentity, decodeSignalSessionRecord, encodeSignalSessionRecord, type SignalIdentityRow, type SignalSessionRow } from './session/encoding';
|
|
5
|
+
export { decodeSignalPreKeyRow, decodeSignalRegistrationRow, decodeSignalSignedPreKeyRow, type SignalMetaRow, type SignalPreKeyRow, type SignalRegistrationRow, type SignalSignedPreKeyRow } from './registration/encoding';
|
|
6
|
+
export { decodeSenderKeyDistributionRow, decodeSenderKeyRecord, encodeSenderKeyRecord, type SenderKeyDistributionRow, type SenderKeyRow } from './group/encoding';
|
|
4
7
|
export { generatePreKeyPair, generateRegistrationId, generateRegistrationInfo, generateSignedPreKey } from './registration/keygen';
|
|
5
8
|
export { buildPreKeyUploadIq, parsePreKeyUploadFailure } from './api/prekeys';
|
|
6
9
|
export { SignalDigestSyncApi } from './api/SignalDigestSyncApi';
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { PreKeyRecord, RegistrationInfo, SignedPreKeyRecord } from '../types';
|
|
2
|
+
export interface SignalRegistrationRow extends Record<string, unknown> {
|
|
3
|
+
readonly registration_id: unknown;
|
|
4
|
+
readonly identity_pub_key: unknown;
|
|
5
|
+
readonly identity_priv_key: unknown;
|
|
6
|
+
}
|
|
7
|
+
export interface SignalSignedPreKeyRow extends Record<string, unknown> {
|
|
8
|
+
readonly key_id: unknown;
|
|
9
|
+
readonly pub_key: unknown;
|
|
10
|
+
readonly priv_key: unknown;
|
|
11
|
+
readonly signature: unknown;
|
|
12
|
+
readonly uploaded: unknown;
|
|
13
|
+
}
|
|
14
|
+
export interface SignalPreKeyRow extends Record<string, unknown> {
|
|
15
|
+
readonly key_id: unknown;
|
|
16
|
+
readonly pub_key: unknown;
|
|
17
|
+
readonly priv_key: unknown;
|
|
18
|
+
readonly uploaded: unknown;
|
|
19
|
+
}
|
|
20
|
+
export interface SignalMetaRow extends Record<string, unknown> {
|
|
21
|
+
readonly server_has_prekeys: unknown;
|
|
22
|
+
readonly next_prekey_id: unknown;
|
|
23
|
+
readonly signed_prekey_rotation_ts: unknown;
|
|
24
|
+
}
|
|
25
|
+
/** Decodes a stored signal-registration SQL row into a {@link RegistrationInfo}. */
|
|
26
|
+
export declare function decodeSignalRegistrationRow(row: SignalRegistrationRow): RegistrationInfo;
|
|
27
|
+
/** Decodes a one-time prekey SQL row into a {@link PreKeyRecord}. */
|
|
28
|
+
export declare function decodeSignalPreKeyRow(row: SignalPreKeyRow): PreKeyRecord;
|
|
29
|
+
/** Decodes a signed-prekey SQL row into a {@link SignedPreKeyRecord}. */
|
|
30
|
+
export declare function decodeSignalSignedPreKeyRow(row: SignalSignedPreKeyRow): SignedPreKeyRecord;
|
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
import type { PreKeyRecord, RegistrationInfo, SignedPreKeyRecord } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Generates the per-device Signal registration info – a random registration id
|
|
4
|
+
* plus a fresh identity X25519 key pair.
|
|
5
|
+
*/
|
|
2
6
|
export declare function generateRegistrationInfo(): Promise<RegistrationInfo>;
|
|
7
|
+
/** Generates a fresh one-time prekey record with the given `keyId`. */
|
|
3
8
|
export declare function generatePreKeyPair(keyId: number): Promise<PreKeyRecord>;
|
|
9
|
+
/**
|
|
10
|
+
* Generates a signed prekey: a fresh X25519 keypair plus an XEdDSA signature
|
|
11
|
+
* over its serialized public key, signed by `signingPrivateKey` (identity key).
|
|
12
|
+
*/
|
|
4
13
|
export declare function generateSignedPreKey(keyId: number, signingPrivateKey: Uint8Array): Promise<SignedPreKeyRecord>;
|
|
14
|
+
/** Generates a Signal registration id in the valid `[1, 16380]` range. */
|
|
5
15
|
export declare function generateRegistrationId(): Promise<number>;
|
|
@@ -6,5 +6,10 @@ interface RegistrationBundle {
|
|
|
6
6
|
readonly signedPreKey: SignedPreKeyRecord;
|
|
7
7
|
readonly firstPreKey: PreKeyRecord;
|
|
8
8
|
}
|
|
9
|
+
/**
|
|
10
|
+
* Bootstraps a fresh Signal identity: generates registration info, the first
|
|
11
|
+
* signed prekey, and the first one-time prekey, then persists them in order
|
|
12
|
+
* so a partial commit can never split bootstrap state.
|
|
13
|
+
*/
|
|
9
14
|
export declare function createAndStoreInitialKeys(store: WaSignalStore, preKeyStore: WaPreKeyStore): Promise<RegistrationBundle>;
|
|
10
15
|
export {};
|
|
@@ -6,6 +6,7 @@ import type { WaSessionStore } from '../../store/contracts/session.store';
|
|
|
6
6
|
import type { WaSignalStore } from '../../store/contracts/signal.store';
|
|
7
7
|
interface EstablishOutgoingSessionOptions {
|
|
8
8
|
readonly reuseExisting?: boolean;
|
|
9
|
+
readonly knownAbsent?: boolean;
|
|
9
10
|
}
|
|
10
11
|
export interface SignalProtocolStores {
|
|
11
12
|
readonly signal: WaSignalStore;
|
|
@@ -13,17 +14,67 @@ export interface SignalProtocolStores {
|
|
|
13
14
|
readonly session: WaSessionStore;
|
|
14
15
|
readonly identity: WaIdentityStore;
|
|
15
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* High-level Signal protocol session orchestrator: establishes outgoing
|
|
19
|
+
* sessions from prekey bundles, encrypts/decrypts ratchet messages, and owns
|
|
20
|
+
* the per-address session mutation lock.
|
|
21
|
+
*/
|
|
16
22
|
export declare class SignalProtocol {
|
|
17
23
|
private readonly stores;
|
|
18
24
|
private readonly logger;
|
|
19
25
|
private readonly sessionMutationLock;
|
|
20
26
|
constructor(stores: SignalProtocolStores, logger?: Logger);
|
|
27
|
+
/**
|
|
28
|
+
* Builds an outgoing Signal session against a remote prekey bundle. Set
|
|
29
|
+
* `options.reuseExisting` to skip the handshake when a session already
|
|
30
|
+
* exists for the same remote identity. Set `options.knownAbsent` only
|
|
31
|
+
* when the caller already proved (within the same logical step) that no
|
|
32
|
+
* session exists; it skips the in-lock recheck and forces a new handshake.
|
|
33
|
+
*/
|
|
21
34
|
establishOutgoingSession(address: SignalAddress, remoteBundle: SignalPreKeyBundle, options?: EstablishOutgoingSessionOptions): Promise<SignalSessionRecord>;
|
|
35
|
+
/**
|
|
36
|
+
* Compute an outgoing session under the per-address lock without
|
|
37
|
+
* persisting. Caller batches results and persists via
|
|
38
|
+
* {@link persistOutgoingSessionsBatch} to collapse N `setRemoteIdentity`
|
|
39
|
+
* + `setSession` round-trips into one bulk write per store.
|
|
40
|
+
*/
|
|
41
|
+
prepareOutgoingSession(address: SignalAddress, remoteBundle: SignalPreKeyBundle, options?: EstablishOutgoingSessionOptions): Promise<{
|
|
42
|
+
readonly session: SignalSessionRecord;
|
|
43
|
+
readonly remoteIdentity: Uint8Array;
|
|
44
|
+
readonly reusedExisting: boolean;
|
|
45
|
+
}>;
|
|
46
|
+
/**
|
|
47
|
+
* Persist prepared outgoing sessions while holding every per-address
|
|
48
|
+
* lock (same discipline as {@link encryptMessagesBatch}). Re-reads
|
|
49
|
+
* sessions inside the lock; defers to a concurrent writer's session
|
|
50
|
+
* when identities agree to avoid clobbering a fresher ratchet advance,
|
|
51
|
+
* and reports identity conflicts via `skipped`.
|
|
52
|
+
*/
|
|
53
|
+
persistOutgoingSessionsBatch(entries: ReadonlyArray<{
|
|
54
|
+
readonly address: SignalAddress;
|
|
55
|
+
readonly session: SignalSessionRecord;
|
|
56
|
+
readonly remoteIdentity: Uint8Array;
|
|
57
|
+
}>): Promise<{
|
|
58
|
+
readonly resolved: ReadonlyArray<{
|
|
59
|
+
readonly address: SignalAddress;
|
|
60
|
+
readonly session: SignalSessionRecord;
|
|
61
|
+
}>;
|
|
62
|
+
readonly skipped: ReadonlyArray<{
|
|
63
|
+
readonly address: SignalAddress;
|
|
64
|
+
readonly reason: 'identity-mismatch';
|
|
65
|
+
}>;
|
|
66
|
+
}>;
|
|
67
|
+
/**
|
|
68
|
+
* Encrypts `plaintext` for `address`. Returns `pkmsg` when this is the
|
|
69
|
+
* first message of the session, `msg` otherwise. `expectedIdentity`
|
|
70
|
+
* enforces identity continuity.
|
|
71
|
+
*/
|
|
22
72
|
encryptMessage(address: SignalAddress, plaintext: Uint8Array, expectedIdentity?: Uint8Array): Promise<{
|
|
23
73
|
readonly type: 'msg' | 'pkmsg';
|
|
24
74
|
readonly ciphertext: Uint8Array;
|
|
25
75
|
readonly baseKey: Uint8Array | null;
|
|
26
76
|
}>;
|
|
77
|
+
/** Batch variant of {@link encryptMessage} that shares per-address locks. */
|
|
27
78
|
encryptMessagesBatch(requests: readonly {
|
|
28
79
|
readonly address: SignalAddress;
|
|
29
80
|
readonly plaintext: Uint8Array;
|
|
@@ -36,6 +87,10 @@ export declare class SignalProtocol {
|
|
|
36
87
|
readonly ciphertext: Uint8Array;
|
|
37
88
|
readonly baseKey: Uint8Array | null;
|
|
38
89
|
}[]>;
|
|
90
|
+
/**
|
|
91
|
+
* Decrypts a Signal message (`msg` or `pkmsg`) from `address`. For
|
|
92
|
+
* `pkmsg`, instantiates the session from the embedded bundle when needed.
|
|
93
|
+
*/
|
|
39
94
|
decryptMessage(address: SignalAddress, envelope: {
|
|
40
95
|
readonly type: 'msg' | 'pkmsg';
|
|
41
96
|
readonly ciphertext: Uint8Array;
|
|
@@ -8,11 +8,10 @@ export interface DecryptOutcome {
|
|
|
8
8
|
readonly usedPreKey: number | null;
|
|
9
9
|
} | null;
|
|
10
10
|
}
|
|
11
|
-
export declare function
|
|
12
|
-
export declare function deriveMsgKey(index: number, chainKey: Uint8Array): Promise<{
|
|
11
|
+
export declare function deriveMsgKey(index: number, chainKey: Uint8Array): {
|
|
13
12
|
readonly nextChainKey: Uint8Array;
|
|
14
13
|
readonly messageKey: SignalMessageKey;
|
|
15
|
-
}
|
|
14
|
+
};
|
|
16
15
|
export declare function selectMessageKey(chain: SignalRecvChain, targetCounter: number): Promise<{
|
|
17
16
|
readonly messageKey: SignalMessageKey;
|
|
18
17
|
readonly updatedChain: SignalRecvChain;
|
|
@@ -10,7 +10,6 @@ interface IncomingRatchetKeys {
|
|
|
10
10
|
readonly ratchet: SignalSerializedKeyPair;
|
|
11
11
|
}
|
|
12
12
|
export declare function snapshotToRecord(snapshot: SignalSessionSnapshot): SignalSessionRecord;
|
|
13
|
-
export declare function detachSession(session: SignalSessionRecord): SignalSessionSnapshot;
|
|
14
13
|
export declare function findMatchingSession(session: SignalSessionRecord | null, sessionBaseKey: Uint8Array): SignalSessionRecord | null;
|
|
15
14
|
export declare function requireLocalIdentity(store: WaSignalStore): Promise<LocalIdentityContext>;
|
|
16
15
|
export declare function initiateSessionOutgoing(local: LocalIdentityContext, remoteBundle: {
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type Proto } from '../..';
|
|
2
|
+
import type { SignalMessageKey, SignalRecvChain, SignalSessionRecord, SignalSessionSnapshot } from '../types';
|
|
3
|
+
export interface SignalSessionRow extends Record<string, unknown> {
|
|
4
|
+
readonly user: unknown;
|
|
5
|
+
readonly server: unknown;
|
|
6
|
+
readonly device: unknown;
|
|
7
|
+
readonly record: unknown;
|
|
8
|
+
}
|
|
9
|
+
export interface SignalIdentityRow extends Record<string, unknown> {
|
|
10
|
+
readonly identity_key: unknown;
|
|
11
|
+
}
|
|
12
|
+
export declare function encodeSignalSessionSnapshot(session: SignalSessionSnapshot): Proto.ISessionStructure;
|
|
13
|
+
export declare function encodeSignalRecvChain(chain: SignalRecvChain): Proto.SessionStructure.IChain;
|
|
14
|
+
export declare function decodeSignalMessageKey(messageKey: Proto.SessionStructure.Chain.IMessageKey, field: string): SignalMessageKey;
|
|
15
|
+
export declare function decodeSignalRecvChain(chain: Proto.SessionStructure.IChain, field: string): SignalRecvChain;
|
|
16
|
+
export declare function decodeSignalSessionSnapshot(session: Proto.ISessionStructure, field: string): SignalSessionSnapshot;
|
|
17
|
+
/**
|
|
18
|
+
* Serializes a {@link SignalSessionRecord} (current + previous sessions) into
|
|
19
|
+
* the Signal `RecordStructure` protobuf encoding used by the session stores.
|
|
20
|
+
*/
|
|
21
|
+
export declare function encodeSignalSessionRecord(record: SignalSessionRecord): Uint8Array;
|
|
22
|
+
/**
|
|
23
|
+
* Decodes a Signal `RecordStructure` payload (as stored on disk) back into a
|
|
24
|
+
* {@link SignalSessionRecord}. Throws when the current session is missing.
|
|
25
|
+
*/
|
|
26
|
+
export declare function decodeSignalSessionRecord(raw: unknown): SignalSessionRecord;
|
|
27
|
+
/** Reads a stored remote identity blob into a Uint8Array (validates byte-shape). */
|
|
28
|
+
export declare function decodeSignalRemoteIdentity(raw: unknown): Uint8Array;
|
|
@@ -10,10 +10,24 @@ export interface SignalResolvedSessionTarget {
|
|
|
10
10
|
readonly address: SignalAddress;
|
|
11
11
|
readonly session: SignalSessionRecord;
|
|
12
12
|
}
|
|
13
|
+
/**
|
|
14
|
+
* Resolves Signal sessions for one or more JIDs, fetching missing prekey
|
|
15
|
+
* bundles, enforcing identity continuity, and deduplicating concurrent
|
|
16
|
+
* fetches for the same address.
|
|
17
|
+
*/
|
|
13
18
|
export type SignalSessionResolver = {
|
|
19
|
+
/**
|
|
20
|
+
* Ensures a session exists for `address` (fetching the prekey bundle if
|
|
21
|
+
* needed). `reasonIdentity` triggers a remote identity refresh first.
|
|
22
|
+
*/
|
|
14
23
|
ensureSession(address: SignalAddress, jid: string, expectedIdentity?: Uint8Array, reasonIdentity?: boolean): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Batched session resolver – issues a single key-bundle fetch for all
|
|
26
|
+
* missing JIDs. Returns the resolved targets that now have a session.
|
|
27
|
+
*/
|
|
15
28
|
ensureSessionsBatch(targetJids: readonly string[], expectedIdentityByJid?: ReadonlyMap<string, Uint8Array>): Promise<readonly SignalResolvedSessionTarget[]>;
|
|
16
29
|
};
|
|
30
|
+
/** Builds a {@link SignalSessionResolver} backed by the given Signal APIs and stores. */
|
|
17
31
|
export declare function createSignalSessionResolver(options: {
|
|
18
32
|
readonly signalProtocol: SignalProtocol;
|
|
19
33
|
readonly sessionStore: WaSessionStore;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { WaIdentityStore } from '../contracts/identity.store';
|
|
2
|
+
import type { WithDestroyLifecycle } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Read-through / write-through in-process cache for a persistent remote
|
|
5
|
+
* identity backend. Reuses {@link WaIdentityMemoryStore} as the bounded-LRU
|
|
6
|
+
* L1. Remote identities are read alongside sessions on the send path (the
|
|
7
|
+
* identity-mismatch guard), so caching them complements
|
|
8
|
+
* {@link withSessionCache}.
|
|
9
|
+
*
|
|
10
|
+
* The identity store has no per-key delete: identities are overwritten on
|
|
11
|
+
* re-establishment, so a peer's key change propagates through the
|
|
12
|
+
* write-through `setRemoteIdentity`. See {@link withSessionCache} for the
|
|
13
|
+
* shared coherence model and the single-writer-per-session assumption.
|
|
14
|
+
*/
|
|
15
|
+
export declare function withIdentityCache(backend: WaIdentityStore, maxEntries?: number): WithDestroyLifecycle<WaIdentityStore>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { WaPrivacyTokenStore } from '../contracts/privacy-token.store';
|
|
2
|
+
import type { WithDestroyLifecycle } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Read-through cache for a persistent privacy-token backend. Reuses
|
|
5
|
+
* {@link WaPrivacyTokenMemoryStore} as the bounded-LRU L1.
|
|
6
|
+
*
|
|
7
|
+
* Unlike the signal caches this is **invalidate-on-write, not
|
|
8
|
+
* write-through**: `upsert` merges partial fields into the existing row on
|
|
9
|
+
* the backend, so caching the partial incoming record would diverge from the
|
|
10
|
+
* backend's merged result. Instead each upsert drops the L1 entry and the
|
|
11
|
+
* next read re-populates from the merged backend truth. See
|
|
12
|
+
* {@link withSessionCache} for the shared coherence model and the
|
|
13
|
+
* single-writer-per-session assumption.
|
|
14
|
+
*/
|
|
15
|
+
export declare function withPrivacyTokenCache(backend: WaPrivacyTokenStore, maxEntries?: number): WithDestroyLifecycle<WaPrivacyTokenStore>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { WaSenderKeyStore } from '../contracts/sender-key.store';
|
|
2
|
+
import type { WithDestroyLifecycle } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Read-through / write-through in-process cache for a persistent sender-key
|
|
5
|
+
* backend. Reuses {@link SenderKeyMemoryStore} as the bounded-LRU L1 so the
|
|
6
|
+
* per-(group, sender) lookups repeated across a group fan-out skip the
|
|
7
|
+
* backend round-trip.
|
|
8
|
+
*
|
|
9
|
+
* Only the point reads are cached. `getGroupSenderKeyList` returns the
|
|
10
|
+
* *complete* set for a group, which a partial point cache would under-report,
|
|
11
|
+
* so it goes straight to the backend. Upserts replace the whole record (no
|
|
12
|
+
* merge), so they are write-through; the sweep deletes
|
|
13
|
+
* (`deleteDeviceSenderKey`/`markForgetSenderKey`) run on the backend for the
|
|
14
|
+
* authoritative count and then invalidate the matching L1 entries via the
|
|
15
|
+
* memory store's own sweep. See {@link withSessionCache} for the shared
|
|
16
|
+
* coherence model and the single-writer-per-session assumption.
|
|
17
|
+
*/
|
|
18
|
+
export declare function withSenderKeyCache(backend: WaSenderKeyStore, maxEntries?: number): WithDestroyLifecycle<WaSenderKeyStore>;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { WaSessionStore } from '../contracts/session.store';
|
|
2
|
+
import type { WithDestroyLifecycle } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Read-through / write-through in-process cache for a persistent session
|
|
5
|
+
* backend. Reuses {@link WaSessionMemoryStore} as the bounded-LRU L1 so that
|
|
6
|
+
* repeated reads of the same peer on the send/recv path skip the backend
|
|
7
|
+
* round-trip.
|
|
8
|
+
*
|
|
9
|
+
* Coherence model (single process):
|
|
10
|
+
* - every mutation (set/delete/clear) writes the backend then the L1 in
|
|
11
|
+
* lock-step and bumps a generation counter;
|
|
12
|
+
* - a read only populates the L1 when no mutation interleaved its backend
|
|
13
|
+
* fetch (generation unchanged) and the slot is still empty, so an in-flight
|
|
14
|
+
* read can never resurrect a concurrently deleted entry nor overwrite a
|
|
15
|
+
* fresher concurrent write;
|
|
16
|
+
* - there is no negative caching: a miss always re-hits the backend.
|
|
17
|
+
*
|
|
18
|
+
* This cache assumes a single writer per `sessionId` (the library's
|
|
19
|
+
* connection model). Do not share one backend across processes for the same
|
|
20
|
+
* session with the cache enabled - there is no cross-process invalidation
|
|
21
|
+
* channel, so another process's writes would leave this L1 stale.
|
|
22
|
+
*/
|
|
23
|
+
export declare function withSessionCache(backend: WaSessionStore, maxEntries?: number): WithDestroyLifecycle<WaSessionStore>;
|
|
@@ -9,7 +9,21 @@ export interface WaStoredContactRecord {
|
|
|
9
9
|
export interface WaContactStore {
|
|
10
10
|
upsert(record: WaStoredContactRecord): Promise<void>;
|
|
11
11
|
upsertBatch(records: readonly WaStoredContactRecord[]): Promise<void>;
|
|
12
|
+
/**
|
|
13
|
+
* Lookup by jid. Contacts are persisted in LID-canonical form when both
|
|
14
|
+
* LID and PN are known (one row, `jid=<lid>` + `phoneNumber=<pn>`), so
|
|
15
|
+
* passing the PN form falls through to {@link getByPhoneNumber} when no
|
|
16
|
+
* row matches the PN jid directly. Callers do not need to know which
|
|
17
|
+
* form was used to write the row.
|
|
18
|
+
*/
|
|
12
19
|
getByJid(jid: string): Promise<WaStoredContactRecord | null>;
|
|
20
|
+
/**
|
|
21
|
+
* Lookup the contact whose `phoneNumber` field equals `pn`. Returns the
|
|
22
|
+
* LID-canonical row when the cross-reference is known, `null` otherwise.
|
|
23
|
+
* Used by {@link getByJid} for the PN-fallback path and exposed publicly
|
|
24
|
+
* for callers that already know the PN form.
|
|
25
|
+
*/
|
|
26
|
+
getByPhoneNumber(pn: string): Promise<WaStoredContactRecord | null>;
|
|
13
27
|
deleteByJid(jid: string): Promise<number>;
|
|
14
28
|
clear(): Promise<void>;
|
|
15
29
|
}
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
export interface WaDeviceListSnapshot {
|
|
2
2
|
readonly userJid: string;
|
|
3
|
+
/**
|
|
4
|
+
* The equivalent user-base JID in the other addressing form (PN if `userJid`
|
|
5
|
+
* is LID and vice versa). Populated by the lid usync resolver at send time.
|
|
6
|
+
* Used by retry-receipt eligibility to match the same user across
|
|
7
|
+
* `@s.whatsapp.net` and `@lid` forms.
|
|
8
|
+
*/
|
|
9
|
+
readonly altUserJid?: string;
|
|
3
10
|
readonly deviceJids: readonly string[];
|
|
4
11
|
readonly updatedAtMs: number;
|
|
5
12
|
}
|
|
@@ -7,6 +14,12 @@ export interface WaDeviceListStore {
|
|
|
7
14
|
destroy?(): Promise<void>;
|
|
8
15
|
upsertUserDevicesBatch(snapshots: readonly WaDeviceListSnapshot[]): Promise<void>;
|
|
9
16
|
getUserDevicesBatch(userJids: readonly string[], nowMs?: number): Promise<readonly (WaDeviceListSnapshot | null)[]>;
|
|
17
|
+
/**
|
|
18
|
+
* Resolves a snapshot by either `userJid` (primary) or `altUserJid`
|
|
19
|
+
* (alternate addressing). Returns the snapshot whose user matches `jid` in
|
|
20
|
+
* either form, or `null` when unknown / expired.
|
|
21
|
+
*/
|
|
22
|
+
findByAnyUserJid(jid: string, nowMs?: number): Promise<WaDeviceListSnapshot | null>;
|
|
10
23
|
deleteUserDevices(userJid: string): Promise<number>;
|
|
11
24
|
cleanupExpired(nowMs: number): Promise<number>;
|
|
12
25
|
clear(): Promise<void>;
|