@nimbase/cli 0.1.1 → 0.2.0
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/chunk-2BYB6W4B.js +44 -0
- package/dist/chunk-2BYB6W4B.js.map +1 -0
- package/dist/chunk-6MCLE65K.js +46 -0
- package/dist/chunk-6MCLE65K.js.map +1 -0
- package/dist/chunk-IJCEQQWX.js +150 -0
- package/dist/chunk-IJCEQQWX.js.map +1 -0
- package/dist/chunk-KKZVWJDK.js +528 -0
- package/dist/chunk-KKZVWJDK.js.map +1 -0
- package/dist/commands/auth/login.js +8 -44
- package/dist/commands/auth/login.js.map +1 -1
- package/dist/commands/auth/logout.js +14 -15
- package/dist/commands/auth/logout.js.map +1 -1
- package/dist/commands/auth/signup.js +18 -0
- package/dist/commands/auth/signup.js.map +1 -0
- package/dist/commands/auth/status.js +1 -1
- package/dist/commands/connector/connect.js +93 -0
- package/dist/commands/connector/connect.js.map +1 -0
- package/dist/commands/connector/list.js +42 -0
- package/dist/commands/connector/list.js.map +1 -0
- package/dist/commands/connector/revoke.js +50 -0
- package/dist/commands/connector/revoke.js.map +1 -0
- package/dist/commands/connector/status.js +46 -0
- package/dist/commands/connector/status.js.map +1 -0
- package/dist/commands/connector/sync.js +57 -0
- package/dist/commands/connector/sync.js.map +1 -0
- package/dist/commands/workspace/create.js +2 -4
- package/dist/commands/workspace/create.js.map +1 -1
- package/dist/commands/workspace/current.js +2 -4
- package/dist/commands/workspace/current.js.map +1 -1
- package/dist/commands/workspace/list.js +2 -4
- package/dist/commands/workspace/list.js.map +1 -1
- package/dist/commands/workspace/select.js +2 -4
- package/dist/commands/workspace/select.js.map +1 -1
- package/package.json +13 -3
- package/dist/chunk-47FIFCKS.js +0 -292
- package/dist/chunk-47FIFCKS.js.map +0 -1
- package/dist/chunk-O5PHWVZD.js +0 -35
- package/dist/chunk-O5PHWVZD.js.map +0 -1
package/dist/chunk-47FIFCKS.js
DELETED
|
@@ -1,292 +0,0 @@
|
|
|
1
|
-
// ../../packages/sdk/src/contracts.ts
|
|
2
|
-
import { z } from "zod/v4";
|
|
3
|
-
|
|
4
|
-
// ../../packages/knowledge/src/model.ts
|
|
5
|
-
var toKnowledgeItemId = (value) => value;
|
|
6
|
-
|
|
7
|
-
// ../../packages/sources/src/model.ts
|
|
8
|
-
var toSourceId = (value) => value;
|
|
9
|
-
|
|
10
|
-
// ../../packages/tenancy/src/index.ts
|
|
11
|
-
var toWorkspaceId = (value) => value;
|
|
12
|
-
|
|
13
|
-
// ../../packages/sdk/src/contracts.ts
|
|
14
|
-
var userSchema = z.object({
|
|
15
|
-
id: z.string(),
|
|
16
|
-
name: z.string(),
|
|
17
|
-
email: z.string()
|
|
18
|
-
});
|
|
19
|
-
var sessionSchema = z.object({ user: userSchema });
|
|
20
|
-
var workspaceSchema = z.object({
|
|
21
|
-
id: z.uuid(),
|
|
22
|
-
name: z.string(),
|
|
23
|
-
slug: z.string()
|
|
24
|
-
}).transform((workspace) => ({
|
|
25
|
-
...workspace,
|
|
26
|
-
id: toWorkspaceId(workspace.id)
|
|
27
|
-
}));
|
|
28
|
-
var workspaceListSchema = z.object({
|
|
29
|
-
workspaces: z.array(workspaceSchema)
|
|
30
|
-
});
|
|
31
|
-
var workspaceCreatedSchema = z.object({ workspace: workspaceSchema });
|
|
32
|
-
var retrievalResponseSchema = z.object({
|
|
33
|
-
kind: z.literal("success"),
|
|
34
|
-
evidence: z.array(
|
|
35
|
-
z.object({
|
|
36
|
-
excerpt: z.string(),
|
|
37
|
-
provenance: z.object({
|
|
38
|
-
workspaceId: z.uuid(),
|
|
39
|
-
knowledgeItemId: z.uuid(),
|
|
40
|
-
sourceId: z.uuid(),
|
|
41
|
-
sourceExternalId: z.string(),
|
|
42
|
-
sourceRevisionKey: z.string(),
|
|
43
|
-
observedAt: z.iso.datetime()
|
|
44
|
-
}).transform((provenance) => ({
|
|
45
|
-
...provenance,
|
|
46
|
-
workspaceId: toWorkspaceId(provenance.workspaceId),
|
|
47
|
-
knowledgeItemId: toKnowledgeItemId(provenance.knowledgeItemId),
|
|
48
|
-
sourceId: toSourceId(provenance.sourceId),
|
|
49
|
-
observedAt: new Date(provenance.observedAt)
|
|
50
|
-
}))
|
|
51
|
-
})
|
|
52
|
-
),
|
|
53
|
-
retrievedAt: z.iso.datetime().transform((value) => new Date(value))
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
// ../../packages/sdk/src/client.ts
|
|
57
|
-
var ApiError = class extends Error {
|
|
58
|
-
constructor(message, status) {
|
|
59
|
-
super(message);
|
|
60
|
-
this.status = status;
|
|
61
|
-
this.name = "ApiError";
|
|
62
|
-
}
|
|
63
|
-
status;
|
|
64
|
-
};
|
|
65
|
-
var NimbaseApi = class {
|
|
66
|
-
constructor(baseUrl, request = fetch, createRequestId = () => crypto.randomUUID()) {
|
|
67
|
-
this.baseUrl = baseUrl;
|
|
68
|
-
this.request = request;
|
|
69
|
-
this.createRequestId = createRequestId;
|
|
70
|
-
this.origin = new URL(baseUrl).origin;
|
|
71
|
-
}
|
|
72
|
-
baseUrl;
|
|
73
|
-
request;
|
|
74
|
-
createRequestId;
|
|
75
|
-
origin;
|
|
76
|
-
async signIn(email, password) {
|
|
77
|
-
const response = await this.request(this.url("/api/auth/sign-in/email"), {
|
|
78
|
-
method: "POST",
|
|
79
|
-
headers: {
|
|
80
|
-
"Content-Type": "application/json",
|
|
81
|
-
Origin: this.origin
|
|
82
|
-
},
|
|
83
|
-
body: JSON.stringify({ email, password })
|
|
84
|
-
});
|
|
85
|
-
if (!response.ok) throw await apiError(response, "Sign-in failed.");
|
|
86
|
-
const token = response.headers.get("set-auth-token");
|
|
87
|
-
if (!token) {
|
|
88
|
-
throw new Error("The server did not issue a CLI session token.");
|
|
89
|
-
}
|
|
90
|
-
return token;
|
|
91
|
-
}
|
|
92
|
-
async getUser(token) {
|
|
93
|
-
const response = await this.request(this.url("/api/auth/get-session"), {
|
|
94
|
-
headers: authorization(token)
|
|
95
|
-
});
|
|
96
|
-
if (!response.ok) throw await apiError(response, "Session expired.");
|
|
97
|
-
const session = sessionSchema.safeParse(await response.json());
|
|
98
|
-
if (!session.success) throw new ApiError("Session expired.", 401);
|
|
99
|
-
return session.data.user;
|
|
100
|
-
}
|
|
101
|
-
async signOut(token) {
|
|
102
|
-
const response = await this.request(this.url("/api/auth/sign-out"), {
|
|
103
|
-
method: "POST",
|
|
104
|
-
headers: {
|
|
105
|
-
...authorization(token),
|
|
106
|
-
"Content-Type": "application/json",
|
|
107
|
-
Origin: this.origin
|
|
108
|
-
},
|
|
109
|
-
body: "{}"
|
|
110
|
-
});
|
|
111
|
-
if (!response.ok) throw await apiError(response, "Sign-out failed.");
|
|
112
|
-
}
|
|
113
|
-
async listWorkspaces(token) {
|
|
114
|
-
const response = await this.request(this.url("/api/workspaces"), {
|
|
115
|
-
headers: authorization(token)
|
|
116
|
-
});
|
|
117
|
-
if (!response.ok) {
|
|
118
|
-
throw await apiError(response, "Could not load workspaces.");
|
|
119
|
-
}
|
|
120
|
-
return workspaceListSchema.parse(await response.json()).workspaces;
|
|
121
|
-
}
|
|
122
|
-
async createWorkspace(token, name) {
|
|
123
|
-
const response = await this.request(this.url("/api/workspaces"), {
|
|
124
|
-
method: "POST",
|
|
125
|
-
headers: {
|
|
126
|
-
...authorization(token),
|
|
127
|
-
"Content-Type": "application/json"
|
|
128
|
-
},
|
|
129
|
-
body: JSON.stringify({ requestId: this.createRequestId(), name })
|
|
130
|
-
});
|
|
131
|
-
if (!response.ok) {
|
|
132
|
-
throw await apiError(response, "Could not create the workspace.");
|
|
133
|
-
}
|
|
134
|
-
return workspaceCreatedSchema.parse(await response.json()).workspace;
|
|
135
|
-
}
|
|
136
|
-
async retrieve(token, workspaceId, query, limit = 10) {
|
|
137
|
-
const response = await this.request(
|
|
138
|
-
this.url(`/api/workspaces/${encodeURIComponent(workspaceId)}/retrieval`),
|
|
139
|
-
{
|
|
140
|
-
method: "POST",
|
|
141
|
-
headers: {
|
|
142
|
-
...authorization(token),
|
|
143
|
-
"Content-Type": "application/json",
|
|
144
|
-
Origin: this.origin
|
|
145
|
-
},
|
|
146
|
-
body: JSON.stringify({ query, limit })
|
|
147
|
-
}
|
|
148
|
-
);
|
|
149
|
-
if (!response.ok) {
|
|
150
|
-
throw await apiError(response, "Could not retrieve workspace memory.");
|
|
151
|
-
}
|
|
152
|
-
return retrievalResponseSchema.parse(await response.json());
|
|
153
|
-
}
|
|
154
|
-
url(path) {
|
|
155
|
-
return new URL(path, this.baseUrl);
|
|
156
|
-
}
|
|
157
|
-
};
|
|
158
|
-
function authorization(token) {
|
|
159
|
-
return { Authorization: `Bearer ${token}` };
|
|
160
|
-
}
|
|
161
|
-
async function apiError(response, fallback) {
|
|
162
|
-
const value = await response.json().catch(() => null);
|
|
163
|
-
if (typeof value === "object" && value !== null && "message" in value && typeof value.message === "string") {
|
|
164
|
-
return new ApiError(value.message, response.status);
|
|
165
|
-
}
|
|
166
|
-
return new ApiError(fallback, response.status);
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
// src/credentials.ts
|
|
170
|
-
import { homedir } from "os";
|
|
171
|
-
import { join } from "path";
|
|
172
|
-
import { z as z3 } from "zod/v4";
|
|
173
|
-
|
|
174
|
-
// src/env.ts
|
|
175
|
-
import { createEnv } from "@t3-oss/env-core";
|
|
176
|
-
import { z as z2 } from "zod/v4";
|
|
177
|
-
var env = createEnv({
|
|
178
|
-
server: {
|
|
179
|
-
HOME: z2.string().optional(),
|
|
180
|
-
NIMBASE_API_URL: z2.url().default("https://api.nimbase.ai"),
|
|
181
|
-
XDG_CONFIG_HOME: z2.string().optional()
|
|
182
|
-
},
|
|
183
|
-
runtimeEnv: process.env,
|
|
184
|
-
emptyStringAsUndefined: true
|
|
185
|
-
});
|
|
186
|
-
|
|
187
|
-
// src/private-json-file.ts
|
|
188
|
-
import { randomUUID } from "crypto";
|
|
189
|
-
import {
|
|
190
|
-
chmod,
|
|
191
|
-
mkdir,
|
|
192
|
-
readFile,
|
|
193
|
-
rename,
|
|
194
|
-
rm,
|
|
195
|
-
writeFile
|
|
196
|
-
} from "fs/promises";
|
|
197
|
-
import { dirname } from "path";
|
|
198
|
-
async function readValidatedJsonFile(path, schema, description) {
|
|
199
|
-
let contents;
|
|
200
|
-
try {
|
|
201
|
-
contents = await readFile(path, "utf8");
|
|
202
|
-
} catch (error) {
|
|
203
|
-
if (isMissingFile(error)) return null;
|
|
204
|
-
throw new Error(`Could not read ${description} at ${path}`, {
|
|
205
|
-
cause: error
|
|
206
|
-
});
|
|
207
|
-
}
|
|
208
|
-
try {
|
|
209
|
-
return schema.parse(JSON.parse(contents));
|
|
210
|
-
} catch {
|
|
211
|
-
await removePrivateFile(path);
|
|
212
|
-
return null;
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
async function writePrivateJsonFile(path, value) {
|
|
216
|
-
const directory = dirname(path);
|
|
217
|
-
const temporaryPath = `${path}.${randomUUID()}.tmp`;
|
|
218
|
-
await mkdir(directory, { recursive: true, mode: 448 });
|
|
219
|
-
await chmod(directory, 448);
|
|
220
|
-
try {
|
|
221
|
-
await writeFile(temporaryPath, `${JSON.stringify(value)}
|
|
222
|
-
`, {
|
|
223
|
-
flag: "wx",
|
|
224
|
-
mode: 384
|
|
225
|
-
});
|
|
226
|
-
await chmod(temporaryPath, 384);
|
|
227
|
-
await rename(temporaryPath, path);
|
|
228
|
-
} catch (error) {
|
|
229
|
-
await rm(temporaryPath, { force: true }).catch(() => void 0);
|
|
230
|
-
throw error;
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
async function removePrivateFile(path) {
|
|
234
|
-
await rm(path, { force: true });
|
|
235
|
-
}
|
|
236
|
-
function isMissingFile(error) {
|
|
237
|
-
return typeof error === "object" && error !== null && "code" in error && error.code === "ENOENT";
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
// src/credentials.ts
|
|
241
|
-
var credentialsSchema = z3.object({ token: z3.string().min(1) });
|
|
242
|
-
function credentialsPath(environment = env) {
|
|
243
|
-
const configRoot = environment.XDG_CONFIG_HOME ?? join(environment.HOME ?? homedir(), ".config");
|
|
244
|
-
return join(configRoot, "nimbase", "credentials.json");
|
|
245
|
-
}
|
|
246
|
-
async function readToken(path = credentialsPath()) {
|
|
247
|
-
const credentials = await readValidatedJsonFile(
|
|
248
|
-
path,
|
|
249
|
-
credentialsSchema,
|
|
250
|
-
"CLI credentials"
|
|
251
|
-
);
|
|
252
|
-
return credentials?.token ?? null;
|
|
253
|
-
}
|
|
254
|
-
async function writeToken(token, path = credentialsPath()) {
|
|
255
|
-
await writePrivateJsonFile(path, credentialsSchema.parse({ token }));
|
|
256
|
-
}
|
|
257
|
-
async function clearToken(path = credentialsPath()) {
|
|
258
|
-
await removePrivateFile(path);
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
// src/base-command.ts
|
|
262
|
-
import { Command } from "@oclif/core";
|
|
263
|
-
var NimbaseCommand = class extends Command {
|
|
264
|
-
api = new NimbaseApi(env.NIMBASE_API_URL);
|
|
265
|
-
async requireToken() {
|
|
266
|
-
const token = await readToken();
|
|
267
|
-
if (!token) this.error("You are not signed in. Run `nimbase auth login`.");
|
|
268
|
-
return token;
|
|
269
|
-
}
|
|
270
|
-
async handleError(error) {
|
|
271
|
-
if (error instanceof ApiError && error.status === 401) {
|
|
272
|
-
await clearToken();
|
|
273
|
-
this.error("Your session has expired. Run `nimbase auth login` again.");
|
|
274
|
-
}
|
|
275
|
-
this.error(
|
|
276
|
-
error instanceof Error ? error.message : "Something went wrong."
|
|
277
|
-
);
|
|
278
|
-
}
|
|
279
|
-
};
|
|
280
|
-
|
|
281
|
-
export {
|
|
282
|
-
ApiError,
|
|
283
|
-
readValidatedJsonFile,
|
|
284
|
-
writePrivateJsonFile,
|
|
285
|
-
removePrivateFile,
|
|
286
|
-
credentialsPath,
|
|
287
|
-
readToken,
|
|
288
|
-
writeToken,
|
|
289
|
-
clearToken,
|
|
290
|
-
NimbaseCommand
|
|
291
|
-
};
|
|
292
|
-
//# sourceMappingURL=chunk-47FIFCKS.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../packages/sdk/src/contracts.ts","../../../packages/knowledge/src/model.ts","../../../packages/sources/src/model.ts","../../../packages/tenancy/src/index.ts","../../../packages/sdk/src/client.ts","../src/credentials.ts","../src/env.ts","../src/private-json-file.ts","../src/base-command.ts"],"sourcesContent":["import { z } from \"zod/v4\";\n\nimport { toKnowledgeItemId } from \"@nimbase/knowledge\";\nimport { toSourceId } from \"@nimbase/sources\";\nimport { toWorkspaceId } from \"@nimbase/tenancy\";\n\nexport const userSchema = z.object({\n id: z.string(),\n name: z.string(),\n email: z.string(),\n});\n\nexport const sessionSchema = z.object({ user: userSchema });\n\nexport const workspaceSchema = z\n .object({\n id: z.uuid(),\n name: z.string(),\n slug: z.string(),\n })\n .transform((workspace) => ({\n ...workspace,\n id: toWorkspaceId(workspace.id),\n }));\n\nexport const workspaceListSchema = z.object({\n workspaces: z.array(workspaceSchema),\n});\n\nexport const workspaceCreatedSchema = z.object({ workspace: workspaceSchema });\n\nexport const retrievalResponseSchema = z.object({\n kind: z.literal(\"success\"),\n evidence: z.array(\n z.object({\n excerpt: z.string(),\n provenance: z\n .object({\n workspaceId: z.uuid(),\n knowledgeItemId: z.uuid(),\n sourceId: z.uuid(),\n sourceExternalId: z.string(),\n sourceRevisionKey: z.string(),\n observedAt: z.iso.datetime(),\n })\n .transform((provenance) => ({\n ...provenance,\n workspaceId: toWorkspaceId(provenance.workspaceId),\n knowledgeItemId: toKnowledgeItemId(provenance.knowledgeItemId),\n sourceId: toSourceId(provenance.sourceId),\n observedAt: new Date(provenance.observedAt),\n })),\n }),\n ),\n retrievedAt: z.iso.datetime().transform((value) => new Date(value)),\n});\n\nexport type User = z.infer<typeof userSchema>;\nexport type Workspace = z.infer<typeof workspaceSchema>;\nexport type RetrievalResult = z.infer<typeof retrievalResponseSchema>;\n","import type { SourceId } from \"@nimbase/sources\";\nimport type { WorkspaceId } from \"@nimbase/tenancy\";\n\ndeclare const knowledgeItemIdBrand: unique symbol;\n\nexport type KnowledgeItemId = string & {\n readonly [knowledgeItemIdBrand]: \"KnowledgeItemId\";\n};\n\nexport const toKnowledgeItemId = (value: string) => value as KnowledgeItemId;\n\nexport type JsonValue =\n | boolean\n | number\n | string\n | null\n | readonly JsonValue[]\n | { readonly [key: string]: JsonValue };\n\nexport type KnowledgeMetadata = Readonly<Record<string, JsonValue>>;\n\nexport interface KnowledgeContent {\n mediaType: string;\n text: string;\n}\n\nexport interface KnowledgeProvenance {\n sourceId: SourceId;\n externalId: string;\n revisionKey: string;\n observedAt: Date;\n}\n\nexport interface KnowledgeItem {\n id: KnowledgeItemId;\n workspaceId: WorkspaceId;\n type: string;\n content: KnowledgeContent;\n provenance: KnowledgeProvenance;\n metadata: KnowledgeMetadata;\n createdAt: Date;\n updatedAt: Date;\n}\n","import type { ActorId } from \"@nimbase/access\";\nimport type { WorkspaceId } from \"@nimbase/tenancy\";\n\nimport type { ConnectorConnectionId } from \"./connector\";\n\ndeclare const sourceIdBrand: unique symbol;\n\nexport type SourceId = string & {\n readonly [sourceIdBrand]: \"SourceId\";\n};\n\nexport const toSourceId = (value: string) => value as SourceId;\n\nexport interface Source {\n id: SourceId;\n workspaceId: WorkspaceId;\n connectionId?: ConnectorConnectionId;\n createdByActorId: ActorId;\n provider: string;\n externalId: string;\n name: string;\n createdAt: Date;\n updatedAt: Date;\n}\n","declare const workspaceIdBrand: unique symbol;\n\nexport type WorkspaceId = string & {\n readonly [workspaceIdBrand]: \"WorkspaceId\";\n};\n\nexport const toWorkspaceId = (value: string) => value as WorkspaceId;\n\nexport interface Workspace {\n id: WorkspaceId;\n slug: string;\n name: string;\n}\n","import type { RetrievalResult, User, Workspace } from \"./contracts\";\nimport {\n retrievalResponseSchema,\n sessionSchema,\n workspaceCreatedSchema,\n workspaceListSchema,\n} from \"./contracts\";\n\nexport class ApiError extends Error {\n constructor(\n message: string,\n readonly status: number,\n ) {\n super(message);\n this.name = \"ApiError\";\n }\n}\n\nexport class NimbaseApi {\n private readonly origin: string;\n\n constructor(\n private readonly baseUrl: string,\n private readonly request: typeof fetch = fetch,\n private readonly createRequestId: () => string = () => crypto.randomUUID(),\n ) {\n this.origin = new URL(baseUrl).origin;\n }\n\n async signIn(email: string, password: string): Promise<string> {\n const response = await this.request(this.url(\"/api/auth/sign-in/email\"), {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Origin: this.origin,\n },\n body: JSON.stringify({ email, password }),\n });\n if (!response.ok) throw await apiError(response, \"Sign-in failed.\");\n\n const token = response.headers.get(\"set-auth-token\");\n if (!token) {\n throw new Error(\"The server did not issue a CLI session token.\");\n }\n return token;\n }\n\n async getUser(token: string): Promise<User> {\n const response = await this.request(this.url(\"/api/auth/get-session\"), {\n headers: authorization(token),\n });\n if (!response.ok) throw await apiError(response, \"Session expired.\");\n const session = sessionSchema.safeParse(await response.json());\n if (!session.success) throw new ApiError(\"Session expired.\", 401);\n return session.data.user;\n }\n\n async signOut(token: string): Promise<void> {\n const response = await this.request(this.url(\"/api/auth/sign-out\"), {\n method: \"POST\",\n headers: {\n ...authorization(token),\n \"Content-Type\": \"application/json\",\n Origin: this.origin,\n },\n body: \"{}\",\n });\n if (!response.ok) throw await apiError(response, \"Sign-out failed.\");\n }\n\n async listWorkspaces(token: string): Promise<Workspace[]> {\n const response = await this.request(this.url(\"/api/workspaces\"), {\n headers: authorization(token),\n });\n if (!response.ok) {\n throw await apiError(response, \"Could not load workspaces.\");\n }\n return workspaceListSchema.parse(await response.json()).workspaces;\n }\n\n async createWorkspace(token: string, name: string): Promise<Workspace> {\n const response = await this.request(this.url(\"/api/workspaces\"), {\n method: \"POST\",\n headers: {\n ...authorization(token),\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ requestId: this.createRequestId(), name }),\n });\n if (!response.ok) {\n throw await apiError(response, \"Could not create the workspace.\");\n }\n return workspaceCreatedSchema.parse(await response.json()).workspace;\n }\n\n async retrieve(\n token: string,\n workspaceId: string,\n query: string,\n limit = 10,\n ): Promise<RetrievalResult> {\n const response = await this.request(\n this.url(`/api/workspaces/${encodeURIComponent(workspaceId)}/retrieval`),\n {\n method: \"POST\",\n headers: {\n ...authorization(token),\n \"Content-Type\": \"application/json\",\n Origin: this.origin,\n },\n body: JSON.stringify({ query, limit }),\n },\n );\n if (!response.ok) {\n throw await apiError(response, \"Could not retrieve workspace memory.\");\n }\n return retrievalResponseSchema.parse(await response.json());\n }\n\n private url(path: string): URL {\n return new URL(path, this.baseUrl);\n }\n}\n\nfunction authorization(token: string): Record<string, string> {\n return { Authorization: `Bearer ${token}` };\n}\n\nasync function apiError(\n response: Response,\n fallback: string,\n): Promise<ApiError> {\n const value: unknown = await response.json().catch(() => null);\n if (\n typeof value === \"object\" &&\n value !== null &&\n \"message\" in value &&\n typeof value.message === \"string\"\n ) {\n return new ApiError(value.message, response.status);\n }\n return new ApiError(fallback, response.status);\n}\n","import { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { z } from \"zod/v4\";\n\nimport { env } from \"./env.js\";\nimport {\n readValidatedJsonFile,\n removePrivateFile,\n writePrivateJsonFile,\n} from \"./private-json-file.js\";\n\nconst credentialsSchema = z.object({ token: z.string().min(1) });\n\ninterface ConfigEnvironment {\n HOME?: string;\n XDG_CONFIG_HOME?: string;\n}\n\nexport function credentialsPath(environment: ConfigEnvironment = env) {\n const configRoot =\n environment.XDG_CONFIG_HOME ??\n join(environment.HOME ?? homedir(), \".config\");\n return join(configRoot, \"nimbase\", \"credentials.json\");\n}\n\nexport async function readToken(\n path = credentialsPath(),\n): Promise<string | null> {\n const credentials = await readValidatedJsonFile(\n path,\n credentialsSchema,\n \"CLI credentials\",\n );\n return credentials?.token ?? null;\n}\n\nexport async function writeToken(\n token: string,\n path = credentialsPath(),\n): Promise<void> {\n await writePrivateJsonFile(path, credentialsSchema.parse({ token }));\n}\n\nexport async function clearToken(path = credentialsPath()): Promise<void> {\n await removePrivateFile(path);\n}\n","import { createEnv } from \"@t3-oss/env-core\";\nimport { z } from \"zod/v4\";\n\nexport const env = createEnv({\n server: {\n HOME: z.string().optional(),\n NIMBASE_API_URL: z.url().default(\"https://api.nimbase.ai\"),\n XDG_CONFIG_HOME: z.string().optional(),\n },\n runtimeEnv: process.env,\n emptyStringAsUndefined: true,\n});\n","import { randomUUID } from \"node:crypto\";\nimport {\n chmod,\n mkdir,\n readFile,\n rename,\n rm,\n writeFile,\n} from \"node:fs/promises\";\nimport { dirname } from \"node:path\";\nimport type { ZodType } from \"zod/v4\";\n\nexport async function readValidatedJsonFile<T>(\n path: string,\n schema: ZodType<T>,\n description: string,\n): Promise<T | null> {\n let contents: string;\n try {\n contents = await readFile(path, \"utf8\");\n } catch (error) {\n if (isMissingFile(error)) return null;\n throw new Error(`Could not read ${description} at ${path}`, {\n cause: error,\n });\n }\n\n try {\n return schema.parse(JSON.parse(contents));\n } catch {\n await removePrivateFile(path);\n return null;\n }\n}\n\nexport async function writePrivateJsonFile(\n path: string,\n value: unknown,\n): Promise<void> {\n const directory = dirname(path);\n const temporaryPath = `${path}.${randomUUID()}.tmp`;\n await mkdir(directory, { recursive: true, mode: 0o700 });\n await chmod(directory, 0o700);\n try {\n await writeFile(temporaryPath, `${JSON.stringify(value)}\\n`, {\n flag: \"wx\",\n mode: 0o600,\n });\n await chmod(temporaryPath, 0o600);\n await rename(temporaryPath, path);\n } catch (error) {\n await rm(temporaryPath, { force: true }).catch(() => undefined);\n throw error;\n }\n}\n\nexport async function removePrivateFile(path: string): Promise<void> {\n await rm(path, { force: true });\n}\n\nfunction isMissingFile(error: unknown): boolean {\n return (\n typeof error === \"object\" &&\n error !== null &&\n \"code\" in error &&\n error.code === \"ENOENT\"\n );\n}\n","import { Command } from \"@oclif/core\";\n\nimport { ApiError, NimbaseApi } from \"@nimbase/sdk\";\n\nimport { clearToken, readToken } from \"./credentials.js\";\nimport { env } from \"./env.js\";\n\nexport abstract class NimbaseCommand extends Command {\n protected readonly api = new NimbaseApi(env.NIMBASE_API_URL);\n\n protected async requireToken(): Promise<string> {\n const token = await readToken();\n if (!token) this.error(\"You are not signed in. Run `nimbase auth login`.\");\n return token;\n }\n\n protected async handleError(error: unknown): Promise<never> {\n if (error instanceof ApiError && error.status === 401) {\n await clearToken();\n this.error(\"Your session has expired. Run `nimbase auth login` again.\");\n }\n this.error(\n error instanceof Error ? error.message : \"Something went wrong.\",\n );\n }\n}\n"],"mappings":"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","names":["z","z","z"]}
|
package/dist/chunk-O5PHWVZD.js
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
credentialsPath,
|
|
3
|
-
readValidatedJsonFile,
|
|
4
|
-
removePrivateFile,
|
|
5
|
-
writePrivateJsonFile
|
|
6
|
-
} from "./chunk-47FIFCKS.js";
|
|
7
|
-
|
|
8
|
-
// src/preferences.ts
|
|
9
|
-
import { dirname, join } from "path";
|
|
10
|
-
import { z } from "zod/v4";
|
|
11
|
-
var preferencesSchema = z.object({ workspaceId: z.uuid().optional() });
|
|
12
|
-
function preferencesPath() {
|
|
13
|
-
return join(dirname(credentialsPath()), "preferences.json");
|
|
14
|
-
}
|
|
15
|
-
async function readWorkspaceId(path = preferencesPath()) {
|
|
16
|
-
const value = await readValidatedJsonFile(
|
|
17
|
-
path,
|
|
18
|
-
preferencesSchema,
|
|
19
|
-
"CLI preferences"
|
|
20
|
-
);
|
|
21
|
-
return value?.workspaceId ?? null;
|
|
22
|
-
}
|
|
23
|
-
async function writeWorkspaceId(workspaceId, path = preferencesPath()) {
|
|
24
|
-
await writePrivateJsonFile(path, preferencesSchema.parse({ workspaceId }));
|
|
25
|
-
}
|
|
26
|
-
async function clearWorkspaceId(path = preferencesPath()) {
|
|
27
|
-
await removePrivateFile(path);
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
export {
|
|
31
|
-
readWorkspaceId,
|
|
32
|
-
writeWorkspaceId,
|
|
33
|
-
clearWorkspaceId
|
|
34
|
-
};
|
|
35
|
-
//# sourceMappingURL=chunk-O5PHWVZD.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/preferences.ts"],"sourcesContent":["import { dirname, join } from \"node:path\";\nimport { z } from \"zod/v4\";\n\nimport { credentialsPath } from \"./credentials.js\";\nimport {\n readValidatedJsonFile,\n removePrivateFile,\n writePrivateJsonFile,\n} from \"./private-json-file.js\";\n\nconst preferencesSchema = z.object({ workspaceId: z.uuid().optional() });\n\nfunction preferencesPath(): string {\n return join(dirname(credentialsPath()), \"preferences.json\");\n}\n\nexport async function readWorkspaceId(\n path = preferencesPath(),\n): Promise<string | null> {\n const value = await readValidatedJsonFile(\n path,\n preferencesSchema,\n \"CLI preferences\",\n );\n return value?.workspaceId ?? null;\n}\n\nexport async function writeWorkspaceId(\n workspaceId: string,\n path = preferencesPath(),\n): Promise<void> {\n await writePrivateJsonFile(path, preferencesSchema.parse({ workspaceId }));\n}\n\nexport async function clearWorkspaceId(\n path = preferencesPath(),\n): Promise<void> {\n await removePrivateFile(path);\n}\n"],"mappings":";;;;;;;;AAAA,SAAS,SAAS,YAAY;AAC9B,SAAS,SAAS;AASlB,IAAM,oBAAoB,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAEvE,SAAS,kBAA0B;AACjC,SAAO,KAAK,QAAQ,gBAAgB,CAAC,GAAG,kBAAkB;AAC5D;AAEA,eAAsB,gBACpB,OAAO,gBAAgB,GACC;AACxB,QAAM,QAAQ,MAAM;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,SAAO,OAAO,eAAe;AAC/B;AAEA,eAAsB,iBACpB,aACA,OAAO,gBAAgB,GACR;AACf,QAAM,qBAAqB,MAAM,kBAAkB,MAAM,EAAE,YAAY,CAAC,CAAC;AAC3E;AAEA,eAAsB,iBACpB,OAAO,gBAAgB,GACR;AACf,QAAM,kBAAkB,IAAI;AAC9B;","names":[]}
|