zapo-js 0.1.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 +235 -0
- package/dist/appstate/WaAppStateCrypto.js +202 -0
- package/dist/appstate/WaAppStateSyncClient.js +808 -0
- package/dist/appstate/WaAppStateSyncResponseParser.js +71 -0
- package/dist/appstate/constants.js +23 -0
- package/dist/appstate/index.js +28 -0
- package/dist/appstate/store/sqlite.js +55 -0
- package/dist/appstate/types.js +2 -0
- package/dist/appstate/utils.js +84 -0
- package/dist/auth/WaAuthClient.js +266 -0
- package/dist/auth/flow/WaAuthCredentialsFlow.js +123 -0
- package/dist/auth/index.js +27 -0
- package/dist/auth/pairing/WaPairingCodeCrypto.js +75 -0
- package/dist/auth/pairing/WaPairingFlow.js +328 -0
- package/dist/auth/pairing/WaQrFlow.js +86 -0
- package/dist/auth/pairing/constants.js +5 -0
- package/dist/auth/types.js +2 -0
- package/dist/client/WaClient.js +749 -0
- package/dist/client/WaClientFactory.js +381 -0
- package/dist/client/coordinators/WaGroupCoordinator.js +191 -0
- package/dist/client/coordinators/WaIncomingNodeCoordinator.js +315 -0
- package/dist/client/coordinators/WaMessageDispatchCoordinator.js +1061 -0
- package/dist/client/coordinators/WaPassiveTasksCoordinator.js +200 -0
- package/dist/client/coordinators/WaRetryCoordinator.js +494 -0
- package/dist/client/coordinators/WaStreamControlCoordinator.js +123 -0
- package/dist/client/dirty.js +254 -0
- package/dist/client/events/chat.js +226 -0
- package/dist/client/events/group.js +410 -0
- package/dist/client/history-sync.js +122 -0
- package/dist/client/incoming.js +236 -0
- package/dist/client/index.js +5 -0
- package/dist/client/mailbox.js +49 -0
- package/dist/client/messages.js +152 -0
- package/dist/client/types.js +2 -0
- package/dist/crypto/core/constants.js +4 -0
- package/dist/crypto/core/encoding.js +29 -0
- package/dist/crypto/core/hkdf.js +26 -0
- package/dist/crypto/core/index.js +43 -0
- package/dist/crypto/core/keys.js +73 -0
- package/dist/crypto/core/nonce.js +18 -0
- package/dist/crypto/core/primitives.js +121 -0
- package/dist/crypto/core/random.js +32 -0
- package/dist/crypto/curves/Ed25519.js +42 -0
- package/dist/crypto/curves/X25519.js +64 -0
- package/dist/crypto/curves/constants.js +6 -0
- package/dist/crypto/curves/types.js +9 -0
- package/dist/crypto/index.js +22 -0
- package/dist/crypto/math/constants.js +44 -0
- package/dist/crypto/math/edwards.js +64 -0
- package/dist/crypto/math/le.js +20 -0
- package/dist/crypto/math/mod.js +38 -0
- package/dist/crypto/math/types.js +2 -0
- package/dist/esm/appstate/WaAppStateCrypto.js +198 -0
- package/dist/esm/appstate/WaAppStateSyncClient.js +803 -0
- package/dist/esm/appstate/WaAppStateSyncResponseParser.js +67 -0
- package/dist/esm/appstate/constants.js +20 -0
- package/dist/esm/appstate/index.js +6 -0
- package/dist/esm/appstate/store/sqlite.js +49 -0
- package/dist/esm/appstate/types.js +1 -0
- package/dist/esm/appstate/utils.js +75 -0
- package/dist/esm/auth/WaAuthClient.js +262 -0
- package/dist/esm/auth/flow/WaAuthCredentialsFlow.js +118 -0
- package/dist/esm/auth/index.js +5 -0
- package/dist/esm/auth/pairing/WaPairingCodeCrypto.js +71 -0
- package/dist/esm/auth/pairing/WaPairingFlow.js +324 -0
- package/dist/esm/auth/pairing/WaQrFlow.js +82 -0
- package/dist/esm/auth/pairing/constants.js +2 -0
- package/dist/esm/auth/types.js +1 -0
- package/dist/esm/client/WaClient.js +745 -0
- package/dist/esm/client/WaClientFactory.js +377 -0
- package/dist/esm/client/coordinators/WaGroupCoordinator.js +188 -0
- package/dist/esm/client/coordinators/WaIncomingNodeCoordinator.js +311 -0
- package/dist/esm/client/coordinators/WaMessageDispatchCoordinator.js +1057 -0
- package/dist/esm/client/coordinators/WaPassiveTasksCoordinator.js +196 -0
- package/dist/esm/client/coordinators/WaRetryCoordinator.js +490 -0
- package/dist/esm/client/coordinators/WaStreamControlCoordinator.js +120 -0
- package/dist/esm/client/dirty.js +250 -0
- package/dist/esm/client/events/chat.js +223 -0
- package/dist/esm/client/events/group.js +407 -0
- package/dist/esm/client/history-sync.js +119 -0
- package/dist/esm/client/incoming.js +227 -0
- package/dist/esm/client/index.js +1 -0
- package/dist/esm/client/mailbox.js +46 -0
- package/dist/esm/client/messages.js +148 -0
- package/dist/esm/client/types.js +1 -0
- package/dist/esm/crypto/core/constants.js +1 -0
- package/dist/esm/crypto/core/encoding.js +25 -0
- package/dist/esm/crypto/core/hkdf.js +22 -0
- package/dist/esm/crypto/core/index.js +11 -0
- package/dist/esm/crypto/core/keys.js +66 -0
- package/dist/esm/crypto/core/nonce.js +15 -0
- package/dist/esm/crypto/core/primitives.js +102 -0
- package/dist/esm/crypto/core/random.js +28 -0
- package/dist/esm/crypto/curves/Ed25519.js +38 -0
- package/dist/esm/crypto/curves/X25519.js +58 -0
- package/dist/esm/crypto/curves/constants.js +3 -0
- package/dist/esm/crypto/curves/types.js +6 -0
- package/dist/esm/crypto/index.js +3 -0
- package/dist/esm/crypto/math/constants.js +41 -0
- package/dist/esm/crypto/math/edwards.js +60 -0
- package/dist/esm/crypto/math/le.js +16 -0
- package/dist/esm/crypto/math/mod.js +31 -0
- package/dist/esm/crypto/math/types.js +1 -0
- package/dist/esm/index.js +6 -0
- package/dist/esm/infra/log/ConsoleLogger.js +40 -0
- package/dist/esm/infra/log/PinoLogger.js +73 -0
- package/dist/esm/infra/log/types.js +1 -0
- package/dist/esm/infra/perf/BoundedTaskQueue.js +62 -0
- package/dist/esm/media/WaMediaCrypto.js +224 -0
- package/dist/esm/media/WaMediaTransferClient.js +361 -0
- package/dist/esm/media/conn.js +33 -0
- package/dist/esm/media/constants.js +18 -0
- package/dist/esm/media/index.js +3 -0
- package/dist/esm/media/types.js +1 -0
- package/dist/esm/message/WaMessageClient.js +210 -0
- package/dist/esm/message/ack.js +46 -0
- package/dist/esm/message/content.js +20 -0
- package/dist/esm/message/device-sent.js +49 -0
- package/dist/esm/message/incoming.js +318 -0
- package/dist/esm/message/index.js +2 -0
- package/dist/esm/message/padding.js +20 -0
- package/dist/esm/message/phash.js +25 -0
- package/dist/esm/message/types.js +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/proto.js +3 -0
- package/dist/esm/protocol/appstate.js +34 -0
- package/dist/esm/protocol/auth.js +12 -0
- package/dist/esm/protocol/browser.js +41 -0
- package/dist/esm/protocol/constants.js +11 -0
- package/dist/esm/protocol/defaults.js +27 -0
- package/dist/esm/protocol/dirty.js +26 -0
- package/dist/esm/protocol/group.js +5 -0
- package/dist/esm/protocol/index.js +11 -0
- package/dist/esm/protocol/jid.js +94 -0
- package/dist/esm/protocol/media.js +20 -0
- package/dist/esm/protocol/message.js +16 -0
- package/dist/esm/protocol/nodes.js +83 -0
- package/dist/esm/protocol/notification.js +50 -0
- package/dist/esm/protocol/stream.js +60 -0
- package/dist/esm/retry/constants.js +20 -0
- package/dist/esm/retry/index.js +5 -0
- package/dist/esm/retry/outbound.js +83 -0
- package/dist/esm/retry/parse.js +130 -0
- package/dist/esm/retry/reason.js +50 -0
- package/dist/esm/retry/replay.js +177 -0
- package/dist/esm/retry/types.js +1 -0
- package/dist/esm/signal/api/SignalDeviceSyncApi.js +185 -0
- package/dist/esm/signal/api/SignalDigestSyncApi.js +179 -0
- package/dist/esm/signal/api/SignalIdentitySyncApi.js +111 -0
- package/dist/esm/signal/api/SignalMissingPreKeysSyncApi.js +141 -0
- package/dist/esm/signal/api/SignalRotateKeyApi.js +59 -0
- package/dist/esm/signal/api/SignalSessionSyncApi.js +187 -0
- package/dist/esm/signal/api/codec.js +23 -0
- package/dist/esm/signal/api/constants.js +9 -0
- package/dist/esm/signal/api/prekeys.js +9 -0
- package/dist/esm/signal/constants.js +16 -0
- package/dist/esm/signal/crypto/WaAdvSignature.js +60 -0
- package/dist/esm/signal/crypto/constants.js +8 -0
- package/dist/esm/signal/group/SenderKeyChain.js +97 -0
- package/dist/esm/signal/group/SenderKeyCodec.js +46 -0
- package/dist/esm/signal/group/SenderKeyManager.js +176 -0
- package/dist/esm/signal/index.js +11 -0
- package/dist/esm/signal/registration/keygen.js +31 -0
- package/dist/esm/signal/registration/utils.js +16 -0
- package/dist/esm/signal/session/SignalProtocol.js +122 -0
- package/dist/esm/signal/session/SignalRatchet.js +260 -0
- package/dist/esm/signal/session/SignalSerializer.js +63 -0
- package/dist/esm/signal/session/SignalSession.js +153 -0
- package/dist/esm/signal/store/sqlite.js +310 -0
- package/dist/esm/signal/types.js +1 -0
- package/dist/esm/store/contracts/appstate.store.js +1 -0
- package/dist/esm/store/contracts/auth.store.js +1 -0
- package/dist/esm/store/contracts/contact.store.js +1 -0
- package/dist/esm/store/contracts/device-list.store.js +1 -0
- package/dist/esm/store/contracts/message.store.js +1 -0
- package/dist/esm/store/contracts/participants.store.js +1 -0
- package/dist/esm/store/contracts/retry.store.js +1 -0
- package/dist/esm/store/contracts/sender-key.store.js +1 -0
- package/dist/esm/store/contracts/signal.store.js +1 -0
- package/dist/esm/store/contracts/thread.store.js +1 -0
- package/dist/esm/store/createStore.js +278 -0
- package/dist/esm/store/index.js +20 -0
- package/dist/esm/store/noop.store.js +43 -0
- package/dist/esm/store/providers/memory/appstate.store.js +101 -0
- package/dist/esm/store/providers/memory/contact.store.js +23 -0
- package/dist/esm/store/providers/memory/device-list.store.js +86 -0
- package/dist/esm/store/providers/memory/message.store.js +40 -0
- package/dist/esm/store/providers/memory/participants.store.js +61 -0
- package/dist/esm/store/providers/memory/retry.store.js +71 -0
- package/dist/esm/store/providers/memory/sender-key.store.js +88 -0
- package/dist/esm/store/providers/memory/signal.store.js +170 -0
- package/dist/esm/store/providers/memory/thread.store.js +34 -0
- package/dist/esm/store/providers/sqlite/BaseSqliteStore.js +37 -0
- package/dist/esm/store/providers/sqlite/appstate.store.js +169 -0
- package/dist/esm/store/providers/sqlite/auth.store.js +176 -0
- package/dist/esm/store/providers/sqlite/connection.js +240 -0
- package/dist/esm/store/providers/sqlite/contact.store.js +61 -0
- package/dist/esm/store/providers/sqlite/device-list.store.js +155 -0
- package/dist/esm/store/providers/sqlite/message.store.js +119 -0
- package/dist/esm/store/providers/sqlite/migrations.js +347 -0
- package/dist/esm/store/providers/sqlite/participants.store.js +85 -0
- package/dist/esm/store/providers/sqlite/retry.store.js +144 -0
- package/dist/esm/store/providers/sqlite/sender-key.store.js +203 -0
- package/dist/esm/store/providers/sqlite/signal.store.js +353 -0
- package/dist/esm/store/providers/sqlite/thread.store.js +72 -0
- package/dist/esm/store/types.js +1 -0
- package/dist/esm/transport/WaComms.js +527 -0
- package/dist/esm/transport/WaWebSocket.js +361 -0
- package/dist/esm/transport/binary/constants.js +96 -0
- package/dist/esm/transport/binary/decoder.js +275 -0
- package/dist/esm/transport/binary/encoder.js +210 -0
- package/dist/esm/transport/binary/index.js +4 -0
- package/dist/esm/transport/binary/tokens.js +1280 -0
- package/dist/esm/transport/index.js +6 -0
- package/dist/esm/transport/keepalive/WaKeepAlive.js +141 -0
- package/dist/esm/transport/node/WaNodeOrchestrator.js +143 -0
- package/dist/esm/transport/node/WaNodeTransport.js +64 -0
- package/dist/esm/transport/node/builders/accountSync.js +101 -0
- package/dist/esm/transport/node/builders/group.js +47 -0
- package/dist/esm/transport/node/builders/index.js +7 -0
- package/dist/esm/transport/node/builders/media.js +10 -0
- package/dist/esm/transport/node/builders/message.js +317 -0
- package/dist/esm/transport/node/builders/pairing.js +130 -0
- package/dist/esm/transport/node/builders/prekeys.js +102 -0
- package/dist/esm/transport/node/builders/retry.js +116 -0
- package/dist/esm/transport/node/helpers.js +37 -0
- package/dist/esm/transport/node/query.js +53 -0
- package/dist/esm/transport/node/xml.js +39 -0
- package/dist/esm/transport/noise/WaClientPayload.js +162 -0
- package/dist/esm/transport/noise/WaFrameCodec.js +121 -0
- package/dist/esm/transport/noise/WaNoiseCert.js +74 -0
- package/dist/esm/transport/noise/WaNoiseHandshake.js +57 -0
- package/dist/esm/transport/noise/WaNoiseSession.js +322 -0
- package/dist/esm/transport/noise/WaNoiseSocket.js +17 -0
- package/dist/esm/transport/noise/constants.js +8 -0
- package/dist/esm/transport/noise/types.js +1 -0
- package/dist/esm/transport/stream/parse.js +91 -0
- package/dist/esm/transport/types.js +1 -0
- package/dist/esm/util/async.js +5 -0
- package/dist/esm/util/base64.js +18 -0
- package/dist/esm/util/bytes.js +275 -0
- package/dist/esm/util/coercion.js +56 -0
- package/dist/esm/util/collections.js +27 -0
- package/dist/esm/util/primitives.js +32 -0
- package/dist/esm/util/runtime.js +15 -0
- package/dist/esm/util/signal-address.js +5 -0
- package/dist/index.js +52 -0
- package/dist/infra/log/ConsoleLogger.js +44 -0
- package/dist/infra/log/PinoLogger.js +111 -0
- package/dist/infra/log/types.js +2 -0
- package/dist/infra/perf/BoundedTaskQueue.js +67 -0
- package/dist/media/WaMediaCrypto.js +228 -0
- package/dist/media/WaMediaTransferClient.js +365 -0
- package/dist/media/conn.js +36 -0
- package/dist/media/constants.js +21 -0
- package/dist/media/index.js +9 -0
- package/dist/media/types.js +2 -0
- package/dist/message/WaMessageClient.js +214 -0
- package/dist/message/ack.js +52 -0
- package/dist/message/content.js +24 -0
- package/dist/message/device-sent.js +53 -0
- package/dist/message/incoming.js +321 -0
- package/dist/message/index.js +20 -0
- package/dist/message/padding.js +24 -0
- package/dist/message/phash.js +28 -0
- package/dist/message/types.js +2 -0
- package/dist/proto.js +5 -0
- package/dist/protocol/appstate.js +37 -0
- package/dist/protocol/auth.js +15 -0
- package/dist/protocol/browser.js +45 -0
- package/dist/protocol/constants.js +46 -0
- package/dist/protocol/defaults.js +30 -0
- package/dist/protocol/dirty.js +29 -0
- package/dist/protocol/group.js +8 -0
- package/dist/protocol/index.js +53 -0
- package/dist/protocol/jid.js +107 -0
- package/dist/protocol/media.js +24 -0
- package/dist/protocol/message.js +19 -0
- package/dist/protocol/nodes.js +86 -0
- package/dist/protocol/notification.js +53 -0
- package/dist/protocol/stream.js +63 -0
- package/dist/retry/constants.js +23 -0
- package/dist/retry/index.js +19 -0
- package/dist/retry/outbound.js +88 -0
- package/dist/retry/parse.js +133 -0
- package/dist/retry/reason.js +53 -0
- package/dist/retry/replay.js +181 -0
- package/dist/retry/types.js +2 -0
- package/dist/signal/api/SignalDeviceSyncApi.js +189 -0
- package/dist/signal/api/SignalDigestSyncApi.js +183 -0
- package/dist/signal/api/SignalIdentitySyncApi.js +115 -0
- package/dist/signal/api/SignalMissingPreKeysSyncApi.js +145 -0
- package/dist/signal/api/SignalRotateKeyApi.js +63 -0
- package/dist/signal/api/SignalSessionSyncApi.js +191 -0
- package/dist/signal/api/codec.js +27 -0
- package/dist/signal/api/constants.js +12 -0
- package/dist/signal/api/prekeys.js +16 -0
- package/dist/signal/constants.js +19 -0
- package/dist/signal/crypto/WaAdvSignature.js +72 -0
- package/dist/signal/crypto/constants.js +11 -0
- package/dist/signal/group/SenderKeyChain.js +101 -0
- package/dist/signal/group/SenderKeyCodec.js +50 -0
- package/dist/signal/group/SenderKeyManager.js +180 -0
- package/dist/signal/index.js +29 -0
- package/dist/signal/registration/keygen.js +37 -0
- package/dist/signal/registration/utils.js +19 -0
- package/dist/signal/session/SignalProtocol.js +126 -0
- package/dist/signal/session/SignalRatchet.js +268 -0
- package/dist/signal/session/SignalSerializer.js +69 -0
- package/dist/signal/session/SignalSession.js +165 -0
- package/dist/signal/store/sqlite.js +324 -0
- package/dist/signal/types.js +2 -0
- package/dist/store/contracts/appstate.store.js +2 -0
- package/dist/store/contracts/auth.store.js +2 -0
- package/dist/store/contracts/contact.store.js +2 -0
- package/dist/store/contracts/device-list.store.js +2 -0
- package/dist/store/contracts/message.store.js +2 -0
- package/dist/store/contracts/participants.store.js +2 -0
- package/dist/store/contracts/retry.store.js +2 -0
- package/dist/store/contracts/sender-key.store.js +2 -0
- package/dist/store/contracts/signal.store.js +2 -0
- package/dist/store/contracts/thread.store.js +2 -0
- package/dist/store/createStore.js +281 -0
- package/dist/store/index.js +43 -0
- package/dist/store/noop.store.js +46 -0
- package/dist/store/providers/memory/appstate.store.js +105 -0
- package/dist/store/providers/memory/contact.store.js +27 -0
- package/dist/store/providers/memory/device-list.store.js +90 -0
- package/dist/store/providers/memory/message.store.js +44 -0
- package/dist/store/providers/memory/participants.store.js +65 -0
- package/dist/store/providers/memory/retry.store.js +75 -0
- package/dist/store/providers/memory/sender-key.store.js +92 -0
- package/dist/store/providers/memory/signal.store.js +174 -0
- package/dist/store/providers/memory/thread.store.js +38 -0
- package/dist/store/providers/sqlite/BaseSqliteStore.js +41 -0
- package/dist/store/providers/sqlite/appstate.store.js +173 -0
- package/dist/store/providers/sqlite/auth.store.js +180 -0
- package/dist/store/providers/sqlite/connection.js +276 -0
- package/dist/store/providers/sqlite/contact.store.js +65 -0
- package/dist/store/providers/sqlite/device-list.store.js +159 -0
- package/dist/store/providers/sqlite/message.store.js +123 -0
- package/dist/store/providers/sqlite/migrations.js +350 -0
- package/dist/store/providers/sqlite/participants.store.js +89 -0
- package/dist/store/providers/sqlite/retry.store.js +148 -0
- package/dist/store/providers/sqlite/sender-key.store.js +207 -0
- package/dist/store/providers/sqlite/signal.store.js +357 -0
- package/dist/store/providers/sqlite/thread.store.js +76 -0
- package/dist/store/types.js +2 -0
- package/dist/transport/WaComms.js +531 -0
- package/dist/transport/WaWebSocket.js +365 -0
- package/dist/transport/binary/constants.js +99 -0
- package/dist/transport/binary/decoder.js +279 -0
- package/dist/transport/binary/encoder.js +214 -0
- package/dist/transport/binary/index.js +23 -0
- package/dist/transport/binary/tokens.js +1283 -0
- package/dist/transport/index.js +18 -0
- package/dist/transport/keepalive/WaKeepAlive.js +145 -0
- package/dist/transport/node/WaNodeOrchestrator.js +147 -0
- package/dist/transport/node/WaNodeTransport.js +68 -0
- package/dist/transport/node/builders/accountSync.js +110 -0
- package/dist/transport/node/builders/group.js +52 -0
- package/dist/transport/node/builders/index.js +39 -0
- package/dist/transport/node/builders/media.js +13 -0
- package/dist/transport/node/builders/message.js +328 -0
- package/dist/transport/node/builders/pairing.js +137 -0
- package/dist/transport/node/builders/prekeys.js +107 -0
- package/dist/transport/node/builders/retry.js +119 -0
- package/dist/transport/node/helpers.js +46 -0
- package/dist/transport/node/query.js +59 -0
- package/dist/transport/node/xml.js +42 -0
- package/dist/transport/noise/WaClientPayload.js +166 -0
- package/dist/transport/noise/WaFrameCodec.js +125 -0
- package/dist/transport/noise/WaNoiseCert.js +77 -0
- package/dist/transport/noise/WaNoiseHandshake.js +61 -0
- package/dist/transport/noise/WaNoiseSession.js +326 -0
- package/dist/transport/noise/WaNoiseSocket.js +21 -0
- package/dist/transport/noise/constants.js +11 -0
- package/dist/transport/noise/types.js +2 -0
- package/dist/transport/stream/parse.js +97 -0
- package/dist/transport/types.js +2 -0
- package/dist/types/appstate/WaAppStateCrypto.d.ts +59 -0
- package/dist/types/appstate/WaAppStateSyncClient.d.ts +63 -0
- package/dist/types/appstate/WaAppStateSyncResponseParser.d.ts +12 -0
- package/dist/types/appstate/constants.d.ts +14 -0
- package/dist/types/appstate/index.d.ts +7 -0
- package/dist/types/appstate/store/sqlite.d.ts +21 -0
- package/dist/types/appstate/types.d.ts +66 -0
- package/dist/types/appstate/utils.d.ts +10 -0
- package/dist/types/auth/WaAuthClient.d.ts +61 -0
- package/dist/types/auth/flow/WaAuthCredentialsFlow.d.ts +14 -0
- package/dist/types/auth/index.d.ts +6 -0
- package/dist/types/auth/pairing/WaPairingCodeCrypto.d.ts +17 -0
- package/dist/types/auth/pairing/WaPairingFlow.d.ts +48 -0
- package/dist/types/auth/pairing/WaQrFlow.d.ts +23 -0
- package/dist/types/auth/pairing/constants.d.ts +2 -0
- package/dist/types/auth/types.d.ts +48 -0
- package/dist/types/client/WaClient.d.ts +97 -0
- package/dist/types/client/WaClientFactory.d.ts +83 -0
- package/dist/types/client/coordinators/WaGroupCoordinator.d.ts +48 -0
- package/dist/types/client/coordinators/WaIncomingNodeCoordinator.d.ts +60 -0
- package/dist/types/client/coordinators/WaMessageDispatchCoordinator.d.ts +90 -0
- package/dist/types/client/coordinators/WaPassiveTasksCoordinator.d.ts +43 -0
- package/dist/types/client/coordinators/WaRetryCoordinator.d.ts +61 -0
- package/dist/types/client/coordinators/WaStreamControlCoordinator.d.ts +17 -0
- package/dist/types/client/dirty.d.ts +17 -0
- package/dist/types/client/events/chat.d.ts +3 -0
- package/dist/types/client/events/group.d.ts +7 -0
- package/dist/types/client/history-sync.d.ts +17 -0
- package/dist/types/client/incoming.d.ts +35 -0
- package/dist/types/client/index.d.ts +2 -0
- package/dist/types/client/mailbox.d.ts +12 -0
- package/dist/types/client/messages.d.ts +17 -0
- package/dist/types/client/types.d.ts +235 -0
- package/dist/types/crypto/core/constants.d.ts +1 -0
- package/dist/types/crypto/core/encoding.d.ts +11 -0
- package/dist/types/crypto/core/hkdf.d.ts +8 -0
- package/dist/types/crypto/core/index.d.ts +11 -0
- package/dist/types/crypto/core/keys.d.ts +20 -0
- package/dist/types/crypto/core/nonce.d.ts +5 -0
- package/dist/types/crypto/core/primitives.d.ts +25 -0
- package/dist/types/crypto/core/random.d.ts +8 -0
- package/dist/types/crypto/curves/Ed25519.d.ts +7 -0
- package/dist/types/crypto/curves/X25519.d.ts +8 -0
- package/dist/types/crypto/curves/constants.d.ts +2 -0
- package/dist/types/crypto/curves/types.d.ts +10 -0
- package/dist/types/crypto/index.d.ts +3 -0
- package/dist/types/crypto/math/constants.d.ts +7 -0
- package/dist/types/crypto/math/edwards.d.ts +3 -0
- package/dist/types/crypto/math/le.d.ts +2 -0
- package/dist/types/crypto/math/mod.d.ts +5 -0
- package/dist/types/crypto/math/types.d.ts +6 -0
- package/dist/types/index.d.ts +10 -0
- package/dist/types/infra/log/ConsoleLogger.d.ts +11 -0
- package/dist/types/infra/log/PinoLogger.d.ts +30 -0
- package/dist/types/infra/log/types.d.ts +9 -0
- package/dist/types/infra/perf/BoundedTaskQueue.d.ts +19 -0
- package/dist/types/media/WaMediaCrypto.d.ts +12 -0
- package/dist/types/media/WaMediaTransferClient.d.ts +81 -0
- package/dist/types/media/conn.d.ts +3 -0
- package/dist/types/media/constants.d.ts +10 -0
- package/dist/types/media/index.d.ts +4 -0
- package/dist/types/media/types.d.ts +56 -0
- package/dist/types/message/WaMessageClient.d.ts +29 -0
- package/dist/types/message/ack.d.ts +5 -0
- package/dist/types/message/content.d.ts +4 -0
- package/dist/types/message/device-sent.d.ts +3 -0
- package/dist/types/message/incoming.d.ts +18 -0
- package/dist/types/message/index.d.ts +2 -0
- package/dist/types/message/padding.d.ts +2 -0
- package/dist/types/message/phash.d.ts +1 -0
- package/dist/types/message/types.d.ts +58 -0
- package/dist/types/proto.d.ts +2 -0
- package/dist/types/protocol/appstate.d.ts +34 -0
- package/dist/types/protocol/auth.d.ts +12 -0
- package/dist/types/protocol/browser.d.ts +22 -0
- package/dist/types/protocol/constants.d.ts +11 -0
- package/dist/types/protocol/defaults.d.ts +26 -0
- package/dist/types/protocol/dirty.d.ts +15 -0
- package/dist/types/protocol/group.d.ts +6 -0
- package/dist/types/protocol/index.d.ts +11 -0
- package/dist/types/protocol/jid.d.ts +19 -0
- package/dist/types/protocol/media.d.ts +15 -0
- package/dist/types/protocol/message.d.ts +16 -0
- package/dist/types/protocol/nodes.d.ts +83 -0
- package/dist/types/protocol/notification.d.ts +50 -0
- package/dist/types/protocol/stream.d.ts +60 -0
- package/dist/types/retry/constants.d.ts +21 -0
- package/dist/types/retry/index.d.ts +7 -0
- package/dist/types/retry/outbound.d.ts +4 -0
- package/dist/types/retry/parse.d.ts +3 -0
- package/dist/types/retry/reason.d.ts +2 -0
- package/dist/types/retry/replay.d.ts +30 -0
- package/dist/types/retry/types.d.ts +70 -0
- package/dist/types/signal/api/SignalDeviceSyncApi.d.ts +31 -0
- package/dist/types/signal/api/SignalDigestSyncApi.d.ts +27 -0
- package/dist/types/signal/api/SignalIdentitySyncApi.d.ts +26 -0
- package/dist/types/signal/api/SignalMissingPreKeysSyncApi.d.ts +39 -0
- package/dist/types/signal/api/SignalRotateKeyApi.d.ts +22 -0
- package/dist/types/signal/api/SignalSessionSyncApi.d.ts +38 -0
- package/dist/types/signal/api/codec.d.ts +3 -0
- package/dist/types/signal/api/constants.d.ts +9 -0
- package/dist/types/signal/api/prekeys.d.ts +6 -0
- package/dist/types/signal/constants.d.ts +14 -0
- package/dist/types/signal/crypto/WaAdvSignature.d.ts +7 -0
- package/dist/types/signal/crypto/constants.d.ts +5 -0
- package/dist/types/signal/group/SenderKeyChain.d.ts +11 -0
- package/dist/types/signal/group/SenderKeyCodec.d.ts +14 -0
- package/dist/types/signal/group/SenderKeyManager.d.ts +22 -0
- package/dist/types/signal/index.d.ts +12 -0
- package/dist/types/signal/registration/keygen.d.ts +5 -0
- package/dist/types/signal/registration/utils.d.ts +9 -0
- package/dist/types/signal/session/SignalProtocol.d.ts +22 -0
- package/dist/types/signal/session/SignalRatchet.d.ts +25 -0
- package/dist/types/signal/session/SignalSerializer.d.ts +6 -0
- package/dist/types/signal/session/SignalSession.d.ts +43 -0
- package/dist/types/signal/store/sqlite.d.ts +72 -0
- package/dist/types/signal/types.d.ts +110 -0
- package/dist/types/store/contracts/appstate.store.d.ts +22 -0
- package/dist/types/store/contracts/auth.store.d.ts +6 -0
- package/dist/types/store/contracts/contact.store.d.ts +14 -0
- package/dist/types/store/contracts/device-list.store.d.ts +16 -0
- package/dist/types/store/contracts/message.store.d.ts +18 -0
- package/dist/types/store/contracts/participants.store.d.ts +14 -0
- package/dist/types/store/contracts/retry.store.d.ts +11 -0
- package/dist/types/store/contracts/sender-key.store.d.ts +16 -0
- package/dist/types/store/contracts/signal.store.d.ts +31 -0
- package/dist/types/store/contracts/thread.store.d.ts +17 -0
- package/dist/types/store/createStore.d.ts +2 -0
- package/dist/types/store/index.d.ts +31 -0
- package/dist/types/store/noop.store.d.ts +10 -0
- package/dist/types/store/providers/memory/appstate.store.d.ts +21 -0
- package/dist/types/store/providers/memory/contact.store.d.ts +13 -0
- package/dist/types/store/providers/memory/device-list.store.d.ts +20 -0
- package/dist/types/store/providers/memory/message.store.d.ts +14 -0
- package/dist/types/store/providers/memory/participants.store.d.ts +18 -0
- package/dist/types/store/providers/memory/retry.store.d.ts +18 -0
- package/dist/types/store/providers/memory/sender-key.store.d.ts +28 -0
- package/dist/types/store/providers/memory/signal.store.d.ts +51 -0
- package/dist/types/store/providers/memory/thread.store.d.ts +14 -0
- package/dist/types/store/providers/sqlite/BaseSqliteStore.d.ts +12 -0
- package/dist/types/store/providers/sqlite/appstate.store.d.ts +15 -0
- package/dist/types/store/providers/sqlite/auth.store.d.ts +10 -0
- package/dist/types/store/providers/sqlite/connection.d.ts +10 -0
- package/dist/types/store/providers/sqlite/contact.store.d.ts +10 -0
- package/dist/types/store/providers/sqlite/device-list.store.d.ts +18 -0
- package/dist/types/store/providers/sqlite/message.store.d.ts +11 -0
- package/dist/types/store/providers/sqlite/migrations.d.ts +3 -0
- package/dist/types/store/providers/sqlite/participants.store.d.ts +13 -0
- package/dist/types/store/providers/sqlite/retry.store.d.ts +16 -0
- package/dist/types/store/providers/sqlite/sender-key.store.d.ts +25 -0
- package/dist/types/store/providers/sqlite/signal.store.d.ts +46 -0
- package/dist/types/store/providers/sqlite/thread.store.d.ts +11 -0
- package/dist/types/store/types.d.ts +103 -0
- package/dist/types/transport/WaComms.d.ts +61 -0
- package/dist/types/transport/WaWebSocket.d.ts +36 -0
- package/dist/types/transport/binary/constants.d.ts +49 -0
- package/dist/types/transport/binary/decoder.d.ts +3 -0
- package/dist/types/transport/binary/encoder.d.ts +3 -0
- package/dist/types/transport/binary/index.d.ts +4 -0
- package/dist/types/transport/binary/tokens.d.ts +11 -0
- package/dist/types/transport/index.d.ts +7 -0
- package/dist/types/transport/keepalive/WaKeepAlive.d.ts +39 -0
- package/dist/types/transport/node/WaNodeOrchestrator.d.ts +28 -0
- package/dist/types/transport/node/WaNodeTransport.d.ts +22 -0
- package/dist/types/transport/node/builders/accountSync.d.ts +11 -0
- package/dist/types/transport/node/builders/group.d.ts +16 -0
- package/dist/types/transport/node/builders/index.d.ts +7 -0
- package/dist/types/transport/node/builders/media.d.ts +2 -0
- package/dist/types/transport/node/builders/message.d.ts +52 -0
- package/dist/types/transport/node/builders/pairing.d.ts +18 -0
- package/dist/types/transport/node/builders/prekeys.d.ts +5 -0
- package/dist/types/transport/node/builders/retry.d.ts +18 -0
- package/dist/types/transport/node/helpers.d.ts +8 -0
- package/dist/types/transport/node/query.d.ts +10 -0
- package/dist/types/transport/node/xml.d.ts +2 -0
- package/dist/types/transport/noise/WaClientPayload.d.ts +3 -0
- package/dist/types/transport/noise/WaFrameCodec.d.ts +9 -0
- package/dist/types/transport/noise/WaNoiseCert.d.ts +1 -0
- package/dist/types/transport/noise/WaNoiseHandshake.d.ts +14 -0
- package/dist/types/transport/noise/WaNoiseSession.d.ts +33 -0
- package/dist/types/transport/noise/WaNoiseSocket.d.ts +10 -0
- package/dist/types/transport/noise/constants.d.ts +7 -0
- package/dist/types/transport/noise/types.d.ts +23 -0
- package/dist/types/transport/stream/parse.d.ts +23 -0
- package/dist/types/transport/types.d.ts +71 -0
- package/dist/types/util/async.d.ts +1 -0
- package/dist/types/util/base64.d.ts +4 -0
- package/dist/types/util/bytes.d.ts +28 -0
- package/dist/types/util/coercion.d.ts +8 -0
- package/dist/types/util/collections.d.ts +3 -0
- package/dist/types/util/primitives.d.ts +7 -0
- package/dist/types/util/runtime.d.ts +2 -0
- package/dist/types/util/signal-address.d.ts +2 -0
- package/dist/util/async.js +8 -0
- package/dist/util/base64.js +24 -0
- package/dist/util/bytes.js +291 -0
- package/dist/util/coercion.js +66 -0
- package/dist/util/collections.js +32 -0
- package/dist/util/primitives.js +37 -0
- package/dist/util/runtime.js +19 -0
- package/dist/util/signal-address.js +8 -0
- package/package.json +150 -0
- package/proto/index.d.ts +10861 -0
- package/proto/index.js +1 -0
- package/scripts/check-node-version.cjs +55 -0
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseSyncResponse = parseSyncResponse;
|
|
4
|
+
exports.parseCollectionState = parseCollectionState;
|
|
5
|
+
const utils_1 = require("./utils");
|
|
6
|
+
const _proto_1 = require("../proto.js");
|
|
7
|
+
const constants_1 = require("../protocol/constants");
|
|
8
|
+
const helpers_1 = require("../transport/node/helpers");
|
|
9
|
+
function parseSyncResponse(iqNode) {
|
|
10
|
+
if (iqNode.tag !== constants_1.WA_NODE_TAGS.IQ) {
|
|
11
|
+
throw new Error(`invalid sync response tag ${iqNode.tag}`);
|
|
12
|
+
}
|
|
13
|
+
const syncNode = (0, helpers_1.findNodeChild)(iqNode, constants_1.WA_NODE_TAGS.SYNC);
|
|
14
|
+
if (!syncNode) {
|
|
15
|
+
throw new Error('sync response is missing <sync> node');
|
|
16
|
+
}
|
|
17
|
+
const payloads = [];
|
|
18
|
+
for (const collectionNode of (0, helpers_1.getNodeChildrenByTag)(syncNode, constants_1.WA_NODE_TAGS.COLLECTION)) {
|
|
19
|
+
const collection = (0, utils_1.parseCollectionName)(collectionNode.attrs.name);
|
|
20
|
+
if (!collection) {
|
|
21
|
+
throw new Error(`invalid app-state collection name: ${collectionNode.attrs.name}`);
|
|
22
|
+
}
|
|
23
|
+
const state = parseCollectionState(collectionNode);
|
|
24
|
+
const versionAttr = collectionNode.attrs.version;
|
|
25
|
+
let version;
|
|
26
|
+
if (versionAttr) {
|
|
27
|
+
const parsedVersion = Number.parseInt(versionAttr, 10);
|
|
28
|
+
if (!Number.isSafeInteger(parsedVersion) || parsedVersion < 0) {
|
|
29
|
+
throw new Error(`invalid app-state collection version "${versionAttr}"`);
|
|
30
|
+
}
|
|
31
|
+
version = parsedVersion;
|
|
32
|
+
}
|
|
33
|
+
const patchesNode = (0, helpers_1.findNodeChild)(collectionNode, constants_1.WA_NODE_TAGS.PATCHES);
|
|
34
|
+
const patches = patchesNode
|
|
35
|
+
? (0, helpers_1.getNodeChildrenByTag)(patchesNode, constants_1.WA_NODE_TAGS.PATCH).map((node) => _proto_1.proto.SyncdPatch.decode((0, helpers_1.decodeNodeContentBase64OrBytes)(node.content, 'collection.patches.patch')))
|
|
36
|
+
: [];
|
|
37
|
+
const snapshotNode = (0, helpers_1.findNodeChild)(collectionNode, constants_1.WA_NODE_TAGS.SNAPSHOT);
|
|
38
|
+
const snapshotReference = snapshotNode
|
|
39
|
+
? _proto_1.proto.ExternalBlobReference.decode((0, helpers_1.decodeNodeContentBase64OrBytes)(snapshotNode.content, 'collection.snapshot'))
|
|
40
|
+
: undefined;
|
|
41
|
+
payloads.push({
|
|
42
|
+
collection,
|
|
43
|
+
state,
|
|
44
|
+
version,
|
|
45
|
+
patches,
|
|
46
|
+
snapshotReference
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
return payloads;
|
|
50
|
+
}
|
|
51
|
+
function parseCollectionState(node) {
|
|
52
|
+
const type = node.attrs.type;
|
|
53
|
+
const hasMorePatches = node.attrs.has_more_patches === 'true';
|
|
54
|
+
if (type !== constants_1.WA_IQ_TYPES.ERROR) {
|
|
55
|
+
return hasMorePatches
|
|
56
|
+
? constants_1.WA_APP_STATE_COLLECTION_STATES.SUCCESS_HAS_MORE
|
|
57
|
+
: constants_1.WA_APP_STATE_COLLECTION_STATES.SUCCESS;
|
|
58
|
+
}
|
|
59
|
+
const errorNode = (0, helpers_1.findNodeChild)(node, constants_1.WA_NODE_TAGS.ERROR);
|
|
60
|
+
const code = errorNode?.attrs.code;
|
|
61
|
+
if (code === constants_1.WA_APP_STATE_ERROR_CODES.CONFLICT) {
|
|
62
|
+
return hasMorePatches
|
|
63
|
+
? constants_1.WA_APP_STATE_COLLECTION_STATES.CONFLICT_HAS_MORE
|
|
64
|
+
: constants_1.WA_APP_STATE_COLLECTION_STATES.CONFLICT;
|
|
65
|
+
}
|
|
66
|
+
if (code === constants_1.WA_APP_STATE_ERROR_CODES.BAD_REQUEST ||
|
|
67
|
+
code === constants_1.WA_APP_STATE_ERROR_CODES.NOT_FOUND) {
|
|
68
|
+
return constants_1.WA_APP_STATE_COLLECTION_STATES.ERROR_FATAL;
|
|
69
|
+
}
|
|
70
|
+
return constants_1.WA_APP_STATE_COLLECTION_STATES.ERROR_RETRY;
|
|
71
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.APP_STATE_DEFAULT_COLLECTIONS = exports.APP_STATE_EMPTY_LT_HASH = exports.APP_STATE_POINT_SIZE = exports.APP_STATE_LT_HASH_SIZE = exports.APP_STATE_IV_LENGTH = exports.APP_STATE_MAC_OCTET_LENGTH = exports.APP_STATE_VALUE_MAC_LENGTH = exports.APP_STATE_DERIVED_PATCH_MAC_KEY_END = exports.APP_STATE_DERIVED_SNAPSHOT_MAC_KEY_END = exports.APP_STATE_DERIVED_VALUE_MAC_KEY_END = exports.APP_STATE_DERIVED_VALUE_ENCRYPTION_KEY_END = exports.APP_STATE_DERIVED_INDEX_KEY_END = exports.APP_STATE_DERIVED_KEY_LENGTH = void 0;
|
|
4
|
+
const constants_1 = require("../protocol/constants");
|
|
5
|
+
exports.APP_STATE_DERIVED_KEY_LENGTH = 160;
|
|
6
|
+
exports.APP_STATE_DERIVED_INDEX_KEY_END = 32;
|
|
7
|
+
exports.APP_STATE_DERIVED_VALUE_ENCRYPTION_KEY_END = 64;
|
|
8
|
+
exports.APP_STATE_DERIVED_VALUE_MAC_KEY_END = 96;
|
|
9
|
+
exports.APP_STATE_DERIVED_SNAPSHOT_MAC_KEY_END = 128;
|
|
10
|
+
exports.APP_STATE_DERIVED_PATCH_MAC_KEY_END = 160;
|
|
11
|
+
exports.APP_STATE_VALUE_MAC_LENGTH = 32;
|
|
12
|
+
exports.APP_STATE_MAC_OCTET_LENGTH = 8;
|
|
13
|
+
exports.APP_STATE_IV_LENGTH = 16;
|
|
14
|
+
exports.APP_STATE_LT_HASH_SIZE = 128;
|
|
15
|
+
exports.APP_STATE_POINT_SIZE = 2;
|
|
16
|
+
exports.APP_STATE_EMPTY_LT_HASH = new Uint8Array(exports.APP_STATE_LT_HASH_SIZE);
|
|
17
|
+
exports.APP_STATE_DEFAULT_COLLECTIONS = [
|
|
18
|
+
constants_1.WA_APP_STATE_COLLECTIONS.CRITICAL_UNBLOCK_LOW,
|
|
19
|
+
constants_1.WA_APP_STATE_COLLECTIONS.CRITICAL_BLOCK,
|
|
20
|
+
constants_1.WA_APP_STATE_COLLECTIONS.REGULAR_LOW,
|
|
21
|
+
constants_1.WA_APP_STATE_COLLECTIONS.REGULAR,
|
|
22
|
+
constants_1.WA_APP_STATE_COLLECTIONS.REGULAR_HIGH
|
|
23
|
+
];
|
|
@@ -0,0 +1,28 @@
|
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.WaAppStateSyncClient = exports.parseSyncResponse = exports.parseCollectionState = exports.WaAppStateMissingKeyError = exports.WaAppStateCrypto = void 0;
|
|
18
|
+
__exportStar(require("./constants"), exports);
|
|
19
|
+
__exportStar(require("./utils"), exports);
|
|
20
|
+
var WaAppStateCrypto_1 = require("./WaAppStateCrypto");
|
|
21
|
+
Object.defineProperty(exports, "WaAppStateCrypto", { enumerable: true, get: function () { return WaAppStateCrypto_1.WaAppStateCrypto; } });
|
|
22
|
+
var WaAppStateSyncClient_1 = require("./WaAppStateSyncClient");
|
|
23
|
+
Object.defineProperty(exports, "WaAppStateMissingKeyError", { enumerable: true, get: function () { return WaAppStateSyncClient_1.WaAppStateMissingKeyError; } });
|
|
24
|
+
var WaAppStateSyncResponseParser_1 = require("./WaAppStateSyncResponseParser");
|
|
25
|
+
Object.defineProperty(exports, "parseCollectionState", { enumerable: true, get: function () { return WaAppStateSyncResponseParser_1.parseCollectionState; } });
|
|
26
|
+
Object.defineProperty(exports, "parseSyncResponse", { enumerable: true, get: function () { return WaAppStateSyncResponseParser_1.parseSyncResponse; } });
|
|
27
|
+
var WaAppStateSyncClient_2 = require("./WaAppStateSyncClient");
|
|
28
|
+
Object.defineProperty(exports, "WaAppStateSyncClient", { enumerable: true, get: function () { return WaAppStateSyncClient_2.WaAppStateSyncClient; } });
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.encodeAppStateFingerprint = encodeAppStateFingerprint;
|
|
4
|
+
exports.decodeAppStateFingerprint = decodeAppStateFingerprint;
|
|
5
|
+
exports.decodeAppStateSyncKeys = decodeAppStateSyncKeys;
|
|
6
|
+
exports.decodeAppStateCollections = decodeAppStateCollections;
|
|
7
|
+
const _proto_1 = require("../../proto.js");
|
|
8
|
+
const coercion_1 = require("../../util/coercion");
|
|
9
|
+
function encodeAppStateFingerprint(fingerprint) {
|
|
10
|
+
if (!fingerprint) {
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
return _proto_1.proto.Message.AppStateSyncKeyFingerprint.encode(fingerprint).finish();
|
|
14
|
+
}
|
|
15
|
+
function decodeAppStateFingerprint(raw) {
|
|
16
|
+
const bytes = (0, coercion_1.asOptionalBytes)(raw, 'appstate_sync_keys.fingerprint');
|
|
17
|
+
if (!bytes) {
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
try {
|
|
21
|
+
return _proto_1.proto.Message.AppStateSyncKeyFingerprint.decode(bytes);
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
const reason = error instanceof Error ? error.message : String(error);
|
|
25
|
+
throw new Error(`invalid appstate_sync_keys.fingerprint protobuf payload: ${reason}`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function decodeAppStateSyncKeys(rows) {
|
|
29
|
+
return rows.map((row) => ({
|
|
30
|
+
keyId: (0, coercion_1.asBytes)(row.key_id, 'appstate_sync_keys.key_id'),
|
|
31
|
+
keyData: (0, coercion_1.asBytes)(row.key_data, 'appstate_sync_keys.key_data'),
|
|
32
|
+
timestamp: (0, coercion_1.asNumber)(row.timestamp, 'appstate_sync_keys.timestamp'),
|
|
33
|
+
fingerprint: decodeAppStateFingerprint(row.fingerprint)
|
|
34
|
+
}));
|
|
35
|
+
}
|
|
36
|
+
function decodeAppStateCollections(versionRows, valueRows) {
|
|
37
|
+
const valueMapByCollection = new Map();
|
|
38
|
+
for (const row of valueRows) {
|
|
39
|
+
const collection = (0, coercion_1.asString)(row.collection, 'appstate_collection_index_values.collection');
|
|
40
|
+
const byIndex = valueMapByCollection.get(collection) ?? {};
|
|
41
|
+
byIndex[(0, coercion_1.asString)(row.index_mac_hex, 'appstate_collection_index_values.index_mac_hex')] =
|
|
42
|
+
(0, coercion_1.asBytes)(row.value_mac, 'appstate_collection_index_values.value_mac');
|
|
43
|
+
valueMapByCollection.set(collection, byIndex);
|
|
44
|
+
}
|
|
45
|
+
const collections = {};
|
|
46
|
+
for (const row of versionRows) {
|
|
47
|
+
const collection = (0, coercion_1.asString)(row.collection, 'appstate_collection_versions.collection');
|
|
48
|
+
collections[collection] = {
|
|
49
|
+
version: (0, coercion_1.asNumber)(row.version, 'appstate_collection_versions.version'),
|
|
50
|
+
hash: (0, coercion_1.asBytes)(row.hash, 'appstate_collection_versions.hash'),
|
|
51
|
+
indexValueMap: valueMapByCollection.get(collection) ?? {}
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
return collections;
|
|
55
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.keyIdToHex = keyIdToHex;
|
|
4
|
+
exports.parseCollectionName = parseCollectionName;
|
|
5
|
+
exports.keyDeviceId = keyDeviceId;
|
|
6
|
+
exports.keyEpoch = keyEpoch;
|
|
7
|
+
exports.pickActiveSyncKey = pickActiveSyncKey;
|
|
8
|
+
exports.toNetworkOrder64 = toNetworkOrder64;
|
|
9
|
+
exports.downloadExternalBlobReference = downloadExternalBlobReference;
|
|
10
|
+
const constants_1 = require("../protocol/constants");
|
|
11
|
+
const base64_1 = require("../util/base64");
|
|
12
|
+
const bytes_1 = require("../util/bytes");
|
|
13
|
+
function keyIdToHex(keyId) {
|
|
14
|
+
return (0, bytes_1.bytesToHex)(keyId);
|
|
15
|
+
}
|
|
16
|
+
function parseCollectionName(value) {
|
|
17
|
+
if (!value) {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
for (const collection of Object.values(constants_1.WA_APP_STATE_COLLECTIONS)) {
|
|
21
|
+
if (collection === value) {
|
|
22
|
+
return collection;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
function keyDeviceId(keyId) {
|
|
28
|
+
if (keyId.byteLength < 6) {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
return (keyId[0] << 8) | keyId[1];
|
|
32
|
+
}
|
|
33
|
+
function keyEpoch(keyId) {
|
|
34
|
+
if (keyId.byteLength < 6) {
|
|
35
|
+
return -1;
|
|
36
|
+
}
|
|
37
|
+
return new DataView(keyId.buffer, keyId.byteOffset, keyId.byteLength).getUint32(2, false);
|
|
38
|
+
}
|
|
39
|
+
function pickActiveSyncKey(keys) {
|
|
40
|
+
let active = null;
|
|
41
|
+
for (const key of keys) {
|
|
42
|
+
if (!active) {
|
|
43
|
+
active = key;
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
const currentEpoch = keyEpoch(active.keyId);
|
|
47
|
+
const nextEpoch = keyEpoch(key.keyId);
|
|
48
|
+
if (nextEpoch > currentEpoch) {
|
|
49
|
+
active = key;
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
if (nextEpoch < currentEpoch) {
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
const nextDeviceId = keyDeviceId(key.keyId);
|
|
56
|
+
const currentDeviceId = keyDeviceId(active.keyId);
|
|
57
|
+
if (nextDeviceId !== null && currentDeviceId !== null && nextDeviceId < currentDeviceId) {
|
|
58
|
+
active = key;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return active;
|
|
62
|
+
}
|
|
63
|
+
function toNetworkOrder64(value) {
|
|
64
|
+
const out = new Uint8Array(8);
|
|
65
|
+
const view = new DataView(out.buffer);
|
|
66
|
+
view.setUint32(0, Math.floor(value / 4294967296), false);
|
|
67
|
+
view.setUint32(4, value >>> 0, false);
|
|
68
|
+
return out;
|
|
69
|
+
}
|
|
70
|
+
async function downloadExternalBlobReference(mediaTransfer, reference) {
|
|
71
|
+
if (!reference.directPath) {
|
|
72
|
+
throw new Error('external blob reference is missing directPath');
|
|
73
|
+
}
|
|
74
|
+
const mediaKey = (0, base64_1.decodeProtoBytes)(reference.mediaKey, 'external blob mediaKey');
|
|
75
|
+
const fileSha256 = (0, base64_1.decodeProtoBytes)(reference.fileSha256, 'external blob fileSha256');
|
|
76
|
+
const fileEncSha256 = (0, base64_1.decodeProtoBytes)(reference.fileEncSha256, 'external blob fileEncSha256');
|
|
77
|
+
return mediaTransfer.downloadAndDecrypt({
|
|
78
|
+
directPath: reference.directPath,
|
|
79
|
+
mediaType: constants_1.WA_APP_STATE_KEY_TYPES.MD_APP_STATE,
|
|
80
|
+
mediaKey,
|
|
81
|
+
fileSha256,
|
|
82
|
+
fileEncSha256
|
|
83
|
+
});
|
|
84
|
+
}
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WaAuthClient = void 0;
|
|
4
|
+
const WaAuthCredentialsFlow_1 = require("./flow/WaAuthCredentialsFlow");
|
|
5
|
+
const WaPairingFlow_1 = require("./pairing/WaPairingFlow");
|
|
6
|
+
const WaQrFlow_1 = require("./pairing/WaQrFlow");
|
|
7
|
+
const constants_1 = require("../protocol/constants");
|
|
8
|
+
const bytes_1 = require("../util/bytes");
|
|
9
|
+
const primitives_1 = require("../util/primitives");
|
|
10
|
+
const runtime_1 = require("../util/runtime");
|
|
11
|
+
class WaAuthClient {
|
|
12
|
+
constructor(options, deps) {
|
|
13
|
+
const deviceBrowser = options.deviceBrowser ?? constants_1.WA_DEFAULTS.DEVICE_BROWSER;
|
|
14
|
+
const device = Object.freeze({
|
|
15
|
+
browser: deviceBrowser,
|
|
16
|
+
osDisplayName: options.deviceOsDisplayName ?? (0, runtime_1.getRuntimeOsDisplayName)(),
|
|
17
|
+
platform: options.devicePlatform ?? (0, constants_1.getWaCompanionPlatformId)(deviceBrowser)
|
|
18
|
+
});
|
|
19
|
+
this.options = Object.freeze({
|
|
20
|
+
...options,
|
|
21
|
+
deviceBrowser: device.browser,
|
|
22
|
+
deviceOsDisplayName: device.osDisplayName,
|
|
23
|
+
devicePlatform: device.platform,
|
|
24
|
+
requireFullSync: options.requireFullSync
|
|
25
|
+
});
|
|
26
|
+
this.logger = deps.logger;
|
|
27
|
+
this.callbacks = deps.callbacks ?? {};
|
|
28
|
+
this.authStore = deps.authStore;
|
|
29
|
+
this.signalStore = deps.signalStore;
|
|
30
|
+
this.credentials = null;
|
|
31
|
+
this.qrFlow = new WaQrFlow_1.WaQrFlow({
|
|
32
|
+
logger: this.logger,
|
|
33
|
+
getCredentials: () => this.credentials,
|
|
34
|
+
getDevicePlatform: () => device.platform,
|
|
35
|
+
emitQr: (qr, ttlMs) => this.callbacks.onQr?.(qr, ttlMs)
|
|
36
|
+
});
|
|
37
|
+
this.pairingFlow = new WaPairingFlow_1.WaPairingFlow({
|
|
38
|
+
logger: this.logger,
|
|
39
|
+
auth: {
|
|
40
|
+
getCredentials: () => this.credentials,
|
|
41
|
+
updateCredentials: this.updateCredentials.bind(this)
|
|
42
|
+
},
|
|
43
|
+
socket: deps.socket,
|
|
44
|
+
qrFlow: this.qrFlow,
|
|
45
|
+
device,
|
|
46
|
+
callbacks: {
|
|
47
|
+
emitPairingCode: (code) => this.callbacks.onPairingCode?.(code),
|
|
48
|
+
emitPairingRefresh: (forceManual) => this.callbacks.onPairingRefresh?.(forceManual),
|
|
49
|
+
emitPaired: (credentials) => this.callbacks.onPaired?.(credentials)
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
getState(connected = false) {
|
|
54
|
+
return {
|
|
55
|
+
connected,
|
|
56
|
+
registered: this.credentials?.meJid !== null && this.credentials?.meJid !== undefined,
|
|
57
|
+
hasQr: this.qrFlow.hasQr(),
|
|
58
|
+
hasPairingCode: this.pairingFlow.hasPairingSession()
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
getCurrentCredentials() {
|
|
62
|
+
return this.credentials;
|
|
63
|
+
}
|
|
64
|
+
async loadOrCreateCredentials() {
|
|
65
|
+
return this.runHandled(async () => {
|
|
66
|
+
this.logger.debug('auth client loadOrCreateCredentials start');
|
|
67
|
+
this.credentials = await (0, WaAuthCredentialsFlow_1.loadOrCreateCredentials)({
|
|
68
|
+
logger: this.logger,
|
|
69
|
+
authStore: this.authStore,
|
|
70
|
+
signalStore: this.signalStore
|
|
71
|
+
});
|
|
72
|
+
this.logger.info('auth client credentials ready', {
|
|
73
|
+
registered: this.credentials.meJid !== null && this.credentials.meJid !== undefined
|
|
74
|
+
});
|
|
75
|
+
return this.credentials;
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
buildCommsConfig(socketOptions) {
|
|
79
|
+
this.logger.trace('auth client building comms config');
|
|
80
|
+
return (0, WaAuthCredentialsFlow_1.buildCommsConfig)(this.logger, this.requireCredentials(), socketOptions, {
|
|
81
|
+
deviceBrowser: this.options.deviceBrowser,
|
|
82
|
+
deviceOsDisplayName: this.options.deviceOsDisplayName,
|
|
83
|
+
requireFullSync: this.options.requireFullSync
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
async clearTransientState() {
|
|
87
|
+
this.logger.trace('auth client clear transient state');
|
|
88
|
+
this.qrFlow.clear();
|
|
89
|
+
this.pairingFlow.clearSession();
|
|
90
|
+
}
|
|
91
|
+
async clearStoredCredentials() {
|
|
92
|
+
this.logger.warn('auth client clearing stored credentials');
|
|
93
|
+
await this.authStore.clear();
|
|
94
|
+
this.credentials = null;
|
|
95
|
+
await this.clearTransientState();
|
|
96
|
+
}
|
|
97
|
+
async persistServerStaticKey(serverStaticKey) {
|
|
98
|
+
this.logger.debug('persisting server static key', {
|
|
99
|
+
keyLength: serverStaticKey.byteLength
|
|
100
|
+
});
|
|
101
|
+
await this.patchCredentials((credentials) => ({
|
|
102
|
+
...credentials,
|
|
103
|
+
serverStaticKey
|
|
104
|
+
}));
|
|
105
|
+
}
|
|
106
|
+
async persistServerHasPreKeys(serverHasPreKeys) {
|
|
107
|
+
await this.patchCredentials((credentials) => ({
|
|
108
|
+
...credentials,
|
|
109
|
+
serverHasPreKeys
|
|
110
|
+
}), {
|
|
111
|
+
shouldPersist: (current) => current.serverHasPreKeys !== serverHasPreKeys,
|
|
112
|
+
onPersist: () => {
|
|
113
|
+
this.logger.debug('persisting serverHasPreKeys', {
|
|
114
|
+
serverHasPreKeys
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
async persistRoutingInfo(routingInfo) {
|
|
120
|
+
this.logger.trace('persisting routing info', {
|
|
121
|
+
byteLength: routingInfo.byteLength
|
|
122
|
+
});
|
|
123
|
+
await this.patchCredentials((credentials) => ({
|
|
124
|
+
...credentials,
|
|
125
|
+
routingInfo
|
|
126
|
+
}), {
|
|
127
|
+
shouldPersist: (current) => {
|
|
128
|
+
if (current.routingInfo && (0, bytes_1.uint8Equal)(current.routingInfo, routingInfo)) {
|
|
129
|
+
this.logger.trace('routing info unchanged, skipping persistence');
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
return true;
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
async clearRoutingInfo() {
|
|
137
|
+
return this.patchCredentials((credentials) => ({
|
|
138
|
+
...credentials,
|
|
139
|
+
routingInfo: undefined
|
|
140
|
+
}), {
|
|
141
|
+
shouldPersist: (current) => current.routingInfo !== undefined,
|
|
142
|
+
onPersist: () => {
|
|
143
|
+
this.logger.warn('clearing persisted routing info');
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
async persistMeLid(meLid) {
|
|
148
|
+
await this.persistSuccessAttributes({
|
|
149
|
+
meLid
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
async persistSuccessAttributes(attributes) {
|
|
153
|
+
let changes = {};
|
|
154
|
+
await this.patchCredentials((credentials) => {
|
|
155
|
+
const nextMeLid = attributes.meLid ?? credentials.meLid;
|
|
156
|
+
const nextMeDisplayName = attributes.meDisplayName ?? credentials.meDisplayName;
|
|
157
|
+
const nextCompanionEncStatic = attributes.companionEncStatic ?? credentials.companionEncStatic;
|
|
158
|
+
const nextLastSuccessTs = attributes.lastSuccessTs ?? credentials.lastSuccessTs;
|
|
159
|
+
const nextPropsVersion = attributes.propsVersion ?? credentials.propsVersion;
|
|
160
|
+
const nextAbPropsVersion = attributes.abPropsVersion ?? credentials.abPropsVersion;
|
|
161
|
+
const nextConnectionLocation = attributes.connectionLocation ?? credentials.connectionLocation;
|
|
162
|
+
const nextAccountCreationTs = attributes.accountCreationTs ?? credentials.accountCreationTs;
|
|
163
|
+
changes = {
|
|
164
|
+
lidChanged: nextMeLid !== credentials.meLid,
|
|
165
|
+
displayNameChanged: nextMeDisplayName !== credentials.meDisplayName,
|
|
166
|
+
companionChanged: (credentials.companionEncStatic === undefined) !==
|
|
167
|
+
(nextCompanionEncStatic === undefined) ||
|
|
168
|
+
(credentials.companionEncStatic !== undefined &&
|
|
169
|
+
nextCompanionEncStatic !== undefined &&
|
|
170
|
+
!(0, bytes_1.uint8Equal)(credentials.companionEncStatic, nextCompanionEncStatic)),
|
|
171
|
+
lastSuccessTsChanged: nextLastSuccessTs !== credentials.lastSuccessTs,
|
|
172
|
+
propsVersionChanged: nextPropsVersion !== credentials.propsVersion,
|
|
173
|
+
abPropsVersionChanged: nextAbPropsVersion !== credentials.abPropsVersion,
|
|
174
|
+
connectionLocationChanged: nextConnectionLocation !== credentials.connectionLocation,
|
|
175
|
+
accountCreationTsChanged: nextAccountCreationTs !== credentials.accountCreationTs
|
|
176
|
+
};
|
|
177
|
+
return {
|
|
178
|
+
...credentials,
|
|
179
|
+
meLid: nextMeLid,
|
|
180
|
+
meDisplayName: nextMeDisplayName,
|
|
181
|
+
companionEncStatic: nextCompanionEncStatic,
|
|
182
|
+
lastSuccessTs: nextLastSuccessTs,
|
|
183
|
+
propsVersion: nextPropsVersion,
|
|
184
|
+
abPropsVersion: nextAbPropsVersion,
|
|
185
|
+
connectionLocation: nextConnectionLocation,
|
|
186
|
+
accountCreationTs: nextAccountCreationTs
|
|
187
|
+
};
|
|
188
|
+
}, {
|
|
189
|
+
shouldPersist: () => Object.values(changes).some(Boolean),
|
|
190
|
+
onPersist: () => {
|
|
191
|
+
this.logger.debug('persisting success attributes', changes);
|
|
192
|
+
}
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
async requestPairingCode(phoneNumber, shouldShowPushNotification = false) {
|
|
196
|
+
this.requireCredentials();
|
|
197
|
+
this.logger.info('auth client requesting pairing code');
|
|
198
|
+
return this.runHandled(() => this.pairingFlow.requestPairingCode(phoneNumber, shouldShowPushNotification));
|
|
199
|
+
}
|
|
200
|
+
async fetchPairingCountryCodeIso() {
|
|
201
|
+
this.requireCredentials();
|
|
202
|
+
this.logger.trace('auth client fetching pairing country code ISO');
|
|
203
|
+
return this.runHandled(() => this.pairingFlow.fetchPairingCountryCodeIso());
|
|
204
|
+
}
|
|
205
|
+
async handleIncomingIqSet(node) {
|
|
206
|
+
return this.runHandled(async () => {
|
|
207
|
+
this.logger.trace('auth client handleIncomingIqSet', { id: node.attrs.id });
|
|
208
|
+
return this.pairingFlow.handleIncomingIqSet(node);
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
async handleLinkCodeNotification(node) {
|
|
212
|
+
return this.runHandled(async () => {
|
|
213
|
+
this.logger.trace('auth client handleLinkCodeNotification', { id: node.attrs.id });
|
|
214
|
+
return this.pairingFlow.handleLinkCodeNotification(node);
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
async handleCompanionRegRefreshNotification(node) {
|
|
218
|
+
return this.runHandled(async () => {
|
|
219
|
+
this.logger.trace('auth client handleCompanionRegRefreshNotification', {
|
|
220
|
+
id: node.attrs.id
|
|
221
|
+
});
|
|
222
|
+
return this.pairingFlow.handleCompanionRegRefreshNotification(node);
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
async patchCredentials(buildNext, options = {}) {
|
|
226
|
+
const current = this.requireCredentials();
|
|
227
|
+
const next = buildNext(current);
|
|
228
|
+
if (options.shouldPersist && !options.shouldPersist(current, next)) {
|
|
229
|
+
return current;
|
|
230
|
+
}
|
|
231
|
+
options.onPersist?.(current, next);
|
|
232
|
+
await this.updateCredentials(next);
|
|
233
|
+
return next;
|
|
234
|
+
}
|
|
235
|
+
async runHandled(action) {
|
|
236
|
+
try {
|
|
237
|
+
return await action();
|
|
238
|
+
}
|
|
239
|
+
catch (error) {
|
|
240
|
+
this.handleError((0, primitives_1.toError)(error));
|
|
241
|
+
throw error;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
async updateCredentials(credentials) {
|
|
245
|
+
this.logger.trace('auth client update credentials', {
|
|
246
|
+
registered: credentials.meJid !== null && credentials.meJid !== undefined
|
|
247
|
+
});
|
|
248
|
+
this.credentials = credentials;
|
|
249
|
+
await (0, WaAuthCredentialsFlow_1.persistCredentials)({
|
|
250
|
+
logger: this.logger,
|
|
251
|
+
authStore: this.authStore,
|
|
252
|
+
signalStore: this.signalStore
|
|
253
|
+
}, credentials);
|
|
254
|
+
}
|
|
255
|
+
requireCredentials() {
|
|
256
|
+
if (!this.credentials) {
|
|
257
|
+
throw new Error('credentials are not initialized');
|
|
258
|
+
}
|
|
259
|
+
return this.credentials;
|
|
260
|
+
}
|
|
261
|
+
handleError(error) {
|
|
262
|
+
this.logger.error('wa auth client error', { message: error.message });
|
|
263
|
+
this.callbacks.onError?.(error);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
exports.WaAuthClient = WaAuthClient;
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.loadOrCreateCredentials = loadOrCreateCredentials;
|
|
4
|
+
exports.persistCredentials = persistCredentials;
|
|
5
|
+
exports.buildCommsConfig = buildCommsConfig;
|
|
6
|
+
const _crypto_1 = require("../../crypto/index.js");
|
|
7
|
+
const keys_1 = require("../../crypto/core/keys");
|
|
8
|
+
const X25519_1 = require("../../crypto/curves/X25519");
|
|
9
|
+
const jid_1 = require("../../protocol/jid");
|
|
10
|
+
const WaAdvSignature_1 = require("../../signal/crypto/WaAdvSignature");
|
|
11
|
+
const utils_1 = require("../../signal/registration/utils");
|
|
12
|
+
const primitives_1 = require("../../util/primitives");
|
|
13
|
+
async function loadOrCreateCredentials(args) {
|
|
14
|
+
args.logger.trace('auth credentials loadOrCreate start');
|
|
15
|
+
const existing = await args.authStore.load();
|
|
16
|
+
if (!existing) {
|
|
17
|
+
const credentials = await createAndPersistFreshCredentials(args);
|
|
18
|
+
args.logger.info('created fresh auth credentials');
|
|
19
|
+
return credentials;
|
|
20
|
+
}
|
|
21
|
+
args.logger.debug('auth credentials loaded from store', {
|
|
22
|
+
registered: existing.meJid !== null && existing.meJid !== undefined,
|
|
23
|
+
hasServerStaticKey: existing.serverStaticKey !== null && existing.serverStaticKey !== undefined
|
|
24
|
+
});
|
|
25
|
+
if (!existing.meJid && !(await hasValidSignedPreKey(args.logger, existing))) {
|
|
26
|
+
args.logger.warn('signed pre-key is invalid, regenerating credentials');
|
|
27
|
+
const fresh = await createAndPersistFreshCredentials(args);
|
|
28
|
+
args.logger.info('regenerated credentials due to invalid signed pre-key');
|
|
29
|
+
return fresh;
|
|
30
|
+
}
|
|
31
|
+
await restoreSignalStore(args.signalStore, existing);
|
|
32
|
+
args.logger.trace('auth credentials restored into signal store');
|
|
33
|
+
return existing;
|
|
34
|
+
}
|
|
35
|
+
async function persistCredentials(args, credentials) {
|
|
36
|
+
args.logger.trace('persisting auth credentials', {
|
|
37
|
+
registered: credentials.meJid !== null && credentials.meJid !== undefined
|
|
38
|
+
});
|
|
39
|
+
await args.authStore.save(credentials);
|
|
40
|
+
}
|
|
41
|
+
function buildCommsConfig(logger, credentials, socketOptions, clientOptions) {
|
|
42
|
+
const registered = credentials.meJid !== null && credentials.meJid !== undefined;
|
|
43
|
+
const loginIdentity = registered ? (0, jid_1.getLoginIdentity)(credentials.meJid) : null;
|
|
44
|
+
logger.debug('building comms config from credentials', {
|
|
45
|
+
registered,
|
|
46
|
+
hasServerStaticKey: credentials.serverStaticKey !== null && credentials.serverStaticKey !== undefined
|
|
47
|
+
});
|
|
48
|
+
return {
|
|
49
|
+
url: socketOptions.url,
|
|
50
|
+
urls: socketOptions.urls,
|
|
51
|
+
protocols: socketOptions.protocols,
|
|
52
|
+
connectTimeoutMs: socketOptions.connectTimeoutMs,
|
|
53
|
+
reconnectIntervalMs: socketOptions.reconnectIntervalMs,
|
|
54
|
+
timeoutIntervalMs: socketOptions.timeoutIntervalMs,
|
|
55
|
+
maxReconnectAttempts: socketOptions.maxReconnectAttempts,
|
|
56
|
+
noise: {
|
|
57
|
+
clientStaticKeyPair: credentials.noiseKeyPair,
|
|
58
|
+
isRegistered: registered,
|
|
59
|
+
serverStaticKey: credentials.serverStaticKey,
|
|
60
|
+
routingInfo: credentials.routingInfo,
|
|
61
|
+
loginPayloadConfig: loginIdentity
|
|
62
|
+
? {
|
|
63
|
+
username: loginIdentity.username,
|
|
64
|
+
device: loginIdentity.device,
|
|
65
|
+
deviceBrowser: clientOptions.deviceBrowser,
|
|
66
|
+
deviceOsDisplayName: clientOptions.deviceOsDisplayName
|
|
67
|
+
}
|
|
68
|
+
: undefined,
|
|
69
|
+
registrationPayloadConfig: !loginIdentity
|
|
70
|
+
? {
|
|
71
|
+
registrationInfo: credentials.registrationInfo,
|
|
72
|
+
signedPreKey: credentials.signedPreKey,
|
|
73
|
+
deviceBrowser: clientOptions.deviceBrowser,
|
|
74
|
+
deviceOsDisplayName: clientOptions.deviceOsDisplayName,
|
|
75
|
+
requireFullSync: clientOptions.requireFullSync
|
|
76
|
+
}
|
|
77
|
+
: undefined
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
async function createFreshCredentials(signalStore, logger) {
|
|
82
|
+
logger.trace('creating fresh credentials');
|
|
83
|
+
const [noiseKeyPair, registrationBundle, advSecretKey] = await Promise.all([
|
|
84
|
+
X25519_1.X25519.generateKeyPair(),
|
|
85
|
+
(0, utils_1.createAndStoreInitialKeys)(signalStore),
|
|
86
|
+
(0, _crypto_1.randomBytesAsync)(32)
|
|
87
|
+
]);
|
|
88
|
+
return {
|
|
89
|
+
noiseKeyPair,
|
|
90
|
+
registrationInfo: registrationBundle.registrationInfo,
|
|
91
|
+
signedPreKey: registrationBundle.signedPreKey,
|
|
92
|
+
serverHasPreKeys: false,
|
|
93
|
+
advSecretKey
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
async function createAndPersistFreshCredentials(args) {
|
|
97
|
+
const credentials = await createFreshCredentials(args.signalStore, args.logger);
|
|
98
|
+
await persistFreshCredentials(args, credentials);
|
|
99
|
+
return credentials;
|
|
100
|
+
}
|
|
101
|
+
async function hasValidSignedPreKey(logger, credentials) {
|
|
102
|
+
try {
|
|
103
|
+
const serializedPubKey = (0, keys_1.toSerializedPubKey)(credentials.signedPreKey.keyPair.pubKey);
|
|
104
|
+
const valid = await (0, WaAdvSignature_1.verifySignalSignature)(credentials.registrationInfo.identityKeyPair.pubKey, serializedPubKey, credentials.signedPreKey.signature);
|
|
105
|
+
logger.trace('signed pre-key validation completed', { valid });
|
|
106
|
+
return valid;
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
logger.warn('signed pre-key validation failed with exception', {
|
|
110
|
+
message: (0, primitives_1.toError)(error).message
|
|
111
|
+
});
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
async function restoreSignalStore(signalStore, credentials) {
|
|
116
|
+
await signalStore.setRegistrationInfo(credentials.registrationInfo);
|
|
117
|
+
await signalStore.setSignedPreKey(credentials.signedPreKey);
|
|
118
|
+
await signalStore.setServerHasPreKeys(credentials.serverHasPreKeys === true);
|
|
119
|
+
}
|
|
120
|
+
async function persistFreshCredentials(args, credentials) {
|
|
121
|
+
await args.authStore.save(credentials);
|
|
122
|
+
await restoreSignalStore(args.signalStore, credentials);
|
|
123
|
+
}
|