@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.
- package/lib/Utils/__tests__/_legacy-store-fixtures.d.ts +65 -0
- package/lib/Utils/__tests__/_legacy-store-fixtures.d.ts.map +1 -0
- package/lib/Utils/__tests__/_legacy-store-fixtures.js +107 -0
- package/lib/Utils/__tests__/_legacy-store-fixtures.js.map +1 -0
- package/lib/Utils/__tests__/wrap-legacy-store-coverage.test.d.ts +10 -0
- package/lib/Utils/__tests__/wrap-legacy-store-coverage.test.d.ts.map +1 -0
- package/lib/Utils/__tests__/wrap-legacy-store-coverage.test.js +298 -0
- package/lib/Utils/__tests__/wrap-legacy-store-coverage.test.js.map +1 -0
- package/lib/Utils/__tests__/wrap-legacy-store-lid-mapping.test.d.ts +4 -19
- package/lib/Utils/__tests__/wrap-legacy-store-lid-mapping.test.d.ts.map +1 -1
- package/lib/Utils/__tests__/wrap-legacy-store-lid-mapping.test.js +31 -97
- package/lib/Utils/__tests__/wrap-legacy-store-lid-mapping.test.js.map +1 -1
- package/lib/Utils/__tests__/wrap-legacy-store-sender-key.test.d.ts +6 -27
- package/lib/Utils/__tests__/wrap-legacy-store-sender-key.test.d.ts.map +1 -1
- package/lib/Utils/__tests__/wrap-legacy-store-sender-key.test.js +48 -175
- package/lib/Utils/__tests__/wrap-legacy-store-sender-key.test.js.map +1 -1
- package/lib/Utils/__tests__/wrap-legacy-store-session.test.d.ts +10 -28
- package/lib/Utils/__tests__/wrap-legacy-store-session.test.d.ts.map +1 -1
- package/lib/Utils/__tests__/wrap-legacy-store-session.test.js +118 -297
- package/lib/Utils/__tests__/wrap-legacy-store-session.test.js.map +1 -1
- package/lib/Utils/wrap-legacy-store.d.ts.map +1 -1
- package/lib/Utils/wrap-legacy-store.js +128 -273
- package/lib/Utils/wrap-legacy-store.js.map +1 -1
- package/package.json +4 -1
|
@@ -1,76 +1,24 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
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
|
-
|
|
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
|
-
|
|
64
|
-
describe('wrap-legacy-store: lid_mapping key-name translation
|
|
65
|
-
test('bridge SET pn:{X}
|
|
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}`,
|
|
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}
|
|
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}`,
|
|
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
|
|
88
|
-
test('bridge
|
|
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}`,
|
|
91
|
-
// Upstream's `_getLIDsForPNsImpl` does
|
|
92
|
-
|
|
93
|
-
|
|
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
|
|
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:
|
|
104
|
-
updated_at:
|
|
48
|
+
created_at: 1,
|
|
49
|
+
updated_at: 1,
|
|
105
50
|
learning_source: 'usync'
|
|
106
51
|
};
|
|
107
|
-
await wrapped.set('lid_mapping', `lid:${LID_USER}`,
|
|
108
|
-
|
|
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
|
|
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
|
|
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
|
|
71
|
+
test('round-trip: bridge SET both directions → read 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:
|
|
141
|
-
updated_at:
|
|
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}`,
|
|
145
|
-
await wrapped.set('lid_mapping', `pn:${PN_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
|
-
|
|
150
|
-
|
|
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":"AAAA
|
|
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
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
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
|
|
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
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
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
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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',
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
expect(
|
|
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('
|
|
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',
|
|
115
|
-
|
|
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
|
|
28
|
+
test('bridge GET reads back from the upstream-formatted key', async () => {
|
|
119
29
|
const { wrapped, keys } = await makeWrapped();
|
|
120
|
-
|
|
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(
|
|
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
|
|
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'] = { [
|
|
141
|
-
const out =
|
|
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
|
|
147
|
-
test('bridge
|
|
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(
|
|
152
|
-
const signPub = Buffer.from(
|
|
153
|
-
const signPriv = Buffer.from(
|
|
154
|
-
|
|
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
|
-
|
|
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
|
-
|
|
172
|
-
|
|
173
|
-
expect(Buffer.from(
|
|
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
|
|
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
|
|
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
|
|
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'] = { [
|
|
205
|
-
const bytesOut = (await wrapped.get('sender_key',
|
|
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('
|
|
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
|
-
|
|
226
|
-
|
|
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
|
-
//
|
|
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
|
|
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'][
|
|
246
|
-
|
|
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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"}
|