@batalabs/virlow-mcp-core 3.116.1 → 3.117.1
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/api.d.ts +92 -3
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +23 -1
- package/dist/api.js.map +1 -1
- package/dist/attachments.d.ts +20 -2
- package/dist/attachments.d.ts.map +1 -1
- package/dist/attachments.js +135 -22
- package/dist/attachments.js.map +1 -1
- package/dist/cjs/api.d.ts +92 -3
- package/dist/cjs/api.js +23 -1
- package/dist/cjs/attachments.d.ts +20 -2
- package/dist/cjs/attachments.js +134 -21
- package/dist/cjs/exposure.d.ts +30 -4
- package/dist/cjs/exposure.js +48 -9
- package/dist/cjs/index.d.ts +4 -1
- package/dist/cjs/index.js +9 -2
- package/dist/cjs/keyring.d.ts +155 -0
- package/dist/cjs/keyring.js +319 -0
- package/dist/cjs/memories.d.ts +2 -2
- package/dist/cjs/notes.d.ts +52 -1
- package/dist/cjs/notes.js +296 -78
- package/dist/cjs/signer-file.d.ts +21 -0
- package/dist/cjs/signer-file.js +117 -0
- package/dist/exposure.d.ts +30 -4
- package/dist/exposure.d.ts.map +1 -1
- package/dist/exposure.js +47 -9
- package/dist/exposure.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/keyring.d.ts +156 -0
- package/dist/keyring.d.ts.map +1 -0
- package/dist/keyring.js +308 -0
- package/dist/keyring.js.map +1 -0
- package/dist/memories.d.ts +2 -2
- package/dist/notes.d.ts +52 -1
- package/dist/notes.d.ts.map +1 -1
- package/dist/notes.js +297 -79
- package/dist/notes.js.map +1 -1
- package/dist/signer-file.d.ts +22 -0
- package/dist/signer-file.d.ts.map +1 -0
- package/dist/signer-file.js +112 -0
- package/dist/signer-file.js.map +1 -0
- package/dist/tools.d.ts +10 -0
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +6 -2
- package/dist/tools.js.map +1 -1
- package/package.json +3 -3
package/dist/api.d.ts
CHANGED
|
@@ -48,9 +48,15 @@ export interface ApiNote {
|
|
|
48
48
|
updatedAt: string;
|
|
49
49
|
/** Encrypted v2 blob of the note's structured attrs (props, links, mentions). */
|
|
50
50
|
encryptedAttrs: string | null;
|
|
51
|
-
/** Set on a note in a shared workspace:
|
|
52
|
-
*
|
|
51
|
+
/** Set on a note in a shared workspace: the version of that workspace's
|
|
52
|
+
* key its ciphertext (title, content, attrs) is under. Null or absent means
|
|
53
|
+
* the account key. See keyring.ts. */
|
|
53
54
|
keyVersion?: number | null;
|
|
55
|
+
/** List and get send the note's folder along; its workspaceId says which
|
|
56
|
+
* shared workspace (if any) the note is in. Absent from older servers. */
|
|
57
|
+
folder?: {
|
|
58
|
+
workspaceId?: string | null;
|
|
59
|
+
} | null;
|
|
54
60
|
}
|
|
55
61
|
export interface NoteWrite {
|
|
56
62
|
title: string;
|
|
@@ -66,6 +72,11 @@ export interface NoteWrite {
|
|
|
66
72
|
archived?: boolean;
|
|
67
73
|
deleted?: boolean;
|
|
68
74
|
encryptedAttrs?: string | null;
|
|
75
|
+
/** In a shared workspace: the workspace key version every ciphertext in
|
|
76
|
+
* this write is under. The API requires it, equal to the workspace's
|
|
77
|
+
* current version, on any write that carries ciphertext there, and
|
|
78
|
+
* refuses it on a personal note. Never set for the account key. */
|
|
79
|
+
keyVersion?: number;
|
|
69
80
|
/** The version the write is based on; the API answers 409 NOTE_CONFLICT
|
|
70
81
|
* when the note has moved on since. */
|
|
71
82
|
expectedUpdatedAt?: string;
|
|
@@ -85,6 +96,58 @@ export interface ApiFolder {
|
|
|
85
96
|
memoryPaused?: boolean;
|
|
86
97
|
/** Encrypted v2 blob of the folder's property and view definitions. */
|
|
87
98
|
encryptedSchema: string | null;
|
|
99
|
+
/** The account the row belongs to: in a shared workspace, its owner. */
|
|
100
|
+
userId?: string | null;
|
|
101
|
+
/** In a shared workspace this account does not own: whether this member
|
|
102
|
+
* opened it to AI tools. Only this, never `mcpEnabled` (one value every
|
|
103
|
+
* editor can set), opens such a folder; absent means closed. */
|
|
104
|
+
mcpEnabledForMember?: boolean;
|
|
105
|
+
/** The shared workspace this folder belongs to; null or absent = personal. */
|
|
106
|
+
workspaceId?: string | null;
|
|
107
|
+
/** In a shared workspace: the name, under the workspace key (`name` is "[ENCRYPTED]"). */
|
|
108
|
+
encryptedName?: string | null;
|
|
109
|
+
/** The workspace key version of encryptedName and encryptedSchema; null = the account key. */
|
|
110
|
+
keyVersion?: number | null;
|
|
111
|
+
}
|
|
112
|
+
/** An account's sharing keys as the API stores them (GET /api/users/me/identity). */
|
|
113
|
+
export interface ApiIdentity {
|
|
114
|
+
box: string;
|
|
115
|
+
sign: string;
|
|
116
|
+
/** "v2:" blob of the private halves, under the account key. */
|
|
117
|
+
sealedPrivate: string;
|
|
118
|
+
}
|
|
119
|
+
/** One shared workspace this account belongs to (GET /api/workspaces). */
|
|
120
|
+
export interface ApiWorkspaceSummary {
|
|
121
|
+
id: string;
|
|
122
|
+
rootFolderId: string;
|
|
123
|
+
role: 'owner' | 'editor' | 'viewer';
|
|
124
|
+
ownerId: string;
|
|
125
|
+
/** The current key version: every new ciphertext in the workspace uses it. */
|
|
126
|
+
keyVersion: number;
|
|
127
|
+
state: 'sharing' | 'shared';
|
|
128
|
+
}
|
|
129
|
+
/** One of this account's grants in a workspace, as GET /api/workspaces/:id sends it. */
|
|
130
|
+
export interface ApiWorkspaceGrant {
|
|
131
|
+
keyVersion: number;
|
|
132
|
+
sealed: string;
|
|
133
|
+
signature: string;
|
|
134
|
+
granterId: string;
|
|
135
|
+
/** The granter's signing key as the server has it now; null if they have none. */
|
|
136
|
+
granterSign: string | null;
|
|
137
|
+
}
|
|
138
|
+
/** One person in a workspace, as GET /api/workspaces/:id sends them. */
|
|
139
|
+
export interface ApiWorkspaceMember {
|
|
140
|
+
userId: string;
|
|
141
|
+
role: 'owner' | 'editor' | 'viewer';
|
|
142
|
+
identity: {
|
|
143
|
+
box: string;
|
|
144
|
+
sign: string;
|
|
145
|
+
} | null;
|
|
146
|
+
}
|
|
147
|
+
export interface ApiWorkspaceDetail {
|
|
148
|
+
workspace: ApiWorkspaceSummary;
|
|
149
|
+
members: ApiWorkspaceMember[];
|
|
150
|
+
grants: ApiWorkspaceGrant[];
|
|
88
151
|
}
|
|
89
152
|
/** A reminder on a note, sent to its owner by email or Slack. */
|
|
90
153
|
export interface ApiReminder {
|
|
@@ -114,6 +177,8 @@ export interface ApiFile {
|
|
|
114
177
|
/** Set for a large file, whose content is in object storage in encrypted
|
|
115
178
|
* chunks rather than in the row. Absent or null for every other file. */
|
|
116
179
|
chunkSize?: number | null;
|
|
180
|
+
/** The workspace key version the name and content use; null = the account key. */
|
|
181
|
+
keyVersion?: number | null;
|
|
117
182
|
}
|
|
118
183
|
export interface ApiFileWithData extends ApiFile {
|
|
119
184
|
/** "v2:<iv>:<ciphertext>"; anything else is legacy v1. */
|
|
@@ -127,6 +192,8 @@ export interface FileUpload {
|
|
|
127
192
|
salt: string;
|
|
128
193
|
mimeType: string;
|
|
129
194
|
size: number;
|
|
195
|
+
/** In a shared workspace: the workspace key version it is encrypted under. */
|
|
196
|
+
keyVersion?: number;
|
|
130
197
|
}
|
|
131
198
|
export declare class VirlowApi {
|
|
132
199
|
private readonly baseUrl;
|
|
@@ -212,7 +279,13 @@ export declare class VirlowApi {
|
|
|
212
279
|
listFolders(): Promise<{
|
|
213
280
|
folders: ApiFolder[];
|
|
214
281
|
}>;
|
|
215
|
-
createFolder(name: string, parentId?: string | null, kind?: 'memories'
|
|
282
|
+
createFolder(name: string, parentId?: string | null, kind?: 'memories',
|
|
283
|
+
/** In a shared workspace: the name under the workspace key, and that key's
|
|
284
|
+
* version. `name` is then the "[ENCRYPTED]" placeholder. */
|
|
285
|
+
sealed?: {
|
|
286
|
+
encryptedName: string;
|
|
287
|
+
keyVersion: number;
|
|
288
|
+
}): Promise<ApiFolder>;
|
|
216
289
|
/** Partial update of a folder. Only `encryptedSchema` is used from here so
|
|
217
290
|
* far, and it is forwarded as an already-encrypted blob: nothing in this
|
|
218
291
|
* client encrypts, and nothing on the server can read it. */
|
|
@@ -221,6 +294,11 @@ export declare class VirlowApi {
|
|
|
221
294
|
parentId?: string | null;
|
|
222
295
|
mcpEnabled?: boolean;
|
|
223
296
|
encryptedSchema?: string | null;
|
|
297
|
+
/** In a shared workspace: the name re-encrypted with the schema, when
|
|
298
|
+
* the folder's ciphertext was under an older key version. */
|
|
299
|
+
encryptedName?: string;
|
|
300
|
+
/** In a shared workspace: the key version of the ciphertext sent. */
|
|
301
|
+
keyVersion?: number;
|
|
224
302
|
}): Promise<ApiFolder>;
|
|
225
303
|
listFiles(noteId: string, opts?: {
|
|
226
304
|
trashed?: boolean;
|
|
@@ -234,11 +312,22 @@ export declare class VirlowApi {
|
|
|
234
312
|
encryptedTitle?: string;
|
|
235
313
|
iv?: string;
|
|
236
314
|
noteId?: string;
|
|
315
|
+
/** A re-key: the content (or a large file's "v3:" header) under another key. */
|
|
316
|
+
encryptedData?: string;
|
|
317
|
+
/** In a shared workspace: the key version of the ciphertext sent. */
|
|
318
|
+
keyVersion?: number;
|
|
237
319
|
}): Promise<ApiFile>;
|
|
238
320
|
/** Moves the file to the note's Recently deleted. There is deliberately no
|
|
239
321
|
* way to hard-delete from here: Claude's deletes can always be undone. */
|
|
240
322
|
deleteFile(id: string): Promise<void>;
|
|
241
323
|
restoreFile(id: string): Promise<ApiFile>;
|
|
324
|
+
/** This account's sharing identity: public keys and the sealed private
|
|
325
|
+
* halves. Null until some device of this account has published one. */
|
|
326
|
+
getIdentity(): Promise<ApiIdentity | null>;
|
|
327
|
+
/** The shared workspaces this account belongs to. */
|
|
328
|
+
listWorkspaces(): Promise<ApiWorkspaceSummary[]>;
|
|
329
|
+
/** One shared workspace, with this account's grants (every key version it was given). */
|
|
330
|
+
getWorkspace(id: string): Promise<ApiWorkspaceDetail>;
|
|
242
331
|
/** This person's reminders on one note (a to-do is a note): pending ones
|
|
243
332
|
* and those from the last week. */
|
|
244
333
|
listReminders(noteId: string): Promise<ApiReminder[]>;
|
package/dist/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,qBAAa,QAAS,SAAQ,KAAK;aAEf,MAAM,EAAE,MAAM;gBAAd,MAAM,EAAE,MAAM,EAC9B,OAAO,EAAE,MAAM;CAKlB;AA6CD,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,mFAAmF;AACnF,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACpC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,WAAW,GACnB;IAAE,WAAW,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,WAAW,CAAC,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5G,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb;kFAC8E;IAC9E,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB;+EAC2E;IAC3E,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,iFAAiF;IACjF,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B;
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
package/dist/api.js
CHANGED
|
@@ -203,7 +203,10 @@ export class VirlowApi {
|
|
|
203
203
|
}
|
|
204
204
|
return { folders };
|
|
205
205
|
}
|
|
206
|
-
createFolder(name, parentId, kind
|
|
206
|
+
createFolder(name, parentId, kind,
|
|
207
|
+
/** In a shared workspace: the name under the workspace key, and that key's
|
|
208
|
+
* version. `name` is then the "[ENCRYPTED]" placeholder. */
|
|
209
|
+
sealed) {
|
|
207
210
|
// `kind` is omitted rather than sent as null: the API rejects unknown kinds
|
|
208
211
|
// and a namespace subfolder is an ordinary folder.
|
|
209
212
|
const body = {
|
|
@@ -212,6 +215,10 @@ export class VirlowApi {
|
|
|
212
215
|
};
|
|
213
216
|
if (kind !== undefined)
|
|
214
217
|
body.kind = kind;
|
|
218
|
+
if (sealed !== undefined) {
|
|
219
|
+
body.encryptedName = sealed.encryptedName;
|
|
220
|
+
body.keyVersion = sealed.keyVersion;
|
|
221
|
+
}
|
|
215
222
|
return this.request('POST', '/api/folders', body);
|
|
216
223
|
}
|
|
217
224
|
/** Partial update of a folder. Only `encryptedSchema` is used from here so
|
|
@@ -246,6 +253,21 @@ export class VirlowApi {
|
|
|
246
253
|
restoreFile(id) {
|
|
247
254
|
return this.request('POST', `/api/files/${encodeURIComponent(id)}/restore`);
|
|
248
255
|
}
|
|
256
|
+
/** This account's sharing identity: public keys and the sealed private
|
|
257
|
+
* halves. Null until some device of this account has published one. */
|
|
258
|
+
async getIdentity() {
|
|
259
|
+
const body = await this.request('GET', '/api/users/me/identity');
|
|
260
|
+
return body.identity ?? null;
|
|
261
|
+
}
|
|
262
|
+
/** The shared workspaces this account belongs to. */
|
|
263
|
+
async listWorkspaces() {
|
|
264
|
+
const body = await this.request('GET', '/api/workspaces');
|
|
265
|
+
return body.workspaces;
|
|
266
|
+
}
|
|
267
|
+
/** One shared workspace, with this account's grants (every key version it was given). */
|
|
268
|
+
getWorkspace(id) {
|
|
269
|
+
return this.request('GET', `/api/workspaces/${encodeURIComponent(id)}`);
|
|
270
|
+
}
|
|
249
271
|
/** This person's reminders on one note (a to-do is a note): pending ones
|
|
250
272
|
* and those from the last week. */
|
|
251
273
|
async listReminders(noteId) {
|
package/dist/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,QAAS,SAAQ,KAAK;IAEf;IADlB,YACkB,MAAc,EAC9B,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,WAAM,GAAN,MAAM,CAAQ;QAI9B,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IACzB,CAAC;CACF;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAS,iBAAiB,CAAC,IAAa,EAAE,QAAgB;IACxD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,QAAQ,CAAC;IAC/D,MAAM,CAAC,GAAG,IAA8C,CAAC;IACzD,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,OAAO,CAAC;IACjC,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,QAAQ,CAAC;IACvD,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IAExC,MAAM,MAAM,GAAI,GAA4B,CAAC,MAAM,CAAC;IACpD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,MAAM;aACjB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACb,MAAM,CAAC,GAAG,KAA8C,CAAC;YACzD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAChF,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;YACtE,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QAChD,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACrC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC;
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
package/dist/attachments.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type VirlowApi } from './api.js';
|
|
2
|
-
import type
|
|
2
|
+
import { type Vault } from './vault.js';
|
|
3
|
+
import { WorkspaceKeyring } from './keyring.js';
|
|
3
4
|
export interface AttachmentInfo {
|
|
4
5
|
id: string;
|
|
5
6
|
noteId: string;
|
|
@@ -13,7 +14,15 @@ export declare function largeFileMessage(size: number): string;
|
|
|
13
14
|
export declare class AttachmentsService {
|
|
14
15
|
private readonly api;
|
|
15
16
|
private readonly vault;
|
|
16
|
-
|
|
17
|
+
private readonly keyring;
|
|
18
|
+
/** Bumped when the vault locks. add() and rename() capture it before their
|
|
19
|
+
* first await and check it right before the upload or patch, so nothing is
|
|
20
|
+
* sent encrypted under a key from a session that has since locked. */
|
|
21
|
+
private epoch;
|
|
22
|
+
constructor(api: VirlowApi, vault: Vault,
|
|
23
|
+
/** Shared with NotesService (its `keyring`) so keys open once per unlock. */
|
|
24
|
+
keyring?: WorkspaceKeyring);
|
|
25
|
+
private requireSameSession;
|
|
17
26
|
list(noteId: string, includeTrashed: boolean): Promise<AttachmentInfo[]>;
|
|
18
27
|
add(input: {
|
|
19
28
|
noteId: string;
|
|
@@ -34,7 +43,16 @@ export declare class AttachmentsService {
|
|
|
34
43
|
/** Metadata with the filename decrypted. A legacy row's placeholder title
|
|
35
44
|
* does not decrypt; it falls back to its plaintext name, then a generic one. */
|
|
36
45
|
private describe;
|
|
46
|
+
private requirePlace;
|
|
47
|
+
/** Every note must be exposed. Returns where each one is, in order. */
|
|
37
48
|
private requireExposed;
|
|
49
|
+
/** The key a file is under: its own version (null = the account key) in its note's workspace. */
|
|
50
|
+
private readKey;
|
|
51
|
+
/** The key a new file, name or content in this note goes under. Never the
|
|
52
|
+
* account key in a shared workspace; a key that does not open is refused. */
|
|
53
|
+
private writeKey;
|
|
54
|
+
/** A file's content (inline) or file key (large file header) under `toKey`. */
|
|
55
|
+
private rekeyContent;
|
|
38
56
|
private requireSession;
|
|
39
57
|
}
|
|
40
58
|
//# sourceMappingURL=attachments.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attachments.d.ts","sourceRoot":"","sources":["../src/attachments.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"attachments.d.ts","sourceRoot":"","sources":["../src/attachments.ts"],"names":[],"mappings":"AAYA,OAAO,EAAwC,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAChF,OAAO,EAAe,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGhD,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAcD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD;AAmCD,qBAAa,kBAAkB;IAQ3B,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,KAAK;IARxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmB;IAC3C;;0EAEsE;IACtE,OAAO,CAAC,KAAK,CAAK;gBAGC,GAAG,EAAE,SAAS,EACd,KAAK,EAAE,KAAK;IAC7B,6EAA6E;IAC7E,OAAO,CAAC,EAAE,gBAAgB;IAQ5B,OAAO,CAAC,kBAAkB;IAQpB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAQxE,GAAG,CAAC,KAAK,EAAE;QACf,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,2FAA2F;QAC3F,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,KAAK,EAAE,UAAU,CAAC;KACnB,GAAG,OAAO,CAAC,cAAc,CAAC;IA6BrB,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,cAAc,CAAC;QAAC,KAAK,EAAE,UAAU,CAAA;KAAE,CAAC;IAoBtE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAiChE,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAgB3D,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOhC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAOlD;oFACgF;YAClE,QAAQ;YAWR,YAAY;IAM1B,uEAAuE;YACzD,cAAc;IAmC5B,iGAAiG;YACnF,OAAO;IAUrB;iFAC6E;YAC/D,QAAQ;IActB,+EAA+E;YACjE,YAAY;IAY1B,OAAO,CAAC,cAAc;CAKvB"}
|
package/dist/attachments.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
import { LegacyAttachmentError, bytesToBase64, decryptAttachment, decryptTitleField, encryptAttachment, encryptAttachmentName, } from '@batalabs/virlow-crypto';
|
|
1
|
+
import { LegacyAttachmentError, bytesToBase64, decryptAttachment, decryptTitleField, encryptAttachment, encryptAttachmentName, isV3Attachment, rewrapFileKey, } from '@batalabs/virlow-crypto';
|
|
2
2
|
import { computeExposure, isSharedNote, sharedNoteError } from './exposure.js';
|
|
3
|
+
import { NoWorkspaceKeyError, WriteRefusedError } from './keyring.js';
|
|
3
4
|
import { ApiError } from './api.js';
|
|
5
|
+
import { LockedError } from './vault.js';
|
|
6
|
+
import { WorkspaceKeyring } from './keyring.js';
|
|
4
7
|
import { PATH_MAX_BYTES, formatSize, inferMimeType, sanitizeFilename } from './attachment-format.js';
|
|
5
8
|
/** A file this vault's key cannot open: encrypted before the account had a
|
|
6
9
|
* master password, under the web app's old per-device key. */
|
|
@@ -44,16 +47,32 @@ function inferredMimeType(filename, fromText) {
|
|
|
44
47
|
export class AttachmentsService {
|
|
45
48
|
api;
|
|
46
49
|
vault;
|
|
47
|
-
|
|
50
|
+
keyring;
|
|
51
|
+
/** Bumped when the vault locks. add() and rename() capture it before their
|
|
52
|
+
* first await and check it right before the upload or patch, so nothing is
|
|
53
|
+
* sent encrypted under a key from a session that has since locked. */
|
|
54
|
+
epoch = 0;
|
|
55
|
+
constructor(api, vault,
|
|
56
|
+
/** Shared with NotesService (its `keyring`) so keys open once per unlock. */
|
|
57
|
+
keyring) {
|
|
48
58
|
this.api = api;
|
|
49
59
|
this.vault = vault;
|
|
60
|
+
this.keyring = keyring ?? new WorkspaceKeyring(api, vault);
|
|
61
|
+
this.vault.onLock = () => {
|
|
62
|
+
this.epoch++;
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
requireSameSession(startEpoch) {
|
|
66
|
+
if (this.epoch !== startEpoch) {
|
|
67
|
+
throw new LockedError('Vault is locked. Call this server\'s unlock tool and ask the user to finish unlocking their Virlow vault.');
|
|
68
|
+
}
|
|
50
69
|
}
|
|
51
70
|
async list(noteId, includeTrashed) {
|
|
52
71
|
const key = this.requireSession();
|
|
53
|
-
await this.
|
|
72
|
+
const place = await this.requirePlace(noteId);
|
|
54
73
|
const live = await this.api.listFiles(noteId);
|
|
55
74
|
const trashed = includeTrashed ? await this.api.listFiles(noteId, { trashed: true }) : [];
|
|
56
|
-
return Promise.all([...live, ...trashed].map((file) => this.describe(key, file)));
|
|
75
|
+
return Promise.all([...live, ...trashed].map((file) => this.describe(key, file, place)));
|
|
57
76
|
}
|
|
58
77
|
async add(input) {
|
|
59
78
|
// A backstop under the tools' own per-source caps, so no caller can encrypt
|
|
@@ -64,15 +83,21 @@ export class AttachmentsService {
|
|
|
64
83
|
throw new Error(`The file is ${formatSize(input.bytes.byteLength)}; the most that can be attached is ${formatSize(PATH_MAX_BYTES)}.`);
|
|
65
84
|
}
|
|
66
85
|
const key = this.requireSession();
|
|
67
|
-
|
|
86
|
+
const startEpoch = this.epoch;
|
|
87
|
+
const place = await this.requirePlace(input.noteId);
|
|
68
88
|
const filename = sanitizeFilename(input.filename);
|
|
69
|
-
|
|
89
|
+
// In a shared workspace, under its current key, sent with that version;
|
|
90
|
+
// never older than the version the note itself is under.
|
|
91
|
+
const choice = await this.writeKey(key, place, place.row.keyVersion ?? null);
|
|
92
|
+
const encrypted = await encryptAttachment(choice.key, filename, input.bytes);
|
|
93
|
+
this.requireSameSession(startEpoch);
|
|
70
94
|
const row = await this.api.uploadFile(input.noteId, {
|
|
71
95
|
...encrypted,
|
|
72
96
|
// Stored for the web app's legacy per-salt key; unused under a master key.
|
|
73
97
|
salt: bytesToBase64(crypto.getRandomValues(new Uint8Array(32))),
|
|
74
98
|
mimeType: input.mimeType ?? inferredMimeType(filename, input.fromText === true),
|
|
75
99
|
size: input.bytes.byteLength,
|
|
100
|
+
...(choice.keyVersion !== null ? { keyVersion: choice.keyVersion } : {}),
|
|
76
101
|
});
|
|
77
102
|
return { ...infoOf(row), filename };
|
|
78
103
|
}
|
|
@@ -80,7 +105,7 @@ export class AttachmentsService {
|
|
|
80
105
|
const key = this.requireSession();
|
|
81
106
|
// Metadata first, so a file in a closed folder is never downloaded at all.
|
|
82
107
|
const meta = await this.api.getFileMeta(id);
|
|
83
|
-
await this.
|
|
108
|
+
let place = await this.requirePlace(meta.noteId);
|
|
84
109
|
// A large file lives in object storage in chunks, far past what a tool
|
|
85
110
|
// result can carry. Say so before fetching anything.
|
|
86
111
|
if (meta.chunkSize)
|
|
@@ -88,9 +113,10 @@ export class AttachmentsService {
|
|
|
88
113
|
const file = await this.api.getFile(id);
|
|
89
114
|
// Moved between the two calls: check where it is now, too.
|
|
90
115
|
if (file.noteId !== meta.noteId)
|
|
91
|
-
await this.
|
|
116
|
+
place = await this.requirePlace(file.noteId);
|
|
117
|
+
const fileKey = await this.readKey(key, file, place);
|
|
92
118
|
try {
|
|
93
|
-
const { filename, bytes } = await decryptAttachment(
|
|
119
|
+
const { filename, bytes } = await decryptAttachment(fileKey, file);
|
|
94
120
|
return { info: { ...infoOf(file), filename: sanitizeFilename(filename) }, bytes };
|
|
95
121
|
}
|
|
96
122
|
catch (err) {
|
|
@@ -99,12 +125,30 @@ export class AttachmentsService {
|
|
|
99
125
|
}
|
|
100
126
|
async rename(id, newFilename) {
|
|
101
127
|
const key = this.requireSession();
|
|
128
|
+
const startEpoch = this.epoch;
|
|
102
129
|
const file = await this.api.getFileMeta(id);
|
|
103
|
-
await this.
|
|
130
|
+
const place = await this.requirePlace(file.noteId);
|
|
104
131
|
const filename = sanitizeFilename(newFilename);
|
|
105
|
-
const
|
|
106
|
-
|
|
107
|
-
|
|
132
|
+
const choice = await this.writeKey(key, place, file.keyVersion ?? null);
|
|
133
|
+
let patch = await encryptAttachmentName(choice.key, filename);
|
|
134
|
+
if (choice.keyVersion !== null) {
|
|
135
|
+
patch.keyVersion = choice.keyVersion;
|
|
136
|
+
// The row has one key version for its name and its content, and the
|
|
137
|
+
// API sets it from this write. A file still under an older version of
|
|
138
|
+
// the workspace key has its content (or, for a large file, the file key
|
|
139
|
+
// in its header) re-encrypted in the same request.
|
|
140
|
+
if ((file.keyVersion ?? null) !== choice.keyVersion) {
|
|
141
|
+
// From the account key into a workspace's is the owner's sharing run,
|
|
142
|
+
// never this (see NotesService.requireOwnedForRekey).
|
|
143
|
+
if ((file.keyVersion ?? null) === null && choice.ownerId !== this.vault.session.userId) {
|
|
144
|
+
throw new Error('This file is still under your own key but the server places it in a shared workspace you do not ' +
|
|
145
|
+
'own, so it was not re-encrypted. Open it in the Virlow app.');
|
|
146
|
+
}
|
|
147
|
+
patch = { ...patch, encryptedData: await this.rekeyContent(key, id, place, choice.key) };
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
this.requireSameSession(startEpoch);
|
|
151
|
+
const row = await this.api.patchFile(id, patch).catch((err) => {
|
|
108
152
|
throw renameFailure(err);
|
|
109
153
|
});
|
|
110
154
|
return { ...infoOf(row), filename };
|
|
@@ -114,8 +158,13 @@ export class AttachmentsService {
|
|
|
114
158
|
const file = await this.api.getFileMeta(id);
|
|
115
159
|
// Both ends: out of a closed folder would reveal it, into one would hide
|
|
116
160
|
// a file where the user cannot expect Claude to have put it.
|
|
117
|
-
await this.requireExposed(file.noteId, toNoteId);
|
|
118
|
-
|
|
161
|
+
const [from, to] = await this.requireExposed(file.noteId, toNoteId);
|
|
162
|
+
// A file's key belongs to its workspace; the API refuses a move across.
|
|
163
|
+
if (from && to && from.workspaceId !== to.workspaceId) {
|
|
164
|
+
throw new Error('This file cannot be moved in or out of a shared workspace: that changes its encryption. ' +
|
|
165
|
+
'Download it and attach it again instead.');
|
|
166
|
+
}
|
|
167
|
+
return this.describe(key, await this.api.patchFile(id, { noteId: toNoteId }), to);
|
|
119
168
|
}
|
|
120
169
|
async trash(id) {
|
|
121
170
|
this.requireSession();
|
|
@@ -126,13 +175,14 @@ export class AttachmentsService {
|
|
|
126
175
|
async restore(id) {
|
|
127
176
|
const key = this.requireSession();
|
|
128
177
|
const file = await this.api.getFileMeta(id);
|
|
129
|
-
await this.
|
|
130
|
-
return this.describe(key, await this.api.restoreFile(id));
|
|
178
|
+
const place = await this.requirePlace(file.noteId);
|
|
179
|
+
return this.describe(key, await this.api.restoreFile(id), place);
|
|
131
180
|
}
|
|
132
181
|
/** Metadata with the filename decrypted. A legacy row's placeholder title
|
|
133
182
|
* does not decrypt; it falls back to its plaintext name, then a generic one. */
|
|
134
|
-
async describe(
|
|
183
|
+
async describe(accountKey, file, place) {
|
|
135
184
|
try {
|
|
185
|
+
const key = await this.readKey(accountKey, file, place);
|
|
136
186
|
const filename = await decryptTitleField(key, file.encryptedTitle, file.iv);
|
|
137
187
|
// Names reach the model; one with a newline in it must not add a line.
|
|
138
188
|
return { ...infoOf(file), filename: sanitizeFilename(filename) };
|
|
@@ -141,18 +191,81 @@ export class AttachmentsService {
|
|
|
141
191
|
return infoOf(file);
|
|
142
192
|
}
|
|
143
193
|
}
|
|
194
|
+
async requirePlace(noteId) {
|
|
195
|
+
const [place] = await this.requireExposed(noteId);
|
|
196
|
+
if (!place)
|
|
197
|
+
throw new Error(`Note ${noteId} was not found.`);
|
|
198
|
+
return place;
|
|
199
|
+
}
|
|
200
|
+
/** Every note must be exposed. Returns where each one is, in order. */
|
|
144
201
|
async requireExposed(...noteIds) {
|
|
145
202
|
const [{ folders }, ...rows] = await Promise.all([
|
|
146
203
|
this.api.listFolders(),
|
|
147
204
|
...noteIds.map((id) => this.api.getNote(id)),
|
|
148
205
|
]);
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
206
|
+
// Same rule as NotesService: a folder in a workspace someone else owns is
|
|
207
|
+
// open only by this member's own switch (exposure.ts, isForeignFolder).
|
|
208
|
+
const exposure = computeExposure(folders, {
|
|
209
|
+
viewerId: this.vault.session.userId,
|
|
210
|
+
workspaceOwners: await this.keyring.workspaceOwners(folders),
|
|
211
|
+
});
|
|
212
|
+
const workspaces = new Map(folders.map((f) => [f.id, f.workspaceId ?? null]));
|
|
213
|
+
return rows.map((row) => {
|
|
153
214
|
if (!exposure.allows(row.folderId)) {
|
|
154
215
|
throw new Error(`Note ${row.id} is in a folder that is not exposed to MCP. Turn on "Expose to MCP" in that folder's settings in the Virlow app to access it here.`);
|
|
155
216
|
}
|
|
217
|
+
const listed = row.folderId === null ? null : (workspaces.get(row.folderId) ?? null);
|
|
218
|
+
const sent = row.folder?.workspaceId;
|
|
219
|
+
// The two must agree, as in NotesService.workspaceOfRow.
|
|
220
|
+
if (sent !== undefined && row.folderId !== null && workspaces.has(row.folderId) && (sent ?? null) !== listed) {
|
|
221
|
+
throw new Error(`Note ${row.id}: the server gave two different workspaces for it, so it was not opened. ` +
|
|
222
|
+
'Open it in the Virlow app.');
|
|
223
|
+
}
|
|
224
|
+
const workspaceId = sent ?? listed;
|
|
225
|
+
if (isSharedNote(row) && !workspaceId) {
|
|
226
|
+
throw sharedNoteError(row.id, new NoWorkspaceKeyError());
|
|
227
|
+
}
|
|
228
|
+
return { row, workspaceId };
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
/** The key a file is under: its own version (null = the account key) in its note's workspace. */
|
|
232
|
+
async readKey(accountKey, file, place) {
|
|
233
|
+
if (file.keyVersion === null || file.keyVersion === undefined)
|
|
234
|
+
return accountKey;
|
|
235
|
+
try {
|
|
236
|
+
return await this.keyring.forRead(accountKey, file.keyVersion, place?.workspaceId);
|
|
237
|
+
}
|
|
238
|
+
catch (err) {
|
|
239
|
+
if (err instanceof LockedError)
|
|
240
|
+
throw err;
|
|
241
|
+
throw sharedNoteError(file.noteId, err);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
/** The key a new file, name or content in this note goes under. Never the
|
|
245
|
+
* account key in a shared workspace; a key that does not open is refused. */
|
|
246
|
+
async writeKey(accountKey, place, atLeast) {
|
|
247
|
+
try {
|
|
248
|
+
return await this.keyring.forWrite(accountKey, place?.workspaceId ?? null, { atLeast });
|
|
249
|
+
}
|
|
250
|
+
catch (err) {
|
|
251
|
+
// Only fixed text reaches the caller (see describeKeyFailure).
|
|
252
|
+
if (err instanceof LockedError || err instanceof WriteRefusedError || !place?.workspaceId)
|
|
253
|
+
throw err;
|
|
254
|
+
throw sharedNoteError(place.row.id, err);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
/** A file's content (inline) or file key (large file header) under `toKey`. */
|
|
258
|
+
async rekeyContent(accountKey, id, place, toKey) {
|
|
259
|
+
const full = await this.api.getFile(id);
|
|
260
|
+
const fromKey = await this.readKey(accountKey, full, place);
|
|
261
|
+
try {
|
|
262
|
+
if (isV3Attachment(full.encryptedData))
|
|
263
|
+
return await rewrapFileKey(fromKey, toKey, full.encryptedData);
|
|
264
|
+
const { filename, bytes } = await decryptAttachment(fromKey, full);
|
|
265
|
+
return (await encryptAttachment(toKey, filename, bytes)).encryptedData;
|
|
266
|
+
}
|
|
267
|
+
catch (err) {
|
|
268
|
+
throw decryptFailure(err);
|
|
156
269
|
}
|
|
157
270
|
}
|
|
158
271
|
requireSession() {
|
package/dist/attachments.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attachments.js","sourceRoot":"","sources":["../src/attachments.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"attachments.js","sourceRoot":"","sources":["../src/attachments.ts"],"names":[],"mappings":"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"}
|