@oxidezap/baileyrs 0.0.8 → 0.0.10

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 (26) hide show
  1. package/lib/Bridge/__tests__/dts-drift.test.js +1 -3
  2. package/lib/Bridge/__tests__/dts-drift.test.js.map +1 -1
  3. package/lib/Utils/__tests__/_legacy-store-fixtures.d.ts +73 -0
  4. package/lib/Utils/__tests__/_legacy-store-fixtures.d.ts.map +1 -0
  5. package/lib/Utils/__tests__/_legacy-store-fixtures.js +113 -0
  6. package/lib/Utils/__tests__/_legacy-store-fixtures.js.map +1 -0
  7. package/lib/Utils/__tests__/wrap-legacy-store-coverage.test.d.ts +10 -0
  8. package/lib/Utils/__tests__/wrap-legacy-store-coverage.test.d.ts.map +1 -0
  9. package/lib/Utils/__tests__/wrap-legacy-store-coverage.test.js +291 -0
  10. package/lib/Utils/__tests__/wrap-legacy-store-coverage.test.js.map +1 -0
  11. package/lib/Utils/__tests__/wrap-legacy-store-lid-mapping.test.d.ts +4 -19
  12. package/lib/Utils/__tests__/wrap-legacy-store-lid-mapping.test.d.ts.map +1 -1
  13. package/lib/Utils/__tests__/wrap-legacy-store-lid-mapping.test.js +31 -97
  14. package/lib/Utils/__tests__/wrap-legacy-store-lid-mapping.test.js.map +1 -1
  15. package/lib/Utils/__tests__/wrap-legacy-store-sender-key.test.d.ts +6 -27
  16. package/lib/Utils/__tests__/wrap-legacy-store-sender-key.test.d.ts.map +1 -1
  17. package/lib/Utils/__tests__/wrap-legacy-store-sender-key.test.js +49 -177
  18. package/lib/Utils/__tests__/wrap-legacy-store-sender-key.test.js.map +1 -1
  19. package/lib/Utils/__tests__/wrap-legacy-store-session.test.d.ts +10 -28
  20. package/lib/Utils/__tests__/wrap-legacy-store-session.test.d.ts.map +1 -1
  21. package/lib/Utils/__tests__/wrap-legacy-store-session.test.js +116 -299
  22. package/lib/Utils/__tests__/wrap-legacy-store-session.test.js.map +1 -1
  23. package/lib/Utils/wrap-legacy-store.d.ts.map +1 -1
  24. package/lib/Utils/wrap-legacy-store.js +142 -289
  25. package/lib/Utils/wrap-legacy-store.js.map +1 -1
  26. package/package.json +4 -1
@@ -1,76 +1,24 @@
1
1
  /**
2
- * Pin down the `lid_mapping` cross-impl gap. Same auth folder must work for
3
- * both libraries; the LID↔PN mapping table is what lets every send-side
4
- * lookup correctly route a PN JID to its LID device address.
5
- *
6
- * Bridge (`whatsapp-rust-bridge/src/js_backend.rs`):
7
- * • store: `lid_mapping`
8
- * • forward key: `lid:{lidUser}` → JSON `LidPnMappingEntry`
9
- * `{ lid, phone_number, created_at, updated_at, learning_source }`
10
- * • reverse key: `pn:{pnUser}` → raw bytes of the LID user (UTF-8)
11
- *
12
- * Upstream baileys (`Signal/lid-mapping.js`):
13
- * • store: `lid-mapping`
14
- * • forward key: bare `{pnUser}` → string `lidUser`
15
- * • reverse key: bare `{lidUser}_reverse` → string `pnUser`
16
- *
17
- * Without a converter, neither library finds the other's entries. Upstream
18
- * has a USYNC fallback (re-fetch from server) so it doesn't crash, but
19
- * costs an extra round-trip per cross-impl session start. These tests pin
20
- * down direct compatibility so the fallback is no longer needed.
2
+ * Cross-impl gap for `lid_mapping`:
3
+ * Bridge: `lid:{X}` JSON `LidPnMappingEntry`; `pn:{X}` bytes(LID).
4
+ * Upstream: bare `{pnUser}` string LID; `{lidUser}_reverse` string PN.
5
+ * Without conversion, upstream falls back to USYNC re-fetch on every cold start.
21
6
  */
22
7
  import { Buffer } from 'node:buffer';
23
8
  import { describe, test } from 'node:test';
24
- import { wrapLegacyStore } from "../wrap-legacy-store.js";
25
- import { initAuthCreds } from "../generics.js";
26
9
  import { expect } from "../../__tests__/expect.js";
