@editframe/api 0.24.1-beta.0 → 0.25.0-beta.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_SIZE_BYTES.js +4 -0
- package/dist/CHUNK_SIZE_BYTES.js.map +1 -0
- package/dist/ProgressIterator.d.ts +26 -22
- package/dist/ProgressIterator.js +5 -1
- package/dist/ProgressIterator.js.map +1 -0
- package/dist/StreamEventSource.d.ts +58 -54
- package/dist/StreamEventSource.js +6 -1
- package/dist/StreamEventSource.js.map +1 -0
- package/dist/client.d.ts +13 -8
- package/dist/client.js +6 -1
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +14 -13
- package/dist/index.js +4 -3
- package/dist/node.d.ts +22 -7
- package/dist/node.js +8 -3
- package/dist/node.js.map +1 -0
- package/dist/resources/caption-file.d.ts +56 -51
- package/dist/resources/caption-file.js +25 -3
- package/dist/resources/caption-file.js.map +1 -0
- package/dist/resources/image-file.d.ts +109 -104
- package/dist/resources/image-file.js +8 -3
- package/dist/resources/image-file.js.map +1 -0
- package/dist/resources/isobmff-file.d.ts +63 -58
- package/dist/resources/isobmff-file.js +7 -2
- package/dist/resources/isobmff-file.js.map +1 -0
- package/dist/resources/isobmff-track.d.ts +604 -598
- package/dist/resources/isobmff-track.js +7 -2
- package/dist/resources/isobmff-track.js.map +1 -0
- package/dist/resources/process-isobmff.d.ts +16 -11
- package/dist/resources/process-isobmff.js +5 -0
- package/dist/resources/process-isobmff.js.map +1 -0
- package/dist/resources/renders.bundle.d.ts +7 -4
- package/dist/resources/renders.bundle.js +6 -1
- package/dist/resources/renders.bundle.js.map +1 -0
- package/dist/resources/renders.d.ts +229 -367
- package/dist/resources/renders.js +13 -8
- package/dist/resources/renders.js.map +1 -0
- package/dist/resources/transcriptions.d.ts +25 -20
- package/dist/resources/transcriptions.js +6 -1
- package/dist/resources/transcriptions.js.map +1 -0
- package/dist/resources/unprocessed-file.d.ts +36 -35
- package/dist/resources/unprocessed-file.js +8 -3
- package/dist/resources/unprocessed-file.js.map +1 -0
- package/dist/resources/url-token.d.ts +9 -4
- package/dist/resources/url-token.js +6 -1
- package/dist/resources/url-token.js.map +1 -0
- package/dist/streamChunker.js +5 -0
- package/dist/streamChunker.js.map +1 -0
- package/dist/uploadChunks.d.ts +9 -16
- package/dist/uploadChunks.js +7 -2
- package/dist/uploadChunks.js.map +1 -0
- package/dist/utils/assertTypesMatch.js +4 -0
- package/dist/utils/assertTypesMatch.js.map +1 -0
- package/dist/utils/createReadableStreamFromReadable.d.ts +8 -3
- package/dist/utils/createReadableStreamFromReadable.js +5 -0
- package/dist/utils/createReadableStreamFromReadable.js.map +1 -0
- package/package.json +14 -33
- package/src/resources/renders.bundle.ts +1 -1
- package/tsdown.config.ts +10 -0
- package/dist/CHUNK_SIZE_BYTES.d.ts +0 -1
- package/dist/ProgressIterator.test.d.ts +0 -1
- package/dist/StreamEventSource.test.d.ts +0 -1
- package/dist/client.test.d.ts +0 -1
- package/dist/readableFromBuffers.d.ts +0 -1
- package/dist/resources/caption-file.test.d.ts +0 -1
- package/dist/resources/image-file.test.d.ts +0 -1
- package/dist/resources/isobmff-file.test.d.ts +0 -1
- package/dist/resources/isobmff-track.test.d.ts +0 -1
- package/dist/resources/process-isobmff.test.d.ts +0 -1
- package/dist/resources/renders.test.d.ts +0 -1
- package/dist/resources/transcriptions.test.d.ts +0 -1
- package/dist/resources/unprocessed-file.test.d.ts +0 -1
- package/dist/resources/url-token.test.d.ts +0 -1
- package/dist/streamChunker.d.ts +0 -1
- package/dist/streamChunker.test.d.ts +0 -1
- package/dist/uploadChunks.test.d.ts +0 -1
- package/dist/utils/assertTypesMatch.d.ts +0 -3
|
@@ -2,24 +2,26 @@ import { assertTypesMatch } from "../utils/assertTypesMatch.js";
|
|
|
2
2
|
import { CompletionIterator } from "../ProgressIterator.js";
|
|
3
3
|
import debug from "debug";
|
|
4
4
|
import { z } from "zod";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
|
|
6
|
+
//#region src/resources/renders.ts
|
|
7
|
+
const log = debug("ef:api:renders");
|
|
8
|
+
const H264Configuration = z.object({ codec: z.literal("h264") });
|
|
9
|
+
const AACConfiguration = z.object({ codec: z.literal("aac") });
|
|
10
|
+
const MP4Configuration = z.object({
|
|
9
11
|
container: z.literal("mp4"),
|
|
10
12
|
video: H264Configuration,
|
|
11
13
|
audio: AACConfiguration
|
|
12
14
|
});
|
|
13
|
-
|
|
15
|
+
const JpegConfiguration = z.object({
|
|
14
16
|
container: z.literal("jpeg"),
|
|
15
17
|
quality: z.number().int().min(1).max(100).default(80).optional()
|
|
16
18
|
});
|
|
17
|
-
|
|
19
|
+
const PngConfiguration = z.object({
|
|
18
20
|
container: z.literal("png"),
|
|
19
21
|
compression: z.number().int().min(1).max(100).default(80).optional(),
|
|
20
22
|
transparency: z.boolean().default(false).optional()
|
|
21
23
|
});
|
|
22
|
-
|
|
24
|
+
const WebpConfiguration = z.object({
|
|
23
25
|
container: z.literal("webp"),
|
|
24
26
|
quality: z.number().int().min(1).max(100).default(80).optional(),
|
|
25
27
|
compression: z.number().int().min(0).max(6).default(4).optional(),
|
|
@@ -47,7 +49,7 @@ const CreateRenderPayload = z.object({
|
|
|
47
49
|
audio: { codec: "aac" }
|
|
48
50
|
}).optional()
|
|
49
51
|
});
|
|
50
|
-
CreateRenderPayload.extend({ output: RenderOutputConfiguration });
|
|
52
|
+
const CreateRenderPayloadWithOutput = CreateRenderPayload.extend({ output: RenderOutputConfiguration });
|
|
51
53
|
var OutputConfiguration = class OutputConfiguration {
|
|
52
54
|
static parse(input) {
|
|
53
55
|
return new OutputConfiguration(RenderOutputConfiguration.parse(input ?? {
|
|
@@ -133,4 +135,7 @@ const downloadRender = async (client, id) => {
|
|
|
133
135
|
if (response.ok) return response;
|
|
134
136
|
throw new Error(`Failed to download render ${id} ${response.status} ${response.statusText}`);
|
|
135
137
|
};
|
|
138
|
+
|
|
139
|
+
//#endregion
|
|
136
140
|
export { CreateRenderPayload, OutputConfiguration, RenderOutputConfiguration, createRender, downloadRender, getRenderInfo, getRenderProgress, lookupRenderByMd5, uploadRender };
|
|
141
|
+
//# sourceMappingURL=renders.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renders.js","names":["output: RenderOutputConfiguration"],"sources":["../../src/resources/renders.ts"],"sourcesContent":["import debug from \"debug\";\nimport { z } from \"zod\";\nimport type { Client } from \"../client.js\";\nimport { CompletionIterator } from \"../ProgressIterator.js\";\nimport { assertTypesMatch } from \"../utils/assertTypesMatch.ts\";\n\nconst log = debug(\"ef:api:renders\");\n\nconst H264Configuration = z.object({\n codec: z.literal(\"h264\"),\n});\n\nconst AACConfiguration = z.object({\n codec: z.literal(\"aac\"),\n});\n\nconst MP4Configuration = z.object({\n container: z.literal(\"mp4\"),\n video: H264Configuration,\n audio: AACConfiguration,\n});\n\nconst JpegConfiguration = z.object({\n container: z.literal(\"jpeg\"),\n quality: z.number().int().min(1).max(100).default(80).optional(),\n});\n\nconst PngConfiguration = z.object({\n container: z.literal(\"png\"),\n compression: z.number().int().min(1).max(100).default(80).optional(),\n transparency: z.boolean().default(false).optional(),\n});\n\nconst WebpConfiguration = z.object({\n container: z.literal(\"webp\"),\n quality: z.number().int().min(1).max(100).default(80).optional(),\n compression: z.number().int().min(0).max(6).default(4).optional(),\n transparency: z.boolean().default(false).optional(),\n});\n\nexport const RenderOutputConfiguration = z.discriminatedUnion(\"container\", [\n MP4Configuration,\n JpegConfiguration,\n PngConfiguration,\n WebpConfiguration,\n]);\n\nexport type RenderOutputConfiguration = z.infer<\n typeof RenderOutputConfiguration\n>;\n\nexport const CreateRenderPayload = z.object({\n md5: z.string().optional(),\n fps: z.number().int().min(1).max(120).default(30).optional(),\n width: z.number().int().min(2).optional(),\n height: z.number().int().min(2).optional(),\n work_slice_ms: z\n .number()\n .int()\n .min(1000)\n .max(10_000)\n .default(4_000)\n .optional(),\n html: z.string().optional(),\n metadata: z.record(z.string(), z.string()).optional(),\n duration_ms: z.number().int().optional(),\n strategy: z.enum([\"v1\"]).default(\"v1\").optional(),\n output: RenderOutputConfiguration.default({\n container: \"mp4\",\n video: {\n codec: \"h264\",\n },\n audio: {\n codec: \"aac\",\n },\n }).optional(),\n});\n\nexport const CreateRenderPayloadWithOutput = CreateRenderPayload.extend({\n output: RenderOutputConfiguration,\n});\n\nexport class OutputConfiguration {\n static parse(input?: any) {\n const output = RenderOutputConfiguration.parse(\n input ?? {\n container: \"mp4\",\n video: {\n codec: \"h264\",\n },\n audio: {\n codec: \"aac\",\n },\n },\n );\n return new OutputConfiguration(output);\n }\n\n constructor(public readonly output: RenderOutputConfiguration) {}\n\n get isStill() {\n return (\n this.output.container === \"jpeg\" ||\n this.output.container === \"png\" ||\n this.output.container === \"webp\"\n );\n }\n\n get isVideo() {\n return this.output.container === \"mp4\";\n }\n\n get fileExtension() {\n return this.output.container;\n }\n\n get contentType() {\n if (this.isStill) {\n return `image/${this.fileExtension}`;\n }\n return `video/${this.fileExtension}`;\n }\n\n get container() {\n return this.output.container;\n }\n\n get jpegConfig() {\n return this.output.container === \"jpeg\" ? this.output : null;\n }\n\n get pngConfig() {\n return this.output.container === \"png\" ? this.output : null;\n }\n\n get webpConfig() {\n return this.output.container === \"webp\" ? this.output : null;\n }\n\n get mp4Config() {\n return this.output.container === \"mp4\" ? this.output : null;\n }\n}\n\nexport interface CreateRenderPayload {\n md5?: string;\n fps?: number;\n width?: number;\n height?: number;\n work_slice_ms?: number;\n html?: string;\n duration_ms?: number;\n metadata?: Record<string, string>;\n strategy?: \"v1\";\n output?: z.infer<typeof RenderOutputConfiguration>;\n}\n\nassertTypesMatch<CreateRenderPayload, z.infer<typeof CreateRenderPayload>>(\n true,\n);\n\nexport interface CreateRenderResult {\n id: string;\n md5: string | null;\n status: \"complete\" | \"created\" | \"failed\" | \"pending\" | \"rendering\" | string;\n metadata: Record<string, string>;\n}\n\nexport interface LookupRenderByMd5Result {\n id: string;\n md5: string | null;\n status: \"complete\" | \"created\" | \"failed\" | \"pending\" | \"rendering\" | string;\n metadata: Record<string, string>;\n}\n\nexport const createRender = async (\n client: Client,\n payload: CreateRenderPayload,\n) => {\n log(\"Creating render\", payload);\n // FIXME: The order of optional/default matters in zod\n // And if we set the default last, the type is not inferred correctly\n // Manually applying defaults here is a hack\n payload.strategy ??= \"v1\";\n payload.work_slice_ms ??= 4_000;\n payload.output ??= {\n container: \"mp4\",\n video: {\n codec: \"h264\",\n },\n audio: {\n codec: \"aac\",\n },\n };\n\n const response = await client.authenticatedFetch(\"/api/v1/renders\", {\n method: \"POST\",\n body: JSON.stringify(payload),\n });\n\n log(\"Render created\", response);\n if (response.ok) {\n return (await response.json()) as CreateRenderResult;\n }\n\n throw new Error(\n `Failed to create render ${response.status} ${response.statusText} ${await response.text()}`,\n );\n};\n\nexport const uploadRender = async (\n client: Client,\n renderId: string,\n fileStream: ReadableStream,\n) => {\n log(\"Uploading render\", renderId);\n const response = await client.authenticatedFetch(\n `/api/v1/renders/${renderId}/upload`,\n {\n method: \"POST\",\n body: fileStream,\n duplex: \"half\",\n },\n );\n\n if (response.ok) {\n return response.json();\n }\n\n throw new Error(\n `Failed to upload render ${response.status} ${response.statusText}`,\n );\n};\n\nexport const getRenderInfo = async (client: Client, id: string) => {\n const response = await client.authenticatedFetch(`/api/v1/renders/${id}`);\n return response.json() as Promise<LookupRenderByMd5Result>;\n};\n\nexport const lookupRenderByMd5 = async (\n client: Client,\n md5: string,\n): Promise<LookupRenderByMd5Result | null> => {\n const response = await client.authenticatedFetch(\n `/api/v1/renders/md5/${md5}`,\n {\n method: \"GET\",\n },\n );\n\n if (response.ok) {\n return (await response.json()) as LookupRenderByMd5Result;\n }\n\n if (response.status === 404) {\n return null;\n }\n\n throw new Error(\n `Failed to lookup render by md5 ${md5} ${response.status} ${response.statusText}`,\n );\n};\n\nexport const getRenderProgress = async (client: Client, id: string) => {\n const eventSource = await client.authenticatedEventSource(\n `/api/v1/renders/${id}/progress`,\n );\n\n return new CompletionIterator(eventSource);\n};\n\nexport const downloadRender = async (client: Client, id: string) => {\n const response = await client.authenticatedFetch(`/api/v1/renders/${id}.mp4`);\n\n if (response.ok) {\n return response;\n }\n\n throw new Error(\n `Failed to download render ${id} ${response.status} ${response.statusText}`,\n );\n};\n"],"mappings":"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"}
|
|
@@ -1,25 +1,30 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import { Client } from "../client.js";
|
|
2
|
+
import { CompletionIterator } from "../ProgressIterator.js";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
|
|
5
|
+
//#region src/resources/transcriptions.d.ts
|
|
6
|
+
declare const CreateTranscriptionPayload: z.ZodObject<{
|
|
7
|
+
file_id: z.ZodString;
|
|
8
|
+
track_id: z.ZodNumber;
|
|
7
9
|
}, "strip", z.ZodTypeAny, {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
+
file_id: string;
|
|
11
|
+
track_id: number;
|
|
10
12
|
}, {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
+
file_id: string;
|
|
14
|
+
track_id: number;
|
|
13
15
|
}>;
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
type CreateTranscriptionPayload = z.infer<typeof CreateTranscriptionPayload>;
|
|
17
|
+
interface CreateTranscriptionResult {
|
|
18
|
+
id: string;
|
|
19
|
+
status: "complete" | "created" | "failed" | "pending" | "transcribing";
|
|
18
20
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
21
|
+
interface TranscriptionInfoResult {
|
|
22
|
+
id: string;
|
|
23
|
+
status: "complete" | "created" | "failed" | "pending" | "transcribing";
|
|
22
24
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
25
|
+
declare const createTranscription: (client: Client, payload: CreateTranscriptionPayload) => Promise<CreateTranscriptionResult>;
|
|
26
|
+
declare const getTranscriptionProgress: (client: Client, id: string) => Promise<CompletionIterator>;
|
|
27
|
+
declare const getTranscriptionInfo: (client: Client, id: string) => Promise<TranscriptionInfoResult>;
|
|
28
|
+
//#endregion
|
|
29
|
+
export { CreateTranscriptionPayload, CreateTranscriptionResult, TranscriptionInfoResult, createTranscription, getTranscriptionInfo, getTranscriptionProgress };
|
|
30
|
+
//# sourceMappingURL=transcriptions.d.ts.map
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { CompletionIterator } from "../ProgressIterator.js";
|
|
2
2
|
import debug from "debug";
|
|
3
3
|
import { z } from "zod";
|
|
4
|
-
|
|
4
|
+
|
|
5
|
+
//#region src/resources/transcriptions.ts
|
|
6
|
+
const log = debug("ef:api:transcriptions");
|
|
5
7
|
const CreateTranscriptionPayload = z.object({
|
|
6
8
|
file_id: z.string(),
|
|
7
9
|
track_id: z.number().int()
|
|
@@ -24,4 +26,7 @@ const getTranscriptionInfo = async (client, id) => {
|
|
|
24
26
|
if (response.ok) return await response.json();
|
|
25
27
|
throw new Error(`Failed to get transcription info ${response.status} ${response.statusText}`);
|
|
26
28
|
};
|
|
29
|
+
|
|
30
|
+
//#endregion
|
|
27
31
|
export { CreateTranscriptionPayload, createTranscription, getTranscriptionInfo, getTranscriptionProgress };
|
|
32
|
+
//# sourceMappingURL=transcriptions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transcriptions.js","names":[],"sources":["../../src/resources/transcriptions.ts"],"sourcesContent":["import debug from \"debug\";\nimport { z } from \"zod\";\nimport type { Client } from \"../client.js\";\nimport { CompletionIterator } from \"../ProgressIterator.js\";\n\nconst log = debug(\"ef:api:transcriptions\");\n\nexport const CreateTranscriptionPayload = z.object({\n file_id: z.string(),\n track_id: z.number().int(),\n});\n\nexport type CreateTranscriptionPayload = z.infer<\n typeof CreateTranscriptionPayload\n>;\n\nexport interface CreateTranscriptionResult {\n id: string;\n status: \"complete\" | \"created\" | \"failed\" | \"pending\" | \"transcribing\";\n}\n\nexport interface TranscriptionInfoResult {\n id: string;\n status: \"complete\" | \"created\" | \"failed\" | \"pending\" | \"transcribing\";\n}\n\nexport const createTranscription = async (\n client: Client,\n payload: CreateTranscriptionPayload,\n) => {\n log(\"Creating transcription\", payload);\n const response = await client.authenticatedFetch(\"/api/v1/transcriptions\", {\n method: \"POST\",\n body: JSON.stringify(payload),\n });\n\n log(\"Transcription created\", response);\n if (response.ok) {\n return (await response.json()) as CreateTranscriptionResult;\n }\n\n throw new Error(\n `Failed to create transcription ${response.status} ${response.statusText}`,\n );\n};\n\nexport const getTranscriptionProgress = async (client: Client, id: string) => {\n const eventSource = await client.authenticatedEventSource(\n `/api/v1/transcriptions/${id}/progress`,\n );\n\n return new CompletionIterator(eventSource);\n};\n\nexport const getTranscriptionInfo = async (client: Client, id: string) => {\n const response = await client.authenticatedFetch(\n `/api/v1/transcriptions/${id}`,\n );\n\n if (response.ok) {\n return (await response.json()) as TranscriptionInfoResult;\n }\n\n throw new Error(\n `Failed to get transcription info ${response.status} ${response.statusText}`,\n );\n};\n"],"mappings":";;;;;AAKA,MAAM,MAAM,MAAM,wBAAwB;AAE1C,MAAa,6BAA6B,EAAE,OAAO;CACjD,SAAS,EAAE,QAAQ;CACnB,UAAU,EAAE,QAAQ,CAAC,KAAK;CAC3B,CAAC;AAgBF,MAAa,sBAAsB,OACjC,QACA,YACG;AACH,KAAI,0BAA0B,QAAQ;CACtC,MAAM,WAAW,MAAM,OAAO,mBAAmB,0BAA0B;EACzE,QAAQ;EACR,MAAM,KAAK,UAAU,QAAQ;EAC9B,CAAC;AAEF,KAAI,yBAAyB,SAAS;AACtC,KAAI,SAAS,GACX,QAAQ,MAAM,SAAS,MAAM;AAG/B,OAAM,IAAI,MACR,kCAAkC,SAAS,OAAO,GAAG,SAAS,aAC/D;;AAGH,MAAa,2BAA2B,OAAO,QAAgB,OAAe;AAK5E,QAAO,IAAI,mBAJS,MAAM,OAAO,yBAC/B,0BAA0B,GAAG,WAC9B,CAEyC;;AAG5C,MAAa,uBAAuB,OAAO,QAAgB,OAAe;CACxE,MAAM,WAAW,MAAM,OAAO,mBAC5B,0BAA0B,KAC3B;AAED,KAAI,SAAS,GACX,QAAQ,MAAM,SAAS,MAAM;AAG/B,OAAM,IAAI,MACR,oCAAoC,SAAS,OAAO,GAAG,SAAS,aACjE"}
|
|
@@ -1,41 +1,42 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import { Client } from "../client.js";
|
|
2
|
+
import { IteratorWithPromise, UploadChunkEvent } from "../uploadChunks.js";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
|
|
5
|
+
//#region src/resources/unprocessed-file.d.ts
|
|
6
|
+
declare const CreateUnprocessedFilePayload: z.ZodObject<{
|
|
7
|
+
md5: z.ZodString;
|
|
8
|
+
filename: z.ZodString;
|
|
9
|
+
byte_size: z.ZodNumber;
|
|
7
10
|
}, "strip", z.ZodTypeAny, {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
+
md5: string;
|
|
12
|
+
filename: string;
|
|
13
|
+
byte_size: number;
|
|
11
14
|
}, {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
+
md5: string;
|
|
16
|
+
filename: string;
|
|
17
|
+
byte_size: number;
|
|
15
18
|
}>;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
md5: string;
|
|
19
|
+
type CreateUnprocessedFilePayload = z.infer<typeof CreateUnprocessedFilePayload>;
|
|
20
|
+
interface UnprocessedFile {
|
|
21
|
+
byte_size: number;
|
|
22
|
+
next_byte: number;
|
|
23
|
+
complete: boolean;
|
|
24
|
+
id: string;
|
|
25
|
+
md5: string;
|
|
24
26
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
27
|
+
interface UnprocessedFileUploadDetails {
|
|
28
|
+
id: string;
|
|
29
|
+
byte_size: number;
|
|
28
30
|
}
|
|
29
|
-
|
|
31
|
+
interface CreateUnprocessedFileResult extends UnprocessedFile {}
|
|
32
|
+
interface LookupUnprocessedFileByMd5Result extends UnprocessedFile {}
|
|
33
|
+
interface ProcessIsobmffFileResult {
|
|
34
|
+
id: string;
|
|
30
35
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
export declare const createUnprocessedFile: (client: Client, payload: CreateUnprocessedFilePayload) => Promise<CreateUnprocessedFileResult>;
|
|
39
|
-
export declare const uploadUnprocessedReadableStream: (client: Client, uploadDetails: UnprocessedFileUploadDetails, fileStream: ReadableStream) => import('../uploadChunks.js').IteratorWithPromise<import('../uploadChunks.js').UploadChunkEvent>;
|
|
40
|
-
export declare const lookupUnprocessedFileByMd5: (client: Client, md5: string) => Promise<LookupUnprocessedFileByMd5Result | null>;
|
|
41
|
-
export declare const processIsobmffFile: (client: Client, id: string) => Promise<ProcessIsobmffFileResult>;
|
|
36
|
+
declare const createUnprocessedFile: (client: Client, payload: CreateUnprocessedFilePayload) => Promise<CreateUnprocessedFileResult>;
|
|
37
|
+
declare const uploadUnprocessedReadableStream: (client: Client, uploadDetails: UnprocessedFileUploadDetails, fileStream: ReadableStream) => IteratorWithPromise<UploadChunkEvent>;
|
|
38
|
+
declare const lookupUnprocessedFileByMd5: (client: Client, md5: string) => Promise<LookupUnprocessedFileByMd5Result | null>;
|
|
39
|
+
declare const processIsobmffFile: (client: Client, id: string) => Promise<ProcessIsobmffFileResult>;
|
|
40
|
+
//#endregion
|
|
41
|
+
export { CreateUnprocessedFilePayload, CreateUnprocessedFileResult, LookupUnprocessedFileByMd5Result, ProcessIsobmffFileResult, UnprocessedFile, UnprocessedFileUploadDetails, createUnprocessedFile, lookupUnprocessedFileByMd5, processIsobmffFile, uploadUnprocessedReadableStream };
|
|
42
|
+
//# sourceMappingURL=unprocessed-file.d.ts.map
|
|
@@ -2,14 +2,16 @@ import { uploadChunks } from "../uploadChunks.js";
|
|
|
2
2
|
import { assertTypesMatch } from "../utils/assertTypesMatch.js";
|
|
3
3
|
import debug from "debug";
|
|
4
4
|
import { z } from "zod";
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
|
|
6
|
+
//#region src/resources/unprocessed-file.ts
|
|
7
|
+
const log = debug("ef:api:unprocessed-file");
|
|
8
|
+
const MAX_FILE_SIZE = 1024 * 1024 * 1024;
|
|
7
9
|
const CreateUnprocessedFilePayload = z.object({
|
|
8
10
|
md5: z.string(),
|
|
9
11
|
filename: z.string(),
|
|
10
12
|
byte_size: z.number().int().max(MAX_FILE_SIZE)
|
|
11
13
|
});
|
|
12
|
-
z.object({});
|
|
14
|
+
const UpdateUnprocessedFilePayload = z.object({});
|
|
13
15
|
assertTypesMatch(true);
|
|
14
16
|
const createUnprocessedFile = async (client, payload) => {
|
|
15
17
|
log("Creating an unprocessed file", payload);
|
|
@@ -42,4 +44,7 @@ const processIsobmffFile = async (client, id) => {
|
|
|
42
44
|
if (response.ok) return await response.json();
|
|
43
45
|
throw new Error(`Failed to process isobmff file ${id} ${response.status} ${response.statusText}`);
|
|
44
46
|
};
|
|
47
|
+
|
|
48
|
+
//#endregion
|
|
45
49
|
export { CreateUnprocessedFilePayload, createUnprocessedFile, lookupUnprocessedFileByMd5, processIsobmffFile, uploadUnprocessedReadableStream };
|
|
50
|
+
//# sourceMappingURL=unprocessed-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unprocessed-file.js","names":[],"sources":["../../src/resources/unprocessed-file.ts"],"sourcesContent":["import debug from \"debug\";\nimport { z } from \"zod\";\n\nimport type { Client } from \"../client.js\";\nimport { uploadChunks } from \"../uploadChunks.js\";\nimport { assertTypesMatch } from \"../utils/assertTypesMatch.ts\";\n\nconst log = debug(\"ef:api:unprocessed-file\");\n\nconst MAX_FILE_SIZE = 1024 * 1024 * 1024; // 1GiB\n\nexport const CreateUnprocessedFilePayload = z.object({\n md5: z.string(),\n filename: z.string(),\n byte_size: z.number().int().max(MAX_FILE_SIZE),\n});\n\nexport const UpdateUnprocessedFilePayload = z.object({});\n\nexport type CreateUnprocessedFilePayload = z.infer<\n typeof CreateUnprocessedFilePayload\n>;\n\nexport interface UnprocessedFile {\n byte_size: number;\n next_byte: number;\n complete: boolean;\n id: string;\n md5: string;\n}\n\nexport interface UnprocessedFileUploadDetails {\n id: string;\n byte_size: number;\n}\n\n// Ensure that the UnprocessedFileUploadDetails type matches the shape of the\n// UnprocessedFile type, but without the optional fields.\nassertTypesMatch<\n Pick<UnprocessedFile, \"id\" | \"byte_size\">,\n UnprocessedFileUploadDetails\n>(true);\n\nexport interface CreateUnprocessedFileResult extends UnprocessedFile {}\n\nexport interface LookupUnprocessedFileByMd5Result extends UnprocessedFile {}\n\nexport interface UpdateUnprocessedFileResult extends UnprocessedFile {}\n\nexport interface ProcessIsobmffFileResult {\n id: string;\n}\n\nexport const createUnprocessedFile = async (\n client: Client,\n payload: CreateUnprocessedFilePayload,\n) => {\n log(\"Creating an unprocessed file\", payload);\n CreateUnprocessedFilePayload.parse(payload);\n const response = await client.authenticatedFetch(\n \"/api/v1/unprocessed_files\",\n {\n method: \"POST\",\n body: JSON.stringify(payload),\n },\n );\n\n log(\n \"Unprocessed file created\",\n response.status,\n response.statusText,\n response.headers,\n );\n\n if (response.ok) {\n return (await response.json()) as CreateUnprocessedFileResult;\n }\n\n throw new Error(\n `Failed to create unprocessed file ${response.status} ${response.statusText}`,\n );\n};\n\nexport const uploadUnprocessedReadableStream = (\n client: Client,\n uploadDetails: UnprocessedFileUploadDetails,\n fileStream: ReadableStream,\n) => {\n log(\"Uploading unprocessed file\", uploadDetails.id);\n\n return uploadChunks(client, {\n url: `/api/v1/unprocessed_files/${uploadDetails.id}/upload`,\n fileSize: uploadDetails.byte_size,\n fileStream,\n maxSize: MAX_FILE_SIZE,\n });\n};\n\nexport const lookupUnprocessedFileByMd5 = async (\n client: Client,\n md5: string,\n): Promise<LookupUnprocessedFileByMd5Result | null> => {\n const response = await client.authenticatedFetch(\n `/api/v1/unprocessed_files/md5/${md5}`,\n {\n method: \"GET\",\n },\n );\n\n if (response.ok) {\n return (await response.json()) as LookupUnprocessedFileByMd5Result;\n }\n\n if (response.status === 404) {\n return null;\n }\n\n throw new Error(\n `Failed to lookup unprocessed file by md5 ${md5} ${response.status} ${response.statusText}`,\n );\n};\n\nexport const processIsobmffFile = async (client: Client, id: string) => {\n const response = await client.authenticatedFetch(\n `/api/v1/unprocessed_files/${id}/isobmff`,\n {\n method: \"POST\",\n },\n );\n\n if (response.ok) {\n return (await response.json()) as ProcessIsobmffFileResult;\n }\n\n throw new Error(\n `Failed to process isobmff file ${id} ${response.status} ${response.statusText}`,\n );\n};\n"],"mappings":";;;;;;AAOA,MAAM,MAAM,MAAM,0BAA0B;AAE5C,MAAM,gBAAgB,OAAO,OAAO;AAEpC,MAAa,+BAA+B,EAAE,OAAO;CACnD,KAAK,EAAE,QAAQ;CACf,UAAU,EAAE,QAAQ;CACpB,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,cAAc;CAC/C,CAAC;AAEF,MAAa,+BAA+B,EAAE,OAAO,EAAE,CAAC;AAqBxD,iBAGE,KAAK;AAYP,MAAa,wBAAwB,OACnC,QACA,YACG;AACH,KAAI,gCAAgC,QAAQ;AAC5C,8BAA6B,MAAM,QAAQ;CAC3C,MAAM,WAAW,MAAM,OAAO,mBAC5B,6BACA;EACE,QAAQ;EACR,MAAM,KAAK,UAAU,QAAQ;EAC9B,CACF;AAED,KACE,4BACA,SAAS,QACT,SAAS,YACT,SAAS,QACV;AAED,KAAI,SAAS,GACX,QAAQ,MAAM,SAAS,MAAM;AAG/B,OAAM,IAAI,MACR,qCAAqC,SAAS,OAAO,GAAG,SAAS,aAClE;;AAGH,MAAa,mCACX,QACA,eACA,eACG;AACH,KAAI,8BAA8B,cAAc,GAAG;AAEnD,QAAO,aAAa,QAAQ;EAC1B,KAAK,6BAA6B,cAAc,GAAG;EACnD,UAAU,cAAc;EACxB;EACA,SAAS;EACV,CAAC;;AAGJ,MAAa,6BAA6B,OACxC,QACA,QACqD;CACrD,MAAM,WAAW,MAAM,OAAO,mBAC5B,iCAAiC,OACjC,EACE,QAAQ,OACT,CACF;AAED,KAAI,SAAS,GACX,QAAQ,MAAM,SAAS,MAAM;AAG/B,KAAI,SAAS,WAAW,IACtB,QAAO;AAGT,OAAM,IAAI,MACR,4CAA4C,IAAI,GAAG,SAAS,OAAO,GAAG,SAAS,aAChF;;AAGH,MAAa,qBAAqB,OAAO,QAAgB,OAAe;CACtE,MAAM,WAAW,MAAM,OAAO,mBAC5B,6BAA6B,GAAG,WAChC,EACE,QAAQ,QACT,CACF;AAED,KAAI,SAAS,GACX,QAAQ,MAAM,SAAS,MAAM;AAG/B,OAAM,IAAI,MACR,kCAAkC,GAAG,GAAG,SAAS,OAAO,GAAG,SAAS,aACrE"}
|
|
@@ -1,5 +1,10 @@
|
|
|
1
|
-
import { Client } from
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { Client } from "../client.js";
|
|
2
|
+
|
|
3
|
+
//#region src/resources/url-token.d.ts
|
|
4
|
+
interface URLTokenResult {
|
|
5
|
+
token: string;
|
|
4
6
|
}
|
|
5
|
-
|
|
7
|
+
declare const createURLToken: (client: Client, url: string) => Promise<string>;
|
|
8
|
+
//#endregion
|
|
9
|
+
export { URLTokenResult, createURLToken };
|
|
10
|
+
//# sourceMappingURL=url-token.d.ts.map
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import debug from "debug";
|
|
2
|
-
|
|
2
|
+
|
|
3
|
+
//#region src/resources/url-token.ts
|
|
4
|
+
const log = debug("ef:api:url-token");
|
|
3
5
|
const createURLToken = async (client, url) => {
|
|
4
6
|
log("Creating signed url for", url);
|
|
5
7
|
const response = await client.authenticatedFetch("/api/v1/url-token", {
|
|
@@ -9,4 +11,7 @@ const createURLToken = async (client, url) => {
|
|
|
9
11
|
if (!response.ok) throw new Error(`Failed to create signed url: ${response.status} ${response.statusText} ${await response.text()}`);
|
|
10
12
|
return (await response.json()).token;
|
|
11
13
|
};
|
|
14
|
+
|
|
15
|
+
//#endregion
|
|
12
16
|
export { createURLToken };
|
|
17
|
+
//# sourceMappingURL=url-token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url-token.js","names":[],"sources":["../../src/resources/url-token.ts"],"sourcesContent":["import debug from \"debug\";\n\nimport type { Client } from \"../client.js\";\n\nconst log = debug(\"ef:api:url-token\");\n\nexport interface URLTokenResult {\n token: string;\n}\n\nexport const createURLToken = async (client: Client, url: string) => {\n log(\"Creating signed url for\", url);\n const response = await client.authenticatedFetch(\"/api/v1/url-token\", {\n method: \"POST\",\n body: JSON.stringify({\n url,\n }),\n });\n\n if (!response.ok) {\n throw new Error(\n `Failed to create signed url: ${response.status} ${response.statusText} ${await response.text()}`,\n );\n }\n\n return ((await response.json()) as URLTokenResult).token;\n};\n"],"mappings":";;;AAIA,MAAM,MAAM,MAAM,mBAAmB;AAMrC,MAAa,iBAAiB,OAAO,QAAgB,QAAgB;AACnE,KAAI,2BAA2B,IAAI;CACnC,MAAM,WAAW,MAAM,OAAO,mBAAmB,qBAAqB;EACpE,QAAQ;EACR,MAAM,KAAK,UAAU,EACnB,KACD,CAAC;EACH,CAAC;AAEF,KAAI,CAAC,SAAS,GACZ,OAAM,IAAI,MACR,gCAAgC,SAAS,OAAO,GAAG,SAAS,WAAW,GAAG,MAAM,SAAS,MAAM,GAChG;AAGH,SAAS,MAAM,SAAS,MAAM,EAAqB"}
|
package/dist/streamChunker.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { CHUNK_SIZE_BYTES } from "./CHUNK_SIZE_BYTES.js";
|
|
2
|
+
|
|
3
|
+
//#region src/streamChunker.ts
|
|
2
4
|
async function* streamChunker(readableStream, chunkSize = CHUNK_SIZE_BYTES) {
|
|
3
5
|
const reader = readableStream.getReader();
|
|
4
6
|
let buffer = new Uint8Array(0);
|
|
@@ -21,4 +23,7 @@ async function* streamChunker(readableStream, chunkSize = CHUNK_SIZE_BYTES) {
|
|
|
21
23
|
reader.releaseLock();
|
|
22
24
|
}
|
|
23
25
|
}
|
|
26
|
+
|
|
27
|
+
//#endregion
|
|
24
28
|
export { streamChunker };
|
|
29
|
+
//# sourceMappingURL=streamChunker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streamChunker.js","names":[],"sources":["../src/streamChunker.ts"],"sourcesContent":["import { CHUNK_SIZE_BYTES } from \"./CHUNK_SIZE_BYTES.js\";\n\nexport async function* streamChunker(\n readableStream: ReadableStream,\n chunkSize = CHUNK_SIZE_BYTES,\n) {\n const reader = readableStream.getReader();\n let buffer = new Uint8Array(0);\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n const chunk = value;\n const newBuffer = new Uint8Array(buffer.length + chunk.length);\n newBuffer.set(buffer);\n newBuffer.set(chunk, buffer.length);\n buffer = newBuffer;\n\n while (buffer.length >= chunkSize) {\n yield buffer.slice(0, chunkSize);\n buffer = buffer.slice(chunkSize);\n }\n }\n\n if (buffer.length > 0) {\n yield buffer;\n }\n } finally {\n reader.releaseLock();\n }\n}\n"],"mappings":";;;AAEA,gBAAuB,cACrB,gBACA,YAAY,kBACZ;CACA,MAAM,SAAS,eAAe,WAAW;CACzC,IAAI,SAAS,IAAI,WAAW,EAAE;AAE9B,KAAI;AACF,SAAO,MAAM;GACX,MAAM,EAAE,MAAM,UAAU,MAAM,OAAO,MAAM;AAC3C,OAAI,KAAM;GAEV,MAAM,QAAQ;GACd,MAAM,YAAY,IAAI,WAAW,OAAO,SAAS,MAAM,OAAO;AAC9D,aAAU,IAAI,OAAO;AACrB,aAAU,IAAI,OAAO,OAAO,OAAO;AACnC,YAAS;AAET,UAAO,OAAO,UAAU,WAAW;AACjC,UAAM,OAAO,MAAM,GAAG,UAAU;AAChC,aAAS,OAAO,MAAM,UAAU;;;AAIpC,MAAI,OAAO,SAAS,EAClB,OAAM;WAEA;AACR,SAAO,aAAa"}
|
package/dist/uploadChunks.d.ts
CHANGED
|
@@ -1,21 +1,14 @@
|
|
|
1
|
-
|
|
1
|
+
//#region src/uploadChunks.d.ts
|
|
2
2
|
/**
|
|
3
3
|
* @internal
|
|
4
4
|
*/
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
interface IteratorWithPromise<T> extends AsyncGenerator<T, void, unknown> {
|
|
6
|
+
whenUploaded: () => Promise<T[]>;
|
|
7
7
|
}
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
fileStream: ReadableStream;
|
|
12
|
-
fileSize: number;
|
|
13
|
-
maxSize: number;
|
|
14
|
-
chunkSizeBytes?: number;
|
|
8
|
+
interface UploadChunkEvent {
|
|
9
|
+
type: "progress";
|
|
10
|
+
progress: number;
|
|
15
11
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
20
|
-
export declare function uploadChunks(client: Client, { url, fileSize, fileStream, maxSize, chunkSizeBytes, }: UploadChunksOptions): IteratorWithPromise<UploadChunkEvent>;
|
|
21
|
-
export {};
|
|
12
|
+
//#endregion
|
|
13
|
+
export { IteratorWithPromise, UploadChunkEvent };
|
|
14
|
+
//# sourceMappingURL=uploadChunks.d.ts.map
|
package/dist/uploadChunks.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { CHUNK_SIZE_BYTES } from "./CHUNK_SIZE_BYTES.js";
|
|
2
2
|
import { streamChunker } from "./streamChunker.js";
|
|
3
3
|
import debug from "debug";
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
|
|
5
|
+
//#region src/uploadChunks.ts
|
|
6
|
+
const log = debug("ef:api:uploadChunk");
|
|
7
|
+
const uploadChunk = async (client, { url, chunkBuffer, chunkNumber, fileSize, chunkSizeBytes = CHUNK_SIZE_BYTES }) => {
|
|
6
8
|
const startByte = chunkNumber * chunkSizeBytes;
|
|
7
9
|
const endByte = startByte + chunkBuffer.length - 1;
|
|
8
10
|
log(`Uploading chunk ${chunkNumber} for ${url}`);
|
|
@@ -77,4 +79,7 @@ function uploadChunks(client, { url, fileSize, fileStream, maxSize, chunkSizeByt
|
|
|
77
79
|
};
|
|
78
80
|
return generator;
|
|
79
81
|
}
|
|
82
|
+
|
|
83
|
+
//#endregion
|
|
80
84
|
export { uploadChunks };
|
|
85
|
+
//# sourceMappingURL=uploadChunks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uploadChunks.js","names":["events: UploadChunkEvent[]"],"sources":["../src/uploadChunks.ts"],"sourcesContent":["import debug from \"debug\";\n\nimport { CHUNK_SIZE_BYTES } from \"./CHUNK_SIZE_BYTES.js\";\nimport type { Client } from \"./client.js\";\nimport { streamChunker } from \"./streamChunker.js\";\n\nconst log = debug(\"ef:api:uploadChunk\");\n\ninterface UploadChunkOptions {\n url: string;\n chunkBuffer: Uint8Array;\n chunkNumber: number;\n fileSize: number;\n chunkSizeBytes?: number;\n}\n\n/**\n * @internal\n */\nexport interface IteratorWithPromise<T>\n extends AsyncGenerator<T, void, unknown> {\n whenUploaded: () => Promise<T[]>;\n}\n\nexport const fakeCompleteUpload = (): IteratorWithPromise<UploadChunkEvent> => {\n const makeGenerator = async function* (): AsyncGenerator<\n UploadChunkEvent,\n void,\n unknown\n > {\n yield { type: \"progress\", progress: 1 };\n };\n\n const generator = makeGenerator() as IteratorWithPromise<UploadChunkEvent>;\n generator.whenUploaded = async () => {\n return [{ type: \"progress\", progress: 1 }];\n };\n return generator;\n};\n\nconst uploadChunk = async (\n client: Client,\n {\n url,\n chunkBuffer,\n chunkNumber,\n fileSize,\n chunkSizeBytes = CHUNK_SIZE_BYTES,\n }: UploadChunkOptions,\n) => {\n const startByte = chunkNumber * chunkSizeBytes;\n const endByte = startByte + chunkBuffer.length - 1;\n\n log(`Uploading chunk ${chunkNumber} for ${url}`);\n const response = await client.authenticatedFetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Range\": `bytes=${startByte}-${endByte}/${fileSize}`,\n \"Content-Type\": \"application/octet-stream\",\n },\n body: chunkBuffer,\n });\n\n if (response.ok) {\n if (response.status === 201) {\n log(`File ${url} fully uploaded`);\n return { complete: true, body: await response.json() };\n }\n if (response.status === 202) {\n log(`File ${url} chunk ${chunkNumber} uploaded`);\n return { complete: false, body: await response.json() };\n }\n }\n\n throw new Error(\n `Failed to upload chunk ${chunkNumber} for ${url} ${response.status} ${response.statusText}`,\n );\n};\n\ninterface UploadChunksOptions {\n url: string;\n fileStream: ReadableStream;\n fileSize: number;\n maxSize: number;\n chunkSizeBytes?: number;\n}\n\nexport interface UploadChunkEvent {\n type: \"progress\";\n progress: number;\n}\n\nexport function uploadChunks(\n client: Client,\n {\n url,\n fileSize,\n fileStream,\n maxSize,\n chunkSizeBytes = CHUNK_SIZE_BYTES,\n }: UploadChunksOptions,\n): IteratorWithPromise<UploadChunkEvent> {\n const makeGenerator = async function* (): AsyncGenerator<\n UploadChunkEvent,\n void,\n unknown\n > {\n if (fileSize > maxSize) {\n throw new Error(\n `File size ${fileSize} bytes exceeds limit ${maxSize} bytes`,\n );\n }\n\n log(\"Checking upload status\", url);\n const uploadStatus = await client.authenticatedFetch(url);\n\n yield { type: \"progress\", progress: 0 };\n\n if (uploadStatus.status === 200) {\n log(\"Chunk already uploaded\");\n yield { type: \"progress\", progress: 1 };\n return;\n }\n\n let chunkNumber = 0;\n let complete = false;\n for await (const chunkBuffer of streamChunker(fileStream, chunkSizeBytes)) {\n log(`Uploading chunk ${chunkNumber}`);\n ({ complete } = await uploadChunk(client, {\n url: url,\n chunkBuffer,\n chunkNumber,\n fileSize,\n chunkSizeBytes,\n }));\n chunkNumber++;\n yield {\n type: \"progress\",\n progress: Math.min(1, chunkNumber / (fileSize / chunkSizeBytes)),\n };\n }\n if (!complete) {\n throw new Error(\"Did not complete upload\");\n }\n };\n\n const generator = makeGenerator() as IteratorWithPromise<UploadChunkEvent>;\n generator.whenUploaded = async () => {\n if (fileSize > maxSize) {\n throw new Error(\n `File size ${fileSize} bytes exceeds limit ${maxSize} bytes`,\n );\n }\n const events: UploadChunkEvent[] = [];\n for await (const event of generator) {\n events.push(event);\n }\n return events;\n };\n return generator;\n}\n"],"mappings":";;;;;AAMA,MAAM,MAAM,MAAM,qBAAqB;AAkCvC,MAAM,cAAc,OAClB,QACA,EACE,KACA,aACA,aACA,UACA,iBAAiB,uBAEhB;CACH,MAAM,YAAY,cAAc;CAChC,MAAM,UAAU,YAAY,YAAY,SAAS;AAEjD,KAAI,mBAAmB,YAAY,OAAO,MAAM;CAChD,MAAM,WAAW,MAAM,OAAO,mBAAmB,KAAK;EACpD,QAAQ;EACR,SAAS;GACP,iBAAiB,SAAS,UAAU,GAAG,QAAQ,GAAG;GAClD,gBAAgB;GACjB;EACD,MAAM;EACP,CAAC;AAEF,KAAI,SAAS,IAAI;AACf,MAAI,SAAS,WAAW,KAAK;AAC3B,OAAI,QAAQ,IAAI,iBAAiB;AACjC,UAAO;IAAE,UAAU;IAAM,MAAM,MAAM,SAAS,MAAM;IAAE;;AAExD,MAAI,SAAS,WAAW,KAAK;AAC3B,OAAI,QAAQ,IAAI,SAAS,YAAY,WAAW;AAChD,UAAO;IAAE,UAAU;IAAO,MAAM,MAAM,SAAS,MAAM;IAAE;;;AAI3D,OAAM,IAAI,MACR,0BAA0B,YAAY,OAAO,IAAI,GAAG,SAAS,OAAO,GAAG,SAAS,aACjF;;AAgBH,SAAgB,aACd,QACA,EACE,KACA,UACA,YACA,SACA,iBAAiB,oBAEoB;CACvC,MAAM,gBAAgB,mBAIpB;AACA,MAAI,WAAW,QACb,OAAM,IAAI,MACR,aAAa,SAAS,uBAAuB,QAAQ,QACtD;AAGH,MAAI,0BAA0B,IAAI;EAClC,MAAM,eAAe,MAAM,OAAO,mBAAmB,IAAI;AAEzD,QAAM;GAAE,MAAM;GAAY,UAAU;GAAG;AAEvC,MAAI,aAAa,WAAW,KAAK;AAC/B,OAAI,yBAAyB;AAC7B,SAAM;IAAE,MAAM;IAAY,UAAU;IAAG;AACvC;;EAGF,IAAI,cAAc;EAClB,IAAI,WAAW;AACf,aAAW,MAAM,eAAe,cAAc,YAAY,eAAe,EAAE;AACzE,OAAI,mBAAmB,cAAc;AACrC,IAAC,CAAE,YAAa,MAAM,YAAY,QAAQ;IACnC;IACL;IACA;IACA;IACA;IACD,CAAC;AACF;AACA,SAAM;IACJ,MAAM;IACN,UAAU,KAAK,IAAI,GAAG,eAAe,WAAW,gBAAgB;IACjE;;AAEH,MAAI,CAAC,SACH,OAAM,IAAI,MAAM,0BAA0B;;CAI9C,MAAM,YAAY,eAAe;AACjC,WAAU,eAAe,YAAY;AACnC,MAAI,WAAW,QACb,OAAM,IAAI,MACR,aAAa,SAAS,uBAAuB,QAAQ,QACtD;EAEH,MAAMA,SAA6B,EAAE;AACrC,aAAW,MAAM,SAAS,UACxB,QAAO,KAAK,MAAM;AAEpB,SAAO;;AAET,QAAO"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assertTypesMatch.js","names":[],"sources":["../../src/utils/assertTypesMatch.ts"],"sourcesContent":["// Type helper that will cause a compilation error\ntype Equals<X, Y> = (<T>() => T extends X ? 1 : 2) extends <T>() => T extends Y\n ? 1\n : 2\n ? true\n : false;\n// Force error with const assertion\nexport const assertTypesMatch = <T, U>(\n value: Equals<T, U> extends true ? true : never,\n) => value;\n"],"mappings":";AAOA,MAAa,oBACX,UACG"}
|
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
import { Readable } from
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { Readable } from "node:stream";
|
|
2
|
+
|
|
3
|
+
//#region src/utils/createReadableStreamFromReadable.d.ts
|
|
4
|
+
declare const createReadableStreamFromReadable: (source: Readable & {
|
|
5
|
+
readableHighWaterMark?: number;
|
|
4
6
|
}) => ReadableStream<Uint8Array>;
|
|
7
|
+
//#endregion
|
|
8
|
+
export { createReadableStreamFromReadable };
|
|
9
|
+
//# sourceMappingURL=createReadableStreamFromReadable.d.ts.map
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { Stream } from "node:stream";
|
|
2
|
+
|
|
3
|
+
//#region src/utils/createReadableStreamFromReadable.ts
|
|
2
4
|
const createReadableStreamFromReadable = (source) => {
|
|
3
5
|
const pump = new StreamPump(source);
|
|
4
6
|
return new ReadableStream(pump, pump);
|
|
@@ -61,4 +63,7 @@ var StreamPump = class {
|
|
|
61
63
|
}
|
|
62
64
|
}
|
|
63
65
|
};
|
|
66
|
+
|
|
67
|
+
//#endregion
|
|
64
68
|
export { createReadableStreamFromReadable };
|
|
69
|
+
//# sourceMappingURL=createReadableStreamFromReadable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createReadableStreamFromReadable.js","names":["_error: any"],"sources":["../../src/utils/createReadableStreamFromReadable.ts"],"sourcesContent":["import { type Readable, Stream } from \"node:stream\";\n\nexport const createReadableStreamFromReadable = (\n source: Readable & { readableHighWaterMark?: number },\n) => {\n const pump = new StreamPump(source);\n const stream = new ReadableStream(pump, pump);\n return stream;\n};\n\nclass StreamPump {\n public highWaterMark: number;\n public accumalatedSize: number;\n private stream: Stream & {\n readableHighWaterMark?: number;\n readable?: boolean;\n resume?: () => void;\n pause?: () => void;\n destroy?: (error?: Error) => void;\n };\n private controller?: ReadableStreamController<Uint8Array>;\n\n constructor(\n stream: Stream & {\n readableHighWaterMark?: number;\n readable?: boolean;\n resume?: () => void;\n pause?: () => void;\n destroy?: (error?: Error) => void;\n },\n ) {\n this.highWaterMark =\n stream.readableHighWaterMark ||\n new Stream.Readable().readableHighWaterMark;\n this.accumalatedSize = 0;\n this.stream = stream;\n this.enqueue = this.enqueue.bind(this);\n this.error = this.error.bind(this);\n this.close = this.close.bind(this);\n }\n\n size(chunk: Uint8Array) {\n return chunk?.byteLength || 0;\n }\n\n start(controller: ReadableStreamController<Uint8Array>) {\n this.controller = controller;\n this.stream.on(\"data\", this.enqueue);\n this.stream.once(\"error\", this.error);\n this.stream.once(\"end\", this.close);\n this.stream.once(\"close\", this.close);\n }\n\n pull() {\n this.resume();\n }\n\n cancel(reason?: Error) {\n if (this.stream.destroy) {\n this.stream.destroy(reason);\n }\n\n this.stream.off(\"data\", this.enqueue);\n this.stream.off(\"error\", this.error);\n this.stream.off(\"end\", this.close);\n this.stream.off(\"close\", this.close);\n }\n\n enqueue(chunk: Uint8Array | string) {\n if (this.controller) {\n try {\n // const bytes = chunk instanceof Uint8Array ? chunk : Buffer.from(chunk);\n\n const available = (this.controller.desiredSize || 0) - chunk.length;\n this.controller.enqueue(chunk as Uint8Array);\n if (available <= 0) {\n this.pause();\n }\n } catch (_error: any) {\n this.controller.error(\n new Error(\n \"Could not create Buffer, chunk must be of type string or an instance of Buffer, ArrayBuffer, or Array or an Array-like Object\",\n ),\n );\n this.cancel();\n }\n }\n }\n\n pause() {\n if (this.stream.pause) {\n this.stream.pause();\n }\n }\n\n resume() {\n if (this.stream.readable && this.stream.resume) {\n this.stream.resume();\n }\n }\n\n close() {\n if (this.controller) {\n this.controller.close();\n delete this.controller;\n }\n }\n\n error(error: Error) {\n if (this.controller) {\n this.controller.error(error);\n delete this.controller;\n }\n }\n}\n"],"mappings":";;;AAEA,MAAa,oCACX,WACG;CACH,MAAM,OAAO,IAAI,WAAW,OAAO;AAEnC,QADe,IAAI,eAAe,MAAM,KAAK;;AAI/C,IAAM,aAAN,MAAiB;CAYf,YACE,QAOA;AACA,OAAK,gBACH,OAAO,yBACP,IAAI,OAAO,UAAU,CAAC;AACxB,OAAK,kBAAkB;AACvB,OAAK,SAAS;AACd,OAAK,UAAU,KAAK,QAAQ,KAAK,KAAK;AACtC,OAAK,QAAQ,KAAK,MAAM,KAAK,KAAK;AAClC,OAAK,QAAQ,KAAK,MAAM,KAAK,KAAK;;CAGpC,KAAK,OAAmB;AACtB,SAAO,OAAO,cAAc;;CAG9B,MAAM,YAAkD;AACtD,OAAK,aAAa;AAClB,OAAK,OAAO,GAAG,QAAQ,KAAK,QAAQ;AACpC,OAAK,OAAO,KAAK,SAAS,KAAK,MAAM;AACrC,OAAK,OAAO,KAAK,OAAO,KAAK,MAAM;AACnC,OAAK,OAAO,KAAK,SAAS,KAAK,MAAM;;CAGvC,OAAO;AACL,OAAK,QAAQ;;CAGf,OAAO,QAAgB;AACrB,MAAI,KAAK,OAAO,QACd,MAAK,OAAO,QAAQ,OAAO;AAG7B,OAAK,OAAO,IAAI,QAAQ,KAAK,QAAQ;AACrC,OAAK,OAAO,IAAI,SAAS,KAAK,MAAM;AACpC,OAAK,OAAO,IAAI,OAAO,KAAK,MAAM;AAClC,OAAK,OAAO,IAAI,SAAS,KAAK,MAAM;;CAGtC,QAAQ,OAA4B;AAClC,MAAI,KAAK,WACP,KAAI;GAGF,MAAM,aAAa,KAAK,WAAW,eAAe,KAAK,MAAM;AAC7D,QAAK,WAAW,QAAQ,MAAoB;AAC5C,OAAI,aAAa,EACf,MAAK,OAAO;WAEPA,QAAa;AACpB,QAAK,WAAW,sBACd,IAAI,MACF,gIACD,CACF;AACD,QAAK,QAAQ;;;CAKnB,QAAQ;AACN,MAAI,KAAK,OAAO,MACd,MAAK,OAAO,OAAO;;CAIvB,SAAS;AACP,MAAI,KAAK,OAAO,YAAY,KAAK,OAAO,OACtC,MAAK,OAAO,QAAQ;;CAIxB,QAAQ;AACN,MAAI,KAAK,YAAY;AACnB,QAAK,WAAW,OAAO;AACvB,UAAO,KAAK;;;CAIhB,MAAM,OAAc;AAClB,MAAI,KAAK,YAAY;AACnB,QAAK,WAAW,MAAM,MAAM;AAC5B,UAAO,KAAK"}
|
package/package.json
CHANGED
|
@@ -1,37 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@editframe/api",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.25.0-beta.0",
|
|
4
4
|
"description": "API functions for EditFrame",
|
|
5
5
|
"exports": {
|
|
6
|
-
".":
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
}
|
|
11
|
-
},
|
|
12
|
-
"./node": {
|
|
13
|
-
"import": {
|
|
14
|
-
"types": "./dist/node.d.ts",
|
|
15
|
-
"default": "./dist/node.js"
|
|
16
|
-
}
|
|
17
|
-
},
|
|
18
|
-
"./bundleRender": {
|
|
19
|
-
"import": {
|
|
20
|
-
"types": "./dist/resources/renders.bundle.d.ts",
|
|
21
|
-
"default": "./dist/resources/renders.bundle.js"
|
|
22
|
-
}
|
|
23
|
-
},
|
|
24
|
-
"./types.json": {
|
|
25
|
-
"import": {
|
|
26
|
-
"default": "./types.json"
|
|
27
|
-
}
|
|
28
|
-
}
|
|
6
|
+
".": "./dist/index.js",
|
|
7
|
+
"./node": "./dist/node.js",
|
|
8
|
+
"./resources/renders.bundle": "./dist/resources/renders.bundle.js",
|
|
9
|
+
"./package.json": "./package.json"
|
|
29
10
|
},
|
|
30
11
|
"type": "module",
|
|
31
12
|
"scripts": {
|
|
32
13
|
"typecheck": "tsc --noEmit --emitDeclarationOnly false",
|
|
33
|
-
"build": "
|
|
34
|
-
"build:watch": "
|
|
14
|
+
"build": "tsdown",
|
|
15
|
+
"build:watch": "tsdown --watch",
|
|
35
16
|
"typedoc": "typedoc --json ./types.json --plugin typedoc-plugin-zod --excludeExternals ./src && jq -c . ./types.json > ./types.tmp.json && mv ./types.tmp.json ./types.json"
|
|
36
17
|
},
|
|
37
18
|
"author": "",
|
|
@@ -41,22 +22,22 @@
|
|
|
41
22
|
"@types/mime-types": "^2.1.4",
|
|
42
23
|
"@types/node": "^20.14.13",
|
|
43
24
|
"typedoc": "^0.26.5",
|
|
44
|
-
"typescript": "^5.5.4"
|
|
45
|
-
"vite-plugin-dts": "^4.5.4"
|
|
25
|
+
"typescript": "^5.5.4"
|
|
46
26
|
},
|
|
47
27
|
"dependencies": {
|
|
48
|
-
"@editframe/assets": "0.
|
|
28
|
+
"@editframe/assets": "0.25.0-beta.0",
|
|
49
29
|
"@vitejs/plugin-react": "^4.3.4",
|
|
50
30
|
"debug": "^4.3.5",
|
|
51
31
|
"eventsource-parser": "^3.0.0",
|
|
52
|
-
"jsonwebtoken": "^9.0.2",
|
|
53
32
|
"mime": "^4.0.4",
|
|
54
33
|
"mime-types": "^2.1.35",
|
|
55
|
-
"node-fetch": "^3.3.2",
|
|
56
|
-
"rolldown-vite": "^7.1.15",
|
|
57
34
|
"tar": "^7.4.3",
|
|
35
|
+
"vite": "npm:rolldown-vite@^7.1.15",
|
|
58
36
|
"vite-plugin-singlefile": "^2.1.0",
|
|
59
37
|
"vite-tsconfig-paths": "^4.3.2",
|
|
60
38
|
"zod": "^3.23.8"
|
|
61
|
-
}
|
|
39
|
+
},
|
|
40
|
+
"main": "./dist/index.js",
|
|
41
|
+
"module": "./dist/index.js",
|
|
42
|
+
"types": "./dist/index.d.ts"
|
|
62
43
|
}
|
|
@@ -2,8 +2,8 @@ import { randomUUID } from "node:crypto";
|
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { PassThrough } from "node:stream";
|
|
4
4
|
import react from "@vitejs/plugin-react";
|
|
5
|
-
import { build } from "rolldown-vite";
|
|
6
5
|
import * as tar from "tar";
|
|
6
|
+
import { build } from "vite";
|
|
7
7
|
import { viteSingleFile } from "vite-plugin-singlefile";
|
|
8
8
|
import tsconfigPathsPlugin from "vite-tsconfig-paths";
|
|
9
9
|
import { createReadableStreamFromReadable } from "../utils/createReadableStreamFromReadable.ts";
|
package/tsdown.config.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { defineConfig } from "tsdown";
|
|
2
|
+
|
|
3
|
+
import { createTsdownConfig } from "../tsdown.config.base.ts";
|
|
4
|
+
|
|
5
|
+
export default defineConfig(
|
|
6
|
+
createTsdownConfig({
|
|
7
|
+
entry: ["src/index.ts", "src/node.ts", "src/resources/renders.bundle.ts"],
|
|
8
|
+
platform: "node",
|
|
9
|
+
}),
|
|
10
|
+
);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare let CHUNK_SIZE_BYTES: number;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
package/dist/client.test.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const webReadableFromBuffers: (...buffers: Buffer[]) => ReadableStream<any>;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
package/dist/streamChunker.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function streamChunker(readableStream: ReadableStream, chunkSize?: number): AsyncGenerator<Uint8Array, void, unknown>;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|