@transloadit/node 6.4.0 → 6.6.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.
Files changed (182) hide show
  1. package/README.md +30 -5
  2. package/dist/Transloadit.d.ts.map +1 -1
  3. package/dist/Transloadit.js +61 -5
  4. package/dist/Transloadit.js.map +1 -1
  5. package/dist/alphalib/renderSimpleValue.d.ts +14 -0
  6. package/dist/alphalib/renderSimpleValue.d.ts.map +1 -0
  7. package/dist/alphalib/renderSimpleValue.js +87 -0
  8. package/dist/alphalib/renderSimpleValue.js.map +1 -0
  9. package/dist/alphalib/truncateString.d.ts +5 -0
  10. package/dist/alphalib/truncateString.d.ts.map +1 -0
  11. package/dist/alphalib/truncateString.js +19 -0
  12. package/dist/alphalib/truncateString.js.map +1 -0
  13. package/dist/alphalib/types/builtinTemplates.d.ts +15 -3
  14. package/dist/alphalib/types/builtinTemplates.d.ts.map +1 -1
  15. package/dist/alphalib/types/builtinTemplates.js +23 -3
  16. package/dist/alphalib/types/builtinTemplates.js.map +1 -1
  17. package/dist/alphalib/types/robots/_instructions-primitives.d.ts +6 -0
  18. package/dist/alphalib/types/robots/_instructions-primitives.d.ts.map +1 -1
  19. package/dist/alphalib/types/robots/_instructions-primitives.js +29 -7
  20. package/dist/alphalib/types/robots/_instructions-primitives.js.map +1 -1
  21. package/dist/alphalib/types/robots/_video-generate.d.ts +34 -0
  22. package/dist/alphalib/types/robots/_video-generate.d.ts.map +1 -0
  23. package/dist/alphalib/types/robots/_video-generate.js +157 -0
  24. package/dist/alphalib/types/robots/_video-generate.js.map +1 -0
  25. package/dist/alphalib/types/robots/ai-chat.d.ts +2 -0
  26. package/dist/alphalib/types/robots/ai-chat.d.ts.map +1 -1
  27. package/dist/alphalib/types/robots/ai-chat.js +7 -5
  28. package/dist/alphalib/types/robots/ai-chat.js.map +1 -1
  29. package/dist/alphalib/types/robots/audio-concat.d.ts.map +1 -1
  30. package/dist/alphalib/types/robots/audio-concat.js +5 -5
  31. package/dist/alphalib/types/robots/audio-concat.js.map +1 -1
  32. package/dist/alphalib/types/robots/azure-import.d.ts.map +1 -1
  33. package/dist/alphalib/types/robots/azure-import.js +3 -3
  34. package/dist/alphalib/types/robots/azure-import.js.map +1 -1
  35. package/dist/alphalib/types/robots/document-convert.d.ts.map +1 -1
  36. package/dist/alphalib/types/robots/document-convert.js +7 -5
  37. package/dist/alphalib/types/robots/document-convert.js.map +1 -1
  38. package/dist/alphalib/types/robots/document-extract.d.ts +8 -8
  39. package/dist/alphalib/types/robots/document-extract.d.ts.map +1 -1
  40. package/dist/alphalib/types/robots/document-extract.js +18 -2
  41. package/dist/alphalib/types/robots/document-extract.js.map +1 -1
  42. package/dist/alphalib/types/robots/document-split.d.ts +12 -0
  43. package/dist/alphalib/types/robots/document-split.d.ts.map +1 -1
  44. package/dist/alphalib/types/robots/document-split.js +15 -2
  45. package/dist/alphalib/types/robots/document-split.js.map +1 -1
  46. package/dist/alphalib/types/robots/file-decompress.d.ts.map +1 -1
  47. package/dist/alphalib/types/robots/file-decompress.js +2 -0
  48. package/dist/alphalib/types/robots/file-decompress.js.map +1 -1
  49. package/dist/alphalib/types/robots/file-preview.d.ts +22 -0
  50. package/dist/alphalib/types/robots/file-preview.d.ts.map +1 -1
  51. package/dist/alphalib/types/robots/file-preview.js +43 -26
  52. package/dist/alphalib/types/robots/file-preview.js.map +1 -1
  53. package/dist/alphalib/types/robots/http-request.d.ts.map +1 -1
  54. package/dist/alphalib/types/robots/http-request.js +9 -14
  55. package/dist/alphalib/types/robots/http-request.js.map +1 -1
  56. package/dist/alphalib/types/robots/image-enhance.d.ts +8 -8
  57. package/dist/alphalib/types/robots/image-enhance.js +2 -2
  58. package/dist/alphalib/types/robots/image-resize.d.ts.map +1 -1
  59. package/dist/alphalib/types/robots/image-resize.js +3 -1
  60. package/dist/alphalib/types/robots/image-resize.js.map +1 -1
  61. package/dist/alphalib/types/robots/image-upscale.js +1 -1
  62. package/dist/alphalib/types/robots/image-upscale.js.map +1 -1
  63. package/dist/alphalib/types/robots/s3-import.d.ts.map +1 -1
  64. package/dist/alphalib/types/robots/s3-import.js +14 -15
  65. package/dist/alphalib/types/robots/s3-import.js.map +1 -1
  66. package/dist/alphalib/types/robots/supabase-store.d.ts +16 -6
  67. package/dist/alphalib/types/robots/supabase-store.d.ts.map +1 -1
  68. package/dist/alphalib/types/robots/supabase-store.js +23 -1
  69. package/dist/alphalib/types/robots/supabase-store.js.map +1 -1
  70. package/dist/alphalib/types/robots/tigris-store.d.ts.map +1 -1
  71. package/dist/alphalib/types/robots/tigris-store.js +3 -4
  72. package/dist/alphalib/types/robots/tigris-store.js.map +1 -1
  73. package/dist/alphalib/types/robots/transloadit-import.d.ts +2 -2
  74. package/dist/alphalib/types/robots/transloadit-import.d.ts.map +1 -1
  75. package/dist/alphalib/types/robots/transloadit-import.js +4 -1
  76. package/dist/alphalib/types/robots/transloadit-import.js.map +1 -1
  77. package/dist/alphalib/types/robots/transloadit-store.d.ts +2 -3
  78. package/dist/alphalib/types/robots/transloadit-store.d.ts.map +1 -1
  79. package/dist/alphalib/types/robots/transloadit-store.js +19 -0
  80. package/dist/alphalib/types/robots/transloadit-store.js.map +1 -1
  81. package/dist/alphalib/types/robots/video-adaptive.d.ts.map +1 -1
  82. package/dist/alphalib/types/robots/video-adaptive.js +12 -0
  83. package/dist/alphalib/types/robots/video-adaptive.js.map +1 -1
  84. package/dist/alphalib/types/robots/video-concat.d.ts.map +1 -1
  85. package/dist/alphalib/types/robots/video-concat.js +9 -9
  86. package/dist/alphalib/types/robots/video-concat.js.map +1 -1
  87. package/dist/alphalib/types/robots/video-thumbs.d.ts +8 -8
  88. package/dist/alphalib/types/robots/video-thumbs.js +8 -8
  89. package/dist/alphalib/types/robots/video-thumbs.js.map +1 -1
  90. package/dist/alphalib/types/robots/vimeo-store.js +1 -1
  91. package/dist/alphalib/types/template.d.ts +3 -3
  92. package/dist/alphalib/types/templateValues.d.ts +83 -0
  93. package/dist/alphalib/types/templateValues.d.ts.map +1 -0
  94. package/dist/alphalib/types/templateValues.js +117 -0
  95. package/dist/alphalib/types/templateValues.js.map +1 -0
  96. package/dist/cli/OutputCtl.d.ts +1 -0
  97. package/dist/cli/OutputCtl.d.ts.map +1 -1
  98. package/dist/cli/OutputCtl.js +1 -1
  99. package/dist/cli/OutputCtl.js.map +1 -1
  100. package/dist/cli/commands/BaseCommand.d.ts +3 -2
  101. package/dist/cli/commands/BaseCommand.d.ts.map +1 -1
  102. package/dist/cli/commands/BaseCommand.js +27 -3
  103. package/dist/cli/commands/BaseCommand.js.map +1 -1
  104. package/dist/cli/commands/assemblies.d.ts +21 -1
  105. package/dist/cli/commands/assemblies.d.ts.map +1 -1
  106. package/dist/cli/commands/assemblies.js +584 -91
  107. package/dist/cli/commands/assemblies.js.map +1 -1
  108. package/dist/cli/commands/templates.d.ts +1 -1
  109. package/dist/cli/commands/templates.d.ts.map +1 -1
  110. package/dist/cli/commands/templates.js +57 -67
  111. package/dist/cli/commands/templates.js.map +1 -1
  112. package/dist/cli/errors.d.ts +8 -0
  113. package/dist/cli/errors.d.ts.map +1 -0
  114. package/dist/cli/errors.js +28 -0
  115. package/dist/cli/errors.js.map +1 -0
  116. package/dist/cli/helpers.d.ts.map +1 -1
  117. package/dist/cli/helpers.js +22 -0
  118. package/dist/cli/helpers.js.map +1 -1
  119. package/dist/cli/intentRuntime.d.ts +1 -0
  120. package/dist/cli/intentRuntime.d.ts.map +1 -1
  121. package/dist/cli/intentRuntime.js +9 -3
  122. package/dist/cli/intentRuntime.js.map +1 -1
  123. package/dist/cli/resultFiles.d.ts +1 -0
  124. package/dist/cli/resultFiles.d.ts.map +1 -1
  125. package/dist/cli/resultFiles.js.map +1 -1
  126. package/dist/cli/resultUrls.d.ts +2 -1
  127. package/dist/cli/resultUrls.d.ts.map +1 -1
  128. package/dist/cli/resultUrls.js +6 -3
  129. package/dist/cli/resultUrls.js.map +1 -1
  130. package/dist/cli/stepsInput.d.ts +1 -1
  131. package/dist/cli/stepsInput.d.ts.map +1 -1
  132. package/dist/cli/stepsInput.js +48 -6
  133. package/dist/cli/stepsInput.js.map +1 -1
  134. package/dist/cli/types.d.ts +66 -0
  135. package/dist/cli/types.d.ts.map +1 -1
  136. package/dist/cli/types.js +29 -0
  137. package/dist/cli/types.js.map +1 -1
  138. package/dist/tus.d.ts +7 -2
  139. package/dist/tus.d.ts.map +1 -1
  140. package/dist/tus.js +58 -4
  141. package/dist/tus.js.map +1 -1
  142. package/package.json +1 -1
  143. package/src/Transloadit.ts +65 -4
  144. package/src/alphalib/renderSimpleValue.ts +120 -0
  145. package/src/alphalib/truncateString.ts +23 -0
  146. package/src/alphalib/types/builtinTemplates.ts +33 -3
  147. package/src/alphalib/types/robots/_instructions-primitives.ts +34 -7
  148. package/src/alphalib/types/robots/_video-generate.ts +211 -0
  149. package/src/alphalib/types/robots/ai-chat.ts +8 -5
  150. package/src/alphalib/types/robots/audio-concat.ts +5 -4
  151. package/src/alphalib/types/robots/azure-import.ts +3 -4
  152. package/src/alphalib/types/robots/document-convert.ts +8 -5
  153. package/src/alphalib/types/robots/document-extract.ts +18 -2
  154. package/src/alphalib/types/robots/document-split.ts +17 -2
  155. package/src/alphalib/types/robots/file-decompress.ts +2 -0
  156. package/src/alphalib/types/robots/file-preview.ts +44 -25
  157. package/src/alphalib/types/robots/http-request.ts +9 -13
  158. package/src/alphalib/types/robots/image-enhance.ts +2 -2
  159. package/src/alphalib/types/robots/image-resize.ts +3 -1
  160. package/src/alphalib/types/robots/image-upscale.ts +1 -1
  161. package/src/alphalib/types/robots/s3-import.ts +14 -15
  162. package/src/alphalib/types/robots/supabase-store.ts +23 -1
  163. package/src/alphalib/types/robots/tigris-store.ts +2 -3
  164. package/src/alphalib/types/robots/transloadit-import.ts +4 -1
  165. package/src/alphalib/types/robots/transloadit-store.ts +19 -0
  166. package/src/alphalib/types/robots/video-adaptive.ts +12 -0
  167. package/src/alphalib/types/robots/video-concat.ts +9 -8
  168. package/src/alphalib/types/robots/video-thumbs.ts +8 -8
  169. package/src/alphalib/types/robots/vimeo-store.ts +1 -1
  170. package/src/alphalib/types/templateValues.ts +157 -0
  171. package/src/cli/OutputCtl.ts +2 -1
  172. package/src/cli/commands/BaseCommand.ts +29 -7
  173. package/src/cli/commands/assemblies.ts +775 -118
  174. package/src/cli/commands/templates.ts +93 -98
  175. package/src/cli/errors.ts +34 -0
  176. package/src/cli/helpers.ts +21 -0
  177. package/src/cli/intentRuntime.ts +10 -3
  178. package/src/cli/resultFiles.ts +1 -0
  179. package/src/cli/resultUrls.ts +11 -3
  180. package/src/cli/stepsInput.ts +54 -6
  181. package/src/cli/types.ts +35 -0
  182. package/src/tus.ts +72 -5
