@oxidezap/baileyrs 0.0.8 → 0.0.9

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 (24) hide show
  1. package/lib/Utils/__tests__/_legacy-store-fixtures.d.ts +65 -0
  2. package/lib/Utils/__tests__/_legacy-store-fixtures.d.ts.map +1 -0
  3. package/lib/Utils/__tests__/_legacy-store-fixtures.js +107 -0
  4. package/lib/Utils/__tests__/_legacy-store-fixtures.js.map +1 -0
  5. package/lib/Utils/__tests__/wrap-legacy-store-coverage.test.d.ts +10 -0
  6. package/lib/Utils/__tests__/wrap-legacy-store-coverage.test.d.ts.map +1 -0
  7. package/lib/Utils/__tests__/wrap-legacy-store-coverage.test.js +298 -0
  8. package/lib/Utils/__tests__/wrap-legacy-store-coverage.test.js.map +1 -0
  9. package/lib/Utils/__tests__/wrap-legacy-store-lid-mapping.test.d.ts +4 -19
  10. package/lib/Utils/__tests__/wrap-legacy-store-lid-mapping.test.d.ts.map +1 -1
  11. package/lib/Utils/__tests__/wrap-legacy-store-lid-mapping.test.js +31 -97
  12. package/lib/Utils/__tests__/wrap-legacy-store-lid-mapping.test.js.map +1 -1
  13. package/lib/Utils/__tests__/wrap-legacy-store-sender-key.test.d.ts +6 -27
  14. package/lib/Utils/__tests__/wrap-legacy-store-sender-key.test.d.ts.map +1 -1
  15. package/lib/Utils/__tests__/wrap-legacy-store-sender-key.test.js +48 -175
  16. package/lib/Utils/__tests__/wrap-legacy-store-sender-key.test.js.map +1 -1
  17. package/lib/Utils/__tests__/wrap-legacy-store-session.test.d.ts +10 -28
  18. package/lib/Utils/__tests__/wrap-legacy-store-session.test.d.ts.map +1 -1
  19. package/lib/Utils/__tests__/wrap-legacy-store-session.test.js +118 -297
  20. package/lib/Utils/__tests__/wrap-legacy-store-session.test.js.map +1 -1
  21. package/lib/Utils/wrap-legacy-store.d.ts.map +1 -1
  22. package/lib/Utils/wrap-legacy-store.js +128 -273
  23. package/lib/Utils/wrap-legacy-store.js.map +1 -1
  24. 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,97 @@
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
37
12
  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
