@arbidocs/client 0.3.19 → 0.3.21

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
@@ -17,7 +17,6 @@ function createInitialState() {
17
17
  userEmail: null,
18
18
  userExtId: null,
19
19
  selectedWorkspaceId: null,
20
- cachedWorkspaceHeaders: {},
21
20
  isSsoMode: false,
22
21
  isAuth0Authenticated: false,
23
22
  auth0AccessToken: null
@@ -48,25 +47,6 @@ function createSessionManager() {
48
47
  state = { ...state, selectedWorkspaceId: id };
49
48
  notify();
50
49
  },
51
- setCachedWorkspaceHeader(workspaceId, header) {
52
- state = {
53
- ...state,
54
- cachedWorkspaceHeaders: {
55
- ...state.cachedWorkspaceHeaders,
56
- [workspaceId]: header
57
- }
58
- };
59
- notify();
60
- },
61
- clearWorkspaceHeaders() {
62
- state = { ...state, cachedWorkspaceHeaders: {} };
63
- notify();
64
- },
65
- getWorkspaceKeyHeader() {
66
- const { selectedWorkspaceId, cachedWorkspaceHeaders } = state;
67
- if (!selectedWorkspaceId) return null;
68
- return cachedWorkspaceHeaders[selectedWorkspaceId] ?? null;
69
- },
70
50
  setSsoState(opts) {
71
51
  state = {
72
52
  ...state,
@@ -93,11 +73,6 @@ function createTokenProvider(session) {
93
73
  getAccessToken: () => session.getState().accessToken
94
74
  };
95
75
  }
96
- function createWorkspaceKeyProvider(session) {
97
- return {
98
- getWorkspaceKeyHeader: () => session.getWorkspaceKeyHeader()
99
- };
100
- }
101
76
  function createAuthStateProvider(session) {
102
77
  return {
103
78
  getUserEmail: () => session.getState().userEmail,
@@ -110,9 +85,7 @@ function createAuthStateProvider(session) {
110
85
  };
111
86
  },
112
87
  getSelectedWorkspaceId: () => session.getState().selectedWorkspaceId,
113
- setAccessToken: (token) => session.setAccessToken(token),
114
- clearWorkspaceHeaders: () => session.clearWorkspaceHeaders(),
115
- setCachedWorkspaceHeader: (workspaceId, header) => session.setCachedWorkspaceHeader(workspaceId, header)
88
+ setAccessToken: (token) => session.setAccessToken(token)
116
89
  };
117
90
  }
118
91
  var sodiumReady = null;
@@ -185,10 +158,9 @@ function signMessage(message, privateKey) {
185
158
  const signature = sodium__default.default.crypto_sign_detached(messageBytes, privateKey);
186
159
  return base64Encode(signature);
187
160
  }
188
- async function createWorkspaceKeyHeader(workspaceKey, serverSessionPublicKey) {
161
+ async function sealKeyForSession(workspaceKey, serverSessionPublicKey) {
189
162
  await initSodium();
190
- const encryptedKey = sealedBoxEncrypt(workspaceKey, serverSessionPublicKey);
191
- return encryptedKey;
163
+ return sealedBoxEncrypt(workspaceKey, serverSessionPublicKey);
192
164
  }
193
165
  function sealedBoxDecrypt(encryptedBase64, userEncryptionPrivateKey) {
194
166
  const encrypted = base64ToBytes(encryptedBase64);
@@ -211,6 +183,10 @@ function deriveEncryptionKeypairFromSigning(signingKeyPair) {
211
183
  secretKey: encryptionPrivateKey
212
184
  };
213
185
  }
186
+ function generateRandomSigningKeypair() {
187
+ const kp = sodium__default.default.crypto_sign_keypair();
188
+ return { publicKey: kp.publicKey, secretKey: kp.privateKey };
189
+ }
214
190
  async function computeSharedSecret(theirPublicKeyBase64, myPrivateKey) {
215
191
  await initSodium();
216
192
  const theirPublicKey = base64ToBytes(theirPublicKeyBase64);
@@ -363,27 +339,6 @@ function createBearerAuthMiddleware(config) {
363
339
  };
364
340
  }
365
341
 
366
- // src/middleware/workspace-key.ts
367
- function needsWorkspaceKey(url, urlConfig) {
368
- if (urlConfig.excludePatterns.some((pattern) => url.includes(pattern))) {
369
- return false;
370
- }
371
- return urlConfig.includePatterns.some((pattern) => url.includes(pattern));
372
- }
373
- function createWorkspaceKeyMiddleware(config) {
374
- return {
375
- async onRequest({ request }) {
376
- if (needsWorkspaceKey(request.url, config.urlConfig)) {
377
- const workspaceHeader = config.workspaceKeyProvider.getWorkspaceKeyHeader();
378
- if (workspaceHeader) {
379
- request.headers.set("Workspace-Key", workspaceHeader);
380
- }
381
- }
382
- return request;
383
- }
384
- };
385
- }
386
-
387
342
  // src/middleware/auto-relogin.ts
388
343
  function createAutoReloginMiddleware(config) {
389
344
  return {
@@ -515,9 +470,8 @@ function createReloginHandler(deps) {
515
470
  userExtId: loginResult.userExtId,
516
471
  serverSessionKey: loginResult.sessionKey
517
472
  });
518
- let activeToken = loginResult.accessToken;
473
+ const activeToken = loginResult.accessToken;
519
474
  deps.authState.setAccessToken(activeToken);
520
- deps.authState.clearWorkspaceHeaders();
521
475
  const selectedWorkspaceId = deps.authState.getSelectedWorkspaceId();
522
476
  if (selectedWorkspaceId) {
523
477
  try {
@@ -530,22 +484,17 @@ function createReloginHandler(deps) {
530
484
  wrappedKey,
531
485
  encryptionKeyPair.secretKey
532
486
  );
533
- const encryptedWorkspaceKey = await deps.crypto.createWorkspaceKeyHeader(
487
+ const encryptedWorkspaceKey = await deps.crypto.sealKeyForSession(
534
488
  workspaceKey,
535
489
  loginResult.sessionKey
536
490
  );
537
- deps.authState.setCachedWorkspaceHeader(selectedWorkspaceId, encryptedWorkspaceKey);
538
491
  if (deps.workspaceOpenProvider) {
539
- const workspaceJwt = await deps.workspaceOpenProvider.openWorkspace(
492
+ await deps.workspaceOpenProvider.openWorkspace(
540
493
  loginResult.accessToken,
541
494
  selectedWorkspaceId,
542
495
  encryptedWorkspaceKey
543
496
  );
544
- if (workspaceJwt) {
545
- activeToken = workspaceJwt;
546
- deps.authState.setAccessToken(activeToken);
547
- console.info("[API] Workspace-scoped JWT obtained after re-login");
548
- }
497
+ console.info("[API] Workspace re-opened after re-login");
549
498
  }
550
499
  }
551
500
  } catch (error) {
@@ -925,6 +874,7 @@ async function performLogin(request, signingPrivateKey, deps) {
925
874
  return {
926
875
  accessToken: data.access_token,
927
876
  userExtId: data.user.external_id ?? void 0,
877
+ parentExtId: data.user.parent_ext_id ?? null,
928
878
  signingPrivateKey,
929
879
  serverSessionKey
930
880
  };
@@ -961,21 +911,6 @@ async function changePassword(params, deps) {
961
911
 
962
912
  // src/client.ts
963
913
  var API_PREFIX = "/v1";
964
- var DEFAULT_WORKSPACE_KEY_URL_CONFIG = {
965
- excludePatterns: [
966
- `${API_PREFIX}/user/`,
967
- `${API_PREFIX}/health/`,
968
- `${API_PREFIX}/configs/`,
969
- `${API_PREFIX}/workspace/create`
970
- ],
971
- includePatterns: [
972
- `${API_PREFIX}/workspace/wrk-`,
973
- `${API_PREFIX}/document/`,
974
- `${API_PREFIX}/conversation/`,
975
- `${API_PREFIX}/assistant/`,
976
- `${API_PREFIX}/tag/`
977
- ]
978
- };
979
914
  var RETRYABLE_CODES = /* @__PURE__ */ new Set([
980
915
  "ECONNREFUSED",
981
916
  "ECONNRESET",
@@ -1014,7 +949,6 @@ function createArbiClient(options) {
1014
949
  const {
1015
950
  baseUrl,
1016
951
  deploymentDomain,
1017
- workspaceKeyUrlConfig = DEFAULT_WORKSPACE_KEY_URL_CONFIG,
1018
952
  reloginExcludePatterns = [`${API_PREFIX}/user/login`],
1019
953
  credentials = "include",
1020
954
  ssoTokenProvider = null,
@@ -1023,14 +957,13 @@ function createArbiClient(options) {
1023
957
  const retryFetch = createRetryFetch();
1024
958
  const session = createSessionManager();
1025
959
  const tokenProvider = createTokenProvider(session);
1026
- const workspaceKeyProvider = createWorkspaceKeyProvider(session);
1027
960
  const authState = createAuthStateProvider(session);
1028
961
  const cryptoProvider = {
1029
962
  ensureReady: initSodium,
1030
963
  signMessage,
1031
964
  deriveEncryptionKeypair: deriveEncryptionKeypairFromSigning,
1032
965
  sealedBoxDecrypt,
1033
- createWorkspaceKeyHeader,
966
+ sealKeyForSession,
1034
967
  fromBase64: base64ToBytes
1035
968
  };
1036
969
  const loginProvider = {
@@ -1093,12 +1026,6 @@ function createArbiClient(options) {
1093
1026
  fetch: retryFetch
1094
1027
  });
1095
1028
  fetchClient.use(createBearerAuthMiddleware({ tokenProvider }));
1096
- fetchClient.use(
1097
- createWorkspaceKeyMiddleware({
1098
- workspaceKeyProvider,
1099
- urlConfig: workspaceKeyUrlConfig
1100
- })
1101
- );
1102
1029
  fetchClient.use(
1103
1030
  createAutoReloginMiddleware({
1104
1031
  reloginHandler,
@@ -1127,8 +1054,9 @@ function createArbiClient(options) {
1127
1054
  signMessage,
1128
1055
  sealedBoxDecrypt,
1129
1056
  sealedBoxEncrypt,
1130
- createWorkspaceKeyHeader,
1057
+ sealKeyForSession,
1131
1058
  deriveEncryptionKeypairFromSigning,
1059
+ generateRandomSigningKeypair,
1132
1060
  derivePublicKey,
1133
1061
  base64ToBytes,
1134
1062
  bytesToBase64,
@@ -1187,8 +1115,6 @@ exports.createAutoReloginMiddleware = createAutoReloginMiddleware;
1187
1115
  exports.createBearerAuthMiddleware = createBearerAuthMiddleware;
1188
1116
  exports.createReloginHandler = createReloginHandler;
1189
1117
  exports.createSessionManager = createSessionManager;
1190
- exports.createWorkspaceKeyHeader = createWorkspaceKeyHeader;
1191
- exports.createWorkspaceKeyMiddleware = createWorkspaceKeyMiddleware;
1192
1118
  exports.decryptMessage = decryptMessage;
1193
1119
  exports.decryptMessageWithSharedSecret = decryptMessageWithSharedSecret;
1194
1120
  exports.deriveEncryptionKeypairFromSigning = deriveEncryptionKeypairFromSigning;
@@ -1199,6 +1125,7 @@ exports.generateKeyPairs = generateKeyPairs;
1199
1125
  exports.generateLoginCredentials = generateLoginCredentials;
1200
1126
  exports.generateLoginCredentialsFromKey = generateLoginCredentialsFromKey;
1201
1127
  exports.generatePasswordChangeCredentials = generatePasswordChangeCredentials;
1128
+ exports.generateRandomSigningKeypair = generateRandomSigningKeypair;
1202
1129
  exports.generateRecoveryPasswordChangeCredentials = generateRecoveryPasswordChangeCredentials;
1203
1130
  exports.generateRegistrationCredentials = generateRegistrationCredentials;
1204
1131
  exports.generateUserKeypairs = generateUserKeypairs;
@@ -1207,9 +1134,9 @@ exports.hasSession = hasSession;
1207
1134
  exports.initSodium = initSodium;
1208
1135
  exports.initializeDatabase = initializeDatabase;
1209
1136
  exports.isMessageType = isMessageType;
1210
- exports.needsWorkspaceKey = needsWorkspaceKey;
1211
1137
  exports.parseServerMessage = parseServerMessage;
1212
1138
  exports.saveSession = saveSession;
1139
+ exports.sealKeyForSession = sealKeyForSession;
1213
1140
  exports.sealedBoxDecrypt = sealedBoxDecrypt;
1214
1141
  exports.sealedBoxEncrypt = sealedBoxEncrypt;
1215
1142
  exports.signMessage = signMessage;