package/src/tus.ts CHANGED
@@ -1,16 +1,24 @@
1
1
  import type { Readable } from 'node:stream'
2
2
 
3
- import type { OnSuccessPayload, UploadOptions } from 'tus-js-client'
3
+ import type {
4
+ FileSource,
5
+ HttpRequest,
6
+ HttpResponse,
7
+ OnSuccessPayload,
8
+ SliceResult,
9
+ UploadOptions,
10
+ } from 'tus-js-client'
4
11
 
5
12
  import type { AssemblyStatus } from './alphalib/types/assemblyStatus.ts'
6
13
  import type { UploadProgress } from './Transloadit.ts'
7
14
 
15
+ import { ReadStream } from 'node:fs'
8
16
  import { stat } from 'node:fs/promises'
9
17
  import { basename } from 'node:path'
10
18
 
11
19
  import debug from 'debug'
12
20
  import pMap from 'p-map'
13
- import { Upload } from 'tus-js-client'
21
+ import { defaultOptions, Upload } from 'tus-js-client'
14
22
 
15
23
  const log = debug('transloadit')
16
24
  const logWarn = debug('transloadit:warn')
@@ -31,6 +39,13 @@ interface SendTusRequestOptions {
31
39
  signal?: AbortSignal
32
40
  uploadUrls?: Record<string, string>
33
41
  uploadBehavior?: UploadBehavior
42
+ onFileStreamOpened?: (stream: ReadStream) => void
43
+ onFileSliceStarted?: (slice: Promise<unknown>) => void
44
+ }
45
+
46
+ interface SendTusRequestResult {
47
+ uploadUrls: Record<string, string>
48
+ uploadsComplete?: Promise<unknown>
34
49
  }
