@arbidocs/client 0.4.71 → 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.js CHANGED
@@ -285,6 +285,66 @@ async function decryptMessage(encryptedBase64, senderPublicKeyBase64, recipientP
285
285
  );
286
286
  return sodium.to_string(decrypted);
287
287
  }
288
+ var CALL_KEY_BYTES = 32;
289
+ async function generateCallKey() {
290
+ await initSodium();
291
+ return sodium.randombytes_buf(CALL_KEY_BYTES);
292
+ }
293
+ async function sealCallKey(key, recipientPublicKeyBase64) {
294
+ await initSodium();
295
+ return bytesToBase64(sodium.crypto_box_seal(key, base64ToBytes(recipientPublicKeyBase64)));
296
+ }
297
+ async function openSealedCallKey(sealedBase64, encryptionSecretKey) {
298
+ await initSodium();
299
+ const key = sealedBoxDecrypt(sealedBase64, encryptionSecretKey);
300
+ if (key.length !== CALL_KEY_BYTES) throw new Error("Sealed call key has the wrong length");
301
+ return key;
302
+ }
303
+ async function encryptCallTitle(title, key) {
304
+ await initSodium();
305
+ const nonce = sodium.randombytes_buf(sodium.crypto_secretbox_NONCEBYTES);
306
+ const box = sodium.crypto_secretbox_easy(sodium.from_string(title), nonce, key);
307
+ const out = new Uint8Array(nonce.length + box.length);
308
+ out.set(nonce, 0);
309
+ out.set(box, nonce.length);
310
+ return bytesToBase64(out);
311
+ }
312
+ async function decryptCallTitle(ciphertext, key) {
313
+ await initSodium();
314
+ try {
315
+ const raw = base64ToBytes(ciphertext);
316
+ const nonce = raw.slice(0, sodium.crypto_secretbox_NONCEBYTES);
317
+ const box = raw.slice(sodium.crypto_secretbox_NONCEBYTES);
318
+ return sodium.to_string(sodium.crypto_secretbox_open_easy(box, nonce, key));
319
+ } catch {
320
+ return null;
321
+ }
322
+ }
323
+ function encodeCallKey(key) {
324
+ return bytesToBase64(key).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
325
+ }
326
+ function decodeCallKey(encoded) {
327
+ if (!/^[A-Za-z0-9_-]+$/.test(encoded)) return null;
328
+ const b64 = encoded.replace(/-/g, "+").replace(/_/g, "/");
329
+ try {
330
+ const key = base64ToBytes(b64 + "=".repeat((4 - b64.length % 4) % 4));
331
+ return key.length === CALL_KEY_BYTES ? key : null;
332
+ } catch {
333
+ return null;
334
+ }
335
+ }
336
+ function buildCallFragment(key, linkVersion) {
337
+ return `k=${encodeCallKey(key)}&v=${linkVersion}`;
338
+ }
339
+ function parseCallFragment(hash) {
340
+ const params = new URLSearchParams(hash.replace(/^#/, ""));
341
+ const encoded = params.get("k");
342
+ if (!encoded) return null;
343
+ const key = decodeCallKey(encoded);
344
+ if (!key) return null;
345
+ const v = Number(params.get("v"));
346
+ return { key, linkVersion: Number.isInteger(v) && v > 0 ? v : null };
347
+ }
288
348
 
289
349
  // src/crypto/keypairs.ts
290
350
  async function generateUserKeypairs(username, password, deploymentDomain) {
@@ -1014,7 +1074,8 @@ async function performLogin(request, signingPrivateKey, deps) {
1014
1074
  familyName: data.user.family_name ?? null,
1015
1075
  picture: data.user.picture ?? null,
1016
1076
  email: data.user.email ?? request.email,
1017
- isSso: data.user.is_sso === true
1077
+ isSso: data.user.is_sso === true,
1078
+ isIdentityVerified: data.user.is_identity_verified === true
1018
1079
  },
1019
1080
  signingPrivateKey,
1020
1081
  serverSessionKey
@@ -1455,6 +1516,6 @@ function isMessageType(msg, type) {
1455
1516
  return msg.type === type;
1456
1517
  }
1457
1518
 
1458
- export { API_PREFIX, base64Decode, base64Encode, base64ToBytes, buildWebSocketUrl, bytesToBase64, canPersistSession, changePasswordWithRekey, clearAllData, clearSession, computeSharedSecret, createArbiClient, createAuthMessage, createAutoReloginMiddleware, createBearerAuthMiddleware, createContentHash, createReloginHandler, createSessionManager, createWorkspaceReopener, decryptFile, decryptMessage, decryptMessageWithSharedSecret, deriveEncryptionKeypairFromSigning, derivePublicKey, encryptFile, encryptMessage, encryptMessageWithSharedSecret, generateKeyPairs, generateLoginCredentials, generateLoginCredentialsFromKey, generatePasswordChangeCredentials, generateRandomSigningKeypair, generateRecoveryPasswordChangeCredentials, generateRegistrationCredentials, generateUserKeypairs, getSession, getUserEncryptionKeypair, hasSession, initSodium, initializeDatabase, isMessageType, parseServerMessage, passwordChangeErrorMessage, prewarmKeyPairs, saveSession, sealKeyForSession, sealedBoxDecrypt, sealedBoxEncrypt, signMessage, updateSigningPrivateKey };
1519
+ export { API_PREFIX, CALL_KEY_BYTES, base64Decode, base64Encode, base64ToBytes, buildCallFragment, buildWebSocketUrl, bytesToBase64, canPersistSession, changePasswordWithRekey, clearAllData, clearSession, computeSharedSecret, createArbiClient, createAuthMessage, createAutoReloginMiddleware, createBearerAuthMiddleware, createContentHash, createReloginHandler, createSessionManager, createWorkspaceReopener, decodeCallKey, decryptCallTitle, decryptFile, decryptMessage, decryptMessageWithSharedSecret, deriveEncryptionKeypairFromSigning, derivePublicKey, encodeCallKey, encryptCallTitle, encryptFile, encryptMessage, encryptMessageWithSharedSecret, generateCallKey, generateKeyPairs, generateLoginCredentials, generateLoginCredentialsFromKey, generatePasswordChangeCredentials, generateRandomSigningKeypair, generateRecoveryPasswordChangeCredentials, generateRegistrationCredentials, generateUserKeypairs, getSession, getUserEncryptionKeypair, hasSession, initSodium, initializeDatabase, isMessageType, openSealedCallKey, parseCallFragment, parseServerMessage, passwordChangeErrorMessage, prewarmKeyPairs, saveSession, sealCallKey, sealKeyForSession, sealedBoxDecrypt, sealedBoxEncrypt, signMessage, updateSigningPrivateKey };
1459
1520
  //# sourceMappingURL=index.js.map
1460
1521
  //# sourceMappingURL=index.js.map