@knowzai/api-client 0.1.0 → 0.3.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/.tsbuildinfo +1 -1
- package/dist/client.d.ts +24 -3
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +396 -36
- package/dist/client.js.map +1 -1
- package/dist/contracts.d.ts +102 -0
- package/dist/contracts.d.ts.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/resources/api-keys.d.ts +19 -0
- package/dist/resources/api-keys.d.ts.map +1 -0
- package/dist/resources/api-keys.js +36 -0
- package/dist/resources/api-keys.js.map +1 -0
- package/dist/resources/auth.d.ts +10 -1
- package/dist/resources/auth.d.ts.map +1 -1
- package/dist/resources/auth.js +15 -1
- package/dist/resources/auth.js.map +1 -1
- package/dist/resources/federation.d.ts +98 -0
- package/dist/resources/federation.d.ts.map +1 -0
- package/dist/resources/federation.js +184 -0
- package/dist/resources/federation.js.map +1 -0
- package/dist/resources/files.d.ts +72 -0
- package/dist/resources/files.d.ts.map +1 -0
- package/dist/resources/files.js +205 -0
- package/dist/resources/files.js.map +1 -0
- package/dist/resources/index.d.ts +4 -0
- package/dist/resources/index.d.ts.map +1 -1
- package/dist/resources/index.js +4 -0
- package/dist/resources/index.js.map +1 -1
- package/dist/resources/knowledge.d.ts +6 -0
- package/dist/resources/knowledge.d.ts.map +1 -1
- package/dist/resources/knowledge.js +13 -0
- package/dist/resources/knowledge.js.map +1 -1
- package/dist/resources/portability.d.ts +133 -0
- package/dist/resources/portability.d.ts.map +1 -0
- package/dist/resources/portability.js +244 -0
- package/dist/resources/portability.js.map +1 -0
- package/dist/resources/schemas.d.ts +108 -37
- package/dist/resources/schemas.d.ts.map +1 -1
- package/dist/resources/schemas.js +61 -7
- package/dist/resources/schemas.js.map +1 -1
- package/package.json +4 -4
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type { RawCoreClient } from '../contracts.js';
|
|
2
|
+
/** Progress for one chunk of one file. `bytesSent` is cumulative for the file. */
|
|
3
|
+
export interface UploadProgress {
|
|
4
|
+
fileName: string;
|
|
5
|
+
chunkIndex: number;
|
|
6
|
+
totalChunks: number;
|
|
7
|
+
bytesSent: number;
|
|
8
|
+
totalBytes: number;
|
|
9
|
+
}
|
|
10
|
+
export interface UploadedFile {
|
|
11
|
+
fileRecordId: string;
|
|
12
|
+
fileName: string;
|
|
13
|
+
size: number;
|
|
14
|
+
contentType: string;
|
|
15
|
+
}
|
|
16
|
+
export interface UploadInput {
|
|
17
|
+
/** Local file path. Only its basename crosses the wire (R12). */
|
|
18
|
+
path: string;
|
|
19
|
+
/**
|
|
20
|
+
* An ALREADY-OPEN, already-approved descriptor for `path`.
|
|
21
|
+
*
|
|
22
|
+
* H7 (TOCTOU) — a caller that gated the file (`openSafeFile`: `O_NOFOLLOW`
|
|
23
|
+
* + `fstat` policy) hands the descriptor itself over rather than the path, and
|
|
24
|
+
* the uploader `fstat`s and reads THAT descriptor. Without this the uploader
|
|
25
|
+
* re-opens `path` after `initialize` has round-tripped, so the file that was
|
|
26
|
+
* judged and the file whose bytes are sent can differ — a path swapped for a
|
|
27
|
+
* symlink to a credential file in that window would be uploaded instead.
|
|
28
|
+
*
|
|
29
|
+
* The descriptor is BORROWED: the caller opened it and the caller closes it.
|
|
30
|
+
* `path` is still used, for its basename and content type only.
|
|
31
|
+
*/
|
|
32
|
+
fd?: number;
|
|
33
|
+
/** Overrides the extension-derived content type (R11). */
|
|
34
|
+
contentType?: string;
|
|
35
|
+
/** Omit for a Standalone upload — required when attaching to an existing item (R2). */
|
|
36
|
+
createAs?: 'knowledge' | 'inbox';
|
|
37
|
+
/** Required when `createAs === 'knowledge'`. */
|
|
38
|
+
vaultId?: string;
|
|
39
|
+
title?: string;
|
|
40
|
+
/** Slides the parent's AwaitingAttachments TTL window forward across a multi-file run (R3). */
|
|
41
|
+
parentKnowledgeId?: string;
|
|
42
|
+
onProgress?: (progress: UploadProgress) => void;
|
|
43
|
+
signal?: AbortSignal;
|
|
44
|
+
/** Bounded per-chunk retry for retryable failures (R8). Default 2. */
|
|
45
|
+
chunkRetries?: number;
|
|
46
|
+
/** Base backoff between chunk retries, doubling each attempt. Default 250ms. */
|
|
47
|
+
chunkRetryDelayMs?: number;
|
|
48
|
+
}
|
|
49
|
+
/** Infer a content type from a file name (R11). Unknown → `application/octet-stream`. */
|
|
50
|
+
export declare function contentTypeForFile(fileName: string): string;
|
|
51
|
+
export declare class FilesApi {
|
|
52
|
+
private readonly core;
|
|
53
|
+
constructor(core: RawCoreClient);
|
|
54
|
+
/**
|
|
55
|
+
* Upload a local file with the platform's three-call chunked protocol (R1):
|
|
56
|
+
* `initialize` → N× `streaming` → `complete`. Bytes are streamed from disk one
|
|
57
|
+
* server-sized chunk at a time, so file size is bounded by the platform's
|
|
58
|
+
* ingestion limits rather than by client memory.
|
|
59
|
+
*/
|
|
60
|
+
upload(input: UploadInput): Promise<UploadedFile>;
|
|
61
|
+
/**
|
|
62
|
+
* PUT one chunk. Retries only what is worth retrying (R8): a 404 means the
|
|
63
|
+
* session expired or is not ours, so retrying is pointless and misleading —
|
|
64
|
+
* it propagates immediately and fails the whole file.
|
|
65
|
+
*
|
|
66
|
+
* `X-Chunk-Hash` is deliberately NOT sent: the server compares it as base64
|
|
67
|
+
* MD5 (`ChunkedUploadService.UploadChunkAsync`), not the SHA-256 hex used for
|
|
68
|
+
* `X-File-Hash`, and it is optional. Whole-file integrity is covered on complete.
|
|
69
|
+
*/
|
|
70
|
+
private sendChunk;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=files.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/resources/files.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,kFAAkF;AAClF,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAC;IACb;;;;;;;;;;;;OAYG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uFAAuF;IACvF,QAAQ,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC;IACjC,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+FAA+F;IAC/F,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAC;IAChD,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,sEAAsE;IACtE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gFAAgF;IAChF,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAwDD,yFAAyF;AACzF,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE3D;AAuBD,qBAAa,QAAQ;IACP,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,aAAa;IAEhD;;;;;OAKG;IACG,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IA0FvD;;;;;;;;OAQG;YACW,SAAS;CA4BxB"}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { fstat as fstatCb, read as readCb } from 'node:fs';
|
|
3
|
+
import { open, stat } from 'node:fs/promises';
|
|
4
|
+
import { basename, extname } from 'node:path';
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
import { ApiError } from '@knowzai/types';
|
|
7
|
+
const SessionSchema = z.object({
|
|
8
|
+
uploadId: z.string(),
|
|
9
|
+
fileRecordId: z.string(),
|
|
10
|
+
totalChunks: z.number().int().nonnegative(),
|
|
11
|
+
chunkSize: z.number().int().positive(),
|
|
12
|
+
expiresAt: z.string().optional(),
|
|
13
|
+
});
|
|
14
|
+
const CompletedSchema = z.object({
|
|
15
|
+
fileRecordId: z.string(),
|
|
16
|
+
fileName: z.string().optional(),
|
|
17
|
+
fileSize: z.number().optional(),
|
|
18
|
+
contentType: z.string().optional(),
|
|
19
|
+
});
|
|
20
|
+
/**
|
|
21
|
+
* Extension → content type. Node has no built-in MIME table and the CLI takes no
|
|
22
|
+
* runtime dependencies for this; unknown extensions fall through to
|
|
23
|
+
* `application/octet-stream`, which the platform handles (R11).
|
|
24
|
+
*/
|
|
25
|
+
const CONTENT_TYPES = {
|
|
26
|
+
'.txt': 'text/plain',
|
|
27
|
+
'.md': 'text/markdown',
|
|
28
|
+
'.csv': 'text/csv',
|
|
29
|
+
'.html': 'text/html',
|
|
30
|
+
'.htm': 'text/html',
|
|
31
|
+
'.json': 'application/json',
|
|
32
|
+
'.xml': 'application/xml',
|
|
33
|
+
'.yaml': 'application/yaml',
|
|
34
|
+
'.yml': 'application/yaml',
|
|
35
|
+
'.pdf': 'application/pdf',
|
|
36
|
+
'.doc': 'application/msword',
|
|
37
|
+
'.docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
|
|
38
|
+
'.xls': 'application/vnd.ms-excel',
|
|
39
|
+
'.xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
|
40
|
+
'.ppt': 'application/vnd.ms-powerpoint',
|
|
41
|
+
'.pptx': 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
|
|
42
|
+
'.png': 'image/png',
|
|
43
|
+
'.jpg': 'image/jpeg',
|
|
44
|
+
'.jpeg': 'image/jpeg',
|
|
45
|
+
'.gif': 'image/gif',
|
|
46
|
+
'.webp': 'image/webp',
|
|
47
|
+
'.svg': 'image/svg+xml',
|
|
48
|
+
'.heic': 'image/heic',
|
|
49
|
+
'.mp3': 'audio/mpeg',
|
|
50
|
+
'.wav': 'audio/wav',
|
|
51
|
+
'.m4a': 'audio/mp4',
|
|
52
|
+
'.ogg': 'audio/ogg',
|
|
53
|
+
'.webm': 'video/webm',
|
|
54
|
+
'.mp4': 'video/mp4',
|
|
55
|
+
'.mov': 'video/quicktime',
|
|
56
|
+
'.zip': 'application/zip',
|
|
57
|
+
};
|
|
58
|
+
/** Infer a content type from a file name (R11). Unknown → `application/octet-stream`. */
|
|
59
|
+
export function contentTypeForFile(fileName) {
|
|
60
|
+
return CONTENT_TYPES[extname(fileName).toLowerCase()] ?? 'application/octet-stream';
|
|
61
|
+
}
|
|
62
|
+
/** A chunk failure worth another attempt: upstream 5xx/429, or a transport error. */
|
|
63
|
+
function isRetryableChunkError(e) {
|
|
64
|
+
if (!(e instanceof ApiError))
|
|
65
|
+
return false;
|
|
66
|
+
return e.status === 0 || e.status === 429 || e.status >= 500;
|
|
67
|
+
}
|
|
68
|
+
const delay = (ms) => ms <= 0 ? Promise.resolve() : new Promise((resolve) => setTimeout(resolve, ms));
|
|
69
|
+
/** `fstat` of a borrowed descriptor — promisified so the upload loop stays async. */
|
|
70
|
+
function fstatFd(fd) {
|
|
71
|
+
return new Promise((resolve, reject) => fstatCb(fd, (e, s) => (e ? reject(e) : resolve(s))));
|
|
72
|
+
}
|
|
73
|
+
/** Positional read from a borrowed descriptor. Does not move the file offset. */
|
|
74
|
+
function readFd(fd, buffer, position) {
|
|
75
|
+
return new Promise((resolve, reject) => readCb(fd, buffer, 0, buffer.length, position, (e, bytesRead) => (e ? reject(e) : resolve(bytesRead))));
|
|
76
|
+
}
|
|
77
|
+
export class FilesApi {
|
|
78
|
+
core;
|
|
79
|
+
constructor(core) {
|
|
80
|
+
this.core = core;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Upload a local file with the platform's three-call chunked protocol (R1):
|
|
84
|
+
* `initialize` → N× `streaming` → `complete`. Bytes are streamed from disk one
|
|
85
|
+
* server-sized chunk at a time, so file size is bounded by the platform's
|
|
86
|
+
* ingestion limits rather than by client memory.
|
|
87
|
+
*/
|
|
88
|
+
async upload(input) {
|
|
89
|
+
const fileName = basename(input.path); // R12 — no directory component crosses the wire.
|
|
90
|
+
// The size comes from the BORROWED descriptor when there is one, so it
|
|
91
|
+
// describes the file the caller approved rather than whatever the path
|
|
92
|
+
// resolves to now.
|
|
93
|
+
const { size } = input.fd === undefined ? await stat(input.path) : await fstatFd(input.fd);
|
|
94
|
+
if (size === 0) {
|
|
95
|
+
throw new ApiError(0, [`${fileName} is empty — there is nothing to upload.`], {
|
|
96
|
+
code: 'empty-file',
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
const contentType = input.contentType ?? contentTypeForFile(fileName);
|
|
100
|
+
// 1) initialize — the server issues the upload id, the fileRecordId (R4) and
|
|
101
|
+
// the chunk size (R5). A 413 here carries the ingestion-limit message.
|
|
102
|
+
const session = await this.core.request({
|
|
103
|
+
method: 'POST',
|
|
104
|
+
path: '/api/v1/files/upload/initialize',
|
|
105
|
+
body: { fileName, fileSize: size, contentType },
|
|
106
|
+
schema: SessionSchema,
|
|
107
|
+
});
|
|
108
|
+
const chunkSize = session.chunkSize;
|
|
109
|
+
const totalChunks = session.totalChunks || Math.ceil(size / chunkSize);
|
|
110
|
+
const retries = input.chunkRetries ?? 2;
|
|
111
|
+
const retryDelayMs = input.chunkRetryDelayMs ?? 250;
|
|
112
|
+
// 2) streaming — one call per chunk, 0-based contiguous indices, never an
|
|
113
|
+
// empty body. The whole-file hash is accumulated on the way past.
|
|
114
|
+
const fileHash = createHash('sha256');
|
|
115
|
+
// Only open the path when no descriptor was handed to us. A borrowed fd is
|
|
116
|
+
// never re-opened and never closed here — closing it would yank a handle the
|
|
117
|
+
// caller still owns.
|
|
118
|
+
const handle = input.fd === undefined ? await open(input.path, 'r') : undefined;
|
|
119
|
+
const fd = input.fd;
|
|
120
|
+
try {
|
|
121
|
+
let bytesSent = 0;
|
|
122
|
+
for (let chunkIndex = 0; bytesSent < size; chunkIndex++) {
|
|
123
|
+
const buffer = Buffer.allocUnsafe(Math.min(chunkSize, size - bytesSent));
|
|
124
|
+
const bytesRead = handle === undefined
|
|
125
|
+
? await readFd(fd, buffer, bytesSent)
|
|
126
|
+
: (await handle.read(buffer, 0, buffer.length, bytesSent)).bytesRead;
|
|
127
|
+
if (bytesRead === 0)
|
|
128
|
+
break; // Truncated under us — stop rather than send an empty chunk.
|
|
129
|
+
const chunk = buffer.subarray(0, bytesRead);
|
|
130
|
+
fileHash.update(chunk);
|
|
131
|
+
await this.sendChunk(session.uploadId, chunkIndex, totalChunks, chunk, {
|
|
132
|
+
retries,
|
|
133
|
+
retryDelayMs,
|
|
134
|
+
signal: input.signal,
|
|
135
|
+
});
|
|
136
|
+
bytesSent += bytesRead;
|
|
137
|
+
input.onProgress?.({ fileName, chunkIndex, totalChunks, bytesSent, totalBytes: size });
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
finally {
|
|
141
|
+
await handle?.close();
|
|
142
|
+
}
|
|
143
|
+
// 3) complete — echo the server-issued fileRecordId verbatim (R4). `createAs`
|
|
144
|
+
// is omitted for the attach flow: HTTP /complete cannot express
|
|
145
|
+
// ExistingKnowledge and would silently degrade to Standalone (R2).
|
|
146
|
+
const completed = await this.core.request({
|
|
147
|
+
method: 'POST',
|
|
148
|
+
path: '/api/v1/files/upload/complete',
|
|
149
|
+
body: {
|
|
150
|
+
uploadId: session.uploadId,
|
|
151
|
+
fileRecordId: session.fileRecordId,
|
|
152
|
+
fileName,
|
|
153
|
+
fileSize: size,
|
|
154
|
+
contentType,
|
|
155
|
+
...(input.createAs ? { createAs: input.createAs } : {}),
|
|
156
|
+
...(input.vaultId ? { vaultId: input.vaultId } : {}),
|
|
157
|
+
...(input.title ? { title: input.title } : {}),
|
|
158
|
+
...(input.parentKnowledgeId ? { parentKnowledgeId: input.parentKnowledgeId } : {}),
|
|
159
|
+
},
|
|
160
|
+
// R6 — the server compares this against SHA-256 lowercase hex.
|
|
161
|
+
headers: { 'X-File-Hash': fileHash.digest('hex') },
|
|
162
|
+
schema: CompletedSchema,
|
|
163
|
+
});
|
|
164
|
+
return {
|
|
165
|
+
fileRecordId: completed.fileRecordId,
|
|
166
|
+
fileName: completed.fileName ?? fileName,
|
|
167
|
+
size,
|
|
168
|
+
contentType: completed.contentType ?? contentType,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* PUT one chunk. Retries only what is worth retrying (R8): a 404 means the
|
|
173
|
+
* session expired or is not ours, so retrying is pointless and misleading —
|
|
174
|
+
* it propagates immediately and fails the whole file.
|
|
175
|
+
*
|
|
176
|
+
* `X-Chunk-Hash` is deliberately NOT sent: the server compares it as base64
|
|
177
|
+
* MD5 (`ChunkedUploadService.UploadChunkAsync`), not the SHA-256 hex used for
|
|
178
|
+
* `X-File-Hash`, and it is optional. Whole-file integrity is covered on complete.
|
|
179
|
+
*/
|
|
180
|
+
async sendChunk(uploadId, chunkIndex, totalChunks, chunk, opts) {
|
|
181
|
+
for (let attempt = 0;; attempt++) {
|
|
182
|
+
try {
|
|
183
|
+
await this.core.rawRequest({
|
|
184
|
+
method: 'POST',
|
|
185
|
+
path: '/api/v1/files/upload/streaming',
|
|
186
|
+
body: chunk,
|
|
187
|
+
headers: {
|
|
188
|
+
'X-Upload-Id': uploadId,
|
|
189
|
+
'X-Chunk-Index': String(chunkIndex),
|
|
190
|
+
'X-Total-Chunks': String(totalChunks),
|
|
191
|
+
},
|
|
192
|
+
schema: z.unknown(),
|
|
193
|
+
signal: opts.signal,
|
|
194
|
+
});
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
catch (e) {
|
|
198
|
+
if (attempt >= opts.retries || !isRetryableChunkError(e))
|
|
199
|
+
throw e;
|
|
200
|
+
await delay(opts.retryDelayMs * 2 ** attempt);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/resources/files.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
export { AuthApi } from './auth.js';
|
|
2
|
+
export { ApiKeysApi } from './api-keys.js';
|
|
2
3
|
export { KnowledgeApi } from './knowledge.js';
|
|
3
4
|
export { VaultsApi } from './vaults.js';
|
|
4
5
|
export { SearchApi, type SearchQuery } from './search.js';
|
|
5
6
|
export { AskApi, type AskRequest } from './ask.js';
|
|
7
|
+
export { FilesApi, contentTypeForFile, type UploadInput, type UploadProgress, type UploadedFile, } from './files.js';
|
|
8
|
+
export { PortabilityApi, type PortabilityDialect, type ConflictStrategy, type ExportScopeType, type PortabilitySchema, type ExportScopeInput, type ExportToFileInput, type ExportToFileResult, type ExportJob, type ExportJobPart, type ExportJobStatus, type ImportValidation, type EntityCounts, type ImportOutcome, } from './portability.js';
|
|
9
|
+
export { FederationApi, type FederationPeer, type FederationVaultLink, type FederationRunSummary, type FederationSyncOptionsInput, } from './federation.js';
|
|
6
10
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,EACL,QAAQ,EACR,kBAAkB,EAClB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,YAAY,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,cAAc,EACd,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,aAAa,GACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,aAAa,EACb,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,0BAA0B,GAChC,MAAM,iBAAiB,CAAC"}
|
package/dist/resources/index.js
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
export { AuthApi } from './auth.js';
|
|
2
|
+
export { ApiKeysApi } from './api-keys.js';
|
|
2
3
|
export { KnowledgeApi } from './knowledge.js';
|
|
3
4
|
export { VaultsApi } from './vaults.js';
|
|
4
5
|
export { SearchApi } from './search.js';
|
|
5
6
|
export { AskApi } from './ask.js';
|
|
7
|
+
export { FilesApi, contentTypeForFile, } from './files.js';
|
|
8
|
+
export { PortabilityApi, } from './portability.js';
|
|
9
|
+
export { FederationApi, } from './federation.js';
|
|
6
10
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAoB,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAmB,MAAM,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAoB,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAmB,MAAM,UAAU,CAAC;AACnD,OAAO,EACL,QAAQ,EACR,kBAAkB,GAInB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,cAAc,GAcf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,aAAa,GAKd,MAAM,iBAAiB,CAAC"}
|
|
@@ -7,6 +7,12 @@ export declare class KnowledgeApi {
|
|
|
7
7
|
create(req: CreateKnowledgeRequest): Promise<KnowledgeDetail>;
|
|
8
8
|
get(id: string): Promise<KnowledgeDetail>;
|
|
9
9
|
update(id: string, req: UpdateKnowledgeRequest): Promise<KnowledgeDetail>;
|
|
10
|
+
/**
|
|
11
|
+
* Link an already-uploaded FileRecord to a knowledge item. This is the second
|
|
12
|
+
* half of the attach flow — `files.upload` completes as Standalone because HTTP
|
|
13
|
+
* `/complete` cannot express ExistingKnowledge (CLI_KnowledgeAttachUpload R2).
|
|
14
|
+
*/
|
|
15
|
+
attachFile(knowledgeId: string, fileRecordId: string, displayOrder?: number): Promise<void>;
|
|
10
16
|
remove(id: string): Promise<void>;
|
|
11
17
|
status(id: string): Promise<KnowledgeStatus>;
|
|
12
18
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"knowledge.d.ts","sourceRoot":"","sources":["../../src/resources/knowledge.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EACV,sBAAsB,EACtB,sBAAsB,EACtB,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,KAAK,EACN,MAAM,gBAAgB,CAAC;AAWxB,qBAAa,YAAY;IACX,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,UAAU;IAEvC,IAAI,CAAC,CAAC,GAAE,kBAAuB,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAkBlE,MAAM,CAAC,GAAG,EAAE,sBAAsB,GAAG,OAAO,CAAC,eAAe,CAAC;IAwBnE,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAQnC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,sBAAsB,GAAG,OAAO,CAAC,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"knowledge.d.ts","sourceRoot":"","sources":["../../src/resources/knowledge.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EACV,sBAAsB,EACtB,sBAAsB,EACtB,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,KAAK,EACN,MAAM,gBAAgB,CAAC;AAWxB,qBAAa,YAAY;IACX,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,UAAU;IAEvC,IAAI,CAAC,CAAC,GAAE,kBAAuB,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAkBlE,MAAM,CAAC,GAAG,EAAE,sBAAsB,GAAG,OAAO,CAAC,eAAe,CAAC;IAwBnE,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAQnC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,sBAAsB,GAAG,OAAO,CAAC,eAAe,CAAC;IAsB/E;;;;OAIG;IACG,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAS3F,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQvC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;CAO7C"}
|
|
@@ -74,6 +74,19 @@ export class KnowledgeApi {
|
|
|
74
74
|
version: res.version ?? 0,
|
|
75
75
|
};
|
|
76
76
|
}
|
|
77
|
+
/**
|
|
78
|
+
* Link an already-uploaded FileRecord to a knowledge item. This is the second
|
|
79
|
+
* half of the attach flow — `files.upload` completes as Standalone because HTTP
|
|
80
|
+
* `/complete` cannot express ExistingKnowledge (CLI_KnowledgeAttachUpload R2).
|
|
81
|
+
*/
|
|
82
|
+
async attachFile(knowledgeId, fileRecordId, displayOrder) {
|
|
83
|
+
await this.core.request({
|
|
84
|
+
method: 'POST',
|
|
85
|
+
path: `/api/v1/knowledge/${encodeURIComponent(knowledgeId)}/attachments`,
|
|
86
|
+
body: { fileRecordId, ...(displayOrder === undefined ? {} : { displayOrder }) },
|
|
87
|
+
schema: z.unknown(),
|
|
88
|
+
});
|
|
89
|
+
}
|
|
77
90
|
async remove(id) {
|
|
78
91
|
await this.core.request({
|
|
79
92
|
method: 'DELETE',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"knowledge.js","sourceRoot":"","sources":["../../src/resources/knowledge.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"knowledge.js","sourceRoot":"","sources":["../../src/resources/knowledge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import type { PortabilityCoreClient, DownloadSpec, DownloadResult } from '../contracts.js';
|
|
2
|
+
export type PortabilityDialect = 'platform' | 'selfhosted';
|
|
3
|
+
export type ConflictStrategy = 'skip' | 'overwrite' | 'merge';
|
|
4
|
+
export type ExportScopeType = 'Tenant' | 'Vault' | 'VaultWithChildren' | 'MultiSelect' | 'SingleItem';
|
|
5
|
+
export interface PortabilitySchema {
|
|
6
|
+
version: number;
|
|
7
|
+
minReadableVersion: number;
|
|
8
|
+
compatibility: string;
|
|
9
|
+
dialect: PortabilityDialect;
|
|
10
|
+
}
|
|
11
|
+
export interface ExportScopeInput {
|
|
12
|
+
scopeType: ExportScopeType;
|
|
13
|
+
vaultIds?: string[];
|
|
14
|
+
knowledgeItemIds?: string[];
|
|
15
|
+
}
|
|
16
|
+
export interface ExportToFileInput extends ExportScopeInput {
|
|
17
|
+
mode: 'Light' | 'Full';
|
|
18
|
+
outPath: string;
|
|
19
|
+
acknowledgementCopyVersion?: string;
|
|
20
|
+
onProgress?: (bytesReceived: number, totalBytes?: number) => void;
|
|
21
|
+
}
|
|
22
|
+
export interface ExportToFileResult {
|
|
23
|
+
path: string;
|
|
24
|
+
bytes: number;
|
|
25
|
+
kind: 'json' | 'zip';
|
|
26
|
+
}
|
|
27
|
+
export interface ExportJob {
|
|
28
|
+
jobId: string;
|
|
29
|
+
status: string;
|
|
30
|
+
estimatedItems: number;
|
|
31
|
+
queuedAt: string;
|
|
32
|
+
}
|
|
33
|
+
export interface ExportJobPart {
|
|
34
|
+
partNumber: number;
|
|
35
|
+
downloadUrl: string;
|
|
36
|
+
sizeBytes: number;
|
|
37
|
+
fileName: string;
|
|
38
|
+
itemCount: number;
|
|
39
|
+
}
|
|
40
|
+
export interface ExportJobStatus {
|
|
41
|
+
jobId: string;
|
|
42
|
+
status: string;
|
|
43
|
+
progressPercentage: number;
|
|
44
|
+
completedAt?: string | null;
|
|
45
|
+
totalItems: number;
|
|
46
|
+
errorMessage?: string | null;
|
|
47
|
+
parts?: ExportJobPart[] | null;
|
|
48
|
+
}
|
|
49
|
+
export interface ImportValidation {
|
|
50
|
+
isValid: boolean;
|
|
51
|
+
schemaVersion: number;
|
|
52
|
+
schemaCompatible: boolean;
|
|
53
|
+
schemaError?: string | null;
|
|
54
|
+
sourceEdition?: string | null;
|
|
55
|
+
totalVaults: number;
|
|
56
|
+
totalKnowledgeItems: number;
|
|
57
|
+
totalTopics: number;
|
|
58
|
+
totalTags: number;
|
|
59
|
+
totalPersons: number;
|
|
60
|
+
totalLocations: number;
|
|
61
|
+
totalEvents: number;
|
|
62
|
+
totalComments: number;
|
|
63
|
+
totalFileRecords: number;
|
|
64
|
+
conflictingVaults: number;
|
|
65
|
+
conflictingKnowledgeItems: number;
|
|
66
|
+
conflictingTopics: number;
|
|
67
|
+
conflictingPersons: number;
|
|
68
|
+
warnings: string[];
|
|
69
|
+
errors: string[];
|
|
70
|
+
}
|
|
71
|
+
export interface EntityCounts {
|
|
72
|
+
created: number;
|
|
73
|
+
skipped: number;
|
|
74
|
+
overwritten: number;
|
|
75
|
+
merged: number;
|
|
76
|
+
}
|
|
77
|
+
export interface ImportOutcome {
|
|
78
|
+
success: boolean;
|
|
79
|
+
strategyUsed: number | string;
|
|
80
|
+
vaults: EntityCounts;
|
|
81
|
+
knowledgeItems: EntityCounts;
|
|
82
|
+
topics: EntityCounts;
|
|
83
|
+
tags: EntityCounts;
|
|
84
|
+
persons: EntityCounts;
|
|
85
|
+
locations: EntityCounts;
|
|
86
|
+
events: EntityCounts;
|
|
87
|
+
comments: EntityCounts;
|
|
88
|
+
fileRecords: EntityCounts;
|
|
89
|
+
junctionsRestored: number;
|
|
90
|
+
filesBlobFailed: number;
|
|
91
|
+
warnings: string[];
|
|
92
|
+
error?: string | null;
|
|
93
|
+
}
|
|
94
|
+
export declare class PortabilityApi {
|
|
95
|
+
private readonly core;
|
|
96
|
+
/** Memoized dialect probe — the ONE `GET /schema` preflight (R6). */
|
|
97
|
+
private schemaProbe?;
|
|
98
|
+
constructor(core: PortabilityCoreClient);
|
|
99
|
+
getSchema(): Promise<PortabilitySchema>;
|
|
100
|
+
private probeSchema;
|
|
101
|
+
/**
|
|
102
|
+
* Synchronous export streamed to disk (R1, R4). Light streams the BARE
|
|
103
|
+
* package JSON byte-identically; Full streams the ZIP. 409 (lock), 413 (use
|
|
104
|
+
* the job path) and 403 surface as `ApiError` for the caller to map.
|
|
105
|
+
*/
|
|
106
|
+
exportToFile(input: ExportToFileInput): Promise<ExportToFileResult>;
|
|
107
|
+
createExportJob(input: ExportScopeInput & {
|
|
108
|
+
mode: 'Light' | 'Full';
|
|
109
|
+
acknowledgementCopyVersion?: string;
|
|
110
|
+
}): Promise<ExportJob>;
|
|
111
|
+
getExportJob(jobId: string): Promise<ExportJobStatus>;
|
|
112
|
+
/** Part download over the redirect-safe leg (R3) — the SAS hop carries NO credentials. */
|
|
113
|
+
downloadExportPart(input: {
|
|
114
|
+
jobId: string;
|
|
115
|
+
partNumber: number;
|
|
116
|
+
outPath: string;
|
|
117
|
+
onProgress?: DownloadSpec['onProgress'];
|
|
118
|
+
}): Promise<DownloadResult>;
|
|
119
|
+
/** Dry-run validation — HTTP 200, central 400-with-envelope and selfhosted bare-422 all PARSE (R2). */
|
|
120
|
+
validateImport(pkg: unknown): Promise<ImportValidation>;
|
|
121
|
+
/** JSON import — a 400/422 ImportOutcome is an ANSWER, not an error (R9). Never retried. */
|
|
122
|
+
importPackage(pkg: unknown, opts: {
|
|
123
|
+
strategy: ConflictStrategy;
|
|
124
|
+
targetVaultId?: string;
|
|
125
|
+
}): Promise<ImportOutcome>;
|
|
126
|
+
/** ZIP import — multipart field `file` (R6), streamed from disk, no automatic retry. */
|
|
127
|
+
importZip(input: {
|
|
128
|
+
path: string;
|
|
129
|
+
strategy: ConflictStrategy;
|
|
130
|
+
targetVaultId?: string;
|
|
131
|
+
}): Promise<ImportOutcome>;
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=portability.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portability.d.ts","sourceRoot":"","sources":["../../src/resources/portability.ts"],"names":[],"mappings":"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"}
|