@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 +17 -90
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +697 -199
- package/dist/index.d.ts +697 -199
- package/dist/index.js +16 -88
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
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
|
|
161
|
+
async function sealKeyForSession(workspaceKey, serverSessionPublicKey) {
|
|
189
162
|
await initSodium();
|
|
190
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
492
|
+
await deps.workspaceOpenProvider.openWorkspace(
|
|
540
493
|
loginResult.accessToken,
|
|
541
494
|
selectedWorkspaceId,
|
|
542
495
|
encryptedWorkspaceKey
|
|
543
496
|
);
|
|
544
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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;
|