@ttt-productions/ttt-core 0.78.26 → 0.79.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/capabilities/capability-registry.d.ts +2 -2
- package/dist/capabilities/capability-registry.d.ts.map +1 -1
- package/dist/capabilities/capability-registry.js +5 -5
- package/dist/capabilities/capability-registry.js.map +1 -1
- package/dist/capabilities/messaging-surfaces.d.ts.map +1 -1
- package/dist/capabilities/messaging-surfaces.js +7 -3
- package/dist/capabilities/messaging-surfaces.js.map +1 -1
- package/dist/constants/app-mode.d.ts +9 -0
- package/dist/constants/app-mode.d.ts.map +1 -1
- package/dist/constants/app-mode.js +17 -0
- package/dist/constants/app-mode.js.map +1 -1
- package/dist/constants/business-content.d.ts +0 -2
- package/dist/constants/business-content.d.ts.map +1 -1
- package/dist/constants/business-content.js +0 -2
- package/dist/constants/business-content.js.map +1 -1
- package/dist/constants/conversation-files.d.ts +7 -0
- package/dist/constants/conversation-files.d.ts.map +1 -0
- package/dist/constants/conversation-files.js +14 -0
- package/dist/constants/conversation-files.js.map +1 -0
- package/dist/constants/index.d.ts +1 -0
- package/dist/constants/index.d.ts.map +1 -1
- package/dist/constants/index.js +1 -0
- package/dist/constants/index.js.map +1 -1
- package/dist/doc-schemas/chat-sync.d.ts +0 -4
- package/dist/doc-schemas/chat-sync.d.ts.map +1 -1
- package/dist/doc-schemas/chat-sync.js +2 -9
- package/dist/doc-schemas/chat-sync.js.map +1 -1
- package/dist/doc-schemas/commissions.d.ts +2 -2
- package/dist/doc-schemas/media-activation-jobs.d.ts +3 -8
- package/dist/doc-schemas/media-activation-jobs.d.ts.map +1 -1
- package/dist/doc-schemas/media-assets.d.ts +22 -34
- package/dist/doc-schemas/media-assets.d.ts.map +1 -1
- package/dist/doc-schemas/media-assets.js +24 -21
- package/dist/doc-schemas/media-assets.js.map +1 -1
- package/dist/doc-schemas/messaging.d.ts +41 -19
- package/dist/doc-schemas/messaging.d.ts.map +1 -1
- package/dist/doc-schemas/messaging.js +64 -4
- package/dist/doc-schemas/messaging.js.map +1 -1
- package/dist/doc-schemas/moderation.d.ts +1 -1
- package/dist/doc-schemas/ncii/allegations.d.ts +21 -9
- package/dist/doc-schemas/ncii/allegations.d.ts.map +1 -1
- package/dist/doc-schemas/ncii/cases.d.ts +10 -4
- package/dist/doc-schemas/ncii/cases.d.ts.map +1 -1
- package/dist/doc-schemas/ncii/holds.d.ts +10 -4
- package/dist/doc-schemas/ncii/holds.d.ts.map +1 -1
- package/dist/doc-schemas/ncii/removal.d.ts +13 -7
- package/dist/doc-schemas/ncii/removal.d.ts.map +1 -1
- package/dist/doc-schemas/ncii/requests.d.ts +11 -5
- package/dist/doc-schemas/ncii/requests.d.ts.map +1 -1
- package/dist/doc-schemas/registry.d.ts +148 -119
- package/dist/doc-schemas/registry.d.ts.map +1 -1
- package/dist/doc-schemas/registry.js +5 -1
- package/dist/doc-schemas/registry.js.map +1 -1
- package/dist/doc-schemas/safety/case.d.ts +10 -4
- package/dist/doc-schemas/safety/case.d.ts.map +1 -1
- package/dist/doc-schemas/safety/case.js +4 -3
- package/dist/doc-schemas/safety/case.js.map +1 -1
- package/dist/doc-schemas/safety/evidence.d.ts +2 -3
- package/dist/doc-schemas/safety/evidence.d.ts.map +1 -1
- package/dist/doc-schemas/safety/foundation.d.ts +15 -8
- package/dist/doc-schemas/safety/foundation.d.ts.map +1 -1
- package/dist/doc-schemas/safety/foundation.js +32 -6
- package/dist/doc-schemas/safety/foundation.js.map +1 -1
- package/dist/doc-schemas/safety/holds.d.ts +1 -1
- package/dist/doc-schemas/safety/report.d.ts +25 -10
- package/dist/doc-schemas/safety/report.d.ts.map +1 -1
- package/dist/doc-schemas/safety/report.js +2 -1
- package/dist/doc-schemas/safety/report.js.map +1 -1
- package/dist/ids/chat-ids.d.ts +1 -2
- package/dist/ids/chat-ids.d.ts.map +1 -1
- package/dist/ids/chat-ids.js +1 -4
- package/dist/ids/chat-ids.js.map +1 -1
- package/dist/media/conversation-file-ref.d.ts +13 -0
- package/dist/media/conversation-file-ref.d.ts.map +1 -0
- package/dist/media/conversation-file-ref.js +37 -0
- package/dist/media/conversation-file-ref.js.map +1 -0
- package/dist/media/domain-events-admin.d.ts +1 -1
- package/dist/media/domain-events-social.d.ts +0 -7
- package/dist/media/domain-events-social.d.ts.map +1 -1
- package/dist/media/domain-events-social.js +2 -13
- package/dist/media/domain-events-social.js.map +1 -1
- package/dist/media/domain-events.d.ts +1 -7
- package/dist/media/domain-events.d.ts.map +1 -1
- package/dist/media/domain-events.js +1 -2
- package/dist/media/domain-events.js.map +1 -1
- package/dist/media/edge-serving-contract.d.ts +6 -11
- package/dist/media/edge-serving-contract.d.ts.map +1 -1
- package/dist/media/edge-serving-contract.js.map +1 -1
- package/dist/media/file-origin.d.ts +1 -1
- package/dist/media/file-origin.d.ts.map +1 -1
- package/dist/media/file-origin.js +6 -1
- package/dist/media/file-origin.js.map +1 -1
- package/dist/media/index.d.ts +1 -0
- package/dist/media/index.d.ts.map +1 -1
- package/dist/media/index.js +1 -0
- package/dist/media/index.js.map +1 -1
- package/dist/media/pending-media.d.ts +25 -79
- package/dist/media/pending-media.d.ts.map +1 -1
- package/dist/media/photodna-coverage.js +1 -1
- package/dist/media/photodna-coverage.js.map +1 -1
- package/dist/media/start-upload.d.ts +1 -1
- package/dist/media/target-info.d.ts +6 -26
- package/dist/media/target-info.d.ts.map +1 -1
- package/dist/media/target-info.js +9 -35
- package/dist/media/target-info.js.map +1 -1
- package/dist/media/ttt-media-specs.d.ts.map +1 -1
- package/dist/media/ttt-media-specs.js +8 -5
- package/dist/media/ttt-media-specs.js.map +1 -1
- package/dist/media/upload-tray-display.js +1 -1
- package/dist/media/upload-tray-display.js.map +1 -1
- package/dist/paths/collection-refs.d.ts +2 -0
- package/dist/paths/collection-refs.d.ts.map +1 -1
- package/dist/paths/collection-refs.js +4 -0
- package/dist/paths/collection-refs.js.map +1 -1
- package/dist/paths/collections.d.ts +1 -0
- package/dist/paths/collections.d.ts.map +1 -1
- package/dist/paths/collections.js +7 -0
- package/dist/paths/collections.js.map +1 -1
- package/dist/paths/path-builders.d.ts +2 -0
- package/dist/paths/path-builders.d.ts.map +1 -1
- package/dist/paths/path-builders.js +5 -0
- package/dist/paths/path-builders.js.map +1 -1
- package/dist/report/report-config-values.d.ts +3 -1
- package/dist/report/report-config-values.d.ts.map +1 -1
- package/dist/report/report-config-values.js +5 -1
- package/dist/report/report-config-values.js.map +1 -1
- package/dist/safety/ncii-intake-derivations.d.ts.map +1 -1
- package/dist/safety/ncii-intake-derivations.js +17 -5
- package/dist/safety/ncii-intake-derivations.js.map +1 -1
- package/dist/schemas/admin.d.ts +3 -0
- package/dist/schemas/admin.d.ts.map +1 -1
- package/dist/schemas/admin.js +5 -0
- package/dist/schemas/admin.js.map +1 -1
- package/dist/schemas/chat.js +3 -3
- package/dist/schemas/chat.js.map +1 -1
- package/dist/schemas/commissions.d.ts +1 -1
- package/dist/schemas/media.d.ts +0 -4
- package/dist/schemas/media.d.ts.map +1 -1
- package/dist/schemas/media.js +5 -10
- package/dist/schemas/media.js.map +1 -1
- package/dist/schemas/ncii.d.ts +3 -0
- package/dist/schemas/ncii.d.ts.map +1 -1
- package/dist/schemas/notification.d.ts +1 -0
- package/dist/schemas/notification.d.ts.map +1 -1
- package/dist/types/audit.d.ts +1 -1
- package/dist/types/audit.d.ts.map +1 -1
- package/dist/types/audit.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"target-info.d.ts","sourceRoot":"","sources":["../../src/media/target-info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAkBnD,eAAO,MAAM,8BAA8B,iCAAwB,CAAC;AAEpE,eAAO,MAAM,+BAA+B;;;;;;;;kBAQjC,CAAC;AAKZ,eAAO,MAAM,6BAA6B;;;;;;;;;;;;kBAO/B,CAAC;AAQZ,eAAO,MAAM,0BAA0B,aAAyC,CAAC;AAGjF,eAAO,MAAM,iCAAiC;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAanC,CAAC;AAEZ,eAAO,MAAM,kCAAkC;;;kBAKpC,CAAC;AAGZ,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;kBA0BhC,CAAC;AAGZ,eAAO,MAAM,mCAAmC;;;;;;;;;;;;;;;kBAkBrC,CAAC;AAEZ,eAAO,MAAM,6BAA6B;;kBAI/B,CAAC;AAqBZ,eAAO,MAAM,sCAAsC;;;;;;;;kBAAmC,CAAC;AACvF,eAAO,MAAM,sCAAsC;;;;;;;;kBAAmC,CAAC;AACvF,eAAO,MAAM,yCAAyC;;;;;;;;kBAAmC,CAAC;AAK1F,eAAO,MAAM,0BAA0B;;kBAI5B,CAAC;AAWZ,eAAO,MAAM,4BAA4B;;;;kBAM9B,CAAC;AAUZ,eAAO,MAAM,8BAA8B;;;;kBAAiC,CAAC;AAC7E,eAAO,MAAM,8BAA8B;;;;kBAAiC,CAAC;AAU7E,eAAO,MAAM,sCAAsC;;;;kBAAyC,CAAC;AAC7F,eAAO,MAAM,sCAAsC;;;;kBAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"target-info.d.ts","sourceRoot":"","sources":["../../src/media/target-info.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import { ConversationFileRefSchema } from "./conversation-file-ref.js";
|
|
2
3
|
import { MentionSchema, rejectDuplicateMentionPlaceholders } from "./atoms.js";
|
|
3
4
|
import { TRADE_PROFESSION_OPTIONS, TRADE_PROFESSION_VALUES } from "../constants/options.js";
|
|
4
5
|
import { MediaTypeSchema } from "../doc-schemas/social.js";
|
|
5
|
-
import { MAX_MENTIONS, MAX_POST_LENGTH, MAX_COMMISSION_TITLE_LENGTH, MAX_COMMISSION_DESCRIPTION_LENGTH, MAX_AUDITION_TITLE_LENGTH, MAX_AUDITION_DESCRIPTION_LENGTH, MAX_WORK_PROJECT_STAKE_SHARES, MAX_SPONSORED_AUDITION_AMOUNT_USD,
|
|
6
|
+
import { MAX_MENTIONS, MAX_POST_LENGTH, MAX_COMMISSION_TITLE_LENGTH, MAX_COMMISSION_DESCRIPTION_LENGTH, MAX_AUDITION_TITLE_LENGTH, MAX_AUDITION_DESCRIPTION_LENGTH, MAX_WORK_PROJECT_STAKE_SHARES, MAX_SPONSORED_AUDITION_AMOUNT_USD, MIN_CURATED_AUDITION_OPTIONS, MAX_CURATED_AUDITION_OPTIONS, } from "../constants/business.js";
|
|
6
7
|
export const ProfilePictureTargetInfoSchema = z.object({}).strict();
|
|
7
8
|
export const CraftSkillMediaTargetInfoSchema = z
|
|
8
9
|
.object({
|
|
@@ -168,39 +169,12 @@ const TelevisionEpisodeMediaTargetInfoSchema = z
|
|
|
168
169
|
.strict();
|
|
169
170
|
export const TelevisionEpisodePhotoTargetInfoSchema = TelevisionEpisodeMediaTargetInfoSchema;
|
|
170
171
|
export const TelevisionEpisodeVideoTargetInfoSchema = TelevisionEpisodeMediaTargetInfoSchema;
|
|
171
|
-
//
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
})
|
|
178
|
-
.strict();
|
|
179
|
-
export const ChatAttachmentTargetInfoSchema = z.discriminatedUnion('threadKind', [
|
|
180
|
-
z
|
|
181
|
-
.object({
|
|
182
|
-
threadKind: z.literal('guildChatChannel'),
|
|
183
|
-
workProjectId: z.string().min(1),
|
|
184
|
-
guildChatChannelId: z.string().min(1),
|
|
185
|
-
replyTo: ChatReplyToSchema.optional(),
|
|
186
|
-
})
|
|
187
|
-
.strict(),
|
|
188
|
-
z
|
|
189
|
-
.object({
|
|
190
|
-
threadKind: z.literal('guildInvite'),
|
|
191
|
-
guildInviteId: z.string().min(1),
|
|
192
|
-
replyTo: ChatReplyToSchema.optional(),
|
|
193
|
-
})
|
|
194
|
-
.strict(),
|
|
195
|
-
z
|
|
196
|
-
.object({
|
|
197
|
-
threadKind: z.literal('adminSupport'),
|
|
198
|
-
adminDispatchId: z.string().min(1),
|
|
199
|
-
isUserReply: z.boolean(),
|
|
200
|
-
replyTo: ChatReplyToSchema.optional(),
|
|
201
|
-
})
|
|
202
|
-
.strict(),
|
|
203
|
-
]);
|
|
172
|
+
// conversation-file: STRICT — carries the ConversationFileRef and NOTHING else.
|
|
173
|
+
// No message text, no replyTo, no message id, no isUserReply: a Conversation File
|
|
174
|
+
// is never embedded in, sequenced with, or mutated through a chat message. Extra
|
|
175
|
+
// or mixed scope identifiers (e.g. a guildInviteId alongside an adminDispatchId,
|
|
176
|
+
// or a guildChatChannelId) fail the parse.
|
|
177
|
+
export const ConversationFileTargetInfoSchema = ConversationFileRefSchema;
|
|
204
178
|
export const WorkAssetTargetInfoSchema = z
|
|
205
179
|
.object({
|
|
206
180
|
workProjectId: z.string().min(1),
|
|
@@ -238,7 +212,7 @@ export function parseTargetInfo(fileOrigin, raw) {
|
|
|
238
212
|
case 'tune-track-audio': return TuneTrackAudioTargetInfoSchema.parse(raw);
|
|
239
213
|
case 'television-episode-photo': return TelevisionEpisodePhotoTargetInfoSchema.parse(raw);
|
|
240
214
|
case 'television-episode-video': return TelevisionEpisodeVideoTargetInfoSchema.parse(raw);
|
|
241
|
-
case '
|
|
215
|
+
case 'conversation-file': return ConversationFileTargetInfoSchema.parse(raw);
|
|
242
216
|
case 'work-asset': return WorkAssetTargetInfoSchema.parse(raw);
|
|
243
217
|
case 'ncii-evidence': return NciiEvidenceTargetInfoSchema.parse(raw);
|
|
244
218
|
default: return assertNever(fileOrigin);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"target-info.js","sourceRoot":"","sources":["../../src/media/target-info.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from \"zod\";\nimport type { FileOrigin } from \"./file-origin.js\";\nimport { MentionSchema, rejectDuplicateMentionPlaceholders } from \"./atoms.js\";\nimport { TRADE_PROFESSION_OPTIONS, TRADE_PROFESSION_VALUES } from \"../constants/options.js\";\nimport { MediaTypeSchema } from \"../doc-schemas/social.js\";\nimport {\n MAX_MENTIONS,\n MAX_POST_LENGTH,\n MAX_COMMISSION_TITLE_LENGTH,\n MAX_COMMISSION_DESCRIPTION_LENGTH,\n MAX_AUDITION_TITLE_LENGTH,\n MAX_AUDITION_DESCRIPTION_LENGTH,\n MAX_WORK_PROJECT_STAKE_SHARES,\n MAX_SPONSORED_AUDITION_AMOUNT_USD,\n MAX_CHAT_REPLY_PREVIEW_LENGTH,\n MIN_CURATED_AUDITION_OPTIONS,\n MAX_CURATED_AUDITION_OPTIONS,\n} from \"../constants/business.js\";\n\nexport const ProfilePictureTargetInfoSchema = z.object({}).strict();\n\nexport const CraftSkillMediaTargetInfoSchema = z\n .object({\n // No craftSkillId: the backend mints the craft-skill doc id from the pendingMedia id;\n // a client-supplied id was dead input the processor ignored, so it is not accepted.\n // The canonical display/transport media-type family — never re-declared (ARCH-102).\n skillType: MediaTypeSchema,\n originalFileName: z.string().min(1),\n })\n .strict();\n\n// squareStreetz: mentions array of structured Mention objects. Capped at\n// MAX_MENTIONS with unique placeholders (duplicate placeholders collide at render\n// time — both tokens resolve to the later entity).\nexport const SquareStreetzTargetInfoSchema = z\n .object({\n mentions: z\n .array(MentionSchema)\n .max(MAX_MENTIONS)\n .superRefine(rejectDuplicateMentionPlaceholders),\n })\n .strict();\n\n// Per-origin text (caption) rule for the squareStreetz media-upload path. The caption\n// travels as StartUploadRequest.textContent (top-level, generic + optional) — not inside\n// targetInfo — so `startUpload` validates it with THIS schema when\n// fileOrigin === 'squareStreetz', mirroring the text-post callable's\n// CreateSquareStreetzTextPostInputSchema.textContent (min 1, max MAX_POST_LENGTH). This\n// closes the media-path gap where a caption was accepted unbounded / empty.\nexport const SquareStreetzCaptionSchema = z.string().min(1).max(MAX_POST_LENGTH);\n\n// commission-posting: full commission creation payload.\nexport const CommissionPostingTargetInfoSchema = z\n .object({\n // No commissionListingId: the backend mints the listing id server-side at publish;\n // it is not accepted from the client.\n title: z.string().min(1).max(MAX_COMMISSION_TITLE_LENGTH),\n description: z.string().max(MAX_COMMISSION_DESCRIPTION_LENGTH),\n requiredTradeProfessions: z.array(z.enum(TRADE_PROFESSION_VALUES)).max(TRADE_PROFESSION_OPTIONS.length),\n // min(1): the create core rejects 0 shares (invalid-argument) at PUBLISH — after\n // upload/transcode/moderation — so fail fast at the trust boundary instead of burning\n // the activation-job retry budget on a deterministic dead-letter.\n stakeSharesOffered: z.number().int().min(1).max(MAX_WORK_PROJECT_STAKE_SHARES),\n workProjectId: z.string().min(1),\n })\n .strict();\n\nexport const CommissionProposalTargetInfoSchema = z\n .object({\n commissionListingId: z.string().min(1),\n replyText: z.string().max(MAX_COMMISSION_DESCRIPTION_LENGTH),\n })\n .strict();\n\n// audition-prompt: workProject-owned audition creation payload (workAudition only).\nexport const AuditionPromptTargetInfoSchema = z\n .object({\n // SANCTIONED client-minted upload-batch correlation ID. A curated audition uploads\n // MULTIPLE files that must all share ONE audition id before any Audition doc exists,\n // so the client mints it and stamps every file in the batch with it. The backend must\n // treat it with create-no-overwrite semantics (first write wins; a colliding id from a\n // different actor/batch is rejected, never overwritten). This is NOT a reference to an\n // existing audition (contrast audition-entry's auditionId).\n auditionId: z.string().min(1),\n type: z.literal('workAudition'),\n title: z.string().min(1).max(MAX_AUDITION_TITLE_LENGTH),\n description: z.string().max(MAX_AUDITION_DESCRIPTION_LENGTH),\n openTill: z.number().int().positive(),\n workProjectId: z.string().min(1),\n // min(1): the create core rejects <1 shares at PUBLISH (see CommissionPosting above).\n // Optional — defaults to a floor of 1 at invite time when absent.\n stakeSharesOffered: z.number().int().min(1).max(MAX_WORK_PROJECT_STAKE_SHARES).optional(),\n // Curated vs open audition. Absent ⇒ 'open' (community replies + votes). 'curated' ⇒ the\n // creating work posts the option entries itself and users may ONLY vote (the create/reply\n // callable derives each option entry's isCreatorOption server-side and rejects community replies).\n mode: z.enum(['open', 'curated']).optional(),\n // Curated ONLY: the fixed number of creator option videos (2..8) in the atomic batch, carried from\n // the Create click through targetInfo so the create core sets it on the Audition doc and the reveal\n // coordinator knows when ALL options have landed. Required by the create core when mode==='curated'.\n expectedOptionCount: z.number().int().min(MIN_CURATED_AUDITION_OPTIONS).max(MAX_CURATED_AUDITION_OPTIONS).optional(),\n })\n .strict();\n\n// admin-audition-prompt: admin-operated featured/sponsored audition creation payload.\nexport const AdminAuditionPromptTargetInfoSchema = z\n .object({\n // SANCTIONED client-minted upload-batch correlation ID (see AuditionPromptTargetInfoSchema.\n // auditionId): a curated audition's multiple option videos share this one id before any\n // Audition doc exists; the backend uses create-no-overwrite semantics. NOT a reference to\n // an existing audition.\n auditionId: z.string().min(1),\n type: z.enum(['platformAudition', 'sponsoredAudition']),\n title: z.string().min(1).max(MAX_AUDITION_TITLE_LENGTH),\n description: z.string().max(MAX_AUDITION_DESCRIPTION_LENGTH),\n openTill: z.number().int().positive(),\n sponsoredAuditionAmountUSD: z.number().nonnegative().finite().max(MAX_SPONSORED_AUDITION_AMOUNT_USD).optional(),\n // Curated vs open (see AuditionPromptTargetInfoSchema.mode). Absent ⇒ 'open'.\n mode: z.enum(['open', 'curated']).optional(),\n // Curated ONLY: fixed number of option videos (2..8) in the atomic batch (see\n // AuditionPromptTargetInfoSchema.expectedOptionCount). Required by the create core when curated.\n expectedOptionCount: z.number().int().min(MIN_CURATED_AUDITION_OPTIONS).max(MAX_CURATED_AUDITION_OPTIONS).optional(),\n })\n .strict();\n\nexport const AuditionEntryTargetInfoSchema = z\n .object({\n auditionId: z.string().min(1),\n })\n .strict();\n\n// ───────────────────────────────────────────────────────────────────\n// HALL LIBRARY COVER target info (square / poster / cinematic).\n// All three origins share one shape. The processor uses fileOrigin to\n// pick which field on the target doc gets written (see\n// HALL_LIBRARY_TARGET_FIELDS in `hall-library-target-fields.ts`).\n//\n// itemType discriminates which parent collection — `workProjectTales` vs\n// `workProjectTunes` vs `workProjectTelevision`. fileOrigin alone does NOT\n// disambiguate this because all three cover origins target whichever\n// hallLibrary item the user is editing.\n// ───────────────────────────────────────────────────────────────────\nconst HallLibraryCoverTargetInfoSchema = z\n .object({\n workProjectId: z.string().min(1),\n itemType: z.enum(['tale', 'tune', 'television']),\n itemId: z.string().min(1),\n })\n .strict();\n\nexport const HallLibraryCoverSquareTargetInfoSchema = HallLibraryCoverTargetInfoSchema;\nexport const HallLibraryCoverPosterTargetInfoSchema = HallLibraryCoverTargetInfoSchema;\nexport const HallLibraryCoverCinematicTargetInfoSchema = HallLibraryCoverTargetInfoSchema;\n\n// realm-cover: the Realm's square cover art. The processor writes\n// `realmCoverAssetId` on workRealms/{workRealmId}. Steward-only (the upload\n// callable authorizes against the realm's workStewardUid).\nexport const RealmCoverTargetInfoSchema = z\n .object({\n workRealmId: z.string().min(1),\n })\n .strict();\n\n// ───────────────────────────────────────────────────────────────────\n// SUB-ITEM target info — one shape per item type, NOT per media kind.\n// chapter-photo uses ChapterPhotoTargetInfoSchema.\n// tune-track-photo + tune-track-audio share TuneTrackMediaTargetInfoSchema.\n// television-episode-photo + television-episode-video share TelevisionEpisodeMediaTargetInfoSchema.\n// The processor derives the doc path from these IDs via\n// PATH_BUILDERS.taleChapter / .tuneTrack / .televisionEpisode, and derives the\n// field name from fileOrigin via HALL_LIBRARY_TARGET_FIELDS.\n// ───────────────────────────────────────────────────────────────────\nexport const ChapterPhotoTargetInfoSchema = z\n .object({\n workProjectId: z.string().min(1),\n taleId: z.string().min(1),\n chapterId: z.string().min(1),\n })\n .strict();\n\nconst TuneTrackMediaTargetInfoSchema = z\n .object({\n workProjectId: z.string().min(1),\n tuneId: z.string().min(1),\n trackId: z.string().min(1),\n })\n .strict();\n\nexport const TuneTrackPhotoTargetInfoSchema = TuneTrackMediaTargetInfoSchema;\nexport const TuneTrackAudioTargetInfoSchema = TuneTrackMediaTargetInfoSchema;\n\nconst TelevisionEpisodeMediaTargetInfoSchema = z\n .object({\n workProjectId: z.string().min(1),\n televisionId: z.string().min(1),\n episodeId: z.string().min(1),\n })\n .strict();\n\nexport const TelevisionEpisodePhotoTargetInfoSchema = TelevisionEpisodeMediaTargetInfoSchema;\nexport const TelevisionEpisodeVideoTargetInfoSchema = TelevisionEpisodeMediaTargetInfoSchema;\n\n// guild-chat-message-attachment: discriminated by threadKind.\nconst ChatReplyToSchema = z\n .object({\n messageId: z.string().min(1),\n senderId: z.string().min(1),\n messagePreview: z.string().max(MAX_CHAT_REPLY_PREVIEW_LENGTH),\n })\n .strict();\n\nexport const ChatAttachmentTargetInfoSchema = z.discriminatedUnion('threadKind', [\n z\n .object({\n threadKind: z.literal('guildChatChannel'),\n workProjectId: z.string().min(1),\n guildChatChannelId: z.string().min(1),\n replyTo: ChatReplyToSchema.optional(),\n })\n .strict(),\n z\n .object({\n threadKind: z.literal('guildInvite'),\n guildInviteId: z.string().min(1),\n replyTo: ChatReplyToSchema.optional(),\n })\n .strict(),\n z\n .object({\n threadKind: z.literal('adminSupport'),\n adminDispatchId: z.string().min(1),\n isUserReply: z.boolean(),\n replyTo: ChatReplyToSchema.optional(),\n })\n .strict(),\n]);\n\nexport const WorkAssetTargetInfoSchema = z\n .object({\n workProjectId: z.string().min(1),\n // The folder the file is uploaded INTO (S7 folder system). Custom folders gate\n // upload by trade profession; the default folder accepts any active guildmate.\n folderId: z.string().min(1),\n })\n .strict();\n\n// ---- type aliases ----\n\nexport type ProfilePictureTargetInfo = z.infer<typeof ProfilePictureTargetInfoSchema>;\nexport type CraftSkillMediaTargetInfo = z.infer<typeof CraftSkillMediaTargetInfoSchema>;\nexport type SquareStreetzTargetInfo = z.infer<typeof SquareStreetzTargetInfoSchema>;\nexport type CommissionPostingTargetInfo = z.infer<typeof CommissionPostingTargetInfoSchema>;\nexport type CommissionProposalTargetInfo = z.infer<typeof CommissionProposalTargetInfoSchema>;\nexport type AuditionPromptTargetInfo = z.infer<typeof AuditionPromptTargetInfoSchema>;\nexport type AdminAuditionPromptTargetInfo = z.infer<typeof AdminAuditionPromptTargetInfoSchema>;\nexport type AuditionEntryTargetInfo = z.infer<typeof AuditionEntryTargetInfoSchema>;\nexport type HallLibraryCoverSquareTargetInfo = z.infer<typeof HallLibraryCoverSquareTargetInfoSchema>;\nexport type HallLibraryCoverPosterTargetInfo = z.infer<typeof HallLibraryCoverPosterTargetInfoSchema>;\nexport type HallLibraryCoverCinematicTargetInfo = z.infer<typeof HallLibraryCoverCinematicTargetInfoSchema>;\nexport type RealmCoverTargetInfo = z.infer<typeof RealmCoverTargetInfoSchema>;\nexport type ChapterPhotoTargetInfo = z.infer<typeof ChapterPhotoTargetInfoSchema>;\nexport type TuneTrackPhotoTargetInfo = z.infer<typeof TuneTrackPhotoTargetInfoSchema>;\nexport type TuneTrackAudioTargetInfo = z.infer<typeof TuneTrackAudioTargetInfoSchema>;\nexport type TelevisionEpisodePhotoTargetInfo = z.infer<typeof TelevisionEpisodePhotoTargetInfoSchema>;\nexport type TelevisionEpisodeVideoTargetInfo = z.infer<typeof TelevisionEpisodeVideoTargetInfoSchema>;\nexport type ChatAttachmentTargetInfo = z.infer<typeof ChatAttachmentTargetInfoSchema>;\nexport type WorkAssetTargetInfo = z.infer<typeof WorkAssetTargetInfoSchema>;\n\n// ncii-evidence: ties the uploaded evidence to a take-it-down request by its\n// public reference. The processor attaches the evidence record to that request.\nexport const NciiEvidenceTargetInfoSchema = z\n .object({\n requestReference: z.string().min(1),\n })\n .strict();\nexport type NciiEvidenceTargetInfo = z.infer<typeof NciiEvidenceTargetInfoSchema>;\n\n// Mapped type: given a FileOrigin literal, returns its targetInfo shape.\nexport type TargetInfoFor<O extends FileOrigin> =\n O extends 'profile-picture' ? ProfilePictureTargetInfo\n : O extends 'craft-skill-media' ? CraftSkillMediaTargetInfo\n : O extends 'squareStreetz' ? SquareStreetzTargetInfo\n : O extends 'commission-posting' ? CommissionPostingTargetInfo\n : O extends 'commission-proposal' ? CommissionProposalTargetInfo\n : O extends 'audition-prompt' ? AuditionPromptTargetInfo\n : O extends 'admin-audition-prompt' ? AdminAuditionPromptTargetInfo\n : O extends 'audition-entry' ? AuditionEntryTargetInfo\n : O extends 'hallLibrary-cover-square' ? HallLibraryCoverSquareTargetInfo\n : O extends 'hallLibrary-cover-poster' ? HallLibraryCoverPosterTargetInfo\n : O extends 'hallLibrary-cover-cinematic' ? HallLibraryCoverCinematicTargetInfo\n : O extends 'realm-cover' ? RealmCoverTargetInfo\n : O extends 'chapter-photo' ? ChapterPhotoTargetInfo\n : O extends 'tune-track-photo' ? TuneTrackPhotoTargetInfo\n : O extends 'tune-track-audio' ? TuneTrackAudioTargetInfo\n : O extends 'television-episode-photo' ? TelevisionEpisodePhotoTargetInfo\n : O extends 'television-episode-video' ? TelevisionEpisodeVideoTargetInfo\n : O extends 'guild-chat-message-attachment' ? ChatAttachmentTargetInfo\n : O extends 'work-asset' ? WorkAssetTargetInfo\n : O extends 'ncii-evidence' ? NciiEvidenceTargetInfo\n : never;\n\nfunction assertNever(x: never): never {\n throw new Error(`Unexpected fileOrigin: ${String(x)}`);\n}\n\nexport function parseTargetInfo<O extends FileOrigin>(\n fileOrigin: O,\n raw: unknown\n): TargetInfoFor<O> {\n switch (fileOrigin) {\n case 'profile-picture': return ProfilePictureTargetInfoSchema.parse(raw) as TargetInfoFor<O>;\n case 'craft-skill-media': return CraftSkillMediaTargetInfoSchema.parse(raw) as TargetInfoFor<O>;\n case 'squareStreetz': return SquareStreetzTargetInfoSchema.parse(raw) as TargetInfoFor<O>;\n case 'commission-posting': return CommissionPostingTargetInfoSchema.parse(raw) as TargetInfoFor<O>;\n case 'commission-proposal': return CommissionProposalTargetInfoSchema.parse(raw) as TargetInfoFor<O>;\n case 'audition-prompt': return AuditionPromptTargetInfoSchema.parse(raw) as TargetInfoFor<O>;\n case 'admin-audition-prompt': return AdminAuditionPromptTargetInfoSchema.parse(raw) as TargetInfoFor<O>;\n case 'audition-entry': return AuditionEntryTargetInfoSchema.parse(raw) as TargetInfoFor<O>;\n case 'hallLibrary-cover-square': return HallLibraryCoverSquareTargetInfoSchema.parse(raw) as TargetInfoFor<O>;\n case 'hallLibrary-cover-poster': return HallLibraryCoverPosterTargetInfoSchema.parse(raw) as TargetInfoFor<O>;\n case 'hallLibrary-cover-cinematic': return HallLibraryCoverCinematicTargetInfoSchema.parse(raw) as TargetInfoFor<O>;\n case 'realm-cover': return RealmCoverTargetInfoSchema.parse(raw) as TargetInfoFor<O>;\n case 'chapter-photo': return ChapterPhotoTargetInfoSchema.parse(raw) as TargetInfoFor<O>;\n case 'tune-track-photo': return TuneTrackPhotoTargetInfoSchema.parse(raw) as TargetInfoFor<O>;\n case 'tune-track-audio': return TuneTrackAudioTargetInfoSchema.parse(raw) as TargetInfoFor<O>;\n case 'television-episode-photo': return TelevisionEpisodePhotoTargetInfoSchema.parse(raw) as TargetInfoFor<O>;\n case 'television-episode-video': return TelevisionEpisodeVideoTargetInfoSchema.parse(raw) as TargetInfoFor<O>;\n case 'guild-chat-message-attachment': return ChatAttachmentTargetInfoSchema.parse(raw) as TargetInfoFor<O>;\n case 'work-asset': return WorkAssetTargetInfoSchema.parse(raw) as TargetInfoFor<O>;\n case 'ncii-evidence': return NciiEvidenceTargetInfoSchema.parse(raw) as TargetInfoFor<O>;\n default: return assertNever(fileOrigin);\n }\n}\n\n\n\n\n"]}
|
|
1
|
+
{"version":3,"file":"target-info.js","sourceRoot":"","sources":["../../src/media/target-info.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from \"zod\";\nimport type { FileOrigin } from \"./file-origin.js\";\nimport { ConversationFileRefSchema } from \"./conversation-file-ref.js\";\nimport { MentionSchema, rejectDuplicateMentionPlaceholders } from \"./atoms.js\";\nimport { TRADE_PROFESSION_OPTIONS, TRADE_PROFESSION_VALUES } from \"../constants/options.js\";\nimport { MediaTypeSchema } from \"../doc-schemas/social.js\";\nimport {\n MAX_MENTIONS,\n MAX_POST_LENGTH,\n MAX_COMMISSION_TITLE_LENGTH,\n MAX_COMMISSION_DESCRIPTION_LENGTH,\n MAX_AUDITION_TITLE_LENGTH,\n MAX_AUDITION_DESCRIPTION_LENGTH,\n MAX_WORK_PROJECT_STAKE_SHARES,\n MAX_SPONSORED_AUDITION_AMOUNT_USD,\n MIN_CURATED_AUDITION_OPTIONS,\n MAX_CURATED_AUDITION_OPTIONS,\n} from \"../constants/business.js\";\n\nexport const ProfilePictureTargetInfoSchema = z.object({}).strict();\n\nexport const CraftSkillMediaTargetInfoSchema = z\n .object({\n // No craftSkillId: the backend mints the craft-skill doc id from the pendingMedia id;\n // a client-supplied id was dead input the processor ignored, so it is not accepted.\n // The canonical display/transport media-type family — never re-declared (ARCH-102).\n skillType: MediaTypeSchema,\n originalFileName: z.string().min(1),\n })\n .strict();\n\n// squareStreetz: mentions array of structured Mention objects. Capped at\n// MAX_MENTIONS with unique placeholders (duplicate placeholders collide at render\n// time — both tokens resolve to the later entity).\nexport const SquareStreetzTargetInfoSchema = z\n .object({\n mentions: z\n .array(MentionSchema)\n .max(MAX_MENTIONS)\n .superRefine(rejectDuplicateMentionPlaceholders),\n })\n .strict();\n\n// Per-origin text (caption) rule for the squareStreetz media-upload path. The caption\n// travels as StartUploadRequest.textContent (top-level, generic + optional) — not inside\n// targetInfo — so `startUpload` validates it with THIS schema when\n// fileOrigin === 'squareStreetz', mirroring the text-post callable's\n// CreateSquareStreetzTextPostInputSchema.textContent (min 1, max MAX_POST_LENGTH). This\n// closes the media-path gap where a caption was accepted unbounded / empty.\nexport const SquareStreetzCaptionSchema = z.string().min(1).max(MAX_POST_LENGTH);\n\n// commission-posting: full commission creation payload.\nexport const CommissionPostingTargetInfoSchema = z\n .object({\n // No commissionListingId: the backend mints the listing id server-side at publish;\n // it is not accepted from the client.\n title: z.string().min(1).max(MAX_COMMISSION_TITLE_LENGTH),\n description: z.string().max(MAX_COMMISSION_DESCRIPTION_LENGTH),\n requiredTradeProfessions: z.array(z.enum(TRADE_PROFESSION_VALUES)).max(TRADE_PROFESSION_OPTIONS.length),\n // min(1): the create core rejects 0 shares (invalid-argument) at PUBLISH — after\n // upload/transcode/moderation — so fail fast at the trust boundary instead of burning\n // the activation-job retry budget on a deterministic dead-letter.\n stakeSharesOffered: z.number().int().min(1).max(MAX_WORK_PROJECT_STAKE_SHARES),\n workProjectId: z.string().min(1),\n })\n .strict();\n\nexport const CommissionProposalTargetInfoSchema = z\n .object({\n commissionListingId: z.string().min(1),\n replyText: z.string().max(MAX_COMMISSION_DESCRIPTION_LENGTH),\n })\n .strict();\n\n// audition-prompt: workProject-owned audition creation payload (workAudition only).\nexport const AuditionPromptTargetInfoSchema = z\n .object({\n // SANCTIONED client-minted upload-batch correlation ID. A curated audition uploads\n // MULTIPLE files that must all share ONE audition id before any Audition doc exists,\n // so the client mints it and stamps every file in the batch with it. The backend must\n // treat it with create-no-overwrite semantics (first write wins; a colliding id from a\n // different actor/batch is rejected, never overwritten). This is NOT a reference to an\n // existing audition (contrast audition-entry's auditionId).\n auditionId: z.string().min(1),\n type: z.literal('workAudition'),\n title: z.string().min(1).max(MAX_AUDITION_TITLE_LENGTH),\n description: z.string().max(MAX_AUDITION_DESCRIPTION_LENGTH),\n openTill: z.number().int().positive(),\n workProjectId: z.string().min(1),\n // min(1): the create core rejects <1 shares at PUBLISH (see CommissionPosting above).\n // Optional — defaults to a floor of 1 at invite time when absent.\n stakeSharesOffered: z.number().int().min(1).max(MAX_WORK_PROJECT_STAKE_SHARES).optional(),\n // Curated vs open audition. Absent ⇒ 'open' (community replies + votes). 'curated' ⇒ the\n // creating work posts the option entries itself and users may ONLY vote (the create/reply\n // callable derives each option entry's isCreatorOption server-side and rejects community replies).\n mode: z.enum(['open', 'curated']).optional(),\n // Curated ONLY: the fixed number of creator option videos (2..8) in the atomic batch, carried from\n // the Create click through targetInfo so the create core sets it on the Audition doc and the reveal\n // coordinator knows when ALL options have landed. Required by the create core when mode==='curated'.\n expectedOptionCount: z.number().int().min(MIN_CURATED_AUDITION_OPTIONS).max(MAX_CURATED_AUDITION_OPTIONS).optional(),\n })\n .strict();\n\n// admin-audition-prompt: admin-operated featured/sponsored audition creation payload.\nexport const AdminAuditionPromptTargetInfoSchema = z\n .object({\n // SANCTIONED client-minted upload-batch correlation ID (see AuditionPromptTargetInfoSchema.\n // auditionId): a curated audition's multiple option videos share this one id before any\n // Audition doc exists; the backend uses create-no-overwrite semantics. NOT a reference to\n // an existing audition.\n auditionId: z.string().min(1),\n type: z.enum(['platformAudition', 'sponsoredAudition']),\n title: z.string().min(1).max(MAX_AUDITION_TITLE_LENGTH),\n description: z.string().max(MAX_AUDITION_DESCRIPTION_LENGTH),\n openTill: z.number().int().positive(),\n sponsoredAuditionAmountUSD: z.number().nonnegative().finite().max(MAX_SPONSORED_AUDITION_AMOUNT_USD).optional(),\n // Curated vs open (see AuditionPromptTargetInfoSchema.mode). Absent ⇒ 'open'.\n mode: z.enum(['open', 'curated']).optional(),\n // Curated ONLY: fixed number of option videos (2..8) in the atomic batch (see\n // AuditionPromptTargetInfoSchema.expectedOptionCount). Required by the create core when curated.\n expectedOptionCount: z.number().int().min(MIN_CURATED_AUDITION_OPTIONS).max(MAX_CURATED_AUDITION_OPTIONS).optional(),\n })\n .strict();\n\nexport const AuditionEntryTargetInfoSchema = z\n .object({\n auditionId: z.string().min(1),\n })\n .strict();\n\n// ───────────────────────────────────────────────────────────────────\n// HALL LIBRARY COVER target info (square / poster / cinematic).\n// All three origins share one shape. The processor uses fileOrigin to\n// pick which field on the target doc gets written (see\n// HALL_LIBRARY_TARGET_FIELDS in `hall-library-target-fields.ts`).\n//\n// itemType discriminates which parent collection — `workProjectTales` vs\n// `workProjectTunes` vs `workProjectTelevision`. fileOrigin alone does NOT\n// disambiguate this because all three cover origins target whichever\n// hallLibrary item the user is editing.\n// ───────────────────────────────────────────────────────────────────\nconst HallLibraryCoverTargetInfoSchema = z\n .object({\n workProjectId: z.string().min(1),\n itemType: z.enum(['tale', 'tune', 'television']),\n itemId: z.string().min(1),\n })\n .strict();\n\nexport const HallLibraryCoverSquareTargetInfoSchema = HallLibraryCoverTargetInfoSchema;\nexport const HallLibraryCoverPosterTargetInfoSchema = HallLibraryCoverTargetInfoSchema;\nexport const HallLibraryCoverCinematicTargetInfoSchema = HallLibraryCoverTargetInfoSchema;\n\n// realm-cover: the Realm's square cover art. The processor writes\n// `realmCoverAssetId` on workRealms/{workRealmId}. Steward-only (the upload\n// callable authorizes against the realm's workStewardUid).\nexport const RealmCoverTargetInfoSchema = z\n .object({\n workRealmId: z.string().min(1),\n })\n .strict();\n\n// ───────────────────────────────────────────────────────────────────\n// SUB-ITEM target info — one shape per item type, NOT per media kind.\n// chapter-photo uses ChapterPhotoTargetInfoSchema.\n// tune-track-photo + tune-track-audio share TuneTrackMediaTargetInfoSchema.\n// television-episode-photo + television-episode-video share TelevisionEpisodeMediaTargetInfoSchema.\n// The processor derives the doc path from these IDs via\n// PATH_BUILDERS.taleChapter / .tuneTrack / .televisionEpisode, and derives the\n// field name from fileOrigin via HALL_LIBRARY_TARGET_FIELDS.\n// ───────────────────────────────────────────────────────────────────\nexport const ChapterPhotoTargetInfoSchema = z\n .object({\n workProjectId: z.string().min(1),\n taleId: z.string().min(1),\n chapterId: z.string().min(1),\n })\n .strict();\n\nconst TuneTrackMediaTargetInfoSchema = z\n .object({\n workProjectId: z.string().min(1),\n tuneId: z.string().min(1),\n trackId: z.string().min(1),\n })\n .strict();\n\nexport const TuneTrackPhotoTargetInfoSchema = TuneTrackMediaTargetInfoSchema;\nexport const TuneTrackAudioTargetInfoSchema = TuneTrackMediaTargetInfoSchema;\n\nconst TelevisionEpisodeMediaTargetInfoSchema = z\n .object({\n workProjectId: z.string().min(1),\n televisionId: z.string().min(1),\n episodeId: z.string().min(1),\n })\n .strict();\n\nexport const TelevisionEpisodePhotoTargetInfoSchema = TelevisionEpisodeMediaTargetInfoSchema;\nexport const TelevisionEpisodeVideoTargetInfoSchema = TelevisionEpisodeMediaTargetInfoSchema;\n\n// conversation-file: STRICT — carries the ConversationFileRef and NOTHING else.\n// No message text, no replyTo, no message id, no isUserReply: a Conversation File\n// is never embedded in, sequenced with, or mutated through a chat message. Extra\n// or mixed scope identifiers (e.g. a guildInviteId alongside an adminDispatchId,\n// or a guildChatChannelId) fail the parse.\nexport const ConversationFileTargetInfoSchema = ConversationFileRefSchema;\n\nexport const WorkAssetTargetInfoSchema = z\n .object({\n workProjectId: z.string().min(1),\n // The folder the file is uploaded INTO (S7 folder system). Custom folders gate\n // upload by trade profession; the default folder accepts any active guildmate.\n folderId: z.string().min(1),\n })\n .strict();\n\n// ---- type aliases ----\n\nexport type ProfilePictureTargetInfo = z.infer<typeof ProfilePictureTargetInfoSchema>;\nexport type CraftSkillMediaTargetInfo = z.infer<typeof CraftSkillMediaTargetInfoSchema>;\nexport type SquareStreetzTargetInfo = z.infer<typeof SquareStreetzTargetInfoSchema>;\nexport type CommissionPostingTargetInfo = z.infer<typeof CommissionPostingTargetInfoSchema>;\nexport type CommissionProposalTargetInfo = z.infer<typeof CommissionProposalTargetInfoSchema>;\nexport type AuditionPromptTargetInfo = z.infer<typeof AuditionPromptTargetInfoSchema>;\nexport type AdminAuditionPromptTargetInfo = z.infer<typeof AdminAuditionPromptTargetInfoSchema>;\nexport type AuditionEntryTargetInfo = z.infer<typeof AuditionEntryTargetInfoSchema>;\nexport type HallLibraryCoverSquareTargetInfo = z.infer<typeof HallLibraryCoverSquareTargetInfoSchema>;\nexport type HallLibraryCoverPosterTargetInfo = z.infer<typeof HallLibraryCoverPosterTargetInfoSchema>;\nexport type HallLibraryCoverCinematicTargetInfo = z.infer<typeof HallLibraryCoverCinematicTargetInfoSchema>;\nexport type RealmCoverTargetInfo = z.infer<typeof RealmCoverTargetInfoSchema>;\nexport type ChapterPhotoTargetInfo = z.infer<typeof ChapterPhotoTargetInfoSchema>;\nexport type TuneTrackPhotoTargetInfo = z.infer<typeof TuneTrackPhotoTargetInfoSchema>;\nexport type TuneTrackAudioTargetInfo = z.infer<typeof TuneTrackAudioTargetInfoSchema>;\nexport type TelevisionEpisodePhotoTargetInfo = z.infer<typeof TelevisionEpisodePhotoTargetInfoSchema>;\nexport type TelevisionEpisodeVideoTargetInfo = z.infer<typeof TelevisionEpisodeVideoTargetInfoSchema>;\nexport type ConversationFileTargetInfo = z.infer<typeof ConversationFileTargetInfoSchema>;\nexport type WorkAssetTargetInfo = z.infer<typeof WorkAssetTargetInfoSchema>;\n\n// ncii-evidence: ties the uploaded evidence to a take-it-down request by its\n// public reference. The processor attaches the evidence record to that request.\nexport const NciiEvidenceTargetInfoSchema = z\n .object({\n requestReference: z.string().min(1),\n })\n .strict();\nexport type NciiEvidenceTargetInfo = z.infer<typeof NciiEvidenceTargetInfoSchema>;\n\n// Mapped type: given a FileOrigin literal, returns its targetInfo shape.\nexport type TargetInfoFor<O extends FileOrigin> =\n O extends 'profile-picture' ? ProfilePictureTargetInfo\n : O extends 'craft-skill-media' ? CraftSkillMediaTargetInfo\n : O extends 'squareStreetz' ? SquareStreetzTargetInfo\n : O extends 'commission-posting' ? CommissionPostingTargetInfo\n : O extends 'commission-proposal' ? CommissionProposalTargetInfo\n : O extends 'audition-prompt' ? AuditionPromptTargetInfo\n : O extends 'admin-audition-prompt' ? AdminAuditionPromptTargetInfo\n : O extends 'audition-entry' ? AuditionEntryTargetInfo\n : O extends 'hallLibrary-cover-square' ? HallLibraryCoverSquareTargetInfo\n : O extends 'hallLibrary-cover-poster' ? HallLibraryCoverPosterTargetInfo\n : O extends 'hallLibrary-cover-cinematic' ? HallLibraryCoverCinematicTargetInfo\n : O extends 'realm-cover' ? RealmCoverTargetInfo\n : O extends 'chapter-photo' ? ChapterPhotoTargetInfo\n : O extends 'tune-track-photo' ? TuneTrackPhotoTargetInfo\n : O extends 'tune-track-audio' ? TuneTrackAudioTargetInfo\n : O extends 'television-episode-photo' ? TelevisionEpisodePhotoTargetInfo\n : O extends 'television-episode-video' ? TelevisionEpisodeVideoTargetInfo\n : O extends 'conversation-file' ? ConversationFileTargetInfo\n : O extends 'work-asset' ? WorkAssetTargetInfo\n : O extends 'ncii-evidence' ? NciiEvidenceTargetInfo\n : never;\n\nfunction assertNever(x: never): never {\n throw new Error(`Unexpected fileOrigin: ${String(x)}`);\n}\n\nexport function parseTargetInfo<O extends FileOrigin>(\n fileOrigin: O,\n raw: unknown\n): TargetInfoFor<O> {\n switch (fileOrigin) {\n case 'profile-picture': return ProfilePictureTargetInfoSchema.parse(raw) as TargetInfoFor<O>;\n case 'craft-skill-media': return CraftSkillMediaTargetInfoSchema.parse(raw) as TargetInfoFor<O>;\n case 'squareStreetz': return SquareStreetzTargetInfoSchema.parse(raw) as TargetInfoFor<O>;\n case 'commission-posting': return CommissionPostingTargetInfoSchema.parse(raw) as TargetInfoFor<O>;\n case 'commission-proposal': return CommissionProposalTargetInfoSchema.parse(raw) as TargetInfoFor<O>;\n case 'audition-prompt': return AuditionPromptTargetInfoSchema.parse(raw) as TargetInfoFor<O>;\n case 'admin-audition-prompt': return AdminAuditionPromptTargetInfoSchema.parse(raw) as TargetInfoFor<O>;\n case 'audition-entry': return AuditionEntryTargetInfoSchema.parse(raw) as TargetInfoFor<O>;\n case 'hallLibrary-cover-square': return HallLibraryCoverSquareTargetInfoSchema.parse(raw) as TargetInfoFor<O>;\n case 'hallLibrary-cover-poster': return HallLibraryCoverPosterTargetInfoSchema.parse(raw) as TargetInfoFor<O>;\n case 'hallLibrary-cover-cinematic': return HallLibraryCoverCinematicTargetInfoSchema.parse(raw) as TargetInfoFor<O>;\n case 'realm-cover': return RealmCoverTargetInfoSchema.parse(raw) as TargetInfoFor<O>;\n case 'chapter-photo': return ChapterPhotoTargetInfoSchema.parse(raw) as TargetInfoFor<O>;\n case 'tune-track-photo': return TuneTrackPhotoTargetInfoSchema.parse(raw) as TargetInfoFor<O>;\n case 'tune-track-audio': return TuneTrackAudioTargetInfoSchema.parse(raw) as TargetInfoFor<O>;\n case 'television-episode-photo': return TelevisionEpisodePhotoTargetInfoSchema.parse(raw) as TargetInfoFor<O>;\n case 'television-episode-video': return TelevisionEpisodeVideoTargetInfoSchema.parse(raw) as TargetInfoFor<O>;\n case 'conversation-file': return ConversationFileTargetInfoSchema.parse(raw) as TargetInfoFor<O>;\n case 'work-asset': return WorkAssetTargetInfoSchema.parse(raw) as TargetInfoFor<O>;\n case 'ncii-evidence': return NciiEvidenceTargetInfoSchema.parse(raw) as TargetInfoFor<O>;\n default: return assertNever(fileOrigin);\n }\n}\n\n\n\n\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ttt-media-specs.d.ts","sourceRoot":"","sources":["../../src/media/ttt-media-specs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AA0DtE,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,UAAU,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"ttt-media-specs.d.ts","sourceRoot":"","sources":["../../src/media/ttt-media-specs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AA0DtE,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,UAAU,EAAE,eAAe,CAspB/D,CAAC"}
|
|
@@ -13,7 +13,7 @@ const MB = 1024 * 1024;
|
|
|
13
13
|
const IMAGE_RAW_BYTES = 25 * MB; // 48MP phone HEIC/JPEG fits comfortably
|
|
14
14
|
const VIDEO_RAW_BYTES = byMode(500 * MB, 1024 * MB);
|
|
15
15
|
const AUDIO_RAW_BYTES = byMode(100 * MB, 250 * MB);
|
|
16
|
-
const
|
|
16
|
+
const CONVERSATION_FILE_RAW_BYTES = byMode(250 * MB, 500 * MB);
|
|
17
17
|
// [H-01/R10] NCII take-it-down evidence: 100MB. The scan trigger downloads the whole object into a
|
|
18
18
|
// ~512MiB Function before scanning, so an allowed file must fit in memory. No mode variation (the
|
|
19
19
|
// evidence is preserveOriginal — never transcoded). Mirrored by storage.rules `uploadMaxBytes` (caps
|
|
@@ -24,7 +24,7 @@ const SHORT_VIDEO_DURATION_SEC = byMode(60, 180);
|
|
|
24
24
|
const ADMIN_PROMPT_DURATION_SEC = byMode(120, 600);
|
|
25
25
|
const TELEVISION_DURATION_SEC = byMode(300, 1800);
|
|
26
26
|
const LONG_AUDIO_DURATION_SEC = byMode(600, 900);
|
|
27
|
-
const
|
|
27
|
+
const CONVERSATION_FILE_AUDIO_DURATION_SEC = byMode(60, 180);
|
|
28
28
|
// --- Output size caps (post-transcode) ---
|
|
29
29
|
const SHORT_VIDEO_OUTPUT_BYTES = byMode(60 * MB, 300 * MB);
|
|
30
30
|
const TELEVISION_OUTPUT_BYTES = byMode(200 * MB, 1024 * MB);
|
|
@@ -589,10 +589,13 @@ export const TTT_MEDIA_SPECS = {
|
|
|
589
589
|
},
|
|
590
590
|
},
|
|
591
591
|
},
|
|
592
|
-
|
|
592
|
+
// Conversation Files (guild-invite + admin-support conversations). Same
|
|
593
|
+
// image/video/audio processing recipe the removed chat-attachment origin used —
|
|
594
|
+
// the replacement changed the OWNER of the published asset, not the pipeline.
|
|
595
|
+
'conversation-file': {
|
|
593
596
|
kind: 'generic',
|
|
594
597
|
accept: ACCEPT_MEDIA_ALL,
|
|
595
|
-
maxBytes:
|
|
598
|
+
maxBytes: CONVERSATION_FILE_RAW_BYTES,
|
|
596
599
|
maxDurationSec: SHORT_VIDEO_DURATION_SEC,
|
|
597
600
|
client: {
|
|
598
601
|
allowPick: true,
|
|
@@ -621,7 +624,7 @@ export const TTT_MEDIA_SPECS = {
|
|
|
621
624
|
audio: {
|
|
622
625
|
kind: 'audio',
|
|
623
626
|
maxOutputBytes: AUDIO_OUTPUT_BYTES,
|
|
624
|
-
audio: { maxDurationSec:
|
|
627
|
+
audio: { maxDurationSec: CONVERSATION_FILE_AUDIO_DURATION_SEC },
|
|
625
628
|
},
|
|
626
629
|
},
|
|
627
630
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ttt-media-specs.js","sourceRoot":"","sources":["../../src/media/ttt-media-specs.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAElD,sEAAsE;AACtE,wDAAwD;AACxD,+EAA+E;AAC/E,6EAA6E;AAC7E,iFAAiF;AACjF,2EAA2E;AAC3E,6EAA6E;AAC7E,wEAAwE;AACxE,gFAAgF;AAEhF,MAAM,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAEvB,uCAAuC;AACvC,MAAM,eAAe,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,wCAAwC;AACzE,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;AACpD,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;AACnD,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;AAClD,mGAAmG;AACnG,kGAAkG;AAClG,qGAAqG;AACrG,oEAAoE;AACpE,MAAM,uBAAuB,GAAG,GAAG,GAAG,EAAE,CAAC;AAEzC,yCAAyC;AACzC,MAAM,wBAAwB,GAAG,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;AACjD,MAAM,yBAAyB,GAAG,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACnD,MAAM,uBAAuB,GAAG,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAClD,MAAM,uBAAuB,GAAG,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACjD,MAAM,uBAAuB,GAAG,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;AAEhD,4CAA4C;AAC5C,MAAM,wBAAwB,GAAG,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;AAC3D,MAAM,uBAAuB,GAAG,MAAM,CAAC,GAAG,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;AAC5D,MAAM,kBAAkB,GAAG,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;AAEpD,2EAA2E;AAC3E,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC5C,MAAM,iBAAiB,GAAG,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAC5C,MAAM,iBAAiB,GAAG,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAC3C,MAAM,kBAAkB,GAAG,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAE7C,gCAAgC;AAChC,MAAM,mBAAmB,GAAG,wBAAwB,CAAC;AAErD,MAAM,iBAAiB,GAAG,EAAE,KAAK,EAAE,CAAC,OAAgB,CAAC,EAAE,CAAC;AACxD,MAAM,iBAAiB,GAAG,EAAE,KAAK,EAAE,CAAC,OAAgB,CAAC,EAAE,CAAC;AACxD,MAAM,iBAAiB,GAAG,EAAE,KAAK,EAAE,CAAC,OAAgB,CAAC,EAAE,CAAC;AACxD,MAAM,gBAAgB,GAAG,EAAE,KAAK,EAAE,CAAC,OAAgB,EAAE,OAAgB,EAAE,OAAgB,CAAC,EAAE,CAAC;AAC3F,MAAM,kBAAkB,GAAG,EAAE,KAAK,EAAE,CAAC,OAAgB,EAAE,OAAgB,CAAC,EAAE,CAAC;AAE3E,6EAA6E;AAC7E,mFAAmF;AACnF,4DAA4D;AAC5D,sEAAsE;AACtE,8EAA8E;AAC9E,MAAM,CAAC,MAAM,eAAe,GAAwC;IAElE,iBAAiB,EAAE;QACjB,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,iBAAiB;QACzB,QAAQ,EAAE,eAAe;QACzB,SAAS,EAAE;YACT,WAAW,EAAE,CAAC;YACd,WAAW,EAAE,GAAG;YAChB,YAAY,EAAE,GAAG;YACjB,KAAK,EAAE,OAAO;YACd,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE;YACX,kBAAkB,EAAE,KAAK;SAC1B;QACD,MAAM,EAAE;YACN,SAAS,EAAE,IAAI;YACf,iBAAiB,EAAE,IAAI;YACvB,gBAAgB,EAAE,KAAK;YACvB,gBAAgB,EAAE,KAAK;SACxB;QACD,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE;oBACL,QAAQ,EAAE;wBACR,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;wBAClG,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;wBAClG,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;qBAClG;iBACF;aACF;SACF;KACF;IAED,mBAAmB,EAAE;QACnB,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,gBAAgB;QACxB,QAAQ,EAAE,eAAe;QACzB,cAAc,EAAE,wBAAwB;QACxC,SAAS,EAAE;YACT,WAAW,EAAE,CAAC,GAAG,CAAC;YAClB,WAAW,EAAE,GAAG;YAChB,YAAY,EAAE,GAAG;YACjB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE;YACX,kBAAkB,EAAE,KAAK;SAC1B;QACD,MAAM,EAAE;YACN,SAAS,EAAE,IAAI;YACf,iBAAiB,EAAE,IAAI;YACvB,gBAAgB,EAAE,IAAI;YACtB,gBAAgB,EAAE,IAAI;YACtB,oBAAoB,EAAE,mBAAmB;SAC1C;QACD,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE;oBACL,QAAQ,EAAE;wBACR,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;qBACnG;iBACF;aACF;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,OAAO;gBACb,aAAa,EAAE,GAAG;gBAClB,cAAc,EAAE,GAAG;gBACnB,eAAe,EAAE,IAAI;gBACrB,cAAc,EAAE,wBAAwB;gBACxC,cAAc,EAAE,wBAAwB;gBACxC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,EAAE;aACzD;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,OAAO;gBACb,cAAc,EAAE,kBAAkB;gBAClC,KAAK,EAAE,EAAE,cAAc,EAAE,uBAAuB,EAAE;aACnD;SACF;KACF;IAED,0BAA0B,EAAE;QAC1B,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,iBAAiB;QACzB,QAAQ,EAAE,eAAe;QACzB,SAAS,EAAE;YACT,WAAW,EAAE,CAAC;YACd,WAAW,EAAE,GAAG;YAChB,YAAY,EAAE,GAAG;YACjB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE;YACX,kBAAkB,EAAE,KAAK;SAC1B;QACD,MAAM,EAAE;YACN,SAAS,EAAE,IAAI;YACf,iBAAiB,EAAE,IAAI;YACvB,gBAAgB,EAAE,KAAK;YACvB,gBAAgB,EAAE,KAAK;SACxB;QACD,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE;oBACL,QAAQ,EAAE;wBACR,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;qBACnG;iBACF;aACF;SACF;KACF;IAED,4EAA4E;IAC5E,gEAAgE;IAChE,aAAa,EAAE;QACb,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,iBAAiB;QACzB,QAAQ,EAAE,eAAe;QACzB,SAAS,EAAE;YACT,WAAW,EAAE,CAAC;YACd,WAAW,EAAE,GAAG;YAChB,YAAY,EAAE,GAAG;YACjB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE;YACX,kBAAkB,EAAE,KAAK;SAC1B;QACD,MAAM,EAAE;YACN,SAAS,EAAE,IAAI;YACf,iBAAiB,EAAE,IAAI;YACvB,gBAAgB,EAAE,KAAK;YACvB,gBAAgB,EAAE,KAAK;SACxB;QACD,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE;oBACL,QAAQ,EAAE;wBACR,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;qBACnG;iBACF;aACF;SACF;KACF;IAED,0BAA0B,EAAE;QAC1B,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,iBAAiB;QACzB,QAAQ,EAAE,eAAe;QACzB,SAAS,EAAE;YACT,WAAW,EAAE,CAAC,GAAG,CAAC;YAClB,WAAW,EAAE,GAAG;YAChB,YAAY,EAAE,GAAG;YACjB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE;YACX,kBAAkB,EAAE,KAAK;SAC1B;QACD,MAAM,EAAE;YACN,SAAS,EAAE,IAAI;YACf,iBAAiB,EAAE,IAAI;YACvB,gBAAgB,EAAE,KAAK;YACvB,gBAAgB,EAAE,KAAK;SACxB;QACD,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE;oBACL,QAAQ,EAAE;wBACR,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;qBACnG;iBACF;aACF;SACF;KACF;IAED,6BAA6B,EAAE;QAC7B,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,iBAAiB;QACzB,QAAQ,EAAE,eAAe;QACzB,SAAS,EAAE;YACT,WAAW,EAAE,EAAE,GAAG,CAAC;YACnB,WAAW,EAAE,IAAI;YACjB,YAAY,EAAE,GAAG;YACjB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE;YACX,kBAAkB,EAAE,MAAM;SAC3B;QACD,MAAM,EAAE;YACN,SAAS,EAAE,IAAI;YACf,iBAAiB,EAAE,IAAI;YACvB,gBAAgB,EAAE,KAAK;YACvB,gBAAgB,EAAE,KAAK;SACxB;QACD,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE;oBACL,QAAQ,EAAE;wBACR,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;qBACpG;iBACF;aACF;SACF;KACF;IAED,eAAe,EAAE;QACf,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,gBAAgB;QACxB,QAAQ,EAAE,eAAe;QACzB,cAAc,EAAE,wBAAwB;QACxC,SAAS,EAAE;YACT,WAAW,EAAE,EAAE,GAAG,CAAC;YACnB,WAAW,EAAE,IAAI;YACjB,YAAY,EAAE,GAAG;YACjB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE;YACX,kBAAkB,EAAE,MAAM;SAC3B;QACD,MAAM,EAAE;YACN,SAAS,EAAE,IAAI;YACf,iBAAiB,EAAE,IAAI;YACvB,gBAAgB,EAAE,IAAI;YACtB,gBAAgB,EAAE,IAAI;YACtB,oBAAoB,EAAE,mBAAmB;SAC1C;QACD,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE;oBACL,QAAQ,EAAE;wBACR,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;qBAC7E;iBACF;aACF;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,OAAO;gBACb,aAAa,EAAE,gBAAgB;gBAC/B,cAAc,EAAE,iBAAiB;gBACjC,eAAe,EAAE,IAAI;gBACrB,cAAc,EAAE,wBAAwB;gBACxC,cAAc,EAAE,wBAAwB;gBACxC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,EAAE;aACzD;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,OAAO;gBACb,cAAc,EAAE,kBAAkB;gBAClC,KAAK,EAAE,EAAE,cAAc,EAAE,uBAAuB,EAAE;aACnD;SACF;KACF;IAED,iBAAiB,EAAE;QACjB,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,iBAAiB;QACzB,QAAQ,EAAE,eAAe;QACzB,cAAc,EAAE,wBAAwB;QACxC,mBAAmB,EAAE,EAAE,GAAG,CAAC;QAC3B,gBAAgB,EAAE,YAAqB;QACvC,MAAM,EAAE;YACN,SAAS,EAAE,IAAI;YACf,iBAAiB,EAAE,KAAK;YACxB,gBAAgB,EAAE,IAAI;YACtB,gBAAgB,EAAE,KAAK;YACvB,oBAAoB,EAAE,mBAAmB;SAC1C;QACD,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,OAAO;gBACb,aAAa,EAAE,gBAAgB;gBAC/B,cAAc,EAAE,iBAAiB;gBACjC,eAAe,EAAE,IAAI;gBACrB,cAAc,EAAE,wBAAwB;gBACxC,cAAc,EAAE,wBAAwB;gBACxC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,EAAE;aACzD;SACF;KACF;IAED,uBAAuB,EAAE;QACvB,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,iBAAiB;QACzB,QAAQ,EAAE,eAAe;QACzB,cAAc,EAAE,yBAAyB;QACzC,mBAAmB,EAAE,EAAE,GAAG,CAAC;QAC3B,gBAAgB,EAAE,YAAqB;QACvC,MAAM,EAAE;YACN,SAAS,EAAE,IAAI;YACf,iBAAiB,EAAE,KAAK;YACxB,gBAAgB,EAAE,IAAI;YACtB,gBAAgB,EAAE,KAAK;YACvB,oBAAoB,EAAE,yBAAyB;SAChD;QACD,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,OAAO;gBACb,aAAa,EAAE,gBAAgB;gBAC/B,cAAc,EAAE,iBAAiB;gBACjC,eAAe,EAAE,IAAI;gBACrB,cAAc,EAAE,yBAAyB;gBACzC,cAAc,EAAE,wBAAwB;gBACxC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,EAAE;aACzD;SACF;KACF;IAED,gBAAgB,EAAE;QAChB,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,iBAAiB;QACzB,QAAQ,EAAE,eAAe;QACzB,cAAc,EAAE,wBAAwB;QACxC,mBAAmB,EAAE,CAAC,GAAG,EAAE;QAC3B,gBAAgB,EAAE,UAAmB;QACrC,MAAM,EAAE;YACN,SAAS,EAAE,IAAI;YACf,iBAAiB,EAAE,KAAK;YACxB,gBAAgB,EAAE,IAAI;YACtB,gBAAgB,EAAE,KAAK;YACvB,gBAAgB,EAAE,MAAe;YACjC,oBAAoB,EAAE,mBAAmB;SAC1C;QACD,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,OAAO;gBACb,aAAa,EAAE,iBAAiB;gBAChC,cAAc,EAAE,kBAAkB;gBAClC,eAAe,EAAE,IAAI;gBACrB,cAAc,EAAE,wBAAwB;gBACxC,cAAc,EAAE,wBAAwB;gBACxC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,EAAE;aACzD;SACF;KACF;IAED,oBAAoB,EAAE;QACpB,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,gBAAgB;QACxB,QAAQ,EAAE,eAAe;QACzB,cAAc,EAAE,wBAAwB;QACxC,SAAS,EAAE;YACT,WAAW,EAAE,CAAC,GAAG,CAAC;YAClB,WAAW,EAAE,GAAG;YAChB,YAAY,EAAE,GAAG;YACjB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE;YACX,kBAAkB,EAAE,KAAK;SAC1B;QACD,MAAM,EAAE;YACN,SAAS,EAAE,IAAI;YACf,iBAAiB,EAAE,IAAI;YACvB,gBAAgB,EAAE,IAAI;YACtB,gBAAgB,EAAE,IAAI;YACtB,oBAAoB,EAAE,mBAAmB;SAC1C;QACD,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE;oBACL,QAAQ,EAAE;wBACR,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;qBACnG;iBACF;aACF;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,OAAO;gBACb,aAAa,EAAE,GAAG;gBAClB,cAAc,EAAE,GAAG;gBACnB,eAAe,EAAE,IAAI;gBACrB,cAAc,EAAE,wBAAwB;gBACxC,cAAc,EAAE,wBAAwB;gBACxC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,EAAE;aACzD;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,OAAO;gBACb,cAAc,EAAE,kBAAkB;gBAClC,KAAK,EAAE,EAAE,cAAc,EAAE,uBAAuB,EAAE;aACnD;SACF;KACF;IAED,qBAAqB,EAAE;QACrB,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,gBAAgB;QACxB,QAAQ,EAAE,eAAe;QACzB,cAAc,EAAE,wBAAwB;QACxC,SAAS,EAAE;YACT,WAAW,EAAE,CAAC,GAAG,CAAC;YAClB,WAAW,EAAE,GAAG;YAChB,YAAY,EAAE,GAAG;YACjB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE;YACX,kBAAkB,EAAE,KAAK;SAC1B;QACD,MAAM,EAAE;YACN,SAAS,EAAE,IAAI;YACf,iBAAiB,EAAE,IAAI;YACvB,gBAAgB,EAAE,IAAI;YACtB,gBAAgB,EAAE,IAAI;YACtB,oBAAoB,EAAE,mBAAmB;SAC1C;QACD,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE;oBACL,QAAQ,EAAE;wBACR,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;qBACnG;iBACF;aACF;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,OAAO;gBACb,aAAa,EAAE,GAAG;gBAClB,cAAc,EAAE,GAAG;gBACnB,eAAe,EAAE,IAAI;gBACrB,cAAc,EAAE,wBAAwB;gBACxC,cAAc,EAAE,wBAAwB;gBACxC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,EAAE;aACzD;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,OAAO;gBACb,cAAc,EAAE,kBAAkB;gBAClC,KAAK,EAAE,EAAE,cAAc,EAAE,uBAAuB,EAAE;aACnD;SACF;KACF;IAED,eAAe,EAAE;QACf,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,iBAAiB;QACzB,QAAQ,EAAE,eAAe;QACzB,SAAS,EAAE;YACT,WAAW,EAAE,CAAC;YACd,WAAW,EAAE,GAAG;YAChB,YAAY,EAAE,GAAG;YACjB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE;YACX,kBAAkB,EAAE,KAAK;SAC1B;QACD,MAAM,EAAE;YACN,SAAS,EAAE,IAAI;YACf,iBAAiB,EAAE,IAAI;YACvB,gBAAgB,EAAE,KAAK;YACvB,gBAAgB,EAAE,KAAK;SACxB;QACD,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE;oBACL,QAAQ,EAAE;wBACR,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;qBACnG;iBACF;aACF;SACF;KACF;IAED,kBAAkB,EAAE;QAClB,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,iBAAiB;QACzB,QAAQ,EAAE,eAAe;QACzB,SAAS,EAAE;YACT,WAAW,EAAE,CAAC;YACd,WAAW,EAAE,GAAG;YAChB,YAAY,EAAE,GAAG;YACjB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE;YACX,kBAAkB,EAAE,KAAK;SAC1B;QACD,MAAM,EAAE;YACN,SAAS,EAAE,IAAI;YACf,iBAAiB,EAAE,IAAI;YACvB,gBAAgB,EAAE,KAAK;YACvB,gBAAgB,EAAE,KAAK;SACxB;QACD,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE;oBACL,QAAQ,EAAE;wBACR,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;qBACnG;iBACF;aACF;SACF;KACF;IAED,0BAA0B,EAAE;QAC1B,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,iBAAiB;QACzB,QAAQ,EAAE,eAAe;QACzB,SAAS,EAAE;YACT,WAAW,EAAE,CAAC;YACd,WAAW,EAAE,GAAG;YAChB,YAAY,EAAE,GAAG;YACjB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE;YACX,kBAAkB,EAAE,KAAK;SAC1B;QACD,MAAM,EAAE;YACN,SAAS,EAAE,IAAI;YACf,iBAAiB,EAAE,IAAI;YACvB,gBAAgB,EAAE,KAAK;YACvB,gBAAgB,EAAE,KAAK;SACxB;QACD,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE;oBACL,QAAQ,EAAE;wBACR,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;qBACnG;iBACF;aACF;SACF;KACF;IAED,kBAAkB,EAAE;QAClB,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,iBAAiB;QACzB,QAAQ,EAAE,eAAe;QACzB,cAAc,EAAE,uBAAuB;QACvC,MAAM,EAAE;YACN,SAAS,EAAE,IAAI;YACf,iBAAiB,EAAE,KAAK;YACxB,gBAAgB,EAAE,KAAK;YACvB,gBAAgB,EAAE,IAAI;YACtB,oBAAoB,EAAE,mBAAmB;SAC1C;QACD,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,OAAO;gBACb,cAAc,EAAE,kBAAkB;gBAClC,KAAK,EAAE;oBACL,cAAc,EAAE,uBAAuB;iBACxC;aACF;SACF;KACF;IAED,0BAA0B,EAAE;QAC1B,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,iBAAiB;QACzB,QAAQ,EAAE,eAAe;QACzB,cAAc,EAAE,uBAAuB;QACvC,MAAM,EAAE;YACN,SAAS,EAAE,IAAI;YACf,iBAAiB,EAAE,KAAK;YACxB,gBAAgB,EAAE,IAAI;YACtB,gBAAgB,EAAE,KAAK;YACvB,oBAAoB,EAAE,mBAAmB;SAC1C;QACD,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,OAAO;gBACb,aAAa,EAAE,gBAAgB;gBAC/B,cAAc,EAAE,iBAAiB;gBACjC,eAAe,EAAE,IAAI;gBACrB,cAAc,EAAE,uBAAuB;gBACvC,cAAc,EAAE,uBAAuB;gBACvC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,EAAE;aACzD;SACF;KACF;IAED,+BAA+B,EAAE;QAC/B,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,gBAAgB;QACxB,QAAQ,EAAE,cAAc;QACxB,cAAc,EAAE,wBAAwB;QACxC,MAAM,EAAE;YACN,SAAS,EAAE,IAAI;YACf,iBAAiB,EAAE,IAAI;YACvB,gBAAgB,EAAE,IAAI;YACtB,gBAAgB,EAAE,IAAI;SACvB;QACD,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE;oBACL,QAAQ,EAAE;wBACR,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;qBAC5E;iBACF;aACF;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,OAAO;gBACb,aAAa,EAAE,GAAG;gBAClB,cAAc,EAAE,GAAG;gBACnB,eAAe,EAAE,IAAI;gBACrB,cAAc,EAAE,wBAAwB;gBACxC,cAAc,EAAE,wBAAwB;gBACxC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,EAAE;aACzD;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,OAAO;gBACb,cAAc,EAAE,kBAAkB;gBAClC,KAAK,EAAE,EAAE,cAAc,EAAE,uBAAuB,EAAE;aACnD;SACF;KACF;IAED,YAAY,EAAE;QACZ,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,gBAAgB;QACxB,QAAQ,EAAE,eAAe;QACzB,cAAc,EAAE,wBAAwB;QACxC,MAAM,EAAE;YACN,SAAS,EAAE,IAAI;YACf,iBAAiB,EAAE,IAAI;YACvB,gBAAgB,EAAE,IAAI;YACtB,gBAAgB,EAAE,IAAI;YACtB,oBAAoB,EAAE,mBAAmB;SAC1C;QACD,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE;oBACL,QAAQ,EAAE;wBACR,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;qBAC9E;iBACF;aACF;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,OAAO;gBACb,aAAa,EAAE,gBAAgB;gBAC/B,cAAc,EAAE,iBAAiB;gBACjC,eAAe,EAAE,IAAI;gBACrB,cAAc,EAAE,wBAAwB;gBACxC,cAAc,EAAE,wBAAwB;gBACxC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,EAAE;aACzD;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,OAAO;gBACb,cAAc,EAAE,kBAAkB;gBAClC,KAAK,EAAE;oBACL,cAAc,EAAE,wBAAwB;iBACzC;aACF;SACF;KACF;IAED,+EAA+E;IAC/E,wEAAwE;IACxE,yEAAyE;IACzE,+EAA+E;IAC/E,iEAAiE;IACjE,eAAe,EAAE;QACf,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,kBAAkB;QAC1B,8EAA8E;QAC9E,QAAQ,EAAE,uBAAuB;QACjC,gFAAgF;QAChF,qFAAqF;QACrF,gBAAgB,EAAE,IAAI;QACtB,MAAM,EAAE;YACN,SAAS,EAAE,IAAI;YACf,iBAAiB,EAAE,KAAK;YACxB,gBAAgB,EAAE,KAAK;YACvB,gBAAgB,EAAE,KAAK;SACxB;KACF;CAEF,CAAC","sourcesContent":["import type { FileOrigin } from \"./file-origin.js\";\nimport type { MediaOriginSpec } from \"@ttt-productions/media-schemas\";\nimport { byMode } from \"../constants/app-mode.js\";\n\n// Mode-aware media-origin registry. Two distinct caps per origin (see\n// ttt-prod docs/design/charter-season-and-app-mode.md):\n// - `maxBytes` — the RAW-INPUT cap at the upload gate. Deliberately generous:\n// modern phones record high-bitrate by default and the user can't control\n// that; the pipeline absorbs it. This is an abuse bound, not the quality cap.\n// - processing `maxOutputBytes` / `maxDurationSec` — the PROCESSED-OUTPUT\n// spec the transcoder enforces. This is what actually gets stored/served.\n// Charter mode = lower durations/output quality; full mode raises them.\n// storage.rules `uploadMaxBytes` mirrors the raw caps — keep in sync (S6 test).\n\nconst MB = 1024 * 1024;\n\n// --- Raw-input caps (upload gate) ---\nconst IMAGE_RAW_BYTES = 25 * MB; // 48MP phone HEIC/JPEG fits comfortably\nconst VIDEO_RAW_BYTES = byMode(500 * MB, 1024 * MB);\nconst AUDIO_RAW_BYTES = byMode(100 * MB, 250 * MB);\nconst CHAT_RAW_BYTES = byMode(250 * MB, 500 * MB);\n// [H-01/R10] NCII take-it-down evidence: 100MB. The scan trigger downloads the whole object into a\n// ~512MiB Function before scanning, so an allowed file must fit in memory. No mode variation (the\n// evidence is preserveOriginal — never transcoded). Mirrored by storage.rules `uploadMaxBytes` (caps\n// sync test) + NciiPolicyConfigV1.maxEvidenceFileBytes (104857600).\nconst NCII_EVIDENCE_RAW_BYTES = 100 * MB;\n\n// --- Output duration caps (seconds) ---\nconst SHORT_VIDEO_DURATION_SEC = byMode(60, 180);\nconst ADMIN_PROMPT_DURATION_SEC = byMode(120, 600);\nconst TELEVISION_DURATION_SEC = byMode(300, 1800);\nconst LONG_AUDIO_DURATION_SEC = byMode(600, 900);\nconst CHAT_AUDIO_DURATION_SEC = byMode(60, 180);\n\n// --- Output size caps (post-transcode) ---\nconst SHORT_VIDEO_OUTPUT_BYTES = byMode(60 * MB, 300 * MB);\nconst TELEVISION_OUTPUT_BYTES = byMode(200 * MB, 1024 * MB);\nconst AUDIO_OUTPUT_BYTES = byMode(20 * MB, 60 * MB);\n\n// --- Output resolutions (full mode unlocks 1080p on the big surfaces) ---\nconst WIDE_VIDEO_WIDTH = byMode(1280, 1920);\nconst WIDE_VIDEO_HEIGHT = byMode(720, 1080);\nconst ENTRY_VIDEO_WIDTH = byMode(360, 720);\nconst ENTRY_VIDEO_HEIGHT = byMode(640, 1280);\n\n// --- Client recording caps ---\nconst RECORD_DURATION_SEC = SHORT_VIDEO_DURATION_SEC;\n\nconst ACCEPT_IMAGE_ONLY = { kinds: ['image' as const] };\nconst ACCEPT_VIDEO_ONLY = { kinds: ['video' as const] };\nconst ACCEPT_AUDIO_ONLY = { kinds: ['audio' as const] };\nconst ACCEPT_MEDIA_ALL = { kinds: ['image' as const, 'video' as const, 'audio' as const] };\nconst ACCEPT_IMAGE_VIDEO = { kinds: ['image' as const, 'video' as const] };\n\n// Variant `key` values below are USAGES of the ONE canonical variant-key set\n// (`MEDIA_VARIANT_KEYS`, doc-schemas/media-assets.ts). The generic MediaOriginSpec\n// types them as open strings, so the CI validation lives in\n// media-origin-lineage.test.ts: every declared key must parse against\n// MediaVariantKeySchema (and every schema member must be declared somewhere).\nexport const TTT_MEDIA_SPECS: Record<FileOrigin, MediaOriginSpec> = {\n\n 'profile-picture': {\n kind: 'image',\n accept: ACCEPT_IMAGE_ONLY,\n maxBytes: IMAGE_RAW_BYTES,\n imageCrop: {\n aspectRatio: 1,\n outputWidth: 200,\n outputHeight: 200,\n shape: 'round',\n format: 'jpeg',\n quality: 85,\n aspectRatioDisplay: '1:1',\n },\n client: {\n allowPick: true,\n allowCapturePhoto: true,\n allowRecordVideo: false,\n allowRecordAudio: false,\n },\n processing: {\n image: {\n kind: 'image',\n image: {\n variants: [\n { key: 'full', crop: { width: 200, height: 200, gravity: 'center' }, format: 'jpeg', quality: 85 },\n { key: 'medium', crop: { width: 48, height: 48, gravity: 'center' }, format: 'jpeg', quality: 85 },\n { key: 'small', crop: { width: 32, height: 32, gravity: 'center' }, format: 'jpeg', quality: 85 },\n ],\n },\n },\n },\n },\n\n 'craft-skill-media': {\n kind: 'image',\n accept: ACCEPT_MEDIA_ALL,\n maxBytes: VIDEO_RAW_BYTES,\n maxDurationSec: SHORT_VIDEO_DURATION_SEC,\n imageCrop: {\n aspectRatio: 4 / 3,\n outputWidth: 800,\n outputHeight: 600,\n format: 'jpeg',\n quality: 85,\n aspectRatioDisplay: '4:3',\n },\n client: {\n allowPick: true,\n allowCapturePhoto: true,\n allowRecordVideo: true,\n allowRecordAudio: true,\n maxRecordDurationSec: RECORD_DURATION_SEC,\n },\n processing: {\n image: {\n kind: 'image',\n image: {\n variants: [\n { key: 'main', crop: { width: 800, height: 600, gravity: 'center' }, format: 'jpeg', quality: 85 },\n ],\n },\n },\n video: {\n kind: 'video',\n requiredWidth: 800,\n requiredHeight: 600,\n allowAutoFormat: true,\n maxDurationSec: SHORT_VIDEO_DURATION_SEC,\n maxOutputBytes: SHORT_VIDEO_OUTPUT_BYTES,\n video: { scaleMode: 'fit', preset: 'veryfast', crf: 28 },\n },\n audio: {\n kind: 'audio',\n maxOutputBytes: AUDIO_OUTPUT_BYTES,\n audio: { maxDurationSec: LONG_AUDIO_DURATION_SEC },\n },\n },\n },\n\n 'hallLibrary-cover-square': {\n kind: 'image',\n accept: ACCEPT_IMAGE_ONLY,\n maxBytes: IMAGE_RAW_BYTES,\n imageCrop: {\n aspectRatio: 1,\n outputWidth: 600,\n outputHeight: 600,\n format: 'jpeg',\n quality: 85,\n aspectRatioDisplay: '1:1',\n },\n client: {\n allowPick: true,\n allowCapturePhoto: true,\n allowRecordVideo: false,\n allowRecordAudio: false,\n },\n processing: {\n image: {\n kind: 'image',\n image: {\n variants: [\n { key: 'full', crop: { width: 600, height: 600, gravity: 'center' }, format: 'jpeg', quality: 85 },\n ],\n },\n },\n },\n },\n\n // Realm cover art — same square recipe as the Work square cover. One 'full'\n // variant; draft realms may lack a cover, release requires one.\n 'realm-cover': {\n kind: 'image',\n accept: ACCEPT_IMAGE_ONLY,\n maxBytes: IMAGE_RAW_BYTES,\n imageCrop: {\n aspectRatio: 1,\n outputWidth: 600,\n outputHeight: 600,\n format: 'jpeg',\n quality: 85,\n aspectRatioDisplay: '1:1',\n },\n client: {\n allowPick: true,\n allowCapturePhoto: true,\n allowRecordVideo: false,\n allowRecordAudio: false,\n },\n processing: {\n image: {\n kind: 'image',\n image: {\n variants: [\n { key: 'full', crop: { width: 600, height: 600, gravity: 'center' }, format: 'jpeg', quality: 85 },\n ],\n },\n },\n },\n },\n\n 'hallLibrary-cover-poster': {\n kind: 'image',\n accept: ACCEPT_IMAGE_ONLY,\n maxBytes: IMAGE_RAW_BYTES,\n imageCrop: {\n aspectRatio: 2 / 3,\n outputWidth: 400,\n outputHeight: 600,\n format: 'jpeg',\n quality: 85,\n aspectRatioDisplay: '2:3',\n },\n client: {\n allowPick: true,\n allowCapturePhoto: true,\n allowRecordVideo: false,\n allowRecordAudio: false,\n },\n processing: {\n image: {\n kind: 'image',\n image: {\n variants: [\n { key: 'full', crop: { width: 400, height: 600, gravity: 'center' }, format: 'jpeg', quality: 85 },\n ],\n },\n },\n },\n },\n\n 'hallLibrary-cover-cinematic': {\n kind: 'image',\n accept: ACCEPT_IMAGE_ONLY,\n maxBytes: IMAGE_RAW_BYTES,\n imageCrop: {\n aspectRatio: 16 / 9,\n outputWidth: 1280,\n outputHeight: 720,\n format: 'jpeg',\n quality: 85,\n aspectRatioDisplay: '16:9',\n },\n client: {\n allowPick: true,\n allowCapturePhoto: true,\n allowRecordVideo: false,\n allowRecordAudio: false,\n },\n processing: {\n image: {\n kind: 'image',\n image: {\n variants: [\n { key: 'full', crop: { width: 1280, height: 720, gravity: 'center' }, format: 'jpeg', quality: 85 },\n ],\n },\n },\n },\n },\n\n 'squareStreetz': {\n kind: 'image',\n accept: ACCEPT_MEDIA_ALL,\n maxBytes: VIDEO_RAW_BYTES,\n maxDurationSec: SHORT_VIDEO_DURATION_SEC,\n imageCrop: {\n aspectRatio: 16 / 9,\n outputWidth: 1280,\n outputHeight: 720,\n format: 'jpeg',\n quality: 85,\n aspectRatioDisplay: '16:9',\n },\n client: {\n allowPick: true,\n allowCapturePhoto: true,\n allowRecordVideo: true,\n allowRecordAudio: true,\n maxRecordDurationSec: RECORD_DURATION_SEC,\n },\n processing: {\n image: {\n kind: 'image',\n image: {\n variants: [\n { key: 'main', maxWidth: 1280, maxHeight: 720, format: 'jpeg', quality: 85 },\n ],\n },\n },\n video: {\n kind: 'video',\n requiredWidth: WIDE_VIDEO_WIDTH,\n requiredHeight: WIDE_VIDEO_HEIGHT,\n allowAutoFormat: true,\n maxDurationSec: SHORT_VIDEO_DURATION_SEC,\n maxOutputBytes: SHORT_VIDEO_OUTPUT_BYTES,\n video: { scaleMode: 'fit', preset: 'veryfast', crf: 28 },\n },\n audio: {\n kind: 'audio',\n maxOutputBytes: AUDIO_OUTPUT_BYTES,\n audio: { maxDurationSec: LONG_AUDIO_DURATION_SEC },\n },\n },\n },\n\n 'audition-prompt': {\n kind: 'video',\n accept: ACCEPT_VIDEO_ONLY,\n maxBytes: VIDEO_RAW_BYTES,\n maxDurationSec: SHORT_VIDEO_DURATION_SEC,\n requiredAspectRatio: 16 / 9,\n videoOrientation: 'horizontal' as const,\n client: {\n allowPick: true,\n allowCapturePhoto: false,\n allowRecordVideo: true,\n allowRecordAudio: false,\n maxRecordDurationSec: RECORD_DURATION_SEC,\n },\n processing: {\n video: {\n kind: 'video',\n requiredWidth: WIDE_VIDEO_WIDTH,\n requiredHeight: WIDE_VIDEO_HEIGHT,\n allowAutoFormat: true,\n maxDurationSec: SHORT_VIDEO_DURATION_SEC,\n maxOutputBytes: SHORT_VIDEO_OUTPUT_BYTES,\n video: { scaleMode: 'fit', preset: 'veryfast', crf: 28 },\n },\n },\n },\n\n 'admin-audition-prompt': {\n kind: 'video',\n accept: ACCEPT_VIDEO_ONLY,\n maxBytes: VIDEO_RAW_BYTES,\n maxDurationSec: ADMIN_PROMPT_DURATION_SEC,\n requiredAspectRatio: 16 / 9,\n videoOrientation: 'horizontal' as const,\n client: {\n allowPick: true,\n allowCapturePhoto: false,\n allowRecordVideo: true,\n allowRecordAudio: false,\n maxRecordDurationSec: ADMIN_PROMPT_DURATION_SEC,\n },\n processing: {\n video: {\n kind: 'video',\n requiredWidth: WIDE_VIDEO_WIDTH,\n requiredHeight: WIDE_VIDEO_HEIGHT,\n allowAutoFormat: true,\n maxDurationSec: ADMIN_PROMPT_DURATION_SEC,\n maxOutputBytes: SHORT_VIDEO_OUTPUT_BYTES,\n video: { scaleMode: 'fit', preset: 'veryfast', crf: 28 },\n },\n },\n },\n\n 'audition-entry': {\n kind: 'video',\n accept: ACCEPT_VIDEO_ONLY,\n maxBytes: VIDEO_RAW_BYTES,\n maxDurationSec: SHORT_VIDEO_DURATION_SEC,\n requiredAspectRatio: 9 / 16,\n videoOrientation: 'vertical' as const,\n client: {\n allowPick: true,\n allowCapturePhoto: false,\n allowRecordVideo: true,\n allowRecordAudio: false,\n cameraFacingMode: 'user' as const,\n maxRecordDurationSec: RECORD_DURATION_SEC,\n },\n processing: {\n video: {\n kind: 'video',\n requiredWidth: ENTRY_VIDEO_WIDTH,\n requiredHeight: ENTRY_VIDEO_HEIGHT,\n allowAutoFormat: true,\n maxDurationSec: SHORT_VIDEO_DURATION_SEC,\n maxOutputBytes: SHORT_VIDEO_OUTPUT_BYTES,\n video: { scaleMode: 'fit', preset: 'veryfast', crf: 28 },\n },\n },\n },\n\n 'commission-posting': {\n kind: 'image',\n accept: ACCEPT_MEDIA_ALL,\n maxBytes: VIDEO_RAW_BYTES,\n maxDurationSec: SHORT_VIDEO_DURATION_SEC,\n imageCrop: {\n aspectRatio: 4 / 3,\n outputWidth: 800,\n outputHeight: 600,\n format: 'jpeg',\n quality: 85,\n aspectRatioDisplay: '4:3',\n },\n client: {\n allowPick: true,\n allowCapturePhoto: true,\n allowRecordVideo: true,\n allowRecordAudio: true,\n maxRecordDurationSec: RECORD_DURATION_SEC,\n },\n processing: {\n image: {\n kind: 'image',\n image: {\n variants: [\n { key: 'main', crop: { width: 800, height: 600, gravity: 'center' }, format: 'jpeg', quality: 85 },\n ],\n },\n },\n video: {\n kind: 'video',\n requiredWidth: 800,\n requiredHeight: 600,\n allowAutoFormat: true,\n maxDurationSec: SHORT_VIDEO_DURATION_SEC,\n maxOutputBytes: SHORT_VIDEO_OUTPUT_BYTES,\n video: { scaleMode: 'fit', preset: 'veryfast', crf: 28 },\n },\n audio: {\n kind: 'audio',\n maxOutputBytes: AUDIO_OUTPUT_BYTES,\n audio: { maxDurationSec: LONG_AUDIO_DURATION_SEC },\n },\n },\n },\n\n 'commission-proposal': {\n kind: 'image',\n accept: ACCEPT_MEDIA_ALL,\n maxBytes: VIDEO_RAW_BYTES,\n maxDurationSec: SHORT_VIDEO_DURATION_SEC,\n imageCrop: {\n aspectRatio: 4 / 3,\n outputWidth: 800,\n outputHeight: 600,\n format: 'jpeg',\n quality: 85,\n aspectRatioDisplay: '4:3',\n },\n client: {\n allowPick: true,\n allowCapturePhoto: true,\n allowRecordVideo: true,\n allowRecordAudio: true,\n maxRecordDurationSec: RECORD_DURATION_SEC,\n },\n processing: {\n image: {\n kind: 'image',\n image: {\n variants: [\n { key: 'main', crop: { width: 800, height: 600, gravity: 'center' }, format: 'jpeg', quality: 85 },\n ],\n },\n },\n video: {\n kind: 'video',\n requiredWidth: 800,\n requiredHeight: 600,\n allowAutoFormat: true,\n maxDurationSec: SHORT_VIDEO_DURATION_SEC,\n maxOutputBytes: SHORT_VIDEO_OUTPUT_BYTES,\n video: { scaleMode: 'fit', preset: 'veryfast', crf: 28 },\n },\n audio: {\n kind: 'audio',\n maxOutputBytes: AUDIO_OUTPUT_BYTES,\n audio: { maxDurationSec: LONG_AUDIO_DURATION_SEC },\n },\n },\n },\n\n 'chapter-photo': {\n kind: 'image',\n accept: ACCEPT_IMAGE_ONLY,\n maxBytes: IMAGE_RAW_BYTES,\n imageCrop: {\n aspectRatio: 1,\n outputWidth: 400,\n outputHeight: 400,\n format: 'jpeg',\n quality: 85,\n aspectRatioDisplay: '1:1',\n },\n client: {\n allowPick: true,\n allowCapturePhoto: true,\n allowRecordVideo: false,\n allowRecordAudio: false,\n },\n processing: {\n image: {\n kind: 'image',\n image: {\n variants: [\n { key: 'full', crop: { width: 400, height: 400, gravity: 'center' }, format: 'jpeg', quality: 85 },\n ],\n },\n },\n },\n },\n\n 'tune-track-photo': {\n kind: 'image',\n accept: ACCEPT_IMAGE_ONLY,\n maxBytes: IMAGE_RAW_BYTES,\n imageCrop: {\n aspectRatio: 1,\n outputWidth: 400,\n outputHeight: 400,\n format: 'jpeg',\n quality: 85,\n aspectRatioDisplay: '1:1',\n },\n client: {\n allowPick: true,\n allowCapturePhoto: true,\n allowRecordVideo: false,\n allowRecordAudio: false,\n },\n processing: {\n image: {\n kind: 'image',\n image: {\n variants: [\n { key: 'full', crop: { width: 400, height: 400, gravity: 'center' }, format: 'jpeg', quality: 85 },\n ],\n },\n },\n },\n },\n\n 'television-episode-photo': {\n kind: 'image',\n accept: ACCEPT_IMAGE_ONLY,\n maxBytes: IMAGE_RAW_BYTES,\n imageCrop: {\n aspectRatio: 1,\n outputWidth: 400,\n outputHeight: 400,\n format: 'jpeg',\n quality: 85,\n aspectRatioDisplay: '1:1',\n },\n client: {\n allowPick: true,\n allowCapturePhoto: true,\n allowRecordVideo: false,\n allowRecordAudio: false,\n },\n processing: {\n image: {\n kind: 'image',\n image: {\n variants: [\n { key: 'full', crop: { width: 400, height: 400, gravity: 'center' }, format: 'jpeg', quality: 85 },\n ],\n },\n },\n },\n },\n\n 'tune-track-audio': {\n kind: 'audio',\n accept: ACCEPT_AUDIO_ONLY,\n maxBytes: AUDIO_RAW_BYTES,\n maxDurationSec: LONG_AUDIO_DURATION_SEC,\n client: {\n allowPick: true,\n allowCapturePhoto: false,\n allowRecordVideo: false,\n allowRecordAudio: true,\n maxRecordDurationSec: RECORD_DURATION_SEC,\n },\n processing: {\n audio: {\n kind: 'audio',\n maxOutputBytes: AUDIO_OUTPUT_BYTES,\n audio: {\n maxDurationSec: LONG_AUDIO_DURATION_SEC,\n },\n },\n },\n },\n\n 'television-episode-video': {\n kind: 'video',\n accept: ACCEPT_VIDEO_ONLY,\n maxBytes: VIDEO_RAW_BYTES,\n maxDurationSec: TELEVISION_DURATION_SEC,\n client: {\n allowPick: true,\n allowCapturePhoto: false,\n allowRecordVideo: true,\n allowRecordAudio: false,\n maxRecordDurationSec: RECORD_DURATION_SEC,\n },\n processing: {\n video: {\n kind: 'video',\n requiredWidth: WIDE_VIDEO_WIDTH,\n requiredHeight: WIDE_VIDEO_HEIGHT,\n allowAutoFormat: true,\n maxDurationSec: TELEVISION_DURATION_SEC,\n maxOutputBytes: TELEVISION_OUTPUT_BYTES,\n video: { scaleMode: 'fit', preset: 'veryfast', crf: 28 },\n },\n },\n },\n\n 'guild-chat-message-attachment': {\n kind: 'generic',\n accept: ACCEPT_MEDIA_ALL,\n maxBytes: CHAT_RAW_BYTES,\n maxDurationSec: SHORT_VIDEO_DURATION_SEC,\n client: {\n allowPick: true,\n allowCapturePhoto: true,\n allowRecordVideo: true,\n allowRecordAudio: true,\n },\n processing: {\n image: {\n kind: 'image',\n image: {\n variants: [\n { key: 'main', maxWidth: 800, maxHeight: 800, format: 'jpeg', quality: 85 },\n ],\n },\n },\n video: {\n kind: 'video',\n requiredWidth: 800,\n requiredHeight: 600,\n allowAutoFormat: true,\n maxDurationSec: SHORT_VIDEO_DURATION_SEC,\n maxOutputBytes: SHORT_VIDEO_OUTPUT_BYTES,\n video: { scaleMode: 'fit', preset: 'veryfast', crf: 28 },\n },\n audio: {\n kind: 'audio',\n maxOutputBytes: AUDIO_OUTPUT_BYTES,\n audio: { maxDurationSec: CHAT_AUDIO_DURATION_SEC },\n },\n },\n },\n\n 'work-asset': {\n kind: 'generic',\n accept: ACCEPT_MEDIA_ALL,\n maxBytes: VIDEO_RAW_BYTES,\n maxDurationSec: SHORT_VIDEO_DURATION_SEC,\n client: {\n allowPick: true,\n allowCapturePhoto: true,\n allowRecordVideo: true,\n allowRecordAudio: true,\n maxRecordDurationSec: RECORD_DURATION_SEC,\n },\n processing: {\n image: {\n kind: 'image',\n image: {\n variants: [\n { key: 'main', maxWidth: 1280, maxHeight: 1280, format: 'jpeg', quality: 85 },\n ],\n },\n },\n video: {\n kind: 'video',\n requiredWidth: WIDE_VIDEO_WIDTH,\n requiredHeight: WIDE_VIDEO_HEIGHT,\n allowAutoFormat: true,\n maxDurationSec: SHORT_VIDEO_DURATION_SEC,\n maxOutputBytes: SHORT_VIDEO_OUTPUT_BYTES,\n video: { scaleMode: 'fit', preset: 'veryfast', crf: 28 },\n },\n audio: {\n kind: 'audio',\n maxOutputBytes: AUDIO_OUTPUT_BYTES,\n audio: {\n maxDurationSec: SHORT_VIDEO_DURATION_SEC,\n },\n },\n },\n },\n\n // NCII / TAKE IT DOWN evidence: a take-it-down requester (App Check, no login)\n // uploads the actual image/video as evidence. Preserved BYTE-EXACT — NO\n // `processing` block, so the pipeline never transcodes/resizes it (legal\n // integrity + the hash). Never served — the evidence processor scans it, lands\n // the original in the admin-only nciiEvidence bucket, and stops.\n 'ncii-evidence': {\n kind: 'generic',\n accept: ACCEPT_IMAGE_VIDEO,\n // [H-01/R10] 100MB (was VIDEO_RAW_BYTES=500MB) — see NCII_EVIDENCE_RAW_BYTES.\n maxBytes: NCII_EVIDENCE_RAW_BYTES,\n // Byte-exact: scanned, but NEVER transcoded/resized (legal evidence integrity).\n // The explicit flag marks this no-`processing` origin as intentional, not forgotten.\n preserveOriginal: true,\n client: {\n allowPick: true,\n allowCapturePhoto: false,\n allowRecordVideo: false,\n allowRecordAudio: false,\n },\n },\n\n};\n"]}
|
|
1
|
+
{"version":3,"file":"ttt-media-specs.js","sourceRoot":"","sources":["../../src/media/ttt-media-specs.ts"],"names":[],"mappings":"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","sourcesContent":["import type { FileOrigin } from \"./file-origin.js\";\nimport type { MediaOriginSpec } from \"@ttt-productions/media-schemas\";\nimport { byMode } from \"../constants/app-mode.js\";\n\n// Mode-aware media-origin registry. Two distinct caps per origin (see\n// ttt-prod docs/design/charter-season-and-app-mode.md):\n// - `maxBytes` — the RAW-INPUT cap at the upload gate. Deliberately generous:\n// modern phones record high-bitrate by default and the user can't control\n// that; the pipeline absorbs it. This is an abuse bound, not the quality cap.\n// - processing `maxOutputBytes` / `maxDurationSec` — the PROCESSED-OUTPUT\n// spec the transcoder enforces. This is what actually gets stored/served.\n// Charter mode = lower durations/output quality; full mode raises them.\n// storage.rules `uploadMaxBytes` mirrors the raw caps — keep in sync (S6 test).\n\nconst MB = 1024 * 1024;\n\n// --- Raw-input caps (upload gate) ---\nconst IMAGE_RAW_BYTES = 25 * MB; // 48MP phone HEIC/JPEG fits comfortably\nconst VIDEO_RAW_BYTES = byMode(500 * MB, 1024 * MB);\nconst AUDIO_RAW_BYTES = byMode(100 * MB, 250 * MB);\nconst CONVERSATION_FILE_RAW_BYTES = byMode(250 * MB, 500 * MB);\n// [H-01/R10] NCII take-it-down evidence: 100MB. The scan trigger downloads the whole object into a\n// ~512MiB Function before scanning, so an allowed file must fit in memory. No mode variation (the\n// evidence is preserveOriginal — never transcoded). Mirrored by storage.rules `uploadMaxBytes` (caps\n// sync test) + NciiPolicyConfigV1.maxEvidenceFileBytes (104857600).\nconst NCII_EVIDENCE_RAW_BYTES = 100 * MB;\n\n// --- Output duration caps (seconds) ---\nconst SHORT_VIDEO_DURATION_SEC = byMode(60, 180);\nconst ADMIN_PROMPT_DURATION_SEC = byMode(120, 600);\nconst TELEVISION_DURATION_SEC = byMode(300, 1800);\nconst LONG_AUDIO_DURATION_SEC = byMode(600, 900);\nconst CONVERSATION_FILE_AUDIO_DURATION_SEC = byMode(60, 180);\n\n// --- Output size caps (post-transcode) ---\nconst SHORT_VIDEO_OUTPUT_BYTES = byMode(60 * MB, 300 * MB);\nconst TELEVISION_OUTPUT_BYTES = byMode(200 * MB, 1024 * MB);\nconst AUDIO_OUTPUT_BYTES = byMode(20 * MB, 60 * MB);\n\n// --- Output resolutions (full mode unlocks 1080p on the big surfaces) ---\nconst WIDE_VIDEO_WIDTH = byMode(1280, 1920);\nconst WIDE_VIDEO_HEIGHT = byMode(720, 1080);\nconst ENTRY_VIDEO_WIDTH = byMode(360, 720);\nconst ENTRY_VIDEO_HEIGHT = byMode(640, 1280);\n\n// --- Client recording caps ---\nconst RECORD_DURATION_SEC = SHORT_VIDEO_DURATION_SEC;\n\nconst ACCEPT_IMAGE_ONLY = { kinds: ['image' as const] };\nconst ACCEPT_VIDEO_ONLY = { kinds: ['video' as const] };\nconst ACCEPT_AUDIO_ONLY = { kinds: ['audio' as const] };\nconst ACCEPT_MEDIA_ALL = { kinds: ['image' as const, 'video' as const, 'audio' as const] };\nconst ACCEPT_IMAGE_VIDEO = { kinds: ['image' as const, 'video' as const] };\n\n// Variant `key` values below are USAGES of the ONE canonical variant-key set\n// (`MEDIA_VARIANT_KEYS`, doc-schemas/media-assets.ts). The generic MediaOriginSpec\n// types them as open strings, so the CI validation lives in\n// media-origin-lineage.test.ts: every declared key must parse against\n// MediaVariantKeySchema (and every schema member must be declared somewhere).\nexport const TTT_MEDIA_SPECS: Record<FileOrigin, MediaOriginSpec> = {\n\n 'profile-picture': {\n kind: 'image',\n accept: ACCEPT_IMAGE_ONLY,\n maxBytes: IMAGE_RAW_BYTES,\n imageCrop: {\n aspectRatio: 1,\n outputWidth: 200,\n outputHeight: 200,\n shape: 'round',\n format: 'jpeg',\n quality: 85,\n aspectRatioDisplay: '1:1',\n },\n client: {\n allowPick: true,\n allowCapturePhoto: true,\n allowRecordVideo: false,\n allowRecordAudio: false,\n },\n processing: {\n image: {\n kind: 'image',\n image: {\n variants: [\n { key: 'full', crop: { width: 200, height: 200, gravity: 'center' }, format: 'jpeg', quality: 85 },\n { key: 'medium', crop: { width: 48, height: 48, gravity: 'center' }, format: 'jpeg', quality: 85 },\n { key: 'small', crop: { width: 32, height: 32, gravity: 'center' }, format: 'jpeg', quality: 85 },\n ],\n },\n },\n },\n },\n\n 'craft-skill-media': {\n kind: 'image',\n accept: ACCEPT_MEDIA_ALL,\n maxBytes: VIDEO_RAW_BYTES,\n maxDurationSec: SHORT_VIDEO_DURATION_SEC,\n imageCrop: {\n aspectRatio: 4 / 3,\n outputWidth: 800,\n outputHeight: 600,\n format: 'jpeg',\n quality: 85,\n aspectRatioDisplay: '4:3',\n },\n client: {\n allowPick: true,\n allowCapturePhoto: true,\n allowRecordVideo: true,\n allowRecordAudio: true,\n maxRecordDurationSec: RECORD_DURATION_SEC,\n },\n processing: {\n image: {\n kind: 'image',\n image: {\n variants: [\n { key: 'main', crop: { width: 800, height: 600, gravity: 'center' }, format: 'jpeg', quality: 85 },\n ],\n },\n },\n video: {\n kind: 'video',\n requiredWidth: 800,\n requiredHeight: 600,\n allowAutoFormat: true,\n maxDurationSec: SHORT_VIDEO_DURATION_SEC,\n maxOutputBytes: SHORT_VIDEO_OUTPUT_BYTES,\n video: { scaleMode: 'fit', preset: 'veryfast', crf: 28 },\n },\n audio: {\n kind: 'audio',\n maxOutputBytes: AUDIO_OUTPUT_BYTES,\n audio: { maxDurationSec: LONG_AUDIO_DURATION_SEC },\n },\n },\n },\n\n 'hallLibrary-cover-square': {\n kind: 'image',\n accept: ACCEPT_IMAGE_ONLY,\n maxBytes: IMAGE_RAW_BYTES,\n imageCrop: {\n aspectRatio: 1,\n outputWidth: 600,\n outputHeight: 600,\n format: 'jpeg',\n quality: 85,\n aspectRatioDisplay: '1:1',\n },\n client: {\n allowPick: true,\n allowCapturePhoto: true,\n allowRecordVideo: false,\n allowRecordAudio: false,\n },\n processing: {\n image: {\n kind: 'image',\n image: {\n variants: [\n { key: 'full', crop: { width: 600, height: 600, gravity: 'center' }, format: 'jpeg', quality: 85 },\n ],\n },\n },\n },\n },\n\n // Realm cover art — same square recipe as the Work square cover. One 'full'\n // variant; draft realms may lack a cover, release requires one.\n 'realm-cover': {\n kind: 'image',\n accept: ACCEPT_IMAGE_ONLY,\n maxBytes: IMAGE_RAW_BYTES,\n imageCrop: {\n aspectRatio: 1,\n outputWidth: 600,\n outputHeight: 600,\n format: 'jpeg',\n quality: 85,\n aspectRatioDisplay: '1:1',\n },\n client: {\n allowPick: true,\n allowCapturePhoto: true,\n allowRecordVideo: false,\n allowRecordAudio: false,\n },\n processing: {\n image: {\n kind: 'image',\n image: {\n variants: [\n { key: 'full', crop: { width: 600, height: 600, gravity: 'center' }, format: 'jpeg', quality: 85 },\n ],\n },\n },\n },\n },\n\n 'hallLibrary-cover-poster': {\n kind: 'image',\n accept: ACCEPT_IMAGE_ONLY,\n maxBytes: IMAGE_RAW_BYTES,\n imageCrop: {\n aspectRatio: 2 / 3,\n outputWidth: 400,\n outputHeight: 600,\n format: 'jpeg',\n quality: 85,\n aspectRatioDisplay: '2:3',\n },\n client: {\n allowPick: true,\n allowCapturePhoto: true,\n allowRecordVideo: false,\n allowRecordAudio: false,\n },\n processing: {\n image: {\n kind: 'image',\n image: {\n variants: [\n { key: 'full', crop: { width: 400, height: 600, gravity: 'center' }, format: 'jpeg', quality: 85 },\n ],\n },\n },\n },\n },\n\n 'hallLibrary-cover-cinematic': {\n kind: 'image',\n accept: ACCEPT_IMAGE_ONLY,\n maxBytes: IMAGE_RAW_BYTES,\n imageCrop: {\n aspectRatio: 16 / 9,\n outputWidth: 1280,\n outputHeight: 720,\n format: 'jpeg',\n quality: 85,\n aspectRatioDisplay: '16:9',\n },\n client: {\n allowPick: true,\n allowCapturePhoto: true,\n allowRecordVideo: false,\n allowRecordAudio: false,\n },\n processing: {\n image: {\n kind: 'image',\n image: {\n variants: [\n { key: 'full', crop: { width: 1280, height: 720, gravity: 'center' }, format: 'jpeg', quality: 85 },\n ],\n },\n },\n },\n },\n\n 'squareStreetz': {\n kind: 'image',\n accept: ACCEPT_MEDIA_ALL,\n maxBytes: VIDEO_RAW_BYTES,\n maxDurationSec: SHORT_VIDEO_DURATION_SEC,\n imageCrop: {\n aspectRatio: 16 / 9,\n outputWidth: 1280,\n outputHeight: 720,\n format: 'jpeg',\n quality: 85,\n aspectRatioDisplay: '16:9',\n },\n client: {\n allowPick: true,\n allowCapturePhoto: true,\n allowRecordVideo: true,\n allowRecordAudio: true,\n maxRecordDurationSec: RECORD_DURATION_SEC,\n },\n processing: {\n image: {\n kind: 'image',\n image: {\n variants: [\n { key: 'main', maxWidth: 1280, maxHeight: 720, format: 'jpeg', quality: 85 },\n ],\n },\n },\n video: {\n kind: 'video',\n requiredWidth: WIDE_VIDEO_WIDTH,\n requiredHeight: WIDE_VIDEO_HEIGHT,\n allowAutoFormat: true,\n maxDurationSec: SHORT_VIDEO_DURATION_SEC,\n maxOutputBytes: SHORT_VIDEO_OUTPUT_BYTES,\n video: { scaleMode: 'fit', preset: 'veryfast', crf: 28 },\n },\n audio: {\n kind: 'audio',\n maxOutputBytes: AUDIO_OUTPUT_BYTES,\n audio: { maxDurationSec: LONG_AUDIO_DURATION_SEC },\n },\n },\n },\n\n 'audition-prompt': {\n kind: 'video',\n accept: ACCEPT_VIDEO_ONLY,\n maxBytes: VIDEO_RAW_BYTES,\n maxDurationSec: SHORT_VIDEO_DURATION_SEC,\n requiredAspectRatio: 16 / 9,\n videoOrientation: 'horizontal' as const,\n client: {\n allowPick: true,\n allowCapturePhoto: false,\n allowRecordVideo: true,\n allowRecordAudio: false,\n maxRecordDurationSec: RECORD_DURATION_SEC,\n },\n processing: {\n video: {\n kind: 'video',\n requiredWidth: WIDE_VIDEO_WIDTH,\n requiredHeight: WIDE_VIDEO_HEIGHT,\n allowAutoFormat: true,\n maxDurationSec: SHORT_VIDEO_DURATION_SEC,\n maxOutputBytes: SHORT_VIDEO_OUTPUT_BYTES,\n video: { scaleMode: 'fit', preset: 'veryfast', crf: 28 },\n },\n },\n },\n\n 'admin-audition-prompt': {\n kind: 'video',\n accept: ACCEPT_VIDEO_ONLY,\n maxBytes: VIDEO_RAW_BYTES,\n maxDurationSec: ADMIN_PROMPT_DURATION_SEC,\n requiredAspectRatio: 16 / 9,\n videoOrientation: 'horizontal' as const,\n client: {\n allowPick: true,\n allowCapturePhoto: false,\n allowRecordVideo: true,\n allowRecordAudio: false,\n maxRecordDurationSec: ADMIN_PROMPT_DURATION_SEC,\n },\n processing: {\n video: {\n kind: 'video',\n requiredWidth: WIDE_VIDEO_WIDTH,\n requiredHeight: WIDE_VIDEO_HEIGHT,\n allowAutoFormat: true,\n maxDurationSec: ADMIN_PROMPT_DURATION_SEC,\n maxOutputBytes: SHORT_VIDEO_OUTPUT_BYTES,\n video: { scaleMode: 'fit', preset: 'veryfast', crf: 28 },\n },\n },\n },\n\n 'audition-entry': {\n kind: 'video',\n accept: ACCEPT_VIDEO_ONLY,\n maxBytes: VIDEO_RAW_BYTES,\n maxDurationSec: SHORT_VIDEO_DURATION_SEC,\n requiredAspectRatio: 9 / 16,\n videoOrientation: 'vertical' as const,\n client: {\n allowPick: true,\n allowCapturePhoto: false,\n allowRecordVideo: true,\n allowRecordAudio: false,\n cameraFacingMode: 'user' as const,\n maxRecordDurationSec: RECORD_DURATION_SEC,\n },\n processing: {\n video: {\n kind: 'video',\n requiredWidth: ENTRY_VIDEO_WIDTH,\n requiredHeight: ENTRY_VIDEO_HEIGHT,\n allowAutoFormat: true,\n maxDurationSec: SHORT_VIDEO_DURATION_SEC,\n maxOutputBytes: SHORT_VIDEO_OUTPUT_BYTES,\n video: { scaleMode: 'fit', preset: 'veryfast', crf: 28 },\n },\n },\n },\n\n 'commission-posting': {\n kind: 'image',\n accept: ACCEPT_MEDIA_ALL,\n maxBytes: VIDEO_RAW_BYTES,\n maxDurationSec: SHORT_VIDEO_DURATION_SEC,\n imageCrop: {\n aspectRatio: 4 / 3,\n outputWidth: 800,\n outputHeight: 600,\n format: 'jpeg',\n quality: 85,\n aspectRatioDisplay: '4:3',\n },\n client: {\n allowPick: true,\n allowCapturePhoto: true,\n allowRecordVideo: true,\n allowRecordAudio: true,\n maxRecordDurationSec: RECORD_DURATION_SEC,\n },\n processing: {\n image: {\n kind: 'image',\n image: {\n variants: [\n { key: 'main', crop: { width: 800, height: 600, gravity: 'center' }, format: 'jpeg', quality: 85 },\n ],\n },\n },\n video: {\n kind: 'video',\n requiredWidth: 800,\n requiredHeight: 600,\n allowAutoFormat: true,\n maxDurationSec: SHORT_VIDEO_DURATION_SEC,\n maxOutputBytes: SHORT_VIDEO_OUTPUT_BYTES,\n video: { scaleMode: 'fit', preset: 'veryfast', crf: 28 },\n },\n audio: {\n kind: 'audio',\n maxOutputBytes: AUDIO_OUTPUT_BYTES,\n audio: { maxDurationSec: LONG_AUDIO_DURATION_SEC },\n },\n },\n },\n\n 'commission-proposal': {\n kind: 'image',\n accept: ACCEPT_MEDIA_ALL,\n maxBytes: VIDEO_RAW_BYTES,\n maxDurationSec: SHORT_VIDEO_DURATION_SEC,\n imageCrop: {\n aspectRatio: 4 / 3,\n outputWidth: 800,\n outputHeight: 600,\n format: 'jpeg',\n quality: 85,\n aspectRatioDisplay: '4:3',\n },\n client: {\n allowPick: true,\n allowCapturePhoto: true,\n allowRecordVideo: true,\n allowRecordAudio: true,\n maxRecordDurationSec: RECORD_DURATION_SEC,\n },\n processing: {\n image: {\n kind: 'image',\n image: {\n variants: [\n { key: 'main', crop: { width: 800, height: 600, gravity: 'center' }, format: 'jpeg', quality: 85 },\n ],\n },\n },\n video: {\n kind: 'video',\n requiredWidth: 800,\n requiredHeight: 600,\n allowAutoFormat: true,\n maxDurationSec: SHORT_VIDEO_DURATION_SEC,\n maxOutputBytes: SHORT_VIDEO_OUTPUT_BYTES,\n video: { scaleMode: 'fit', preset: 'veryfast', crf: 28 },\n },\n audio: {\n kind: 'audio',\n maxOutputBytes: AUDIO_OUTPUT_BYTES,\n audio: { maxDurationSec: LONG_AUDIO_DURATION_SEC },\n },\n },\n },\n\n 'chapter-photo': {\n kind: 'image',\n accept: ACCEPT_IMAGE_ONLY,\n maxBytes: IMAGE_RAW_BYTES,\n imageCrop: {\n aspectRatio: 1,\n outputWidth: 400,\n outputHeight: 400,\n format: 'jpeg',\n quality: 85,\n aspectRatioDisplay: '1:1',\n },\n client: {\n allowPick: true,\n allowCapturePhoto: true,\n allowRecordVideo: false,\n allowRecordAudio: false,\n },\n processing: {\n image: {\n kind: 'image',\n image: {\n variants: [\n { key: 'full', crop: { width: 400, height: 400, gravity: 'center' }, format: 'jpeg', quality: 85 },\n ],\n },\n },\n },\n },\n\n 'tune-track-photo': {\n kind: 'image',\n accept: ACCEPT_IMAGE_ONLY,\n maxBytes: IMAGE_RAW_BYTES,\n imageCrop: {\n aspectRatio: 1,\n outputWidth: 400,\n outputHeight: 400,\n format: 'jpeg',\n quality: 85,\n aspectRatioDisplay: '1:1',\n },\n client: {\n allowPick: true,\n allowCapturePhoto: true,\n allowRecordVideo: false,\n allowRecordAudio: false,\n },\n processing: {\n image: {\n kind: 'image',\n image: {\n variants: [\n { key: 'full', crop: { width: 400, height: 400, gravity: 'center' }, format: 'jpeg', quality: 85 },\n ],\n },\n },\n },\n },\n\n 'television-episode-photo': {\n kind: 'image',\n accept: ACCEPT_IMAGE_ONLY,\n maxBytes: IMAGE_RAW_BYTES,\n imageCrop: {\n aspectRatio: 1,\n outputWidth: 400,\n outputHeight: 400,\n format: 'jpeg',\n quality: 85,\n aspectRatioDisplay: '1:1',\n },\n client: {\n allowPick: true,\n allowCapturePhoto: true,\n allowRecordVideo: false,\n allowRecordAudio: false,\n },\n processing: {\n image: {\n kind: 'image',\n image: {\n variants: [\n { key: 'full', crop: { width: 400, height: 400, gravity: 'center' }, format: 'jpeg', quality: 85 },\n ],\n },\n },\n },\n },\n\n 'tune-track-audio': {\n kind: 'audio',\n accept: ACCEPT_AUDIO_ONLY,\n maxBytes: AUDIO_RAW_BYTES,\n maxDurationSec: LONG_AUDIO_DURATION_SEC,\n client: {\n allowPick: true,\n allowCapturePhoto: false,\n allowRecordVideo: false,\n allowRecordAudio: true,\n maxRecordDurationSec: RECORD_DURATION_SEC,\n },\n processing: {\n audio: {\n kind: 'audio',\n maxOutputBytes: AUDIO_OUTPUT_BYTES,\n audio: {\n maxDurationSec: LONG_AUDIO_DURATION_SEC,\n },\n },\n },\n },\n\n 'television-episode-video': {\n kind: 'video',\n accept: ACCEPT_VIDEO_ONLY,\n maxBytes: VIDEO_RAW_BYTES,\n maxDurationSec: TELEVISION_DURATION_SEC,\n client: {\n allowPick: true,\n allowCapturePhoto: false,\n allowRecordVideo: true,\n allowRecordAudio: false,\n maxRecordDurationSec: RECORD_DURATION_SEC,\n },\n processing: {\n video: {\n kind: 'video',\n requiredWidth: WIDE_VIDEO_WIDTH,\n requiredHeight: WIDE_VIDEO_HEIGHT,\n allowAutoFormat: true,\n maxDurationSec: TELEVISION_DURATION_SEC,\n maxOutputBytes: TELEVISION_OUTPUT_BYTES,\n video: { scaleMode: 'fit', preset: 'veryfast', crf: 28 },\n },\n },\n },\n\n // Conversation Files (guild-invite + admin-support conversations). Same\n // image/video/audio processing recipe the removed chat-attachment origin used —\n // the replacement changed the OWNER of the published asset, not the pipeline.\n 'conversation-file': {\n kind: 'generic',\n accept: ACCEPT_MEDIA_ALL,\n maxBytes: CONVERSATION_FILE_RAW_BYTES,\n maxDurationSec: SHORT_VIDEO_DURATION_SEC,\n client: {\n allowPick: true,\n allowCapturePhoto: true,\n allowRecordVideo: true,\n allowRecordAudio: true,\n },\n processing: {\n image: {\n kind: 'image',\n image: {\n variants: [\n { key: 'main', maxWidth: 800, maxHeight: 800, format: 'jpeg', quality: 85 },\n ],\n },\n },\n video: {\n kind: 'video',\n requiredWidth: 800,\n requiredHeight: 600,\n allowAutoFormat: true,\n maxDurationSec: SHORT_VIDEO_DURATION_SEC,\n maxOutputBytes: SHORT_VIDEO_OUTPUT_BYTES,\n video: { scaleMode: 'fit', preset: 'veryfast', crf: 28 },\n },\n audio: {\n kind: 'audio',\n maxOutputBytes: AUDIO_OUTPUT_BYTES,\n audio: { maxDurationSec: CONVERSATION_FILE_AUDIO_DURATION_SEC },\n },\n },\n },\n\n 'work-asset': {\n kind: 'generic',\n accept: ACCEPT_MEDIA_ALL,\n maxBytes: VIDEO_RAW_BYTES,\n maxDurationSec: SHORT_VIDEO_DURATION_SEC,\n client: {\n allowPick: true,\n allowCapturePhoto: true,\n allowRecordVideo: true,\n allowRecordAudio: true,\n maxRecordDurationSec: RECORD_DURATION_SEC,\n },\n processing: {\n image: {\n kind: 'image',\n image: {\n variants: [\n { key: 'main', maxWidth: 1280, maxHeight: 1280, format: 'jpeg', quality: 85 },\n ],\n },\n },\n video: {\n kind: 'video',\n requiredWidth: WIDE_VIDEO_WIDTH,\n requiredHeight: WIDE_VIDEO_HEIGHT,\n allowAutoFormat: true,\n maxDurationSec: SHORT_VIDEO_DURATION_SEC,\n maxOutputBytes: SHORT_VIDEO_OUTPUT_BYTES,\n video: { scaleMode: 'fit', preset: 'veryfast', crf: 28 },\n },\n audio: {\n kind: 'audio',\n maxOutputBytes: AUDIO_OUTPUT_BYTES,\n audio: {\n maxDurationSec: SHORT_VIDEO_DURATION_SEC,\n },\n },\n },\n },\n\n // NCII / TAKE IT DOWN evidence: a take-it-down requester (App Check, no login)\n // uploads the actual image/video as evidence. Preserved BYTE-EXACT — NO\n // `processing` block, so the pipeline never transcodes/resizes it (legal\n // integrity + the hash). Never served — the evidence processor scans it, lands\n // the original in the admin-only nciiEvidence bucket, and stops.\n 'ncii-evidence': {\n kind: 'generic',\n accept: ACCEPT_IMAGE_VIDEO,\n // [H-01/R10] 100MB (was VIDEO_RAW_BYTES=500MB) — see NCII_EVIDENCE_RAW_BYTES.\n maxBytes: NCII_EVIDENCE_RAW_BYTES,\n // Byte-exact: scanned, but NEVER transcoded/resized (legal evidence integrity).\n // The explicit flag marks this no-`processing` origin as intentional, not forgotten.\n preserveOriginal: true,\n client: {\n allowPick: true,\n allowCapturePhoto: false,\n allowRecordVideo: false,\n allowRecordAudio: false,\n },\n },\n\n};\n"]}
|
|
@@ -24,7 +24,7 @@ export const fileOriginRowLabel = {
|
|
|
24
24
|
'television-episode-photo': 'Episode photo',
|
|
25
25
|
'television-episode-video': 'Episode video',
|
|
26
26
|
'work-asset': 'Work asset',
|
|
27
|
-
'
|
|
27
|
+
'conversation-file': 'Conversation file',
|
|
28
28
|
'ncii-evidence': 'Take-it-down evidence',
|
|
29
29
|
};
|
|
30
30
|
// =============================================================================
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload-tray-display.js","sourceRoot":"","sources":["../../src/media/upload-tray-display.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAExE,gFAAgF;AAChF,oCAAoC;AACpC,gFAAgF;AAChF,EAAE;AACF,yEAAyE;AACzE,mEAAmE;AAEnE,MAAM,CAAC,MAAM,kBAAkB,GAA+B;IAC5D,iBAAiB,EAAE,iBAAiB;IACpC,mBAAmB,EAAE,OAAO;IAC5B,eAAe,EAAE,aAAa;IAC9B,oBAAoB,EAAE,oBAAoB;IAC1C,qBAAqB,EAAE,qBAAqB;IAC5C,iBAAiB,EAAE,UAAU;IAC7B,uBAAuB,EAAE,oBAAoB;IAC7C,gBAAgB,EAAE,gBAAgB;IAClC,0BAA0B,EAAE,YAAY;IACxC,0BAA0B,EAAE,YAAY;IACxC,6BAA6B,EAAE,YAAY;IAC3C,aAAa,EAAE,aAAa;IAC5B,eAAe,EAAE,eAAe;IAChC,kBAAkB,EAAE,aAAa;IACjC,kBAAkB,EAAE,aAAa;IACjC,0BAA0B,EAAE,eAAe;IAC3C,0BAA0B,EAAE,eAAe;IAC3C,YAAY,EAAE,YAAY;IAC1B
|
|
1
|
+
{"version":3,"file":"upload-tray-display.js","sourceRoot":"","sources":["../../src/media/upload-tray-display.ts"],"names":[],"mappings":"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","sourcesContent":["import type { FileOrigin } from './file-origin.js';\nimport { getSimplifiedMediaType } from '@ttt-productions/media-schemas';\n\n// =============================================================================\n// User-facing labels per fileOrigin\n// =============================================================================\n//\n// Generic labels for upload tray rows. Same regardless of platform (web,\n// iOS, Android, smart TV) since they describe TTT domain entities.\n\nexport const fileOriginRowLabel: Record<FileOrigin, string> = {\n 'profile-picture': 'Profile picture',\n 'craft-skill-media': 'Craft',\n 'squareStreetz': 'Square post',\n 'commission-posting': 'Commission posting',\n 'commission-proposal': 'Commission proposal',\n 'audition-prompt': 'Audition',\n 'admin-audition-prompt': 'Sponsored audition',\n 'audition-entry': 'Audition entry',\n 'hallLibrary-cover-square': 'Work cover',\n 'hallLibrary-cover-poster': 'Work cover',\n 'hallLibrary-cover-cinematic': 'Work cover',\n 'realm-cover': 'Realm cover',\n 'chapter-photo': 'Chapter photo',\n 'tune-track-photo': 'Track photo',\n 'tune-track-audio': 'Track audio',\n 'television-episode-photo': 'Episode photo',\n 'television-episode-video': 'Episode video',\n 'work-asset': 'Work asset',\n 'conversation-file': 'Conversation file',\n 'ncii-evidence': 'Take-it-down evidence',\n};\n\n// =============================================================================\n// Timestamp formatting\n// =============================================================================\n//\n// Cutoff after which the upload row stops showing relative time\n// (\"2 minutes ago\") and switches to absolute local time (\"3:42 PM\").\n// Default: 6 hours.\n\nexport const DEFAULT_RELATIVE_TIME_CUTOFF_MS = 6 * 60 * 60 * 1000;\n\n/**\n * Format an upload's createdAt timestamp for display in a tray row.\n *\n * - Within `cutoffMs` of now: relative (\"just now\", \"Xm ago\", \"Xh ago\").\n * - Older: absolute local time. Today: \"3:42 PM\". Yesterday: \"Yesterday 3:42 PM\".\n * Older: short date + time, e.g. \"May 21, 3:42 PM\".\n *\n * Both `createdAtMs` and `nowMs` are millisecond epochs.\n */\nexport function formatUploadTimestamp(\n createdAtMs: number,\n nowMs: number,\n cutoffMs: number = DEFAULT_RELATIVE_TIME_CUTOFF_MS,\n): string {\n const diffMs = Math.max(0, nowMs - createdAtMs);\n\n if (diffMs < cutoffMs) {\n // Relative path.\n if (diffMs < 60_000) return 'just now';\n const minutes = Math.floor(diffMs / 60_000);\n if (minutes < 60) return `${minutes}m ago`;\n const hours = Math.floor(diffMs / 3_600_000);\n return `${hours}h ago`;\n }\n\n // Absolute path.\n const created = new Date(createdAtMs);\n const now = new Date(nowMs);\n\n const timeStr = created.toLocaleTimeString(undefined, {\n hour: 'numeric',\n minute: '2-digit',\n });\n\n const sameDay =\n created.getFullYear() === now.getFullYear() &&\n created.getMonth() === now.getMonth() &&\n created.getDate() === now.getDate();\n if (sameDay) return timeStr;\n\n const yesterday = new Date(nowMs - 24 * 60 * 60 * 1000);\n const isYesterday =\n created.getFullYear() === yesterday.getFullYear() &&\n created.getMonth() === yesterday.getMonth() &&\n created.getDate() === yesterday.getDate();\n if (isYesterday) return `Yesterday ${timeStr}`;\n\n const dateStr = created.toLocaleDateString(undefined, {\n month: 'short',\n day: 'numeric',\n });\n return `${dateStr}, ${timeStr}`;\n}\n\n// =============================================================================\n// File type labeling\n// =============================================================================\n//\n// Friendly label for a content type string. Wraps getSimplifiedMediaType\n// from media-schemas with capitalization for tray display.\n// Returns null when contentType is undefined/empty.\n\nexport function getFileTypeLabel(contentType: string | undefined): string | null {\n if (!contentType) return null;\n switch (getSimplifiedMediaType(contentType)) {\n case 'image':\n return 'Image';\n case 'video':\n return 'Video';\n case 'audio':\n return 'Audio';\n default:\n return 'File';\n }\n}\n\n"]}
|
|
@@ -22,5 +22,7 @@ export declare const COLLECTION_REFS: {
|
|
|
22
22
|
readonly auditionEntries: (auditionId: string) => [string, string, string];
|
|
23
23
|
readonly tuneTracks: (workProjectId: string, tuneId: string) => readonly [string, string, string, string, string];
|
|
24
24
|
readonly moderationCascadeChangedDocs: (cascadeId: string) => [string, string, string];
|
|
25
|
+
readonly guildInviteConversationFiles: (guildInviteId: string) => [string, string, string];
|
|
26
|
+
readonly adminDispatchConversationFiles: (adminDispatchId: string) => [string, string, string];
|
|
25
27
|
};
|
|
26
28
|
//# sourceMappingURL=collection-refs.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collection-refs.d.ts","sourceRoot":"","sources":["../../src/paths/collection-refs.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,eAAe;iCAER,CAAC,MAAM,CAAC;oCACL,CAAC,MAAM,CAAC;uCACL,CAAC,MAAM,CAAC;+BAChB,CAAC,MAAM,CAAC;sCACD,CAAC,MAAM,CAAC;uCACP,CAAC,MAAM,CAAC;kCACb,CAAC,MAAM,CAAC;gCACV,CAAC,MAAM,CAAC;mCACL,CAAC,MAAM,CAAC;uCAGF,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;+CAIzB,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;+CAGjC,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;oDAG5B,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;8DAGvB,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;gDAG/C,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;gCAInD,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;mCAIrB,CAAC,MAAM,CAAC;8BAEb,CAAC,MAAM,CAAC;8CAEQ,CAAC,MAAM,CAAC;wDAGI,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;2CAG9C,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;yCAGnC,MAAM,UAAU,MAAM,KAAG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;uDAG5D,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"collection-refs.d.ts","sourceRoot":"","sources":["../../src/paths/collection-refs.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,eAAe;iCAER,CAAC,MAAM,CAAC;oCACL,CAAC,MAAM,CAAC;uCACL,CAAC,MAAM,CAAC;+BAChB,CAAC,MAAM,CAAC;sCACD,CAAC,MAAM,CAAC;uCACP,CAAC,MAAM,CAAC;kCACb,CAAC,MAAM,CAAC;gCACV,CAAC,MAAM,CAAC;mCACL,CAAC,MAAM,CAAC;uCAGF,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;+CAIzB,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;+CAGjC,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;oDAG5B,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;8DAGvB,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;gDAG/C,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;gCAInD,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;mCAIrB,CAAC,MAAM,CAAC;8BAEb,CAAC,MAAM,CAAC;8CAEQ,CAAC,MAAM,CAAC;wDAGI,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;2CAG9C,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;yCAGnC,MAAM,UAAU,MAAM,KAAG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;uDAG5D,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;2DAK7B,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;+DAG7B,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;CAE3E,CAAC"}
|
|
@@ -33,5 +33,9 @@ export const COLLECTION_REFS = {
|
|
|
33
33
|
auditionEntries: (auditionId) => [COLLECTIONS.AUDITION_BOARD, auditionId, NESTED_SUBCOLLECTIONS.AUDITION_ENTRIES],
|
|
34
34
|
tuneTracks: (workProjectId, tuneId) => [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_PROJECT_TUNES, tuneId, NESTED_SUBCOLLECTIONS.TUNE_TRACKS],
|
|
35
35
|
moderationCascadeChangedDocs: (cascadeId) => [COLLECTIONS.MODERATION_CASCADE_MANIFESTS, cascadeId, NESTED_SUBCOLLECTIONS.CHANGED_DOCS],
|
|
36
|
+
// Conversation Files list for each supported ConversationFileRef scope (the panel
|
|
37
|
+
// subscribes to the collection; the backend writes the docs).
|
|
38
|
+
guildInviteConversationFiles: (guildInviteId) => [COLLECTIONS.GUILD_INVITE_CONVERSATIONS, guildInviteId, NESTED_SUBCOLLECTIONS.CONVERSATION_FILES],
|
|
39
|
+
adminDispatchConversationFiles: (adminDispatchId) => [COLLECTIONS.PENDING_ADMIN_DISPATCHES, adminDispatchId, NESTED_SUBCOLLECTIONS.CONVERSATION_FILES],
|
|
36
40
|
};
|
|
37
41
|
//# sourceMappingURL=collection-refs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collection-refs.js","sourceRoot":"","sources":["../../src/paths/collection-refs.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"collection-refs.js","sourceRoot":"","sources":["../../src/paths/collection-refs.ts"],"names":[],"mappings":"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","sourcesContent":["// Collection reference builders — for collection-level operations.\n//\n// Frontend: collection(db, ...COLLECTION_REFS.userProfiles())\n// Backend: db.collection(toPath(COLLECTION_REFS.userProfiles()))\n\nimport {\n COLLECTIONS,\n USER_SUBCOLLECTIONS,\n WORK_PROJECT_SUBCOLLECTIONS,\n NESTED_SUBCOLLECTIONS,\n} from './collections.js';\n\nexport const COLLECTION_REFS = {\n // Top-level collections\n userProfiles: (): [string] => [COLLECTIONS.USER_PROFILES],\n allWorkProjects: (): [string] => [COLLECTIONS.ALL_WORK_PROJECTS],\n publicWorkProjects: (): [string] => [COLLECTIONS.PUBLIC_WORK_PROJECTS],\n workRealms: (): [string] => [COLLECTIONS.WORK_REALMS],\n squareStreetzFeed: (): [string] => [COLLECTIONS.SQUARE_STREETZ_FEED],\n commissionListings: (): [string] => [COLLECTIONS.COMMISSION_LISTINGS],\n auditionBoard: (): [string] => [COLLECTIONS.AUDITION_BOARD],\n followEdges: (): [string] => [COLLECTIONS.FOLLOW_EDGES],\n followCounters: (): [string] => [COLLECTIONS.FOLLOW_COUNTERS],\n\n // User subcollections\n userCraftSkills: (userId: string): [string, string, string] =>\n [COLLECTIONS.USER_PROFILES, userId, USER_SUBCOLLECTIONS.PROFILE_CRAFT_SKILLS],\n\n // WorkProject subcollections\n workProjectTales: (workProjectId: string): [string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_PROJECT_TALES],\n\n workProjectTunes: (workProjectId: string): [string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_PROJECT_TUNES],\n\n workProjectTelevision: (workProjectId: string): [string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_PROJECT_TELEVISION],\n\n workProjectPublicGuildmateUsers: (workProjectId: string): [string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.PUBLIC_GUILDMATE_USERS],\n\n guildChatChannels: (workProjectId: string): [string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.GUILD_CHAT_CHANNELS],\n\n // SquareStreetz collections\n activePosts: (): [string, string, string] =>\n [COLLECTIONS.SQUARE_STREETZ_FEED, NESTED_SUBCOLLECTIONS.ACTIVE_POSTS, NESTED_SUBCOLLECTIONS.SOCIAL_POSTS],\n\n // HallLibrary collections\n thresholdItems: (): [string] => [COLLECTIONS.THRESHOLD_ITEMS],\n\n hallItems: (): [string] => [COLLECTIONS.HALL_ITEMS],\n\n hallContentChangeRequests: (): [string] => [COLLECTIONS.HALL_CONTENT_CHANGE_REQUESTS],\n\n // Commission/Audition collections\n commissionProposals: (commissionListingId: string): [string, string, string] =>\n [COLLECTIONS.COMMISSION_LISTINGS, commissionListingId, NESTED_SUBCOLLECTIONS.COMMISSION_PROPOSALS],\n\n auditionEntries: (auditionId: string): [string, string, string] =>\n [COLLECTIONS.AUDITION_BOARD, auditionId, NESTED_SUBCOLLECTIONS.AUDITION_ENTRIES],\n\n tuneTracks: (workProjectId: string, tuneId: string): readonly [string, string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_PROJECT_TUNES, tuneId, NESTED_SUBCOLLECTIONS.TUNE_TRACKS] as const,\n\n moderationCascadeChangedDocs: (cascadeId: string): [string, string, string] =>\n [COLLECTIONS.MODERATION_CASCADE_MANIFESTS, cascadeId, NESTED_SUBCOLLECTIONS.CHANGED_DOCS],\n\n // Conversation Files list for each supported ConversationFileRef scope (the panel\n // subscribes to the collection; the backend writes the docs).\n guildInviteConversationFiles: (guildInviteId: string): [string, string, string] =>\n [COLLECTIONS.GUILD_INVITE_CONVERSATIONS, guildInviteId, NESTED_SUBCOLLECTIONS.CONVERSATION_FILES],\n\n adminDispatchConversationFiles: (adminDispatchId: string): [string, string, string] =>\n [COLLECTIONS.PENDING_ADMIN_DISPATCHES, adminDispatchId, NESTED_SUBCOLLECTIONS.CONVERSATION_FILES],\n} as const;\n"]}
|
|
@@ -139,6 +139,7 @@ export declare const NESTED_SUBCOLLECTIONS: {
|
|
|
139
139
|
readonly TELEVISION_EPISODES: "televisionEpisodes";
|
|
140
140
|
readonly WORK_FILES: "workFiles";
|
|
141
141
|
readonly CONVERSATION_MESSAGES: "conversationMessages";
|
|
142
|
+
readonly CONVERSATION_FILES: "conversationFiles";
|
|
142
143
|
readonly SOCIAL_POSTS: "socialPosts";
|
|
143
144
|
readonly ACTIVE_POSTS: "activePosts";
|
|
144
145
|
readonly TRENDING_POSTS: "trendingPosts";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collections.d.ts","sourceRoot":"","sources":["../../src/paths/collections.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8Id,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;CAQtB,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,2BAA2B;;;;;;;;CAQ9B,CAAC;AAEX;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB;;;;CAI3B,CAAC;AAEX,MAAM,MAAM,qBAAqB,GAC/B,CAAC,OAAO,wBAAwB,CAAC,CAAC,MAAM,OAAO,wBAAwB,CAAC,CAAC;AAE3E,uEAAuE;AACvE,eAAO,MAAM,oCAAoC,EAAE,MAAM,CAAC,eAAe,EAAE,qBAAqB,CAI/F,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,qBAAqB
|
|
1
|
+
{"version":3,"file":"collections.d.ts","sourceRoot":"","sources":["../../src/paths/collections.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8Id,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;CAQtB,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,2BAA2B;;;;;;;;CAQ9B,CAAC;AAEX;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB;;;;CAI3B,CAAC;AAEX,MAAM,MAAM,qBAAqB,GAC/B,CAAC,OAAO,wBAAwB,CAAC,CAAC,MAAM,OAAO,wBAAwB,CAAC,CAAC;AAE3E,uEAAuE;AACvE,eAAO,MAAM,oCAAoC,EAAE,MAAM,CAAC,eAAe,EAAE,qBAAqB,CAI/F,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6FxB,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;CAsCf,CAAC"}
|
|
@@ -187,6 +187,13 @@ export const NESTED_SUBCOLLECTIONS = {
|
|
|
187
187
|
// Communication — guild channel + invite messages are REALTIME-ONLY (chat Worker
|
|
188
188
|
// Durable Object, never Firestore); only admin-support conversationMessages persist here.
|
|
189
189
|
CONVERSATION_MESSAGES: 'conversationMessages',
|
|
190
|
+
// Conversation Files — the flat per-conversation file list. Nested under the
|
|
191
|
+
// conversation's NATURAL Firestore parent, so the same subcollection segment serves
|
|
192
|
+
// both supported scopes:
|
|
193
|
+
// guildInviteConversations/{guildInviteId}/conversationFiles/{conversationFileId}
|
|
194
|
+
// pendingAdminDispatches/{adminDispatchId}/conversationFiles/{conversationFileId}
|
|
195
|
+
// Guild chat channels deliberately have NO conversationFiles subcollection.
|
|
196
|
+
CONVERSATION_FILES: 'conversationFiles',
|
|
190
197
|
// SquareStreetz & Social
|
|
191
198
|
SOCIAL_POSTS: 'socialPosts',
|
|
192
199
|
ACTIVE_POSTS: 'activePosts',
|