zapo-js 1.0.0 → 1.0.1

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.
Files changed (118) hide show
  1. package/README.md +1 -1
  2. package/dist/appstate/crypto/WaAppStateCrypto.js +1 -1
  3. package/dist/appstate/parsers/encoding.js +1 -1
  4. package/dist/appstate/parsers/response-parser.js +1 -1
  5. package/dist/appstate/sync/WaAppStateSyncClient.js +2 -2
  6. package/dist/appstate-spec.js +1 -1
  7. package/dist/auth/credentials-flow.js +2 -2
  8. package/dist/auth/pairing/WaPairingFlow.js +2 -2
  9. package/dist/auth/pairing/pairing-code-crypto.js +1 -1
  10. package/dist/client/WaClient.js +2 -2
  11. package/dist/client/WaClientFactory.js +3 -1
  12. package/dist/client/coordinators/WaAppStateMutationCoordinator.js +2 -2
  13. package/dist/client/coordinators/WaBotCoordinator.js +1 -1
  14. package/dist/client/coordinators/WaMessageCoordinator.js +1 -1
  15. package/dist/client/coordinators/WaMessageDispatchCoordinator.js +3 -3
  16. package/dist/client/coordinators/WaRetryCoordinator.js +1 -1
  17. package/dist/client/coordinators/WaStatusCoordinator.js +1 -1
  18. package/dist/client/coordinators/WaStreamControlCoordinator.js +2 -3
  19. package/dist/client/events/appstate-mutation.js +1 -1
  20. package/dist/client/events/business.js +1 -1
  21. package/dist/client/media.js +2 -2
  22. package/dist/client/messaging/group-metadata.js +20 -9
  23. package/dist/client/messaging/key-protocol.js +1 -1
  24. package/dist/client/messaging/link-preview.js +1 -1
  25. package/dist/client/messaging/messages.js +2 -2
  26. package/dist/client/newsletter/content.js +1 -1
  27. package/dist/client/persistence/history-sync.js +1 -1
  28. package/dist/client/persistence/mailbox.js +1 -1
  29. package/dist/esm/client/WaClient.js +1 -1
  30. package/dist/esm/client/WaClientFactory.js +3 -1
  31. package/dist/esm/client/coordinators/WaStreamControlCoordinator.js +2 -3
  32. package/dist/esm/client/media.js +2 -2
  33. package/dist/esm/client/messaging/group-metadata.js +20 -9
  34. package/dist/esm/signal/api/SignalDeviceSyncApi.js +3 -1
  35. package/dist/esm/signal/registration/utils.js +3 -2
  36. package/dist/esm/store/locks/pre-key.lock.js +4 -1
  37. package/dist/index.js +4 -4
  38. package/dist/message/addons/link-preview/fetcher.js +1 -1
  39. package/dist/message/crypto/addon-crypto.js +2 -2
  40. package/dist/message/crypto/icdc.js +1 -1
  41. package/dist/message/crypto/reporting-token.js +2 -2
  42. package/dist/message/crypto/use-case-secret.js +1 -1
  43. package/dist/message/encode/content.js +1 -1
  44. package/dist/message/encode/padding.js +1 -1
  45. package/dist/message/kinds/bot.js +2 -2
  46. package/dist/message/kinds/newsletter.js +1 -1
  47. package/dist/message/primitives/incoming.js +1 -1
  48. package/dist/message/primitives/peer-data-operation.js +1 -1
  49. package/dist/protocol/bot.js +1 -1
  50. package/dist/retry/replay.js +1 -1
  51. package/dist/signal/api/SignalDeviceSyncApi.js +3 -1
  52. package/dist/signal/api/SignalDigestSyncApi.js +1 -1
  53. package/dist/signal/attestation/WaAdvSignature.js +1 -1
  54. package/dist/signal/group/SenderKeyChain.js +1 -1
  55. package/dist/signal/group/SenderKeyCodec.js +2 -2
  56. package/dist/signal/group/SenderKeyManager.js +2 -2
  57. package/dist/signal/group/encoding.js +1 -1
  58. package/dist/signal/registration/keygen.js +1 -1
  59. package/dist/signal/registration/utils.js +3 -2
  60. package/dist/signal/session/SignalProtocol.js +1 -1
  61. package/dist/signal/session/SignalRatchet.js +2 -2
  62. package/dist/signal/session/SignalSerializer.js +2 -2
  63. package/dist/signal/session/SignalSession.js +1 -1
  64. package/dist/signal/session/encoding.js +1 -1
  65. package/dist/store/locks/pre-key.lock.js +4 -1
  66. package/dist/transport/node/builders/global.js +1 -1
  67. package/dist/transport/node/helpers.js +1 -1
  68. package/dist/transport/node/mex/client.js +1 -1
  69. package/dist/transport/noise/WaClientPayload.js +2 -2
  70. package/dist/transport/noise/WaMobileClientPayload.js +1 -1
  71. package/dist/transport/noise/WaNoiseCert.js +2 -2
  72. package/dist/transport/noise/WaNoiseHandshake.js +1 -1
  73. package/dist/transport/noise/WaNoiseSession.js +2 -2
  74. package/dist/transport/noise/WaNoiseSocket.js +1 -1
  75. package/dist/types/appstate/crypto/WaAppStateCrypto.d.ts +1 -1
  76. package/dist/types/appstate/parsers/response-parser.d.ts +1 -1
  77. package/dist/types/appstate/sync/WaAppStateSyncClient.d.ts +1 -1
  78. package/dist/types/appstate/types.d.ts +1 -1
  79. package/dist/types/appstate/utils.d.ts +1 -1
  80. package/dist/types/appstate-spec.d.ts +1 -1
  81. package/dist/types/auth/types.d.ts +1 -1
  82. package/dist/types/client/coordinators/WaAppStateMutationCoordinator.d.ts +2 -2
  83. package/dist/types/client/coordinators/WaBotCoordinator.d.ts +1 -1
  84. package/dist/types/client/coordinators/WaBroadcastListCoordinator.d.ts +1 -1
  85. package/dist/types/client/coordinators/WaMessageCoordinator.d.ts +1 -1
  86. package/dist/types/client/coordinators/WaMessageDispatchCoordinator.d.ts +1 -1
  87. package/dist/types/client/coordinators/WaStatusCoordinator.d.ts +1 -1
  88. package/dist/types/client/messaging/key-protocol.d.ts +1 -1
  89. package/dist/types/client/newsletter/admin.d.ts +1 -1
  90. package/dist/types/client/newsletter/mex.d.ts +1 -1
  91. package/dist/types/client/newsletter/parse.d.ts +1 -1
  92. package/dist/types/client/newsletter/types.d.ts +1 -1
  93. package/dist/types/client/persistence/history-sync.d.ts +1 -1
  94. package/dist/types/client/types.d.ts +2 -2
  95. package/dist/types/index.d.ts +6 -6
  96. package/dist/types/message/addons/link-preview/builder.d.ts +1 -1
  97. package/dist/types/message/addons/link-preview/types.d.ts +1 -1
  98. package/dist/types/message/context-info.d.ts +1 -1
  99. package/dist/types/message/crypto/addon-crypto.d.ts +1 -1
  100. package/dist/types/message/crypto/icdc.d.ts +1 -1
  101. package/dist/types/message/crypto/reporting-token.d.ts +1 -1
  102. package/dist/types/message/crypto/use-case-secret.d.ts +1 -1
  103. package/dist/types/message/encode/content.d.ts +1 -1
  104. package/dist/types/message/encode/device-sent.d.ts +1 -1
  105. package/dist/types/message/encode/media-payload.d.ts +1 -1
  106. package/dist/types/message/kinds/bot.d.ts +1 -1
  107. package/dist/types/message/kinds/sticker-pack.d.ts +1 -1
  108. package/dist/types/message/primitives/incoming.d.ts +1 -1
  109. package/dist/types/message/primitives/peer-data-operation.d.ts +1 -1
  110. package/dist/types/message/types.d.ts +1 -1
  111. package/dist/types/protocol/bot.d.ts +1 -1
  112. package/dist/types/signal/group/SenderKeyManager.d.ts +1 -1
  113. package/dist/types/signal/session/encoding.d.ts +1 -1
  114. package/dist/types/signal/types.d.ts +1 -1
  115. package/dist/types/transport/node/mex/client.d.ts +1 -1
  116. package/dist/types/transport/noise/WaMobileClientPayload.d.ts +1 -1
  117. package/dist/types/transport/noise/types.d.ts +1 -1
  118. package/package.json +1 -1
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.computeDeviceKeyHash = computeDeviceKeyHash;
4
4
  exports.resolveIcdcMeta = resolveIcdcMeta;
