@arbidocs/client 0.4.71 → 0.4.73
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/dist/index.cjs +72 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +17288 -10856
- package/dist/index.d.ts +17288 -10856
- package/dist/index.js +63 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -292,6 +292,66 @@ async function decryptMessage(encryptedBase64, senderPublicKeyBase64, recipientP
|
|
|
292
292
|
);
|
|
293
293
|
return sodium__default.default.to_string(decrypted);
|
|
294
294
|
}
|
|
295
|
+
var CALL_KEY_BYTES = 32;
|
|
296
|
+
async function generateCallKey() {
|
|
297
|
+
await initSodium();
|
|
298
|
+
return sodium__default.default.randombytes_buf(CALL_KEY_BYTES);
|
|
299
|
+
}
|
|
300
|
+
async function sealCallKey(key, recipientPublicKeyBase64) {
|
|
301
|
+
await initSodium();
|
|
302
|
+
return bytesToBase64(sodium__default.default.crypto_box_seal(key, base64ToBytes(recipientPublicKeyBase64)));
|
|
303
|
+
}
|
|
304
|
+
async function openSealedCallKey(sealedBase64, encryptionSecretKey) {
|
|
305
|
+
await initSodium();
|
|
306
|
+
const key = sealedBoxDecrypt(sealedBase64, encryptionSecretKey);
|
|
307
|
+
if (key.length !== CALL_KEY_BYTES) throw new Error("Sealed call key has the wrong length");
|
|
308
|
+
return key;
|
|
309
|
+
}
|
|
310
|
+
async function encryptCallTitle(title, key) {
|
|
311
|
+
await initSodium();
|
|
312
|
+
const nonce = sodium__default.default.randombytes_buf(sodium__default.default.crypto_secretbox_NONCEBYTES);
|
|
313
|
+
const box = sodium__default.default.crypto_secretbox_easy(sodium__default.default.from_string(title), nonce, key);
|
|
314
|
+
const out = new Uint8Array(nonce.length + box.length);
|
|
315
|
+
out.set(nonce, 0);
|
|
316
|
+
out.set(box, nonce.length);
|
|
317
|
+
return bytesToBase64(out);
|
|
318
|
+
}
|
|
319
|
+
async function decryptCallTitle(ciphertext, key) {
|
|
320
|
+
await initSodium();
|
|
321
|
+
try {
|
|
322
|
+
const raw = base64ToBytes(ciphertext);
|
|
323
|
+
const nonce = raw.slice(0, sodium__default.default.crypto_secretbox_NONCEBYTES);
|
|
324
|
+
const box = raw.slice(sodium__default.default.crypto_secretbox_NONCEBYTES);
|
|
325
|
+
return sodium__default.default.to_string(sodium__default.default.crypto_secretbox_open_easy(box, nonce, key));
|
|
326
|
+
} catch {
|
|
327
|
+
return null;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
function encodeCallKey(key) {
|
|
331
|
+
return bytesToBase64(key).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
|
|
332
|
+
}
|
|
333
|
+
function decodeCallKey(encoded) {
|
|
334
|
+
if (!/^[A-Za-z0-9_-]+$/.test(encoded)) return null;
|
|
335
|
+
const b64 = encoded.replace(/-/g, "+").replace(/_/g, "/");
|
|
336
|
+
try {
|
|
337
|
+
const key = base64ToBytes(b64 + "=".repeat((4 - b64.length % 4) % 4));
|
|
338
|
+
return key.length === CALL_KEY_BYTES ? key : null;
|
|
339
|
+
} catch {
|
|
340
|
+
return null;
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
function buildCallFragment(key, linkVersion) {
|
|
344
|
+
return `k=${encodeCallKey(key)}&v=${linkVersion}`;
|
|
345
|
+
}
|
|
346
|
+
function parseCallFragment(hash) {
|
|
347
|
+
const params = new URLSearchParams(hash.replace(/^#/, ""));
|
|
348
|
+
const encoded = params.get("k");
|
|
349
|
+
if (!encoded) return null;
|
|
350
|
+
const key = decodeCallKey(encoded);
|
|
351
|
+
if (!key) return null;
|
|
352
|
+
const v = Number(params.get("v"));
|
|
353
|
+
return { key, linkVersion: Number.isInteger(v) && v > 0 ? v : null };
|
|
354
|
+
}
|
|
295
355
|
|
|
296
356
|
// src/crypto/keypairs.ts
|
|
297
357
|
async function generateUserKeypairs(username, password, deploymentDomain) {
|
|
@@ -1021,7 +1081,8 @@ async function performLogin(request, signingPrivateKey, deps) {
|
|
|
1021
1081
|
familyName: data.user.family_name ?? null,
|
|
1022
1082
|
picture: data.user.picture ?? null,
|
|
1023
1083
|
email: data.user.email ?? request.email,
|
|
1024
|
-
isSso: data.user.is_sso === true
|
|
1084
|
+
isSso: data.user.is_sso === true,
|
|
1085
|
+
isIdentityVerified: data.user.is_identity_verified === true
|
|
1025
1086
|
},
|
|
1026
1087
|
signingPrivateKey,
|
|
1027
1088
|
serverSessionKey
|
|
@@ -1463,9 +1524,11 @@ function isMessageType(msg, type) {
|
|
|
1463
1524
|
}
|
|
1464
1525
|
|
|
1465
1526
|
exports.API_PREFIX = API_PREFIX;
|
|
1527
|
+
exports.CALL_KEY_BYTES = CALL_KEY_BYTES;
|
|
1466
1528
|
exports.base64Decode = base64Decode;
|
|
1467
1529
|
exports.base64Encode = base64Encode;
|
|
1468
1530
|
exports.base64ToBytes = base64ToBytes;
|
|
1531
|
+
exports.buildCallFragment = buildCallFragment;
|
|
1469
1532
|
exports.buildWebSocketUrl = buildWebSocketUrl;
|
|
1470
1533
|
exports.bytesToBase64 = bytesToBase64;
|
|
1471
1534
|
exports.canPersistSession = canPersistSession;
|
|
@@ -1481,14 +1544,19 @@ exports.createContentHash = createContentHash;
|
|
|
1481
1544
|
exports.createReloginHandler = createReloginHandler;
|
|
1482
1545
|
exports.createSessionManager = createSessionManager;
|
|
1483
1546
|
exports.createWorkspaceReopener = createWorkspaceReopener;
|
|
1547
|
+
exports.decodeCallKey = decodeCallKey;
|
|
1548
|
+
exports.decryptCallTitle = decryptCallTitle;
|
|
1484
1549
|
exports.decryptFile = decryptFile;
|
|
1485
1550
|
exports.decryptMessage = decryptMessage;
|
|
1486
1551
|
exports.decryptMessageWithSharedSecret = decryptMessageWithSharedSecret;
|
|
1487
1552
|
exports.deriveEncryptionKeypairFromSigning = deriveEncryptionKeypairFromSigning;
|
|
1488
1553
|
exports.derivePublicKey = derivePublicKey;
|
|
1554
|
+
exports.encodeCallKey = encodeCallKey;
|
|
1555
|
+
exports.encryptCallTitle = encryptCallTitle;
|
|
1489
1556
|
exports.encryptFile = encryptFile;
|
|
1490
1557
|
exports.encryptMessage = encryptMessage;
|
|
1491
1558
|
exports.encryptMessageWithSharedSecret = encryptMessageWithSharedSecret;
|
|
1559
|
+
exports.generateCallKey = generateCallKey;
|
|
1492
1560
|
exports.generateKeyPairs = generateKeyPairs;
|
|
1493
1561
|
exports.generateLoginCredentials = generateLoginCredentials;
|
|
1494
1562
|
exports.generateLoginCredentialsFromKey = generateLoginCredentialsFromKey;
|
|
@@ -1503,10 +1571,13 @@ exports.hasSession = hasSession;
|
|
|
1503
1571
|
exports.initSodium = initSodium;
|
|
1504
1572
|
exports.initializeDatabase = initializeDatabase;
|
|
1505
1573
|
exports.isMessageType = isMessageType;
|
|
1574
|
+
exports.openSealedCallKey = openSealedCallKey;
|
|
1575
|
+
exports.parseCallFragment = parseCallFragment;
|
|
1506
1576
|
exports.parseServerMessage = parseServerMessage;
|
|
1507
1577
|
exports.passwordChangeErrorMessage = passwordChangeErrorMessage;
|
|
1508
1578
|
exports.prewarmKeyPairs = prewarmKeyPairs;
|
|
1509
1579
|
exports.saveSession = saveSession;
|
|
1580
|
+
exports.sealCallKey = sealCallKey;
|
|
1510
1581
|
exports.sealKeyForSession = sealKeyForSession;
|
|
1511
1582
|
exports.sealedBoxDecrypt = sealedBoxDecrypt;
|
|
1512
1583
|
exports.sealedBoxEncrypt = sealedBoxEncrypt;
|