zapo-js 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -4
- package/dist/appstate/WaAppStateCrypto.js +19 -26
- package/dist/appstate/WaAppStateSyncClient.js +293 -181
- package/dist/appstate/WaAppStateSyncResponseParser.js +16 -5
- package/dist/appstate/constants.js +4 -3
- package/dist/appstate/{store/sqlite.js → encoding.js} +13 -8
- package/dist/appstate/index.js +8 -6
- package/dist/appstate/utils.js +9 -34
- package/dist/auth/WaAuthClient.js +43 -61
- package/dist/auth/flow/WaAuthCredentialsFlow.js +22 -15
- package/dist/auth/index.js +1 -8
- package/dist/auth/pairing/WaPairingCodeCrypto.js +6 -4
- package/dist/auth/pairing/WaPairingFlow.js +34 -26
- package/dist/auth/pairing/WaQrFlow.js +37 -24
- package/dist/client/WaClient.js +275 -324
- package/dist/client/WaClientFactory.js +500 -133
- package/dist/client/connection/WaConnectionManager.js +301 -0
- package/dist/client/connection/WaKeyShareCoordinator.js +63 -0
- package/dist/client/connection/WaReceiptQueue.js +51 -0
- package/dist/client/coordinators/WaAppStateMutationCoordinator.js +471 -0
- package/dist/client/coordinators/WaBusinessCoordinator.js +241 -0
- package/dist/client/coordinators/WaGroupCoordinator.js +30 -16
- package/dist/client/coordinators/WaIncomingNodeCoordinator.js +21 -27
- package/dist/client/coordinators/WaMessageDispatchCoordinator.js +439 -701
- package/dist/client/coordinators/WaPassiveTasksCoordinator.js +74 -31
- package/dist/client/coordinators/WaPrivacyCoordinator.js +134 -0
- package/dist/client/coordinators/WaProfileCoordinator.js +212 -0
- package/dist/client/coordinators/WaRetryCoordinator.js +242 -57
- package/dist/client/coordinators/WaStreamControlCoordinator.js +18 -11
- package/dist/client/coordinators/WaTrustedContactTokenCoordinator.js +166 -0
- package/dist/client/dirty.js +74 -48
- package/dist/client/events/chat.js +4 -3
- package/dist/client/events/devices.js +72 -0
- package/dist/client/events/group.js +62 -47
- package/dist/client/events/identity.js +22 -0
- package/dist/client/events/privacy-token.js +39 -0
- package/dist/client/history-sync.js +94 -63
- package/dist/client/incoming.js +60 -27
- package/dist/client/mailbox.js +24 -23
- package/dist/client/messages.js +107 -31
- package/dist/client/messaging/fanout.js +199 -0
- package/dist/client/messaging/key-protocol.js +130 -0
- package/dist/client/messaging/participants.js +193 -0
- package/dist/client/persistence/WriteBehindPersistence.js +129 -0
- package/dist/client/tokens/cs-token.js +50 -0
- package/dist/client/tokens/tc-token.js +25 -0
- package/dist/crypto/core/hkdf.js +3 -8
- package/dist/crypto/core/index.js +2 -5
- package/dist/crypto/core/keys.js +6 -7
- package/dist/crypto/core/nonce.js +2 -0
- package/dist/crypto/core/primitives.js +12 -23
- package/dist/crypto/core/random.js +26 -23
- package/dist/crypto/curves/Ed25519.js +7 -8
- package/dist/crypto/curves/X25519.js +38 -22
- package/dist/crypto/index.js +1 -3
- package/dist/crypto/math/constants.js +13 -36
- package/dist/crypto/math/edwards.js +171 -44
- package/dist/crypto/math/fe.js +706 -0
- package/dist/crypto/math/mod.js +10 -3
- package/dist/esm/appstate/WaAppStateCrypto.js +7 -14
- package/dist/esm/appstate/WaAppStateSyncClient.js +284 -172
- package/dist/esm/appstate/WaAppStateSyncResponseParser.js +17 -6
- package/dist/esm/appstate/constants.js +3 -2
- package/dist/esm/appstate/{store/sqlite.js → encoding.js} +13 -8
- package/dist/esm/appstate/index.js +2 -2
- package/dist/esm/appstate/utils.js +8 -30
- package/dist/esm/auth/WaAuthClient.js +43 -61
- package/dist/esm/auth/flow/WaAuthCredentialsFlow.js +22 -15
- package/dist/esm/auth/index.js +0 -3
- package/dist/esm/auth/pairing/WaPairingCodeCrypto.js +6 -4
- package/dist/esm/auth/pairing/WaPairingFlow.js +28 -20
- package/dist/esm/auth/pairing/WaQrFlow.js +37 -24
- package/dist/esm/client/WaClient.js +275 -324
- package/dist/esm/client/WaClientFactory.js +501 -134
- package/dist/esm/client/connection/WaConnectionManager.js +297 -0
- package/dist/esm/client/connection/WaKeyShareCoordinator.js +59 -0
- package/dist/esm/client/connection/WaReceiptQueue.js +47 -0
- package/dist/esm/client/coordinators/WaAppStateMutationCoordinator.js +467 -0
- package/dist/esm/client/coordinators/WaBusinessCoordinator.js +238 -0
- package/dist/esm/client/coordinators/WaGroupCoordinator.js +23 -9
- package/dist/esm/client/coordinators/WaIncomingNodeCoordinator.js +21 -27
- package/dist/esm/client/coordinators/WaMessageDispatchCoordinator.js +443 -705
- package/dist/esm/client/coordinators/WaPassiveTasksCoordinator.js +74 -31
- package/dist/esm/client/coordinators/WaPrivacyCoordinator.js +131 -0
- package/dist/esm/client/coordinators/WaProfileCoordinator.js +209 -0
- package/dist/esm/client/coordinators/WaRetryCoordinator.js +244 -59
- package/dist/esm/client/coordinators/WaStreamControlCoordinator.js +19 -12
- package/dist/esm/client/coordinators/WaTrustedContactTokenCoordinator.js +162 -0
- package/dist/esm/client/dirty.js +69 -43
- package/dist/esm/client/events/chat.js +4 -3
- package/dist/esm/client/events/devices.js +68 -0
- package/dist/esm/client/events/group.js +53 -39
- package/dist/esm/client/events/identity.js +19 -0
- package/dist/esm/client/events/privacy-token.js +36 -0
- package/dist/esm/client/history-sync.js +91 -60
- package/dist/esm/client/incoming.js +61 -28
- package/dist/esm/client/mailbox.js +24 -23
- package/dist/esm/client/messages.js +108 -32
- package/dist/esm/client/messaging/fanout.js +196 -0
- package/dist/esm/client/messaging/key-protocol.js +127 -0
- package/dist/esm/client/messaging/participants.js +190 -0
- package/dist/esm/client/persistence/WriteBehindPersistence.js +125 -0
- package/dist/esm/client/tokens/cs-token.js +46 -0
- package/dist/esm/client/tokens/tc-token.js +18 -0
- package/dist/esm/crypto/core/hkdf.js +3 -8
- package/dist/esm/crypto/core/index.js +2 -3
- package/dist/esm/crypto/core/keys.js +3 -4
- package/dist/esm/crypto/core/nonce.js +2 -0
- package/dist/esm/crypto/core/primitives.js +12 -22
- package/dist/esm/crypto/core/random.js +25 -23
- package/dist/esm/crypto/curves/Ed25519.js +4 -5
- package/dist/esm/crypto/curves/X25519.js +35 -19
- package/dist/esm/crypto/index.js +0 -1
- package/dist/esm/crypto/math/constants.js +12 -35
- package/dist/esm/crypto/math/edwards.js +174 -47
- package/dist/esm/crypto/math/fe.js +691 -0
- package/dist/esm/crypto/math/mod.js +10 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/infra/log/ConsoleLogger.js +18 -17
- package/dist/esm/infra/log/PinoLogger.js +15 -9
- package/dist/esm/infra/log/types.js +11 -1
- package/dist/esm/infra/perf/BackgroundQueue.js +478 -0
- package/dist/esm/infra/perf/BoundedTaskQueue.js +16 -18
- package/dist/esm/infra/perf/PromiseDedup.js +20 -0
- package/dist/esm/infra/perf/SharedExclusiveGate.js +109 -0
- package/dist/esm/infra/perf/StoreLock.js +77 -0
- package/dist/esm/media/WaMediaCrypto.js +96 -16
- package/dist/esm/media/WaMediaTransferClient.js +251 -91
- package/dist/esm/media/conn.js +10 -6
- package/dist/esm/media/constants.js +6 -2
- package/dist/esm/message/WaMessageClient.js +30 -32
- package/dist/esm/message/ack.js +6 -6
- package/dist/esm/message/addon-crypto.js +59 -0
- package/dist/esm/message/content.js +195 -9
- package/dist/esm/message/icdc.js +76 -0
- package/dist/esm/message/incoming.js +129 -122
- package/dist/esm/message/index.js +2 -0
- package/dist/esm/message/phash.js +3 -1
- package/dist/esm/message/reporting-token.js +425 -0
- package/dist/esm/message/use-case-secret.js +49 -0
- package/dist/esm/protocol/appstate.js +27 -0
- package/dist/esm/protocol/browser.js +10 -18
- package/dist/esm/protocol/constants.js +6 -3
- package/dist/esm/protocol/defaults.js +6 -0
- package/dist/esm/protocol/index.js +2 -11
- package/dist/esm/protocol/jid.js +133 -52
- package/dist/esm/protocol/media.js +3 -3
- package/dist/esm/protocol/message.js +61 -1
- package/dist/esm/protocol/nodes.js +4 -0
- package/dist/esm/protocol/notification.js +3 -1
- package/dist/esm/protocol/privacy-token.js +17 -0
- package/dist/esm/protocol/privacy.js +55 -0
- package/dist/esm/protocol/stream.js +26 -1
- package/dist/esm/protocol/usync.js +11 -0
- package/dist/esm/retry/codec.js +216 -0
- package/dist/esm/retry/constants.js +1 -1
- package/dist/esm/retry/index.js +3 -2
- package/dist/esm/retry/parse.js +88 -86
- package/dist/esm/retry/replay.js +54 -51
- package/dist/esm/retry/tracker.js +94 -0
- package/dist/esm/signal/api/SignalDeviceSyncApi.js +276 -92
- package/dist/esm/signal/api/SignalDigestSyncApi.js +17 -8
- package/dist/esm/signal/api/SignalIdentitySyncApi.js +67 -37
- package/dist/esm/signal/api/SignalMissingPreKeysSyncApi.js +86 -67
- package/dist/esm/signal/api/SignalRotateKeyApi.js +4 -2
- package/dist/esm/signal/api/SignalSessionSyncApi.js +36 -34
- package/dist/esm/signal/api/result-map.js +10 -0
- package/dist/esm/signal/constants.js +0 -4
- package/dist/esm/signal/crypto/WaAdvSignature.js +13 -9
- package/dist/esm/signal/{store/sqlite.js → encoding.js} +93 -60
- package/dist/esm/signal/group/SenderKeyChain.js +28 -23
- package/dist/esm/signal/group/SenderKeyCodec.js +5 -6
- package/dist/esm/signal/group/SenderKeyManager.js +144 -115
- package/dist/esm/signal/index.js +2 -0
- package/dist/esm/signal/registration/keygen.js +6 -2
- package/dist/esm/signal/registration/utils.js +1 -0
- package/dist/esm/signal/session/SignalProtocol.js +164 -53
- package/dist/esm/signal/session/SignalRatchet.js +24 -15
- package/dist/esm/signal/session/SignalSession.js +14 -9
- package/dist/esm/signal/session/resolver.js +221 -0
- package/dist/esm/store/contracts/privacy-token.store.js +1 -0
- package/dist/esm/store/createStore.js +100 -188
- package/dist/esm/store/index.js +1 -10
- package/dist/esm/store/locks/appstate.lock.js +26 -0
- package/dist/esm/store/locks/auth.lock.js +15 -0
- package/dist/esm/store/locks/contact.lock.js +20 -0
- package/dist/esm/store/locks/device-list.lock.js +20 -0
- package/dist/esm/store/locks/message.lock.js +21 -0
- package/dist/esm/store/locks/participants.lock.js +20 -0
- package/dist/esm/store/locks/privacy-token.lock.js +18 -0
- package/dist/esm/store/locks/retry.lock.js +29 -0
- package/dist/esm/store/locks/sender-key.lock.js +52 -0
- package/dist/esm/store/locks/signal.lock.js +63 -0
- package/dist/esm/store/locks/thread.lock.js +21 -0
- package/dist/esm/store/noop.store.js +4 -7
- package/dist/esm/store/providers/memory/appstate.store.js +38 -16
- package/dist/esm/store/providers/memory/contact.store.js +5 -0
- package/dist/esm/store/providers/memory/device-list.store.js +12 -34
- package/dist/esm/store/providers/memory/message.store.js +11 -5
- package/dist/esm/store/providers/memory/participants.store.js +1 -8
- package/dist/esm/store/providers/memory/privacy-token.store.js +43 -0
- package/dist/esm/store/providers/memory/retry.store.js +77 -2
- package/dist/esm/store/providers/memory/sender-key.store.js +11 -8
- package/dist/esm/store/providers/memory/signal.store.js +47 -18
- package/dist/esm/store/providers/memory/thread.store.js +5 -0
- package/dist/esm/transport/WaComms.js +28 -24
- package/dist/esm/transport/WaWebSocket.js +115 -18
- package/dist/esm/transport/binary/constants.js +0 -30
- package/dist/esm/transport/binary/decoder.js +8 -8
- package/dist/esm/transport/binary/encoder.js +10 -9
- package/dist/esm/transport/binary/index.js +0 -1
- package/dist/esm/transport/index.js +1 -0
- package/dist/esm/transport/keepalive/WaKeepAlive.js +2 -8
- package/dist/esm/transport/node/WaNodeOrchestrator.js +25 -21
- package/dist/esm/transport/node/WaNodeTransport.js +0 -3
- package/dist/esm/transport/node/builders/{accountSync.js → account-sync.js} +16 -36
- package/dist/esm/transport/node/builders/business.js +129 -0
- package/dist/esm/transport/node/builders/global.js +370 -0
- package/dist/esm/transport/node/builders/index.js +7 -3
- package/dist/esm/transport/node/builders/message.js +63 -230
- package/dist/esm/transport/node/builders/pairing.js +2 -27
- package/dist/esm/transport/node/builders/privacy-token.js +41 -0
- package/dist/esm/transport/node/builders/privacy.js +48 -0
- package/dist/esm/transport/node/builders/profile.js +70 -0
- package/dist/esm/transport/node/builders/retry.js +10 -22
- package/dist/esm/transport/node/builders/usync.js +45 -0
- package/dist/esm/transport/node/helpers.js +125 -5
- package/dist/esm/transport/node/usync.js +5 -0
- package/dist/esm/transport/node/xml.js +35 -14
- package/dist/esm/transport/noise/WaClientPayload.js +10 -10
- package/dist/esm/transport/noise/WaFrameCodec.js +48 -33
- package/dist/esm/transport/noise/WaNoiseCert.js +4 -7
- package/dist/esm/transport/noise/WaNoiseSession.js +77 -29
- package/dist/esm/transport/noise/WaNoiseSocket.js +8 -4
- package/dist/esm/transport/proxy.js +27 -0
- package/dist/esm/transport/stream/parse.js +17 -48
- package/dist/esm/util/bytes.js +67 -45
- package/dist/esm/util/coercion.js +6 -14
- package/dist/esm/util/index.js +5 -0
- package/dist/esm/util/primitives.js +40 -14
- package/dist/index.js +7 -1
- package/dist/infra/log/ConsoleLogger.js +18 -17
- package/dist/infra/log/PinoLogger.js +15 -9
- package/dist/infra/log/types.js +12 -0
- package/dist/infra/perf/BackgroundQueue.js +482 -0
- package/dist/infra/perf/BoundedTaskQueue.js +16 -18
- package/dist/infra/perf/PromiseDedup.js +24 -0
- package/dist/infra/perf/SharedExclusiveGate.js +113 -0
- package/dist/infra/perf/StoreLock.js +81 -0
- package/dist/media/WaMediaCrypto.js +95 -15
- package/dist/media/WaMediaTransferClient.js +284 -91
- package/dist/media/conn.js +10 -6
- package/dist/media/constants.js +6 -2
- package/dist/message/WaMessageClient.js +31 -33
- package/dist/message/ack.js +6 -6
- package/dist/message/addon-crypto.js +65 -0
- package/dist/message/content.js +198 -9
- package/dist/message/icdc.js +81 -0
- package/dist/message/incoming.js +127 -120
- package/dist/message/index.js +2 -0
- package/dist/message/phash.js +3 -1
- package/dist/message/reporting-token.js +429 -0
- package/dist/message/use-case-secret.js +55 -0
- package/dist/protocol/appstate.js +28 -1
- package/dist/protocol/browser.js +10 -18
- package/dist/protocol/constants.js +26 -1
- package/dist/protocol/defaults.js +6 -0
- package/dist/protocol/index.js +23 -42
- package/dist/protocol/jid.js +140 -52
- package/dist/protocol/media.js +3 -3
- package/dist/protocol/message.js +62 -2
- package/dist/protocol/nodes.js +4 -0
- package/dist/protocol/notification.js +3 -1
- package/dist/protocol/privacy-token.js +20 -0
- package/dist/protocol/privacy.js +58 -0
- package/dist/protocol/stream.js +27 -2
- package/dist/protocol/usync.js +14 -0
- package/dist/retry/codec.js +220 -0
- package/dist/retry/constants.js +1 -1
- package/dist/retry/index.js +7 -5
- package/dist/retry/parse.js +88 -85
- package/dist/retry/replay.js +52 -49
- package/dist/retry/tracker.js +97 -0
- package/dist/signal/api/SignalDeviceSyncApi.js +273 -89
- package/dist/signal/api/SignalDigestSyncApi.js +17 -8
- package/dist/signal/api/SignalIdentitySyncApi.js +66 -36
- package/dist/signal/api/SignalMissingPreKeysSyncApi.js +82 -63
- package/dist/signal/api/SignalRotateKeyApi.js +4 -2
- package/dist/signal/api/SignalSessionSyncApi.js +36 -34
- package/dist/signal/api/result-map.js +13 -0
- package/dist/signal/constants.js +1 -5
- package/dist/signal/crypto/WaAdvSignature.js +11 -7
- package/dist/signal/{store/sqlite.js → encoding.js} +94 -61
- package/dist/signal/group/SenderKeyChain.js +27 -22
- package/dist/signal/group/SenderKeyCodec.js +5 -6
- package/dist/signal/group/SenderKeyManager.js +144 -115
- package/dist/signal/index.js +15 -1
- package/dist/signal/registration/keygen.js +6 -2
- package/dist/signal/registration/utils.js +1 -0
- package/dist/signal/session/SignalProtocol.js +164 -53
- package/dist/signal/session/SignalRatchet.js +24 -15
- package/dist/signal/session/SignalSession.js +14 -9
- package/dist/signal/session/resolver.js +224 -0
- package/dist/store/contracts/privacy-token.store.js +2 -0
- package/dist/store/createStore.js +100 -188
- package/dist/store/index.js +15 -33
- package/dist/store/locks/appstate.lock.js +29 -0
- package/dist/store/locks/auth.lock.js +18 -0
- package/dist/store/locks/contact.lock.js +23 -0
- package/dist/store/locks/device-list.lock.js +23 -0
- package/dist/store/locks/message.lock.js +24 -0
- package/dist/store/locks/participants.lock.js +23 -0
- package/dist/store/locks/privacy-token.lock.js +21 -0
- package/dist/store/locks/retry.lock.js +32 -0
- package/dist/store/locks/sender-key.lock.js +55 -0
- package/dist/store/locks/signal.lock.js +66 -0
- package/dist/store/locks/thread.lock.js +24 -0
- package/dist/store/noop.store.js +4 -7
- package/dist/store/providers/memory/appstate.store.js +36 -14
- package/dist/store/providers/memory/contact.store.js +5 -0
- package/dist/store/providers/memory/device-list.store.js +12 -34
- package/dist/store/providers/memory/message.store.js +11 -5
- package/dist/store/providers/memory/participants.store.js +1 -8
- package/dist/store/providers/memory/privacy-token.store.js +47 -0
- package/dist/store/providers/memory/retry.store.js +77 -2
- package/dist/store/providers/memory/sender-key.store.js +14 -11
- package/dist/store/providers/memory/signal.store.js +54 -25
- package/dist/store/providers/memory/thread.store.js +5 -0
- package/dist/transport/WaComms.js +30 -26
- package/dist/transport/WaWebSocket.js +148 -18
- package/dist/transport/binary/constants.js +1 -31
- package/dist/transport/binary/decoder.js +8 -8
- package/dist/transport/binary/encoder.js +10 -9
- package/dist/transport/binary/index.js +0 -4
- package/dist/transport/index.js +7 -1
- package/dist/transport/keepalive/WaKeepAlive.js +1 -7
- package/dist/transport/node/WaNodeOrchestrator.js +25 -21
- package/dist/transport/node/WaNodeTransport.js +0 -3
- package/dist/transport/node/builders/{accountSync.js → account-sync.js} +15 -35
- package/dist/transport/node/builders/business.js +137 -0
- package/dist/transport/node/builders/global.js +375 -0
- package/dist/transport/node/builders/index.js +29 -17
- package/dist/transport/node/builders/message.js +64 -236
- package/dist/transport/node/builders/pairing.js +2 -29
- package/dist/transport/node/builders/privacy-token.js +46 -0
- package/dist/transport/node/builders/privacy.js +55 -0
- package/dist/transport/node/builders/profile.js +78 -0
- package/dist/transport/node/builders/retry.js +9 -21
- package/dist/transport/node/builders/usync.js +49 -0
- package/dist/transport/node/helpers.js +131 -4
- package/dist/transport/node/usync.js +8 -0
- package/dist/transport/node/xml.js +35 -14
- package/dist/transport/noise/WaClientPayload.js +13 -13
- package/dist/transport/noise/WaFrameCodec.js +47 -32
- package/dist/transport/noise/WaNoiseCert.js +5 -8
- package/dist/transport/noise/WaNoiseSession.js +77 -29
- package/dist/transport/noise/WaNoiseSocket.js +8 -4
- package/dist/transport/proxy.js +34 -0
- package/dist/transport/stream/parse.js +20 -52
- package/dist/types/appstate/WaAppStateCrypto.d.ts +0 -1
- package/dist/types/appstate/WaAppStateSyncClient.d.ts +5 -2
- package/dist/types/appstate/constants.d.ts +1 -0
- package/dist/types/appstate/encoding.d.ts +7 -0
- package/dist/types/appstate/index.d.ts +3 -3
- package/dist/types/appstate/utils.d.ts +0 -3
- package/dist/types/auth/WaAuthClient.d.ts +10 -12
- package/dist/types/auth/flow/WaAuthCredentialsFlow.d.ts +1 -1
- package/dist/types/auth/index.d.ts +0 -4
- package/dist/types/auth/pairing/WaQrFlow.d.ts +1 -1
- package/dist/types/auth/types.d.ts +7 -9
- package/dist/types/client/WaClient.d.ts +42 -25
- package/dist/types/client/WaClientFactory.d.ts +33 -26
- package/dist/types/client/connection/WaConnectionManager.d.ts +66 -0
- package/dist/types/client/connection/WaKeyShareCoordinator.d.ts +14 -0
- package/dist/types/client/connection/WaReceiptQueue.d.ts +13 -0
- package/dist/types/client/coordinators/WaAppStateMutationCoordinator.d.ts +46 -0
- package/dist/types/client/coordinators/WaBusinessCoordinator.d.ts +57 -0
- package/dist/types/client/coordinators/WaIncomingNodeCoordinator.d.ts +3 -2
- package/dist/types/client/coordinators/WaMessageDispatchCoordinator.d.ts +29 -38
- package/dist/types/client/coordinators/WaPassiveTasksCoordinator.d.ts +4 -0
- package/dist/types/client/coordinators/WaPrivacyCoordinator.d.ts +26 -0
- package/dist/types/client/coordinators/WaProfileCoordinator.d.ts +36 -0
- package/dist/types/client/coordinators/WaRetryCoordinator.d.ts +8 -0
- package/dist/types/client/coordinators/WaStreamControlCoordinator.d.ts +3 -2
- package/dist/types/client/coordinators/WaTrustedContactTokenCoordinator.d.ts +45 -0
- package/dist/types/client/dirty.d.ts +1 -0
- package/dist/types/client/events/devices.d.ts +20 -0
- package/dist/types/client/events/group.d.ts +2 -1
- package/dist/types/client/events/identity.d.ts +9 -0
- package/dist/types/client/events/privacy-token.d.ts +7 -0
- package/dist/types/client/history-sync.d.ts +9 -6
- package/dist/types/client/incoming.d.ts +3 -1
- package/dist/types/client/index.d.ts +1 -1
- package/dist/types/client/mailbox.d.ts +3 -5
- package/dist/types/client/messages.d.ts +1 -2
- package/dist/types/client/messaging/fanout.d.ts +14 -0
- package/dist/types/client/messaging/key-protocol.d.ts +18 -0
- package/dist/types/client/messaging/participants.d.ts +13 -0
- package/dist/types/client/persistence/WriteBehindPersistence.d.ts +34 -0
- package/dist/types/client/tokens/cs-token.d.ts +10 -0
- package/dist/types/client/tokens/tc-token.d.ts +5 -0
- package/dist/types/client/types.d.ts +75 -4
- package/dist/types/crypto/core/hkdf.d.ts +0 -6
- package/dist/types/crypto/core/index.d.ts +2 -3
- package/dist/types/crypto/core/nonce.d.ts +2 -0
- package/dist/types/crypto/core/primitives.d.ts +0 -1
- package/dist/types/crypto/core/random.d.ts +2 -7
- package/dist/types/crypto/index.d.ts +0 -1
- package/dist/types/crypto/math/constants.d.ts +4 -2
- package/dist/types/crypto/math/fe.d.ts +30 -0
- package/dist/types/crypto/math/mod.d.ts +0 -2
- package/dist/types/crypto/math/types.d.ts +11 -4
- package/dist/types/index.d.ts +5 -3
- package/dist/types/infra/log/ConsoleLogger.d.ts +2 -1
- package/dist/types/infra/log/PinoLogger.d.ts +1 -1
- package/dist/types/infra/log/types.d.ts +1 -0
- package/dist/types/infra/perf/BackgroundQueue.d.ts +58 -0
- package/dist/types/infra/perf/BoundedTaskQueue.d.ts +1 -1
- package/dist/types/infra/perf/PromiseDedup.d.ts +4 -0
- package/dist/types/infra/perf/SharedExclusiveGate.d.ts +17 -0
- package/dist/types/infra/perf/StoreLock.d.ts +10 -0
- package/dist/types/media/WaMediaCrypto.d.ts +3 -2
- package/dist/types/media/WaMediaTransferClient.d.ts +16 -15
- package/dist/types/media/constants.d.ts +1 -1
- package/dist/types/media/index.d.ts +1 -1
- package/dist/types/media/types.d.ts +15 -2
- package/dist/types/message/addon-crypto.d.ts +25 -0
- package/dist/types/message/content.d.ts +8 -0
- package/dist/types/message/icdc.d.ts +13 -0
- package/dist/types/message/index.d.ts +2 -0
- package/dist/types/message/reporting-token.d.ts +18 -0
- package/dist/types/message/types.d.ts +45 -6
- package/dist/types/message/use-case-secret.d.ts +20 -0
- package/dist/types/protocol/appstate.d.ts +47 -0
- package/dist/types/protocol/constants.d.ts +8 -3
- package/dist/types/protocol/defaults.d.ts +6 -0
- package/dist/types/protocol/index.d.ts +2 -11
- package/dist/types/protocol/jid.d.ts +22 -5
- package/dist/types/protocol/message.d.ts +60 -0
- package/dist/types/protocol/nodes.d.ts +4 -0
- package/dist/types/protocol/notification.d.ts +2 -0
- package/dist/types/protocol/privacy-token.d.ts +17 -0
- package/dist/types/protocol/privacy.d.ts +75 -0
- package/dist/types/protocol/stream.d.ts +30 -0
- package/dist/types/protocol/usync.d.ts +11 -0
- package/dist/types/retry/codec.d.ts +3 -0
- package/dist/types/retry/index.d.ts +4 -3
- package/dist/types/retry/parse.d.ts +5 -2
- package/dist/types/retry/replay.d.ts +0 -4
- package/dist/types/retry/tracker.d.ts +20 -0
- package/dist/types/retry/types.d.ts +10 -4
- package/dist/types/signal/api/SignalDeviceSyncApi.d.ts +15 -2
- package/dist/types/signal/api/SignalDigestSyncApi.d.ts +6 -0
- package/dist/types/signal/api/SignalIdentitySyncApi.d.ts +2 -0
- package/dist/types/signal/api/SignalRotateKeyApi.d.ts +4 -5
- package/dist/types/signal/api/SignalSessionSyncApi.d.ts +8 -6
- package/dist/types/signal/api/result-map.d.ts +1 -0
- package/dist/types/signal/constants.d.ts +0 -3
- package/dist/types/signal/{store/sqlite.d.ts → encoding.d.ts} +3 -3
- package/dist/types/signal/group/SenderKeyCodec.d.ts +4 -6
- package/dist/types/signal/group/SenderKeyManager.d.ts +10 -5
- package/dist/types/signal/index.d.ts +3 -0
- package/dist/types/signal/session/SignalProtocol.d.ts +19 -4
- package/dist/types/signal/session/resolver.d.ts +22 -0
- package/dist/types/store/contracts/appstate.store.d.ts +4 -1
- package/dist/types/store/contracts/contact.store.d.ts +1 -0
- package/dist/types/store/contracts/device-list.store.d.ts +0 -3
- package/dist/types/store/contracts/message.store.d.ts +1 -0
- package/dist/types/store/contracts/participants.store.d.ts +0 -1
- package/dist/types/store/contracts/privacy-token.store.d.ts +16 -0
- package/dist/types/store/contracts/retry.store.d.ts +7 -0
- package/dist/types/store/contracts/sender-key.store.d.ts +0 -1
- package/dist/types/store/contracts/signal.store.d.ts +13 -0
- package/dist/types/store/contracts/thread.store.d.ts +1 -0
- package/dist/types/store/createStore.d.ts +1 -1
- package/dist/types/store/index.d.ts +5 -13
- package/dist/types/store/locks/appstate.lock.d.ts +3 -0
- package/dist/types/store/locks/auth.lock.d.ts +3 -0
- package/dist/types/store/locks/contact.lock.d.ts +3 -0
- package/dist/types/store/locks/device-list.lock.d.ts +2 -0
- package/dist/types/store/locks/message.lock.d.ts +3 -0
- package/dist/types/store/locks/participants.lock.d.ts +2 -0
- package/dist/types/store/locks/privacy-token.lock.d.ts +2 -0
- package/dist/types/store/locks/retry.lock.d.ts +2 -0
- package/dist/types/store/locks/sender-key.lock.d.ts +3 -0
- package/dist/types/store/locks/signal.lock.d.ts +3 -0
- package/dist/types/store/locks/thread.lock.d.ts +3 -0
- package/dist/types/store/providers/memory/appstate.store.d.ts +3 -1
- package/dist/types/store/providers/memory/contact.store.d.ts +1 -0
- package/dist/types/store/providers/memory/device-list.store.d.ts +0 -3
- package/dist/types/store/providers/memory/message.store.d.ts +1 -0
- package/dist/types/store/providers/memory/participants.store.d.ts +0 -1
- package/dist/types/store/providers/memory/privacy-token.store.d.ts +13 -0
- package/dist/types/store/providers/memory/retry.store.d.ts +8 -0
- package/dist/types/store/providers/memory/sender-key.store.d.ts +0 -1
- package/dist/types/store/providers/memory/signal.store.d.ts +8 -1
- package/dist/types/store/providers/memory/thread.store.d.ts +1 -0
- package/dist/types/store/types.d.ts +49 -58
- package/dist/types/transport/WaWebSocket.d.ts +3 -1
- package/dist/types/transport/binary/constants.d.ts +0 -30
- package/dist/types/transport/binary/index.d.ts +0 -1
- package/dist/types/transport/index.d.ts +2 -1
- package/dist/types/transport/keepalive/WaKeepAlive.d.ts +0 -1
- package/dist/types/transport/node/WaNodeOrchestrator.d.ts +3 -4
- package/dist/types/transport/node/WaNodeTransport.d.ts +0 -9
- package/dist/types/transport/node/builders/business.d.ts +29 -0
- package/dist/types/transport/node/builders/global.d.ts +102 -0
- package/dist/types/transport/node/builders/group.d.ts +4 -6
- package/dist/types/transport/node/builders/index.d.ts +7 -3
- package/dist/types/transport/node/builders/message.d.ts +20 -30
- package/dist/types/transport/node/builders/pairing.d.ts +0 -2
- package/dist/types/transport/node/builders/privacy-token.d.ts +9 -0
- package/dist/types/transport/node/builders/privacy.d.ts +7 -0
- package/dist/types/transport/node/builders/profile.d.ts +8 -0
- package/dist/types/transport/node/builders/retry.d.ts +2 -5
- package/dist/types/transport/node/builders/usync.d.ts +21 -0
- package/dist/types/transport/node/helpers.d.ts +13 -0
- package/dist/types/transport/node/usync.d.ts +2 -0
- package/dist/types/transport/noise/WaFrameCodec.d.ts +3 -0
- package/dist/types/transport/noise/WaNoiseSession.d.ts +4 -2
- package/dist/types/transport/noise/WaNoiseSocket.d.ts +4 -2
- package/dist/types/transport/proxy.d.ts +6 -0
- package/dist/types/transport/stream/parse.d.ts +0 -1
- package/dist/types/transport/types.d.ts +18 -1
- package/dist/types/util/bytes.d.ts +5 -0
- package/dist/types/util/index.d.ts +5 -0
- package/dist/types/util/primitives.d.ts +2 -0
- package/dist/util/bytes.js +72 -46
- package/dist/util/coercion.js +6 -14
- package/dist/util/index.js +23 -0
- package/dist/util/primitives.js +42 -14
- package/package.json +52 -9
- package/proto/index.js +1 -1
- package/dist/crypto/core/constants.js +0 -4
- package/dist/crypto/core/encoding.js +0 -29
- package/dist/esm/crypto/core/constants.js +0 -1
- package/dist/esm/crypto/core/encoding.js +0 -25
- package/dist/esm/retry/outbound.js +0 -83
- package/dist/esm/store/providers/sqlite/BaseSqliteStore.js +0 -37
- package/dist/esm/store/providers/sqlite/appstate.store.js +0 -169
- package/dist/esm/store/providers/sqlite/auth.store.js +0 -176
- package/dist/esm/store/providers/sqlite/connection.js +0 -240
- package/dist/esm/store/providers/sqlite/contact.store.js +0 -61
- package/dist/esm/store/providers/sqlite/device-list.store.js +0 -155
- package/dist/esm/store/providers/sqlite/message.store.js +0 -119
- package/dist/esm/store/providers/sqlite/migrations.js +0 -347
- package/dist/esm/store/providers/sqlite/participants.store.js +0 -85
- package/dist/esm/store/providers/sqlite/retry.store.js +0 -144
- package/dist/esm/store/providers/sqlite/sender-key.store.js +0 -203
- package/dist/esm/store/providers/sqlite/signal.store.js +0 -353
- package/dist/esm/store/providers/sqlite/thread.store.js +0 -72
- package/dist/esm/util/base64.js +0 -18
- package/dist/esm/util/signal-address.js +0 -5
- package/dist/retry/outbound.js +0 -88
- package/dist/store/providers/sqlite/BaseSqliteStore.js +0 -41
- package/dist/store/providers/sqlite/appstate.store.js +0 -173
- package/dist/store/providers/sqlite/auth.store.js +0 -180
- package/dist/store/providers/sqlite/connection.js +0 -276
- package/dist/store/providers/sqlite/contact.store.js +0 -65
- package/dist/store/providers/sqlite/device-list.store.js +0 -159
- package/dist/store/providers/sqlite/message.store.js +0 -123
- package/dist/store/providers/sqlite/migrations.js +0 -350
- package/dist/store/providers/sqlite/participants.store.js +0 -89
- package/dist/store/providers/sqlite/retry.store.js +0 -148
- package/dist/store/providers/sqlite/sender-key.store.js +0 -207
- package/dist/store/providers/sqlite/signal.store.js +0 -357
- package/dist/store/providers/sqlite/thread.store.js +0 -76
- package/dist/types/appstate/store/sqlite.d.ts +0 -21
- package/dist/types/crypto/core/constants.d.ts +0 -1
- package/dist/types/crypto/core/encoding.d.ts +0 -11
- package/dist/types/retry/outbound.d.ts +0 -4
- package/dist/types/store/providers/sqlite/BaseSqliteStore.d.ts +0 -12
- package/dist/types/store/providers/sqlite/appstate.store.d.ts +0 -15
- package/dist/types/store/providers/sqlite/auth.store.d.ts +0 -10
- package/dist/types/store/providers/sqlite/connection.d.ts +0 -10
- package/dist/types/store/providers/sqlite/contact.store.d.ts +0 -10
- package/dist/types/store/providers/sqlite/device-list.store.d.ts +0 -18
- package/dist/types/store/providers/sqlite/message.store.d.ts +0 -11
- package/dist/types/store/providers/sqlite/migrations.d.ts +0 -3
- package/dist/types/store/providers/sqlite/participants.store.d.ts +0 -13
- package/dist/types/store/providers/sqlite/retry.store.d.ts +0 -16
- package/dist/types/store/providers/sqlite/sender-key.store.d.ts +0 -25
- package/dist/types/store/providers/sqlite/signal.store.d.ts +0 -46
- package/dist/types/store/providers/sqlite/thread.store.d.ts +0 -11
- package/dist/types/util/base64.d.ts +0 -4
- package/dist/types/util/signal-address.d.ts +0 -2
- package/dist/util/base64.js +0 -24
- package/dist/util/signal-address.js +0 -8
- /package/dist/types/transport/node/builders/{accountSync.d.ts → account-sync.d.ts} +0 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.SenderKeyMemoryStore = void 0;
|
|
4
|
+
const jid_1 = require("../../../protocol/jid");
|
|
4
5
|
const coercion_1 = require("../../../util/coercion");
|
|
5
6
|
const collections_1 = require("../../../util/collections");
|
|
6
|
-
const signal_address_1 = require("../../../util/signal-address");
|
|
7
7
|
const DEFAULT_SENDER_KEY_STORE_LIMITS = Object.freeze({
|
|
8
8
|
senderKeys: 8192,
|
|
9
9
|
senderDistributions: 8192
|
|
@@ -48,12 +48,13 @@ class SenderKeyMemoryStore {
|
|
|
48
48
|
const record = this.senderKeys.get(this.makeKey(groupId, sender));
|
|
49
49
|
return record ?? null;
|
|
50
50
|
}
|
|
51
|
-
async getDeviceSenderKeyDistribution(groupId, sender) {
|
|
52
|
-
const record = this.senderDistributions.get(this.makeKey(groupId, sender));
|
|
53
|
-
return record ?? null;
|
|
54
|
-
}
|
|
55
51
|
async getDeviceSenderKeyDistributions(groupId, senders) {
|
|
56
|
-
|
|
52
|
+
const records = new Array(senders.length);
|
|
53
|
+
for (let index = 0; index < senders.length; index += 1) {
|
|
54
|
+
records[index] =
|
|
55
|
+
this.senderDistributions.get(this.makeKey(groupId, senders[index])) ?? null;
|
|
56
|
+
}
|
|
57
|
+
return records;
|
|
57
58
|
}
|
|
58
59
|
async deleteDeviceSenderKey(target, groupId) {
|
|
59
60
|
let deleted = 0;
|
|
@@ -63,8 +64,10 @@ class SenderKeyMemoryStore {
|
|
|
63
64
|
}
|
|
64
65
|
async markForgetSenderKey(groupId, participants) {
|
|
65
66
|
let deleted = 0;
|
|
66
|
-
for (
|
|
67
|
-
|
|
67
|
+
for (let index = 0; index < participants.length; index += 1) {
|
|
68
|
+
const participant = participants[index];
|
|
69
|
+
deleted += this.deleteMatching(this.senderKeys, participant, groupId);
|
|
70
|
+
deleted += this.deleteMatching(this.senderDistributions, participant, groupId);
|
|
68
71
|
}
|
|
69
72
|
return deleted;
|
|
70
73
|
}
|
|
@@ -74,10 +77,10 @@ class SenderKeyMemoryStore {
|
|
|
74
77
|
}
|
|
75
78
|
deleteMatching(map, target, groupId) {
|
|
76
79
|
let deleted = 0;
|
|
77
|
-
const targetAddressKey = (0,
|
|
80
|
+
const targetAddressKey = (0, jid_1.signalAddressKey)(target);
|
|
78
81
|
for (const [key, record] of map.entries()) {
|
|
79
82
|
const sameGroup = groupId ? record.groupId === groupId : true;
|
|
80
|
-
const sameAddress = (0,
|
|
83
|
+
const sameAddress = (0, jid_1.signalAddressKey)(record.sender) === targetAddressKey;
|
|
81
84
|
if (sameGroup && sameAddress) {
|
|
82
85
|
map.delete(key);
|
|
83
86
|
deleted += 1;
|
|
@@ -86,7 +89,7 @@ class SenderKeyMemoryStore {
|
|
|
86
89
|
return deleted;
|
|
87
90
|
}
|
|
88
91
|
makeKey(groupId, sender) {
|
|
89
|
-
return `${groupId}|${(0,
|
|
92
|
+
return `${groupId}|${(0, jid_1.signalAddressKey)(sender)}`;
|
|
90
93
|
}
|
|
91
94
|
}
|
|
92
95
|
exports.SenderKeyMemoryStore = SenderKeyMemoryStore;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.WaSignalMemoryStore = void 0;
|
|
4
|
+
const jid_1 = require("../../../protocol/jid");
|
|
4
5
|
const coercion_1 = require("../../../util/coercion");
|
|
5
6
|
const collections_1 = require("../../../util/collections");
|
|
6
|
-
const signal_address_1 = require("../../../util/signal-address");
|
|
7
7
|
const DEFAULT_SIGNAL_STORE_LIMITS = Object.freeze({
|
|
8
8
|
preKeys: 4096,
|
|
9
9
|
sessions: 8192,
|
|
@@ -61,12 +61,15 @@ class WaSignalMemoryStore {
|
|
|
61
61
|
throw new Error(`invalid prekey count: ${count}`);
|
|
62
62
|
}
|
|
63
63
|
const available = [];
|
|
64
|
-
const
|
|
65
|
-
for (
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
continue;
|
|
64
|
+
const availableKeyIds = [];
|
|
65
|
+
for (const keyId of this.preKeys.keys()) {
|
|
66
|
+
if (!this.uploadedPreKeys.has(keyId)) {
|
|
67
|
+
availableKeyIds.push(keyId);
|
|
69
68
|
}
|
|
69
|
+
}
|
|
70
|
+
availableKeyIds.sort((left, right) => left - right);
|
|
71
|
+
for (let index = 0; index < availableKeyIds.length; index += 1) {
|
|
72
|
+
const keyId = availableKeyIds[index];
|
|
70
73
|
const record = this.preKeys.get(keyId);
|
|
71
74
|
if (!record) {
|
|
72
75
|
continue;
|
|
@@ -89,7 +92,11 @@ class WaSignalMemoryStore {
|
|
|
89
92
|
return this.preKeys.get(keyId) ?? null;
|
|
90
93
|
}
|
|
91
94
|
async getPreKeysById(keyIds) {
|
|
92
|
-
|
|
95
|
+
const result = new Array(keyIds.length);
|
|
96
|
+
for (let i = 0; i < keyIds.length; i += 1) {
|
|
97
|
+
result[i] = this.preKeys.get(keyIds[i]) ?? null;
|
|
98
|
+
}
|
|
99
|
+
return result;
|
|
93
100
|
}
|
|
94
101
|
async consumePreKeyById(keyId) {
|
|
95
102
|
const record = this.preKeys.get(keyId) ?? null;
|
|
@@ -120,30 +127,62 @@ class WaSignalMemoryStore {
|
|
|
120
127
|
async getServerHasPreKeys() {
|
|
121
128
|
return this.serverHasPreKeys;
|
|
122
129
|
}
|
|
130
|
+
async getSignalMeta() {
|
|
131
|
+
return {
|
|
132
|
+
serverHasPreKeys: this.serverHasPreKeys,
|
|
133
|
+
signedPreKeyRotationTs: this.signedPreKeyRotationTs,
|
|
134
|
+
registrationInfo: this.registrationInfo,
|
|
135
|
+
signedPreKey: this.signedPreKey
|
|
136
|
+
};
|
|
137
|
+
}
|
|
123
138
|
async hasSession(address) {
|
|
124
|
-
return this.signalSessions.has((0,
|
|
139
|
+
return this.signalSessions.has((0, jid_1.signalAddressKey)(address));
|
|
125
140
|
}
|
|
126
141
|
async hasSessions(addresses) {
|
|
127
|
-
|
|
142
|
+
const result = new Array(addresses.length);
|
|
143
|
+
for (let i = 0; i < addresses.length; i += 1) {
|
|
144
|
+
result[i] = this.signalSessions.has((0, jid_1.signalAddressKey)(addresses[i]));
|
|
145
|
+
}
|
|
146
|
+
return result;
|
|
128
147
|
}
|
|
129
148
|
async getSession(address) {
|
|
130
|
-
return this.signalSessions.get((0,
|
|
149
|
+
return this.signalSessions.get((0, jid_1.signalAddressKey)(address)) ?? null;
|
|
150
|
+
}
|
|
151
|
+
async getSessionsBatch(addresses) {
|
|
152
|
+
const result = new Array(addresses.length);
|
|
153
|
+
for (let i = 0; i < addresses.length; i += 1) {
|
|
154
|
+
result[i] = this.signalSessions.get((0, jid_1.signalAddressKey)(addresses[i])) ?? null;
|
|
155
|
+
}
|
|
156
|
+
return result;
|
|
131
157
|
}
|
|
132
158
|
async setSession(address, session) {
|
|
133
|
-
(0, collections_1.setBoundedMapEntry)(this.signalSessions, (0,
|
|
159
|
+
(0, collections_1.setBoundedMapEntry)(this.signalSessions, (0, jid_1.signalAddressKey)(address), session, this.maxSessions);
|
|
160
|
+
}
|
|
161
|
+
async setSessionsBatch(entries) {
|
|
162
|
+
for (let index = 0; index < entries.length; index += 1) {
|
|
163
|
+
const entry = entries[index];
|
|
164
|
+
(0, collections_1.setBoundedMapEntry)(this.signalSessions, (0, jid_1.signalAddressKey)(entry.address), entry.session, this.maxSessions);
|
|
165
|
+
}
|
|
134
166
|
}
|
|
135
167
|
async deleteSession(address) {
|
|
136
|
-
this.signalSessions.delete((0,
|
|
168
|
+
this.signalSessions.delete((0, jid_1.signalAddressKey)(address));
|
|
137
169
|
}
|
|
138
170
|
async getRemoteIdentity(address) {
|
|
139
|
-
return this.remoteIdentities.get((0,
|
|
171
|
+
return this.remoteIdentities.get((0, jid_1.signalAddressKey)(address)) ?? null;
|
|
172
|
+
}
|
|
173
|
+
async getRemoteIdentities(addresses) {
|
|
174
|
+
const result = new Array(addresses.length);
|
|
175
|
+
for (let i = 0; i < addresses.length; i += 1) {
|
|
176
|
+
result[i] = this.remoteIdentities.get((0, jid_1.signalAddressKey)(addresses[i])) ?? null;
|
|
177
|
+
}
|
|
178
|
+
return result;
|
|
140
179
|
}
|
|
141
180
|
async setRemoteIdentity(address, identityKey) {
|
|
142
|
-
(0, collections_1.setBoundedMapEntry)(this.remoteIdentities, (0,
|
|
181
|
+
(0, collections_1.setBoundedMapEntry)(this.remoteIdentities, (0, jid_1.signalAddressKey)(address), identityKey, this.maxRemoteIdentities);
|
|
143
182
|
}
|
|
144
183
|
async setRemoteIdentities(entries) {
|
|
145
184
|
for (const entry of entries) {
|
|
146
|
-
(0, collections_1.setBoundedMapEntry)(this.remoteIdentities, (0,
|
|
185
|
+
(0, collections_1.setBoundedMapEntry)(this.remoteIdentities, (0, jid_1.signalAddressKey)(entry.address), entry.identityKey, this.maxRemoteIdentities);
|
|
147
186
|
}
|
|
148
187
|
}
|
|
149
188
|
async clear() {
|
|
@@ -158,17 +197,7 @@ class WaSignalMemoryStore {
|
|
|
158
197
|
this.nextPreKeyId = 1;
|
|
159
198
|
}
|
|
160
199
|
addUploadedPreKey(keyId) {
|
|
161
|
-
if (this.uploadedPreKeys.has(keyId)) {
|
|
162
|
-
this.uploadedPreKeys.delete(keyId);
|
|
163
|
-
}
|
|
164
200
|
this.uploadedPreKeys.add(keyId);
|
|
165
|
-
while (this.uploadedPreKeys.size > this.maxPreKeys) {
|
|
166
|
-
const oldest = this.uploadedPreKeys.values().next().value;
|
|
167
|
-
if (oldest === undefined) {
|
|
168
|
-
break;
|
|
169
|
-
}
|
|
170
|
-
this.uploadedPreKeys.delete(oldest);
|
|
171
|
-
}
|
|
172
201
|
}
|
|
173
202
|
}
|
|
174
203
|
exports.WaSignalMemoryStore = WaSignalMemoryStore;
|
|
@@ -14,6 +14,11 @@ class WaThreadMemoryStore {
|
|
|
14
14
|
async upsert(record) {
|
|
15
15
|
(0, collections_1.setBoundedMapEntry)(this.threads, record.jid, record, this.maxThreads);
|
|
16
16
|
}
|
|
17
|
+
async upsertBatch(records) {
|
|
18
|
+
for (const record of records) {
|
|
19
|
+
(0, collections_1.setBoundedMapEntry)(this.threads, record.jid, record, this.maxThreads);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
17
22
|
async getByJid(jid) {
|
|
18
23
|
return this.threads.get(jid) ?? null;
|
|
19
24
|
}
|
|
@@ -6,8 +6,8 @@ const BoundedTaskQueue_1 = require("../infra/perf/BoundedTaskQueue");
|
|
|
6
6
|
const constants_1 = require("../protocol/constants");
|
|
7
7
|
const WaNoiseSession_1 = require("./noise/WaNoiseSession");
|
|
8
8
|
const WaWebSocket_1 = require("./WaWebSocket");
|
|
9
|
-
const base64_1 = require("../util/base64");
|
|
10
9
|
const bytes_1 = require("../util/bytes");
|
|
10
|
+
const bytes_2 = require("../util/bytes");
|
|
11
11
|
const primitives_1 = require("../util/primitives");
|
|
12
12
|
const WA_FRAME_HANDLER_QUEUE_MAX_SIZE = 4096;
|
|
13
13
|
const WA_FRAME_HANDLER_MAX_CONCURRENCY = 8;
|
|
@@ -30,6 +30,8 @@ class WaComms {
|
|
|
30
30
|
url: this.config.url,
|
|
31
31
|
urls: this.config.urls,
|
|
32
32
|
protocols: this.config.protocols,
|
|
33
|
+
dispatcher: this.config.dispatcher,
|
|
34
|
+
agent: this.config.agent,
|
|
33
35
|
timeoutIntervalMs: this.config.timeoutIntervalMs
|
|
34
36
|
}, logger);
|
|
35
37
|
this.socket.setHandlers({
|
|
@@ -80,7 +82,7 @@ class WaComms {
|
|
|
80
82
|
if (!routingInfo || routingInfo.byteLength === 0) {
|
|
81
83
|
return config;
|
|
82
84
|
}
|
|
83
|
-
const edValue = (0,
|
|
85
|
+
const edValue = (0, bytes_1.bytesToBase64UrlSafe)(routingInfo);
|
|
84
86
|
const appendEd = (url) => {
|
|
85
87
|
try {
|
|
86
88
|
const parsed = new URL(url);
|
|
@@ -147,9 +149,7 @@ class WaComms {
|
|
|
147
149
|
startHandlingRequests() {
|
|
148
150
|
this.handlingRequests = true;
|
|
149
151
|
this.logger.debug('comms request handling enabled');
|
|
150
|
-
this.frameProcessingQueue = this.frameProcessingQueue
|
|
151
|
-
.catch(() => undefined)
|
|
152
|
-
.then(async () => this.flushPendingFrames());
|
|
152
|
+
this.frameProcessingQueue = this.frameProcessingQueue.then(() => this.flushPendingFrames(), () => this.flushPendingFrames());
|
|
153
153
|
}
|
|
154
154
|
async stopComms() {
|
|
155
155
|
this.logger.info('comms stop requested');
|
|
@@ -275,9 +275,7 @@ class WaComms {
|
|
|
275
275
|
});
|
|
276
276
|
}
|
|
277
277
|
onSocketMessage(payload) {
|
|
278
|
-
this.frameProcessingQueue = this.frameProcessingQueue
|
|
279
|
-
.catch(() => undefined)
|
|
280
|
-
.then(async () => this.processSocketPayload(payload));
|
|
278
|
+
this.frameProcessingQueue = this.frameProcessingQueue.then(() => this.processSocketPayload(payload), () => this.processSocketPayload(payload));
|
|
281
279
|
}
|
|
282
280
|
async processSocketPayload(payload) {
|
|
283
281
|
if (!this.noiseSession) {
|
|
@@ -342,7 +340,7 @@ class WaComms {
|
|
|
342
340
|
this.noiseSession = null;
|
|
343
341
|
throw error;
|
|
344
342
|
}
|
|
345
|
-
const buffered = await session.pushWireChunk(
|
|
343
|
+
const buffered = await session.pushWireChunk(bytes_2.EMPTY_BYTES);
|
|
346
344
|
this.routeDecodedFrames(buffered);
|
|
347
345
|
this.resumeHandshakeFailures = 0;
|
|
348
346
|
this.lastServerStaticKey = session.getServerStaticKey();
|
|
@@ -404,7 +402,9 @@ class WaComms {
|
|
|
404
402
|
this.schedulePendingFramesOverflowClose();
|
|
405
403
|
return false;
|
|
406
404
|
}
|
|
407
|
-
|
|
405
|
+
for (let i = 0; i < frames.length; i += 1) {
|
|
406
|
+
this.pendingFrames.push(frames[i]);
|
|
407
|
+
}
|
|
408
408
|
this.pendingFramesByteLength = nextBytes;
|
|
409
409
|
return true;
|
|
410
410
|
}
|
|
@@ -426,20 +426,19 @@ class WaComms {
|
|
|
426
426
|
}
|
|
427
427
|
scheduleDecodedFrame(frame) {
|
|
428
428
|
void this.frameHandlerQueue
|
|
429
|
-
.enqueue(
|
|
429
|
+
.enqueue(() => this.onDecodedFrame(frame))
|
|
430
430
|
.catch((error) => {
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
431
|
+
if (error instanceof BoundedTaskQueue_1.BoundedTaskQueueFullError) {
|
|
432
|
+
this.logger.warn('frame handler queue is full, resuming socket to preserve bounds', {
|
|
433
|
+
pending: this.frameHandlerQueue.pending(),
|
|
434
|
+
inFlight: this.frameHandlerQueue.inFlight()
|
|
435
|
+
});
|
|
436
|
+
void this.closeSocketAndResume();
|
|
436
437
|
return;
|
|
437
438
|
}
|
|
438
|
-
this.logger.
|
|
439
|
-
|
|
440
|
-
inFlight: this.frameHandlerQueue.inFlight()
|
|
439
|
+
this.logger.error('failed to enqueue decoded frame handler', {
|
|
440
|
+
message: (0, primitives_1.toError)(error).message
|
|
441
441
|
});
|
|
442
|
-
void this.onDecodedFrame(frame);
|
|
443
442
|
});
|
|
444
443
|
}
|
|
445
444
|
scheduleReconnect() {
|
|
@@ -463,12 +462,16 @@ class WaComms {
|
|
|
463
462
|
this.reconnectTimer = null;
|
|
464
463
|
}
|
|
465
464
|
removeWaiter(reject) {
|
|
466
|
-
|
|
467
|
-
|
|
465
|
+
for (let index = 0; index < this.waiters.length; index += 1) {
|
|
466
|
+
const waiter = this.waiters[index];
|
|
467
|
+
if (waiter.reject !== reject) {
|
|
468
|
+
continue;
|
|
469
|
+
}
|
|
470
|
+
clearTimeout(waiter.timer);
|
|
471
|
+
this.waiters[index] = this.waiters[this.waiters.length - 1];
|
|
472
|
+
this.waiters.pop();
|
|
468
473
|
return;
|
|
469
474
|
}
|
|
470
|
-
const [waiter] = this.waiters.splice(index, 1);
|
|
471
|
-
clearTimeout(waiter.timer);
|
|
472
475
|
}
|
|
473
476
|
withStickyRoutingCookie(headers) {
|
|
474
477
|
const out = headers ? { ...headers } : {};
|
|
@@ -521,11 +524,12 @@ class WaComms {
|
|
|
521
524
|
}
|
|
522
525
|
}
|
|
523
526
|
drainWaiters(drain) {
|
|
524
|
-
|
|
525
|
-
|
|
527
|
+
for (let index = this.waiters.length - 1; index >= 0; index -= 1) {
|
|
528
|
+
const waiter = this.waiters[index];
|
|
526
529
|
clearTimeout(waiter.timer);
|
|
527
530
|
drain(waiter);
|
|
528
531
|
}
|
|
532
|
+
this.waiters.length = 0;
|
|
529
533
|
}
|
|
530
534
|
}
|
|
531
535
|
exports.WaComms = WaComms;
|
|
@@ -1,10 +1,82 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
36
|
exports.WaWebSocket = void 0;
|
|
4
37
|
const ConsoleLogger_1 = require("../infra/log/ConsoleLogger");
|
|
5
38
|
const constants_1 = require("../protocol/constants");
|
|
6
39
|
const bytes_1 = require("../util/bytes");
|
|
7
40
|
const primitives_1 = require("../util/primitives");
|
|
41
|
+
const WS_OPTIONAL_MODULE = 'ws';
|
|
42
|
+
function asOptionalNodeWsConstructor(loaded) {
|
|
43
|
+
if (loaded && typeof loaded === 'object') {
|
|
44
|
+
const direct = loaded.WebSocket;
|
|
45
|
+
if (typeof direct === 'function') {
|
|
46
|
+
return direct;
|
|
47
|
+
}
|
|
48
|
+
const fallback = loaded.default;
|
|
49
|
+
if (typeof fallback === 'function') {
|
|
50
|
+
return fallback;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
if (typeof loaded === 'function') {
|
|
54
|
+
return loaded;
|
|
55
|
+
}
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
async function loadOptionalNodeWsConstructor() {
|
|
59
|
+
try {
|
|
60
|
+
const loaded = await Promise.resolve(`${WS_OPTIONAL_MODULE}`).then(s => __importStar(require(s)));
|
|
61
|
+
const constructor = asOptionalNodeWsConstructor(loaded);
|
|
62
|
+
if (constructor) {
|
|
63
|
+
return constructor;
|
|
64
|
+
}
|
|
65
|
+
throw new Error('invalid ws module export');
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
const normalized = (0, primitives_1.toError)(error);
|
|
69
|
+
const code = normalized.code;
|
|
70
|
+
const message = normalized.message ?? '';
|
|
71
|
+
const isModuleNotFound = (code === 'ERR_MODULE_NOT_FOUND' || code === 'MODULE_NOT_FOUND') &&
|
|
72
|
+
(message.includes(`'${WS_OPTIONAL_MODULE}'`) ||
|
|
73
|
+
message.includes(`"${WS_OPTIONAL_MODULE}"`));
|
|
74
|
+
if (isModuleNotFound) {
|
|
75
|
+
throw new Error('optional dependency "ws" is not installed. Install with: npm i ws');
|
|
76
|
+
}
|
|
77
|
+
throw normalized;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
8
80
|
function resolveWebSocketConstructor() {
|
|
9
81
|
const ctor = globalThis
|
|
10
82
|
.WebSocket;
|
|
@@ -16,12 +88,13 @@ function resolveWebSocketConstructor() {
|
|
|
16
88
|
function resolveSocketUrls(config) {
|
|
17
89
|
const preferredUrls = config.urls;
|
|
18
90
|
if (preferredUrls && preferredUrls.length > 0) {
|
|
19
|
-
|
|
91
|
+
const unique = [];
|
|
92
|
+
for (const url of preferredUrls)
|
|
93
|
+
if (unique.indexOf(url) === -1)
|
|
94
|
+
unique.push(url);
|
|
95
|
+
return Object.freeze(unique);
|
|
20
96
|
}
|
|
21
|
-
|
|
22
|
-
return Object.freeze([config.url]);
|
|
23
|
-
}
|
|
24
|
-
return constants_1.WA_DEFAULTS.CHAT_SOCKET_URLS;
|
|
97
|
+
return config.url ? Object.freeze([config.url]) : constants_1.WA_DEFAULTS.CHAT_SOCKET_URLS;
|
|
25
98
|
}
|
|
26
99
|
function resolveSocketRuntime() {
|
|
27
100
|
const maybeNodeProcess = globalThis.process;
|
|
@@ -44,6 +117,7 @@ class WaWebSocket {
|
|
|
44
117
|
this.handlers = {};
|
|
45
118
|
this.socket = null;
|
|
46
119
|
this.closeWaiter = null;
|
|
120
|
+
this.nodeWsCtorPromise = null;
|
|
47
121
|
}
|
|
48
122
|
setHandlers(handlers) {
|
|
49
123
|
this.handlers = handlers;
|
|
@@ -55,12 +129,6 @@ class WaWebSocket {
|
|
|
55
129
|
return (this.socket?.readyState === constants_1.WA_READY_STATES.CONNECTING ||
|
|
56
130
|
this.connectingSockets.size > 0);
|
|
57
131
|
}
|
|
58
|
-
getReadyState() {
|
|
59
|
-
if (this.connectingSockets.size > 0) {
|
|
60
|
-
return constants_1.WA_READY_STATES.CONNECTING;
|
|
61
|
-
}
|
|
62
|
-
return this.socket?.readyState ?? constants_1.WA_READY_STATES.CLOSED;
|
|
63
|
-
}
|
|
64
132
|
async open() {
|
|
65
133
|
if (this.isOpen()) {
|
|
66
134
|
this.logger.trace('socket open skipped: already open');
|
|
@@ -147,7 +215,7 @@ class WaWebSocket {
|
|
|
147
215
|
socket.send(data);
|
|
148
216
|
}
|
|
149
217
|
async openSingle(url) {
|
|
150
|
-
const pending = this.createPendingSocket(url);
|
|
218
|
+
const pending = await this.createPendingSocket(url);
|
|
151
219
|
return new Promise((resolve, reject) => {
|
|
152
220
|
this.bindPendingSocket(pending, {
|
|
153
221
|
onOpen: () => {
|
|
@@ -169,7 +237,20 @@ class WaWebSocket {
|
|
|
169
237
|
});
|
|
170
238
|
}
|
|
171
239
|
async openConcurrently(urls) {
|
|
172
|
-
const
|
|
240
|
+
const setupResults = await Promise.allSettled(urls.map((url) => this.createPendingSocket(url)));
|
|
241
|
+
const pendingSockets = [];
|
|
242
|
+
let setupError = null;
|
|
243
|
+
for (const result of setupResults) {
|
|
244
|
+
if (result.status === 'fulfilled') {
|
|
245
|
+
pendingSockets.push(result.value);
|
|
246
|
+
continue;
|
|
247
|
+
}
|
|
248
|
+
setupError = setupError ?? (0, primitives_1.toError)(result.reason);
|
|
249
|
+
}
|
|
250
|
+
if (setupError) {
|
|
251
|
+
this.releasePendingSocketsAfterSetupFailure(pendingSockets);
|
|
252
|
+
throw setupError;
|
|
253
|
+
}
|
|
173
254
|
return new Promise((resolve, reject) => {
|
|
174
255
|
let done = false;
|
|
175
256
|
let failedCount = 0;
|
|
@@ -213,6 +294,14 @@ class WaWebSocket {
|
|
|
213
294
|
}
|
|
214
295
|
});
|
|
215
296
|
}
|
|
297
|
+
releasePendingSocketsAfterSetupFailure(entries) {
|
|
298
|
+
for (const entry of entries) {
|
|
299
|
+
if (!this.settlePendingSocket(entry)) {
|
|
300
|
+
continue;
|
|
301
|
+
}
|
|
302
|
+
this.closeSocketSafe(entry.socket, 1000, 'connect_setup_failed');
|
|
303
|
+
}
|
|
304
|
+
}
|
|
216
305
|
bindRuntimeHandlers(socket) {
|
|
217
306
|
socket.onmessage = (event) => {
|
|
218
307
|
void this.handleMessage(event.data);
|
|
@@ -260,8 +349,8 @@ class WaWebSocket {
|
|
|
260
349
|
}
|
|
261
350
|
return null;
|
|
262
351
|
}
|
|
263
|
-
createPendingSocket(url) {
|
|
264
|
-
const socket = this.createRawSocket(url);
|
|
352
|
+
async createPendingSocket(url) {
|
|
353
|
+
const socket = await this.createRawSocket(url);
|
|
265
354
|
socket.binaryType = 'arraybuffer';
|
|
266
355
|
this.connectingSockets.add(socket);
|
|
267
356
|
return {
|
|
@@ -354,12 +443,53 @@ class WaWebSocket {
|
|
|
354
443
|
// no-op
|
|
355
444
|
}
|
|
356
445
|
}
|
|
357
|
-
createRawSocket(url) {
|
|
446
|
+
async createRawSocket(url) {
|
|
358
447
|
const headers = this.config.headers;
|
|
359
|
-
|
|
360
|
-
|
|
448
|
+
const dispatcher = this.config.dispatcher;
|
|
449
|
+
const agent = this.config.agent;
|
|
450
|
+
let hasHeaders = false;
|
|
451
|
+
if (headers) {
|
|
452
|
+
for (const key in headers) {
|
|
453
|
+
if (Object.prototype.hasOwnProperty.call(headers, key)) {
|
|
454
|
+
hasHeaders = true;
|
|
455
|
+
break;
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
if (this.socketRuntime === 'node' && agent) {
|
|
460
|
+
const nodeWsCtor = await this.resolveNodeWsConstructor();
|
|
461
|
+
return new nodeWsCtor(url, this.config.protocols, {
|
|
462
|
+
headers,
|
|
463
|
+
agent
|
|
464
|
+
});
|
|
465
|
+
}
|
|
466
|
+
if (this.socketRuntime === 'node' && (hasHeaders || dispatcher || agent)) {
|
|
467
|
+
const globalWebSocketCtor = globalThis.WebSocket;
|
|
468
|
+
if (globalWebSocketCtor && this.webSocketCtor === globalWebSocketCtor) {
|
|
469
|
+
const init = {
|
|
470
|
+
protocols: this.config.protocols,
|
|
471
|
+
headers,
|
|
472
|
+
dispatcher,
|
|
473
|
+
agent
|
|
474
|
+
};
|
|
475
|
+
return new this.webSocketCtor(url, init);
|
|
476
|
+
}
|
|
477
|
+
return new this.webSocketCtor(url, this.config.protocols, {
|
|
478
|
+
headers,
|
|
479
|
+
dispatcher,
|
|
480
|
+
agent
|
|
481
|
+
});
|
|
361
482
|
}
|
|
362
483
|
return new this.webSocketCtor(url, this.config.protocols);
|
|
363
484
|
}
|
|
485
|
+
async resolveNodeWsConstructor() {
|
|
486
|
+
if (!this.nodeWsCtorPromise) {
|
|
487
|
+
this.nodeWsCtorPromise = loadOptionalNodeWsConstructor().catch((error) => {
|
|
488
|
+
this.nodeWsCtorPromise = null;
|
|
489
|
+
throw error;
|
|
490
|
+
});
|
|
491
|
+
}
|
|
492
|
+
return this.nodeWsCtorPromise;
|
|
493
|
+
}
|
|
364
494
|
}
|
|
365
495
|
exports.WaWebSocket = WaWebSocket;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.DICTIONARY_TOKEN_MAPS = exports.SINGLE_BYTE_TOKEN_MAP = exports.HEX_ALPHABET = exports.NIBBLE_ALPHABET = exports.NIBBLE_8 = exports.BINARY_32 = exports.BINARY_20 = exports.BINARY_8 = exports.HEX_8 = exports.JID_PAIR = exports.LIST_16 = exports.LIST_8 = exports.JID_U = exports.JID_FB = exports.JID_INTEROP = exports.DICTIONARY_3 = exports.DICTIONARY_0 = exports.STREAM_END = exports.LIST_EMPTY = void 0;
|
|
4
4
|
const tokens_1 = require("../binary/tokens");
|
|
5
5
|
exports.LIST_EMPTY = 0;
|
|
6
6
|
exports.STREAM_END = 2;
|
|
@@ -67,33 +67,3 @@ exports.DICTIONARY_TOKEN_MAPS = tokens_1.DICTIONARIES.map((dictionary) => {
|
|
|
67
67
|
}
|
|
68
68
|
return map;
|
|
69
69
|
});
|
|
70
|
-
exports.WAP_ENCODE_CONSTANTS = Object.freeze({
|
|
71
|
-
LIST_EMPTY: exports.LIST_EMPTY,
|
|
72
|
-
LIST_8: exports.LIST_8,
|
|
73
|
-
LIST_16: exports.LIST_16,
|
|
74
|
-
JID_PAIR: exports.JID_PAIR,
|
|
75
|
-
HEX_8: exports.HEX_8,
|
|
76
|
-
BINARY_8: exports.BINARY_8,
|
|
77
|
-
BINARY_20: exports.BINARY_20,
|
|
78
|
-
BINARY_32: exports.BINARY_32,
|
|
79
|
-
NIBBLE_8: exports.NIBBLE_8,
|
|
80
|
-
DICTIONARY_0: exports.DICTIONARY_0,
|
|
81
|
-
DICTIONARY_3: exports.DICTIONARY_3
|
|
82
|
-
});
|
|
83
|
-
exports.WAP_DECODE_CONSTANTS = Object.freeze({
|
|
84
|
-
LIST_EMPTY: exports.LIST_EMPTY,
|
|
85
|
-
LIST_8: exports.LIST_8,
|
|
86
|
-
LIST_16: exports.LIST_16,
|
|
87
|
-
JID_PAIR: exports.JID_PAIR,
|
|
88
|
-
JID_FB: exports.JID_FB,
|
|
89
|
-
JID_INTEROP: exports.JID_INTEROP,
|
|
90
|
-
JID_U: exports.JID_U,
|
|
91
|
-
HEX_8: exports.HEX_8,
|
|
92
|
-
BINARY_8: exports.BINARY_8,
|
|
93
|
-
BINARY_20: exports.BINARY_20,
|
|
94
|
-
BINARY_32: exports.BINARY_32,
|
|
95
|
-
NIBBLE_8: exports.NIBBLE_8,
|
|
96
|
-
DICTIONARY_0: exports.DICTIONARY_0,
|
|
97
|
-
DICTIONARY_3: exports.DICTIONARY_3,
|
|
98
|
-
STREAM_END: exports.STREAM_END
|
|
99
|
-
});
|
|
@@ -63,22 +63,22 @@ function parsePacked(reader, alphabet) {
|
|
|
63
63
|
const odd = (lengthByte & 0x80) !== 0;
|
|
64
64
|
const byteCount = lengthByte & 0x7f;
|
|
65
65
|
const outLength = byteCount * 2 - (odd ? 1 : 0);
|
|
66
|
-
const
|
|
66
|
+
const buf = new Uint8Array(outLength);
|
|
67
67
|
let outIndex = 0;
|
|
68
68
|
for (let i = 0; i < byteCount; i += 1) {
|
|
69
69
|
const packed = reader.readUint8();
|
|
70
70
|
const high = (packed >>> 4) & 0x0f;
|
|
71
71
|
const low = packed & 0x0f;
|
|
72
72
|
if (outIndex < outLength) {
|
|
73
|
-
|
|
73
|
+
buf[outIndex] = alphabet[high].charCodeAt(0);
|
|
74
74
|
outIndex += 1;
|
|
75
75
|
}
|
|
76
76
|
if (outIndex < outLength) {
|
|
77
|
-
|
|
77
|
+
buf[outIndex] = alphabet[low].charCodeAt(0);
|
|
78
78
|
outIndex += 1;
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
|
-
return
|
|
81
|
+
return bytes_1.TEXT_DECODER.decode(buf);
|
|
82
82
|
}
|
|
83
83
|
function readBinary(reader, token) {
|
|
84
84
|
if (token === constants_2.BINARY_8) {
|
|
@@ -242,10 +242,10 @@ function decodeNodeInternal(reader) {
|
|
|
242
242
|
}
|
|
243
243
|
}
|
|
244
244
|
}
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
return
|
|
245
|
+
const node = content === null || content === undefined
|
|
246
|
+
? { tag: tagValue, attrs }
|
|
247
|
+
: { tag: tagValue, attrs, content };
|
|
248
|
+
return node;
|
|
249
249
|
}
|
|
250
250
|
function decodeBinaryNode(data) {
|
|
251
251
|
const reader = new ByteReader(data);
|