5
5
  exports.injectDeviceListMetadata = injectDeviceListMetadata;
6
- const _crypto_1 = require("../../crypto/index.js");
6
+ const _crypto_1 = require("../../crypto");
7
7
  const jid_1 = require("../../protocol/jid");
8
8
  const ICDC_DEFAULT_HASH_LENGTH = 8;
9
9
  const ICDC_FRESHNESS_THRESHOLD_MS = 30 * 24 * 60 * 60 * 1000;
@@ -2,8 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.WA_REPORTING_TOKEN_VERSION = void 0;
4
4
  exports.buildReportingTokenArtifacts = buildReportingTokenArtifacts;
5
- const _crypto_1 = require("../../crypto/index.js");
6
- const _proto_1 = require("../../proto.js");
5
+ const _crypto_1 = require("../../crypto");
6
+ const _proto_1 = require("../../proto");
7
7
  const bytes_1 = require("../../util/bytes");
8
8
  const WA_REPORTING_TOKEN_BYTES = 16;
9
9
  const WA_REPORTING_TOKEN_KEY_BYTES = 32;
@@ -4,7 +4,7 @@ exports.WA_USE_CASE_SECRET_MODIFICATION_TYPES = exports.WA_MESSAGE_SECRET_BYTES
4
4
  exports.assertMessageSecret = assertMessageSecret;
5
5
  exports.ensureMessageSecret = ensureMessageSecret;
6
6
  exports.createUseCaseSecret = createUseCaseSecret;
7
- const _crypto_1 = require("../../crypto/index.js");
7
+ const _crypto_1 = require("../../crypto");
8
8
  const bytes_1 = require("../../util/bytes");
9
9
  exports.WA_MESSAGE_SECRET_BYTES = 32;
