@editframe/api 0.37.3-beta → 0.38.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/dist/CHUNK_SIZE_BYTES.cjs +13 -0
  2. package/dist/CHUNK_SIZE_BYTES.cjs.map +1 -0
  3. package/dist/ProgressIterator.cjs +109 -0
  4. package/dist/ProgressIterator.cjs.map +1 -0
  5. package/dist/ProgressIterator.d.cts +30 -0
  6. package/dist/StreamEventSource.cjs +127 -0
  7. package/dist/StreamEventSource.cjs.map +1 -0
  8. package/dist/StreamEventSource.d.cts +65 -0
  9. package/dist/_virtual/rolldown_runtime.cjs +25 -0
  10. package/dist/client.cjs +54 -0
  11. package/dist/client.cjs.map +1 -0
  12. package/dist/client.d.cts +14 -0
  13. package/dist/index.cjs +70 -0
  14. package/dist/index.d.cts +15 -0
  15. package/dist/index.d.ts +4 -3
  16. package/dist/index.js +3 -2
  17. package/dist/node.cjs +175 -0
  18. package/dist/node.cjs.map +1 -0
  19. package/dist/node.d.cts +27 -0
  20. package/dist/node.d.ts +8 -3
  21. package/dist/node.js +64 -5
  22. package/dist/node.js.map +1 -1
  23. package/dist/resources/caption-file.cjs +74 -0
  24. package/dist/resources/caption-file.cjs.map +1 -0
  25. package/dist/resources/caption-file.d.cts +83 -0
  26. package/dist/resources/caption-file.d.ts +5 -0
  27. package/dist/resources/caption-file.js +3 -0
  28. package/dist/resources/caption-file.js.map +1 -1
  29. package/dist/resources/file.cjs +145 -0
  30. package/dist/resources/file.cjs.map +1 -0
  31. package/dist/resources/file.d.cts +91 -0
  32. package/dist/resources/file.d.ts +91 -0
  33. package/dist/resources/file.js +129 -0
  34. package/dist/resources/file.js.map +1 -0
  35. package/dist/resources/image-file.cjs +87 -0
  36. package/dist/resources/image-file.cjs.map +1 -0
  37. package/dist/resources/image-file.d.cts +123 -0
  38. package/dist/resources/image-file.d.ts +7 -0
  39. package/dist/resources/image-file.js +4 -0
  40. package/dist/resources/image-file.js.map +1 -1
  41. package/dist/resources/isobmff-file.cjs +72 -0
  42. package/dist/resources/isobmff-file.cjs.map +1 -0
  43. package/dist/resources/isobmff-file.d.cts +81 -0
  44. package/dist/resources/isobmff-file.d.ts +8 -0
  45. package/dist/resources/isobmff-file.js +5 -0
  46. package/dist/resources/isobmff-file.js.map +1 -1
  47. package/dist/resources/isobmff-track.cjs +109 -0
  48. package/dist/resources/isobmff-track.cjs.map +1 -0
  49. package/dist/resources/isobmff-track.d.cts +769 -0
  50. package/dist/resources/isobmff-track.d.ts +2 -0
  51. package/dist/resources/isobmff-track.js +2 -0
  52. package/dist/resources/isobmff-track.js.map +1 -1
  53. package/dist/resources/process-isobmff.cjs +16 -0
  54. package/dist/resources/process-isobmff.cjs.map +1 -0
  55. package/dist/resources/process-isobmff.d.cts +17 -0
  56. package/dist/resources/renders.bundle.cjs +50 -0
  57. package/dist/resources/renders.bundle.cjs.map +1 -0
  58. package/dist/resources/renders.bundle.d.cts +9 -0
  59. package/dist/resources/renders.bundle.d.ts +1 -1
  60. package/dist/resources/renders.cjs +152 -0
  61. package/dist/resources/renders.cjs.map +1 -0
  62. package/dist/resources/renders.d.cts +284 -0
  63. package/dist/resources/renders.d.ts +19 -19
  64. package/dist/resources/renders.js +1 -1
  65. package/dist/resources/transcriptions.cjs +38 -0
  66. package/dist/resources/transcriptions.cjs.map +1 -0
  67. package/dist/resources/transcriptions.d.cts +30 -0
  68. package/dist/resources/unprocessed-file.cjs +61 -0
  69. package/dist/resources/unprocessed-file.cjs.map +1 -0
  70. package/dist/resources/unprocessed-file.d.cts +51 -0
  71. package/dist/resources/unprocessed-file.d.ts +9 -0
  72. package/dist/resources/unprocessed-file.js +4 -0
  73. package/dist/resources/unprocessed-file.js.map +1 -1
  74. package/dist/resources/url-token.cjs +19 -0
  75. package/dist/resources/url-token.cjs.map +1 -0
  76. package/dist/resources/url-token.d.cts +10 -0
  77. package/dist/streamChunker.cjs +29 -0
  78. package/dist/streamChunker.cjs.map +1 -0
  79. package/dist/uploadChunks.cjs +87 -0
  80. package/dist/uploadChunks.cjs.map +1 -0
  81. package/dist/uploadChunks.d.cts +14 -0
  82. package/dist/utils/assertTypesMatch.cjs +7 -0
  83. package/dist/utils/assertTypesMatch.cjs.map +1 -0
  84. package/dist/utils/createReadableStreamFromReadable.cjs +71 -0
  85. package/dist/utils/createReadableStreamFromReadable.cjs.map +1 -0
  86. package/dist/utils/createReadableStreamFromReadable.d.cts +9 -0
  87. package/dist/utils/createReadableStreamFromReadable.d.ts +1 -1
  88. package/package.json +37 -9
  89. package/tsdown.config.ts +1 -0
@@ -760,7 +760,9 @@ interface CreateISOBMFFTrackResult {
760
760
  file_id: string;
761
761
  complete: boolean;
762
762
  }
763
+ /** @deprecated Use the unified file API from ./file.js instead */
763
764
  declare const createISOBMFFTrack: (client: Client, payload: CreateISOBMFFTrackPayload) => Promise<CreateISOBMFFTrackResult>;
765
+ /** @deprecated Use the unified file API from ./file.js instead */
764
766
  declare const uploadISOBMFFTrack: (client: Client, fileId: string, trackId: number, fileStream: ReadableStream, trackSize: number) => IteratorWithPromise<UploadChunkEvent>;
765
767
  //#endregion