13
  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 () => {
14
+ 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";
15
+ describe('wrap-legacy-store: sender_key key-name translation', () => {
16
+ test('LID, no JID device → upstream `_1` suffix + double-colon separators', async () => {
102
17
  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();
18
+ await wrapped.set('sender_key', BRIDGE_SK_KEY_LID, buildBridgeSenderKeyBytes());
19
+ expect(keys.raw['sender-key']?.[UPSTREAM_SK_KEY_LID]).toBeDefined();
20
+ // The bridge-shaped key MUST NOT leak — would mean we passthrough'd raw bytes.
21
+ expect(keys.raw['sender-key']?.[BRIDGE_SK_KEY_LID]).toBeUndefined();
111
22
  });
112
- test('bridge SET writes under the upstream-formatted key (PN with device suffix)', async () => {
23
+ test('PN with device suffix JID device becomes upstream deviceId', async () => {
113
24
  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();
25
+ await wrapped.set('sender_key', BRIDGE_SK_KEY_PN_DEV, buildBridgeSenderKeyBytes());
26
+ expect(keys.raw['sender-key']?.[UPSTREAM_SK_KEY_PN_DEV]).toBeDefined();
117
27
  });
118
- test('bridge GET reads back from the upstream-formatted key (LID)', async () => {
28
+ test('bridge GET reads back from the upstream-formatted key', async () => {
119
29
  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 = [
30
+ const upstreamBytes = Buffer.from(JSON.stringify([
124
31
  {
125
32
  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
- },
33
+ senderChainKey: { iteration: 3, seed: Buffer.from(fill(32, 7)) },
34
+ senderSigningKey: { public: Buffer.from(fill(33, 11)), private: Buffer.from(fill(32, 13)) },
131
35
  senderMessageKeys: []
132
36
  }
133
- ];
134
- const upstreamBytes = Buffer.from(JSON.stringify(samples, (_k, v) => {
37
+ ], (_k, v) => {
135
38
  if (Buffer.isBuffer(v) || v instanceof Uint8Array || v?.type === 'Buffer') {
136
- return { type: 'Buffer', data: Buffer.from(v?.data ?? v).toString('base64') };
39
+ return { type: 'Buffer', data: Buffer.from(v.data ?? v).toString('base64') };
137
40
  }
138
41
  return v;
139
42
  }), '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();
43
+ keys.raw['sender-key'] = { [UPSTREAM_SK_KEY_LID]: upstreamBytes };
44
+ const out = await wrapped.get('sender_key', BRIDGE_SK_KEY_LID);
143
45
  expect(out).not.toBe(null);
144
46
  });
145
47
  });
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 () => {
48
+ describe('wrap-legacy-store: sender_key value-byte translation', () => {
49
+ test('bridge proto bytes load via upstream `SenderKeyRecord.deserialize`', async () => {
148
50
  const { wrapped, keys } = await makeWrapped();
149
51
  const keyId = 42;
150
52
  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({
53
+ const chainSeed = Buffer.from(fill(32, 7));
54
+ const signPub = Buffer.from(fill(33, 11));
55
+ const signPriv = Buffer.from(fill(32, 13));
56
+ await wrapped.set('sender_key', BRIDGE_SK_KEY_LID, buildBridgeSenderKeyBytes({
155
57
  keyId,
156
58
  iteration,
157
59
  chainSeed: new Uint8Array(chainSeed),
158
60
  signingPublic: new Uint8Array(signPub),
159
61
  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.
62
+ }));
63
+ const onDisk = keys.raw['sender-key']?.[UPSTREAM_SK_KEY_LID];
166
64
  const rec = SenderKeyRecord.deserialize(onDisk);
167
65
  expect(rec.isEmpty()).toBe(false);
168
66
  const state = rec.getSenderKeyState();
169
67
  expect(state.getKeyId()).toBe(keyId);
170
68
  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);
69
+ expect(Buffer.from(state.getSenderChainKey().getSeed()).equals(chainSeed)).toBe(true);
70
+ expect(Buffer.from(state.getSigningKeyPublic()).equals(signPub)).toBe(true);
71
+ expect(Buffer.from(state.getSigningKeyPrivate()).equals(signPriv)).toBe(true);
180
72
  });
181
- test('upstream-written JSON bytes round-trip through bridge GET to valid proto bytes', async () => {
73
+ test('upstream JSON bytes round-trip to valid bridge proto', async () => {
182
74
  const { wrapped, keys } = await makeWrapped();
183
- // Build a record exactly the way upstream writes it (sender-key-state.js:19+).
184
75
  const keyId = 99;
185
76
  const iteration = 4;
186
77
  const chainSeed = Buffer.alloc(32, 0xab);
187
78
  const signPub = Buffer.alloc(33, 0xcd);
188
79
  const signPriv = Buffer.alloc(32, 0xef);
189
- const senderKeyStates = [
80
+ const upstreamBytes = Buffer.from(JSON.stringify([
190
81
  {
191
82
  senderKeyId: keyId,
192
83
  senderChainKey: { iteration, seed: chainSeed },
193
84
  senderSigningKey: { public: signPub, private: signPriv },
194
85
  senderMessageKeys: []
195
86
  }
196
- ];
197
- // Same replacer baileys uses (BufferJSON in lib/Utils/generics.js).
198
- const upstreamBytes = Buffer.from(JSON.stringify(senderKeyStates, (_k, v) => {
87
+ ], (_k, v) => {
199
88
  if (Buffer.isBuffer(v) || v instanceof Uint8Array || v?.type === 'Buffer') {
200
- return { type: 'Buffer', data: Buffer.from(v?.data ?? v).toString('base64') };
89
+ return { type: 'Buffer', data: Buffer.from(v.data ?? v).toString('base64') };
201
90
  }
202
91
  return v;
203
92
  }), '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.
93
+ keys.raw['sender-key'] = { [UPSTREAM_SK_KEY_LID]: upstreamBytes };
94
+ const bytesOut = (await wrapped.get('sender_key', BRIDGE_SK_KEY_LID));
210
95
  const decoded = bridgeProto.SenderKeyRecordStructure.decode(bytesOut);
211
96
  expect(decoded.senderKeyStates.length).toBe(1);
212
97
  const s = decoded.senderKeyStates[0];
@@ -216,36 +101,24 @@ describe('wrap-legacy-store: sender_key value-byte translation (cross-impl)', ()
216
101
  expect(Buffer.from(s.senderSigningKey.public).equals(signPub)).toBe(true);
217
102
  expect(Buffer.from(s.senderSigningKey.private).equals(signPriv)).toBe(true);
218
103
  });
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.
104
+ test('iteration bump survives bridge SET → upstream advance → bridge GET', async () => {
224
105
  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];
106
+ await wrapped.set('sender_key', BRIDGE_SK_KEY_LID, buildBridgeSenderKeyBytes({ keyId: 5, iteration: 1 }));
107
+ const onDisk = keys.raw['sender-key']?.[UPSTREAM_SK_KEY_LID];
228
108
  const rec = SenderKeyRecord.deserialize(onDisk);
229
- // Advance the iteration counter the way upstream's group cipher does
230
- // after consuming a message.
231
109
  const state = rec.getSenderKeyState();
232
110
  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
111
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- SenderChainKey is structurally typed
236
112
  const bumped = { getIteration: () => ck.getIteration() + 5, getSeed: () => ck.getSeed() };
237
113
  state.setSenderChainKey(bumped);
238
- // Re-serialize the upstream way and put it back on disk.
239
114
  const newJson = JSON.stringify(rec.serialize(), (_k, v) => {
240
115
  if (Buffer.isBuffer(v) || v instanceof Uint8Array || v?.type === 'Buffer') {
241
- return { type: 'Buffer', data: Buffer.from(v?.data ?? v).toString('base64') };
116
+ return { type: 'Buffer', data: Buffer.from(v.data ?? v).toString('base64') };
242
117
  }
243
118
  return v;
244
119
  });
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);
120
+ keys.raw['sender-key'][UPSTREAM_SK_KEY_LID] = Buffer.from(newJson, 'utf-8');
121
+ const bytesOut = (await wrapped.get('sender_key', BRIDGE_SK_KEY_LID));
249
122
  const decoded = bridgeProto.SenderKeyRecordStructure.decode(bytesOut);
250
123
  expect(decoded.senderKeyStates[0].senderChainKey?.iteration).toBe(6);
251
124
  });
@@ -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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"}