10
10
  exports.WA_USE_CASE_SECRET_MODIFICATION_TYPES = Object.freeze({
@@ -23,7 +23,7 @@ exports.resolveEditAttr = resolveEditAttr;
23
23
  exports.resolveEncMediaType = resolveEncMediaType;
24
24
  exports.resolveButtonAddonKind = resolveButtonAddonKind;
25
25
  exports.resolveMetaAttrs = resolveMetaAttrs;
26
- const _proto_1 = require("../../proto.js");
26
+ const _proto_1 = require("../../proto");
27
27
  const constants_1 = require("../../protocol/constants");
28
28
  /**
29
29
  * Returns the content-type key of a message - `'conversation'`,
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.writeRandomPadMax16 = writeRandomPadMax16;
4
4
  exports.unpadPkcs7 = unpadPkcs7;
5
- const _crypto_1 = require("../../crypto/index.js");
5
+ const _crypto_1 = require("../../crypto");
6
6
  const RANDOM_PAD_MAX_16_MASK = 0x0f;
7
7
  const PAD_SEED_BATCH_SIZE = 1024;
8
8
  let padSeedBuffer = null;
@@ -7,10 +7,10 @@ exports.attachBotMetadata = attachBotMetadata;
7
7
  exports.attachBotThread = attachBotThread;
8
8
  exports.extractInvokedBotJid = extractInvokedBotJid;
9
9
  exports.buildBotInvokeProtoCopy = buildBotInvokeProtoCopy;
10
- const _crypto_1 = require("../../crypto/index.js");
10
+ const _crypto_1 = require("../../crypto");
11
11
  const addon_crypto_1 = require("../crypto/addon-crypto");
12
12
  const use_case_secret_1 = require("../crypto/use-case-secret");
13
- const _proto_1 = require("../../proto.js");
13
+ const _proto_1 = require("../../proto");
14
14
  const bot_1 = require("../../protocol/bot");
15
15
  const jid_1 = require("../../protocol/jid");
16
16
  const bytes_1 = require("../../util/bytes");
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.processNewsletterLiveUpdates = processNewsletterLiveUpdates;
4
4
  exports.processIncomingNewsletterMessage = processIncomingNewsletterMessage;
5
5
  const context_info_1 = require("../context-info");
6
- const _proto_1 = require("../../proto.js");
6
+ const _proto_1 = require("../../proto");
7
7
  const constants_1 = require("../../protocol/constants");
8
8
  const message_1 = require("../../protocol/message");
9
9
  const helpers_1 = require("../../transport/node/helpers");
@@ -6,7 +6,7 @@ const context_info_1 = require("../context-info");
6
6
  const device_sent_1 = require("../encode/device-sent");
7
7
  const padding_1 = require("../encode/padding");
8
8
  const newsletter_1 = require("../kinds/newsletter");
9
- const _proto_1 = require("../../proto.js");
9
+ const _proto_1 = require("../../proto");
10
10
  const constants_1 = require("../../protocol/constants");
11
11
  const jid_1 = require("../../protocol/jid");
12
12
  const global_1 = require("../../transport/node/builders/global");
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createPeerDataOperationRequester = createPeerDataOperationRequester;
4
- const _proto_1 = require("../../proto.js");
4
+ const _proto_1 = require("../../proto");
5
5
  const jid_1 = require("../../protocol/jid");
6
6
  const collections_1 = require("../../util/collections");
7
7
  const DEFAULT_TIMEOUT_MS = 30000;
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.WA_BOT_DEFAULT_CAPABILITIES = exports.WA_BOT_RENDERING_PIXEL_DENSITY = exports.WA_BLOKS_VERSIONING_ID = exports.WA_BOT_MSG_SECRET_BYTES = exports.WA_BOT_HKDF_INFO = exports.WA_META_NODE_ATTRS_BOT = exports.WA_BOT_NODE_ATTRS = exports.WA_BOT_KNOWN_JIDS = exports.WA_BIZ_BOT_TYPES = exports.WA_BOT_MSG_BODY_TYPES = exports.WA_BOT_MSG_EDIT_TYPES = void 0;
4
4
  exports.resolveBotFbidJid = resolveBotFbidJid;
5
- const _proto_1 = require("../proto.js");
5
+ const _proto_1 = require("../proto");
6
6
  const defaults_1 = require("./defaults");
7
7
  const jid_1 = require("./jid");
8
8
  const bytes_1 = require("../util/bytes");
@@ -4,7 +4,7 @@ exports.WaRetryReplayService = void 0;
4
4
  const icdc_1 = require("../message/crypto/icdc");
5
5
  const device_sent_1 = require("../message/encode/device-sent");
6
6
  const padding_1 = require("../message/encode/padding");
7
- const _proto_1 = require("../proto.js");
7
+ const _proto_1 = require("../proto");
8
8
  const constants_1 = require("../protocol/constants");
9
9
  const jid_1 = require("../protocol/jid");
10
10
  const codec_1 = require("./codec");
@@ -234,7 +234,9 @@ class SignalDeviceSyncApi {
234
234
  {
235
235
  tag: constants_1.WA_NODE_TAGS.CONTACT,
236
236
  attrs: {},
237
- content: (0, jid_1.splitJid)(jid).user
237
+ // E.164 '+': without it the server normalizes under the
238
+ // account's country and resolves the wrong contact.
239
+ content: `+${(0, jid_1.splitJid)(jid).user}`
238
240
  }
239
241
  ]
240
242
  };
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SignalDigestSyncApi = void 0;
4
- const _crypto_1 = require("../../crypto/index.js");
4
+ const _crypto_1 = require("../../crypto");
5
5
  const keys_1 = require("../../crypto/core/keys");
6
6
  const constants_1 = require("../../protocol/constants");
7
7
  const codec_1 = require("../api/codec");
@@ -4,7 +4,7 @@ exports.ADV_PREFIX_HOSTED_ACCOUNT_SIGNATURE = exports.ADV_PREFIX_DEVICE_SIGNATUR
4
4
  exports.verifyDeviceIdentityAccountSignature = verifyDeviceIdentityAccountSignature;
5
5
  exports.generateDeviceSignature = generateDeviceSignature;
6
6
  exports.computeAdvIdentityHmac = computeAdvIdentityHmac;
7
- const _crypto_1 = require("../../crypto/index.js");
7
+ const _crypto_1 = require("../../crypto");
8
8
  const constants_1 = require("../attestation/constants");
9
9
  const bytes_1 = require("../../util/bytes");
10
10
  var constants_2 = require("../attestation/constants");
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.selectMessageKey = selectMessageKey;
4
4
  exports.deriveSenderKeyMsgKey = deriveSenderKeyMsgKey;
5
- const _crypto_1 = require("../../crypto/index.js");
5
+ const _crypto_1 = require("../../crypto");
6
6
  const constants_1 = require("../constants");
7
7
  const bytes_1 = require("../../util/bytes");
8
8
  // eslint-disable-next-line @typescript-eslint/require-await
@@ -2,8 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.parseDistributionPayload = parseDistributionPayload;
4
4
  exports.parseSenderKeyMessage = parseSenderKeyMessage;
5
- const _crypto_1 = require("../../crypto/index.js");
6
- const _proto_1 = require("../../proto.js");
5
+ const _crypto_1 = require("../../crypto");
6
+ const _proto_1 = require("../../proto");
7
7
  const constants_1 = require("../api/constants");
8
8
  const constants_2 = require("../constants");
9
9
  const bytes_1 = require("../../util/bytes");
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SenderKeyManager = void 0;
4
- const _crypto_1 = require("../../crypto/index.js");
4
+ const _crypto_1 = require("../../crypto");
5
5
  const StoreLock_1 = require("../../infra/perf/StoreLock");
6
- const _proto_1 = require("../../proto.js");
6
+ const _proto_1 = require("../../proto");
7
7
  const jid_1 = require("../../protocol/jid");
8
8
  const constants_1 = require("../api/constants");
9
9
  const constants_2 = require("../constants");
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.encodeSenderKeyRecord = encodeSenderKeyRecord;
4
4
  exports.decodeSenderKeyRecord = decodeSenderKeyRecord;
5
5
  exports.decodeSenderKeyDistributionRow = decodeSenderKeyDistributionRow;
6
- const _proto_1 = require("../../proto.js");
6
+ const _proto_1 = require("../../proto");
7
7
  const coercion_1 = require("../../util/coercion");
8
8
  /** Serializes a {@link SenderKeyRecord} into the Signal `SenderKeyRecordStructure` protobuf. */
9
9
  function encodeSenderKeyRecord(record) {
@@ -4,7 +4,7 @@ exports.generateRegistrationInfo = generateRegistrationInfo;
4
4
  exports.generatePreKeyPair = generatePreKeyPair;
5
5
  exports.generateSignedPreKey = generateSignedPreKey;
6
6
  exports.generateRegistrationId = generateRegistrationId;
7
- const _crypto_1 = require("../../crypto/index.js");
7
+ const _crypto_1 = require("../../crypto");
8
8
  const keys_1 = require("../../crypto/core/keys");
9
9
  const X25519_1 = require("../../crypto/curves/X25519");
10
10
  /**
@@ -16,8 +16,9 @@ async function createAndStoreInitialKeys(store, preKeyStore) {
16
16
  // Keep writes ordered so partial commit failures don't leave split registration bootstrap state.
17
17
  await store.setRegistrationInfo(registrationInfo);
18
18
  await store.setSignedPreKey(signedPreKey);
19
- // eslint-disable-next-line @typescript-eslint/require-await
20
- await preKeyStore.getOrGenSinglePreKey(async () => firstPreKey);
19
+ // putPreKey (idempotent), not getOrGenSinglePreKey: a fixed-keyId generator
20
+ // collides with a stale keyId 1 and would spin forever inside getOrGen*.
21
+ await preKeyStore.putPreKey(firstPreKey);
21
22
  return {
22
23
  registrationInfo,
23
24
  signedPreKey,
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SignalProtocol = void 0;
4
- const _crypto_1 = require("../../crypto/index.js");
4
+ const _crypto_1 = require("../../crypto");
5
5
  const ConsoleLogger_1 = require("../../infra/log/ConsoleLogger");
6
6
  const StoreLock_1 = require("../../infra/perf/StoreLock");
7
7
  const jid_1 = require("../../protocol/jid");
@@ -5,8 +5,8 @@ exports.selectMessageKey = selectMessageKey;
5
5
  exports.encryptMsg = encryptMsg;
6
6
  exports.decryptMsg = decryptMsg;
7
7
  exports.decryptMsgFromSession = decryptMsgFromSession;
8
- const _crypto_1 = require("../../crypto/index.js");
9
- const _proto_1 = require("../../proto.js");
8
+ const _crypto_1 = require("../../crypto");
9
+ const _proto_1 = require("../../proto");
10
10
  const constants_1 = require("../constants");
11
11
  const encoding_1 = require("../session/encoding");
12
12
  const SignalSession_1 = require("../session/SignalSession");
@@ -4,8 +4,8 @@ exports.deserializeMsg = deserializeMsg;
4
4
  exports.deserializePkMsg = deserializePkMsg;
5
5
  exports.requireSignedPreKey = requireSignedPreKey;
6
6
  exports.requirePreKey = requirePreKey;
7
- const _crypto_1 = require("../../crypto/index.js");
8
- const _proto_1 = require("../../proto.js");
7
+ const _crypto_1 = require("../../crypto");
8
+ const _proto_1 = require("../../proto");
9
9
  const constants_1 = require("../constants");
10
10
  function deserializeMsg(versionContentMac) {
11
11
  const content = (0, _crypto_1.readVersionedContent)(versionContentMac, constants_1.SIGNAL_VERSION, constants_1.SIGNAL_MAC_SIZE);
@@ -9,7 +9,7 @@ exports.calculateRatchet = calculateRatchet;
9
9
  exports.generateSerializedKeyPair = generateSerializedKeyPair;
10
10
  exports.toSerializedKeyPair = toSerializedKeyPair;
11
11
  exports.ecdh = ecdh;
12
- const _crypto_1 = require("../../crypto/index.js");
12
+ const _crypto_1 = require("../../crypto");
13
13
  const constants_1 = require("../constants");
14
14
  const encoding_1 = require("../session/encoding");
15
15
  const bytes_1 = require("../../util/bytes");
@@ -8,7 +8,7 @@ exports.decodeSignalSessionSnapshot = decodeSignalSessionSnapshot;
8
8
  exports.encodeSignalSessionRecord = encodeSignalSessionRecord;
9
9
  exports.decodeSignalSessionRecord = decodeSignalSessionRecord;
10
10
  exports.decodeSignalRemoteIdentity = decodeSignalRemoteIdentity;
11
- const _proto_1 = require("../../proto.js");
11
+ const _proto_1 = require("../../proto");
12
12
  const bytes_1 = require("../../util/bytes");
13
13
  const coercion_1 = require("../../util/coercion");
14
14
  function encodeSignalSessionSnapshot(session) {
@@ -6,6 +6,9 @@ const StoreLock_1 = require("../../infra/perf/StoreLock");
6
6
  const WA_PREKEY_KEY = 'prekey:prekeys';
7
7
  const WA_PREKEY_SERVER_KEY = 'prekey:serverHasPreKeys';
8
8
  const WA_PREKEY_CLEAR_KEY = 'prekey:clear';
9
+ // consume is independent of the counter/generation and atomic in the store, so it
10
+ // uses a per-id key instead of WA_PREKEY_KEY: no queueing behind generation/upload.
11
+ const WA_PREKEY_CONSUME_PREFIX = 'prekey:consume:';
9
12
  function withPreKeyLock(store) {
10
13
  const lock = new StoreLock_1.StoreLock();
11
14
  const gate = new SharedExclusiveGate_1.SharedExclusiveGate();
@@ -15,7 +18,7 @@ function withPreKeyLock(store) {
15
18
  getOrGenPreKeys: (count, generator) => gate.runShared(() => lock.run(WA_PREKEY_KEY, () => store.getOrGenPreKeys(count, generator))),
16
19
  getPreKeyById: (keyId) => gate.runShared(() => store.getPreKeyById(keyId)),
17
20
  getPreKeysById: (keyIds) => gate.runShared(() => store.getPreKeysById(keyIds)),
18
- consumePreKeyById: (keyId) => gate.runShared(() => lock.run(WA_PREKEY_KEY, () => store.consumePreKeyById(keyId))),
21
+ consumePreKeyById: (keyId) => gate.runShared(() => lock.run(`${WA_PREKEY_CONSUME_PREFIX}${keyId}`, () => store.consumePreKeyById(keyId))),
19
22
  getOrGenSinglePreKey: (generator) => gate.runShared(() => lock.run(WA_PREKEY_KEY, () => store.getOrGenSinglePreKey(generator))),
20
23
  markKeyAsUploaded: (keyId) => gate.runShared(() => lock.run(WA_PREKEY_KEY, () => store.markKeyAsUploaded(keyId))),
21
24
  setServerHasPreKeys: (value) => gate.runShared(() => lock.run(WA_PREKEY_SERVER_KEY, () => store.setServerHasPreKeys(value))),
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.buildAckNode = buildAckNode;
4
4
  exports.buildReceiptNode = buildReceiptNode;
5
5
  exports.buildIqResultNode = buildIqResultNode;
6
- const _protocol_1 = require("../../../protocol/index.js");
6
+ const _protocol_1 = require("../../../protocol");
7
7
  const jid_1 = require("../../../protocol/jid");
8
8
  function buildListItemsNode(ids) {
9
9
  if (ids.length < 2) {
@@ -15,7 +15,7 @@ exports.getNodeTextContent = getNodeTextContent;
15
15
  exports.decodeNodeContentBase64OrBytes = decodeNodeContentBase64OrBytes;
16
16
  exports.createNodeIdGenerator = createNodeIdGenerator;
17
17
  exports.createMobileNodeIdGenerator = createMobileNodeIdGenerator;
18
- const _crypto_1 = require("../../crypto/index.js");
18
+ const _crypto_1 = require("../../crypto");
19
19
  const bytes_1 = require("../../util/bytes");
20
20
  const EMPTY_NODE_CHILDREN = Object.freeze([]);
21
21
  const EMPTY_NODE_TAGS = Object.freeze([]);
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.runMexQuery = runMexQuery;
4
4
  exports.dispatchMexQuery = dispatchMexQuery;
5
- const _mex_1 = require("../../../mex.js");
5
+ const _mex_1 = require("../../../mex");
6
6
  const constants_1 = require("../../../protocol/constants");
7
7
  const helpers_1 = require("../../node/helpers");
8
8
  const argo_decoder_1 = require("../../node/mex/argo-decoder");
@@ -4,9 +4,9 @@ exports.buildLoginPayload = buildLoginPayload;
4
4
  exports.buildRegistrationPayload = buildRegistrationPayload;
5
5
  const node_crypto_1 = require("node:crypto");
6
6
  const primitives_1 = require("../../crypto/core/primitives");
7
- const _proto_1 = require("../../proto.js");
7
+ const _proto_1 = require("../../proto");
8
8
  const bytes_1 = require("../../util/bytes");
9
- const _version_spec_1 = require("../../version-spec.js");
9
+ const _version_spec_1 = require("../../version-spec");
10
10
  function parseVersion(versionBase) {
11
11
  const [p = '2', s = '3000', t = '0'] = versionBase.split('.');
12
12
  const primary = Number.parseInt(p, 10);
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.buildMobileLoginPayload = buildMobileLoginPayload;
4
4
  const node_crypto_1 = require("node:crypto");
5
- const _proto_1 = require("../../proto.js");
5
+ const _proto_1 = require("../../proto");
6
6
  function parseAppVersion(version) {
7
7
  const parts = version.split('.');
8
8
  const at = (i) => {
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.verifyNoiseCertificateChain = verifyNoiseCertificateChain;
4
- const _crypto_1 = require("../../crypto/index.js");
5
- const _proto_1 = require("../../proto.js");
4
+ const _crypto_1 = require("../../crypto");
5
+ const _proto_1 = require("../../proto");
6
6
  const constants_1 = require("../noise/constants");
7
7
  const bytes_1 = require("../../util/bytes");
8
8
  const primitives_1 = require("../../util/primitives");
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.WaNoiseHandshake = void 0;
4
- const _crypto_1 = require("../../crypto/index.js");
4
+ const _crypto_1 = require("../../crypto");
5
5
  const WaNoiseSocket_1 = require("../noise/WaNoiseSocket");
6
6
  const bytes_1 = require("../../util/bytes");
7
7
  /**
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.WaNoiseSession = void 0;
4
- const _crypto_1 = require("../../crypto/index.js");
4
+ const _crypto_1 = require("../../crypto");
5
5
  const ConsoleLogger_1 = require("../../infra/log/ConsoleLogger");
6
- const _proto_1 = require("../../proto.js");
6
+ const _proto_1 = require("../../proto");
7
7
  const constants_1 = require("../../protocol/constants");
8
8
  const constants_2 = require("../noise/constants");
9
9
  const WaClientPayload_1 = require("../noise/WaClientPayload");
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.WaNoiseSocket = void 0;
4
4
  const node_crypto_1 = require("node:crypto");
5
- const _crypto_1 = require("../../crypto/index.js");
5
+ const _crypto_1 = require("../../crypto");
6
6
  /**
7
7
  * Post-handshake symmetric channel: applies AES-GCM with per-direction
8
8
  * 12-byte nonces (counter in the trailing 4 bytes) using a per-instance
@@ -1,4 +1,4 @@
1
- import { type Proto } from '../..';
1
+ import { type Proto } from '../../proto';
2
2
  interface WaAppStateDerivedKeys {
3
3
  readonly indexHmacKey: Uint8Array;
4
4
  readonly valueEncryptionAesKey: Uint8Array;
@@ -1,5 +1,5 @@
1
1
  import type { AppStateCollectionName, AppStateCollectionState } from '../types';
2
- import { type Proto } from '../..';
2
+ import { type Proto } from '../../proto';
3
3
  import type { BinaryNode } from '../../transport/types';
4
4
  export interface CollectionResponsePayload {
5
5
  readonly collection: AppStateCollectionName;
@@ -1,6 +1,6 @@
1
1
  import type { WaAppStateMissingKeysEvent, WaAppStateSyncKey, WaAppStateSyncOptions, WaAppStateSyncResult } from '../types';
2
2
  import type { Logger } from '../../infra/log/types';
3
- import { type Proto } from '../..';
3
+ import { type Proto } from '../../proto';
4
4
  import type { WaAppStateStore } from '../../store/contracts/appstate.store';
5
5
  import type { BinaryNode } from '../../transport/types';
6
6
  import type { ServerClock } from '../../util/clock';
@@ -1,4 +1,4 @@
1
- import type { Proto } from '..';
1
+ import type { Proto } from '../proto';
2
2
  import type { WA_APP_STATE_COLLECTION_STATES, WA_APP_STATE_COLLECTIONS } from '../protocol/constants';
3
3
  export type AppStateCollectionName = (typeof WA_APP_STATE_COLLECTIONS)[keyof typeof WA_APP_STATE_COLLECTIONS];
4
4
  export type AppStateCollectionState = (typeof WA_APP_STATE_COLLECTION_STATES)[keyof typeof WA_APP_STATE_COLLECTION_STATES];
@@ -1,6 +1,6 @@
1
1
  import type { AppStateCollectionName, WaAppStateSyncKey } from './types';
2
2
  import type { WaMediaTransferClient } from '../media/transfer/WaMediaTransferClient';
3
- import type { Proto } from '..';
3
+ import type { Proto } from '../proto';
4
4
  /**
5
5
  * Returns `value` typed as a known {@link AppStateCollectionName}, or `null`
6
6
  * when the string is unrecognized.
@@ -1,4 +1,4 @@
1
- import { proto, type Proto } from '.';
1
+ import { proto, type Proto } from './proto';
2
2
  import { WA_APPSTATE_SCHEMAS as RAW_WA_APPSTATE_SCHEMAS, type WaAppstateActionKey, type WaAppstateSchema, type WaAppstateValueEnumFields } from '../spec/appstate';
3
3
  export { WA_APPSTATE_COLLECTIONS, WA_APPSTATE_SCHEMAS } from '../spec/appstate';
4
4
  export type { WaAppstateActionKey, WaAppstateCollection, WaAppstateIndexArgs, WaAppstateIndexPart, WaAppstateIndexValueOf, WaAppstateSchema, WaAppstateScope, WaAppstateValueEnumFields } from '../spec/appstate';
@@ -1,5 +1,5 @@
1
1
  import type { SignalKeyPair } from '../crypto/curves/types';
2
- import type { Proto } from '..';
2
+ import type { Proto } from '../proto';
3
3
  import type { RegistrationInfo, SignedPreKeyRecord } from '../signal/types';
4
4
  import type { WaMobileTransportDeviceInfo } from '../transport/noise/WaMobileClientPayload';
5
5
  import type { WaCommsConfig, WaProxyTransport } from '../transport/types';
@@ -1,10 +1,10 @@
1
1
  import type { WaAppStateSyncClient } from '../../appstate/sync/WaAppStateSyncClient';
2
2
  import type { WaAppStateSyncOptions, WaAppStateSyncResult } from '../../appstate/types';
3
- import { type DataForKey, type WaAppstateActionKey, type WaAppstateIndexArgs } from '../..';
3
+ import { type DataForKey, type WaAppstateActionKey, type WaAppstateIndexArgs } from '../../appstate-spec';
4
4
  import type { WaAppStateMessageKey, WaAppStateMutationEvent, WaClearChatOptions, WaDeleteChatOptions, WaDeleteMessageForMeOptions } from '../types';
5
5
  import type { Logger } from '../../infra/log/types';
6
6
  import type { WaMediaTransferClient } from '../../media/transfer/WaMediaTransferClient';
7
- import { proto, type Proto } from '../..';
7
+ import { proto, type Proto } from '../../proto';
8
8
  import type { WaStoredContactRecord } from '../../store/contracts/contact.store';
9
9
  import type { WaMessageStore } from '../../store/contracts/message.store';
10
10
  import type { ServerClock } from '../../util/clock';
@@ -2,7 +2,7 @@ import type { WaAuthCredentials } from '../../auth/types';
2
2
  import type { WaIncomingBotChunkEvent, WaIncomingMessageEvent, WaSendMessageOptions } from '../types';
3
3
  import type { Logger } from '../../infra/log/types';
4
4
  import type { WaMessageBuildResult, WaMessagePublishResult, WaSendMessageContent } from '../../message/types';
5
- import { proto } from '../..';
5
+ import { proto } from '../../proto';
6
6
  import type { WaMessageSecretStore } from '../../store/contracts/message-secret.store';
7
7
  import type { WaMessageStore } from '../../store/contracts/message.store';
8
8
  import type { BinaryNode } from '../../transport/types';
@@ -1,7 +1,7 @@
1
1
  import type { WaAppStateMutationCoordinator, WaSetBroadcastListInput } from '../coordinators/WaAppStateMutationCoordinator';
2
2
  import type { WaSendMessageOptions } from '../types';
3
3
  import type { WaMessageBuildResult, WaMessagePublishResult, WaSendMessageContent } from '../../message/types';
4
- import type { Proto } from '../..';
4
+ import type { Proto } from '../../proto';
5
5
  export interface WaBroadcastListCoordinatorOptions {
6
6
  readonly appStateMutations: WaAppStateMutationCoordinator;
7
7
  readonly buildMessageContent: (content: WaSendMessageContent) => Promise<WaMessageBuildResult>;
@@ -6,7 +6,7 @@ import type { Logger } from '../../infra/log/types';
6
6
  import type { WaMediaTransferClient } from '../../media/transfer/WaMediaTransferClient';
7
7
  import type { PeerDataOperationRequester } from '../../message/primitives/peer-data-operation';
8
8
  import type { WaMessagePublishResult, WaSendMessageContent, WaSendReceiptEventOptions, WaSendReceiptOptions } from '../../message/types';
9
- import { type Proto } from '../..';
9
+ import { type Proto } from '../../proto';
10
10
  import type { WaMessageSecretStore } from '../../store/contracts/message-secret.store';
11
11
  import type { WaMessageStore } from '../../store/contracts/message.store';
12
12
  import { type WaMexQuerySocket } from '../../transport/node/mex/client';
@@ -9,7 +9,7 @@ import { type WaSendContextInfo } from '../../message/context-info';
9
9
  import { type IcdcMeta } from '../../message/crypto/icdc';
10
10
  import type { WaEncryptedMessageInput, WaMessageBuildResult, WaMessagePublishOptions, WaMessagePublishResult, WaSendMessageContent, WaSendReceiptInput } from '../../message/types';
11
11
  import type { WaMessageClient } from '../../message/WaMessageClient';
12
- import { type Proto } from '../..';
12
+ import { type Proto } from '../../proto';
13
13
  import { type WaStatusDistributionSetting } from '../../protocol/constants';
14
14
  import type { OutboundRetryTracker } from '../../retry/tracker';
15
15
  import type { SignalDeviceSyncApi } from '../../signal/api/SignalDeviceSyncApi';
@@ -1,7 +1,7 @@
1
1
  import type { WaAppStateMutationCoordinator, WaSetStatusPrivacyInput } from '../coordinators/WaAppStateMutationCoordinator';
2
2
  import type { WaSendMessageOptions } from '../types';
3
3
  import type { WaMessageBuildResult, WaMessagePublishResult, WaSendMessageContent } from '../../message/types';
4
- import { type Proto } from '../..';
4
+ import { type Proto } from '../../proto';
5
5
  import type { WaStatusDistributionSetting } from '../../protocol/status';
6
6
  export interface WaStatusCoordinatorOptions {
7
7
  readonly appStateMutations: WaAppStateMutationCoordinator;
@@ -3,7 +3,7 @@ import type { WaAuthCredentials } from '../../auth/types';
3
3
  import type { DeviceFanoutResolver } from '../messaging/fanout';
4
4
  import type { Logger } from '../../infra/log/types';
5
5
  import type { WaMessagePublishResult } from '../../message/types';
6
- import { type Proto } from '../..';
6
+ import { type Proto } from '../../proto';
7
7
  export type PublishProtocolMessageToDeviceFn = (deviceJid: string, protocolMessage: Proto.Message.IProtocolMessage, options?: {
8
8
  readonly id?: string;
9
9
  readonly pushPriority?: 'high' | 'high_force';
@@ -1,6 +1,6 @@
1
1
  import { type WaNewsletterMexDeps } from '../newsletter/mex';
2
2
  import type { WaNewsletterAdminInfo, WaNewsletterAdminInviteInput, WaNewsletterAdminInviteResult, WaNewsletterCapability, WaNewsletterCapabilityExposure, WaNewsletterCreateInput, WaNewsletterFollowersOptions, WaNewsletterFollowersPage, WaNewsletterInsightMetricRequest, WaNewsletterMetadata, WaNewsletterPollVoter, WaNewsletterReactionSenders, WaNewsletterUpdateInput } from '../newsletter/types';
3
- import type { WaMexOperationResponses } from '../..';
3
+ import type { WaMexOperationResponses } from '../../mex';
4
4
  import { type WaTosQueryResult } from '../../transport/node/builders/tos';
5
5
  /** Admin-side newsletter operations (create/update/delete + insights). */
6
6
  export interface WaNewsletterAdminOps {
@@ -1,5 +1,5 @@
1
1
  import type { Logger } from '../../infra/log/types';
2
- import type { WaMexOperationResponses, WaMexOperationVariables } from '../..';
2
+ import type { WaMexOperationResponses, WaMexOperationVariables } from '../../mex';
3
3
  import type { AbPropName } from '../../protocol/abprops';
4
4
  import { type WaMexOpKey, type WaMexQuerySocket } from '../../transport/node/mex/client';
5
5
  import type { BinaryNode } from '../../transport/types';
@@ -1,5 +1,5 @@
1
1
  import type { WaNewsletterAdminInfo, WaNewsletterAdminInviteResult, WaNewsletterCapability, WaNewsletterDehydratedMetadata, WaNewsletterDirectoryCategoryPreview, WaNewsletterDirectoryResults, WaNewsletterFollowersPage, WaNewsletterMetadata, WaNewsletterPollVoter, WaNewsletterReactionSenders } from '../newsletter/types';
2
- import type { WaMexOperationResponses } from '../..';
2
+ import type { WaMexOperationResponses } from '../../mex';
3
3
  type WaNewsletterMetadataEnvelope = NonNullable<WaMexOperationResponses['FetchNewsletter']['xwa2_newsletter']>;
4
4
  export declare function parseNewsletterMetadata(envelope: WaNewsletterMetadataEnvelope | null | undefined): WaNewsletterMetadata;
5
5
  export declare function parseAdminInfo(data: WaMexOperationResponses['FetchNewsletterAdminInfo'] | null): WaNewsletterAdminInfo;
@@ -1,6 +1,6 @@
1
1
  import type { WaSendContextInfo } from '../../message/context-info';
2
2
  import type { WaMessagePublishResult } from '../../message/types';
3
- import type { WaMexOperationResponses } from '../..';
3
+ import type { WaMexOperationResponses } from '../../mex';
4
4
  import type { WA_NEWSLETTER_VIEW_ROLES, WaNewsletterRole, WaNewsletterStateType } from '../../protocol/newsletter';
5
5
  export type WaNewsletterCapability = NonNullable<NonNullable<WaMexOperationResponses['FetchNewsletterAdminCapabilities']['xwa2_newsletter_admin']>['capabilities']>[number];
6
6
  export interface WaNewsletterPicture {
@@ -2,7 +2,7 @@ import type { WriteBehindPersistence } from '../persistence/WriteBehindPersisten
2
2
  import type { WaClientEventMap } from '../types';
3
3
  import type { Logger } from '../../infra/log/types';
4
4
  import type { WaMediaTransferClient } from '../../media/transfer/WaMediaTransferClient';
5
- import { type Proto } from '../..';
5
+ import { type Proto } from '../../proto';
6
6
  interface WaHistorySyncDeps {
7
7
  readonly logger: Logger;
8
8
  readonly mediaTransfer: WaMediaTransferClient;
@@ -1,5 +1,5 @@
1
1
  import type { AppStateCollectionName } from '../appstate/types';
2
- import type { DataForKey, WaAppstateActionKey, WaAppstateIndexArgs } from '..';
2
+ import type { DataForKey, WaAppstateActionKey, WaAppstateIndexArgs } from '../appstate-spec';
3
3
  import type { WaAuthClientOptions, WaAuthCredentials, WaAuthDangerousOptions, WaAuthSocketOptions } from '../auth/types';
4
4
  import type { WaCallGroupParticipant, WaCallType } from './events/call';
5
5
  import type { IncomingPresenceType, PresenceLastSeen } from './events/presence';
@@ -8,7 +8,7 @@ import type { WaLinkPreviewOptions } from '../message/addons/link-preview/types'
8
8
  import type { WaQuoteRef, WaSendContextInfo } from '../message/context-info';
9
9
  import type { WaDecodedAddon } from '../message/crypto/addon-crypto';
10
10
  import type { WaMessageKey, WaMessagePublishOptions, WaMessageRef, WaSendEditKey } from '../message/types';
11
- import type { Proto } from '..';
11
+ import type { Proto } from '../proto';
12
12
  import type { WaBotMsgEditType } from '../protocol/bot';
13
13
  import type { WaBusinessHoursDay, WaBusinessHoursMode } from '../protocol/business';
14
14
  import type { WaConnectionCode, WaConnectionOpenReason, WaDisconnectReason } from '../protocol/stream';