27
- // ── Helpers ──────────────────────────────────────────────────────────────
28
- function makeMemKeys() {
29
- const data = {};
30
- return {
31
- raw: data,
32
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
33
- async get(type, ids) {
34
- const bucket = data[type] ?? {};
35
- const out = {};
36
- for (const id of ids)
37
- out[id] = bucket[id] ?? null;
38
- return out;
39
- },
40
- async set(updates) {
41
- for (const [type, bucket] of Object.entries(updates)) {
42
- data[type] ?? (data[type] = {});
43
- for (const [id, val] of Object.entries(bucket)) {
44
- if (val === null || val === undefined)
45
- delete data[type][id];
46
- else
47
- data[type][id] = val;
48
- }
49
- }
50
- }
51
- };
52
- }
53
- async function makeWrapped() {
54
- const creds = initAuthCreds();
55
- const keys = makeMemKeys();
56
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
57
- const state = { creds, keys: keys };
58
- const wrapped = await wrapLegacyStore(state, async () => { });
59
- return { wrapped, keys, creds };
60
- }
10
+ import { makeWrapped } from "./_legacy-store-fixtures.js";
61
11
  const PN_USER = '559980000003';
62
12
  const LID_USER = '100000037037034';
63
- // ── Tests ────────────────────────────────────────────────────────────────
64
- describe('wrap-legacy-store: lid_mapping key-name translation (cross-impl)', () => {
65
- test('bridge SET pn:{X} writes under upstream bare key {X}', async () => {
13
+ const ENC = (s) => new TextEncoder().encode(s);
14
+ describe('wrap-legacy-store: lid_mapping key-name translation', () => {
15
+ test('bridge SET pn:{X} upstream bare key {X}', async () => {
66
16
  const { wrapped, keys } = await makeWrapped();
67
- await wrapped.set('lid_mapping', `pn:${PN_USER}`, new TextEncoder().encode(LID_USER));
68
- // Upstream's `lid-mapping.js` looks here:
17
+ await wrapped.set('lid_mapping', `pn:${PN_USER}`, ENC(LID_USER));
69
18
  expect(keys.raw['lid-mapping']?.[PN_USER]).toBeDefined();
70
- // And NOT here (would be a passthrough leak):
71
19
  expect(keys.raw['lid-mapping']?.[`pn:${PN_USER}`]).toBeUndefined();
72
20
  });
73
- test('bridge SET lid:{X} writes under upstream key {X}_reverse', async () => {
21
+ test('bridge SET lid:{X} upstream key {X}_reverse', async () => {
74
22
  const { wrapped, keys } = await makeWrapped();
75
23
  const entry = {
76
24
  lid: LID_USER,
@@ -79,76 +27,62 @@ describe('wrap-legacy-store: lid_mapping key-name translation (cross-impl)', ()
79
27
  updated_at: 1700000000,
80
28
  learning_source: 'usync'
81
29
  };
82
- await wrapped.set('lid_mapping', `lid:${LID_USER}`, new TextEncoder().encode(JSON.stringify(entry)));
30
+ await wrapped.set('lid_mapping', `lid:${LID_USER}`, ENC(JSON.stringify(entry)));
83
31
  expect(keys.raw['lid-mapping']?.[`${LID_USER}_reverse`]).toBeDefined();
84
32
  expect(keys.raw['lid-mapping']?.[`lid:${LID_USER}`]).toBeUndefined();
85
33
  });
86
34
  });
87
- describe('wrap-legacy-store: lid_mapping value-byte translation (cross-impl)', () => {
88
- test('bridge-written pn mapping is loadable as a STRING for upstream lid-mapping', async () => {
35
+ describe('wrap-legacy-store: lid_mapping value-byte translation', () => {
36
+ test('bridge `pn:` write surfaces a STRING for upstream (not Buffer)', async () => {
89
37
  const { wrapped, keys } = await makeWrapped();
90
- await wrapped.set('lid_mapping', `pn:${PN_USER}`, new TextEncoder().encode(LID_USER));
91
- // Upstream's `_getLIDsForPNsImpl` does
92
- // `const stored = await this.keys.get('lid-mapping', [pnUser])` and
93
- // then `stored[pnUser]` — expects a STRING (not a Buffer).
94
- const stored = keys.raw['lid-mapping']?.[PN_USER];
95
- expect(typeof stored).toBe('string');
96
- expect(stored).toBe(LID_USER);
38
+ await wrapped.set('lid_mapping', `pn:${PN_USER}`, ENC(LID_USER));
39
+ // Upstream's `_getLIDsForPNsImpl` does `stored[pnUser]` → expects string.
40
+ expect(typeof keys.raw['lid-mapping']?.[PN_USER]).toBe('string');
41
+ expect(keys.raw['lid-mapping']?.[PN_USER]).toBe(LID_USER);
97
42
  });
98
- test('bridge-written lid entry surfaces phone_number STRING under {lid}_reverse for upstream', async () => {
43
+ test('bridge `lid:` write surfaces phone_number STRING under {lid}_reverse', async () => {
99
44
  const { wrapped, keys } = await makeWrapped();
100
45
  const entry = {
101
46
  lid: LID_USER,
102
47
  phone_number: PN_USER,
103
- created_at: 1700000000,
104
- updated_at: 1700000000,
48
+ created_at: 1,
49
+ updated_at: 1,
105
50
  learning_source: 'usync'
106
51
  };
107
- await wrapped.set('lid_mapping', `lid:${LID_USER}`, new TextEncoder().encode(JSON.stringify(entry)));
108
- const stored = keys.raw['lid-mapping']?.[`${LID_USER}_reverse`];
109
- expect(typeof stored).toBe('string');
110
- expect(stored).toBe(PN_USER);
52
+ await wrapped.set('lid_mapping', `lid:${LID_USER}`, ENC(JSON.stringify(entry)));
53
+ expect(keys.raw['lid-mapping']?.[`${LID_USER}_reverse`]).toBe(PN_USER);
111
54
  });
112
- test('bridge GET pn:{X} reads back upstream bare-string entry as raw LID bytes', async () => {
55
+ test('bridge GET pn:{X} reads upstream string back as raw LID bytes', async () => {
113
56
  const { wrapped, keys } = await makeWrapped();
114
- // Pretend upstream wrote first (real "swap from upstream" scenario).
115
57
  keys.raw['lid-mapping'] = { [PN_USER]: LID_USER };
116
58
  const out = (await wrapped.get('lid_mapping', `pn:${PN_USER}`));
117
- expect(out).not.toBe(null);
118
59
  expect(Buffer.from(out).toString('utf-8')).toBe(LID_USER);
119
60
  });
120
- test('bridge GET lid:{X} reconstructs synthetic LidPnMappingEntry from upstream {lid}_reverse', async () => {
61
+ test('bridge GET lid:{X} reconstructs synthetic LidPnMappingEntry from upstream', async () => {
121
62
  const { wrapped, keys } = await makeWrapped();
122
63
  keys.raw['lid-mapping'] = { [`${LID_USER}_reverse`]: PN_USER };
123
64
  const out = (await wrapped.get('lid_mapping', `lid:${LID_USER}`));
124
- expect(out).not.toBe(null);
125
65
  const parsed = JSON.parse(Buffer.from(out).toString('utf-8'));
126
66
  expect(parsed.lid).toBe(LID_USER);
127
67
  expect(parsed.phone_number).toBe(PN_USER);
128
- // Synthetic timestamps + source to satisfy bridge consumers without
129
- // requiring upstream to track them.
130
68
  expect(parsed.learning_source).toBe('wrap-legacy-store');
131
69
  expect(parsed.created_at).toBeGreaterThan(0);
132
- expect(parsed.updated_at).toBeGreaterThan(0);
133
70
  });
134
- test('round-trip: bridge SET both forward + reverse upstream-shape on disk → bridge GET both directions', async () => {
71
+ test('round-trip: bridge SET both directionsread both back', async () => {
135
72
  const { wrapped, keys } = await makeWrapped();
136
- // What the bridge does on `put_lid_mapping`: writes both lid: and pn:.
137
73
  const entry = {
138
74
  lid: LID_USER,
139
75
  phone_number: PN_USER,
140
- created_at: 1700000000,
141
- updated_at: 1700000000,
76
+ created_at: 1,
77
+ updated_at: 1,
142
78
  learning_source: 'peer_pn_message'
143
79
  };
144
- await wrapped.set('lid_mapping', `lid:${LID_USER}`, new TextEncoder().encode(JSON.stringify(entry)));
145
- await wrapped.set('lid_mapping', `pn:${PN_USER}`, new TextEncoder().encode(LID_USER));
146
- // On-disk: upstream-shape, both keys present.
80
+ await wrapped.set('lid_mapping', `lid:${LID_USER}`, ENC(JSON.stringify(entry)));
81
+ await wrapped.set('lid_mapping', `pn:${PN_USER}`, ENC(LID_USER));
147
82
  expect(keys.raw['lid-mapping']?.[PN_USER]).toBe(LID_USER);
148
83
  expect(keys.raw['lid-mapping']?.[`${LID_USER}_reverse`]).toBe(PN_USER);
149
- // Read back via bridge — both should resolve.
150
- const lidBack = (await wrapped.get('lid_mapping', `pn:${PN_USER}`));
151
- expect(Buffer.from(lidBack).toString('utf-8')).toBe(LID_USER);
84
+ const lidBack = Buffer.from((await wrapped.get('lid_mapping', `pn:${PN_USER}`))).toString('utf-8');
85
+ expect(lidBack).toBe(LID_USER);
152
86
  const entryBack = JSON.parse(Buffer.from((await wrapped.get('lid_mapping', `lid:${LID_USER}`))).toString('utf-8'));
153
87
  expect(entryBack.lid).toBe(LID_USER);
154
88
  expect(entryBack.phone_number).toBe(PN_USER);
@@ -1 +1 @@
1
- {"version":3,"file":"wrap-legacy-store-lid-mapping.test.js","sourceRoot":"","sources":["../../../src/Utils/__tests__/wrap-legacy-store-lid-mapping.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wrap-legacy-store-lid-mapping.test.js","sourceRoot":"","sources":["../../../src/Utils/__tests__/wrap-legacy-store-lid-mapping.test.ts"],"names":[],"mappings":"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"}
@@ -1,31 +1,10 @@
1
1
  /**
2
- * Pin down the sender_key cross-impl gap that broke the e2e handoff test
3
- * (`baileys-handoff.test-e2e.ts`, Phase 10). This is the fast unit-level
4
- * version: no socket, no mock server, in-memory keys store, deterministic.
5
- *
6
- * Two formats are at play:
7
- *
8
- * ── Bridge (Rust libsignal, what whatsapp-rust-bridge writes) ─────────
9
- * • store name: `sender_key`
10
- * • key (cache_key): `{group}:{user}[:jidDev]@{server}.{signalDev}`
11
- * e.g. "120363@g.us:100000037037034@lid.0"
12
- * • value: raw protobuf bytes of `waproto.SenderKeyRecordStructure`
13
- *
14
- * ── Upstream baileys (JS libsignal, what `useMultiFileAuthState` produces)
15
- * • store name: `sender-key` (hyphen, not underscore!)
16
- * • key (SenderKeyName.serialize): `{group}::{signalUser}::{deviceId}`
17
- * where signalUser = `${user}` for s.whatsapp.net (domainType 0)
18
- * or `${user}_${domainType}` for LID (1) / hosted (2) / etc.
19
- * e.g. "120363@g.us::100000037037034_1::0"
20
- * • value: `Buffer.from(JSON.stringify(senderKeyStates, BufferJSON.replacer))`
21
- * where each state is `{ senderKeyId, senderChainKey: { iteration, seed:Buffer },
22
- * senderSigningKey: { public:Buffer, private:Buffer }, senderMessageKeys: [] }`
23
- * and Buffer is replaced by `{ type:'Buffer', data:'<base64>' }` in the JSON.
24
- *
25
- * Both the **store name**, the **key shape**, AND the **value encoding**
26
- * differ. So the bridge-write cannot be read by upstream-load and vice-versa
27
- * unless `wrap-legacy-store` translates at the boundary. These tests pin
28
- * that contract — they MUST remain green for the handoff to work.
2
+ * Cross-impl gap for `sender_key`:
3
+ * Bridge: store `sender_key`, key `{group}:{user}[:dev]@{server}.{sig}`,
4
+ * value = protobuf `SenderKeyRecordStructure`.
5
+ * • Upstream: store `sender-key`, key `{group}::{signalUser}::{deviceId}`,
6
+ * value = `Buffer(JSON.stringify(states, BufferJSON.replacer), 'utf-8')`.
7
+ * Store name, key shape AND value encoding all differ.
29
8
  */
30
9
  export {};
31
10
  //# sourceMappingURL=wrap-legacy-store-sender-key.test.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"wrap-legacy-store-sender-key.test.d.ts","sourceRoot":"","sources":["../../../src/Utils/__tests__/wrap-legacy-store-sender-key.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG"}
1
+ {"version":3,"file":"wrap-legacy-store-sender-key.test.d.ts","sourceRoot":"","sources":["../../../src/Utils/__tests__/wrap-legacy-store-sender-key.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
@@ -1,212 +1,98 @@
1
1
  /**
2
- * Pin down the sender_key cross-impl gap that broke the e2e handoff test
3
- * (`baileys-handoff.test-e2e.ts`, Phase 10). This is the fast unit-level
4
- * version: no socket, no mock server, in-memory keys store, deterministic.
5
- *
6
- * Two formats are at play:
7
- *
8
- * ── Bridge (Rust libsignal, what whatsapp-rust-bridge writes) ─────────
9
- * • store name: `sender_key`
10
- * • key (cache_key): `{group}:{user}[:jidDev]@{server}.{signalDev}`
11
- * e.g. "120363@g.us:100000037037034@lid.0"
12
- * • value: raw protobuf bytes of `waproto.SenderKeyRecordStructure`
13
- *
14
- * ── Upstream baileys (JS libsignal, what `useMultiFileAuthState` produces)
15
- * • store name: `sender-key` (hyphen, not underscore!)
16
- * • key (SenderKeyName.serialize): `{group}::{signalUser}::{deviceId}`
17
- * where signalUser = `${user}` for s.whatsapp.net (domainType 0)
18
- * or `${user}_${domainType}` for LID (1) / hosted (2) / etc.
19
- * e.g. "120363@g.us::100000037037034_1::0"
20
- * • value: `Buffer.from(JSON.stringify(senderKeyStates, BufferJSON.replacer))`
21
- * where each state is `{ senderKeyId, senderChainKey: { iteration, seed:Buffer },
22
- * senderSigningKey: { public:Buffer, private:Buffer }, senderMessageKeys: [] }`
23
- * and Buffer is replaced by `{ type:'Buffer', data:'<base64>' }` in the JSON.
24
- *
25
- * Both the **store name**, the **key shape**, AND the **value encoding**
26
- * differ. So the bridge-write cannot be read by upstream-load and vice-versa
27
- * unless `wrap-legacy-store` translates at the boundary. These tests pin
28
- * that contract — they MUST remain green for the handoff to work.
2
+ * Cross-impl gap for `sender_key`:
3
+ * Bridge: store `sender_key`, key `{group}:{user}[:dev]@{server}.{sig}`,
4
+ * value = protobuf `SenderKeyRecordStructure`.
5
+ * • Upstream: store `sender-key`, key `{group}::{signalUser}::{deviceId}`,
6
+ * value = `Buffer(JSON.stringify(states, BufferJSON.replacer), 'utf-8')`.
7
+ * Store name, key shape AND value encoding all differ.
29
8
  */
30
9
  import { Buffer } from 'node:buffer';
31
10
  import { describe, test } from 'node:test';
32
- // Upstream baileys's actual classes — NOT a mock. We are asserting the same
33
- // loadSenderKey/storeSenderKey path that runs inside upstream's libsignal at
34
- // runtime.
35
11
  import { SenderKeyRecord } from 'baileys/lib/Signal/Group/sender-key-record.js';
36
- // eslint-disable-next-line @typescript-eslint/no-explicit-any -- bridge proto-types ambient
12
+ import { SenderChainKey } from 'baileys/lib/Signal/Group/sender-chain-key.js';
37
13
  import { proto as bridgeProto } from 'whatsapp-rust-bridge/proto-types';
38
- import { wrapLegacyStore } from "../wrap-legacy-store.js";
39
- import { initAuthCreds } from "../generics.js";
40
14
  import { expect } from "../../__tests__/expect.js";
41
- // ─── In-memory keys store identical in shape to upstream's `useMultiFileAuthState`
42
- // keys callback (the surface wrap-legacy-store talks to). ────────────────────
43
- function makeMemKeys() {
44
- const data = {};
45
- return {
46
- raw: data,
47
- // eslint-disable-next-line @typescript-eslint/no-explicit-any -- mirrors upstream `keys.get` shape
48
- async get(type, ids) {
49
- const bucket = data[type] ?? {};
50
- const out = {};
51
- for (const id of ids)
52
- out[id] = bucket[id] ?? null;
53
- return out;
54
- },
55
- async set(updates) {
56
- for (const [type, bucket] of Object.entries(updates)) {
57
- data[type] ?? (data[type] = {});
58
- for (const [id, val] of Object.entries(bucket)) {
59
- if (val === null || val === undefined)
60
- delete data[type][id];
61
- else
62
- data[type][id] = val;
63
- }
64
- }
65
- }
66
- };
67
- }
68
- // ─── Helpers to build a realistic, fully-populated proto sender-key record ─
69
- function buildBridgeSenderKeyBytes(opts) {
70
- const { keyId = 17, iteration = 3, chainSeed = new Uint8Array(32).map((_, i) => (i * 7) & 0xff), signingPublic = new Uint8Array(33).map((_, i) => (i * 11) & 0xff), signingPrivate = new Uint8Array(32).map((_, i) => (i * 13) & 0xff) } = opts;
71
- const struct = bridgeProto.SenderKeyRecordStructure.create({
72
- senderKeyStates: [
73
- {
74
- senderKeyId: keyId,
75
- senderChainKey: { iteration, seed: chainSeed },
76
- senderSigningKey: { public: signingPublic, private: signingPrivate },
77
- senderMessageKeys: []
78
- }
79
- ]
80
- });
81
- return bridgeProto.SenderKeyRecordStructure.encode(struct).finish();
82
- }
83
- const SAMPLE_GROUP = '120363012345678900@g.us';
84
- // LID sender, no JID device. This is the mock-server default and the case
85
- // our e2e test exercises.
86
- const SAMPLE_BRIDGE_KEY_LID = `${SAMPLE_GROUP}:100000037037034@lid.0`;
87
- const EXPECTED_UPSTREAM_KEY_LID = `${SAMPLE_GROUP}::100000037037034_1::0`;
88
- // PN sender on s.whatsapp.net with a JID device — exercises the
89
- // `user:device@server` userPart branch + the no-suffix signalUser branch.
90
- const SAMPLE_BRIDGE_KEY_PN_DEV = `${SAMPLE_GROUP}:559980000003:5@s.whatsapp.net.0`;
91
- const EXPECTED_UPSTREAM_KEY_PN_DEV = `${SAMPLE_GROUP}::559980000003::5`;
92
- async function makeWrapped() {
93
- const creds = initAuthCreds();
94
- const keys = makeMemKeys();
95
- // eslint-disable-next-line @typescript-eslint/no-explicit-any -- minimal AuthenticationState surface
96
- const state = { creds, keys: keys };
97
- const wrapped = await wrapLegacyStore(state, async () => { });
98
- return { wrapped, keys, creds };
99
- }
100
- describe('wrap-legacy-store: sender_key key-name translation (cross-impl)', () => {
101
- test('bridge SET writes under the upstream-formatted key (LID, no JID device)', async () => {
15
+ import { BRIDGE_SK_KEY_LID, BRIDGE_SK_KEY_PN_DEV, UPSTREAM_SK_KEY_LID, UPSTREAM_SK_KEY_PN_DEV, buildBridgeSenderKeyBytes, fill, makeWrapped } from "./_legacy-store-fixtures.js";
16
+ describe('wrap-legacy-store: sender_key key-name translation', () => {
17
+ test('LID, no JID device → upstream `_1` suffix + double-colon separators', async () => {
102
18
  const { wrapped, keys } = await makeWrapped();
103
- await wrapped.set('sender_key', SAMPLE_BRIDGE_KEY_LID, buildBridgeSenderKeyBytes({}));
104
- // Upstream's libsignal will look here:
105
- const stored = keys.raw['sender-key']?.[EXPECTED_UPSTREAM_KEY_LID];
106
- expect(stored).toBeDefined();
107
- // AND the bridge-shaped key must NOT exist (would mean we just wrote
108
- // raw bytes verbatim and hadn't translated the key).
109
- const bridgeKeyValue = keys.raw['sender-key']?.[SAMPLE_BRIDGE_KEY_LID];
110
- expect(bridgeKeyValue).toBeUndefined();
19
+ await wrapped.set('sender_key', BRIDGE_SK_KEY_LID, buildBridgeSenderKeyBytes());
20
+ expect(keys.raw['sender-key']?.[UPSTREAM_SK_KEY_LID]).toBeDefined();
21
+ // The bridge-shaped key MUST NOT leak — would mean we passthrough'd raw bytes.
22
+ expect(keys.raw['sender-key']?.[BRIDGE_SK_KEY_LID]).toBeUndefined();
111
23
  });
112
- test('bridge SET writes under the upstream-formatted key (PN with device suffix)', async () => {
24
+ test('PN with device suffix JID device becomes upstream deviceId', async () => {
113
25
  const { wrapped, keys } = await makeWrapped();
114
- await wrapped.set('sender_key', SAMPLE_BRIDGE_KEY_PN_DEV, buildBridgeSenderKeyBytes({}));
115
- const stored = keys.raw['sender-key']?.[EXPECTED_UPSTREAM_KEY_PN_DEV];
116
- expect(stored).toBeDefined();
26
+ await wrapped.set('sender_key', BRIDGE_SK_KEY_PN_DEV, buildBridgeSenderKeyBytes());
27
+ expect(keys.raw['sender-key']?.[UPSTREAM_SK_KEY_PN_DEV]).toBeDefined();
117
28
  });
118
- test('bridge GET reads back from the upstream-formatted key (LID)', async () => {
29
+ test('bridge GET reads back from the upstream-formatted key', async () => {
119
30
  const { wrapped, keys } = await makeWrapped();
120
- // Pretend upstream's libsignal already wrote here — this is the
121
- // scenario where a bot ran on upstream first and is now booting
122
- // baileyrs against the same auth folder.
123
- const samples = [
31
+ const upstreamBytes = Buffer.from(JSON.stringify([
124
32
  {
125
33
  senderKeyId: 17,
126
- senderChainKey: { iteration: 3, seed: Buffer.from(new Uint8Array(32).map((_, i) => (i * 7) & 0xff)) },
127
- senderSigningKey: {
128
- public: Buffer.from(new Uint8Array(33).map((_, i) => (i * 11) & 0xff)),
129
- private: Buffer.from(new Uint8Array(32).map((_, i) => (i * 13) & 0xff))
130
- },
34
+ senderChainKey: { iteration: 3, seed: Buffer.from(fill(32, 7)) },
35
+ senderSigningKey: { public: Buffer.from(fill(33, 11)), private: Buffer.from(fill(32, 13)) },
131
36
  senderMessageKeys: []
132
37
  }
133
- ];
134
- const upstreamBytes = Buffer.from(JSON.stringify(samples, (_k, v) => {
38
+ ], (_k, v) => {
135
39
  if (Buffer.isBuffer(v) || v instanceof Uint8Array || v?.type === 'Buffer') {
136
- return { type: 'Buffer', data: Buffer.from(v?.data ?? v).toString('base64') };
40
+ return { type: 'Buffer', data: Buffer.from(v.data ?? v).toString('base64') };
137
41
  }
138
42
  return v;
139
43
  }), 'utf-8');
140
- keys.raw['sender-key'] = { [EXPECTED_UPSTREAM_KEY_LID]: upstreamBytes };
141
- const out = (await wrapped.get('sender_key', SAMPLE_BRIDGE_KEY_LID));
142
- expect(out).toBeDefined();
44
+ keys.raw['sender-key'] = { [UPSTREAM_SK_KEY_LID]: upstreamBytes };
45
+ const out = await wrapped.get('sender_key', BRIDGE_SK_KEY_LID);
143
46
  expect(out).not.toBe(null);
144
47
  });
145
48
  });
146
- describe('wrap-legacy-store: sender_key value-byte translation (cross-impl)', () => {
147
- test('bridge-written proto bytes are loadable by upstream SenderKeyRecord.deserialize', async () => {
49
+ describe('wrap-legacy-store: sender_key value-byte translation', () => {
50
+ test('bridge proto bytes load via upstream `SenderKeyRecord.deserialize`', async () => {
148
51
  const { wrapped, keys } = await makeWrapped();
149
52
  const keyId = 42;
150
53
  const iteration = 9;
151
- const chainSeed = Buffer.from(new Uint8Array(32).map((_, i) => (i + 1) & 0xff));
152
- const signPub = Buffer.from(new Uint8Array(33).map((_, i) => (200 - i) & 0xff));
153
- const signPriv = Buffer.from(new Uint8Array(32).map((_, i) => (i * 5 + 11) & 0xff));
154
- const protoBytes = buildBridgeSenderKeyBytes({
54
+ const chainSeed = Buffer.from(fill(32, 7));
55
+ const signPub = Buffer.from(fill(33, 11));
56
+ const signPriv = Buffer.from(fill(32, 13));
57
+ await wrapped.set('sender_key', BRIDGE_SK_KEY_LID, buildBridgeSenderKeyBytes({
155
58
  keyId,
156
59
  iteration,
157
60
  chainSeed: new Uint8Array(chainSeed),
158
61
  signingPublic: new Uint8Array(signPub),
159
62
  signingPrivate: new Uint8Array(signPriv)
160
- });
161
- await wrapped.set('sender_key', SAMPLE_BRIDGE_KEY_LID, protoBytes);
162
- const onDisk = keys.raw['sender-key']?.[EXPECTED_UPSTREAM_KEY_LID];
163
- expect(onDisk).toBeDefined();
164
- // This is the EXACT call upstream's `loadSenderKey` makes. If it
165
- // throws or produces an empty record, the e2e regression remains.
63
+ }));
64
+ const onDisk = keys.raw['sender-key']?.[UPSTREAM_SK_KEY_LID];
166
65
  const rec = SenderKeyRecord.deserialize(onDisk);
167
66
  expect(rec.isEmpty()).toBe(false);
168
67
  const state = rec.getSenderKeyState();
169
68
  expect(state.getKeyId()).toBe(keyId);
170
69
  expect(state.getSenderChainKey().getIteration()).toBe(iteration);
171
- // Buffer comparison via .equals — chain seed must round-trip byte-for-byte.
172
- const seedOut = state.getSenderChainKey().getSeed();
173
- expect(Buffer.from(seedOut).equals(chainSeed)).toBe(true);
174
- // Signing keys: upstream prepends 0x05 to a 32-byte public on read,
175
- // so we compare against the stored 33-byte value verbatim.
176
- const pubOut = state.getSigningKeyPublic();
177
- expect(Buffer.from(pubOut).equals(signPub)).toBe(true);
178
- const privOut = state.getSigningKeyPrivate();
179
- expect(Buffer.from(privOut).equals(signPriv)).toBe(true);
70
+ expect(Buffer.from(state.getSenderChainKey().getSeed()).equals(chainSeed)).toBe(true);
71
+ expect(Buffer.from(state.getSigningKeyPublic()).equals(signPub)).toBe(true);
72
+ expect(Buffer.from(state.getSigningKeyPrivate()).equals(signPriv)).toBe(true);
180
73
  });
181
- test('upstream-written JSON bytes round-trip through bridge GET to valid proto bytes', async () => {
74
+ test('upstream JSON bytes round-trip to valid bridge proto', async () => {
182
75
  const { wrapped, keys } = await makeWrapped();
183
- // Build a record exactly the way upstream writes it (sender-key-state.js:19+).
184
76
  const keyId = 99;
185
77
  const iteration = 4;
186
78
  const chainSeed = Buffer.alloc(32, 0xab);
187
79
  const signPub = Buffer.alloc(33, 0xcd);
188
80
  const signPriv = Buffer.alloc(32, 0xef);
189
- const senderKeyStates = [
81
+ const upstreamBytes = Buffer.from(JSON.stringify([
190
82
  {
191
83
  senderKeyId: keyId,
192
84
  senderChainKey: { iteration, seed: chainSeed },
193
85
  senderSigningKey: { public: signPub, private: signPriv },
194
86
  senderMessageKeys: []
195
87
  }
196
- ];
197
- // Same replacer baileys uses (BufferJSON in lib/Utils/generics.js).
198
- const upstreamBytes = Buffer.from(JSON.stringify(senderKeyStates, (_k, v) => {
88
+ ], (_k, v) => {
199
89
  if (Buffer.isBuffer(v) || v instanceof Uint8Array || v?.type === 'Buffer') {
200
- return { type: 'Buffer', data: Buffer.from(v?.data ?? v).toString('base64') };
90
+ return { type: 'Buffer', data: Buffer.from(v.data ?? v).toString('base64') };
201
91
  }
202
92
  return v;
203
93
  }), 'utf-8');
204
- keys.raw['sender-key'] = { [EXPECTED_UPSTREAM_KEY_LID]: upstreamBytes };
205
- const bytesOut = (await wrapped.get('sender_key', SAMPLE_BRIDGE_KEY_LID));
206
- expect(bytesOut).toBeDefined();
207
- expect(bytesOut).not.toBe(null);
208
- // These bytes must be valid `SenderKeyRecordStructure` proto for the
209
- // Rust libsignal that lives in the bridge to consume them.
94
+ keys.raw['sender-key'] = { [UPSTREAM_SK_KEY_LID]: upstreamBytes };
95
+ const bytesOut = (await wrapped.get('sender_key', BRIDGE_SK_KEY_LID));
210
96
  const decoded = bridgeProto.SenderKeyRecordStructure.decode(bytesOut);
211
97
  expect(decoded.senderKeyStates.length).toBe(1);
212
98
  const s = decoded.senderKeyStates[0];
@@ -216,36 +102,22 @@ describe('wrap-legacy-store: sender_key value-byte translation (cross-impl)', ()
216
102
  expect(Buffer.from(s.senderSigningKey.public).equals(signPub)).toBe(true);
217
103
  expect(Buffer.from(s.senderSigningKey.private).equals(signPriv)).toBe(true);
218
104
  });
219
- test('round-trip: bridge SET → upstream raw read upstream-style modify → bridge GET → valid proto', async () => {
220
- // End-to-end durability test: simulates a session where the bridge
221
- // writes initially, upstream reads + advances chain (as it does on
222
- // each receive), upstream writes back, and the bridge reads the
223
- // final state.
105
+ test('iteration bump survives bridge SET → upstream advance → bridge GET', async () => {
224
106
  const { wrapped, keys } = await makeWrapped();
225
- const initialBytes = buildBridgeSenderKeyBytes({ keyId: 5, iteration: 1 });
226
- await wrapped.set('sender_key', SAMPLE_BRIDGE_KEY_LID, initialBytes);
227
- const onDisk = keys.raw['sender-key']?.[EXPECTED_UPSTREAM_KEY_LID];
107
+ await wrapped.set('sender_key', BRIDGE_SK_KEY_LID, buildBridgeSenderKeyBytes({ keyId: 5, iteration: 1 }));
108
+ const onDisk = keys.raw['sender-key']?.[UPSTREAM_SK_KEY_LID];
228
109
  const rec = SenderKeyRecord.deserialize(onDisk);
229
- // Advance the iteration counter the way upstream's group cipher does
230
- // after consuming a message.
231
110
  const state = rec.getSenderKeyState();
232
111
  const ck = state.getSenderChainKey();
233
- // Simulate an iteration bump. We pass a duck-typed object that
234
- // matches the SenderChainKey getter shape upstream uses internally.
235
- // eslint-disable-next-line @typescript-eslint/no-explicit-any -- SenderChainKey is structurally typed inside upstream
236
- const bumped = { getIteration: () => ck.getIteration() + 5, getSeed: () => ck.getSeed() };
237
- state.setSenderChainKey(bumped);
238
- // Re-serialize the upstream way and put it back on disk.
112
+ state.setSenderChainKey(new SenderChainKey(ck.getIteration() + 5, ck.getSeed()));
239
113
  const newJson = JSON.stringify(rec.serialize(), (_k, v) => {
240
114
  if (Buffer.isBuffer(v) || v instanceof Uint8Array || v?.type === 'Buffer') {
241
- return { type: 'Buffer', data: Buffer.from(v?.data ?? v).toString('base64') };
115
+ return { type: 'Buffer', data: Buffer.from(v.data ?? v).toString('base64') };
242
116
  }
243
117
  return v;
244
118
  });
245
- keys.raw['sender-key'][EXPECTED_UPSTREAM_KEY_LID] = Buffer.from(newJson, 'utf-8');
246
- // Now the bridge re-reads — it must see the bumped iteration.
247
- const bytesOut = (await wrapped.get('sender_key', SAMPLE_BRIDGE_KEY_LID));
248
- expect(bytesOut).not.toBe(null);
119
+ keys.raw['sender-key'][UPSTREAM_SK_KEY_LID] = Buffer.from(newJson, 'utf-8');
120
+ const bytesOut = (await wrapped.get('sender_key', BRIDGE_SK_KEY_LID));
249
121
  const decoded = bridgeProto.SenderKeyRecordStructure.decode(bytesOut);
250
122
  expect(decoded.senderKeyStates[0].senderChainKey?.iteration).toBe(6);
251
123
  });
@@ -1 +1 @@
1
- {"version":3,"file":"wrap-legacy-store-sender-key.test.js","sourceRoot":"","sources":["../../../src/Utils/__tests__/wrap-legacy-store-sender-key.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wrap-legacy-store-sender-key.test.js","sourceRoot":"","sources":["../../../src/Utils/__tests__/wrap-legacy-store-sender-key.test.ts"],"names":[],"mappings":"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"}