@arbidocs/sdk 0.3.65 → 0.3.67
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/{browser-D2dkZnc9.d.cts → browser-B5xRfc7b.d.cts} +143 -17
- package/dist/{browser-D2dkZnc9.d.ts → browser-B5xRfc7b.d.ts} +143 -17
- package/dist/browser.cjs +136 -60
- package/dist/browser.cjs.map +1 -1
- package/dist/browser.d.cts +1 -1
- package/dist/browser.d.ts +1 -1
- package/dist/browser.js +136 -60
- package/dist/browser.js.map +1 -1
- package/dist/index.cjs +153 -62
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +151 -63
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -3602,7 +3602,7 @@ var FileConfigStore = class {
|
|
|
3602
3602
|
sessionFile;
|
|
3603
3603
|
metadataFile;
|
|
3604
3604
|
constructor(configDir) {
|
|
3605
|
-
const arbiBase = process.env.ARBI_CONFIG_DIR ?? path2__default.default.join(os2__default.default.homedir(), ".arbi");
|
|
3605
|
+
const arbiBase = process.env.ARBI_CONFIG_DIR ?? (fs2__default.default.existsSync(path2__default.default.join(process.cwd(), ".arbi", "credentials.json")) ? path2__default.default.join(process.cwd(), ".arbi") : path2__default.default.join(os2__default.default.homedir(), ".arbi"));
|
|
3606
3606
|
const arbiId = process.env.ARBI_ID;
|
|
3607
3607
|
this.configDir = configDir ?? (arbiId ? path2__default.default.join(arbiBase, arbiId) : arbiBase);
|
|
3608
3608
|
this.configFile = path2__default.default.join(this.configDir, "config.json");
|
|
@@ -3700,12 +3700,12 @@ var FileConfigStore = class {
|
|
|
3700
3700
|
...existing,
|
|
3701
3701
|
signingPrivateKeyBase64: b64encode(data.signingPrivateKey),
|
|
3702
3702
|
serverSessionKeyBase64: data.serverSessionKey ? b64encode(data.serverSessionKey) : existing.serverSessionKeyBase64,
|
|
3703
|
-
// A fresh server session
|
|
3704
|
-
//
|
|
3705
|
-
// re-
|
|
3703
|
+
// A fresh server session = a fresh ``session.workspaces``
|
|
3704
|
+
// dict. The previous session's deposits do not transfer, so
|
|
3705
|
+
// wipe the client mirror to force re-deposit on next touch.
|
|
3706
3706
|
accessToken: void 0,
|
|
3707
|
-
|
|
3708
|
-
|
|
3707
|
+
tokenTimestamp: void 0,
|
|
3708
|
+
openedWorkspaces: void 0
|
|
3709
3709
|
});
|
|
3710
3710
|
}
|
|
3711
3711
|
};
|
|
@@ -3904,6 +3904,7 @@ function sleep(ms) {
|
|
|
3904
3904
|
}
|
|
3905
3905
|
|
|
3906
3906
|
// src/auth.ts
|
|
3907
|
+
var TOKEN_MAX_AGE_MS = 50 * 60 * 1e3;
|
|
3907
3908
|
function formatWorkspaceChoices(wsList) {
|
|
3908
3909
|
return wsList.map((ws) => {
|
|
3909
3910
|
const totalDocs = ws.shared_document_count + ws.private_document_count;
|
|
@@ -3934,11 +3935,11 @@ async function createAuthenticatedClient(config, creds, store) {
|
|
|
3934
3935
|
});
|
|
3935
3936
|
store.saveCredentials({
|
|
3936
3937
|
...creds,
|
|
3938
|
+
userExtId: loginResult.userExtId ?? creds.userExtId,
|
|
3937
3939
|
serverSessionKeyBase64: arbi.crypto.bytesToBase64(loginResult.serverSessionKey),
|
|
3938
3940
|
accessToken: void 0,
|
|
3939
|
-
|
|
3940
|
-
|
|
3941
|
-
tokenTimestamp: void 0
|
|
3941
|
+
tokenTimestamp: void 0,
|
|
3942
|
+
openedWorkspaces: void 0
|
|
3942
3943
|
});
|
|
3943
3944
|
return { arbi, loginResult };
|
|
3944
3945
|
}
|
|
@@ -3948,13 +3949,18 @@ async function performPasswordLogin(config, email, password, store) {
|
|
|
3948
3949
|
const loginResult = await arbi.auth.login({ email, password });
|
|
3949
3950
|
store.saveCredentials({
|
|
3950
3951
|
email,
|
|
3952
|
+
userExtId: loginResult.userExtId,
|
|
3951
3953
|
signingPrivateKeyBase64: arbi.crypto.bytesToBase64(loginResult.signingPrivateKey),
|
|
3952
3954
|
serverSessionKeyBase64: arbi.crypto.bytesToBase64(loginResult.serverSessionKey),
|
|
3953
|
-
//
|
|
3955
|
+
// `parent_ext_id` is set for persistent agent accounts (the user is
|
|
3956
|
+
// an Assistant owned by another user). Persisting it makes the CLI's
|
|
3957
|
+
// `arbi listen` work — it requires this to confirm a real agent
|
|
3958
|
+
// identity. Regular users get `null`, which we store as `undefined`.
|
|
3959
|
+
parentExtId: loginResult.parentExtId ?? void 0,
|
|
3960
|
+
// New session = no workspaces deposited yet.
|
|
3954
3961
|
accessToken: void 0,
|
|
3955
|
-
|
|
3956
|
-
|
|
3957
|
-
tokenTimestamp: void 0
|
|
3962
|
+
tokenTimestamp: void 0,
|
|
3963
|
+
openedWorkspaces: void 0
|
|
3958
3964
|
});
|
|
3959
3965
|
return { arbi, loginResult, config };
|
|
3960
3966
|
}
|
|
@@ -3965,12 +3971,13 @@ async function performSigningKeyLogin(config, email, signingPrivateKeyBase64, st
|
|
|
3965
3971
|
const loginResult = await arbi.auth.loginWithKey({ email, signingPrivateKey });
|
|
3966
3972
|
store.saveCredentials({
|
|
3967
3973
|
email,
|
|
3974
|
+
userExtId: loginResult.userExtId,
|
|
3968
3975
|
signingPrivateKeyBase64,
|
|
3969
3976
|
serverSessionKeyBase64: arbi.crypto.bytesToBase64(loginResult.serverSessionKey),
|
|
3977
|
+
parentExtId: loginResult.parentExtId ?? void 0,
|
|
3970
3978
|
accessToken: void 0,
|
|
3971
|
-
|
|
3972
|
-
|
|
3973
|
-
tokenTimestamp: void 0
|
|
3979
|
+
tokenTimestamp: void 0,
|
|
3980
|
+
openedWorkspaces: void 0
|
|
3974
3981
|
});
|
|
3975
3982
|
return { arbi, loginResult, config };
|
|
3976
3983
|
}
|
|
@@ -3994,13 +4001,14 @@ async function performSsoDeviceFlowLogin(config, email, password, store, callbac
|
|
|
3994
4001
|
const loginResult = await arbi.auth.login({ email, password, ssoToken });
|
|
3995
4002
|
store.saveCredentials({
|
|
3996
4003
|
email,
|
|
4004
|
+
userExtId: loginResult.userExtId,
|
|
3997
4005
|
signingPrivateKeyBase64: arbi.crypto.bytesToBase64(loginResult.signingPrivateKey),
|
|
3998
4006
|
serverSessionKeyBase64: arbi.crypto.bytesToBase64(loginResult.serverSessionKey),
|
|
4007
|
+
parentExtId: loginResult.parentExtId ?? void 0,
|
|
3999
4008
|
ssoToken,
|
|
4000
4009
|
accessToken: void 0,
|
|
4001
|
-
|
|
4002
|
-
|
|
4003
|
-
tokenTimestamp: void 0
|
|
4010
|
+
tokenTimestamp: void 0,
|
|
4011
|
+
openedWorkspaces: void 0
|
|
4004
4012
|
});
|
|
4005
4013
|
return { arbi, loginResult, config };
|
|
4006
4014
|
}
|
|
@@ -4050,38 +4058,79 @@ async function getRawWorkspaceKey(arbi, workspaceId, signingPrivateKeyBase64) {
|
|
|
4050
4058
|
});
|
|
4051
4059
|
return client.sealedBoxDecrypt(ws.wrapped_key, encryptionKeyPair.secretKey);
|
|
4052
4060
|
}
|
|
4061
|
+
async function openWorkspaceEntry(arbi, ws, serverSessionKey, signingPrivateKeyBase64) {
|
|
4062
|
+
if (ws.wrapped_key) {
|
|
4063
|
+
const sealedKey = await selectWorkspace(
|
|
4064
|
+
arbi,
|
|
4065
|
+
ws.external_id,
|
|
4066
|
+
ws.wrapped_key,
|
|
4067
|
+
serverSessionKey,
|
|
4068
|
+
signingPrivateKeyBase64
|
|
4069
|
+
);
|
|
4070
|
+
const { error: error2 } = await arbi.fetch.POST("/v1/workspace/{workspace_ext_id}/open", {
|
|
4071
|
+
params: { path: { workspace_ext_id: ws.external_id } },
|
|
4072
|
+
body: { workspace_key: sealedKey }
|
|
4073
|
+
});
|
|
4074
|
+
if (error2) {
|
|
4075
|
+
throw new ArbiError(`Workspace open failed for ${ws.external_id}: ${JSON.stringify(error2)}`);
|
|
4076
|
+
}
|
|
4077
|
+
return sealedKey;
|
|
4078
|
+
}
|
|
4079
|
+
arbi.session.setSelectedWorkspace(ws.external_id);
|
|
4080
|
+
const { error } = await arbi.fetch.POST("/v1/workspace/{workspace_ext_id}/open", {
|
|
4081
|
+
params: { path: { workspace_ext_id: ws.external_id } },
|
|
4082
|
+
body: {}
|
|
4083
|
+
});
|
|
4084
|
+
if (error) {
|
|
4085
|
+
throw new ArbiError(`Workspace open failed for ${ws.external_id}: ${JSON.stringify(error)}`);
|
|
4086
|
+
}
|
|
4087
|
+
return null;
|
|
4088
|
+
}
|
|
4053
4089
|
async function selectWorkspaceById(arbi, workspaceId, serverSessionKey, signingPrivateKeyBase64) {
|
|
4054
4090
|
const { data: workspaces, error } = await arbi.fetch.GET("/v1/user/workspaces");
|
|
4055
4091
|
if (error || !workspaces) {
|
|
4056
4092
|
throw new ArbiError("Failed to fetch workspaces");
|
|
4057
4093
|
}
|
|
4058
4094
|
const ws = workspaces.find((w2) => w2.external_id === workspaceId);
|
|
4059
|
-
if (!ws
|
|
4060
|
-
throw new ArbiError(`Workspace ${workspaceId} not found
|
|
4095
|
+
if (!ws) {
|
|
4096
|
+
throw new ArbiError(`Workspace ${workspaceId} not found`);
|
|
4061
4097
|
}
|
|
4062
|
-
const sealedKey = await
|
|
4063
|
-
|
|
4064
|
-
ws.external_id,
|
|
4065
|
-
ws.
|
|
4066
|
-
|
|
4067
|
-
|
|
4068
|
-
|
|
4069
|
-
|
|
4070
|
-
|
|
4071
|
-
|
|
4072
|
-
|
|
4073
|
-
|
|
4098
|
+
const sealedKey = await openWorkspaceEntry(arbi, ws, serverSessionKey, signingPrivateKeyBase64);
|
|
4099
|
+
return {
|
|
4100
|
+
external_id: ws.external_id,
|
|
4101
|
+
name: ws.name,
|
|
4102
|
+
wrapped_key: ws.wrapped_key ?? null,
|
|
4103
|
+
sealed_key: sealedKey
|
|
4104
|
+
};
|
|
4105
|
+
}
|
|
4106
|
+
function isSessionAlive(creds) {
|
|
4107
|
+
return !!(creds.accessToken && creds.tokenTimestamp && Date.now() - new Date(creds.tokenTimestamp).getTime() < TOKEN_MAX_AGE_MS);
|
|
4108
|
+
}
|
|
4109
|
+
async function buildAuthFromCache(config, creds, store) {
|
|
4110
|
+
const arbi = client.createArbiClient(buildClientOptions(config, store, creds.email));
|
|
4111
|
+
await arbi.crypto.initSodium();
|
|
4112
|
+
arbi.session.setUser(creds.email, creds.userExtId);
|
|
4113
|
+
arbi.session.setAccessToken(creds.accessToken);
|
|
4114
|
+
const signingPrivateKey = client.base64ToBytes(creds.signingPrivateKeyBase64);
|
|
4115
|
+
const serverSessionKey = client.base64ToBytes(creds.serverSessionKeyBase64);
|
|
4116
|
+
const loginResult = {
|
|
4117
|
+
accessToken: creds.accessToken,
|
|
4118
|
+
userExtId: creds.userExtId,
|
|
4119
|
+
signingPrivateKey,
|
|
4120
|
+
serverSessionKey
|
|
4121
|
+
};
|
|
4122
|
+
return { arbi, loginResult };
|
|
4074
4123
|
}
|
|
4075
4124
|
async function resolveAuth(store) {
|
|
4076
4125
|
const config = store.requireConfig();
|
|
4077
4126
|
const creds = store.requireCredentials();
|
|
4127
|
+
if (isSessionAlive(creds)) {
|
|
4128
|
+
const { arbi: arbi2, loginResult: loginResult2 } = await buildAuthFromCache(config, creds, store);
|
|
4129
|
+
return { arbi: arbi2, loginResult: loginResult2, config };
|
|
4130
|
+
}
|
|
4078
4131
|
const { arbi, loginResult } = await createAuthenticatedClient(config, creds, store);
|
|
4079
4132
|
return { arbi, loginResult, config };
|
|
4080
4133
|
}
|
|
4081
|
-
var TOKEN_MAX_AGE_MS = 50 * 60 * 1e3;
|
|
4082
|
-
function isCachedTokenValid(creds, workspaceId) {
|
|
4083
|
-
return !!(creds.accessToken && creds.sealedWorkspaceKey && creds.workspaceId === workspaceId && creds.tokenTimestamp && Date.now() - new Date(creds.tokenTimestamp).getTime() < TOKEN_MAX_AGE_MS);
|
|
4084
|
-
}
|
|
4085
4134
|
async function resolveWorkspace(store, workspaceOpt) {
|
|
4086
4135
|
const config = store.requireConfig();
|
|
4087
4136
|
const creds = store.requireCredentials();
|
|
@@ -4089,53 +4138,52 @@ async function resolveWorkspace(store, workspaceOpt) {
|
|
|
4089
4138
|
if (!workspaceId) {
|
|
4090
4139
|
throw new ArbiError("No workspace selected. Run: arbi workspace select <id>");
|
|
4091
4140
|
}
|
|
4092
|
-
if (
|
|
4093
|
-
const arbi2 =
|
|
4094
|
-
await arbi2.crypto.initSodium();
|
|
4095
|
-
arbi2.session.setUser(creds.email);
|
|
4141
|
+
if (isSessionAlive(creds)) {
|
|
4142
|
+
const { arbi: arbi2, loginResult: loginResult2 } = await buildAuthFromCache(config, creds, store);
|
|
4096
4143
|
arbi2.session.setSelectedWorkspace(workspaceId);
|
|
4097
|
-
|
|
4098
|
-
|
|
4099
|
-
|
|
4100
|
-
|
|
4101
|
-
|
|
4102
|
-
|
|
4103
|
-
|
|
4104
|
-
|
|
4144
|
+
await selectWorkspaceById(
|
|
4145
|
+
arbi2,
|
|
4146
|
+
workspaceId,
|
|
4147
|
+
loginResult2.serverSessionKey,
|
|
4148
|
+
creds.signingPrivateKeyBase64
|
|
4149
|
+
);
|
|
4150
|
+
const nextOpened = Array.from(/* @__PURE__ */ new Set([...creds.openedWorkspaces ?? [], workspaceId]));
|
|
4151
|
+
store.saveCredentials({
|
|
4152
|
+
...store.requireCredentials(),
|
|
4153
|
+
openedWorkspaces: nextOpened
|
|
4154
|
+
});
|
|
4105
4155
|
return {
|
|
4106
4156
|
arbi: arbi2,
|
|
4107
4157
|
loginResult: loginResult2,
|
|
4108
4158
|
config,
|
|
4109
4159
|
workspaceId,
|
|
4110
|
-
accessToken: creds.accessToken
|
|
4111
|
-
sealedWorkspaceKey: creds.sealedWorkspaceKey
|
|
4160
|
+
accessToken: creds.accessToken
|
|
4112
4161
|
};
|
|
4113
4162
|
}
|
|
4114
4163
|
const { arbi, loginResult } = await createAuthenticatedClient(config, creds, store);
|
|
4115
|
-
|
|
4164
|
+
await selectWorkspaceById(
|
|
4116
4165
|
arbi,
|
|
4117
4166
|
workspaceId,
|
|
4118
4167
|
loginResult.serverSessionKey,
|
|
4119
4168
|
creds.signingPrivateKeyBase64
|
|
4120
4169
|
);
|
|
4121
4170
|
const accessToken = arbi.session.getState().accessToken;
|
|
4122
|
-
const sealedWorkspaceKey = await generateEncryptedWorkspaceKey(
|
|
4123
|
-
arbi,
|
|
4124
|
-
wsInfo.wrapped_key,
|
|
4125
|
-
loginResult.serverSessionKey,
|
|
4126
|
-
creds.signingPrivateKeyBase64
|
|
4127
|
-
);
|
|
4128
4171
|
if (!accessToken) {
|
|
4129
4172
|
throw new ArbiError("Authentication error \u2014 missing token");
|
|
4130
4173
|
}
|
|
4131
4174
|
store.saveCredentials({
|
|
4132
4175
|
...store.requireCredentials(),
|
|
4133
4176
|
accessToken,
|
|
4134
|
-
|
|
4135
|
-
workspaceId
|
|
4136
|
-
tokenTimestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
4177
|
+
tokenTimestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
4178
|
+
openedWorkspaces: [workspaceId]
|
|
4137
4179
|
});
|
|
4138
|
-
return {
|
|
4180
|
+
return {
|
|
4181
|
+
arbi,
|
|
4182
|
+
loginResult,
|
|
4183
|
+
config,
|
|
4184
|
+
workspaceId,
|
|
4185
|
+
accessToken
|
|
4186
|
+
};
|
|
4139
4187
|
}
|
|
4140
4188
|
|
|
4141
4189
|
// src/sse.ts
|
|
@@ -4843,6 +4891,7 @@ async function uploadFile(auth, fileData, fileName, options) {
|
|
|
4843
4891
|
const params = new URLSearchParams();
|
|
4844
4892
|
if (options?.folder) params.set("folder", sanitizeFolderPath(options.folder));
|
|
4845
4893
|
if (options?.configExtId) params.set("config_ext_id", options.configExtId);
|
|
4894
|
+
if (options?.wpType) params.set("wp_type", options.wpType);
|
|
4846
4895
|
const qs = params.toString();
|
|
4847
4896
|
const res = await authenticatedFetch({
|
|
4848
4897
|
...auth,
|
|
@@ -4858,6 +4907,7 @@ async function uploadFiles(auth, files, options) {
|
|
|
4858
4907
|
const params = new URLSearchParams();
|
|
4859
4908
|
if (options?.folder) params.set("folder", sanitizeFolderPath(options.folder));
|
|
4860
4909
|
if (options?.configExtId) params.set("config_ext_id", options.configExtId);
|
|
4910
|
+
if (options?.wpType) params.set("wp_type", options.wpType);
|
|
4861
4911
|
const qs = params.toString();
|
|
4862
4912
|
const res = await authenticatedFetch({
|
|
4863
4913
|
...auth,
|
|
@@ -5183,6 +5233,10 @@ __export(assistant_exports, {
|
|
|
5183
5233
|
buildRetrievalChunkTool: () => buildRetrievalChunkTool,
|
|
5184
5234
|
buildRetrievalFullContextTool: () => buildRetrievalFullContextTool,
|
|
5185
5235
|
buildRetrievalTocTool: () => buildRetrievalTocTool,
|
|
5236
|
+
filterSkills: () => filterSkills,
|
|
5237
|
+
listSkills: () => listSkills,
|
|
5238
|
+
parseSlashCommand: () => parseSlashCommand,
|
|
5239
|
+
parseSlashTokenInProgress: () => parseSlashTokenInProgress,
|
|
5186
5240
|
queryAssistant: () => queryAssistant,
|
|
5187
5241
|
respondToAgent: () => respondToAgent,
|
|
5188
5242
|
retrieve: () => retrieve
|
|
@@ -5278,6 +5332,40 @@ async function respondToAgent(arbi, assistantMessageExtId, answer) {
|
|
|
5278
5332
|
"Failed to respond to agent"
|
|
5279
5333
|
);
|
|
5280
5334
|
}
|
|
5335
|
+
async function listSkills(arbi, options) {
|
|
5336
|
+
const result = requireData(
|
|
5337
|
+
await arbi.fetch.GET("/v1/assistant/skills", {
|
|
5338
|
+
params: { query: { include_hidden: options?.includeHidden ?? false } }
|
|
5339
|
+
}),
|
|
5340
|
+
"Failed to list skills"
|
|
5341
|
+
);
|
|
5342
|
+
return result.skills;
|
|
5343
|
+
}
|
|
5344
|
+
function parseSlashCommand(input) {
|
|
5345
|
+
const m2 = /^\s*\/([a-zA-Z0-9_-]+)(?:\s+([\s\S]*))?$/.exec(input);
|
|
5346
|
+
if (!m2) return null;
|
|
5347
|
+
return { slug: m2[1].toLowerCase(), args: m2[2] ?? "" };
|
|
5348
|
+
}
|
|
5349
|
+
function parseSlashTokenInProgress(buffer) {
|
|
5350
|
+
const m2 = /^\s*\/([a-zA-Z0-9_-]*)$/.exec(buffer);
|
|
5351
|
+
return m2 ? m2[1].toLowerCase() : null;
|
|
5352
|
+
}
|
|
5353
|
+
function filterSkills(items, query, pinned = []) {
|
|
5354
|
+
const q2 = query.toLowerCase();
|
|
5355
|
+
const pinnedSet = new Set(pinned);
|
|
5356
|
+
const key = (s2) => (s2.slug ?? s2.name).toLowerCase();
|
|
5357
|
+
const matched = q2 ? items.filter((s2) => key(s2).includes(q2)) : items.slice();
|
|
5358
|
+
matched.sort((a2, b2) => {
|
|
5359
|
+
const aPinned = pinnedSet.has(key(a2)) ? 0 : 1;
|
|
5360
|
+
const bPinned = pinnedSet.has(key(b2)) ? 0 : 1;
|
|
5361
|
+
if (aPinned !== bPinned) return aPinned - bPinned;
|
|
5362
|
+
const aPrefix = key(a2).startsWith(q2) ? 0 : 1;
|
|
5363
|
+
const bPrefix = key(b2).startsWith(q2) ? 0 : 1;
|
|
5364
|
+
if (aPrefix !== bPrefix) return aPrefix - bPrefix;
|
|
5365
|
+
return key(a2).localeCompare(key(b2));
|
|
5366
|
+
});
|
|
5367
|
+
return matched;
|
|
5368
|
+
}
|
|
5281
5369
|
|
|
5282
5370
|
// src/operations/tags.ts
|
|
5283
5371
|
var tags_exports = {};
|
|
@@ -7169,6 +7257,7 @@ exports.doctags = doctags_exports;
|
|
|
7169
7257
|
exports.documents = documents_exports;
|
|
7170
7258
|
exports.documentsNode = documents_node_exports;
|
|
7171
7259
|
exports.files = files_exports;
|
|
7260
|
+
exports.filterSkills = filterSkills;
|
|
7172
7261
|
exports.formatAgentStepLabel = formatAgentStepLabel;
|
|
7173
7262
|
exports.formatFileSize = formatFileSize;
|
|
7174
7263
|
exports.formatStreamSummary = formatStreamSummary;
|
|
@@ -7183,6 +7272,8 @@ exports.getRawWorkspaceKey = getRawWorkspaceKey;
|
|
|
7183
7272
|
exports.health = health_exports;
|
|
7184
7273
|
exports.listen = listen_exports;
|
|
7185
7274
|
exports.parseSSEEvents = parseSSEEvents;
|
|
7275
|
+
exports.parseSlashCommand = parseSlashCommand;
|
|
7276
|
+
exports.parseSlashTokenInProgress = parseSlashTokenInProgress;
|
|
7186
7277
|
exports.performPasswordLogin = performPasswordLogin;
|
|
7187
7278
|
exports.performSigningKeyLogin = performSigningKeyLogin;
|
|
7188
7279
|
exports.performSsoDeviceFlowLogin = performSsoDeviceFlowLogin;
|