35
50
 
36
51
  export async function sendTusRequest({
@@ -42,7 +57,9 @@ export async function sendTusRequest({
42
57
  signal,
43
58
  uploadUrls,
44
59
  uploadBehavior = 'await',
45
- }: SendTusRequestOptions) {
60
+ onFileStreamOpened,
61
+ onFileSliceStarted,
62
+ }: SendTusRequestOptions): Promise<SendTusRequestResult> {
46
63
  const streamLabels = Object.keys(streamsMap)
47
64
 
48
65
  let totalBytes = 0
@@ -203,6 +220,25 @@ export async function sendTusRequest({
203
220
  fieldname: label,
204
221
  filename,
205
222
  },
223
+ httpStack: {
224
+ createRequest(method: string, url: string): HttpRequest {
225
+ const request = defaultOptions.httpStack.createRequest(method, url)
226
+ const send = request.send.bind(request)
227
+ request.send = (body: unknown): Promise<HttpResponse> => {
228
+ // tus awaits pre-request hooks, so queued aborts must be checked at send itself.
229
+ if (signal?.aborted) {
230
+ // File setup can finish after abort() and reset tus's aborted state.
231
+ tusUpload.abort()
232
+ return Promise.reject(new Error('Upload aborted'))
233
+ }
234
+ return send(body)
235
+ }
236
+ return request
237
+ },
238
+ getName(): string {
239
+ return defaultOptions.httpStack.getName()
240
+ },
241
+ },
206
242
  onError: reject,
207
243
  onProgress: onTusProgress,
208
244
  onSuccess: resolve,
@@ -218,6 +254,36 @@ export async function sendTusRequest({
218
254
  }
219
255
  },
220
256
  }
257
+ if (onFileStreamOpened) {
258
+ // tus opens a separate ReadStream for each chunk; abort() leaves those streams open.
259
+ // Track those chunks even when the original file stream belongs to the caller.
260
+ tusOptions.fileReader = {
261
+ async openFile(input: unknown, chunkSize: number): Promise<FileSource> {
262
+ const source = await defaultOptions.fileReader.openFile(input, chunkSize)
263
+ return {
264
+ size: source.size,
265
+ async slice(start: number, end: number): Promise<SliceResult> {
266
+ if (signal?.aborted) throw new Error('Upload aborted')
267
+ const reading = source.slice(start, end).then((chunk) => {
268
+ // tus-js-client declares platform-specific chunk values as any.
269
+ const value: unknown = chunk.value
270
+ if (value instanceof ReadStream) onFileStreamOpened(value)
271
+ if (signal?.aborted) throw new Error('Upload aborted')
272
+ return chunk
273
+ })
274
+ // A file slice can open its stream before the promise resolves.
275
+ if (input instanceof ReadStream && input.path != null) {
276
+ onFileSliceStarted?.(reading)
277
+ }
278
+ return await reading
279
+ },
280
+ close() {
281
+ source.close()
282
+ },
283
+ }
284
+ },
285
+ }
286
+ }
221
287
  // tus-js-client doesn't like undefined/null
222
288
  if (size != null) tusOptions.uploadSize = size
223
289
  if (chunkSize) tusOptions.chunkSize = chunkSize
@@ -255,13 +321,14 @@ export async function sendTusRequest({
255
321
 
256
322
  await Promise.all(uploadUrlPromises)
257
323
 
324
+ const uploadsComplete = Promise.allSettled(completionPromises)
258
325
  if (uploadBehavior === 'await') {
259
326
  await Promise.all(completionPromises)
260
327
  } else {
261
- Promise.allSettled(completionPromises).catch((err) => {
328
+ uploadsComplete.catch((err) => {
262
329
  logWarn('Background upload failed', err)
263
330
  })
264
331
  }
265
332
 
266
- return { uploadUrls: uploadUrlsResult }
333
+ return { uploadUrls: uploadUrlsResult, uploadsComplete }
267
334
  }