@ttt-productions/ttt-core 0.79.116 → 0.79.117

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 (22) hide show
  1. package/dist/media/download-filename.d.ts.map +1 -1
  2. package/dist/media/download-filename.js +12 -4
  3. package/dist/media/download-filename.js.map +1 -1
  4. package/dist/upload-variables/apply-to-commission-variables.d.ts +2 -2
  5. package/dist/upload-variables/create-admin-audition-variables.d.ts +4 -4
  6. package/dist/upload-variables/create-audition-entry-variables.d.ts +2 -2
  7. package/dist/upload-variables/create-commission-variables.d.ts +2 -2
  8. package/dist/upload-variables/create-work-project-audition-variables.d.ts +2 -2
  9. package/dist/upload-variables/square-streetz-post-variables.d.ts +2 -2
  10. package/dist/upload-variables/update-chapter-media-variables.d.ts +2 -2
  11. package/dist/upload-variables/update-episode-media-variables.d.ts +2 -2
  12. package/dist/upload-variables/update-tale-cover-photo-variables.d.ts +2 -2
  13. package/dist/upload-variables/update-television-cover-photo-variables.d.ts +2 -2
  14. package/dist/upload-variables/update-track-media-variables.d.ts +2 -2
  15. package/dist/upload-variables/update-tune-cover-photo-variables.d.ts +2 -2
  16. package/dist/upload-variables/update-work-realm-cover-variables.d.ts +2 -2
  17. package/dist/upload-variables/upload-conversation-file-variables.d.ts +2 -2
  18. package/dist/upload-variables/upload-craft-skill-variables.d.ts +2 -2
  19. package/dist/upload-variables/upload-profile-picture-variables.d.ts +2 -2
  20. package/dist/upload-variables/upload-system-content-variables.d.ts +2 -2
  21. package/dist/upload-variables/upload-work-file-variables.d.ts +2 -2
  22. package/package.json +8 -8
