@arbidocs/client 0.4.70 → 0.4.72

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 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;