766
768
  export { AudioStreamSchema, AudioTrackPayload, CreateISOBMFFTrackPayload, CreateISOBMFFTrackResult, VideoStreamSchema, VideoTrackPayload, createISOBMFFTrack, uploadISOBMFFTrack };
@@ -74,6 +74,7 @@ const VideoTrackPayload = z.object({
74
74
  assertTypesMatch(true);
75
75
  const CreateISOBMFFTrackPayload = z.discriminatedUnion("type", [AudioTrackPayload, VideoTrackPayload]);
76
76
  assertTypesMatch(true);
77
+ /** @deprecated Use the unified file API from ./file.js instead */
77
78
  const createISOBMFFTrack = async (client, payload) => {
78
79
  log("Creating isobmff track", payload);
79
80
  CreateISOBMFFTrackPayload.parse(payload);
@@ -85,6 +86,7 @@ const createISOBMFFTrack = async (client, payload) => {
85
86
  if (response.ok) return await response.json();
86
87
  throw new Error(`Failed to create isobmff track ${response.status} ${response.statusText}`);
87
88
  };
89
+ /** @deprecated Use the unified file API from ./file.js instead */
88
90
  const uploadISOBMFFTrack = (client, fileId, trackId, fileStream, trackSize) => {
89
91
  log("Uploading fragment track", fileId);
90
92
  return uploadChunks(client, {
@@ -1 +1 @@
1
- {"version":3,"file":"isobmff-track.js","names":[],"sources":["../../src/resources/isobmff-track.ts"],"sourcesContent":["import debug from \"debug\";\nimport { z } from \"zod\";\nimport type { Client } from \"../client.js\";\nimport { uploadChunks } from \"../uploadChunks.js\";\nimport { assertTypesMatch } from \"../utils/assertTypesMatch.ts\";\n\nexport const AudioStreamSchema = z.object({\n index: z.number(),\n codec_name: z.string(),\n codec_long_name: z.string(),\n codec_type: z.literal(\"audio\"),\n codec_tag_string: z.string(),\n codec_tag: z.string(),\n sample_fmt: z.string(),\n sample_rate: z.string(),\n channels: z.number(),\n channel_layout: z.string().optional(),\n bits_per_sample: z.number(),\n initial_padding: z.number().optional(),\n r_frame_rate: z.string(),\n avg_frame_rate: z.string(),\n time_base: z.string(),\n start_pts: z.number().optional(),\n start_time: z.coerce.number().optional(),\n duration_ts: z.number(),\n duration: z.coerce.number(),\n bit_rate: z.string(),\n disposition: z.record(z.unknown()),\n});\n\nexport interface AudioStreamSchema {\n /** The index of the stream in the file */\n index: number;\n /** The name of the codec */\n codec_name: string;\n /** The long name of the codec */\n codec_long_name: string;\n /** The type of the codec */\n codec_type: \"audio\";\n /** The tag string of the codec */\n codec_tag_string: string;\n /** The tag of the codec */\n codec_tag: string;\n /** The sample format */\n sample_fmt: string;\n /** The sample rate */\n sample_rate: string;\n /** The number of channels */\n channels: number;\n /** The channel layout */\n channel_layout?: string;\n /** The number of bits per sample */\n bits_per_sample: number;\n /** The initial padding */\n initial_padding?: number;\n /** The frame rate */\n r_frame_rate: string;\n /** The average frame rate */\n avg_frame_rate: string;\n /** The time base */\n time_base: string;\n /** The start presentation timestamp */\n start_pts?: number;\n /** The start time */\n start_time?: number;\n /** The duration timestamp */\n duration_ts: number;\n /** The duration */\n duration: number;\n /** The bit rate */\n bit_rate: string;\n /** The disposition record. Subject to change, not documented. */\n disposition: Record<string, unknown>;\n}\n\nassertTypesMatch<z.infer<typeof AudioStreamSchema>, AudioStreamSchema>(true);\n\nexport const VideoStreamSchema = z.object({\n index: z.number(),\n codec_name: z.string(),\n codec_long_name: z.string(),\n codec_type: z.literal(\"video\"),\n codec_tag_string: z.string(),\n codec_tag: z.string(),\n width: z.number(),\n height: z.number(),\n coded_width: z.number(),\n coded_height: z.number(),\n r_frame_rate: z.string(),\n avg_frame_rate: z.string(),\n time_base: z.string(),\n start_pts: z.number().optional(),\n start_time: z.coerce.number().optional(),\n duration_ts: z.number().optional(),\n duration: z.coerce.number().optional(),\n bit_rate: z.string().optional(),\n disposition: z.record(z.unknown()),\n});\n\nexport interface VideoStreamSchema {\n /** The index of the stream in the file */\n index: number;\n /** The name of the codec */\n codec_name: string;\n /** The long name of the codec */\n codec_long_name: string;\n /** The type of the codec */\n codec_type: \"video\";\n /** The tag string of the codec */\n codec_tag_string: string;\n /** The tag of the codec */\n codec_tag: string;\n /** The width */\n width: number;\n /** The height */\n height: number;\n /** The coded width */\n coded_width: number;\n /** The coded height */\n coded_height: number;\n /** The frame rate */\n r_frame_rate: string;\n /** The average frame rate */\n avg_frame_rate: string;\n /** The time base */\n time_base: string;\n /** The start presentation timestamp */\n start_pts?: number;\n /** The start time */\n start_time?: number;\n /** The duration timestamp */\n duration_ts?: number;\n /** The duration */\n duration?: number;\n /** The bit rate */\n bit_rate?: string;\n /** The disposition record. Subject to change, not documented. */\n disposition: Record<string, unknown>;\n}\n\nassertTypesMatch<z.infer<typeof VideoStreamSchema>, VideoStreamSchema>(true);\n\nconst log = debug(\"ef:api:isobmff-track\");\n\nconst MAX_TRACK_SIZE = 1024 * 1024 * 1024; // 1GB\n\nexport const AudioTrackPayload = z.object({\n file_id: z.string(),\n track_id: z.number().int(),\n type: z.literal(\"audio\"),\n probe_info: AudioStreamSchema,\n duration_ms: z.number().int(),\n codec_name: z.string(),\n byte_size: z.number().int().max(MAX_TRACK_SIZE),\n});\n\nexport interface AudioTrackPayload {\n file_id: string;\n track_id: number;\n type: \"audio\";\n probe_info: AudioStreamSchema;\n duration_ms: number;\n codec_name: string;\n byte_size: number;\n}\n\n// These will actually error if types don't match\nassertTypesMatch<z.infer<typeof AudioTrackPayload>, AudioTrackPayload>(true);\n\nexport const VideoTrackPayload = z.object({\n file_id: z.string(),\n track_id: z.number().int(),\n type: z.literal(\"video\"),\n probe_info: VideoStreamSchema,\n duration_ms: z.number().int(),\n codec_name: z.string(),\n byte_size: z.number().int().max(MAX_TRACK_SIZE),\n});\n\nexport interface VideoTrackPayload {\n file_id: string;\n track_id: number;\n type: \"video\";\n probe_info: VideoStreamSchema;\n duration_ms: number;\n codec_name: string;\n byte_size: number;\n}\n\nassertTypesMatch<z.infer<typeof VideoTrackPayload>, VideoTrackPayload>(true);\n\nexport const CreateISOBMFFTrackPayload = z.discriminatedUnion(\"type\", [\n AudioTrackPayload,\n VideoTrackPayload,\n]);\n\nexport type CreateISOBMFFTrackPayload = VideoTrackPayload | AudioTrackPayload;\n\nassertTypesMatch<\n z.infer<typeof CreateISOBMFFTrackPayload>,\n CreateISOBMFFTrackPayload\n>(true);\n\nexport interface CreateISOBMFFTrackResult {\n next_byte: number;\n byte_size: number;\n track_id: number;\n file_id: string;\n complete: boolean;\n}\n\nexport const createISOBMFFTrack = async (\n client: Client,\n payload: CreateISOBMFFTrackPayload,\n) => {\n log(\"Creating isobmff track\", payload);\n CreateISOBMFFTrackPayload.parse(payload);\n const response = await client.authenticatedFetch(\"/api/v1/isobmff_tracks\", {\n method: \"POST\",\n body: JSON.stringify(payload),\n });\n\n log(\"ISOBMFF track created\", response);\n if (response.ok) {\n return (await response.json()) as CreateISOBMFFTrackResult;\n }\n\n throw new Error(\n `Failed to create isobmff track ${response.status} ${response.statusText}`,\n );\n};\n\nexport const uploadISOBMFFTrack = (\n client: Client,\n fileId: string,\n trackId: number,\n fileStream: ReadableStream,\n trackSize: number,\n) => {\n log(\"Uploading fragment track\", fileId);\n\n return uploadChunks(client, {\n url: `/api/v1/isobmff_tracks/${fileId}/${trackId}/upload`,\n fileStream,\n fileSize: trackSize,\n maxSize: MAX_TRACK_SIZE,\n });\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"isobmff-track.js","names":[],"sources":["../../src/resources/isobmff-track.ts"],"sourcesContent":["import debug from \"debug\";\nimport { z } from \"zod\";\nimport type { Client } from \"../client.js\";\nimport { uploadChunks } from \"../uploadChunks.js\";\nimport { assertTypesMatch } from \"../utils/assertTypesMatch.ts\";\n\nexport const AudioStreamSchema = z.object({\n index: z.number(),\n codec_name: z.string(),\n codec_long_name: z.string(),\n codec_type: z.literal(\"audio\"),\n codec_tag_string: z.string(),\n codec_tag: z.string(),\n sample_fmt: z.string(),\n sample_rate: z.string(),\n channels: z.number(),\n channel_layout: z.string().optional(),\n bits_per_sample: z.number(),\n initial_padding: z.number().optional(),\n r_frame_rate: z.string(),\n avg_frame_rate: z.string(),\n time_base: z.string(),\n start_pts: z.number().optional(),\n start_time: z.coerce.number().optional(),\n duration_ts: z.number(),\n duration: z.coerce.number(),\n bit_rate: z.string(),\n disposition: z.record(z.unknown()),\n});\n\nexport interface AudioStreamSchema {\n /** The index of the stream in the file */\n index: number;\n /** The name of the codec */\n codec_name: string;\n /** The long name of the codec */\n codec_long_name: string;\n /** The type of the codec */\n codec_type: \"audio\";\n /** The tag string of the codec */\n codec_tag_string: string;\n /** The tag of the codec */\n codec_tag: string;\n /** The sample format */\n sample_fmt: string;\n /** The sample rate */\n sample_rate: string;\n /** The number of channels */\n channels: number;\n /** The channel layout */\n channel_layout?: string;\n /** The number of bits per sample */\n bits_per_sample: number;\n /** The initial padding */\n initial_padding?: number;\n /** The frame rate */\n r_frame_rate: string;\n /** The average frame rate */\n avg_frame_rate: string;\n /** The time base */\n time_base: string;\n /** The start presentation timestamp */\n start_pts?: number;\n /** The start time */\n start_time?: number;\n /** The duration timestamp */\n duration_ts: number;\n /** The duration */\n duration: number;\n /** The bit rate */\n bit_rate: string;\n /** The disposition record. Subject to change, not documented. */\n disposition: Record<string, unknown>;\n}\n\nassertTypesMatch<z.infer<typeof AudioStreamSchema>, AudioStreamSchema>(true);\n\nexport const VideoStreamSchema = z.object({\n index: z.number(),\n codec_name: z.string(),\n codec_long_name: z.string(),\n codec_type: z.literal(\"video\"),\n codec_tag_string: z.string(),\n codec_tag: z.string(),\n width: z.number(),\n height: z.number(),\n coded_width: z.number(),\n coded_height: z.number(),\n r_frame_rate: z.string(),\n avg_frame_rate: z.string(),\n time_base: z.string(),\n start_pts: z.number().optional(),\n start_time: z.coerce.number().optional(),\n duration_ts: z.number().optional(),\n duration: z.coerce.number().optional(),\n bit_rate: z.string().optional(),\n disposition: z.record(z.unknown()),\n});\n\nexport interface VideoStreamSchema {\n /** The index of the stream in the file */\n index: number;\n /** The name of the codec */\n codec_name: string;\n /** The long name of the codec */\n codec_long_name: string;\n /** The type of the codec */\n codec_type: \"video\";\n /** The tag string of the codec */\n codec_tag_string: string;\n /** The tag of the codec */\n codec_tag: string;\n /** The width */\n width: number;\n /** The height */\n height: number;\n /** The coded width */\n coded_width: number;\n /** The coded height */\n coded_height: number;\n /** The frame rate */\n r_frame_rate: string;\n /** The average frame rate */\n avg_frame_rate: string;\n /** The time base */\n time_base: string;\n /** The start presentation timestamp */\n start_pts?: number;\n /** The start time */\n start_time?: number;\n /** The duration timestamp */\n duration_ts?: number;\n /** The duration */\n duration?: number;\n /** The bit rate */\n bit_rate?: string;\n /** The disposition record. Subject to change, not documented. */\n disposition: Record<string, unknown>;\n}\n\nassertTypesMatch<z.infer<typeof VideoStreamSchema>, VideoStreamSchema>(true);\n\nconst log = debug(\"ef:api:isobmff-track\");\n\nconst MAX_TRACK_SIZE = 1024 * 1024 * 1024; // 1GB\n\nexport const AudioTrackPayload = z.object({\n file_id: z.string(),\n track_id: z.number().int(),\n type: z.literal(\"audio\"),\n probe_info: AudioStreamSchema,\n duration_ms: z.number().int(),\n codec_name: z.string(),\n byte_size: z.number().int().max(MAX_TRACK_SIZE),\n});\n\nexport interface AudioTrackPayload {\n file_id: string;\n track_id: number;\n type: \"audio\";\n probe_info: AudioStreamSchema;\n duration_ms: number;\n codec_name: string;\n byte_size: number;\n}\n\n// These will actually error if types don't match\nassertTypesMatch<z.infer<typeof AudioTrackPayload>, AudioTrackPayload>(true);\n\nexport const VideoTrackPayload = z.object({\n file_id: z.string(),\n track_id: z.number().int(),\n type: z.literal(\"video\"),\n probe_info: VideoStreamSchema,\n duration_ms: z.number().int(),\n codec_name: z.string(),\n byte_size: z.number().int().max(MAX_TRACK_SIZE),\n});\n\nexport interface VideoTrackPayload {\n file_id: string;\n track_id: number;\n type: \"video\";\n probe_info: VideoStreamSchema;\n duration_ms: number;\n codec_name: string;\n byte_size: number;\n}\n\nassertTypesMatch<z.infer<typeof VideoTrackPayload>, VideoTrackPayload>(true);\n\nexport const CreateISOBMFFTrackPayload = z.discriminatedUnion(\"type\", [\n AudioTrackPayload,\n VideoTrackPayload,\n]);\n\nexport type CreateISOBMFFTrackPayload = VideoTrackPayload | AudioTrackPayload;\n\nassertTypesMatch<\n z.infer<typeof CreateISOBMFFTrackPayload>,\n CreateISOBMFFTrackPayload\n>(true);\n\nexport interface CreateISOBMFFTrackResult {\n next_byte: number;\n byte_size: number;\n track_id: number;\n file_id: string;\n complete: boolean;\n}\n\n/** @deprecated Use the unified file API from ./file.js instead */\nexport const createISOBMFFTrack = async (\n client: Client,\n payload: CreateISOBMFFTrackPayload,\n) => {\n log(\"Creating isobmff track\", payload);\n CreateISOBMFFTrackPayload.parse(payload);\n const response = await client.authenticatedFetch(\"/api/v1/isobmff_tracks\", {\n method: \"POST\",\n body: JSON.stringify(payload),\n });\n\n log(\"ISOBMFF track created\", response);\n if (response.ok) {\n return (await response.json()) as CreateISOBMFFTrackResult;\n }\n\n throw new Error(\n `Failed to create isobmff track ${response.status} ${response.statusText}`,\n );\n};\n\n/** @deprecated Use the unified file API from ./file.js instead */\nexport const uploadISOBMFFTrack = (\n client: Client,\n fileId: string,\n trackId: number,\n fileStream: ReadableStream,\n trackSize: number,\n) => {\n log(\"Uploading fragment track\", fileId);\n\n return uploadChunks(client, {\n url: `/api/v1/isobmff_tracks/${fileId}/${trackId}/upload`,\n fileStream,\n fileSize: trackSize,\n maxSize: MAX_TRACK_SIZE,\n });\n};\n"],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ const require_ProgressIterator = require('../ProgressIterator.cjs');
2
+
3
+ //#region src/resources/process-isobmff.ts
4
+ const getIsobmffProcessProgress = async (client, id) => {
5
+ return new require_ProgressIterator.ProgressIterator(await client.authenticatedEventSource(`/api/v1/process_isobmff/${id}/progress`));
6
+ };
7
+ const getIsobmffProcessInfo = async (client, id) => {
8
+ const response = await client.authenticatedFetch(`/api/v1/process_isobmff/${id}`);
9
+ if (response.ok) return await response.json();
10
+ throw new Error(`Failed to get isobmff process info ${response.status} ${response.statusText}`);
11
+ };
12
+
13
+ //#endregion
14
+ exports.getIsobmffProcessInfo = getIsobmffProcessInfo;
15
+ exports.getIsobmffProcessProgress = getIsobmffProcessProgress;
16
+ //# sourceMappingURL=process-isobmff.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-isobmff.cjs","names":["ProgressIterator"],"sources":["../../src/resources/process-isobmff.ts"],"sourcesContent":["import type { Client } from \"../client.js\";\nimport { ProgressIterator } from \"../ProgressIterator.js\";\n\nexport interface IsobmffProcessInfoResult {\n id: string;\n created_at: string;\n completed_at: string | null;\n failed_at: string | null;\n isobmff_file_id: string | null;\n unprocessed_file_id: string | null;\n}\n\nexport const getIsobmffProcessProgress = async (client: Client, id: string) => {\n const eventSource = await client.authenticatedEventSource(\n `/api/v1/process_isobmff/${id}/progress`,\n );\n\n return new ProgressIterator(eventSource);\n};\n\nexport const getIsobmffProcessInfo = async (client: Client, id: string) => {\n const response = await client.authenticatedFetch(\n `/api/v1/process_isobmff/${id}`,\n );\n\n if (response.ok) {\n return (await response.json()) as IsobmffProcessInfoResult;\n }\n\n throw new Error(\n `Failed to get isobmff process info ${response.status} ${response.statusText}`,\n );\n};\n"],"mappings":";;;AAYA,MAAa,4BAA4B,OAAO,QAAgB,OAAe;AAK7E,QAAO,IAAIA,0CAJS,MAAM,OAAO,yBAC/B,2BAA2B,GAAG,WAC/B,CAEuC;;AAG1C,MAAa,wBAAwB,OAAO,QAAgB,OAAe;CACzE,MAAM,WAAW,MAAM,OAAO,mBAC5B,2BAA2B,KAC5B;AAED,KAAI,SAAS,GACX,QAAQ,MAAM,SAAS,MAAM;AAG/B,OAAM,IAAI,MACR,sCAAsC,SAAS,OAAO,GAAG,SAAS,aACnE"}
@@ -0,0 +1,17 @@
1
+ import { Client } from "../client.cjs";
2
+ import { ProgressIterator } from "../ProgressIterator.cjs";
3
+
4
+ //#region src/resources/process-isobmff.d.ts
5
+ interface IsobmffProcessInfoResult {
6
+ id: string;
7
+ created_at: string;
8
+ completed_at: string | null;
9
+ failed_at: string | null;
10
+ isobmff_file_id: string | null;
11
+ unprocessed_file_id: string | null;
12
+ }
13
+ declare const getIsobmffProcessProgress: (client: Client, id: string) => Promise<ProgressIterator>;
14
+ declare const getIsobmffProcessInfo: (client: Client, id: string) => Promise<IsobmffProcessInfoResult>;
15
+ //#endregion
16
+ export { IsobmffProcessInfoResult, getIsobmffProcessInfo, getIsobmffProcessProgress };
17
+ //# sourceMappingURL=process-isobmff.d.cts.map
@@ -0,0 +1,50 @@
1
+ const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
2
+ const require_createReadableStreamFromReadable = require('../utils/createReadableStreamFromReadable.cjs');
3
+ let node_path = require("node:path");
4
+ node_path = require_rolldown_runtime.__toESM(node_path);
5
+ let node_stream = require("node:stream");
6
+ node_stream = require_rolldown_runtime.__toESM(node_stream);
7
+ let node_crypto = require("node:crypto");
8
+ node_crypto = require_rolldown_runtime.__toESM(node_crypto);
9
+ let __vitejs_plugin_react = require("@vitejs/plugin-react");
10
+ __vitejs_plugin_react = require_rolldown_runtime.__toESM(__vitejs_plugin_react);
11
+ let tar = require("tar");
12
+ tar = require_rolldown_runtime.__toESM(tar);
13
+ let vite = require("vite");
14
+ vite = require_rolldown_runtime.__toESM(vite);
15
+ let vite_plugin_singlefile = require("vite-plugin-singlefile");
16
+ vite_plugin_singlefile = require_rolldown_runtime.__toESM(vite_plugin_singlefile);
17
+ let vite_tsconfig_paths = require("vite-tsconfig-paths");
18
+ vite_tsconfig_paths = require_rolldown_runtime.__toESM(vite_tsconfig_paths);
19
+
20
+ //#region src/resources/renders.bundle.ts
21
+ const bundleRender = async (options) => {
22
+ const outDir = node_path.default.join(process.cwd(), "renders", (0, node_crypto.randomUUID)());
23
+ await (0, vite.build)({
24
+ root: options.root,
25
+ define: { RENDER_DATA: JSON.stringify(options.renderData) },
26
+ build: {
27
+ outDir,
28
+ rollupOptions: { input: node_path.default.resolve(options.root, "index.html") }
29
+ },
30
+ plugins: [
31
+ (0, vite_tsconfig_paths.default)(),
32
+ (0, __vitejs_plugin_react.default)({
33
+ include: "**/*.{jsx,js,tsx,ts}",
34
+ jsxRuntime: "automatic"
35
+ }),
36
+ (0, vite_plugin_singlefile.viteSingleFile)()
37
+ ]
38
+ });
39
+ const tarStream = tar.create({
40
+ gzip: true,
41
+ cwd: outDir
42
+ }, ["."]);
43
+ const passthrough = new node_stream.PassThrough();
44
+ tarStream.pipe(passthrough);
45
+ return require_createReadableStreamFromReadable.createReadableStreamFromReadable(passthrough);
46
+ };
47
+
48
+ //#endregion
49
+ exports.bundleRender = bundleRender;
50
+ //# sourceMappingURL=renders.bundle.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renders.bundle.cjs","names":["path","PassThrough","createReadableStreamFromReadable"],"sources":["../../src/resources/renders.bundle.ts"],"sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport path from \"node:path\";\nimport { PassThrough } from \"node:stream\";\nimport react from \"@vitejs/plugin-react\";\nimport * as tar from \"tar\";\nimport { build } from \"vite\";\nimport { viteSingleFile } from \"vite-plugin-singlefile\";\nimport tsconfigPathsPlugin from \"vite-tsconfig-paths\";\nimport { createReadableStreamFromReadable } from \"../utils/createReadableStreamFromReadable.ts\";\n\ninterface BundlerOptions {\n root: string;\n renderData: any;\n}\n\nexport const bundleRender = async (options: BundlerOptions) => {\n const outDir = path.join(process.cwd(), \"renders\", randomUUID());\n\n await build({\n root: options.root,\n define: {\n RENDER_DATA: JSON.stringify(options.renderData),\n },\n build: {\n outDir,\n rollupOptions: {\n input: path.resolve(options.root, \"index.html\"),\n },\n },\n plugins: [\n tsconfigPathsPlugin(),\n react({\n include: \"**/*.{jsx,js,tsx,ts}\",\n jsxRuntime: \"automatic\",\n }),\n viteSingleFile(),\n ],\n });\n\n const tarStream = tar.create(\n {\n gzip: true,\n cwd: outDir,\n },\n [\".\"],\n );\n\n const passthrough = new PassThrough();\n tarStream.pipe(passthrough);\n const tarReadStream = createReadableStreamFromReadable(passthrough);\n\n return tarReadStream;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAeA,MAAa,eAAe,OAAO,YAA4B;CAC7D,MAAM,SAASA,kBAAK,KAAK,QAAQ,KAAK,EAAE,wCAAuB,CAAC;AAEhE,uBAAY;EACV,MAAM,QAAQ;EACd,QAAQ,EACN,aAAa,KAAK,UAAU,QAAQ,WAAW,EAChD;EACD,OAAO;GACL;GACA,eAAe,EACb,OAAOA,kBAAK,QAAQ,QAAQ,MAAM,aAAa,EAChD;GACF;EACD,SAAS;qCACc;sCACf;IACJ,SAAS;IACT,YAAY;IACb,CAAC;+CACc;GACjB;EACF,CAAC;CAEF,MAAM,YAAY,IAAI,OACpB;EACE,MAAM;EACN,KAAK;EACN,EACD,CAAC,IAAI,CACN;CAED,MAAM,cAAc,IAAIC,yBAAa;AACrC,WAAU,KAAK,YAAY;AAG3B,QAFsBC,0EAAiC,YAAY"}
@@ -0,0 +1,9 @@
1
+ //#region src/resources/renders.bundle.d.ts
2
+ interface BundlerOptions {
3
+ root: string;
4
+ renderData: any;
5
+ }
6
+ declare const bundleRender: (options: BundlerOptions) => Promise<ReadableStream<Uint8Array<ArrayBufferLike>>>;
7
+ //#endregion
8
+ export { bundleRender };
9
+ //# sourceMappingURL=renders.bundle.d.cts.map
@@ -3,7 +3,7 @@ interface BundlerOptions {
3
3
  root: string;
4
4
  renderData: any;
5
5
  }
6
- declare const bundleRender: (options: BundlerOptions) => Promise<ReadableStream<Uint8Array>>;
6
+ declare const bundleRender: (options: BundlerOptions) => Promise<ReadableStream<Uint8Array<ArrayBufferLike>>>;
7
7
  //#endregion
8
8
  export { bundleRender };
9
9
  //# sourceMappingURL=renders.bundle.d.ts.map
@@ -0,0 +1,152 @@
1
+ const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
2
+ const require_ProgressIterator = require('../ProgressIterator.cjs');
3
+ const require_assertTypesMatch = require('../utils/assertTypesMatch.cjs');
4
+ let debug = require("debug");
5
+ debug = require_rolldown_runtime.__toESM(debug);
6
+ let zod = require("zod");
7
+ zod = require_rolldown_runtime.__toESM(zod);
8
+
9
+ //#region src/resources/renders.ts
10
+ const log = (0, debug.default)("ef:api:renders");
11
+ const H264Configuration = zod.z.object({ codec: zod.z.literal("h264") });
12
+ const AACConfiguration = zod.z.object({ codec: zod.z.literal("aac") });
13
+ const MP4Configuration = zod.z.object({
14
+ container: zod.z.literal("mp4"),
15
+ video: H264Configuration,
16
+ audio: AACConfiguration
17
+ });
18
+ const JpegConfiguration = zod.z.object({
19
+ container: zod.z.literal("jpeg"),
20
+ quality: zod.z.number().int().min(1).max(100).default(80).optional()
21
+ });
22
+ const PngConfiguration = zod.z.object({
23
+ container: zod.z.literal("png"),
24
+ compression: zod.z.number().int().min(1).max(100).default(80).optional(),
25
+ transparency: zod.z.boolean().default(false).optional()
26
+ });
27
+ const WebpConfiguration = zod.z.object({
28
+ container: zod.z.literal("webp"),
29
+ quality: zod.z.number().int().min(1).max(100).default(80).optional(),
30
+ compression: zod.z.number().int().min(0).max(6).default(4).optional(),
31
+ transparency: zod.z.boolean().default(false).optional()
32
+ });
33
+ const RenderOutputConfiguration = zod.z.discriminatedUnion("container", [
34
+ MP4Configuration,
35
+ JpegConfiguration,
36
+ PngConfiguration,
37
+ WebpConfiguration
38
+ ]);
39
+ const CreateRenderPayload = zod.z.object({
40
+ md5: zod.z.string().optional(),
41
+ fps: zod.z.number().int().min(1).max(120).default(30).optional(),
42
+ width: zod.z.number().int().min(2).optional(),
43
+ height: zod.z.number().int().min(2).optional(),
44
+ work_slice_ms: zod.z.number().int().min(1e3).max(1e4).default(4e3).optional(),
45
+ html: zod.z.string().optional(),
46
+ metadata: zod.z.record(zod.z.string(), zod.z.string()).optional(),
47
+ duration_ms: zod.z.number().int().optional(),
48
+ strategy: zod.z.enum(["v1"]).default("v1").optional(),
49
+ output: RenderOutputConfiguration.default({
50
+ container: "mp4",
51
+ video: { codec: "h264" },
52
+ audio: { codec: "aac" }
53
+ }).optional()
54
+ });
55
+ const CreateRenderPayloadWithOutput = CreateRenderPayload.extend({ output: RenderOutputConfiguration });
56
+ var OutputConfiguration = class OutputConfiguration {
57
+ static parse(input) {
58
+ return new OutputConfiguration(RenderOutputConfiguration.parse(input ?? {
59
+ container: "mp4",
60
+ video: { codec: "h264" },
61
+ audio: { codec: "aac" }
62
+ }));
63
+ }
64
+ constructor(output) {
65
+ this.output = output;
66
+ }
67
+ get isStill() {
68
+ return this.output.container === "jpeg" || this.output.container === "png" || this.output.container === "webp";
69
+ }
70
+ get isVideo() {
71
+ return this.output.container === "mp4";
72
+ }
73
+ get fileExtension() {
74
+ return this.output.container;
75
+ }
76
+ get contentType() {
77
+ if (this.isStill) return `image/${this.fileExtension}`;
78
+ return `video/${this.fileExtension}`;
79
+ }
80
+ get container() {
81
+ return this.output.container;
82
+ }
83
+ get jpegConfig() {
84
+ return this.output.container === "jpeg" ? this.output : null;
85
+ }
86
+ get pngConfig() {
87
+ return this.output.container === "png" ? this.output : null;
88
+ }
89
+ get webpConfig() {
90
+ return this.output.container === "webp" ? this.output : null;
91
+ }
92
+ get mp4Config() {
93
+ return this.output.container === "mp4" ? this.output : null;
94
+ }
95
+ };
96
+ require_assertTypesMatch.assertTypesMatch(true);
97
+ const createRender = async (client, payload) => {
98
+ log("Creating render", payload);
99
+ payload.strategy ??= "v1";
100
+ payload.work_slice_ms ??= 4e3;
101
+ payload.output ??= {
102
+ container: "mp4",
103
+ video: { codec: "h264" },
104
+ audio: { codec: "aac" }
105
+ };
106
+ const response = await client.authenticatedFetch("/api/v1/renders", {
107
+ method: "POST",
108
+ body: JSON.stringify(payload)
109
+ });
110
+ log("Render created", response);
111
+ if (response.ok) return await response.json();
112
+ throw new Error(`Failed to create render ${response.status} ${response.statusText} ${await response.text()}`);
113
+ };
114
+ const uploadRender = async (client, renderId, fileStream) => {
115
+ log("Uploading render", renderId);
116
+ const response = await client.authenticatedFetch(`/api/v1/renders/${renderId}/upload`, {
117
+ method: "POST",
118
+ body: fileStream,
119
+ duplex: "half"
120
+ });
121
+ if (response.ok) return response.json();
122
+ throw new Error(`Failed to upload render ${response.status} ${response.statusText}`);
123
+ };
124
+ const getRenderInfo = async (client, id) => {
125
+ return (await client.authenticatedFetch(`/api/v1/renders/${id}`)).json();
126
+ };
127
+ const lookupRenderByMd5 = async (client, md5) => {
128
+ const response = await client.authenticatedFetch(`/api/v1/renders/md5/${md5}`, { method: "GET" });
129
+ if (response.ok) return await response.json();
130
+ if (response.status === 404) return null;
131
+ throw new Error(`Failed to lookup render by md5 ${md5} ${response.status} ${response.statusText}`);
132
+ };
133
+ const getRenderProgress = async (client, id) => {
134
+ return new require_ProgressIterator.CompletionIterator(await client.authenticatedEventSource(`/api/v1/renders/${id}/progress`));
135
+ };
136
+ const downloadRender = async (client, id) => {
137
+ const response = await client.authenticatedFetch(`/api/v1/renders/${id}.mp4`);
138
+ if (response.ok) return response;
139
+ throw new Error(`Failed to download render ${id} ${response.status} ${response.statusText}`);
140
+ };
141
+
142
+ //#endregion
143
+ exports.CreateRenderPayload = CreateRenderPayload;
144
+ exports.OutputConfiguration = OutputConfiguration;
145
+ exports.RenderOutputConfiguration = RenderOutputConfiguration;
146
+ exports.createRender = createRender;
147
+ exports.downloadRender = downloadRender;
148
+ exports.getRenderInfo = getRenderInfo;
149
+ exports.getRenderProgress = getRenderProgress;
150
+ exports.lookupRenderByMd5 = lookupRenderByMd5;
151
+ exports.uploadRender = uploadRender;
152
+ //# sourceMappingURL=renders.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renders.cjs","names":["z","output: RenderOutputConfiguration","assertTypesMatch","CompletionIterator"],"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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"}
@@ -0,0 +1,284 @@
1
+ import { Client } from "../client.cjs";
2
+ import { CompletionIterator } from "../ProgressIterator.cjs";
3
+ import { z } from "zod";
4
+
5
+ //#region src/resources/renders.d.ts
6
+ declare const RenderOutputConfiguration: z.ZodDiscriminatedUnion<"container", [z.ZodObject<{
7
+ container: z.ZodLiteral<"mp4">;
8
+ video: z.ZodObject<{
9
+ codec: z.ZodLiteral<"h264">;
10
+ }, "strip", z.ZodTypeAny, {
11
+ codec: "h264";
12
+ }, {
13
+ codec: "h264";
14
+ }>;
15
+ audio: z.ZodObject<{
16
+ codec: z.ZodLiteral<"aac">;
17
+ }, "strip", z.ZodTypeAny, {
18
+ codec: "aac";
19
+ }, {
20
+ codec: "aac";
21
+ }>;
22
+ }, "strip", z.ZodTypeAny, {
23
+ video: {
24
+ codec: "h264";
25
+ };
26
+ audio: {
27
+ codec: "aac";
28
+ };
29
+ container: "mp4";
30
+ }, {
31
+ video: {
32
+ codec: "h264";
33
+ };
34
+ audio: {
35
+ codec: "aac";
36
+ };
37
+ container: "mp4";
38
+ }>, z.ZodObject<{
39
+ container: z.ZodLiteral<"jpeg">;
40
+ quality: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
41
+ }, "strip", z.ZodTypeAny, {
42
+ container: "jpeg";
43
+ quality?: number | undefined;
44
+ }, {
45
+ container: "jpeg";
46
+ quality?: number | undefined;
47
+ }>, z.ZodObject<{
48
+ container: z.ZodLiteral<"png">;
49
+ compression: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
50
+ transparency: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
51
+ }, "strip", z.ZodTypeAny, {
52
+ container: "png";
53
+ compression?: number | undefined;
54
+ transparency?: boolean | undefined;
55
+ }, {
56
+ container: "png";
57
+ compression?: number | undefined;
58
+ transparency?: boolean | undefined;
59
+ }>, z.ZodObject<{
60
+ container: z.ZodLiteral<"webp">;
61
+ quality: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
62
+ compression: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
63
+ transparency: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
64
+ }, "strip", z.ZodTypeAny, {
65
+ container: "webp";
66
+ quality?: number | undefined;
67
+ compression?: number | undefined;
68
+ transparency?: boolean | undefined;
69
+ }, {
70
+ container: "webp";
71
+ quality?: number | undefined;
72
+ compression?: number | undefined;
73
+ transparency?: boolean | undefined;
74
+ }>]>;
75
+ type RenderOutputConfiguration = z.infer<typeof RenderOutputConfiguration>;
76
+ declare const CreateRenderPayload: z.ZodObject<{
77
+ md5: z.ZodOptional<z.ZodString>;
78
+ fps: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
79
+ width: z.ZodOptional<z.ZodNumber>;
80
+ height: z.ZodOptional<z.ZodNumber>;
81
+ work_slice_ms: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
82
+ html: z.ZodOptional<z.ZodString>;
83
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
84
+ duration_ms: z.ZodOptional<z.ZodNumber>;
85
+ strategy: z.ZodOptional<z.ZodDefault<z.ZodEnum<["v1"]>>>;
86
+ output: z.ZodOptional<z.ZodDefault<z.ZodDiscriminatedUnion<"container", [z.ZodObject<{
87
+ container: z.ZodLiteral<"mp4">;
88
+ video: z.ZodObject<{
89
+ codec: z.ZodLiteral<"h264">;
90
+ }, "strip", z.ZodTypeAny, {
91
+ codec: "h264";
92
+ }, {
93
+ codec: "h264";
94
+ }>;
95
+ audio: z.ZodObject<{
96
+ codec: z.ZodLiteral<"aac">;
97
+ }, "strip", z.ZodTypeAny, {
98
+ codec: "aac";
99
+ }, {
100
+ codec: "aac";
101
+ }>;
102
+ }, "strip", z.ZodTypeAny, {
103
+ video: {
104
+ codec: "h264";
105
+ };
106
+ audio: {
107
+ codec: "aac";
108
+ };
109
+ container: "mp4";
110
+ }, {
111
+ video: {
112
+ codec: "h264";
113
+ };
114
+ audio: {
115
+ codec: "aac";
116
+ };
117
+ container: "mp4";
118
+ }>, z.ZodObject<{
119
+ container: z.ZodLiteral<"jpeg">;
120
+ quality: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
121
+ }, "strip", z.ZodTypeAny, {
122
+ container: "jpeg";
123
+ quality?: number | undefined;
124
+ }, {
125
+ container: "jpeg";
126
+ quality?: number | undefined;
127
+ }>, z.ZodObject<{
128
+ container: z.ZodLiteral<"png">;
129
+ compression: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
130
+ transparency: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
131
+ }, "strip", z.ZodTypeAny, {
132
+ container: "png";
133
+ compression?: number | undefined;
134
+ transparency?: boolean | undefined;
135
+ }, {
136
+ container: "png";
137
+ compression?: number | undefined;
138
+ transparency?: boolean | undefined;
139
+ }>, z.ZodObject<{
140
+ container: z.ZodLiteral<"webp">;
141
+ quality: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
142
+ compression: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
143
+ transparency: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
144
+ }, "strip", z.ZodTypeAny, {
145
+ container: "webp";
146
+ quality?: number | undefined;
147
+ compression?: number | undefined;
148
+ transparency?: boolean | undefined;
149
+ }, {
150
+ container: "webp";
151
+ quality?: number | undefined;
152
+ compression?: number | undefined;
153
+ transparency?: boolean | undefined;
154
+ }>]>>>;
155
+ }, "strip", z.ZodTypeAny, {
156
+ md5?: string | undefined;
157
+ height?: number | undefined;
158
+ width?: number | undefined;
159
+ duration_ms?: number | undefined;
160
+ fps?: number | undefined;
161
+ work_slice_ms?: number | undefined;
162
+ html?: string | undefined;
163
+ metadata?: Record<string, string> | undefined;
164
+ strategy?: "v1" | undefined;
165
+ output?: {
166
+ video: {
167
+ codec: "h264";
168
+ };
169
+ audio: {
170
+ codec: "aac";
171
+ };
172
+ container: "mp4";
173
+ } | {
174
+ container: "jpeg";
175
+ quality?: number | undefined;
176
+ } | {
177
+ container: "png";
178
+ compression?: number | undefined;
179
+ transparency?: boolean | undefined;
180
+ } | {
181
+ container: "webp";
182
+ quality?: number | undefined;
183
+ compression?: number | undefined;
184
+ transparency?: boolean | undefined;
185
+ } | undefined;
186
+ }, {
187
+ md5?: string | undefined;
188
+ height?: number | undefined;
189
+ width?: number | undefined;
190
+ duration_ms?: number | undefined;
191
+ fps?: number | undefined;
192
+ work_slice_ms?: number | undefined;
193
+ html?: string | undefined;
194
+ metadata?: Record<string, string> | undefined;
195
+ strategy?: "v1" | undefined;
196
+ output?: {
197
+ video: {
198
+ codec: "h264";
199
+ };
200
+ audio: {
201
+ codec: "aac";
202
+ };
203
+ container: "mp4";
204
+ } | {
205
+ container: "jpeg";
206
+ quality?: number | undefined;
207
+ } | {
208
+ container: "png";
209
+ compression?: number | undefined;
210
+ transparency?: boolean | undefined;
211
+ } | {
212
+ container: "webp";
213
+ quality?: number | undefined;
214
+ compression?: number | undefined;
215
+ transparency?: boolean | undefined;
216
+ } | undefined;
217
+ }>;
218
+ declare class OutputConfiguration {
219
+ readonly output: RenderOutputConfiguration;
220
+ static parse(input?: any): OutputConfiguration;
221
+ constructor(output: RenderOutputConfiguration);
222
+ get isStill(): boolean;
223
+ get isVideo(): boolean;
224
+ get fileExtension(): "mp4" | "jpeg" | "png" | "webp";
225
+ get contentType(): string;
226
+ get container(): "mp4" | "jpeg" | "png" | "webp";
227
+ get jpegConfig(): {
228
+ container: "jpeg";
229
+ quality?: number | undefined;
230
+ } | null;
231
+ get pngConfig(): {
232
+ container: "png";
233
+ compression?: number | undefined;
234
+ transparency?: boolean | undefined;
235
+ } | null;
236
+ get webpConfig(): {
237
+ container: "webp";
238
+ quality?: number | undefined;
239
+ compression?: number | undefined;
240
+ transparency?: boolean | undefined;
241
+ } | null;
242
+ get mp4Config(): {
243
+ video: {
244
+ codec: "h264";
245
+ };
246
+ audio: {
247
+ codec: "aac";
248
+ };
249
+ container: "mp4";
250
+ } | null;
251
+ }
252
+ interface CreateRenderPayload {
253
+ md5?: string;
254
+ fps?: number;
255
+ width?: number;
256
+ height?: number;
257
+ work_slice_ms?: number;
258
+ html?: string;
259
+ duration_ms?: number;
260
+ metadata?: Record<string, string>;
261
+ strategy?: "v1";
262
+ output?: z.infer<typeof RenderOutputConfiguration>;
263
+ }
264
+ interface CreateRenderResult {
265
+ id: string;
266
+ md5: string | null;
267
+ status: "complete" | "created" | "failed" | "pending" | "rendering" | string;
268
+ metadata: Record<string, string>;
269
+ }
270
+ interface LookupRenderByMd5Result {
271
+ id: string;
272
+ md5: string | null;
273
+ status: "complete" | "created" | "failed" | "pending" | "rendering" | string;
274
+ metadata: Record<string, string>;
275
+ }
276
+ declare const createRender: (client: Client, payload: CreateRenderPayload) => Promise<CreateRenderResult>;
277
+ declare const uploadRender: (client: Client, renderId: string, fileStream: ReadableStream) => Promise<any>;
278
+ declare const getRenderInfo: (client: Client, id: string) => Promise<LookupRenderByMd5Result>;
279
+ declare const lookupRenderByMd5: (client: Client, md5: string) => Promise<LookupRenderByMd5Result | null>;
280
+ declare const getRenderProgress: (client: Client, id: string) => Promise<CompletionIterator>;
281
+ declare const downloadRender: (client: Client, id: string) => Promise<Response>;
282
+ //#endregion
283
+ export { CreateRenderPayload, CreateRenderResult, LookupRenderByMd5Result, OutputConfiguration, RenderOutputConfiguration, createRender, downloadRender, getRenderInfo, getRenderProgress, lookupRenderByMd5, uploadRender };
284
+ //# sourceMappingURL=renders.d.cts.map