@@ -1 +1 @@
1
- {"version":3,"file":"download-filename.d.ts","sourceRoot":"","sources":["../../src/media/download-filename.ts"],"names":[],"mappings":"AAkDA,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAG7F;AAoED,MAAM,WAAW,gCAAgC;IAC/C,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAClC,OAAO,GAAE,gCAAqC,GAC7C,MAAM,CAyCR;AA4BD,MAAM,WAAW,+BAA+B;IAC9C,aAAa,EAAE,MAAM,CAAC;IAEtB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,oCAAoC,CAClD,kBAAkB,EAAE,MAAM,EAC1B,OAAO,GAAE,gCAAqC,GAC7C,+BAA+B,CAUjC"}
1
+ {"version":3,"file":"download-filename.d.ts","sourceRoot":"","sources":["../../src/media/download-filename.ts"],"names":[],"mappings":"AAkDA,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAG7F;AA6ED,MAAM,WAAW,gCAAgC;IAC/C,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAClC,OAAO,GAAE,gCAAqC,GAC7C,MAAM,CAyCR;AA4BD,MAAM,WAAW,+BAA+B;IAC9C,aAAa,EAAE,MAAM,CAAC;IAEtB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,oCAAoC,CAClD,kBAAkB,EAAE,MAAM,EAC1B,OAAO,GAAE,gCAAqC,GAC7C,+BAA+B,CAUjC"}
@@ -48,8 +48,17 @@ export function extensionForContentType(contentType) {
48
48
  function acceptedExtensions(contentType) {
49
49
  return CONTENT_TYPE_EXTENSIONS[contentTypeEssence(contentType)] ?? [];
50
50
  }
51
- // eslint-disable-next-line no-control-regex -- matching control characters IS the point here: this class is exactly what must be stripped (CR/LF header injection).
52
- const CONTROL_CHARS = /[\u0000-\u001F\u007F-\u009F]/g;
51
+ function isControlCharacter(codePoint) {
52
+ return codePoint <= 0x1f || (codePoint >= 0x7f && codePoint <= 0x9f);
53
+ }
54
+ function stripControlCharacters(value) {
55
+ let kept = '';
56
+ for (const char of value) {
57
+ if (!isControlCharacter(char.codePointAt(0) ?? 0))
58
+ kept += char;
59
+ }
60
+ return kept;
61
+ }
53
62
  const BIDI_CONTROLS = /[\u200E\u200F\u202A-\u202E\u2066-\u2069]/g;
54
63
  const UNSAFE_FILENAME_CHARS = /[/\\<>:"|?*'\u2018\u2019\u201C\u201D\u0060]/g;
55
64
  const RESERVED_DEVICE_NAME = /^(con|prn|aux|nul|com[1-9]|lpt[1-9])$/i;
@@ -80,8 +89,7 @@ function takeBasename(value) {
80
89
  return segments[segments.length - 1] ?? '';
81
90
  }
82
91
  function sanitizeSegment(value) {
83
- return value
84
- .replace(CONTROL_CHARS, '')
92
+ return stripControlCharacters(value)
85
93
  .replace(BIDI_CONTROLS, '')
86
94
  .replace(UNSAFE_FILENAME_CHARS, '')
87
95
  .replace(/\s+/g, ' ')
@@ -1 +1 @@
1
- {"version":3,"file":"download-filename.js","sourceRoot":"","sources":["../../src/media/download-filename.ts"],"names":[],"mappings":"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","sourcesContent":["// Pure, with no env, I/O, clock, or crypto: it runs unchanged in Cloud Functions and the Cloudflare\n// Worker.\n\nimport {\n DOWNLOAD_FILENAME_FALLBACK_STEM,\n MAX_DOWNLOAD_FILENAME_BYTES,\n} from '../constants/media-download.js';\n\nconst CONTENT_TYPE_EXTENSIONS: Readonly<Record<string, readonly string[]>> = {\n 'image/jpeg': ['jpg', 'jpeg'],\n 'image/png': ['png'],\n 'image/webp': ['webp'],\n 'image/gif': ['gif'],\n 'image/avif': ['avif'],\n 'image/heic': ['heic'],\n 'image/heif': ['heif'],\n 'image/bmp': ['bmp'],\n 'image/tiff': ['tiff', 'tif'],\n 'image/svg+xml': ['svg'],\n 'video/mp4': ['mp4', 'm4v'],\n 'video/webm': ['webm'],\n 'video/quicktime': ['mov'],\n 'video/x-matroska': ['mkv'],\n 'video/ogg': ['ogv'],\n 'audio/mpeg': ['mp3'],\n 'audio/mp4': ['m4a'],\n 'audio/aac': ['aac'],\n 'audio/flac': ['flac'],\n 'audio/x-flac': ['flac'],\n 'audio/wav': ['wav'],\n 'audio/x-wav': ['wav'],\n 'audio/webm': ['weba'],\n 'audio/ogg': ['ogg', 'oga'],\n 'application/pdf': ['pdf'],\n};\n\nconst CONTENT_TYPE_ALIASES: Readonly<Record<string, string>> = {\n 'image/jpg': 'image/jpeg',\n 'image/pjpeg': 'image/jpeg',\n 'audio/mp3': 'audio/mpeg',\n 'audio/x-m4a': 'audio/mp4',\n 'video/x-m4v': 'video/mp4',\n};\n\nfunction contentTypeEssence(contentType: string | null | undefined): string {\n if (typeof contentType !== 'string') return '';\n const essence = contentType.split(';')[0].trim().toLowerCase();\n return CONTENT_TYPE_ALIASES[essence] ?? essence;\n}\n\nexport function extensionForContentType(contentType: string | null | undefined): string | null {\n const known = CONTENT_TYPE_EXTENSIONS[contentTypeEssence(contentType)];\n return known ? known[0] : null;\n}\n\nfunction acceptedExtensions(contentType: string | null | undefined): readonly string[] {\n return CONTENT_TYPE_EXTENSIONS[contentTypeEssence(contentType)] ?? [];\n}\n\n// eslint-disable-next-line no-control-regex -- matching control characters IS the point here: this class is exactly what must be stripped (CR/LF header injection).\nconst CONTROL_CHARS = /[\\u0000-\\u001F\\u007F-\\u009F]/g;\nconst BIDI_CONTROLS = /[\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]/g;\nconst UNSAFE_FILENAME_CHARS = /[/\\\\<>:\"|?*'\\u2018\\u2019\\u201C\\u201D\\u0060]/g;\n\nconst RESERVED_DEVICE_NAME = /^(con|prn|aux|nul|com[1-9]|lpt[1-9])$/i;\n\nconst EXTENSION_SHAPE = /^[A-Za-z0-9]{1,10}$/;\n\nconst utf8 = new TextEncoder();\n\nfunction utf8ByteLength(value: string): number {\n return utf8.encode(value).length;\n}\n\n// `for…of` walks code points, so a surrogate pair is never split.\nfunction truncateToUtf8Bytes(value: string, maxBytes: number): string {\n if (maxBytes <= 0) return '';\n if (utf8ByteLength(value) <= maxBytes) return value;\n let out = '';\n let used = 0;\n for (const codePoint of value) {\n const size = utf8ByteLength(codePoint);\n if (used + size > maxBytes) break;\n out += codePoint;\n used += size;\n }\n return out;\n}\n\nfunction takeBasename(value: string): string {\n const segments = value.split(/[/\\\\]/);\n return segments[segments.length - 1] ?? '';\n}\n\nfunction sanitizeSegment(value: string): string {\n return value\n .replace(CONTROL_CHARS, '')\n .replace(BIDI_CONTROLS, '')\n .replace(UNSAFE_FILENAME_CHARS, '')\n .replace(/\\s+/g, ' ')\n .trim();\n}\n\n// Windows silently drops trailing spaces and dots.\nfunction trimTrailingDotsAndSpaces(value: string): string {\n return value.replace(/[\\s.]+$/, '');\n}\n\ninterface SplitName {\n stem: string;\n ext: string;\n}\n\nfunction splitExtension(value: string): SplitName {\n const dot = value.lastIndexOf('.');\n if (dot <= 0 || dot === value.length - 1) return { stem: value, ext: '' };\n const ext = value.slice(dot + 1);\n if (!EXTENSION_SHAPE.test(ext)) return { stem: value, ext: '' };\n return { stem: value.slice(0, dot), ext };\n}\n\nexport interface NormalizeDownloadFilenameOptions {\n contentType?: string | null;\n maxBytes?: number;\n fallbackStem?: string;\n}\n\nexport function normalizeDownloadFilename(\n rawName: string | null | undefined,\n options: NormalizeDownloadFilenameOptions = {},\n): string {\n const maxBytes = options.maxBytes ?? MAX_DOWNLOAD_FILENAME_BYTES;\n const fallbackStem =\n trimTrailingDotsAndSpaces(sanitizeSegment(options.fallbackStem ?? '')) ||\n DOWNLOAD_FILENAME_FALLBACK_STEM;\n\n const source = typeof rawName === 'string' ? rawName : '';\n const sanitized = trimTrailingDotsAndSpaces(\n sanitizeSegment(takeBasename(source.normalize('NFC'))),\n );\n const split = splitExtension(sanitized);\n\n const canonicalExt = extensionForContentType(options.contentType);\n const inputExt = split.ext.toLowerCase();\n let ext: string;\n if (canonicalExt) {\n ext = acceptedExtensions(options.contentType).includes(inputExt) ? inputExt : canonicalExt;\n } else {\n ext = inputExt;\n }\n const suffix = ext ? `.${ext}` : '';\n\n let stem = trimTrailingDotsAndSpaces(split.stem);\n if (stem.length === 0) stem = fallbackStem;\n\n const budget = maxBytes - utf8ByteLength(suffix);\n if (budget <= 0) {\n return (\n truncateToUtf8Bytes(stem, maxBytes) ||\n truncateToUtf8Bytes(fallbackStem, maxBytes) ||\n fallbackStem\n );\n }\n\n if (RESERVED_DEVICE_NAME.test(stem)) stem = `_${stem}`;\n stem = trimTrailingDotsAndSpaces(truncateToUtf8Bytes(stem, budget));\n if (stem.length === 0)\n stem = trimTrailingDotsAndSpaces(truncateToUtf8Bytes(fallbackStem, budget));\n if (stem.length === 0) return truncateToUtf8Bytes(fallbackStem, maxBytes) || fallbackStem;\n\n return `${stem}${suffix}`;\n}\n\nconst COMBINING_MARKS = /\\p{M}+/gu;\nconst SAFE_ASCII = /[\\u0020-\\u007E]/;\nconst ASCII_HEADER_HOSTILE = new Set(['\"', '\\\\', ';', ',']);\nconst ATTR_CHAR = /[A-Za-z0-9!#$&+\\-.^_`|~]/;\n\nfunction toAsciiComponent(value: string): string {\n const stripped = value.normalize('NFD').replace(COMBINING_MARKS, '');\n let out = '';\n for (const ch of stripped) {\n out += ch.length === 1 && SAFE_ASCII.test(ch) && !ASCII_HEADER_HOSTILE.has(ch) ? ch : '_';\n }\n return out.replace(/_+/g, '_').replace(/^[_\\s]+|[_\\s.]+$/g, '');\n}\n\nfunction encodeExtValue(value: string): string {\n let out = '';\n for (const byte of utf8.encode(value)) {\n const ch = String.fromCharCode(byte);\n out +=\n byte < 0x80 && ATTR_CHAR.test(ch)\n ? ch\n : `%${byte.toString(16).toUpperCase().padStart(2, '0')}`;\n }\n return out;\n}\n\nexport interface ContentDispositionFilenameForms {\n asciiFallback: string;\n // Placed after `filename*=` unquoted: an RFC 8187 ext-value is never quoted.\n extendedValue: string;\n}\n\nexport function buildContentDispositionFilenameForms(\n normalizedFilename: string,\n options: NormalizeDownloadFilenameOptions = {},\n): ContentDispositionFilenameForms {\n const safeName = normalizeDownloadFilename(normalizedFilename, options);\n const { stem, ext } = splitExtension(safeName);\n const asciiStem = toAsciiComponent(stem) || DOWNLOAD_FILENAME_FALLBACK_STEM;\n const asciiExt = ext.replace(/[^A-Za-z0-9]/g, '').toLowerCase();\n\n return {\n asciiFallback: asciiExt ? `${asciiStem}.${asciiExt}` : asciiStem,\n extendedValue: `UTF-8''${encodeExtValue(safeName)}`,\n };\n}\n"]}
1
+ {"version":3,"file":"download-filename.js","sourceRoot":"","sources":["../../src/media/download-filename.ts"],"names":[],"mappings":"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","sourcesContent":["// Pure, with no env, I/O, clock, or crypto: it runs unchanged in Cloud Functions and the Cloudflare\n// Worker.\n\nimport {\n DOWNLOAD_FILENAME_FALLBACK_STEM,\n MAX_DOWNLOAD_FILENAME_BYTES,\n} from '../constants/media-download.js';\n\nconst CONTENT_TYPE_EXTENSIONS: Readonly<Record<string, readonly string[]>> = {\n 'image/jpeg': ['jpg', 'jpeg'],\n 'image/png': ['png'],\n 'image/webp': ['webp'],\n 'image/gif': ['gif'],\n 'image/avif': ['avif'],\n 'image/heic': ['heic'],\n 'image/heif': ['heif'],\n 'image/bmp': ['bmp'],\n 'image/tiff': ['tiff', 'tif'],\n 'image/svg+xml': ['svg'],\n 'video/mp4': ['mp4', 'm4v'],\n 'video/webm': ['webm'],\n 'video/quicktime': ['mov'],\n 'video/x-matroska': ['mkv'],\n 'video/ogg': ['ogv'],\n 'audio/mpeg': ['mp3'],\n 'audio/mp4': ['m4a'],\n 'audio/aac': ['aac'],\n 'audio/flac': ['flac'],\n 'audio/x-flac': ['flac'],\n 'audio/wav': ['wav'],\n 'audio/x-wav': ['wav'],\n 'audio/webm': ['weba'],\n 'audio/ogg': ['ogg', 'oga'],\n 'application/pdf': ['pdf'],\n};\n\nconst CONTENT_TYPE_ALIASES: Readonly<Record<string, string>> = {\n 'image/jpg': 'image/jpeg',\n 'image/pjpeg': 'image/jpeg',\n 'audio/mp3': 'audio/mpeg',\n 'audio/x-m4a': 'audio/mp4',\n 'video/x-m4v': 'video/mp4',\n};\n\nfunction contentTypeEssence(contentType: string | null | undefined): string {\n if (typeof contentType !== 'string') return '';\n const essence = contentType.split(';')[0].trim().toLowerCase();\n return CONTENT_TYPE_ALIASES[essence] ?? essence;\n}\n\nexport function extensionForContentType(contentType: string | null | undefined): string | null {\n const known = CONTENT_TYPE_EXTENSIONS[contentTypeEssence(contentType)];\n return known ? known[0] : null;\n}\n\nfunction acceptedExtensions(contentType: string | null | undefined): readonly string[] {\n return CONTENT_TYPE_EXTENSIONS[contentTypeEssence(contentType)] ?? [];\n}\n\nfunction isControlCharacter(codePoint: number): boolean {\n return codePoint <= 0x1f || (codePoint >= 0x7f && codePoint <= 0x9f);\n}\n\nfunction stripControlCharacters(value: string): string {\n let kept = '';\n for (const char of value) {\n if (!isControlCharacter(char.codePointAt(0) ?? 0)) kept += char;\n }\n return kept;\n}\n\nconst BIDI_CONTROLS = /[\\u200E\\u200F\\u202A-\\u202E\\u2066-\\u2069]/g;\nconst UNSAFE_FILENAME_CHARS = /[/\\\\<>:\"|?*'\\u2018\\u2019\\u201C\\u201D\\u0060]/g;\n\nconst RESERVED_DEVICE_NAME = /^(con|prn|aux|nul|com[1-9]|lpt[1-9])$/i;\n\nconst EXTENSION_SHAPE = /^[A-Za-z0-9]{1,10}$/;\n\nconst utf8 = new TextEncoder();\n\nfunction utf8ByteLength(value: string): number {\n return utf8.encode(value).length;\n}\n\n// `for…of` walks code points, so a surrogate pair is never split.\nfunction truncateToUtf8Bytes(value: string, maxBytes: number): string {\n if (maxBytes <= 0) return '';\n if (utf8ByteLength(value) <= maxBytes) return value;\n let out = '';\n let used = 0;\n for (const codePoint of value) {\n const size = utf8ByteLength(codePoint);\n if (used + size > maxBytes) break;\n out += codePoint;\n used += size;\n }\n return out;\n}\n\nfunction takeBasename(value: string): string {\n const segments = value.split(/[/\\\\]/);\n return segments[segments.length - 1] ?? '';\n}\n\nfunction sanitizeSegment(value: string): string {\n return stripControlCharacters(value)\n .replace(BIDI_CONTROLS, '')\n .replace(UNSAFE_FILENAME_CHARS, '')\n .replace(/\\s+/g, ' ')\n .trim();\n}\n\n// Windows silently drops trailing spaces and dots.\nfunction trimTrailingDotsAndSpaces(value: string): string {\n return value.replace(/[\\s.]+$/, '');\n}\n\ninterface SplitName {\n stem: string;\n ext: string;\n}\n\nfunction splitExtension(value: string): SplitName {\n const dot = value.lastIndexOf('.');\n if (dot <= 0 || dot === value.length - 1) return { stem: value, ext: '' };\n const ext = value.slice(dot + 1);\n if (!EXTENSION_SHAPE.test(ext)) return { stem: value, ext: '' };\n return { stem: value.slice(0, dot), ext };\n}\n\nexport interface NormalizeDownloadFilenameOptions {\n contentType?: string | null;\n maxBytes?: number;\n fallbackStem?: string;\n}\n\nexport function normalizeDownloadFilename(\n rawName: string | null | undefined,\n options: NormalizeDownloadFilenameOptions = {},\n): string {\n const maxBytes = options.maxBytes ?? MAX_DOWNLOAD_FILENAME_BYTES;\n const fallbackStem =\n trimTrailingDotsAndSpaces(sanitizeSegment(options.fallbackStem ?? '')) ||\n DOWNLOAD_FILENAME_FALLBACK_STEM;\n\n const source = typeof rawName === 'string' ? rawName : '';\n const sanitized = trimTrailingDotsAndSpaces(\n sanitizeSegment(takeBasename(source.normalize('NFC'))),\n );\n const split = splitExtension(sanitized);\n\n const canonicalExt = extensionForContentType(options.contentType);\n const inputExt = split.ext.toLowerCase();\n let ext: string;\n if (canonicalExt) {\n ext = acceptedExtensions(options.contentType).includes(inputExt) ? inputExt : canonicalExt;\n } else {\n ext = inputExt;\n }\n const suffix = ext ? `.${ext}` : '';\n\n let stem = trimTrailingDotsAndSpaces(split.stem);\n if (stem.length === 0) stem = fallbackStem;\n\n const budget = maxBytes - utf8ByteLength(suffix);\n if (budget <= 0) {\n return (\n truncateToUtf8Bytes(stem, maxBytes) ||\n truncateToUtf8Bytes(fallbackStem, maxBytes) ||\n fallbackStem\n );\n }\n\n if (RESERVED_DEVICE_NAME.test(stem)) stem = `_${stem}`;\n stem = trimTrailingDotsAndSpaces(truncateToUtf8Bytes(stem, budget));\n if (stem.length === 0)\n stem = trimTrailingDotsAndSpaces(truncateToUtf8Bytes(fallbackStem, budget));\n if (stem.length === 0) return truncateToUtf8Bytes(fallbackStem, maxBytes) || fallbackStem;\n\n return `${stem}${suffix}`;\n}\n\nconst COMBINING_MARKS = /\\p{M}+/gu;\nconst SAFE_ASCII = /[\\u0020-\\u007E]/;\nconst ASCII_HEADER_HOSTILE = new Set(['\"', '\\\\', ';', ',']);\nconst ATTR_CHAR = /[A-Za-z0-9!#$&+\\-.^_`|~]/;\n\nfunction toAsciiComponent(value: string): string {\n const stripped = value.normalize('NFD').replace(COMBINING_MARKS, '');\n let out = '';\n for (const ch of stripped) {\n out += ch.length === 1 && SAFE_ASCII.test(ch) && !ASCII_HEADER_HOSTILE.has(ch) ? ch : '_';\n }\n return out.replace(/_+/g, '_').replace(/^[_\\s]+|[_\\s.]+$/g, '');\n}\n\nfunction encodeExtValue(value: string): string {\n let out = '';\n for (const byte of utf8.encode(value)) {\n const ch = String.fromCharCode(byte);\n out +=\n byte < 0x80 && ATTR_CHAR.test(ch)\n ? ch\n : `%${byte.toString(16).toUpperCase().padStart(2, '0')}`;\n }\n return out;\n}\n\nexport interface ContentDispositionFilenameForms {\n asciiFallback: string;\n // Placed after `filename*=` unquoted: an RFC 8187 ext-value is never quoted.\n extendedValue: string;\n}\n\nexport function buildContentDispositionFilenameForms(\n normalizedFilename: string,\n options: NormalizeDownloadFilenameOptions = {},\n): ContentDispositionFilenameForms {\n const safeName = normalizeDownloadFilename(normalizedFilename, options);\n const { stem, ext } = splitExtension(safeName);\n const asciiStem = toAsciiComponent(stem) || DOWNLOAD_FILENAME_FALLBACK_STEM;\n const asciiExt = ext.replace(/[^A-Za-z0-9]/g, '').toLowerCase();\n\n return {\n asciiFallback: asciiExt ? `${asciiStem}.${asciiExt}` : asciiStem,\n extendedValue: `UTF-8''${encodeExtValue(safeName)}`,\n };\n}\n"]}
@@ -3,7 +3,7 @@ export declare const ApplyToCommissionVariablesSchema: z.ZodObject<{
3
3
  commissionListingId: z.ZodString;
4
4
  coverLetterText: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
5
5
  agreementVersion: z.ZodLiteral<1>;
6
- file: z.ZodOptional<z.ZodNullable<z.ZodUnion<[z.ZodCustom<File, File>, z.ZodCustom<Blob, Blob>]>>>;
6
+ file: z.ZodOptional<z.ZodNullable<z.ZodUnion<[z.ZodInstanceOf<File>, z.ZodInstanceOf<Blob>]>>>;
7
7
  claim: z.ZodOptional<z.ZodObject<{
8
8
  kind: z.ZodEnum<{
9
9
  file: "file";
@@ -18,7 +18,7 @@ export declare const ApplyToCommissionVariablesSchema: z.ZodObject<{
18
18
  }>;
19
19
  }, z.core.$strict>>;
20
20
  onProgress: z.ZodOptional<z.ZodCustom<(state: import("@ttt-productions/media-schemas").UploadState | null) => void, (state: import("@ttt-productions/media-schemas").UploadState | null) => void>>;
21
- signal: z.ZodOptional<z.ZodCustom<AbortSignal, AbortSignal>>;
21
+ signal: z.ZodOptional<z.ZodInstanceOf<AbortSignal>>;
22
22
  }, z.core.$strict>;
23
23
  export type ApplyToCommissionVariables = z.infer<typeof ApplyToCommissionVariablesSchema>;
24
24
  //# sourceMappingURL=apply-to-commission-variables.d.ts.map
@@ -2,7 +2,7 @@ import { z } from 'zod';
2
2
  export declare const CreateAdminAuditionVariablesSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
3
3
  title: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
4
4
  description: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
5
- videoFile: z.ZodUnion<[z.ZodCustom<File, File>, z.ZodCustom<Blob, Blob>]>;
5
+ videoFile: z.ZodUnion<[z.ZodInstanceOf<File>, z.ZodInstanceOf<Blob>]>;
6
6
  claim: z.ZodOptional<z.ZodObject<{
7
7
  kind: z.ZodEnum<{
8
8
  file: "file";
@@ -24,13 +24,13 @@ export declare const CreateAdminAuditionVariablesSchema: z.ZodDiscriminatedUnion
24
24
  }>>;
25
25
  expectedOptionCount: z.ZodOptional<z.ZodNumber>;
26
26
  onProgress: z.ZodOptional<z.ZodCustom<(state: import("@ttt-productions/media-schemas").UploadState | null) => void, (state: import("@ttt-productions/media-schemas").UploadState | null) => void>>;
27
- signal: z.ZodOptional<z.ZodCustom<AbortSignal, AbortSignal>>;
27
+ signal: z.ZodOptional<z.ZodInstanceOf<AbortSignal>>;
28
28
  type: z.ZodLiteral<"platformAudition">;
29
29
  }, z.core.$strict>, z.ZodObject<{
30
30
  sponsoredAuditionAmountUSD: z.ZodNumber;
31
31
  title: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
32
32
  description: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
33
- videoFile: z.ZodUnion<[z.ZodCustom<File, File>, z.ZodCustom<Blob, Blob>]>;
33
+ videoFile: z.ZodUnion<[z.ZodInstanceOf<File>, z.ZodInstanceOf<Blob>]>;
34
34
  claim: z.ZodOptional<z.ZodObject<{
35
35
  kind: z.ZodEnum<{
36
36
  file: "file";
@@ -52,7 +52,7 @@ export declare const CreateAdminAuditionVariablesSchema: z.ZodDiscriminatedUnion
52
52
  }>>;
53
53
  expectedOptionCount: z.ZodOptional<z.ZodNumber>;
54
54
  onProgress: z.ZodOptional<z.ZodCustom<(state: import("@ttt-productions/media-schemas").UploadState | null) => void, (state: import("@ttt-productions/media-schemas").UploadState | null) => void>>;
55
- signal: z.ZodOptional<z.ZodCustom<AbortSignal, AbortSignal>>;
55
+ signal: z.ZodOptional<z.ZodInstanceOf<AbortSignal>>;
56
56
  type: z.ZodLiteral<"sponsoredAudition">;
57
57
  }, z.core.$strict>], "type">;
58
58
  export type CreateAdminAuditionVariables = z.infer<typeof CreateAdminAuditionVariablesSchema>;
@@ -1,7 +1,7 @@
1
1
  import { z } from 'zod';
2
2
  export declare const CreateAuditionEntryVariablesSchema: z.ZodObject<{
3
3
  auditionId: z.ZodString;
4
- videoFile: z.ZodUnion<[z.ZodCustom<File, File>, z.ZodCustom<Blob, Blob>]>;
4
+ videoFile: z.ZodUnion<[z.ZodInstanceOf<File>, z.ZodInstanceOf<Blob>]>;
5
5
  agreementVersion: z.ZodLiteral<1>;
6
6
  claim: z.ZodOptional<z.ZodObject<{
7
7
  kind: z.ZodEnum<{
@@ -17,7 +17,7 @@ export declare const CreateAuditionEntryVariablesSchema: z.ZodObject<{
17
17
  }>;
18
18
  }, z.core.$strict>>;
19
19
  onProgress: z.ZodOptional<z.ZodCustom<(state: import("@ttt-productions/media-schemas").UploadState | null) => void, (state: import("@ttt-productions/media-schemas").UploadState | null) => void>>;
20
- signal: z.ZodOptional<z.ZodCustom<AbortSignal, AbortSignal>>;
20
+ signal: z.ZodOptional<z.ZodInstanceOf<AbortSignal>>;
21
21
  }, z.core.$strict>;
22
22
  export type CreateAuditionEntryVariables = z.infer<typeof CreateAuditionEntryVariablesSchema>;
23
23
  //# sourceMappingURL=create-audition-entry-variables.d.ts.map
@@ -28,7 +28,7 @@ export declare const CreateCommissionVariablesSchema: z.ZodObject<{
28
28
  }>>;
29
29
  stakeSharesOffered: z.ZodNumber;
30
30
  }, z.core.$strict>;
31
- file: z.ZodUnion<[z.ZodCustom<File, File>, z.ZodCustom<Blob, Blob>]>;
31
+ file: z.ZodUnion<[z.ZodInstanceOf<File>, z.ZodInstanceOf<Blob>]>;
32
32
  claim: z.ZodOptional<z.ZodObject<{
33
33
  kind: z.ZodEnum<{
34
34
  file: "file";
@@ -43,7 +43,7 @@ export declare const CreateCommissionVariablesSchema: z.ZodObject<{
43
43
  }>;
44
44
  }, z.core.$strict>>;
45
45
  onProgress: z.ZodOptional<z.ZodCustom<(state: import("@ttt-productions/media-schemas").UploadState | null) => void, (state: import("@ttt-productions/media-schemas").UploadState | null) => void>>;
46
- signal: z.ZodOptional<z.ZodCustom<AbortSignal, AbortSignal>>;
46
+ signal: z.ZodOptional<z.ZodInstanceOf<AbortSignal>>;
47
47
  }, z.core.$strict>;
48
48
  export type CreateCommissionVariables = z.infer<typeof CreateCommissionVariablesSchema>;
49
49
  //# sourceMappingURL=create-commission-variables.d.ts.map
@@ -2,7 +2,7 @@ import { z } from 'zod';
2
2
  export declare const CreateWorkProjectAuditionVariablesSchema: z.ZodObject<{
3
3
  title: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
4
4
  description: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
5
- videoFile: z.ZodUnion<[z.ZodCustom<File, File>, z.ZodCustom<Blob, Blob>]>;
5
+ videoFile: z.ZodUnion<[z.ZodInstanceOf<File>, z.ZodInstanceOf<Blob>]>;
6
6
  claim: z.ZodOptional<z.ZodObject<{
7
7
  kind: z.ZodEnum<{
8
8
  file: "file";
@@ -26,7 +26,7 @@ export declare const CreateWorkProjectAuditionVariablesSchema: z.ZodObject<{
26
26
  }>>;
27
27
  expectedOptionCount: z.ZodOptional<z.ZodNumber>;
28
28
  onProgress: z.ZodOptional<z.ZodCustom<(state: import("@ttt-productions/media-schemas").UploadState | null) => void, (state: import("@ttt-productions/media-schemas").UploadState | null) => void>>;
29
- signal: z.ZodOptional<z.ZodCustom<AbortSignal, AbortSignal>>;
29
+ signal: z.ZodOptional<z.ZodInstanceOf<AbortSignal>>;
30
30
  }, z.core.$strict>;
31
31
  export type CreateWorkProjectAuditionVariables = z.infer<typeof CreateWorkProjectAuditionVariablesSchema>;
32
32
  //# sourceMappingURL=create-work-project-audition-variables.d.ts.map
@@ -13,7 +13,7 @@ export declare const SquareStreetzPostVariablesSchema: z.ZodObject<{
13
13
  id: z.ZodString;
14
14
  placeholder: z.ZodString;
15
15
  }, z.core.$strict>>;
16
- mediaFile: z.ZodOptional<z.ZodNullable<z.ZodCustom<File, File>>>;
16
+ mediaFile: z.ZodOptional<z.ZodNullable<z.ZodInstanceOf<File>>>;
17
17
  claim: z.ZodOptional<z.ZodObject<{
18
18
  kind: z.ZodEnum<{
19
19
  file: "file";
@@ -28,7 +28,7 @@ export declare const SquareStreetzPostVariablesSchema: z.ZodObject<{
28
28
  }>;
29
29
  }, z.core.$strict>>;
30
30
  onProgress: z.ZodOptional<z.ZodCustom<(state: import("@ttt-productions/media-schemas").UploadState | null) => void, (state: import("@ttt-productions/media-schemas").UploadState | null) => void>>;
31
- signal: z.ZodOptional<z.ZodCustom<AbortSignal, AbortSignal>>;
31
+ signal: z.ZodOptional<z.ZodInstanceOf<AbortSignal>>;
32
32
  }, z.core.$strict>;
33
33
  export type SquareStreetzPostVariables = z.infer<typeof SquareStreetzPostVariablesSchema>;
34
34
  //# sourceMappingURL=square-streetz-post-variables.d.ts.map
@@ -3,7 +3,7 @@ export declare const UpdateChapterMediaVariablesSchema: z.ZodObject<{
3
3
  workProjectId: z.ZodString;
4
4
  taleId: z.ZodString;
5
5
  chapterId: z.ZodString;
6
- file: z.ZodUnion<[z.ZodCustom<File, File>, z.ZodCustom<Blob, Blob>]>;
6
+ file: z.ZodUnion<[z.ZodInstanceOf<File>, z.ZodInstanceOf<Blob>]>;
7
7
  claim: z.ZodOptional<z.ZodObject<{
8
8
  kind: z.ZodEnum<{
9
9
  file: "file";
@@ -19,7 +19,7 @@ export declare const UpdateChapterMediaVariablesSchema: z.ZodObject<{
19
19
  }, z.core.$strict>>;
20
20
  mediaKey: z.ZodLiteral<"photoAssetId">;
21
21
  onProgress: z.ZodOptional<z.ZodCustom<(state: import("@ttt-productions/media-schemas").UploadState | null) => void, (state: import("@ttt-productions/media-schemas").UploadState | null) => void>>;
22
- signal: z.ZodOptional<z.ZodCustom<AbortSignal, AbortSignal>>;
22
+ signal: z.ZodOptional<z.ZodInstanceOf<AbortSignal>>;
23
23
  }, z.core.$strict>;
24
24
  export type UpdateChapterMediaVariables = z.infer<typeof UpdateChapterMediaVariablesSchema>;
25
25
  //# sourceMappingURL=update-chapter-media-variables.d.ts.map
@@ -3,7 +3,7 @@ export declare const UpdateTelevisionEpisodeMediaVariablesSchema: z.ZodObject<{
3
3
  workProjectId: z.ZodString;
4
4
  televisionId: z.ZodString;
5
5
  episodeId: z.ZodString;
6
- file: z.ZodUnion<[z.ZodCustom<File, File>, z.ZodCustom<Blob, Blob>]>;
6
+ file: z.ZodUnion<[z.ZodInstanceOf<File>, z.ZodInstanceOf<Blob>]>;
7
7
  claim: z.ZodOptional<z.ZodObject<{
8
8
  kind: z.ZodEnum<{
9
9
  file: "file";
@@ -22,7 +22,7 @@ export declare const UpdateTelevisionEpisodeMediaVariablesSchema: z.ZodObject<{
22
22
  videoAssetId: "videoAssetId";
23
23
  }>;
24
24
  onProgress: z.ZodOptional<z.ZodCustom<(state: import("@ttt-productions/media-schemas").UploadState | null) => void, (state: import("@ttt-productions/media-schemas").UploadState | null) => void>>;
25
- signal: z.ZodOptional<z.ZodCustom<AbortSignal, AbortSignal>>;
25
+ signal: z.ZodOptional<z.ZodInstanceOf<AbortSignal>>;
26
26
  }, z.core.$strict>;
27
27
  export type UpdateTelevisionEpisodeMediaVariables = z.infer<typeof UpdateTelevisionEpisodeMediaVariablesSchema>;
28
28
  //# sourceMappingURL=update-episode-media-variables.d.ts.map
@@ -2,7 +2,7 @@ import { z } from 'zod';
2
2
  export declare const UpdateTaleCoverPhotoVariablesSchema: z.ZodObject<{
3
3
  workProjectId: z.ZodString;
4
4
  taleId: z.ZodString;
5
- file: z.ZodUnion<[z.ZodCustom<File, File>, z.ZodCustom<Blob, Blob>]>;
5
+ file: z.ZodUnion<[z.ZodInstanceOf<File>, z.ZodInstanceOf<Blob>]>;
6
6
  claim: z.ZodOptional<z.ZodObject<{
7
7
  kind: z.ZodEnum<{
8
8
  file: "file";
@@ -22,7 +22,7 @@ export declare const UpdateTaleCoverPhotoVariablesSchema: z.ZodObject<{
22
22
  cinematic: "cinematic";
23
23
  }>;
24
24
  onProgress: z.ZodOptional<z.ZodCustom<(state: import("@ttt-productions/media-schemas").UploadState | null) => void, (state: import("@ttt-productions/media-schemas").UploadState | null) => void>>;
25
- signal: z.ZodOptional<z.ZodCustom<AbortSignal, AbortSignal>>;
25
+ signal: z.ZodOptional<z.ZodInstanceOf<AbortSignal>>;
26
26
  }, z.core.$strict>;
27
27
  export type UpdateTaleCoverPhotoVariables = z.infer<typeof UpdateTaleCoverPhotoVariablesSchema>;
28
28
  //# sourceMappingURL=update-tale-cover-photo-variables.d.ts.map
@@ -2,7 +2,7 @@ import { z } from 'zod';
2
2
  export declare const UpdateTelevisionCoverPhotoVariablesSchema: z.ZodObject<{
3
3
  workProjectId: z.ZodString;
4
4
  televisionId: z.ZodString;
5
- file: z.ZodUnion<[z.ZodCustom<File, File>, z.ZodCustom<Blob, Blob>]>;
5
+ file: z.ZodUnion<[z.ZodInstanceOf<File>, z.ZodInstanceOf<Blob>]>;
6
6
  claim: z.ZodOptional<z.ZodObject<{
7
7
  kind: z.ZodEnum<{
8
8
  file: "file";
@@ -22,7 +22,7 @@ export declare const UpdateTelevisionCoverPhotoVariablesSchema: z.ZodObject<{
22
22
  cinematic: "cinematic";
23
23
  }>;
24
24
  onProgress: z.ZodOptional<z.ZodCustom<(state: import("@ttt-productions/media-schemas").UploadState | null) => void, (state: import("@ttt-productions/media-schemas").UploadState | null) => void>>;
25
- signal: z.ZodOptional<z.ZodCustom<AbortSignal, AbortSignal>>;
25
+ signal: z.ZodOptional<z.ZodInstanceOf<AbortSignal>>;
26
26
  }, z.core.$strict>;
27
27
  export type UpdateTelevisionCoverPhotoVariables = z.infer<typeof UpdateTelevisionCoverPhotoVariablesSchema>;
28
28
  //# sourceMappingURL=update-television-cover-photo-variables.d.ts.map
@@ -3,7 +3,7 @@ export declare const UpdateTuneTrackMediaVariablesSchema: z.ZodObject<{
3
3
  workProjectId: z.ZodString;
4
4
  tuneId: z.ZodString;
5
5
  trackId: z.ZodString;
6
- file: z.ZodUnion<[z.ZodCustom<File, File>, z.ZodCustom<Blob, Blob>]>;
6
+ file: z.ZodUnion<[z.ZodInstanceOf<File>, z.ZodInstanceOf<Blob>]>;
7
7
  claim: z.ZodOptional<z.ZodObject<{
8
8
  kind: z.ZodEnum<{
9
9
  file: "file";
@@ -22,7 +22,7 @@ export declare const UpdateTuneTrackMediaVariablesSchema: z.ZodObject<{
22
22
  audioAssetId: "audioAssetId";
23
23
  }>;
24
24
  onProgress: z.ZodOptional<z.ZodCustom<(state: import("@ttt-productions/media-schemas").UploadState | null) => void, (state: import("@ttt-productions/media-schemas").UploadState | null) => void>>;
25
- signal: z.ZodOptional<z.ZodCustom<AbortSignal, AbortSignal>>;
25
+ signal: z.ZodOptional<z.ZodInstanceOf<AbortSignal>>;
26
26
  }, z.core.$strict>;
27
27
  export type UpdateTuneTrackMediaVariables = z.infer<typeof UpdateTuneTrackMediaVariablesSchema>;
28
28
  //# sourceMappingURL=update-track-media-variables.d.ts.map
@@ -2,7 +2,7 @@ import { z } from 'zod';
2
2
  export declare const UpdateTuneCoverPhotoVariablesSchema: z.ZodObject<{
3
3
  workProjectId: z.ZodString;
4
4
  tuneId: z.ZodString;
5
- file: z.ZodUnion<[z.ZodCustom<File, File>, z.ZodCustom<Blob, Blob>]>;
5
+ file: z.ZodUnion<[z.ZodInstanceOf<File>, z.ZodInstanceOf<Blob>]>;
6
6
  claim: z.ZodOptional<z.ZodObject<{
7
7
  kind: z.ZodEnum<{
8
8
  file: "file";
@@ -22,7 +22,7 @@ export declare const UpdateTuneCoverPhotoVariablesSchema: z.ZodObject<{
22
22
  cinematic: "cinematic";
23
23
  }>;
24
24
  onProgress: z.ZodOptional<z.ZodCustom<(state: import("@ttt-productions/media-schemas").UploadState | null) => void, (state: import("@ttt-productions/media-schemas").UploadState | null) => void>>;
25
- signal: z.ZodOptional<z.ZodCustom<AbortSignal, AbortSignal>>;
25
+ signal: z.ZodOptional<z.ZodInstanceOf<AbortSignal>>;
26
26
  }, z.core.$strict>;
27
27
  export type UpdateTuneCoverPhotoVariables = z.infer<typeof UpdateTuneCoverPhotoVariablesSchema>;
28
28
  //# sourceMappingURL=update-tune-cover-photo-variables.d.ts.map
@@ -1,6 +1,6 @@
1
1
  import { z } from 'zod';
2
2
  export declare const UpdateWorkRealmCoverVariablesSchema: z.ZodObject<{
3
- file: z.ZodUnion<[z.ZodCustom<File, File>, z.ZodCustom<Blob, Blob>]>;
3
+ file: z.ZodUnion<[z.ZodInstanceOf<File>, z.ZodInstanceOf<Blob>]>;
4
4
  claim: z.ZodOptional<z.ZodObject<{
5
5
  kind: z.ZodEnum<{
6
6
  file: "file";
@@ -15,7 +15,7 @@ export declare const UpdateWorkRealmCoverVariablesSchema: z.ZodObject<{
15
15
  }>;
16
16
  }, z.core.$strict>>;
17
17
  onProgress: z.ZodOptional<z.ZodCustom<(state: import("@ttt-productions/media-schemas").UploadState | null) => void, (state: import("@ttt-productions/media-schemas").UploadState | null) => void>>;
18
- signal: z.ZodOptional<z.ZodCustom<AbortSignal, AbortSignal>>;
18
+ signal: z.ZodOptional<z.ZodInstanceOf<AbortSignal>>;
19
19
  }, z.core.$strict>;
20
20
  export type UpdateWorkRealmCoverVariables = z.infer<typeof UpdateWorkRealmCoverVariablesSchema>;
21
21
  //# sourceMappingURL=update-work-realm-cover-variables.d.ts.map
@@ -7,7 +7,7 @@ export declare const UploadConversationFileVariablesSchema: z.ZodObject<{
7
7
  kind: z.ZodLiteral<"adminSupport">;
8
8
  adminDispatchId: z.ZodString;
9
9
  }, z.core.$strict>], "kind">;
10
- file: z.ZodCustom<File, File>;
10
+ file: z.ZodInstanceOf<File>;
11
11
  claim: z.ZodOptional<z.ZodObject<{
12
12
  kind: z.ZodEnum<{
13
13
  file: "file";
@@ -22,7 +22,7 @@ export declare const UploadConversationFileVariablesSchema: z.ZodObject<{
22
22
  }>;
23
23
  }, z.core.$strict>>;
24
24
  onProgress: z.ZodOptional<z.ZodCustom<(state: import("@ttt-productions/media-schemas").UploadState | null) => void, (state: import("@ttt-productions/media-schemas").UploadState | null) => void>>;
25
- signal: z.ZodOptional<z.ZodCustom<AbortSignal, AbortSignal>>;
25
+ signal: z.ZodOptional<z.ZodInstanceOf<AbortSignal>>;
26
26
  }, z.core.$strict>;
27
27
  export type UploadConversationFileVariables = z.infer<typeof UploadConversationFileVariablesSchema>;
28
28
  //# sourceMappingURL=upload-conversation-file-variables.d.ts.map
@@ -1,6 +1,6 @@
1
1
  import { z } from 'zod';
2
2
  export declare const UploadCraftSkillVariablesSchema: z.ZodObject<{
3
- file: z.ZodUnion<[z.ZodCustom<File, File>, z.ZodCustom<Blob, Blob>]>;
3
+ file: z.ZodUnion<[z.ZodInstanceOf<File>, z.ZodInstanceOf<Blob>]>;
4
4
  claim: z.ZodOptional<z.ZodObject<{
5
5
  kind: z.ZodEnum<{
6
6
  file: "file";
@@ -15,7 +15,7 @@ export declare const UploadCraftSkillVariablesSchema: z.ZodObject<{
15
15
  }>;
16
16
  }, z.core.$strict>>;
17
17
  onProgress: z.ZodOptional<z.ZodCustom<(state: import("@ttt-productions/media-schemas").UploadState | null) => void, (state: import("@ttt-productions/media-schemas").UploadState | null) => void>>;
18
- signal: z.ZodOptional<z.ZodCustom<AbortSignal, AbortSignal>>;
18
+ signal: z.ZodOptional<z.ZodInstanceOf<AbortSignal>>;
19
19
  }, z.core.$strict>;
20
20
  export type UploadCraftSkillVariables = z.infer<typeof UploadCraftSkillVariablesSchema>;
21
21
  //# sourceMappingURL=upload-craft-skill-variables.d.ts.map
@@ -1,6 +1,6 @@
1
1
  import { z } from 'zod';
2
2
  export declare const UploadProfilePictureVariablesSchema: z.ZodObject<{
3
- file: z.ZodUnion<[z.ZodCustom<File, File>, z.ZodCustom<Blob, Blob>]>;
3
+ file: z.ZodUnion<[z.ZodInstanceOf<File>, z.ZodInstanceOf<Blob>]>;
4
4
  claim: z.ZodOptional<z.ZodObject<{
5
5
  kind: z.ZodEnum<{
6
6
  file: "file";
@@ -15,7 +15,7 @@ export declare const UploadProfilePictureVariablesSchema: z.ZodObject<{
15
15
  }>;
16
16
  }, z.core.$strict>>;
17
17
  onProgress: z.ZodOptional<z.ZodCustom<(state: import("@ttt-productions/media-schemas").UploadState | null) => void, (state: import("@ttt-productions/media-schemas").UploadState | null) => void>>;
18
- signal: z.ZodOptional<z.ZodCustom<AbortSignal, AbortSignal>>;
18
+ signal: z.ZodOptional<z.ZodInstanceOf<AbortSignal>>;
19
19
  }, z.core.$strict>;
20
20
  export type UploadProfilePictureVariables = z.infer<typeof UploadProfilePictureVariablesSchema>;
21
21
  //# sourceMappingURL=upload-profile-picture-variables.d.ts.map
@@ -52,7 +52,7 @@ export declare const UploadSystemContentVariablesSchema: z.ZodObject<{
52
52
  "rules-realm": "rules-realm";
53
53
  "rules-artisan-agreements": "rules-artisan-agreements";
54
54
  }>;
55
- videoFile: z.ZodUnion<[z.ZodCustom<File, File>, z.ZodCustom<Blob, Blob>]>;
55
+ videoFile: z.ZodUnion<[z.ZodInstanceOf<File>, z.ZodInstanceOf<Blob>]>;
56
56
  claim: z.ZodOptional<z.ZodObject<{
57
57
  kind: z.ZodEnum<{
58
58
  file: "file";
@@ -67,7 +67,7 @@ export declare const UploadSystemContentVariablesSchema: z.ZodObject<{
67
67
  }>;
68
68
  }, z.core.$strict>>;
69
69
  onProgress: z.ZodOptional<z.ZodCustom<(state: import("@ttt-productions/media-schemas").UploadState | null) => void, (state: import("@ttt-productions/media-schemas").UploadState | null) => void>>;
70
- signal: z.ZodOptional<z.ZodCustom<AbortSignal, AbortSignal>>;
70
+ signal: z.ZodOptional<z.ZodInstanceOf<AbortSignal>>;
71
71
  }, z.core.$strict>;
72
72
  export type UploadSystemContentVariables = z.infer<typeof UploadSystemContentVariablesSchema>;
73
73
  //# sourceMappingURL=upload-system-content-variables.d.ts.map
@@ -2,7 +2,7 @@ import { z } from 'zod';
2
2
  export declare const UploadWorkFileVariablesSchema: z.ZodObject<{
3
3
  workProjectId: z.ZodString;
4
4
  folderId: z.ZodString;
5
- file: z.ZodCustom<File, File>;
5
+ file: z.ZodInstanceOf<File>;
6
6
  claim: z.ZodOptional<z.ZodObject<{
7
7
  kind: z.ZodEnum<{
8
8
  file: "file";
@@ -17,7 +17,7 @@ export declare const UploadWorkFileVariablesSchema: z.ZodObject<{
17
17
  }>;
18
18
  }, z.core.$strict>>;
19
19
  onProgress: z.ZodOptional<z.ZodCustom<(state: import("@ttt-productions/media-schemas").UploadState | null) => void, (state: import("@ttt-productions/media-schemas").UploadState | null) => void>>;
20
- signal: z.ZodOptional<z.ZodCustom<AbortSignal, AbortSignal>>;
20
+ signal: z.ZodOptional<z.ZodInstanceOf<AbortSignal>>;
21
21
  }, z.core.$strict>;
22
22
  export type UploadWorkFileVariables = z.infer<typeof UploadWorkFileVariablesSchema>;
23
23
  //# sourceMappingURL=upload-work-file-variables.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ttt-productions/ttt-core",
3
- "version": "0.79.116",
3
+ "version": "0.79.117",
4
4
  "description": "Core types, Firestore path constants, and shared constants for TTT Productions",
5
5
  "repository": {
6
6
  "type": "git",
@@ -73,14 +73,14 @@
73
73
  "test": "vitest run"
74
74
  },
75
75
  "dependencies": {
76
- "@ttt-productions/audit-core": "^0.7.4",
77
- "@ttt-productions/chat-schemas": "^0.10.10",
78
- "@ttt-productions/edge-protocol-core": "^0.1.14",
76
+ "@ttt-productions/audit-core": "^0.7.5",
77
+ "@ttt-productions/chat-schemas": "^0.10.11",
78
+ "@ttt-productions/edge-protocol-core": "^0.1.15",
79
79
  "@ttt-productions/input-format-core": "^0.1.3",
80
- "@ttt-productions/media-schemas": "^0.14.12",
81
- "@ttt-productions/notification-core": "^0.15.19",
82
- "@ttt-productions/report-core": "^0.16.23",
83
- "zod": "^4.4.3"
80
+ "@ttt-productions/media-schemas": "^0.14.13",
81
+ "@ttt-productions/notification-core": "^0.15.20",
82
+ "@ttt-productions/report-core": "^0.16.24",
83
+ "zod": "^4.6.7"
84
84
  },
85
85
  "author": "DJ (TTT Productions)",
86
86
  "license": "MIT"