@peers-app/peers-sdk 0.14.0 → 0.15.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/context/data-context.d.ts +4 -4
- package/dist/context/data-context.js +1 -1
- package/dist/context/index.d.ts +3 -3
- package/dist/context/index.js +4 -0
- package/dist/context/user-context-singleton.js +13 -14
- package/dist/context/user-context.d.ts +4 -4
- package/dist/context/user-context.js +48 -31
- package/dist/data/assistants.d.ts +1 -1
- package/dist/data/assistants.js +35 -24
- package/dist/data/change-tracking.d.ts +8 -8
- package/dist/data/change-tracking.js +45 -39
- package/dist/data/channels.js +5 -5
- package/dist/data/data-locks.d.ts +2 -2
- package/dist/data/data-locks.js +21 -23
- package/dist/data/data-locks.test.js +73 -75
- package/dist/data/device-sync-info.d.ts +1 -1
- package/dist/data/device-sync-info.js +4 -4
- package/dist/data/devices.d.ts +1 -1
- package/dist/data/devices.js +9 -12
- package/dist/data/embeddings.js +14 -11
- package/dist/data/files/file-read-stream.d.ts +2 -2
- package/dist/data/files/file-read-stream.js +23 -14
- package/dist/data/files/file-write-stream.d.ts +2 -2
- package/dist/data/files/file-write-stream.js +8 -8
- package/dist/data/files/file.types.d.ts +2 -2
- package/dist/data/files/file.types.js +17 -11
- package/dist/data/files/files.d.ts +6 -6
- package/dist/data/files/files.js +17 -19
- package/dist/data/files/files.test.js +213 -214
- package/dist/data/files/index.d.ts +4 -4
- package/dist/data/files/index.js +4 -4
- package/dist/data/group-member-roles.js +2 -2
- package/dist/data/group-members.d.ts +5 -5
- package/dist/data/group-members.js +27 -18
- package/dist/data/group-members.test.js +73 -73
- package/dist/data/group-permissions.d.ts +3 -3
- package/dist/data/group-permissions.js +13 -11
- package/dist/data/group-share.d.ts +2 -2
- package/dist/data/group-share.js +29 -24
- package/dist/data/groups.d.ts +4 -4
- package/dist/data/groups.js +27 -19
- package/dist/data/groups.test.js +44 -44
- package/dist/data/index.d.ts +6 -6
- package/dist/data/index.js +6 -6
- package/dist/data/knowledge/peer-types.js +9 -9
- package/dist/data/messages.d.ts +5 -5
- package/dist/data/messages.js +43 -30
- package/dist/data/orm/client-proxy.data-source.d.ts +4 -4
- package/dist/data/orm/client-proxy.data-source.js +10 -12
- package/dist/data/orm/cursor.d.ts +1 -1
- package/dist/data/orm/cursor.js +2 -2
- package/dist/data/orm/cursor.test.js +92 -93
- package/dist/data/orm/data-query.d.ts +3 -3
- package/dist/data/orm/data-query.js +24 -18
- package/dist/data/orm/data-query.mongo.d.ts +1 -1
- package/dist/data/orm/data-query.mongo.js +49 -51
- package/dist/data/orm/data-query.mongo.test.js +173 -204
- package/dist/data/orm/data-query.sqlite.d.ts +1 -1
- package/dist/data/orm/data-query.sqlite.js +84 -73
- package/dist/data/orm/data-query.sqlite.test.js +164 -176
- package/dist/data/orm/data-query.test.js +216 -224
- package/dist/data/orm/decorators.js +3 -3
- package/dist/data/orm/dependency-injection.test.js +53 -56
- package/dist/data/orm/doc.d.ts +4 -4
- package/dist/data/orm/doc.js +17 -21
- package/dist/data/orm/event-registry.d.ts +1 -1
- package/dist/data/orm/event-registry.test.js +16 -16
- package/dist/data/orm/factory.d.ts +2 -2
- package/dist/data/orm/factory.js +33 -33
- package/dist/data/orm/index.d.ts +10 -10
- package/dist/data/orm/index.js +10 -10
- package/dist/data/orm/multi-cursors.d.ts +1 -1
- package/dist/data/orm/multi-cursors.js +6 -6
- package/dist/data/orm/multi-cursors.test.js +152 -144
- package/dist/data/orm/sql.data-source.d.ts +7 -7
- package/dist/data/orm/sql.data-source.js +88 -93
- package/dist/data/orm/sql.data-source.test.js +109 -101
- package/dist/data/orm/subscribable.data-source.d.ts +4 -4
- package/dist/data/orm/subscribable.data-source.js +5 -5
- package/dist/data/orm/table-container-events.test.js +34 -26
- package/dist/data/orm/table-container.d.ts +6 -6
- package/dist/data/orm/table-container.js +33 -21
- package/dist/data/orm/table-container.test.js +64 -53
- package/dist/data/orm/table-definitions.system.d.ts +3 -3
- package/dist/data/orm/table-definitions.system.js +3 -3
- package/dist/data/orm/table-definitions.type.d.ts +5 -5
- package/dist/data/orm/table-dependencies.d.ts +2 -2
- package/dist/data/orm/table.d.ts +5 -5
- package/dist/data/orm/table.event-source.test.js +105 -115
- package/dist/data/orm/table.js +35 -34
- package/dist/data/orm/types.d.ts +3 -3
- package/dist/data/orm/types.js +26 -25
- package/dist/data/orm/types.test.js +166 -92
- package/dist/data/package-permissions.d.ts +1 -1
- package/dist/data/package-permissions.js +2 -2
- package/dist/data/package-version-permissions.d.ts +1 -1
- package/dist/data/package-version-permissions.js +2 -2
- package/dist/data/package-versions.d.ts +9 -9
- package/dist/data/package-versions.js +47 -33
- package/dist/data/packages.d.ts +2 -2
- package/dist/data/packages.js +36 -18
- package/dist/data/packages.utils.d.ts +2 -2
- package/dist/data/packages.utils.js +4 -4
- package/dist/data/persistent-vars.d.ts +15 -15
- package/dist/data/persistent-vars.js +165 -154
- package/dist/data/table-definitions-table.d.ts +5 -5
- package/dist/data/table-definitions-table.js +13 -12
- package/dist/data/tool-tests.js +6 -6
- package/dist/data/tools.js +29 -19
- package/dist/data/user-permissions.d.ts +1 -1
- package/dist/data/user-permissions.js +5 -5
- package/dist/data/user-permissions.test.js +90 -88
- package/dist/data/user-trust-levels.js +10 -10
- package/dist/data/users.d.ts +4 -4
- package/dist/data/users.js +16 -15
- package/dist/data/voice-messages.d.ts +2 -2
- package/dist/data/voice-messages.js +13 -13
- package/dist/data/welcome-modal.pvar.js +3 -1
- package/dist/data/workflow-logs.js +26 -18
- package/dist/data/workflow-runs.d.ts +6 -6
- package/dist/data/workflow-runs.js +70 -44
- package/dist/data/workflows.d.ts +2 -2
- package/dist/data/workflows.js +7 -9
- package/dist/device/binary-peer-connection-v2.d.ts +7 -7
- package/dist/device/binary-peer-connection-v2.js +32 -28
- package/dist/device/binary-peer-connection-v2.test.js +80 -67
- package/dist/device/binary-peer-connection.d.ts +7 -7
- package/dist/device/binary-peer-connection.js +29 -28
- package/dist/device/binary-peer-connection.test.js +35 -31
- package/dist/device/connection.d.ts +5 -5
- package/dist/device/connection.js +59 -48
- package/dist/device/connection.test.js +74 -68
- package/dist/device/device-election.d.ts +2 -2
- package/dist/device/device-election.js +25 -20
- package/dist/device/device-election.test.js +35 -36
- package/dist/device/device.d.ts +2 -2
- package/dist/device/device.js +10 -4
- package/dist/device/device.test.js +16 -17
- package/dist/device/get-trust-level-fn.d.ts +2 -2
- package/dist/device/get-trust-level-fn.js +22 -11
- package/dist/device/get-trust-level-fn.test.js +58 -58
- package/dist/device/socket-io-binary-peer.d.ts +1 -1
- package/dist/device/socket-io-binary-peer.js +16 -13
- package/dist/device/socket.type.d.ts +2 -2
- package/dist/device/streamed-socket.d.ts +2 -2
- package/dist/device/streamed-socket.js +8 -8
- package/dist/device/streamed-socket.test.js +40 -40
- package/dist/device/tx-encoding.test.js +77 -77
- package/dist/events.d.ts +1 -1
- package/dist/events.js +5 -2
- package/dist/group-invite/group-invite.js +110 -19
- package/dist/group-invite/group-invite.pvars.d.ts +2 -2
- package/dist/group-invite/group-invite.pvars.js +21 -13
- package/dist/group-invite/group-invite.types.d.ts +1 -1
- package/dist/group-invite/index.d.ts +3 -3
- package/dist/group-invite/index.js +1 -1
- package/dist/index.d.ts +25 -24
- package/dist/index.js +30 -25
- package/dist/keys.d.ts +3 -3
- package/dist/keys.js +31 -30
- package/dist/keys.test.js +69 -61
- package/dist/logging/console-logger.d.ts +1 -1
- package/dist/logging/console-logger.js +35 -40
- package/dist/logging/console-logger.test.js +115 -115
- package/dist/logging/console-logs.table.d.ts +3 -3
- package/dist/logging/console-logs.table.js +28 -23
- package/dist/mentions.js +16 -12
- package/dist/observable.d.ts +2 -2
- package/dist/observable.js +15 -9
- package/dist/observable.test.js +47 -47
- package/dist/package-loader/get-require.js +3 -4
- package/dist/package-loader/package-loader.d.ts +2 -2
- package/dist/package-loader/package-loader.js +52 -34
- package/dist/peers-ui/peers-ui.d.ts +2 -2
- package/dist/peers-ui/peers-ui.js +2 -4
- package/dist/peers-ui/peers-ui.types.d.ts +3 -3
- package/dist/peers-ui/peers-ui.types.js +0 -1
- package/dist/rpc-types.d.ts +61 -59
- package/dist/rpc-types.js +61 -55
- package/dist/serial-json.d.ts +1 -1
- package/dist/serial-json.js +50 -43
- package/dist/serial-json.test.js +22 -22
- package/dist/system-ids.js +8 -8
- package/dist/tools/index.d.ts +1 -1
- package/dist/tools/tools-factory.d.ts +1 -1
- package/dist/tools/tools-factory.js +2 -2
- package/dist/types/assistant-runner-args.d.ts +3 -3
- package/dist/types/peer-device.d.ts +1 -1
- package/dist/types/peers-package.d.ts +3 -3
- package/dist/types/workflow-logger.d.ts +1 -1
- package/dist/types/workflow-run-context.d.ts +4 -4
- package/dist/types/workflow.d.ts +4 -4
- package/dist/types/workflow.js +27 -14
- package/dist/types/zod-types.d.ts +2 -1
- package/dist/types/zod-types.js +9 -3
- package/dist/user-connect/connection-code.d.ts +1 -1
- package/dist/user-connect/connection-code.js +7 -7
- package/dist/user-connect/connection-code.test.js +106 -106
- package/dist/user-connect/index.d.ts +3 -3
- package/dist/user-connect/index.js +1 -1
- package/dist/user-connect/user-connect.pvars.js +13 -11
- package/dist/user-connect/user-connect.types.d.ts +3 -3
- package/dist/users.query.d.ts +2 -2
- package/dist/users.query.js +40 -30
- package/dist/utils.d.ts +2 -2
- package/dist/utils.js +34 -32
- package/dist/utils.test.js +12 -8
- package/dist/workflow-log-formatter.d.ts +1 -1
- package/dist/workflow-log-formatter.js +17 -18
- package/package.json +14 -8
|
@@ -17,10 +17,10 @@ class FileWriteStream {
|
|
|
17
17
|
}
|
|
18
18
|
async write(chunk) {
|
|
19
19
|
if (this.finalized) {
|
|
20
|
-
throw new Error(
|
|
20
|
+
throw new Error("Cannot write to finalized stream");
|
|
21
21
|
}
|
|
22
22
|
if (this.aborted) {
|
|
23
|
-
throw new Error(
|
|
23
|
+
throw new Error("Cannot write to aborted stream");
|
|
24
24
|
}
|
|
25
25
|
// Add chunk to buffer
|
|
26
26
|
this.buffer = new Uint8Array(Buffer.concat([this.buffer, chunk]));
|
|
@@ -43,10 +43,10 @@ class FileWriteStream {
|
|
|
43
43
|
}
|
|
44
44
|
async finalize() {
|
|
45
45
|
if (this.finalized) {
|
|
46
|
-
throw new Error(
|
|
46
|
+
throw new Error("Stream already finalized");
|
|
47
47
|
}
|
|
48
48
|
if (this.aborted) {
|
|
49
|
-
throw new Error(
|
|
49
|
+
throw new Error("Cannot finalize aborted stream");
|
|
50
50
|
}
|
|
51
51
|
// First, process any complete chunks in the buffer
|
|
52
52
|
await this.processCompleteChunks();
|
|
@@ -61,7 +61,7 @@ class FileWriteStream {
|
|
|
61
61
|
}
|
|
62
62
|
// Create the file record using the same logic as FileTable.saveFile
|
|
63
63
|
const chunkHashesString = JSON.stringify(this.chunkHashes);
|
|
64
|
-
const fileHash = (0, keys_1.hashBytes)(Buffer.from(chunkHashesString,
|
|
64
|
+
const fileHash = (0, keys_1.hashBytes)(Buffer.from(chunkHashesString, "utf8"));
|
|
65
65
|
let fileRecord;
|
|
66
66
|
if (this.chunkHashes.length > file_types_1.CHUNK_INDEX_THRESHOLD) {
|
|
67
67
|
// Large file: use recursive index file
|
|
@@ -70,7 +70,7 @@ class FileWriteStream {
|
|
|
70
70
|
...this.metadata,
|
|
71
71
|
fileSize: this.bytesWritten,
|
|
72
72
|
fileHash,
|
|
73
|
-
indexFileId
|
|
73
|
+
indexFileId,
|
|
74
74
|
};
|
|
75
75
|
}
|
|
76
76
|
else {
|
|
@@ -79,7 +79,7 @@ class FileWriteStream {
|
|
|
79
79
|
...this.metadata,
|
|
80
80
|
fileSize: this.bytesWritten,
|
|
81
81
|
fileHash,
|
|
82
|
-
chunkHashes: this.chunkHashes
|
|
82
|
+
chunkHashes: this.chunkHashes,
|
|
83
83
|
};
|
|
84
84
|
}
|
|
85
85
|
// Save to database
|
|
@@ -89,7 +89,7 @@ class FileWriteStream {
|
|
|
89
89
|
}
|
|
90
90
|
async abort() {
|
|
91
91
|
if (this.finalized) {
|
|
92
|
-
throw new Error(
|
|
92
|
+
throw new Error("Cannot abort finalized stream");
|
|
93
93
|
}
|
|
94
94
|
this.aborted = true;
|
|
95
95
|
this.buffer = Buffer.alloc(0);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { ITableMetaData } from "../orm/types";
|
|
2
|
+
import { type ITableMetaData } from "../orm/types";
|
|
3
3
|
export declare const fileSchema: z.ZodObject<{
|
|
4
4
|
fileId: z.ZodEffects<z.ZodString, string, string>;
|
|
5
5
|
name: z.ZodString;
|
|
@@ -29,7 +29,7 @@ export declare const fileSchema: z.ZodObject<{
|
|
|
29
29
|
indexFileId?: string | undefined;
|
|
30
30
|
}>;
|
|
31
31
|
export type IFile = z.infer<typeof fileSchema>;
|
|
32
|
-
export type IFileInput = Pick<IFile,
|
|
32
|
+
export type IFileInput = Pick<IFile, "fileId" | "name" | "fileSize" | "mimeType" | "isIndexFile">;
|
|
33
33
|
export declare const filesMetaData: ITableMetaData;
|
|
34
34
|
export declare const FILE_CHUNK_SIZE: number;
|
|
35
35
|
export declare const CHUNKS_DIR = "file_chunks";
|
|
@@ -10,23 +10,29 @@ const zod_types_1 = require("../../types/zod-types");
|
|
|
10
10
|
const types_1 = require("../orm/types");
|
|
11
11
|
exports.fileSchema = zod_1.z.object({
|
|
12
12
|
fileId: zod_types_1.zodPeerId,
|
|
13
|
-
name: zod_1.z.string().describe(
|
|
14
|
-
fileSize: zod_1.z.number().describe(
|
|
15
|
-
fileHash: zod_1.z.string().describe(
|
|
16
|
-
mimeType: zod_1.z.string().optional().describe(
|
|
17
|
-
chunkHashes: zod_1.z
|
|
18
|
-
|
|
19
|
-
|
|
13
|
+
name: zod_1.z.string().describe("The name of the file"),
|
|
14
|
+
fileSize: zod_1.z.number().describe("The size of the file in bytes"),
|
|
15
|
+
fileHash: zod_1.z.string().describe("Hash of the chunk hashes array for integrity verification"),
|
|
16
|
+
mimeType: zod_1.z.string().optional().describe("The MIME type of the file"),
|
|
17
|
+
chunkHashes: zod_1.z
|
|
18
|
+
.array(zod_1.z.string())
|
|
19
|
+
.optional()
|
|
20
|
+
.describe("SHA-256 hashes of each chunk in order (for small files)"),
|
|
21
|
+
isIndexFile: zod_1.z
|
|
22
|
+
.boolean()
|
|
23
|
+
.optional()
|
|
24
|
+
.describe("True if this is an index file for another large file"),
|
|
25
|
+
indexFileId: zod_types_1.zodPeerId.optional().describe("FileId of index file (for large files)"),
|
|
20
26
|
});
|
|
21
27
|
exports.filesMetaData = {
|
|
22
|
-
name:
|
|
23
|
-
description:
|
|
24
|
-
primaryKeyName:
|
|
28
|
+
name: "Files",
|
|
29
|
+
description: "Files stored in the chunked file system for peer sharing",
|
|
30
|
+
primaryKeyName: "fileId",
|
|
25
31
|
fields: (0, types_1.schemaToFields)(exports.fileSchema),
|
|
26
32
|
};
|
|
27
33
|
// File storage configuration
|
|
28
34
|
exports.FILE_CHUNK_SIZE = 1024 * 1024; // 1MB chunks
|
|
29
|
-
exports.CHUNKS_DIR =
|
|
35
|
+
exports.CHUNKS_DIR = "file_chunks";
|
|
30
36
|
exports.CHUNK_INDEX_THRESHOLD = 1000; // Use chunk index file for files with >1000 chunks (~1GB)
|
|
31
37
|
// For testing - allow modifying the threshold
|
|
32
38
|
function setChunkIndexThreshold(threshold) {
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
+
import type { DataContext } from "../../context/data-context";
|
|
1
2
|
import { Table } from "../orm";
|
|
3
|
+
import { type IFile, type IFileInput } from "./file.types";
|
|
2
4
|
import { FileReadStream } from "./file-read-stream";
|
|
3
5
|
import { FileWriteStream } from "./file-write-stream";
|
|
4
|
-
import { IFile, IFileInput } from "./file.types";
|
|
5
|
-
import type { DataContext } from "../../context/data-context";
|
|
6
6
|
export declare class FilesTable extends Table<IFile> {
|
|
7
7
|
/** @deprecated Direct inserts forbidden; use saveFile() or saveFileRecord() */
|
|
8
|
-
insert(..._args: Parameters<Table<any>[
|
|
8
|
+
insert(..._args: Parameters<Table<any>["insert"]>): never;
|
|
9
9
|
/** @deprecated Direct updates forbidden; use saveFile() or saveFileRecord() */
|
|
10
|
-
update(..._args: Parameters<Table<any>[
|
|
10
|
+
update(..._args: Parameters<Table<any>["update"]>): never;
|
|
11
11
|
/** @deprecated Direct deletes forbidden; use deleteFile() */
|
|
12
|
-
delete(..._args: Parameters<Table<any>[
|
|
12
|
+
delete(..._args: Parameters<Table<any>["delete"]>): never;
|
|
13
13
|
/** @deprecated Direct save forbidden; use saveFile() or saveFileRecord() */
|
|
14
|
-
save(..._args: Parameters<Table<any>[
|
|
14
|
+
save(..._args: Parameters<Table<any>["save"]>): never;
|
|
15
15
|
createWriteStream(metadata: IFileInput): Promise<FileWriteStream>;
|
|
16
16
|
/**
|
|
17
17
|
* Note: Use `saveFile` to write a file to disk. This method is for managing
|
package/dist/data/files/files.js
CHANGED
|
@@ -2,30 +2,30 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.FilesTable = void 0;
|
|
4
4
|
exports.Files = Files;
|
|
5
|
+
const user_context_singleton_1 = require("../../context/user-context-singleton");
|
|
5
6
|
const rpc_types_1 = require("../../rpc-types");
|
|
6
7
|
const utils_1 = require("../../utils");
|
|
7
8
|
const orm_1 = require("../orm");
|
|
8
|
-
const user_context_singleton_1 = require("../../context/user-context-singleton");
|
|
9
9
|
const table_definitions_system_1 = require("../orm/table-definitions.system");
|
|
10
|
+
const file_types_1 = require("./file.types");
|
|
10
11
|
const file_read_stream_1 = require("./file-read-stream");
|
|
11
12
|
const file_write_stream_1 = require("./file-write-stream");
|
|
12
|
-
const file_types_1 = require("./file.types");
|
|
13
13
|
class FilesTable extends orm_1.Table {
|
|
14
14
|
/** @deprecated Direct inserts forbidden; use saveFile() or saveFileRecord() */
|
|
15
15
|
insert(..._args) {
|
|
16
|
-
throw new Error(
|
|
16
|
+
throw new Error("Direct inserts forbidden; use saveFile() or saveFileRecord()");
|
|
17
17
|
}
|
|
18
18
|
/** @deprecated Direct updates forbidden; use saveFile() or saveFileRecord() */
|
|
19
19
|
update(..._args) {
|
|
20
|
-
throw new Error(
|
|
20
|
+
throw new Error("Direct updates forbidden; use saveFile() or saveFileRecord()");
|
|
21
21
|
}
|
|
22
22
|
/** @deprecated Direct deletes forbidden; use deleteFile() */
|
|
23
23
|
delete(..._args) {
|
|
24
|
-
throw new Error(
|
|
24
|
+
throw new Error("Direct deletes forbidden; use deleteFile()");
|
|
25
25
|
}
|
|
26
26
|
/** @deprecated Direct save forbidden; use saveFile() or saveFileRecord() */
|
|
27
27
|
save(..._args) {
|
|
28
|
-
throw new Error(
|
|
28
|
+
throw new Error("Direct saves forbidden; use saveFile() or saveFileRecord()");
|
|
29
29
|
}
|
|
30
30
|
async createWriteStream(metadata) {
|
|
31
31
|
return new file_write_stream_1.FileWriteStream(metadata, this);
|
|
@@ -50,11 +50,11 @@ class FilesTable extends orm_1.Table {
|
|
|
50
50
|
// Use FileWriteStream internally to ensure consistent chunking logic
|
|
51
51
|
const writeStream = await this.createWriteStream({
|
|
52
52
|
...metaData,
|
|
53
|
-
fileSize: data.length // Set the actual file size
|
|
53
|
+
fileSize: data.length, // Set the actual file size
|
|
54
54
|
});
|
|
55
55
|
// Write the entire data to the stream
|
|
56
|
-
if (typeof data ===
|
|
57
|
-
data = new Uint8Array(Buffer.from(data,
|
|
56
|
+
if (typeof data === "string") {
|
|
57
|
+
data = new Uint8Array(Buffer.from(data, "utf8"));
|
|
58
58
|
}
|
|
59
59
|
await writeStream.write(data);
|
|
60
60
|
// Finalize and return the result
|
|
@@ -89,7 +89,7 @@ class FilesTable extends orm_1.Table {
|
|
|
89
89
|
async createIndexFileRecursively(chunkHashes) {
|
|
90
90
|
// Create JSON content with chunk hashes
|
|
91
91
|
const indexContent = JSON.stringify(chunkHashes);
|
|
92
|
-
const indexBuffer = Buffer.from(indexContent,
|
|
92
|
+
const indexBuffer = Buffer.from(indexContent, "utf8");
|
|
93
93
|
// Generate a new file ID for the index file
|
|
94
94
|
const indexFileId = (0, utils_1.newid)();
|
|
95
95
|
// Create metadata for the index file
|
|
@@ -97,8 +97,8 @@ class FilesTable extends orm_1.Table {
|
|
|
97
97
|
fileId: indexFileId,
|
|
98
98
|
name: `index-${indexFileId}.json`,
|
|
99
99
|
fileSize: indexBuffer.length,
|
|
100
|
-
mimeType:
|
|
101
|
-
isIndexFile: true
|
|
100
|
+
mimeType: "application/json",
|
|
101
|
+
isIndexFile: true,
|
|
102
102
|
};
|
|
103
103
|
// Recursively save the index file (this will chunk it if it's too large)
|
|
104
104
|
await this.saveFile(indexMetadata, indexBuffer);
|
|
@@ -112,7 +112,7 @@ class FilesTable extends orm_1.Table {
|
|
|
112
112
|
throw new Error(`Index file not found: ${indexFileId}`);
|
|
113
113
|
}
|
|
114
114
|
// Parse chunk hashes from JSON
|
|
115
|
-
const indexContent = Buffer.from(indexBuffer).toString(
|
|
115
|
+
const indexContent = Buffer.from(indexBuffer).toString("utf8");
|
|
116
116
|
return JSON.parse(indexContent);
|
|
117
117
|
}
|
|
118
118
|
}
|
|
@@ -122,7 +122,7 @@ function Files(dataContext) {
|
|
|
122
122
|
return (0, user_context_singleton_1.getTableContainer)(dataContext).getTable(file_types_1.filesMetaData, file_types_1.fileSchema);
|
|
123
123
|
}
|
|
124
124
|
// TODO implement permissions check for file access
|
|
125
|
-
rpc_types_1.rpcServerCalls.getFileContents = async (fileId, encoding =
|
|
125
|
+
rpc_types_1.rpcServerCalls.getFileContents = async (fileId, encoding = "utf8") => {
|
|
126
126
|
const data = await Files().getFileContents(fileId);
|
|
127
127
|
if (data === null) {
|
|
128
128
|
throw new Error(`File not found: ${fileId}`);
|
|
@@ -135,15 +135,13 @@ rpc_types_1.rpcServerCalls.getFileContentsBase64 = async (fileId) => {
|
|
|
135
135
|
if (data === null) {
|
|
136
136
|
throw new Error(`File not found: ${fileId}`);
|
|
137
137
|
}
|
|
138
|
-
return Buffer.from(data).toString(
|
|
138
|
+
return Buffer.from(data).toString("base64");
|
|
139
139
|
};
|
|
140
140
|
// Save a file from the UI - data should be base64 encoded for binary files
|
|
141
141
|
rpc_types_1.rpcServerCalls.saveFile = async (input) => {
|
|
142
142
|
const fileId = input.fileId || (0, utils_1.newid)();
|
|
143
|
-
const encoding = input.encoding ||
|
|
144
|
-
const dataBuffer = encoding ===
|
|
145
|
-
? Buffer.from(input.data, 'base64')
|
|
146
|
-
: Buffer.from(input.data, 'utf8');
|
|
143
|
+
const encoding = input.encoding || "utf8";
|
|
144
|
+
const dataBuffer = encoding === "base64" ? Buffer.from(input.data, "base64") : Buffer.from(input.data, "utf8");
|
|
147
145
|
const file = await Files().saveFile({
|
|
148
146
|
fileId,
|
|
149
147
|
name: input.name,
|