zapo-js 0.2.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 +103 -179
- package/dist/appstate/{WaAppStateCrypto.js → crypto/WaAppStateCrypto.js} +79 -62
- package/dist/appstate/index.js +8 -7
- package/dist/appstate/{encoding.js → parsers/encoding.js} +11 -4
- package/dist/appstate/{WaAppStateSyncResponseParser.js → parsers/response-parser.js} +20 -8
- package/dist/appstate/{WaAppStateSyncClient.js → sync/WaAppStateSyncClient.js} +246 -88
- package/dist/appstate/utils.js +16 -0
- package/dist/appstate-spec.js +89 -0
- package/dist/auth/WaAuthClient.js +117 -13
- package/dist/auth/credentials-flow.js +207 -0
- package/dist/auth/pairing/WaPairingFlow.js +53 -47
- package/dist/auth/pairing/pairing-code-crypto.js +91 -0
- package/dist/client/WaClient.js +369 -460
- package/dist/client/WaClientFactory.js +377 -93
- package/dist/client/connection/WaConnectionManager.js +31 -11
- package/dist/client/coordinators/WaAbPropsCoordinator.js +140 -0
- 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 -180
- package/dist/client/coordinators/WaEmailCoordinator.js +64 -0
- package/dist/client/coordinators/WaGroupCoordinator.js +529 -52
- package/dist/client/coordinators/WaIncomingNodeCoordinator.js +130 -20
- package/dist/client/coordinators/WaLowLevelCoordinator.js +41 -0
- package/dist/client/coordinators/WaMessageCoordinator.js +365 -0
- package/dist/client/coordinators/WaMessageDispatchCoordinator.js +724 -216
- package/dist/client/coordinators/WaNewsletterCoordinator.js +18 -0
- package/dist/client/coordinators/WaOfflineResumeCoordinator.js +114 -0
- package/dist/client/coordinators/WaPassiveTasksCoordinator.js +53 -22
- package/dist/client/coordinators/WaPresenceCoordinator.js +21 -0
- package/dist/client/coordinators/WaPrivacyCoordinator.js +7 -5
- package/dist/client/coordinators/WaProfileCoordinator.js +223 -50
- package/dist/client/coordinators/WaRetryCoordinator.js +256 -123
- package/dist/client/coordinators/WaStatusCoordinator.js +49 -0
- package/dist/client/coordinators/WaStreamControlCoordinator.js +6 -6
- package/dist/client/coordinators/WaTrustedContactTokenCoordinator.js +29 -10
- package/dist/client/events/abprops.js +43 -0
- 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} +34 -20
- 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/privacy-token.js +1 -2
- package/dist/client/events/receipt.js +26 -0
- package/dist/client/events/registration.js +42 -0
- package/dist/client/media.js +400 -0
- 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 +9 -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 +9 -9
- package/dist/crypto/core/xeddsa.js +59 -0
- package/dist/crypto/curves/Ed25519.js +32 -21
- package/dist/crypto/curves/X25519.js +71 -17
- package/dist/crypto/curves/constants.js +3 -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} +72 -55
- package/dist/esm/appstate/index.js +5 -5
- package/dist/esm/appstate/{encoding.js → parsers/encoding.js} +11 -4
- package/dist/esm/appstate/{WaAppStateSyncResponseParser.js → parsers/response-parser.js} +20 -8
- package/dist/esm/appstate/{WaAppStateSyncClient.js → sync/WaAppStateSyncClient.js} +235 -76
- package/dist/esm/appstate/utils.js +16 -0
- package/dist/esm/appstate-spec.js +79 -0
- package/dist/esm/auth/WaAuthClient.js +114 -10
- package/dist/esm/auth/credentials-flow.js +202 -0
- package/dist/esm/auth/pairing/WaPairingFlow.js +52 -46
- package/dist/esm/auth/pairing/pairing-code-crypto.js +85 -0
- package/dist/esm/client/WaClient.js +372 -463
- package/dist/esm/client/WaClientFactory.js +380 -96
- package/dist/esm/client/connection/WaConnectionManager.js +31 -11
- package/dist/esm/client/coordinators/WaAbPropsCoordinator.js +136 -0
- 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 +78 -177
- package/dist/esm/client/coordinators/WaEmailCoordinator.js +61 -0
- package/dist/esm/client/coordinators/WaGroupCoordinator.js +532 -55
- package/dist/esm/client/coordinators/WaIncomingNodeCoordinator.js +132 -22
- 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 +719 -211
- package/dist/esm/client/coordinators/WaNewsletterCoordinator.js +13 -0
- package/dist/esm/client/coordinators/WaOfflineResumeCoordinator.js +110 -0
- package/dist/esm/client/coordinators/WaPassiveTasksCoordinator.js +54 -23
- 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 +226 -53
- package/dist/esm/client/coordinators/WaRetryCoordinator.js +258 -125
- 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 +31 -12
- package/dist/esm/client/events/abprops.js +40 -0
- 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} +34 -20
- 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/privacy-token.js +1 -2
- package/dist/esm/client/events/receipt.js +23 -0
- package/dist/esm/client/events/registration.js +39 -0
- package/dist/esm/client/media.js +384 -0
- 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 +3 -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 +8 -7
- package/dist/esm/crypto/core/xeddsa.js +55 -0
- package/dist/esm/crypto/curves/Ed25519.js +35 -24
- package/dist/esm/crypto/curves/X25519.js +74 -20
- package/dist/esm/crypto/curves/constants.js +2 -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/infra/perf/StoreLock.js +7 -4
- package/dist/esm/media/constants.js +35 -2
- package/dist/esm/media/crypto/WaMediaCrypto.js +374 -0
- package/dist/esm/media/index.js +4 -3
- package/dist/esm/media/processor.js +1 -0
- package/dist/esm/media/sticker/sticker-pack.js +133 -0
- package/dist/esm/media/{WaMediaTransferClient.js → transfer/WaMediaTransferClient.js} +84 -196
- 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/crypto/addon-crypto.js +244 -0
- package/dist/esm/message/{icdc.js → crypto/icdc.js} +11 -13
- package/dist/esm/message/crypto/phash.js +133 -0
- package/dist/esm/message/{reporting-token.js → crypto/reporting-token.js} +7 -7
- package/dist/esm/message/{use-case-secret.js → crypto/use-case-secret.js} +21 -4
- package/dist/esm/message/{content.js → encode/content.js} +183 -8
- 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/primitives/incoming.js +511 -0
- package/dist/esm/message/primitives/peer-data-operation.js +93 -0
- package/dist/esm/mex.js +1 -0
- package/dist/esm/protocol/abprops.js +169 -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 +22 -0
- package/dist/esm/protocol/business.js +19 -0
- package/dist/esm/protocol/call.js +48 -0
- package/dist/esm/protocol/constants.js +10 -2
- package/dist/esm/protocol/defaults.js +3 -0
- package/dist/esm/protocol/email.js +30 -0
- package/dist/esm/protocol/index.js +1 -1
- package/dist/esm/protocol/jid.js +142 -11
- 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 +26 -2
- package/dist/esm/protocol/notification.js +24 -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 +6 -1
- package/dist/esm/retry/replay.js +131 -37
- package/dist/esm/retry/tracker.js +4 -8
- package/dist/esm/signal/api/SignalDeviceSyncApi.js +71 -21
- package/dist/esm/signal/api/SignalDigestSyncApi.js +15 -8
- package/dist/esm/signal/api/SignalIdentitySyncApi.js +13 -4
- 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/attestation/WaAdvSignature.js +17 -0
- package/dist/esm/signal/{crypto → attestation}/constants.js +0 -4
- package/dist/esm/signal/constants.js +3 -0
- package/dist/esm/signal/encoding.js +6 -332
- package/dist/esm/signal/group/SenderKeyChain.js +20 -35
- package/dist/esm/signal/group/SenderKeyCodec.js +5 -6
- package/dist/esm/signal/group/SenderKeyManager.js +37 -17
- 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 +12 -3
- package/dist/esm/signal/registration/utils.js +8 -2
- package/dist/esm/signal/session/SignalProtocol.js +129 -26
- package/dist/esm/signal/session/SignalRatchet.js +46 -64
- package/dist/esm/signal/session/SignalSerializer.js +5 -6
- package/dist/esm/signal/session/SignalSession.js +14 -19
- package/dist/esm/signal/session/encoding.js +173 -0
- package/dist/esm/signal/session/resolver.js +144 -35
- 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/contracts/identity.store.js +1 -0
- package/dist/esm/store/contracts/message-secret.store.js +1 -0
- package/dist/esm/store/contracts/pre-key.store.js +1 -0
- package/dist/esm/store/contracts/session.store.js +1 -0
- package/dist/esm/store/createStore.js +129 -39
- package/dist/esm/store/index.js +15 -10
- package/dist/esm/store/locks/contact.lock.js +1 -0
- package/dist/esm/store/locks/device-list.lock.js +1 -0
- package/dist/esm/store/locks/group-metadata.lock.js +20 -0
- package/dist/esm/store/locks/identity.lock.js +16 -0
- package/dist/esm/store/locks/message-secret.lock.js +17 -0
- package/dist/esm/store/locks/pre-key.lock.js +27 -0
- package/dist/esm/store/locks/session.lock.js +19 -0
- package/dist/esm/store/locks/signal.lock.js +0 -24
- package/dist/esm/store/{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} +24 -12
- package/dist/esm/store/memory/identity.store.js +31 -0
- package/dist/esm/store/memory/message-secret.store.js +90 -0
- package/dist/esm/store/{providers/memory → memory}/message.store.js +2 -2
- package/dist/esm/store/memory/pre-key.store.js +97 -0
- package/dist/esm/store/{providers/memory → memory}/privacy-token.store.js +1 -1
- package/dist/esm/store/{providers/memory → memory}/retry.store.js +49 -14
- package/dist/esm/store/{providers/memory → memory}/sender-key.store.js +3 -3
- package/dist/esm/store/memory/session.store.js +45 -0
- package/dist/esm/store/memory/signal.store.js +36 -0
- package/dist/esm/store/{providers/memory → memory}/thread.store.js +2 -2
- package/dist/esm/store/noop.store.js +26 -4
- package/dist/esm/transport/WaComms.js +18 -8
- package/dist/esm/transport/WaWebSocket.js +41 -9
- 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 +7 -0
- package/dist/esm/transport/keepalive/WaKeepAlive.js +35 -12
- package/dist/esm/transport/node/WaMobileTcpSocket.js +120 -0
- package/dist/esm/transport/node/WaNodeOrchestrator.js +26 -13
- package/dist/esm/transport/node/WaNodeTransport.js +13 -0
- package/dist/esm/transport/node/builders/abprops.js +20 -0
- 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 +11 -0
- package/dist/esm/transport/node/builders/email.js +66 -0
- 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/offline.js +14 -0
- package/dist/esm/transport/node/builders/passive.js +7 -0
- package/dist/esm/transport/node/builders/prekeys.js +40 -43
- package/dist/esm/transport/node/builders/presence.js +39 -0
- package/dist/esm/transport/node/builders/privacy-token.js +19 -23
- 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/retry.js +1 -1
- 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 +27 -1
- package/dist/esm/transport/node/mex/argo-decoder.js +152 -0
- package/dist/esm/transport/node/mex/client.js +105 -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 +23 -18
- package/dist/esm/transport/noise/WaFrameCodec.js +2 -2
- package/dist/esm/transport/noise/WaMobileClientPayload.js +58 -0
- package/dist/esm/transport/noise/WaNoiseCert.js +14 -27
- package/dist/esm/transport/noise/WaNoiseHandshake.js +27 -25
- package/dist/esm/transport/noise/WaNoiseSession.js +48 -67
- 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/infra/perf/StoreLock.js +7 -4
- package/dist/media/constants.js +36 -3
- package/dist/media/crypto/WaMediaCrypto.js +378 -0
- package/dist/media/index.js +9 -4
- package/dist/media/processor.js +2 -0
- package/dist/media/sticker/sticker-pack.js +136 -0
- package/dist/media/{WaMediaTransferClient.js → transfer/WaMediaTransferClient.js} +87 -229
- 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/crypto/addon-crypto.js +254 -0
- package/dist/message/{icdc.js → crypto/icdc.js} +11 -13
- package/dist/message/crypto/phash.js +136 -0
- package/dist/message/{reporting-token.js → crypto/reporting-token.js} +7 -7
- package/dist/message/{use-case-secret.js → crypto/use-case-secret.js} +21 -4
- package/dist/message/{content.js → encode/content.js} +200 -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} +225 -38
- 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 +173 -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 +23 -0
- package/dist/protocol/business.js +22 -0
- package/dist/protocol/call.js +51 -0
- package/dist/protocol/constants.js +51 -3
- package/dist/protocol/defaults.js +3 -0
- package/dist/protocol/email.js +33 -0
- package/dist/protocol/index.js +12 -3
- package/dist/protocol/jid.js +148 -11
- 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 +26 -2
- package/dist/protocol/notification.js +25 -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 +6 -1
- package/dist/retry/replay.js +129 -35
- package/dist/retry/tracker.js +3 -7
- package/dist/signal/api/SignalDeviceSyncApi.js +69 -19
- package/dist/signal/api/SignalDigestSyncApi.js +14 -7
- package/dist/signal/api/SignalIdentitySyncApi.js +13 -4
- 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/attestation/WaAdvSignature.js +26 -0
- package/dist/signal/{crypto → attestation}/constants.js +1 -5
- package/dist/signal/constants.js +4 -1
- package/dist/signal/encoding.js +5 -341
- package/dist/signal/group/SenderKeyChain.js +19 -34
- package/dist/signal/group/SenderKeyCodec.js +4 -5
- package/dist/signal/group/SenderKeyManager.js +36 -16
- package/dist/signal/group/encoding.js +101 -0
- package/dist/signal/index.js +13 -10
- package/dist/signal/registration/encoding.js +39 -0
- package/dist/signal/registration/keygen.js +11 -2
- package/dist/signal/registration/utils.js +8 -2
- package/dist/signal/session/SignalProtocol.js +128 -25
- package/dist/signal/session/SignalRatchet.js +41 -60
- package/dist/signal/session/SignalSerializer.js +5 -6
- package/dist/signal/session/SignalSession.js +13 -19
- package/dist/signal/session/encoding.js +183 -0
- package/dist/signal/session/resolver.js +144 -35
- 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/contracts/identity.store.js +2 -0
- package/dist/store/contracts/message-secret.store.js +2 -0
- package/dist/store/contracts/pre-key.store.js +2 -0
- package/dist/store/contracts/session.store.js +2 -0
- package/dist/store/createStore.js +128 -38
- package/dist/store/index.js +22 -12
- package/dist/store/locks/contact.lock.js +1 -0
- package/dist/store/locks/device-list.lock.js +1 -0
- package/dist/store/locks/group-metadata.lock.js +23 -0
- package/dist/store/locks/identity.lock.js +19 -0
- package/dist/store/locks/message-secret.lock.js +20 -0
- package/dist/store/locks/pre-key.lock.js +30 -0
- package/dist/store/locks/session.lock.js +22 -0
- package/dist/store/locks/signal.lock.js +0 -24
- package/dist/store/{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} +26 -14
- package/dist/store/memory/identity.store.js +35 -0
- package/dist/store/memory/message-secret.store.js +94 -0
- package/dist/store/{providers/memory → memory}/message.store.js +2 -2
- package/dist/store/memory/pre-key.store.js +101 -0
- package/dist/store/{providers/memory → memory}/privacy-token.store.js +1 -1
- package/dist/store/{providers/memory → memory}/retry.store.js +49 -14
- package/dist/store/{providers/memory → memory}/sender-key.store.js +3 -3
- package/dist/store/memory/session.store.js +49 -0
- package/dist/store/memory/signal.store.js +40 -0
- package/dist/store/{providers/memory → memory}/thread.store.js +2 -2
- package/dist/store/noop.store.js +27 -5
- package/dist/transport/WaComms.js +18 -8
- package/dist/transport/WaWebSocket.js +41 -9
- 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 +19 -1
- package/dist/transport/keepalive/WaKeepAlive.js +35 -12
- package/dist/transport/node/WaMobileTcpSocket.js +124 -0
- package/dist/transport/node/WaNodeOrchestrator.js +25 -12
- package/dist/transport/node/WaNodeTransport.js +13 -0
- package/dist/transport/node/builders/abprops.js +23 -0
- 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 +14 -0
- package/dist/transport/node/builders/email.js +73 -0
- 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/offline.js +17 -0
- package/dist/transport/node/builders/passive.js +10 -0
- package/dist/transport/node/builders/prekeys.js +38 -41
- package/dist/transport/node/builders/presence.js +43 -0
- package/dist/transport/node/builders/privacy-token.js +18 -22
- package/dist/transport/node/builders/privacy.js +5 -5
- package/dist/transport/node/builders/profile.js +30 -7
- package/dist/transport/node/builders/retry.js +1 -1
- package/dist/transport/node/builders/tos.js +63 -0
- package/dist/transport/node/builders/usync.js +52 -1
- package/dist/transport/node/helpers.js +28 -1
- package/dist/transport/node/mex/argo-decoder.js +189 -0
- package/dist/transport/node/mex/client.js +109 -0
- package/dist/transport/node/query.js +17 -0
- package/dist/transport/node/usync.js +13 -0
- package/dist/transport/noise/WaClientPayload.js +22 -17
- package/dist/transport/noise/WaFrameCodec.js +1 -1
- package/dist/transport/noise/WaMobileClientPayload.js +61 -0
- package/dist/transport/noise/WaNoiseCert.js +13 -26
- package/dist/transport/noise/WaNoiseHandshake.js +25 -23
- package/dist/transport/noise/WaNoiseSession.js +47 -66
- 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} +29 -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/{WaAppStateSyncResponseParser.d.ts → parsers/response-parser.d.ts} +13 -3
- package/dist/types/appstate/sync/WaAppStateSyncClient.d.ts +105 -0
- package/dist/types/appstate/types.d.ts +1 -1
- package/dist/types/appstate/utils.d.ts +17 -1
- package/dist/types/appstate-spec.d.ts +24 -0
- package/dist/types/auth/WaAuthClient.d.ts +95 -3
- package/dist/types/auth/credentials-flow.d.ts +21 -0
- package/dist/types/auth/pairing/WaPairingFlow.d.ts +3 -2
- package/dist/types/auth/pairing/{WaPairingCodeCrypto.d.ts → pairing-code-crypto.d.ts} +5 -1
- package/dist/types/auth/types.d.ts +88 -1
- package/dist/types/client/WaClient.d.ts +183 -65
- package/dist/types/client/WaClientFactory.d.ts +40 -9
- 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/WaAbPropsCoordinator.d.ts +26 -0
- 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 +45 -44
- package/dist/types/client/coordinators/WaEmailCoordinator.d.ts +40 -0
- package/dist/types/client/coordinators/WaGroupCoordinator.d.ts +311 -9
- package/dist/types/client/coordinators/WaIncomingNodeCoordinator.d.ts +16 -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 +65 -29
- package/dist/types/client/coordinators/WaNewsletterCoordinator.d.ts +13 -0
- package/dist/types/client/coordinators/WaOfflineResumeCoordinator.d.ts +31 -0
- package/dist/types/client/coordinators/WaPassiveTasksCoordinator.d.ts +15 -3
- package/dist/types/client/coordinators/WaPresenceCoordinator.d.ts +27 -0
- package/dist/types/client/coordinators/WaPrivacyCoordinator.d.ts +28 -1
- package/dist/types/client/coordinators/WaProfileCoordinator.d.ts +117 -2
- package/dist/types/client/coordinators/WaRetryCoordinator.d.ts +23 -15
- package/dist/types/client/coordinators/WaStatusCoordinator.d.ts +42 -0
- package/dist/types/client/coordinators/WaTrustedContactTokenCoordinator.d.ts +16 -2
- package/dist/types/client/events/abprops.d.ts +15 -0
- 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} +7 -4
- package/dist/types/client/events/group.d.ts +2 -1
- package/dist/types/client/events/identity.d.ts +2 -1
- package/dist/types/client/events/incoming.d.ts +65 -0
- 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 +18 -0
- package/dist/types/client/index.d.ts +1 -1
- package/dist/types/client/media.d.ts +65 -0
- 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 +13 -2
- package/dist/types/client/persistence/history-sync.d.ts +29 -0
- package/dist/types/client/persistence/mailbox.d.ts +12 -0
- package/dist/types/client/tokens/cs-token.d.ts +1 -3
- package/dist/types/client/types.d.ts +926 -55
- package/dist/types/crypto/core/hkdf.d.ts +10 -2
- package/dist/types/crypto/core/index.d.ts +3 -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 +7 -1
- package/dist/types/crypto/core/xeddsa.d.ts +11 -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 -2
- package/dist/types/crypto/curves/types.d.ts +0 -5
- package/dist/types/crypto/index.d.ts +1 -0
- 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 -5
- package/dist/types/infra/log/ConsoleLogger.d.ts +19 -2
- package/dist/types/infra/log/PinoLogger.d.ts +56 -2
- package/dist/types/infra/log/types.d.ts +6 -0
- package/dist/types/infra/perf/BackgroundQueue.d.ts +19 -0
- package/dist/types/infra/perf/StoreLock.d.ts +1 -0
- package/dist/types/media/constants.d.ts +9 -2
- package/dist/types/media/crypto/WaMediaCrypto.d.ts +59 -0
- package/dist/types/media/index.d.ts +7 -4
- package/dist/types/media/processor.d.ts +50 -0
- package/dist/types/media/sticker/sticker-pack.d.ts +6 -0
- package/dist/types/media/{WaMediaTransferClient.d.ts → transfer/WaMediaTransferClient.d.ts} +33 -12
- package/dist/types/media/transfer/conn.d.ts +7 -0
- package/dist/types/media/types.d.ts +10 -5
- 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/crypto/addon-crypto.d.ts +78 -0
- package/dist/types/message/{icdc.d.ts → crypto/icdc.d.ts} +6 -6
- 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 +218 -28
- package/dist/types/mex.d.ts +2 -0
- package/dist/types/proto.d.ts +2 -2
- package/dist/types/protocol/abprops.d.ts +151 -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 +9 -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 +20 -3
- package/dist/types/protocol/defaults.d.ts +3 -0
- package/dist/types/protocol/email.d.ts +32 -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 +79 -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 +24 -0
- package/dist/types/protocol/notification.d.ts +22 -0
- package/dist/types/protocol/presence.d.ts +16 -0
- package/dist/types/protocol/status.d.ts +7 -0
- package/dist/types/protocol/stream.d.ts +1 -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 +6 -1
- 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 +13 -0
- package/dist/types/signal/api/SignalIdentitySyncApi.d.ts +12 -3
- 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 -4
- 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 -62
- package/dist/types/signal/group/SenderKeyChain.d.ts +2 -2
- package/dist/types/signal/group/SenderKeyManager.d.ts +24 -2
- 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 +7 -1
- package/dist/types/signal/session/SignalProtocol.d.ts +66 -2
- package/dist/types/signal/session/SignalRatchet.d.ts +2 -3
- package/dist/types/signal/session/SignalSerializer.d.ts +2 -1
- 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 +18 -2
- package/dist/types/signal/types.d.ts +16 -4
- 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/identity.store.d.ts +11 -0
- package/dist/types/store/contracts/message-secret.store.d.ts +16 -0
- package/dist/types/store/contracts/message.store.d.ts +0 -2
- package/dist/types/store/contracts/pre-key.store.d.ts +13 -0
- package/dist/types/store/contracts/session.store.d.ts +14 -0
- package/dist/types/store/contracts/signal.store.d.ts +1 -34
- package/dist/types/store/createStore.d.ts +54 -2
- package/dist/types/store/index.d.ts +22 -13
- package/dist/types/store/locks/group-metadata.lock.d.ts +2 -0
- package/dist/types/store/locks/identity.lock.d.ts +3 -0
- package/dist/types/store/locks/message-secret.lock.d.ts +3 -0
- package/dist/types/store/locks/pre-key.lock.d.ts +3 -0
- package/dist/types/store/locks/session.lock.d.ts +3 -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/memory/identity.store.d.ts +18 -0
- package/dist/types/store/memory/message-secret.store.d.ts +31 -0
- package/dist/types/store/{providers/memory → memory}/message.store.d.ts +1 -1
- package/dist/types/store/memory/pre-key.store.d.ts +23 -0
- 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 +23 -4
- package/dist/types/store/{providers/memory → memory}/sender-key.store.d.ts +2 -2
- package/dist/types/store/memory/session.store.d.ts +21 -0
- package/dist/types/store/memory/signal.store.d.ts +16 -0
- package/dist/types/store/{providers/memory → memory}/thread.store.d.ts +1 -1
- package/dist/types/store/noop.store.d.ts +6 -2
- package/dist/types/store/types.d.ts +271 -7
- package/dist/types/transport/WaComms.d.ts +5 -0
- package/dist/types/transport/WaWebSocket.d.ts +6 -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 +9 -0
- package/dist/types/transport/keepalive/WaKeepAlive.d.ts +11 -1
- package/dist/types/transport/node/WaMobileTcpSocket.d.ts +24 -0
- package/dist/types/transport/node/WaNodeOrchestrator.d.ts +11 -2
- package/dist/types/transport/node/WaNodeTransport.d.ts +13 -0
- package/dist/types/transport/node/builders/abprops.d.ts +5 -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/device.d.ts +2 -0
- package/dist/types/transport/node/builders/email.d.ts +11 -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/offline.d.ts +2 -0
- package/dist/types/transport/node/builders/passive.d.ts +3 -0
- package/dist/types/transport/node/builders/prekeys.d.ts +4 -3
- package/dist/types/transport/node/builders/presence.d.ts +13 -0
- 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 +3 -1
- package/dist/types/transport/node/mex/argo-decoder.d.ts +11 -0
- package/dist/types/transport/node/mex/client.d.ts +29 -0
- 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 +34 -0
- package/dist/types/transport/noise/WaNoiseCert.d.ts +12 -1
- package/dist/types/transport/noise/WaNoiseHandshake.d.ts +12 -6
- package/dist/types/transport/noise/WaNoiseSession.d.ts +1 -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 +15 -0
- 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 +37 -11
- 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/auth/flow/WaAuthCredentialsFlow.js +0 -130
- package/dist/auth/pairing/WaPairingCodeCrypto.js +0 -77
- package/dist/auth/pairing/constants.js +0 -5
- package/dist/client/connection/WaKeyShareCoordinator.js +0 -63
- package/dist/client/events/chat.js +0 -227
- package/dist/client/incoming.js +0 -269
- package/dist/client/mailbox.js +0 -50
- package/dist/client/messages.js +0 -228
- package/dist/esm/auth/flow/WaAuthCredentialsFlow.js +0 -125
- package/dist/esm/auth/pairing/WaPairingCodeCrypto.js +0 -73
- package/dist/esm/auth/pairing/constants.js +0 -2
- package/dist/esm/client/connection/WaKeyShareCoordinator.js +0 -59
- package/dist/esm/client/events/chat.js +0 -224
- package/dist/esm/client/incoming.js +0 -260
- package/dist/esm/client/mailbox.js +0 -47
- package/dist/esm/client/messages.js +0 -224
- package/dist/esm/media/WaMediaCrypto.js +0 -304
- package/dist/esm/message/addon-crypto.js +0 -59
- package/dist/esm/message/incoming.js +0 -325
- package/dist/esm/message/phash.js +0 -27
- package/dist/esm/signal/crypto/WaAdvSignature.js +0 -64
- 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 -64
- package/dist/esm/store/providers/memory/signal.store.js +0 -199
- package/dist/esm/transport/node/builders/index.js +0 -11
- package/dist/media/WaMediaCrypto.js +0 -308
- package/dist/message/addon-crypto.js +0 -65
- package/dist/message/phash.js +0 -30
- package/dist/signal/crypto/WaAdvSignature.js +0 -76
- 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 -68
- package/dist/store/providers/memory/signal.store.js +0 -203
- package/dist/transport/node/builders/index.js +0 -51
- package/dist/types/appstate/WaAppStateSyncClient.d.ts +0 -66
- package/dist/types/auth/flow/WaAuthCredentialsFlow.d.ts +0 -14
- package/dist/types/auth/pairing/constants.d.ts +0 -2
- package/dist/types/client/connection/WaKeyShareCoordinator.d.ts +0 -14
- package/dist/types/client/events/chat.d.ts +0 -3
- package/dist/types/client/history-sync.d.ts +0 -20
- package/dist/types/client/incoming.d.ts +0 -37
- package/dist/types/client/mailbox.d.ts +0 -10
- package/dist/types/client/messages.d.ts +0 -16
- package/dist/types/client/messaging/participants.d.ts +0 -13
- package/dist/types/media/WaMediaCrypto.d.ts +0 -13
- package/dist/types/media/conn.d.ts +0 -3
- package/dist/types/message/addon-crypto.d.ts +0 -25
- package/dist/types/message/content.d.ts +0 -12
- package/dist/types/message/incoming.d.ts +0 -18
- package/dist/types/signal/crypto/constants.d.ts +0 -5
- 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/store/providers/memory/signal.store.d.ts +0 -58
- package/dist/types/transport/node/builders/index.d.ts +0 -11
- 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/message/{device-sent.js → encode/device-sent.js} +0 -0
- /package/dist/types/message/{padding.d.ts → encode/padding.d.ts} +0 -0
|
@@ -3,20 +3,27 @@ import { PromiseDedup } from '../../infra/perf/PromiseDedup.js';
|
|
|
3
3
|
import { normalizeDeviceJid, parseSignalAddressFromJid, signalAddressKey } from '../../protocol/jid.js';
|
|
4
4
|
import { bytesToHex, uint8Equal } from '../../util/bytes.js';
|
|
5
5
|
import { toError } from '../../util/primitives.js';
|
|
6
|
+
/** Builds a {@link SignalSessionResolver} backed by the given Signal APIs and stores. */
|
|
6
7
|
export function createSignalSessionResolver(options) {
|
|
7
|
-
const { signalProtocol,
|
|
8
|
+
const { signalProtocol, sessionStore, identityStore, signalIdentitySync, signalSessionSync, logger } = options;
|
|
8
9
|
const dedup = new PromiseDedup();
|
|
9
|
-
const ensureSessionInternal = async (address, jid, expectedIdentity, reasonIdentity = false, prefetchedBundle) => {
|
|
10
|
+
const ensureSessionInternal = async (address, jid, expectedIdentity, reasonIdentity = false, prefetchedBundle, knownAbsent = false) => {
|
|
11
|
+
const jidLogger = logger.child({ jid });
|
|
10
12
|
const expectedSerializedIdentity = expectedIdentity
|
|
11
13
|
? toSerializedPubKey(expectedIdentity)
|
|
12
14
|
: null;
|
|
13
15
|
if (reasonIdentity) {
|
|
14
16
|
await signalIdentitySync.syncIdentityKeys([jid]);
|
|
15
17
|
}
|
|
16
|
-
if (await
|
|
18
|
+
if (!knownAbsent && (await sessionStore.hasSession(address))) {
|
|
17
19
|
if (expectedSerializedIdentity) {
|
|
18
|
-
const storedIdentity = await
|
|
20
|
+
const storedIdentity = await identityStore.getRemoteIdentity(address);
|
|
19
21
|
if (!storedIdentity || !uint8Equal(storedIdentity, expectedSerializedIdentity)) {
|
|
22
|
+
jidLogger.warn('signal identity mismatch on stored identity', {
|
|
23
|
+
source: 'stored_vs_expected',
|
|
24
|
+
expected: bytesToHex(expectedSerializedIdentity),
|
|
25
|
+
stored: storedIdentity ? bytesToHex(storedIdentity) : null
|
|
26
|
+
});
|
|
20
27
|
throw new Error('identity mismatch');
|
|
21
28
|
}
|
|
22
29
|
}
|
|
@@ -30,7 +37,7 @@ export function createSignalSessionResolver(options) {
|
|
|
30
37
|
};
|
|
31
38
|
}
|
|
32
39
|
else {
|
|
33
|
-
|
|
40
|
+
jidLogger.debug('signal session missing, fetching remote key bundle');
|
|
34
41
|
fetched = await signalSessionSync.fetchKeyBundle({
|
|
35
42
|
jid,
|
|
36
43
|
reasonIdentity
|
|
@@ -38,28 +45,42 @@ export function createSignalSessionResolver(options) {
|
|
|
38
45
|
}
|
|
39
46
|
const remoteIdentity = toSerializedPubKey(fetched.bundle.identity);
|
|
40
47
|
if (reasonIdentity) {
|
|
41
|
-
const storedIdentity = await
|
|
48
|
+
const storedIdentity = await identityStore.getRemoteIdentity(address);
|
|
42
49
|
if (storedIdentity && !uint8Equal(remoteIdentity, storedIdentity)) {
|
|
50
|
+
jidLogger.warn('signal identity mismatch on fetched bundle vs stored', {
|
|
51
|
+
source: 'remote_vs_stored',
|
|
52
|
+
remote: bytesToHex(remoteIdentity),
|
|
53
|
+
stored: bytesToHex(storedIdentity)
|
|
54
|
+
});
|
|
43
55
|
throw new Error('identity mismatch');
|
|
44
56
|
}
|
|
45
57
|
}
|
|
46
58
|
if (expectedSerializedIdentity && !uint8Equal(remoteIdentity, expectedSerializedIdentity)) {
|
|
59
|
+
jidLogger.warn('signal identity mismatch on fetched bundle vs expected', {
|
|
60
|
+
source: 'remote_vs_expected',
|
|
61
|
+
remote: bytesToHex(remoteIdentity),
|
|
62
|
+
expected: bytesToHex(expectedSerializedIdentity)
|
|
63
|
+
});
|
|
47
64
|
throw new Error('identity mismatch');
|
|
48
65
|
}
|
|
49
66
|
const session = await signalProtocol.establishOutgoingSession(address, fetched.bundle, {
|
|
50
|
-
reuseExisting: true
|
|
67
|
+
reuseExisting: true,
|
|
68
|
+
knownAbsent
|
|
51
69
|
});
|
|
52
|
-
|
|
53
|
-
jid,
|
|
70
|
+
jidLogger.debug('signal session synchronized', {
|
|
54
71
|
regId: fetched.bundle.regId,
|
|
55
72
|
hasOneTimeKey: fetched.bundle.oneTimeKey !== undefined
|
|
56
73
|
});
|
|
57
74
|
return session;
|
|
58
75
|
};
|
|
59
|
-
const ensureSessionWithDedup = (address, jid, expectedIdentity, reasonIdentity = false, prefetchedBundle) => {
|
|
76
|
+
const ensureSessionWithDedup = (address, jid, expectedIdentity, reasonIdentity = false, prefetchedBundle, knownAbsent = false) => {
|
|
60
77
|
const expectedIdentityKey = expectedIdentity ? bytesToHex(expectedIdentity) : 'none';
|
|
61
|
-
|
|
62
|
-
|
|
78
|
+
// knownAbsent is part of the dedup key: single-caller (false) and
|
|
79
|
+
// batch (true) must NOT share a Promise, or the unsafe variant
|
|
80
|
+
// could leak to the safe caller. Per-address lock + the recheck
|
|
81
|
+
// inside persistOutgoingSessionsBatch resolves any race.
|
|
82
|
+
const dedupKey = `signalSession:${signalAddressKey(address)}:${reasonIdentity ? '1' : '0'}:${expectedIdentityKey}:${knownAbsent ? '1' : '0'}`;
|
|
83
|
+
return dedup.run(dedupKey, () => ensureSessionInternal(address, jid, expectedIdentity, reasonIdentity, prefetchedBundle, knownAbsent));
|
|
63
84
|
};
|
|
64
85
|
const ensureSession = (address, jid, expectedIdentity, reasonIdentity = false) => ensureSessionWithDedup(address, jid, expectedIdentity, reasonIdentity).then(() => { });
|
|
65
86
|
const ensureSessionsBatch = async (targetJids, expectedIdentityByJid) => {
|
|
@@ -96,7 +117,7 @@ export function createSignalSessionResolver(options) {
|
|
|
96
117
|
}
|
|
97
118
|
}
|
|
98
119
|
}
|
|
99
|
-
const resolvedByIndex = (await
|
|
120
|
+
const resolvedByIndex = (await sessionStore.getSessionsBatch(normalizedTargetAddresses));
|
|
100
121
|
const collectResolvedTargets = () => {
|
|
101
122
|
const resolvedTargets = new Array(normalizedTargetJids.length);
|
|
102
123
|
let resolvedTargetCount = 0;
|
|
@@ -120,7 +141,14 @@ export function createSignalSessionResolver(options) {
|
|
|
120
141
|
const session = resolvedByIndex[index];
|
|
121
142
|
const expectedIdentity = normalizedExpectedIdentityByJid?.get(normalizedTargetJids[index]);
|
|
122
143
|
if (session && expectedIdentity) {
|
|
123
|
-
|
|
144
|
+
const expectedSerialized = toSerializedPubKey(expectedIdentity);
|
|
145
|
+
if (!uint8Equal(session.remote.pubKey, expectedSerialized)) {
|
|
146
|
+
logger.warn('signal identity mismatch on existing session vs expected', {
|
|
147
|
+
jid: normalizedTargetJids[index],
|
|
148
|
+
source: 'session_vs_expected',
|
|
149
|
+
session: bytesToHex(session.remote.pubKey),
|
|
150
|
+
expected: bytesToHex(expectedSerialized)
|
|
151
|
+
});
|
|
124
152
|
throw new Error('identity mismatch');
|
|
125
153
|
}
|
|
126
154
|
}
|
|
@@ -146,51 +174,132 @@ export function createSignalSessionResolver(options) {
|
|
|
146
174
|
});
|
|
147
175
|
return collectResolvedTargets();
|
|
148
176
|
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
177
|
+
// Prepare under per-address locks (no persist). Bulk persist below
|
|
178
|
+
// holds every per-address lock at once via persistOutgoingSessionsBatch.
|
|
179
|
+
const prepareTargetIndices = new Array(missingIndices.length);
|
|
180
|
+
const preparePromises = new Array(missingIndices.length);
|
|
181
|
+
let prepareCount = 0;
|
|
182
|
+
const missingBundleTargets = [];
|
|
152
183
|
for (let index = 0; index < missingIndices.length; index += 1) {
|
|
153
184
|
const targetIndex = missingIndices[index];
|
|
154
185
|
const targetJid = normalizedTargetJids[targetIndex];
|
|
155
186
|
const batchResult = batchResults[index];
|
|
156
187
|
if (!batchResult?.bundle) {
|
|
157
|
-
|
|
188
|
+
missingBundleTargets.push({
|
|
158
189
|
jid: targetJid,
|
|
159
|
-
|
|
190
|
+
reason: batchResult?.errorText ?? 'missing key bundle user in response'
|
|
160
191
|
});
|
|
161
192
|
continue;
|
|
162
193
|
}
|
|
163
194
|
const expectedIdentity = normalizedExpectedIdentityByJid?.get(targetJid);
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
195
|
+
const expectedSerializedIdentity = expectedIdentity
|
|
196
|
+
? toSerializedPubKey(expectedIdentity)
|
|
197
|
+
: null;
|
|
198
|
+
const bundleIdentity = toSerializedPubKey(batchResult.bundle.identity);
|
|
199
|
+
if (expectedSerializedIdentity &&
|
|
200
|
+
!uint8Equal(bundleIdentity, expectedSerializedIdentity)) {
|
|
201
|
+
logger.warn('signal identity mismatch on fetched batch bundle vs expected', {
|
|
202
|
+
jid: targetJid,
|
|
203
|
+
source: 'bundle_vs_expected',
|
|
204
|
+
bundle: bytesToHex(bundleIdentity),
|
|
205
|
+
expected: bytesToHex(expectedSerializedIdentity)
|
|
206
|
+
});
|
|
207
|
+
throw new Error('identity mismatch');
|
|
208
|
+
}
|
|
209
|
+
const targetAddress = normalizedTargetAddresses[targetIndex];
|
|
210
|
+
const bundle = batchResult.bundle;
|
|
211
|
+
prepareTargetIndices[prepareCount] = targetIndex;
|
|
212
|
+
preparePromises[prepareCount] = signalProtocol
|
|
213
|
+
.prepareOutgoingSession(targetAddress, bundle, {
|
|
214
|
+
reuseExisting: true,
|
|
215
|
+
knownAbsent: true
|
|
216
|
+
})
|
|
217
|
+
.then((prep) => ({
|
|
218
|
+
session: prep.session,
|
|
219
|
+
remoteIdentity: prep.remoteIdentity
|
|
220
|
+
}));
|
|
221
|
+
prepareCount += 1;
|
|
222
|
+
}
|
|
223
|
+
if (missingBundleTargets.length > 0) {
|
|
224
|
+
logger.warn('signal batch key fetch returned targets without bundle', {
|
|
225
|
+
droppedCount: missingBundleTargets.length,
|
|
226
|
+
totalRequested: missingIndices.length,
|
|
227
|
+
sample: missingBundleTargets.slice(0, 3)
|
|
228
|
+
});
|
|
167
229
|
}
|
|
168
|
-
if (
|
|
230
|
+
if (prepareCount === 0) {
|
|
169
231
|
return collectResolvedTargets();
|
|
170
232
|
}
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
const
|
|
233
|
+
prepareTargetIndices.length = prepareCount;
|
|
234
|
+
preparePromises.length = prepareCount;
|
|
235
|
+
const prepareResults = await Promise.allSettled(preparePromises);
|
|
236
|
+
const batchEntries = [];
|
|
237
|
+
const entryToTargetIndex = [];
|
|
174
238
|
const fallbackIndices = [];
|
|
175
|
-
for (let
|
|
176
|
-
const targetIndex =
|
|
177
|
-
const
|
|
178
|
-
if (
|
|
179
|
-
const normalized = toError(
|
|
239
|
+
for (let i = 0; i < prepareTargetIndices.length; i += 1) {
|
|
240
|
+
const targetIndex = prepareTargetIndices[i];
|
|
241
|
+
const result = prepareResults[i];
|
|
242
|
+
if (result.status === 'rejected') {
|
|
243
|
+
const normalized = toError(result.reason);
|
|
180
244
|
if (normalized.message === 'identity mismatch') {
|
|
181
245
|
throw normalized;
|
|
182
246
|
}
|
|
183
|
-
logger.warn('signal session
|
|
247
|
+
logger.warn('signal session prepare failed during batch resolution', {
|
|
184
248
|
jid: normalizedTargetJids[targetIndex],
|
|
185
249
|
message: normalized.message
|
|
186
250
|
});
|
|
187
251
|
continue;
|
|
188
252
|
}
|
|
189
|
-
|
|
253
|
+
batchEntries.push({
|
|
254
|
+
address: normalizedTargetAddresses[targetIndex],
|
|
255
|
+
session: result.value.session,
|
|
256
|
+
remoteIdentity: result.value.remoteIdentity
|
|
257
|
+
});
|
|
258
|
+
entryToTargetIndex.push(targetIndex);
|
|
259
|
+
}
|
|
260
|
+
if (batchEntries.length === 0) {
|
|
261
|
+
return collectResolvedTargets();
|
|
262
|
+
}
|
|
263
|
+
let persistResult;
|
|
264
|
+
try {
|
|
265
|
+
persistResult = await signalProtocol.persistOutgoingSessionsBatch(batchEntries);
|
|
266
|
+
}
|
|
267
|
+
catch (error) {
|
|
268
|
+
const normalized = toError(error);
|
|
269
|
+
logger.warn('signal batched session persist failed', {
|
|
270
|
+
requested: batchEntries.length,
|
|
271
|
+
message: normalized.message
|
|
272
|
+
});
|
|
273
|
+
for (let i = 0; i < entryToTargetIndex.length; i += 1) {
|
|
274
|
+
fallbackIndices.push(entryToTargetIndex[i]);
|
|
275
|
+
}
|
|
276
|
+
persistResult = { resolved: [], skipped: [] };
|
|
277
|
+
}
|
|
278
|
+
const sessionByAddressKey = new Map();
|
|
279
|
+
for (const r of persistResult.resolved) {
|
|
280
|
+
sessionByAddressKey.set(signalAddressKey(r.address), r.session);
|
|
281
|
+
}
|
|
282
|
+
const skippedByAddressKey = new Set();
|
|
283
|
+
for (const s of persistResult.skipped) {
|
|
284
|
+
skippedByAddressKey.add(signalAddressKey(s.address));
|
|
285
|
+
logger.warn('signal session persist skipped due to identity conflict', {
|
|
286
|
+
user: s.address.user,
|
|
287
|
+
server: s.address.server,
|
|
288
|
+
device: s.address.device
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
for (let i = 0; i < entryToTargetIndex.length; i += 1) {
|
|
292
|
+
const targetIndex = entryToTargetIndex[i];
|
|
293
|
+
const addrKey = signalAddressKey(normalizedTargetAddresses[targetIndex]);
|
|
294
|
+
const session = sessionByAddressKey.get(addrKey);
|
|
190
295
|
if (session) {
|
|
191
296
|
resolvedByIndex[targetIndex] = session;
|
|
297
|
+
continue;
|
|
298
|
+
}
|
|
299
|
+
if (skippedByAddressKey.has(addrKey)) {
|
|
300
|
+
continue;
|
|
192
301
|
}
|
|
193
|
-
|
|
302
|
+
if (!fallbackIndices.includes(targetIndex)) {
|
|
194
303
|
fallbackIndices.push(targetIndex);
|
|
195
304
|
}
|
|
196
305
|
}
|
|
@@ -199,7 +308,7 @@ export function createSignalSessionResolver(options) {
|
|
|
199
308
|
for (let i = 0; i < fallbackIndices.length; i++) {
|
|
200
309
|
fallbackAddresses[i] = normalizedTargetAddresses[fallbackIndices[i]];
|
|
201
310
|
}
|
|
202
|
-
const fallbackSessions = await
|
|
311
|
+
const fallbackSessions = await sessionStore.getSessionsBatch(fallbackAddresses);
|
|
203
312
|
for (let i = 0; i < fallbackIndices.length; i++) {
|
|
204
313
|
const session = fallbackSessions[i];
|
|
205
314
|
if (session) {
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { WaIdentityMemoryStore } from '../memory/identity.store.js';
|
|
2
|
+
/**
|
|
3
|
+
* Read-through / write-through in-process cache for a persistent remote
|
|
4
|
+
* identity backend. Reuses {@link WaIdentityMemoryStore} as the bounded-LRU
|
|
5
|
+
* L1. Remote identities are read alongside sessions on the send path (the
|
|
6
|
+
* identity-mismatch guard), so caching them complements
|
|
7
|
+
* {@link withSessionCache}.
|
|
8
|
+
*
|
|
9
|
+
* The identity store has no per-key delete: identities are overwritten on
|
|
10
|
+
* re-establishment, so a peer's key change propagates through the
|
|
11
|
+
* write-through `setRemoteIdentity`. See {@link withSessionCache} for the
|
|
12
|
+
* shared coherence model and the single-writer-per-session assumption.
|
|
13
|
+
*/
|
|
14
|
+
export function withIdentityCache(backend, maxEntries) {
|
|
15
|
+
const l1 = new WaIdentityMemoryStore({ maxRemoteIdentities: maxEntries });
|
|
16
|
+
let generation = 0;
|
|
17
|
+
return {
|
|
18
|
+
getRemoteIdentity: async (address) => {
|
|
19
|
+
const cached = await l1.getRemoteIdentity(address);
|
|
20
|
+
if (cached !== null)
|
|
21
|
+
return cached;
|
|
22
|
+
const gen = generation;
|
|
23
|
+
const fetched = await backend.getRemoteIdentity(address);
|
|
24
|
+
if (fetched !== null &&
|
|
25
|
+
gen === generation &&
|
|
26
|
+
(await l1.getRemoteIdentity(address)) === null) {
|
|
27
|
+
await l1.setRemoteIdentity(address, fetched);
|
|
28
|
+
}
|
|
29
|
+
return fetched;
|
|
30
|
+
},
|
|
31
|
+
getRemoteIdentities: async (addresses) => {
|
|
32
|
+
const cached = await l1.getRemoteIdentities(addresses);
|
|
33
|
+
const missing = [];
|
|
34
|
+
for (let i = 0; i < addresses.length; i += 1) {
|
|
35
|
+
if (cached[i] === null)
|
|
36
|
+
missing.push(i);
|
|
37
|
+
}
|
|
38
|
+
if (missing.length === 0)
|
|
39
|
+
return cached;
|
|
40
|
+
const gen = generation;
|
|
41
|
+
const fetched = await backend.getRemoteIdentities(missing.map((i) => addresses[i]));
|
|
42
|
+
const coherent = gen === generation;
|
|
43
|
+
const result = cached.slice();
|
|
44
|
+
for (let j = 0; j < missing.length; j += 1) {
|
|
45
|
+
const key = fetched[j];
|
|
46
|
+
result[missing[j]] = key;
|
|
47
|
+
if (key !== null &&
|
|
48
|
+
coherent &&
|
|
49
|
+
(await l1.getRemoteIdentity(addresses[missing[j]])) === null) {
|
|
50
|
+
await l1.setRemoteIdentity(addresses[missing[j]], key);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return result;
|
|
54
|
+
},
|
|
55
|
+
setRemoteIdentity: async (address, identityKey) => {
|
|
56
|
+
generation += 1;
|
|
57
|
+
await backend.setRemoteIdentity(address, identityKey);
|
|
58
|
+
await l1.setRemoteIdentity(address, identityKey);
|
|
59
|
+
},
|
|
60
|
+
setRemoteIdentities: async (entries) => {
|
|
61
|
+
generation += 1;
|
|
62
|
+
await backend.setRemoteIdentities(entries);
|
|
63
|
+
await l1.setRemoteIdentities(entries);
|
|
64
|
+
},
|
|
65
|
+
clear: async () => {
|
|
66
|
+
generation += 1;
|
|
67
|
+
await backend.clear();
|
|
68
|
+
await l1.clear();
|
|
69
|
+
},
|
|
70
|
+
destroy: async () => {
|
|
71
|
+
await l1.clear();
|
|
72
|
+
await backend.destroy?.();
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { WaPrivacyTokenMemoryStore } from '../memory/privacy-token.store.js';
|
|
2
|
+
/**
|
|
3
|
+
* Read-through cache for a persistent privacy-token backend. Reuses
|
|
4
|
+
* {@link WaPrivacyTokenMemoryStore} as the bounded-LRU L1.
|
|
5
|
+
*
|
|
6
|
+
* Unlike the signal caches this is **invalidate-on-write, not
|
|
7
|
+
* write-through**: `upsert` merges partial fields into the existing row on
|
|
8
|
+
* the backend, so caching the partial incoming record would diverge from the
|
|
9
|
+
* backend's merged result. Instead each upsert drops the L1 entry and the
|
|
10
|
+
* next read re-populates from the merged backend truth. See
|
|
11
|
+
* {@link withSessionCache} for the shared coherence model and the
|
|
12
|
+
* single-writer-per-session assumption.
|
|
13
|
+
*/
|
|
14
|
+
export function withPrivacyTokenCache(backend, maxEntries) {
|
|
15
|
+
const l1 = new WaPrivacyTokenMemoryStore(maxEntries);
|
|
16
|
+
let generation = 0;
|
|
17
|
+
return {
|
|
18
|
+
upsert: async (record) => {
|
|
19
|
+
generation += 1;
|
|
20
|
+
await backend.upsert(record);
|
|
21
|
+
await l1.deleteByJid(record.jid);
|
|
22
|
+
},
|
|
23
|
+
upsertBatch: async (records) => {
|
|
24
|
+
generation += 1;
|
|
25
|
+
await backend.upsertBatch(records);
|
|
26
|
+
for (let i = 0; i < records.length; i += 1) {
|
|
27
|
+
await l1.deleteByJid(records[i].jid);
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
getByJid: async (jid) => {
|
|
31
|
+
const cached = await l1.getByJid(jid);
|
|
32
|
+
if (cached !== null)
|
|
33
|
+
return cached;
|
|
34
|
+
const gen = generation;
|
|
35
|
+
const fetched = await backend.getByJid(jid);
|
|
36
|
+
if (fetched !== null && gen === generation && (await l1.getByJid(jid)) === null) {
|
|
37
|
+
await l1.upsert(fetched);
|
|
38
|
+
}
|
|
39
|
+
return fetched;
|
|
40
|
+
},
|
|
41
|
+
deleteByJid: async (jid) => {
|
|
42
|
+
generation += 1;
|
|
43
|
+
const deleted = await backend.deleteByJid(jid);
|
|
44
|
+
await l1.deleteByJid(jid);
|
|
45
|
+
return deleted;
|
|
46
|
+
},
|
|
47
|
+
clear: async () => {
|
|
48
|
+
generation += 1;
|
|
49
|
+
await backend.clear();
|
|
50
|
+
await l1.clear();
|
|
51
|
+
},
|
|
52
|
+
destroy: async () => {
|
|
53
|
+
await l1.clear();
|
|
54
|
+
await backend.destroy?.();
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { SenderKeyMemoryStore } from '../memory/sender-key.store.js';
|
|
2
|
+
/**
|
|
3
|
+
* Read-through / write-through in-process cache for a persistent sender-key
|
|
4
|
+
* backend. Reuses {@link SenderKeyMemoryStore} as the bounded-LRU L1 so the
|
|
5
|
+
* per-(group, sender) lookups repeated across a group fan-out skip the
|
|
6
|
+
* backend round-trip.
|
|
7
|
+
*
|
|
8
|
+
* Only the point reads are cached. `getGroupSenderKeyList` returns the
|
|
9
|
+
* *complete* set for a group, which a partial point cache would under-report,
|
|
10
|
+
* so it goes straight to the backend. Upserts replace the whole record (no
|
|
11
|
+
* merge), so they are write-through; the sweep deletes
|
|
12
|
+
* (`deleteDeviceSenderKey`/`markForgetSenderKey`) run on the backend for the
|
|
13
|
+
* authoritative count and then invalidate the matching L1 entries via the
|
|
14
|
+
* memory store's own sweep. See {@link withSessionCache} for the shared
|
|
15
|
+
* coherence model and the single-writer-per-session assumption.
|
|
16
|
+
*/
|
|
17
|
+
export function withSenderKeyCache(backend, maxEntries) {
|
|
18
|
+
const l1 = new SenderKeyMemoryStore({
|
|
19
|
+
maxSenderKeys: maxEntries,
|
|
20
|
+
maxSenderDistributions: maxEntries
|
|
21
|
+
});
|
|
22
|
+
let generation = 0;
|
|
23
|
+
return {
|
|
24
|
+
upsertSenderKey: async (record) => {
|
|
25
|
+
generation += 1;
|
|
26
|
+
await backend.upsertSenderKey(record);
|
|
27
|
+
await l1.upsertSenderKey(record);
|
|
28
|
+
},
|
|
29
|
+
upsertSenderKeyDistribution: async (record) => {
|
|
30
|
+
generation += 1;
|
|
31
|
+
await backend.upsertSenderKeyDistribution(record);
|
|
32
|
+
await l1.upsertSenderKeyDistribution(record);
|
|
33
|
+
},
|
|
34
|
+
upsertSenderKeyDistributions: async (records) => {
|
|
35
|
+
generation += 1;
|
|
36
|
+
await backend.upsertSenderKeyDistributions(records);
|
|
37
|
+
await l1.upsertSenderKeyDistributions(records);
|
|
38
|
+
},
|
|
39
|
+
getGroupSenderKeyList: (groupId) => backend.getGroupSenderKeyList(groupId),
|
|
40
|
+
getDeviceSenderKey: async (groupId, sender) => {
|
|
41
|
+
const cached = await l1.getDeviceSenderKey(groupId, sender);
|
|
42
|
+
if (cached !== null)
|
|
43
|
+
return cached;
|
|
44
|
+
const gen = generation;
|
|
45
|
+
const fetched = await backend.getDeviceSenderKey(groupId, sender);
|
|
46
|
+
if (fetched !== null &&
|
|
47
|
+
gen === generation &&
|
|
48
|
+
(await l1.getDeviceSenderKey(groupId, sender)) === null) {
|
|
49
|
+
await l1.upsertSenderKey(fetched);
|
|
50
|
+
}
|
|
51
|
+
return fetched;
|
|
52
|
+
},
|
|
53
|
+
getDeviceSenderKeyDistributions: async (groupId, senders) => {
|
|
54
|
+
const cached = await l1.getDeviceSenderKeyDistributions(groupId, senders);
|
|
55
|
+
const missing = [];
|
|
56
|
+
for (let i = 0; i < senders.length; i += 1) {
|
|
57
|
+
if (cached[i] === null)
|
|
58
|
+
missing.push(i);
|
|
59
|
+
}
|
|
60
|
+
if (missing.length === 0)
|
|
61
|
+
return cached;
|
|
62
|
+
const gen = generation;
|
|
63
|
+
const fetched = await backend.getDeviceSenderKeyDistributions(groupId, missing.map((i) => senders[i]));
|
|
64
|
+
const coherent = gen === generation;
|
|
65
|
+
const result = cached.slice();
|
|
66
|
+
for (let j = 0; j < missing.length; j += 1) {
|
|
67
|
+
const record = fetched[j];
|
|
68
|
+
result[missing[j]] = record;
|
|
69
|
+
if (record !== null && coherent) {
|
|
70
|
+
const [current] = await l1.getDeviceSenderKeyDistributions(groupId, [
|
|
71
|
+
senders[missing[j]]
|
|
72
|
+
]);
|
|
73
|
+
if (current === null)
|
|
74
|
+
await l1.upsertSenderKeyDistribution(record);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return result;
|
|
78
|
+
},
|
|
79
|
+
deleteDeviceSenderKey: async (target, groupId) => {
|
|
80
|
+
generation += 1;
|
|
81
|
+
const deleted = await backend.deleteDeviceSenderKey(target, groupId);
|
|
82
|
+
await l1.deleteDeviceSenderKey(target, groupId);
|
|
83
|
+
return deleted;
|
|
84
|
+
},
|
|
85
|
+
markForgetSenderKey: async (groupId, participants) => {
|
|
86
|
+
generation += 1;
|
|
87
|
+
const deleted = await backend.markForgetSenderKey(groupId, participants);
|
|
88
|
+
await l1.markForgetSenderKey(groupId, participants);
|
|
89
|
+
return deleted;
|
|
90
|
+
},
|
|
91
|
+
clear: async () => {
|
|
92
|
+
generation += 1;
|
|
93
|
+
await backend.clear();
|
|
94
|
+
await l1.clear();
|
|
95
|
+
},
|
|
96
|
+
destroy: async () => {
|
|
97
|
+
await l1.clear();
|
|
98
|
+
await backend.destroy?.();
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { WaSessionMemoryStore } from '../memory/session.store.js';
|
|
2
|
+
/**
|
|
3
|
+
* Read-through / write-through in-process cache for a persistent session
|
|
4
|
+
* backend. Reuses {@link WaSessionMemoryStore} as the bounded-LRU L1 so that
|
|
5
|
+
* repeated reads of the same peer on the send/recv path skip the backend
|
|
6
|
+
* round-trip.
|
|
7
|
+
*
|
|
8
|
+
* Coherence model (single process):
|
|
9
|
+
* - every mutation (set/delete/clear) writes the backend then the L1 in
|
|
10
|
+
* lock-step and bumps a generation counter;
|
|
11
|
+
* - a read only populates the L1 when no mutation interleaved its backend
|
|
12
|
+
* fetch (generation unchanged) and the slot is still empty, so an in-flight
|
|
13
|
+
* read can never resurrect a concurrently deleted entry nor overwrite a
|
|
14
|
+
* fresher concurrent write;
|
|
15
|
+
* - there is no negative caching: a miss always re-hits the backend.
|
|
16
|
+
*
|
|
17
|
+
* This cache assumes a single writer per `sessionId` (the library's
|
|
18
|
+
* connection model). Do not share one backend across processes for the same
|
|
19
|
+
* session with the cache enabled - there is no cross-process invalidation
|
|
20
|
+
* channel, so another process's writes would leave this L1 stale.
|
|
21
|
+
*/
|
|
22
|
+
export function withSessionCache(backend, maxEntries) {
|
|
23
|
+
const l1 = new WaSessionMemoryStore({ maxSessions: maxEntries });
|
|
24
|
+
let generation = 0;
|
|
25
|
+
return {
|
|
26
|
+
hasSession: async (address) => {
|
|
27
|
+
if (await l1.hasSession(address))
|
|
28
|
+
return true;
|
|
29
|
+
return backend.hasSession(address);
|
|
30
|
+
},
|
|
31
|
+
hasSessions: (addresses) => backend.hasSessions(addresses),
|
|
32
|
+
getSession: async (address) => {
|
|
33
|
+
const cached = await l1.getSession(address);
|
|
34
|
+
if (cached !== null)
|
|
35
|
+
return cached;
|
|
36
|
+
const gen = generation;
|
|
37
|
+
const fetched = await backend.getSession(address);
|
|
38
|
+
if (fetched !== null && gen === generation && (await l1.getSession(address)) === null) {
|
|
39
|
+
await l1.setSession(address, fetched);
|
|
40
|
+
}
|
|
41
|
+
return fetched;
|
|
42
|
+
},
|
|
43
|
+
getSessionsBatch: async (addresses) => {
|
|
44
|
+
const cached = await l1.getSessionsBatch(addresses);
|
|
45
|
+
const missing = [];
|
|
46
|
+
for (let i = 0; i < addresses.length; i += 1) {
|
|
47
|
+
if (cached[i] === null)
|
|
48
|
+
missing.push(i);
|
|
49
|
+
}
|
|
50
|
+
if (missing.length === 0)
|
|
51
|
+
return cached;
|
|
52
|
+
const gen = generation;
|
|
53
|
+
const fetched = await backend.getSessionsBatch(missing.map((i) => addresses[i]));
|
|
54
|
+
const coherent = gen === generation;
|
|
55
|
+
const result = cached.slice();
|
|
56
|
+
for (let j = 0; j < missing.length; j += 1) {
|
|
57
|
+
const record = fetched[j];
|
|
58
|
+
result[missing[j]] = record;
|
|
59
|
+
if (record !== null &&
|
|
60
|
+
coherent &&
|
|
61
|
+
(await l1.getSession(addresses[missing[j]])) === null) {
|
|
62
|
+
await l1.setSession(addresses[missing[j]], record);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return result;
|
|
66
|
+
},
|
|
67
|
+
setSession: async (address, session) => {
|
|
68
|
+
generation += 1;
|
|
69
|
+
await backend.setSession(address, session);
|
|
70
|
+
await l1.setSession(address, session);
|
|
71
|
+
},
|
|
72
|
+
setSessionsBatch: async (entries) => {
|
|
73
|
+
generation += 1;
|
|
74
|
+
await backend.setSessionsBatch(entries);
|
|
75
|
+
await l1.setSessionsBatch(entries);
|
|
76
|
+
},
|
|
77
|
+
deleteSession: async (address) => {
|
|
78
|
+
generation += 1;
|
|
79
|
+
await backend.deleteSession(address);
|
|
80
|
+
await l1.deleteSession(address);
|
|
81
|
+
},
|
|
82
|
+
clear: async () => {
|
|
83
|
+
generation += 1;
|
|
84
|
+
await backend.clear();
|
|
85
|
+
await l1.clear();
|
|
86
|
+
},
|
|
87
|
+
destroy: async () => {
|
|
88
|
+
await l1.clear();
|
|
89
|
+
await backend.destroy?.();
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|