@ttt-productions/ttt-core 0.79.38 → 0.79.39

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.
@@ -19,6 +19,8 @@ export declare const OperatorStepUpSchema: z.ZodObject<{
19
19
  createdAt: z.ZodNumber;
20
20
  updatedAt: z.ZodNumber;
21
21
  confirmedAt: z.ZodOptional<z.ZodNumber>;
22
+ failedAttempts: z.ZodOptional<z.ZodNumber>;
23
+ lockedUntil: z.ZodOptional<z.ZodNumber>;
22
24
  }, z.core.$strip>;
23
25
  export type OperatorStepUp = z.infer<typeof OperatorStepUpSchema>;
24
26
  export declare const SafetyReconcilerCursorSchema: z.ZodObject<{
@@ -1 +1 @@
1
- {"version":3,"file":"backend-state.d.ts","sourceRoot":"","sources":["../../src/doc-schemas/backend-state.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAWxB,eAAO,MAAM,2BAA2B;;;iBAGtC,CAAC;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAOhF,eAAO,MAAM,iCAAiC;;;iBAG5C,CAAC;AACH,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iCAAiC,CAAC,CAAC;AAO5F,eAAO,MAAM,oBAAoB;;;;;;;;;;iBAS/B,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAMlE,eAAO,MAAM,4BAA4B;;;iBAIvC,CAAC;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AASlF,eAAO,MAAM,gBAAgB;;;;;iBAS3B,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAU1D,eAAO,MAAM,kCAAkC;;;;;;;;;;;;;;iBAc7C,CAAC;AACH,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAC;AAS9F,eAAO,MAAM,kCAAkC;;;;;;;;;;;;iBAgB7C,CAAC;AACH,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAC;AAQ9F,eAAO,MAAM,mCAAmC;;;;;;;;iBAU9C,CAAC;AACH,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mCAAmC,CAAC,CAAC"}
1
+ {"version":3,"file":"backend-state.d.ts","sourceRoot":"","sources":["../../src/doc-schemas/backend-state.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAWxB,eAAO,MAAM,2BAA2B;;;iBAGtC,CAAC;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAOhF,eAAO,MAAM,iCAAiC;;;iBAG5C,CAAC;AACH,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iCAAiC,CAAC,CAAC;AAS5F,eAAO,MAAM,oBAAoB;;;;;;;;;;;;iBAa/B,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAMlE,eAAO,MAAM,4BAA4B;;;iBAIvC,CAAC;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AASlF,eAAO,MAAM,gBAAgB;;;;;iBAS3B,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAU1D,eAAO,MAAM,kCAAkC;;;;;;;;;;;;;;iBAc7C,CAAC;AACH,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAC;AAS9F,eAAO,MAAM,kCAAkC;;;;;;;;;;;;iBAgB7C,CAAC;AACH,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAC;AAQ9F,eAAO,MAAM,mCAAmC;;;;;;;;iBAU9C,CAAC;AACH,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mCAAmC,CAAC,CAAC"}
@@ -27,7 +27,9 @@ export const PublicUsersReconcilerCursorSchema = z.object({
27
27
  // plus the currently open grant window. The secret is returned to the client EXACTLY ONCE by
28
28
  // enrollOperatorStepUp and is never readable through Firestore afterwards; `status` goes
29
29
  // 'pending' → 'active' on confirm, and each successful verify pushes `grantExpiresAt` out by
30
- // the step-up window. (functions/src/safety/operatorStepUp.ts)
30
+ // the step-up window. `failedAttempts` and `lockedUntil` make the server-side TOTP brute-force
31
+ // lockout durable; omitted fields are the compatible no-lockout state for rows written before
32
+ // that protection shipped. (functions/src/safety/operatorStepUp.ts)
31
33
  export const OperatorStepUpSchema = z.object({
32
34
  secret: z.string(),
33
35
  status: z.enum(['pending', 'active']),
@@ -37,6 +39,10 @@ export const OperatorStepUpSchema = z.object({
37
39
  updatedAt: z.number(),
38
40
  /** Set when enrollment is confirmed (status flips to 'active'). */
39
41
  confirmedAt: z.number().optional(),
42
+ /** Consecutive failed TOTP checks since the most recent success or lockout. */
43
+ failedAttempts: z.number().int().nonnegative().optional(),
44
+ /** Epoch ms until which TOTP verification is refused; absent or 0 means not locked. */
45
+ lockedUntil: z.number().nonnegative().optional(),
40
46
  });
41
47
  // safetyReconcilerCursors/{cursorKey} — one persisted pagination cursor per reconciler
42
48
  // needs-work backstop sweep (quarantine enqueue, NCMEC enqueue). The sweep pages a
@@ -1 +1 @@
1
- {"version":3,"file":"backend-state.js","sourceRoot":"","sources":["../../src/doc-schemas/backend-state.ts"],"names":[],"mappings":"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","sourcesContent":["// Backend-only state document SCHEMAS — Cloud-Functions-owned bookkeeping docs that no\n// client ever reads or writes (firestore.rules denies client access to every path below).\n// They are registered here for the same reason every other stored shape is: ARCH-104 gives\n// the path ONE owner, and COLLECTION_SCHEMAS is the inventory the schema-doc generator and\n// the drift-check read. Types are inferred via z.infer.\n\nimport { z } from 'zod';\nimport {\n ChildSafetyNcmecCompletionChannelSchema,\n ChildSafetyNcmecCompletionProofTypeSchema,\n} from './safety/case.js';\n\n// _systemData/hallMediaReaperCursor — the scheduled Hall-media orphan reaper's scan cursor.\n// `createdAtCursor` is the highest mediaAssets `createdAt` the reaper has POSITIVELY cleared\n// (candidate resolved referenced / reaped / already-deleted), so each pass resumes past\n// permanently-live Hall assets instead of re-reading the same oldest page forever.\n// (functions/src/media/reapOrphanedHallMediaCopies.ts)\nexport const HallMediaReaperCursorSchema = z.object({\n createdAtCursor: z.number(),\n updatedAt: z.number(),\n});\nexport type HallMediaReaperCursor = z.infer<typeof HallMediaReaperCursorSchema>;\n\n// _systemData/publicUsersReconcilerCursor — the scheduled publicUsers reconciler's sweep cursor.\n// `profileIdCursor` is the last `userProfiles` document id the sweep has POSITIVELY cleared, so\n// each pass resumes after it instead of re-reading the same oldest page forever. An EMPTY STRING\n// means start from the beginning — both the first-ever pass and the wrap after the sweep exhausts\n// the collection. (functions/src/users/reconcilePublicUsers.ts)\nexport const PublicUsersReconcilerCursorSchema = z.object({\n profileIdCursor: z.string(),\n updatedAt: z.number(),\n});\nexport type PublicUsersReconcilerCursor = z.infer<typeof PublicUsersReconcilerCursorSchema>;\n\n// operatorStepUp/{uid} — [H-08] per-operator TOTP step-up state: the authenticator secret\n// plus the currently open grant window. The secret is returned to the client EXACTLY ONCE by\n// enrollOperatorStepUp and is never readable through Firestore afterwards; `status` goes\n// 'pending' → 'active' on confirm, and each successful verify pushes `grantExpiresAt` out by\n// the step-up window. (functions/src/safety/operatorStepUp.ts)\nexport const OperatorStepUpSchema = z.object({\n secret: z.string(),\n status: z.enum(['pending', 'active']),\n /** Absent until the first successful verify; a grant is live while now < grantExpiresAt. */\n grantExpiresAt: z.number().optional(),\n createdAt: z.number(),\n updatedAt: z.number(),\n /** Set when enrollment is confirmed (status flips to 'active'). */\n confirmedAt: z.number().optional(),\n});\nexport type OperatorStepUp = z.infer<typeof OperatorStepUpSchema>;\n\n// safetyReconcilerCursors/{cursorKey} — one persisted pagination cursor per reconciler\n// needs-work backstop sweep (quarantine enqueue, NCMEC enqueue). The sweep pages a\n// needs-work-filtered query from `afterValue` and WRAPS to the start when exhausted, so\n// coverage does not stall on the oldest rows. (functions/src/safety/reconcilerCursor.ts)\nexport const SafetyReconcilerCursorSchema = z.object({\n /** `orderBy` value of the last row examined last pass (exclusive lower bound). Absent ⇒ 0. */\n afterValue: z.number().optional(),\n updatedAt: z.number(),\n});\nexport type SafetyReconcilerCursor = z.infer<typeof SafetyReconcilerCursorSchema>;\n\n// sweepState/{sweepName} — durable cadence + cursor state for one scheduled user sweep. One doc\n// per sweep name; the fields a given sweep uses are the ones it declares, so every field except\n// `updatedAt` is optional. `orphanRegistrationCleanup` carries all three (the ~daily privateData\n// reaper's last completed pass + its rolling page cursor, and the ~weekly `listUsers()` scan);\n// `reconcileAccountStatus` carries only `fullScanLastRunAt`. The stamps are wall-clock so a\n// container recycle cannot reset the cadence.\n// (functions/src/users/orphanRegistrationCleanup.ts, functions/src/users/reconcileAccountStatus.ts)\nexport const SweepStateSchema = z.object({\n /** Wall-clock ms the last COMPLETED privateData-reaper pass finished (absent = never). */\n reaperLastRunAt: z.number().optional(),\n /** Full document path of the last `privateData` doc the reaper examined. Empty/absent means no\n * pass is in flight; a non-empty value means one is mid-scan and must continue. */\n reaperCursorPath: z.string().optional(),\n /** Wall-clock ms the last full `listUsers()` scan ran (absent = never). */\n fullScanLastRunAt: z.number().optional(),\n updatedAt: z.number(),\n});\nexport type SweepState = z.infer<typeof SweepStateSchema>;\n\n// childSafetyCases/{caseId}/ncmecSubmissions/{submissionId}/ncmecCompletionProof/record —\n// [H-05] the IMMUTABLE record of a verified manual-portal completion. Written create-if-absent in\n// the SAME transaction as the submission's `completed` transition, so a submission can never reach\n// `completed` without a bound proof record; a re-completion keeps the original. The submission's\n// `completionProofRef` stores this doc's path, never an operator free-text string.\n// [Q13/H-06] `portalReceiptArtifactId` binds the proof to a verified NcmecPortalReceiptArtifactV1\n// on the same (caseId, submissionId) — an arbitrary operator string is never accepted.\n// (functions/src/safety/ncmecReporting.ts)\nexport const NcmecCompletionProofRecordV1Schema = z.object({\n caseId: z.string(),\n submissionId: z.string(),\n channel: ChildSafetyNcmecCompletionChannelSchema,\n proofType: ChildSafetyNcmecCompletionProofTypeSchema,\n /** Id of the verified portal-receipt artifact this completion is bound to. */\n portalReceiptArtifactId: z.string(),\n /** Optional operator free-text note about the confirmation. */\n proofText: z.string().optional(),\n /** The NCMEC-assigned report id — REQUIRED. The number IS the proof; there is no\n * \"filed, number pending\" grace. */\n ncmecReportId: z.string(),\n recordedByUid: z.string(),\n recordedAt: z.number(),\n});\nexport type NcmecCompletionProofRecordV1 = z.infer<typeof NcmecCompletionProofRecordV1Schema>;\n\n// childSafetyCases/{caseId}/portalReceiptArtifacts/{artifactId} — [Q13/H-06] the immutable\n// record of a PDF/screenshot of the completed NCMEC CyberTipline submission, stored in the\n// restricted evidence vault. `markNcmecPortalComplete` accepts only the id of a verified\n// artifact bound to the SAME (caseId, submissionId); an arbitrary operator string is never\n// proof. Written create-only, never overwritten, and carries the server-verified storage facts\n// (generation + sha256) so a later transactional verification can confirm the same object\n// still exists unchanged. (functions/src/safety/ncmecOperatorCommands.ts)\nexport const NcmecPortalReceiptArtifactV1Schema = z.object({\n schemaVersion: z.literal(1),\n caseId: z.string(),\n submissionId: z.string(),\n /** Key of the object in the restricted evidence vault bucket. */\n evidenceVaultKey: z.string(),\n /** GCS object generation at capture time (immutable identity peg). */\n objectGeneration: z.string(),\n /** SHA-256 hex digest of the object bytes at capture time. */\n sha256: z.string(),\n contentType: z.string(),\n sizeBytes: z.number(),\n capturedAt: z.number(),\n registeredByUid: z.string(),\n /** Optional operator free-text describing what the artifact is. */\n description: z.string().optional(),\n});\nexport type NcmecPortalReceiptArtifactV1 = z.infer<typeof NcmecPortalReceiptArtifactV1Schema>;\n\n// childSafetyCases/{caseId}/ncmecPortalCorrections/{correctionId} — the immutable record that\n// the operator filed a CORRECTION on the NCMEC manual portal. There is no in-app correction\n// submission pipeline; this records the portal filing. Its EXISTENCE is the gate on the\n// corrected-no-apparent-violation disposition, so it is never a bare-discretion close. Each\n// correction is a fresh id — a later correction is an additional record, never a mutation of\n// the prior one. (functions/src/safety/recordNcmecPortalCorrection.ts)\nexport const NcmecPortalCorrectionRecordV1Schema = z.object({\n schemaVersion: z.literal(1),\n caseId: z.string(),\n /** The portal-assigned NCMEC report id being corrected. */\n ncmecReportId: z.string(),\n /** When the operator filed the correction on the portal (operator-supplied). */\n correctionFiledAt: z.number(),\n reason: z.string(),\n recordedByUid: z.string(),\n recordedAt: z.number(),\n});\nexport type NcmecPortalCorrectionRecordV1 = z.infer<typeof NcmecPortalCorrectionRecordV1Schema>;\n"]}
1
+ {"version":3,"file":"backend-state.js","sourceRoot":"","sources":["../../src/doc-schemas/backend-state.ts"],"names":[],"mappings":"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","sourcesContent":["// Backend-only state document SCHEMAS — Cloud-Functions-owned bookkeeping docs that no\n// client ever reads or writes (firestore.rules denies client access to every path below).\n// They are registered here for the same reason every other stored shape is: ARCH-104 gives\n// the path ONE owner, and COLLECTION_SCHEMAS is the inventory the schema-doc generator and\n// the drift-check read. Types are inferred via z.infer.\n\nimport { z } from 'zod';\nimport {\n ChildSafetyNcmecCompletionChannelSchema,\n ChildSafetyNcmecCompletionProofTypeSchema,\n} from './safety/case.js';\n\n// _systemData/hallMediaReaperCursor — the scheduled Hall-media orphan reaper's scan cursor.\n// `createdAtCursor` is the highest mediaAssets `createdAt` the reaper has POSITIVELY cleared\n// (candidate resolved referenced / reaped / already-deleted), so each pass resumes past\n// permanently-live Hall assets instead of re-reading the same oldest page forever.\n// (functions/src/media/reapOrphanedHallMediaCopies.ts)\nexport const HallMediaReaperCursorSchema = z.object({\n createdAtCursor: z.number(),\n updatedAt: z.number(),\n});\nexport type HallMediaReaperCursor = z.infer<typeof HallMediaReaperCursorSchema>;\n\n// _systemData/publicUsersReconcilerCursor — the scheduled publicUsers reconciler's sweep cursor.\n// `profileIdCursor` is the last `userProfiles` document id the sweep has POSITIVELY cleared, so\n// each pass resumes after it instead of re-reading the same oldest page forever. An EMPTY STRING\n// means start from the beginning — both the first-ever pass and the wrap after the sweep exhausts\n// the collection. (functions/src/users/reconcilePublicUsers.ts)\nexport const PublicUsersReconcilerCursorSchema = z.object({\n profileIdCursor: z.string(),\n updatedAt: z.number(),\n});\nexport type PublicUsersReconcilerCursor = z.infer<typeof PublicUsersReconcilerCursorSchema>;\n\n// operatorStepUp/{uid} — [H-08] per-operator TOTP step-up state: the authenticator secret\n// plus the currently open grant window. The secret is returned to the client EXACTLY ONCE by\n// enrollOperatorStepUp and is never readable through Firestore afterwards; `status` goes\n// 'pending' → 'active' on confirm, and each successful verify pushes `grantExpiresAt` out by\n// the step-up window. `failedAttempts` and `lockedUntil` make the server-side TOTP brute-force\n// lockout durable; omitted fields are the compatible no-lockout state for rows written before\n// that protection shipped. (functions/src/safety/operatorStepUp.ts)\nexport const OperatorStepUpSchema = z.object({\n secret: z.string(),\n status: z.enum(['pending', 'active']),\n /** Absent until the first successful verify; a grant is live while now < grantExpiresAt. */\n grantExpiresAt: z.number().optional(),\n createdAt: z.number(),\n updatedAt: z.number(),\n /** Set when enrollment is confirmed (status flips to 'active'). */\n confirmedAt: z.number().optional(),\n /** Consecutive failed TOTP checks since the most recent success or lockout. */\n failedAttempts: z.number().int().nonnegative().optional(),\n /** Epoch ms until which TOTP verification is refused; absent or 0 means not locked. */\n lockedUntil: z.number().nonnegative().optional(),\n});\nexport type OperatorStepUp = z.infer<typeof OperatorStepUpSchema>;\n\n// safetyReconcilerCursors/{cursorKey} — one persisted pagination cursor per reconciler\n// needs-work backstop sweep (quarantine enqueue, NCMEC enqueue). The sweep pages a\n// needs-work-filtered query from `afterValue` and WRAPS to the start when exhausted, so\n// coverage does not stall on the oldest rows. (functions/src/safety/reconcilerCursor.ts)\nexport const SafetyReconcilerCursorSchema = z.object({\n /** `orderBy` value of the last row examined last pass (exclusive lower bound). Absent ⇒ 0. */\n afterValue: z.number().optional(),\n updatedAt: z.number(),\n});\nexport type SafetyReconcilerCursor = z.infer<typeof SafetyReconcilerCursorSchema>;\n\n// sweepState/{sweepName} — durable cadence + cursor state for one scheduled user sweep. One doc\n// per sweep name; the fields a given sweep uses are the ones it declares, so every field except\n// `updatedAt` is optional. `orphanRegistrationCleanup` carries all three (the ~daily privateData\n// reaper's last completed pass + its rolling page cursor, and the ~weekly `listUsers()` scan);\n// `reconcileAccountStatus` carries only `fullScanLastRunAt`. The stamps are wall-clock so a\n// container recycle cannot reset the cadence.\n// (functions/src/users/orphanRegistrationCleanup.ts, functions/src/users/reconcileAccountStatus.ts)\nexport const SweepStateSchema = z.object({\n /** Wall-clock ms the last COMPLETED privateData-reaper pass finished (absent = never). */\n reaperLastRunAt: z.number().optional(),\n /** Full document path of the last `privateData` doc the reaper examined. Empty/absent means no\n * pass is in flight; a non-empty value means one is mid-scan and must continue. */\n reaperCursorPath: z.string().optional(),\n /** Wall-clock ms the last full `listUsers()` scan ran (absent = never). */\n fullScanLastRunAt: z.number().optional(),\n updatedAt: z.number(),\n});\nexport type SweepState = z.infer<typeof SweepStateSchema>;\n\n// childSafetyCases/{caseId}/ncmecSubmissions/{submissionId}/ncmecCompletionProof/record —\n// [H-05] the IMMUTABLE record of a verified manual-portal completion. Written create-if-absent in\n// the SAME transaction as the submission's `completed` transition, so a submission can never reach\n// `completed` without a bound proof record; a re-completion keeps the original. The submission's\n// `completionProofRef` stores this doc's path, never an operator free-text string.\n// [Q13/H-06] `portalReceiptArtifactId` binds the proof to a verified NcmecPortalReceiptArtifactV1\n// on the same (caseId, submissionId) — an arbitrary operator string is never accepted.\n// (functions/src/safety/ncmecReporting.ts)\nexport const NcmecCompletionProofRecordV1Schema = z.object({\n caseId: z.string(),\n submissionId: z.string(),\n channel: ChildSafetyNcmecCompletionChannelSchema,\n proofType: ChildSafetyNcmecCompletionProofTypeSchema,\n /** Id of the verified portal-receipt artifact this completion is bound to. */\n portalReceiptArtifactId: z.string(),\n /** Optional operator free-text note about the confirmation. */\n proofText: z.string().optional(),\n /** The NCMEC-assigned report id — REQUIRED. The number IS the proof; there is no\n * \"filed, number pending\" grace. */\n ncmecReportId: z.string(),\n recordedByUid: z.string(),\n recordedAt: z.number(),\n});\nexport type NcmecCompletionProofRecordV1 = z.infer<typeof NcmecCompletionProofRecordV1Schema>;\n\n// childSafetyCases/{caseId}/portalReceiptArtifacts/{artifactId} — [Q13/H-06] the immutable\n// record of a PDF/screenshot of the completed NCMEC CyberTipline submission, stored in the\n// restricted evidence vault. `markNcmecPortalComplete` accepts only the id of a verified\n// artifact bound to the SAME (caseId, submissionId); an arbitrary operator string is never\n// proof. Written create-only, never overwritten, and carries the server-verified storage facts\n// (generation + sha256) so a later transactional verification can confirm the same object\n// still exists unchanged. (functions/src/safety/ncmecOperatorCommands.ts)\nexport const NcmecPortalReceiptArtifactV1Schema = z.object({\n schemaVersion: z.literal(1),\n caseId: z.string(),\n submissionId: z.string(),\n /** Key of the object in the restricted evidence vault bucket. */\n evidenceVaultKey: z.string(),\n /** GCS object generation at capture time (immutable identity peg). */\n objectGeneration: z.string(),\n /** SHA-256 hex digest of the object bytes at capture time. */\n sha256: z.string(),\n contentType: z.string(),\n sizeBytes: z.number(),\n capturedAt: z.number(),\n registeredByUid: z.string(),\n /** Optional operator free-text describing what the artifact is. */\n description: z.string().optional(),\n});\nexport type NcmecPortalReceiptArtifactV1 = z.infer<typeof NcmecPortalReceiptArtifactV1Schema>;\n\n// childSafetyCases/{caseId}/ncmecPortalCorrections/{correctionId} — the immutable record that\n// the operator filed a CORRECTION on the NCMEC manual portal. There is no in-app correction\n// submission pipeline; this records the portal filing. Its EXISTENCE is the gate on the\n// corrected-no-apparent-violation disposition, so it is never a bare-discretion close. Each\n// correction is a fresh id — a later correction is an additional record, never a mutation of\n// the prior one. (functions/src/safety/recordNcmecPortalCorrection.ts)\nexport const NcmecPortalCorrectionRecordV1Schema = z.object({\n schemaVersion: z.literal(1),\n caseId: z.string(),\n /** The portal-assigned NCMEC report id being corrected. */\n ncmecReportId: z.string(),\n /** When the operator filed the correction on the portal (operator-supplied). */\n correctionFiledAt: z.number(),\n reason: z.string(),\n recordedByUid: z.string(),\n recordedAt: z.number(),\n});\nexport type NcmecPortalCorrectionRecordV1 = z.infer<typeof NcmecPortalCorrectionRecordV1Schema>;\n"]}
@@ -5611,6 +5611,8 @@ export declare const COLLECTION_SCHEMAS: {
5611
5611
  createdAt: z.ZodNumber;
5612
5612
  updatedAt: z.ZodNumber;
5613
5613
  confirmedAt: z.ZodOptional<z.ZodNumber>;
5614
+ failedAttempts: z.ZodOptional<z.ZodNumber>;
5615
+ lockedUntil: z.ZodOptional<z.ZodNumber>;
5614
5616
  }, z.core.$strip>;
5615
5617
  readonly 'safetyReconcilerCursors/{cursorKey}': z.ZodObject<{
5616
5618
  afterValue: z.ZodOptional<z.ZodNumber>;
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/doc-schemas/registry.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA6M7B,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4PkB,CAAC;AAElD,MAAM,MAAM,wBAAwB,GAAG,MAAM,OAAO,kBAAkB,CAAC;AAEvE;;;;;;;;;GASG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;CAmBiC,CAAC;AAEvE;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAOvC,CAAC"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/doc-schemas/registry.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA6M7B,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4PkB,CAAC;AAElD,MAAM,MAAM,wBAAwB,GAAG,MAAM,OAAO,kBAAkB,CAAC;AAEvE;;;;;;;;;GASG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;CAmBiC,CAAC;AAEvE;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAOvC,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import { type HallItemSubcollection } from './collections.js';
2
2
  import type { FollowableTargetType } from '../schemas/social.js';
3
+ import type { WorkProjectType } from '../types/content.js';
3
4
  export declare const PATH_BUILDERS: {
4
5
  readonly userProfile: (userId: string) => [string, string];
5
6
  readonly publicUser: (uid: string) => [string, string];
@@ -38,6 +39,7 @@ export declare const PATH_BUILDERS: {
38
39
  readonly thresholdItem: (thresholdItemId: string) => [string, string];
39
40
  readonly hallItem: (hallItemId: string) => [string, string];
40
41
  readonly hallItemType: (hallItemId: string, subcollection: HallItemSubcollection, itemId: string) => [string, string, string, string];
42
+ readonly hallItemSubItem: (hallItemId: string, workProjectType: WorkProjectType, itemId: string) => [string, string, string, string];
41
43
  readonly hallItemSubItems: (hallItemId: string, subcollection: HallItemSubcollection) => [string, string, string];
42
44
  readonly hallContentChangeRequest: (changeRequestId: string) => [string, string];
43
45
  readonly commissionListing: (commissionListingId: string) => [string, string];
@@ -1 +1 @@
1
- {"version":3,"file":"path-builders.d.ts","sourceRoot":"","sources":["../../src/paths/path-builders.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"path-builders.d.ts","sourceRoot":"","sources":["../../src/paths/path-builders.ts"],"names":[],"mappings":"AAKA,OAAO,EAQL,KAAK,qBAAqB,EAC3B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,eAAO,MAAM,aAAa;mCAEF,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;+BAI7B,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;2CAIb,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;+CAGrB,MAAM,WAAW,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;sCAGnE,MAAM,gBAAgB,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;uCAG9D,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;oCAG5C,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;8CAM/B,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;uCAMhD,MAAM,cAAc,oBAAoB,YAAY,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;yCAK3E,oBAAoB,YAAY,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;gCAGlE,MAAM,UAAU,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;wCAGjE,MAAM,cAAc,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;oDAIjD,MAAM,kBAAkB,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;+CAItE,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;0CAItC,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;gDAGnB,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;wDAKjB,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;8CAGnD,MAAM,UAAU,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;0CAG7D,MAAM,UAAU,MAAM,aAAa,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;2CAI3F,MAAM,UAAU,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;8CAG9D,MAAM,UAAU,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;wCAG/D,MAAM,UAAU,MAAM,WAAW,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;oDAG9E,MAAM,gBAAgB,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;gDAGnE,MAAM,gBAAgB,MAAM,aAAa,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;iDAIjG,MAAM,gBAAgB,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;uDAGjE,MAAM,OAAO,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;6DAGhD,MAAM,OAAO,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;6CAGtE,MAAM,oBAAoB,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;uCAGzE,MAAM,oBAAoB,MAAM,cAAc,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;6CAGjG,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;+CAGvB,MAAM,sBAAsB,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;kCAIlF,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;kCAG3C,CAAC,MAAM,EAAE,MAAM,CAAC;4CAKJ,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;8CAIvB,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;oCAGnC,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;wCASrB,MAAM,iBAAiB,qBAAqB,UAAU,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;2CAM5F,MAAM,mBAAmB,eAAe,UAAU,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;4CAQ1F,MAAM,iBAAiB,qBAAqB,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;yDAG1D,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;sDAI5B,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;uDAGxB,MAAM,wBAAwB,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;oCAI1F,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;yCAGpB,MAAM,mBAAmB,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;sCAIrE,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;4CAKnB,MAAM,qBAAqB,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;8CAIlE,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;yDAGd,MAAM,0BAA0B,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;0CAGxF,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;0DAMT,MAAM,sBAAsB,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;8DAGjE,MAAM,sBAAsB,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;uCAG5F,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;gDAKhB,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;+CAI1C,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;gDAGxC,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;0DAM/B,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;2CAGxD,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;kDAIlB,MAAM,YAAY,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;uCAItE,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;6CAGnB,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;iCAGrC,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;0CAGhB,MAAM,UAAU,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;oDAG/B,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;sDAGvB,MAAM,gBAAgB,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;yDAI5D,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;wDAG1B,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;kCAG/C,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;mCAGxB,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;0CAGlB,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;wCAG3B,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;yCAIxB,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;gDAIlB,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;4CAG7B,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;sDAIf,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;2CAGpC,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;gDAGpB,MAAM,WAAW,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;sCAGpE,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;wCAGvB,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;mDAGd,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;iDAG3B,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;kDAGxB,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;4DAGf,MAAM,gBAAgB,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;8CAK7E,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;yDAId,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;wCAK5C,CAAC,MAAM,EAAE,MAAM,CAAC;mDAIH,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;kDAI1B,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;uDAIpB,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;8CAKlC,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;gDAIvB,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;4CAG7B,MAAM,gBAAgB,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;sCAMrE,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;4CAGnC,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;qCAGhD,MAAM,eAAe,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;8BAIvE,CAAC,MAAM,EAAE,MAAM,CAAC;gCAGd,CAAC,MAAM,EAAE,MAAM,CAAC;kCAGd,CAAC,MAAM,EAAE,MAAM,CAAC;sCAGZ,CAAC,MAAM,EAAE,MAAM,CAAC;0CAGZ,CAAC,MAAM,EAAE,MAAM,CAAC;uCAGnB,CAAC,MAAM,EAAE,MAAM,CAAC;8BAGzB,CAAC,MAAM,EAAE,MAAM,CAAC;gCAGd,CAAC,MAAM,EAAE,MAAM,CAAC;uCAGT,CAAC,MAAM,EAAE,MAAM,CAAC;8BAGzB,CAAC,MAAM,EAAE,MAAM,CAAC;kCAGZ,CAAC,MAAM,EAAE,MAAM,CAAC;0CAMR,CAAC,MAAM,EAAE,MAAM,CAAC;gDAMV,CAAC,MAAM,EAAE,MAAM,CAAC;8CAIhB,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;gDAIvB,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;uCAGlC,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;+CAGjB,MAAM,YAAY,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;gDAI1D,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;2CAGtC,MAAM,cAAc,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;4CAI5D,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;+CAG9B,MAAM,cAAc,MAAM,UAAU,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;8CAG9F,MAAM,OAAO,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;+CAIrD,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;qDAG3B,MAAM,OAAO,MAAM,aAAa,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;kDAG5F,MAAM,gBAAgB,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;sDAG3D,MAAM,gBAAgB,MAAM,UAAU,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;yDAK5F,MAAM,gBAAgB,MAAM,aAAa,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;uDAMpG,MAAM,gBAAgB,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;oDAGlF,MAAM,WAAW,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;wDAKtD,MAAM,cAAc,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;yDAK5D,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;wDAKlC,MAAM,gBAAgB,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;yDAK9D,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;+CAG3C,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;wCAKhC,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;mDAGd,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;mDAIzB,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;oEAGR,MAAM,aAAa,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;4DAGpE,MAAM,SAAS,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;kDAIlE,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;wCAGnC,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;4CAGrB,MAAM,UAAU,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;mDAGlD,MAAM,cAAc,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;wCAGxE,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;yCAIxB,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;kDAGhB,MAAM,WAAW,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;8CAI9D,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;4DAIX,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;2CAK1C,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;2CAI3B,CAAC,MAAM,EAAE,MAAM,CAAC;8CAIX,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;mCAKpC,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;iDAIX,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;qCAKrC,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;4CAIlB,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;4CAGzB,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;qDAIhB,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;+CAG/C,MAAM,gBAAgB,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;gDAI9D,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;sDAI3B,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;qDAGlC,MAAM,cAAc,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;sDAK5D,MAAM,cAAc,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;kDAGjF,MAAM,YAAY,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;6CAGhE,MAAM,cAAc,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;wDAKlD,MAAM,cAAc,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;0DAK3D,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;oDAK/B,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;gCAG7C,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;8CAGX,MAAM,gBAAgB,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;+CAI9D,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;2CAGrC,MAAM,aAAa,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;4CAI3D,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;4CAIjC,MAAM,WAAW,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;6CAIzD,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;6CAGjC,MAAM,YAAY,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;uCAGjE,MAAM,UAAU,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;yCAGvD,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;qCAG7B,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;wCAGtB,MAAM,iBAAiB,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;mCAKrE,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;gCAI9B,CAAC,MAAM,CAAC;gDAIU,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;oCAKvC,CAAC,MAAM,EAAE,MAAM,CAAC;qCAGf,CAAC,MAAM,EAAE,MAAM,CAAC;qDAGA,CAAC,MAAM,EAAE,MAAM,CAAC;CAE9C,CAAC"}
@@ -2,7 +2,7 @@
2
2
  //
3
3
  // Frontend (Web SDK): doc(db, ...PATH_BUILDERS.userProfile(userId))
4
4
  // Backend (Admin SDK): db.doc(toPath(PATH_BUILDERS.userProfile(userId)))
5
- import { COLLECTIONS, USER_SUBCOLLECTIONS, WORK_PROJECT_SUBCOLLECTIONS, WORK_REALM_SUBCOLLECTIONS, NESTED_SUBCOLLECTIONS, SPECIAL_DOCS, } from './collections.js';
5
+ import { COLLECTIONS, USER_SUBCOLLECTIONS, WORK_PROJECT_SUBCOLLECTIONS, WORK_REALM_SUBCOLLECTIONS, NESTED_SUBCOLLECTIONS, SPECIAL_DOCS, HALL_ITEM_SUBCOLLECTION_BY_WORK_TYPE, } from './collections.js';
6
6
  export const PATH_BUILDERS = {
7
7
  // ===== USER PATHS =====
8
8
  userProfile: (userId) => [COLLECTIONS.USER_PROFILES, userId],
@@ -69,6 +69,10 @@ export const PATH_BUILDERS = {
69
69
  // derivation: it yields a segment that does not exist, silently addressing an empty
70
70
  // collection instead of failing.
71
71
  hallItemType: (hallItemId, subcollection, itemId) => [COLLECTIONS.HALL_ITEMS, hallItemId, subcollection, itemId],
72
+ // A published Hall sub-item's path is determined by its canonical identity, never a
73
+ // caller-provided collection segment. This is the path used by typed administrative replay
74
+ // targets as well as ordinary Hall moderation operations.
75
+ hallItemSubItem: (hallItemId, workProjectType, itemId) => [COLLECTIONS.HALL_ITEMS, hallItemId, HALL_ITEM_SUBCOLLECTION_BY_WORK_TYPE[workProjectType], itemId],
72
76
  // Collection of published hall sub-items for one type (parent of hallItemType). The
73
77
  // subcollection segment is the canonical HallItemSubcollection — derive it from
74
78
  // HALL_ITEM_SUBCOLLECTION_BY_WORK_TYPE. `workProjectType.toLowerCase()` is NOT a valid
@@ -1 +1 @@
1
- {"version":3,"file":"path-builders.js","sourceRoot":"","sources":["../../src/paths/path-builders.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,EAAE;AACF,qEAAqE;AACrE,yEAAyE;AAEzE,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,2BAA2B,EAC3B,yBAAyB,EACzB,qBAAqB,EACrB,YAAY,GAEb,MAAM,kBAAkB,CAAC;AAG1B,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,yBAAyB;IACzB,WAAW,EAAE,CAAC,MAAc,EAAoB,EAAE,CAChD,CAAC,WAAW,CAAC,aAAa,EAAE,MAAM,CAAC;IAErC,mEAAmE;IACnE,UAAU,EAAE,CAAC,GAAW,EAAoB,EAAE,CAC5C,CAAC,WAAW,CAAC,YAAY,EAAE,GAAG,CAAC;IAEjC,6DAA6D;IAC7D,sBAAsB,EAAE,CAAC,GAAW,EAAoB,EAAE,CACxD,CAAC,WAAW,CAAC,yBAAyB,EAAE,GAAG,CAAC;IAE9C,uBAAuB,EAAE,CAAC,MAAc,EAAE,OAAe,EAAoC,EAAE,CAC7F,CAAC,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,mBAAmB,CAAC,eAAe,EAAE,OAAO,CAAC;IAEnF,cAAc,EAAE,CAAC,MAAc,EAAE,YAAoB,EAAoC,EAAE,CACzF,CAAC,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,mBAAmB,CAAC,oBAAoB,EAAE,YAAY,CAAC;IAE7F,eAAe,EAAE,CAAC,MAAc,EAAoC,EAAE,CACpE,CAAC,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,mBAAmB,CAAC,YAAY,EAAE,MAAM,CAAC;IAE/E,YAAY,EAAE,CAAC,MAAc,EAAoC,EAAE,CACjE,CAAC,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,mBAAmB,CAAC,aAAa,EAAE,YAAY,CAAC,qBAAqB,CAAC;IAE5G,sFAAsF;IACtF,sFAAsF;IACtF,oCAAoC;IACpC,sBAAsB,EAAE,CAAC,MAAc,EAAoC,EAAE,CAC3E,CAAC,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,mBAAmB,CAAC,YAAY,EAAE,YAAY,CAAC,wBAAwB,CAAC;IAE9G,oFAAoF;IACpF,6EAA6E;IAC7E,+EAA+E;IAC/E,UAAU,EAAE,CAAC,WAAmB,EAAE,UAAgC,EAAE,QAAgB,EAAoB,EAAE,CACxG,CAAC,WAAW,CAAC,YAAY,EAAE,GAAG,WAAW,KAAK,UAAU,KAAK,QAAQ,EAAE,CAAC;IAE1E,oGAAoG;IACpG,iGAAiG;IACjG,aAAa,EAAE,CAAC,UAAgC,EAAE,QAAgB,EAAoB,EAAE,CACtF,CAAC,WAAW,CAAC,eAAe,EAAE,GAAG,UAAU,KAAK,QAAQ,EAAE,CAAC;IAE7D,QAAQ,EAAE,CAAC,MAAc,EAAE,MAAc,EAAoD,EAAE,CAC7F,CAAC,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,mBAAmB,CAAC,UAAU,EAAE,qBAAqB,CAAC,YAAY,EAAE,qBAAqB,CAAC,oBAAoB,EAAE,MAAM,CAAC;IAE7J,gBAAgB,EAAE,CAAC,MAAc,EAAE,UAAkB,EAAoC,EAAE,CACzF,CAAC,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,mBAAmB,CAAC,cAAc,EAAE,UAAU,CAAC;IAErF,wFAAwF;IACxF,4BAA4B,EAAE,CAAC,MAAc,EAAE,cAAsB,EAAoC,EAAE,CACzG,CAAC,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,mBAAmB,CAAC,oBAAoB,EAAE,cAAc,CAAC;IAE/F,0FAA0F;IAC1F,uBAAuB,EAAE,CAAC,MAAc,EAA4B,EAAE,CACpE,CAAC,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,mBAAmB,CAAC,oBAAoB,CAAC;IAE/E,yBAAyB;IACzB,WAAW,EAAE,CAAC,aAAqB,EAAoB,EAAE,CACvD,CAAC,WAAW,CAAC,iBAAiB,EAAE,aAAa,CAAC;IAEhD,iBAAiB,EAAE,CAAC,aAAqB,EAAoB,EAAE,CAC7D,CAAC,WAAW,CAAC,oBAAoB,EAAE,aAAa,CAAC;IAEnD,sFAAsF;IACtF,uEAAuE;IACvE,yBAAyB,EAAE,CAAC,aAAqB,EAAoC,EAAE,CACrF,CAAC,WAAW,CAAC,iBAAiB,EAAE,aAAa,EAAE,2BAA2B,CAAC,2BAA2B,EAAE,YAAY,CAAC,2BAA2B,CAAC;IAEnJ,eAAe,EAAE,CAAC,aAAqB,EAAE,MAAc,EAAoC,EAAE,CAC3F,CAAC,WAAW,CAAC,iBAAiB,EAAE,aAAa,EAAE,2BAA2B,CAAC,kBAAkB,EAAE,MAAM,CAAC;IAExG,WAAW,EAAE,CAAC,aAAqB,EAAE,MAAc,EAAE,SAAiB,EAAoD,EAAE,CAC1H,CAAC,WAAW,CAAC,iBAAiB,EAAE,aAAa,EAAE,2BAA2B,CAAC,kBAAkB,EAAE,MAAM,EAAE,qBAAqB,CAAC,aAAa,EAAE,SAAS,CAAC;IAExJ,+DAA+D;IAC/D,YAAY,EAAE,CAAC,aAAqB,EAAE,MAAc,EAA4C,EAAE,CAChG,CAAC,WAAW,CAAC,iBAAiB,EAAE,aAAa,EAAE,2BAA2B,CAAC,kBAAkB,EAAE,MAAM,EAAE,qBAAqB,CAAC,aAAa,CAAC;IAE7I,eAAe,EAAE,CAAC,aAAqB,EAAE,MAAc,EAAoC,EAAE,CAC3F,CAAC,WAAW,CAAC,iBAAiB,EAAE,aAAa,EAAE,2BAA2B,CAAC,kBAAkB,EAAE,MAAM,CAAC;IAExG,SAAS,EAAE,CAAC,aAAqB,EAAE,MAAc,EAAE,OAAe,EAAoD,EAAE,CACtH,CAAC,WAAW,CAAC,iBAAiB,EAAE,aAAa,EAAE,2BAA2B,CAAC,kBAAkB,EAAE,MAAM,EAAE,qBAAqB,CAAC,WAAW,EAAE,OAAO,CAAC;IAEpJ,qBAAqB,EAAE,CAAC,aAAqB,EAAE,YAAoB,EAAoC,EAAE,CACvG,CAAC,WAAW,CAAC,iBAAiB,EAAE,aAAa,EAAE,2BAA2B,CAAC,uBAAuB,EAAE,YAAY,CAAC;IAEnH,iBAAiB,EAAE,CAAC,aAAqB,EAAE,YAAoB,EAAE,SAAiB,EAAoD,EAAE,CACtI,CAAC,WAAW,CAAC,iBAAiB,EAAE,aAAa,EAAE,2BAA2B,CAAC,uBAAuB,EAAE,YAAY,EAAE,qBAAqB,CAAC,mBAAmB,EAAE,SAAS,CAAC;IAEzK,gFAAgF;IAChF,kBAAkB,EAAE,CAAC,aAAqB,EAAE,YAAoB,EAA4C,EAAE,CAC5G,CAAC,WAAW,CAAC,iBAAiB,EAAE,aAAa,EAAE,2BAA2B,CAAC,uBAAuB,EAAE,YAAY,EAAE,qBAAqB,CAAC,mBAAmB,CAAC;IAE9J,wBAAwB,EAAE,CAAC,aAAqB,EAAE,GAAW,EAAoC,EAAE,CACjG,CAAC,WAAW,CAAC,iBAAiB,EAAE,aAAa,EAAE,2BAA2B,CAAC,eAAe,EAAE,GAAG,CAAC;IAElG,8BAA8B,EAAE,CAAC,aAAqB,EAAE,GAAW,EAAoC,EAAE,CACvG,CAAC,WAAW,CAAC,iBAAiB,EAAE,aAAa,EAAE,2BAA2B,CAAC,sBAAsB,EAAE,GAAG,CAAC;IAEzG,cAAc,EAAE,CAAC,aAAqB,EAAE,gBAAwB,EAAoC,EAAE,CACpG,CAAC,WAAW,CAAC,iBAAiB,EAAE,aAAa,EAAE,2BAA2B,CAAC,iBAAiB,EAAE,gBAAgB,CAAC;IAEjH,QAAQ,EAAE,CAAC,aAAqB,EAAE,gBAAwB,EAAE,UAAkB,EAAoD,EAAE,CAClI,CAAC,WAAW,CAAC,iBAAiB,EAAE,aAAa,EAAE,2BAA2B,CAAC,iBAAiB,EAAE,gBAAgB,EAAE,qBAAqB,CAAC,UAAU,EAAE,UAAU,CAAC;IAE/J,oBAAoB,EAAE,CAAC,OAAe,EAAoB,EAAE,CAC1D,CAAC,WAAW,CAAC,wBAAwB,EAAE,OAAO,CAAC;IAEjD,gBAAgB,EAAE,CAAC,aAAqB,EAAE,kBAA0B,EAAoC,EAAE,CACxG,CAAC,WAAW,CAAC,iBAAiB,EAAE,aAAa,EAAE,2BAA2B,CAAC,mBAAmB,EAAE,kBAAkB,CAAC;IAErH,2BAA2B;IAC3B,UAAU,EAAE,CAAC,MAAc,EAAoC,EAAE,CAC/D,CAAC,WAAW,CAAC,mBAAmB,EAAE,qBAAqB,CAAC,YAAY,EAAE,qBAAqB,CAAC,YAAY,EAAE,MAAM,CAAC;IAEnH,aAAa,EAAE,GAAqB,EAAE,CACpC,CAAC,WAAW,CAAC,mBAAmB,EAAE,qBAAqB,CAAC,cAAc,CAAC;IAEzE,+EAA+E;IAC/E,+FAA+F;IAC/F,qBAAqB,EAAE,CAAC,KAAa,EAAoB,EAAE,CACzD,CAAC,WAAW,CAAC,wBAAwB,EAAE,KAAK,CAAC;IAE/C,yBAAyB;IACzB,aAAa,EAAE,CAAC,eAAuB,EAAoB,EAAE,CAC3D,CAAC,WAAW,CAAC,eAAe,EAAE,eAAe,CAAC;IAEhD,QAAQ,EAAE,CAAC,UAAkB,EAAoB,EAAE,CACjD,CAAC,WAAW,CAAC,UAAU,EAAE,UAAU,CAAC;IAEtC,wFAAwF;IACxF,mFAAmF;IACnF,uDAAuD;IACvD,uFAAuF;IACvF,oFAAoF;IACpF,iCAAiC;IACjC,YAAY,EAAE,CAAC,UAAkB,EAAE,aAAoC,EAAE,MAAc,EAAoC,EAAE,CAC3H,CAAC,WAAW,CAAC,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,CAAC;IAE7D,oFAAoF;IACpF,gFAAgF;IAChF,uFAAuF;IACvF,oFAAoF;IACpF,iCAAiC;IACjC,gBAAgB,EAAE,CAAC,UAAkB,EAAE,aAAoC,EAA4B,EAAE,CACvG,CAAC,WAAW,CAAC,UAAU,EAAE,UAAU,EAAE,aAAa,CAAC;IAErD,wBAAwB,EAAE,CAAC,eAAuB,EAAoB,EAAE,CACtE,CAAC,WAAW,CAAC,4BAA4B,EAAE,eAAe,CAAC;IAE7D,+BAA+B;IAC/B,iBAAiB,EAAE,CAAC,mBAA2B,EAAoB,EAAE,CACnE,CAAC,WAAW,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;IAExD,kBAAkB,EAAE,CAAC,mBAA2B,EAAE,oBAA4B,EAAoC,EAAE,CAClH,CAAC,WAAW,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,qBAAqB,CAAC,oBAAoB,EAAE,oBAAoB,CAAC;IAE1H,6BAA6B;IAC7B,QAAQ,EAAE,CAAC,UAAkB,EAAoB,EAAE,CACjD,CAAC,WAAW,CAAC,cAAc,EAAE,UAAU,CAAC;IAE1C,aAAa,EAAE,CAAC,UAAkB,EAAE,eAAuB,EAAoC,EAAE,CAC/F,CAAC,WAAW,CAAC,cAAc,EAAE,UAAU,EAAE,qBAAqB,CAAC,gBAAgB,EAAE,eAAe,CAAC;IAEnG,0BAA0B;IAC1B,SAAS,EAAE,CAAC,WAAmB,EAAoB,EAAE,CACnD,CAAC,WAAW,CAAC,WAAW,EAAE,WAAW,CAAC;IAExC,uFAAuF;IACvF,uEAAuE;IACvE,eAAe,EAAE,CAAC,WAAmB,EAAE,iBAAyB,EAAoC,EAAE,CACpG,CAAC,WAAW,CAAC,WAAW,EAAE,WAAW,EAAE,yBAAyB,CAAC,kBAAkB,EAAE,iBAAiB,CAAC;IAEzG,mCAAmC;IACnC,aAAa,EAAE,CAAC,eAAuB,EAAoB,EAAE,CAC3D,CAAC,WAAW,CAAC,wBAAwB,EAAE,eAAe,CAAC;IAEzD,wBAAwB,EAAE,CAAC,eAAuB,EAAE,sBAA8B,EAAoC,EAAE,CACtH,CAAC,WAAW,CAAC,wBAAwB,EAAE,eAAe,EAAE,qBAAqB,CAAC,qBAAqB,EAAE,sBAAsB,CAAC;IAE9H,WAAW,EAAE,CAAC,aAAqB,EAAoB,EAAE,CACvD,CAAC,WAAW,CAAC,0BAA0B,EAAE,aAAa,CAAC;IAEzD,gFAAgF;IAChF,4EAA4E;IAC5E,qEAAqE;IACrE,2BAA2B,EAAE,CAAC,aAAqB,EAAE,kBAA0B,EAAoC,EAAE,CACnH,CAAC,WAAW,CAAC,0BAA0B,EAAE,aAAa,EAAE,qBAAqB,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IAEvH,6BAA6B,EAAE,CAAC,eAAuB,EAAE,kBAA0B,EAAoC,EAAE,CACvH,CAAC,WAAW,CAAC,wBAAwB,EAAE,eAAe,EAAE,qBAAqB,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IAEvH,aAAa,EAAE,CAAC,QAAgB,EAAoB,EAAE,CACpD,CAAC,WAAW,CAAC,eAAe,EAAE,QAAQ,CAAC;IAEzC,uFAAuF;IACvF,qEAAqE;IACrE,sBAAsB,EAAE,CAAC,QAAgB,EAAoC,EAAE,CAC7E,CAAC,WAAW,CAAC,eAAe,EAAE,QAAQ,EAAE,qBAAqB,CAAC,wBAAwB,EAAE,QAAQ,CAAC;IAEnG,0GAA0G;IAC1G,qBAAqB,EAAE,CAAC,QAAgB,EAAoC,EAAE,CAC5E,CAAC,WAAW,CAAC,eAAe,EAAE,QAAQ,EAAE,qBAAqB,CAAC,OAAO,EAAE,YAAY,CAAC,eAAe,CAAC;IAEtG,sBAAsB,EAAE,CAAC,QAAgB,EAAoC,EAAE,CAC7E,CAAC,WAAW,CAAC,eAAe,EAAE,QAAQ,EAAE,qBAAqB,CAAC,OAAO,EAAE,YAAY,CAAC,gBAAgB,CAAC;IAEvG,uFAAuF;IACvF,kFAAkF;IAClF,gGAAgG;IAChG,gCAAgC,EAAE,CAAC,QAAgB,EAAoC,EAAE,CACvF,CAAC,WAAW,CAAC,eAAe,EAAE,QAAQ,EAAE,qBAAqB,CAAC,OAAO,EAAE,YAAY,CAAC,2BAA2B,CAAC;IAElH,iBAAiB,EAAE,CAAC,QAAgB,EAAoB,EAAE,CACxD,CAAC,WAAW,CAAC,oBAAoB,EAAE,QAAQ,CAAC;IAE9C,8FAA8F;IAC9F,wBAAwB,EAAE,CAAC,QAAgB,EAAE,QAAgB,EAAoC,EAAE,CACjG,CAAC,WAAW,CAAC,oBAAoB,EAAE,QAAQ,EAAE,qBAAqB,CAAC,4BAA4B,EAAE,QAAQ,CAAC;IAE5G,qFAAqF;IACrF,eAAe,EAAE,CAAC,MAAc,EAAoB,EAAE,CACpD,CAAC,WAAW,CAAC,yBAAyB,EAAE,MAAM,CAAC;IAEjD,gBAAgB,EAAE,CAAC,WAAmB,EAAoB,EAAE,CAC1D,CAAC,WAAW,CAAC,kBAAkB,EAAE,WAAW,CAAC;IAE/C,SAAS,EAAE,CAAC,MAAc,EAAoB,EAAE,CAC9C,CAAC,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC;IAEnC,gBAAgB,EAAE,CAAC,QAAgB,EAAE,MAAc,EAAoB,EAAE,CACvE,CAAC,WAAW,CAAC,WAAW,EAAE,GAAG,QAAQ,IAAI,MAAM,EAAE,CAAC;IAEpD,yBAAyB,EAAE,CAAC,SAAiB,EAAoB,EAAE,CACjE,CAAC,WAAW,CAAC,4BAA4B,EAAE,SAAS,CAAC;IAEvD,2BAA2B,EAAE,CAAC,SAAiB,EAAE,YAAoB,EAAoC,EAAE,CACzG,CAAC,WAAW,CAAC,4BAA4B,EAAE,SAAS,EAAE,qBAAqB,CAAC,YAAY,EAAE,YAAY,CAAC;IAEzG,4BAA4B;IAC5B,mBAAmB,EAAE,CAAC,oBAA4B,EAAoB,EAAE,CACtE,CAAC,WAAW,CAAC,sBAAsB,EAAE,oBAAoB,CAAC;IAE5D,iBAAiB,EAAE,CAAC,qBAA6B,EAAoB,EAAE,CACrE,CAAC,WAAW,CAAC,oBAAoB,EAAE,qBAAqB,CAAC;IAE3D,SAAS,EAAE,CAAC,OAAe,EAAoB,EAAE,CAC/C,CAAC,WAAW,CAAC,WAAW,EAAE,OAAO,CAAC;IAEpC,YAAY,EAAE,CAAC,KAAa,EAAoB,EAAE,CAChD,CAAC,WAAW,CAAC,aAAa,EAAE,KAAK,CAAC;IAEpC,mBAAmB,EAAE,CAAC,KAAa,EAAoB,EAAE,CACvD,CAAC,WAAW,CAAC,qBAAqB,EAAE,KAAK,CAAC;IAE5C,UAAU,EAAE,CAAC,YAAoB,EAAoB,EAAE,CACrD,CAAC,WAAW,CAAC,YAAY,EAAE,YAAY,CAAC;IAE1C,gFAAgF;IAChF,kBAAkB,EAAE,CAAC,KAAa,EAAoB,EAAE,CACtD,CAAC,WAAW,CAAC,qBAAqB,EAAE,KAAK,CAAC;IAE5C,mEAAmE;IACnE,oBAAoB,EAAE,CAAC,UAAkB,EAAoB,EAAE,CAC7D,CAAC,WAAW,CAAC,uBAAuB,EAAE,UAAU,CAAC;IAEnD,qBAAqB,EAAE,CAAC,KAAa,EAAoB,EAAE,CACzD,CAAC,WAAW,CAAC,wBAAwB,EAAE,KAAK,CAAC;IAE/C,8DAA8D;IAC9D,yBAAyB,EAAE,CAAC,WAAmB,EAAoB,EAAE,CACnE,CAAC,WAAW,CAAC,6BAA6B,EAAE,WAAW,CAAC;IAE1D,iBAAiB,EAAE,CAAC,QAAgB,EAAoB,EAAE,CACxD,CAAC,WAAW,CAAC,mBAAmB,EAAE,QAAQ,CAAC;IAE7C,sBAAsB,EAAE,CAAC,QAAgB,EAAE,OAAe,EAAoC,EAAE,CAC9F,CAAC,WAAW,CAAC,mBAAmB,EAAE,QAAQ,EAAE,qBAAqB,CAAC,0BAA0B,EAAE,OAAO,CAAC;IAExG,aAAa,EAAE,CAAC,OAAe,EAAoB,EAAE,CACnD,CAAC,WAAW,CAAC,gBAAgB,EAAE,OAAO,CAAC;IAEzC,iBAAiB,EAAE,CAAC,KAAa,EAAoB,EAAE,CACrD,CAAC,WAAW,CAAC,qBAAqB,EAAE,KAAK,CAAC;IAE5C,wBAAwB,EAAE,CAAC,SAAiB,EAAoB,EAAE,CAChE,CAAC,WAAW,CAAC,mBAAmB,EAAE,SAAS,CAAC;IAE9C,sBAAsB,EAAE,CAAC,SAAiB,EAAoB,EAAE,CAC9D,CAAC,WAAW,CAAC,0BAA0B,EAAE,SAAS,CAAC;IAErD,2BAA2B,EAAE,CAAC,KAAa,EAAoB,EAAE,CAC/D,CAAC,WAAW,CAAC,+BAA+B,EAAE,KAAK,CAAC;IAEtD,qCAAqC,EAAE,CAAC,KAAa,EAAE,YAAoB,EAAoC,EAAE,CAC/G,CAAC,WAAW,CAAC,+BAA+B,EAAE,KAAK,EAAE,qBAAqB,CAAC,kCAAkC,EAAE,YAAY,CAAC;IAE9H,qCAAqC;IACrC,iGAAiG;IACjG,aAAa,EAAE,CAAC,eAAuB,EAAoB,EAAE,CAC3D,CAAC,WAAW,CAAC,eAAe,EAAE,eAAe,CAAC;IAEhD,gGAAgG;IAChG,wBAAwB,EAAE,CAAC,eAAuB,EAAoB,EAAE,CACtE,CAAC,WAAW,CAAC,4BAA4B,EAAE,eAAe,CAAC;IAE7D,4FAA4F;IAC5F,+FAA+F;IAC/F,mBAAmB,EAAE,GAAqB,EAAE,CAC1C,CAAC,WAAW,CAAC,qBAAqB,EAAE,YAAY,CAAC,OAAO,CAAC;IAE3D,sDAAsD;IACtD,oBAAoB,EAAE,CAAC,aAAqB,EAAoB,EAAE,CAChE,CAAC,WAAW,CAAC,uBAAuB,EAAE,aAAa,CAAC;IAEtD,qEAAqE;IACrE,wBAAwB,EAAE,CAAC,QAAgB,EAAoB,EAAE,CAC/D,CAAC,WAAW,CAAC,4BAA4B,EAAE,QAAQ,CAAC;IAEtD,uEAAuE;IACvE,wBAAwB,EAAE,CAAC,aAAqB,EAAoB,EAAE,CACpE,CAAC,WAAW,CAAC,0BAA0B,EAAE,aAAa,CAAC;IAEzD,gGAAgG;IAChG,iDAAiD;IACjD,mBAAmB,EAAE,CAAC,SAAiB,EAAoB,EAAE,CAC3D,CAAC,WAAW,CAAC,sBAAsB,EAAE,SAAS,CAAC;IAEjD,qCAAqC;IACrC,kBAAkB,EAAE,CAAC,YAAoB,EAAoB,EAAE,CAC7D,CAAC,WAAW,CAAC,oBAAoB,EAAE,YAAY,CAAC;IAElD,cAAc,EAAE,CAAC,YAAoB,EAAE,YAAoB,EAAoC,EAAE,CAC/F,CAAC,WAAW,CAAC,oBAAoB,EAAE,YAAY,EAAE,qBAAqB,CAAC,gBAAgB,EAAE,YAAY,CAAC;IAExG,sFAAsF;IACtF,mFAAmF;IACnF,uEAAuE;IACvE,aAAa,EAAE,CAAC,OAAe,EAAoC,EAAE,CACnE,CAAC,WAAW,CAAC,WAAW,EAAE,YAAY,CAAC,cAAc,EAAE,qBAAqB,CAAC,gBAAgB,EAAE,OAAO,CAAC;IAEzG,gBAAgB,EAAE,CAAC,UAAkB,EAAoC,EAAE,CACzE,CAAC,WAAW,CAAC,WAAW,EAAE,YAAY,CAAC,cAAc,EAAE,qBAAqB,CAAC,iBAAiB,EAAE,UAAU,CAAC;IAE7G,gBAAgB,EAAE,CAAC,GAAW,EAAE,WAAmB,EAAoC,EAAE,CACvF,CAAC,WAAW,CAAC,mBAAmB,EAAE,GAAG,EAAE,qBAAqB,CAAC,mBAAmB,EAAE,WAAW,CAAC;IAEhG,gCAAgC;IAChC,SAAS,EAAE,GAAqB,EAAE,CAChC,CAAC,WAAW,CAAC,WAAW,EAAE,YAAY,CAAC,UAAU,CAAC;IAEpD,WAAW,EAAE,GAAqB,EAAE,CAClC,CAAC,WAAW,CAAC,UAAU,EAAE,YAAY,CAAC,YAAY,CAAC;IAErD,aAAa,EAAE,GAAqB,EAAE,CACpC,CAAC,WAAW,CAAC,WAAW,EAAE,YAAY,CAAC,cAAc,CAAC;IAExD,iBAAiB,EAAE,GAAqB,EAAE,CACxC,CAAC,WAAW,CAAC,WAAW,EAAE,YAAY,CAAC,kBAAkB,CAAC;IAE5D,qBAAqB,EAAE,GAAqB,EAAE,CAC5C,CAAC,WAAW,CAAC,WAAW,EAAE,YAAY,CAAC,uBAAuB,CAAC;IAEjE,kBAAkB,EAAE,GAAqB,EAAE,CACzC,CAAC,WAAW,CAAC,UAAU,EAAE,YAAY,CAAC,oBAAoB,CAAC;IAE7D,SAAS,EAAE,GAAqB,EAAE,CAChC,CAAC,WAAW,CAAC,UAAU,EAAE,YAAY,CAAC,UAAU,CAAC;IAEnD,WAAW,EAAE,GAAqB,EAAE,CAClC,CAAC,WAAW,CAAC,UAAU,EAAE,YAAY,CAAC,YAAY,CAAC;IAErD,kBAAkB,EAAE,GAAqB,EAAE,CACzC,CAAC,WAAW,CAAC,UAAU,EAAE,YAAY,CAAC,sBAAsB,CAAC;IAE/D,SAAS,EAAE,GAAqB,EAAE,CAChC,CAAC,WAAW,CAAC,UAAU,EAAE,YAAY,CAAC,UAAU,CAAC;IAEnD,aAAa,EAAE,GAAqB,EAAE,CACpC,CAAC,WAAW,CAAC,WAAW,EAAE,YAAY,CAAC,QAAQ,CAAC;IAElD,mEAAmE;IACnE,oFAAoF;IACpF,4FAA4F;IAC5F,qBAAqB,EAAE,GAAqB,EAAE,CAC5C,CAAC,WAAW,CAAC,WAAW,EAAE,YAAY,CAAC,wBAAwB,CAAC;IAElE,0FAA0F;IAC1F,2FAA2F;IAC3F,gGAAgG;IAChG,2BAA2B,EAAE,GAAqB,EAAE,CAClD,CAAC,WAAW,CAAC,WAAW,EAAE,YAAY,CAAC,8BAA8B,CAAC;IAExE,yFAAyF;IACzF,yBAAyB,EAAE,CAAC,GAAW,EAAoB,EAAE,CAC3D,CAAC,WAAW,CAAC,sBAAsB,EAAE,GAAG,CAAC;IAE3C,mEAAmE;IACnE,wBAAwB,EAAE,CAAC,MAAc,EAAoB,EAAE,CAC7D,CAAC,WAAW,CAAC,sBAAsB,EAAE,MAAM,CAAC;IAE9C,eAAe,EAAE,CAAC,MAAc,EAAoB,EAAE,CACpD,CAAC,WAAW,CAAC,kBAAkB,EAAE,MAAM,CAAC;IAE1C,uBAAuB,EAAE,CAAC,MAAc,EAAE,QAAgB,EAAoC,EAAE,CAC9F,CAAC,WAAW,CAAC,kBAAkB,EAAE,MAAM,EAAE,qBAAqB,CAAC,2BAA2B,EAAE,QAAQ,CAAC;IAEvG,mFAAmF;IACnF,wBAAwB,EAAE,CAAC,MAAc,EAA4B,EAAE,CACrE,CAAC,WAAW,CAAC,kBAAkB,EAAE,MAAM,EAAE,qBAAqB,CAAC,2BAA2B,CAAC;IAE7F,mBAAmB,EAAE,CAAC,MAAc,EAAE,UAAkB,EAAoC,EAAE,CAC5F,CAAC,WAAW,CAAC,kBAAkB,EAAE,MAAM,EAAE,qBAAqB,CAAC,sBAAsB,EAAE,UAAU,CAAC;IAEpG,0EAA0E;IAC1E,oBAAoB,EAAE,CAAC,MAAc,EAA4B,EAAE,CACjE,CAAC,WAAW,CAAC,kBAAkB,EAAE,MAAM,EAAE,qBAAqB,CAAC,sBAAsB,CAAC;IAExF,uBAAuB,EAAE,CAAC,MAAc,EAAE,UAAkB,EAAE,MAAc,EAAoD,EAAE,CAChI,CAAC,WAAW,CAAC,kBAAkB,EAAE,MAAM,EAAE,qBAAqB,CAAC,sBAAsB,EAAE,UAAU,EAAE,qBAAqB,CAAC,2BAA2B,EAAE,MAAM,CAAC;IAE/J,sBAAsB,EAAE,CAAC,MAAc,EAAE,GAAW,EAAoC,EAAE,CACxF,CAAC,WAAW,CAAC,kBAAkB,EAAE,MAAM,EAAE,qBAAqB,CAAC,0BAA0B,EAAE,GAAG,CAAC;IAEjG,gFAAgF;IAChF,uBAAuB,EAAE,CAAC,MAAc,EAA4B,EAAE,CACpE,CAAC,WAAW,CAAC,kBAAkB,EAAE,MAAM,EAAE,qBAAqB,CAAC,0BAA0B,CAAC;IAE5F,6BAA6B,EAAE,CAAC,MAAc,EAAE,GAAW,EAAE,SAAiB,EAAoD,EAAE,CAClI,CAAC,WAAW,CAAC,kBAAkB,EAAE,MAAM,EAAE,qBAAqB,CAAC,0BAA0B,EAAE,GAAG,EAAE,qBAAqB,CAAC,iCAAiC,EAAE,SAAS,CAAC;IAErK,0BAA0B,EAAE,CAAC,MAAc,EAAE,YAAoB,EAAoC,EAAE,CACrG,CAAC,WAAW,CAAC,kBAAkB,EAAE,MAAM,EAAE,qBAAqB,CAAC,8BAA8B,EAAE,YAAY,CAAC;IAE9G,8BAA8B,EAAE,CAAC,MAAc,EAAE,YAAoB,EAAE,MAAc,EAAoD,EAAE,CACzI,CAAC,WAAW,CAAC,kBAAkB,EAAE,MAAM,EAAE,qBAAqB,CAAC,8BAA8B,EAAE,YAAY,EAAE,qBAAqB,CAAC,mCAAmC,EAAE,MAAM,CAAC;IAEjL,yFAAyF;IACzF,6FAA6F;IAC7F,iCAAiC,EAAE,CAAC,MAAc,EAAE,YAAoB,EAAE,SAAiB,EAAoD,EAAE,CAC/I,CAAC,WAAW,CAAC,kBAAkB,EAAE,MAAM,EAAE,qBAAqB,CAAC,8BAA8B,EAAE,YAAY,EAAE,qBAAqB,CAAC,yBAAyB,EAAE,SAAS,CAAC;IAE1K,0FAA0F;IAC1F,yFAAyF;IACzF,qEAAqE;IACrE,+BAA+B,EAAE,CAAC,MAAc,EAAE,YAAoB,EAAoD,EAAE,CAC1H,CAAC,WAAW,CAAC,kBAAkB,EAAE,MAAM,EAAE,qBAAqB,CAAC,8BAA8B,EAAE,YAAY,EAAE,qBAAqB,CAAC,sBAAsB,EAAE,YAAY,CAAC,MAAM,CAAC;IAEjL,4BAA4B,EAAE,CAAC,MAAc,EAAE,OAAe,EAAoC,EAAE,CAClG,CAAC,WAAW,CAAC,kBAAkB,EAAE,MAAM,EAAE,qBAAqB,CAAC,0BAA0B,EAAE,OAAO,CAAC;IAErG,0FAA0F;IAC1F,+FAA+F;IAC/F,gCAAgC,EAAE,CAAC,MAAc,EAAE,UAAkB,EAAoC,EAAE,CACzG,CAAC,WAAW,CAAC,kBAAkB,EAAE,MAAM,EAAE,qBAAqB,CAAC,8BAA8B,EAAE,UAAU,CAAC;IAE5G,4FAA4F;IAC5F,qBAAqB;IACrB,iCAAiC,EAAE,CAAC,MAAc,EAA4B,EAAE,CAC9E,CAAC,WAAW,CAAC,kBAAkB,EAAE,MAAM,EAAE,qBAAqB,CAAC,8BAA8B,CAAC;IAEhG,wFAAwF;IACxF,6EAA6E;IAC7E,gCAAgC,EAAE,CAAC,MAAc,EAAE,YAAoB,EAAoC,EAAE,CAC3G,CAAC,WAAW,CAAC,kBAAkB,EAAE,MAAM,EAAE,qBAAqB,CAAC,wBAAwB,EAAE,YAAY,CAAC;IAExG,8FAA8F;IAC9F,iEAAiE;IACjE,iCAAiC,EAAE,CAAC,MAAc,EAA4B,EAAE,CAC9E,CAAC,WAAW,CAAC,kBAAkB,EAAE,MAAM,EAAE,qBAAqB,CAAC,wBAAwB,CAAC;IAE1F,sBAAsB,EAAE,CAAC,OAAe,EAAoB,EAAE,CAC5D,CAAC,WAAW,CAAC,2BAA2B,EAAE,OAAO,CAAC;IAEpD,+DAA+D;IAC/D,2EAA2E;IAC3E,aAAa,EAAE,CAAC,SAAiB,EAAoB,EAAE,CACrD,CAAC,WAAW,CAAC,gBAAgB,EAAE,SAAS,CAAC;IAE3C,kBAAkB,EAAE,CAAC,eAAuB,EAAoB,EAAE,CAChE,CAAC,WAAW,CAAC,qBAAqB,EAAE,eAAe,CAAC;IAEtD,iFAAiF;IACjF,qBAAqB,EAAE,CAAC,YAAoB,EAAoB,EAAE,CAChE,CAAC,WAAW,CAAC,wBAAwB,EAAE,YAAY,CAAC;IAEtD,sCAAsC,EAAE,CAAC,YAAoB,EAAE,SAAiB,EAAoC,EAAE,CACpH,CAAC,WAAW,CAAC,wBAAwB,EAAE,YAAY,EAAE,qBAAqB,CAAC,2CAA2C,EAAE,SAAS,CAAC;IAEpI,8BAA8B,EAAE,CAAC,YAAoB,EAAE,KAAa,EAAoC,EAAE,CACxG,CAAC,WAAW,CAAC,wBAAwB,EAAE,YAAY,EAAE,qBAAqB,CAAC,mCAAmC,EAAE,KAAK,CAAC;IAExH,gEAAgE;IAChE,sBAAsB,EAAE,CAAC,UAAkB,EAAoB,EAAE,CAC/D,CAAC,WAAW,CAAC,yBAAyB,EAAE,UAAU,CAAC;IAErD,iBAAiB,EAAE,CAAC,KAAa,EAAoB,EAAE,CACrD,CAAC,WAAW,CAAC,oBAAoB,EAAE,KAAK,CAAC;IAE3C,qBAAqB,EAAE,CAAC,KAAa,EAAE,MAAc,EAAoC,EAAE,CACzF,CAAC,WAAW,CAAC,oBAAoB,EAAE,KAAK,EAAE,qBAAqB,CAAC,yBAAyB,EAAE,MAAM,CAAC;IAEpG,4BAA4B,EAAE,CAAC,KAAa,EAAE,UAAkB,EAAoC,EAAE,CACpG,CAAC,WAAW,CAAC,oBAAoB,EAAE,KAAK,EAAE,qBAAqB,CAAC,+BAA+B,EAAE,UAAU,CAAC;IAE9G,eAAe,EAAE,CAAC,OAAe,EAAoB,EAAE,CACrD,CAAC,WAAW,CAAC,gBAAgB,EAAE,OAAO,CAAC;IAEzC,qDAAqD;IACrD,iBAAiB,EAAE,CAAC,MAAc,EAAoB,EAAE,CACtD,CAAC,WAAW,CAAC,oBAAoB,EAAE,MAAM,CAAC;IAE5C,0BAA0B,EAAE,CAAC,MAAc,EAAE,OAAe,EAAoC,EAAE,CAChG,CAAC,WAAW,CAAC,oBAAoB,EAAE,MAAM,EAAE,qBAAqB,CAAC,8BAA8B,EAAE,OAAO,CAAC;IAE3G,yEAAyE;IACzE,kBAAkB,EAAE,CAAC,UAAkB,EAAoB,EAAE,CAC3D,CAAC,WAAW,CAAC,qBAAqB,EAAE,UAAU,CAAC;IAEjD,4EAA4E;IAC5E,oBAAoB,EAAE,CAAC,sBAA8B,EAAoB,EAAE,CACzE,CAAC,WAAW,CAAC,uBAAuB,EAAE,sBAAsB,CAAC;IAE/D,8DAA8D;IAC9D,qFAAqF;IACrF,gBAAgB,EAAE,CAAC,SAAiB,EAAoB,EAAE,CACxD,CAAC,WAAW,CAAC,mBAAmB,EAAE,SAAS,CAAC;IAE9C,4CAA4C;IAC5C,sBAAsB,EAAE,GAAqB,EAAE,CAC7C,CAAC,WAAW,CAAC,wBAAwB,EAAE,YAAY,CAAC,+BAA+B,CAAC;IAEtF,4DAA4D;IAC5D,mBAAmB,EAAE,CAAC,SAAiB,EAAoB,EAAE,CAC3D,CAAC,WAAW,CAAC,sBAAsB,EAAE,SAAS,CAAC;IAEjD,oFAAoF;IACpF,8EAA8E;IAC9E,cAAc,EAAE,CAAC,GAAW,EAAoB,EAAE,CAChD,CAAC,WAAW,CAAC,gBAAgB,EAAE,GAAG,CAAC;IAErC,4EAA4E;IAC5E,sBAAsB,EAAE,CAAC,SAAiB,EAAoB,EAAE,CAC9D,CAAC,WAAW,CAAC,yBAAyB,EAAE,SAAS,CAAC;IAEpD,qFAAqF;IACrF,qEAAqE;IACrE,UAAU,EAAE,CAAC,SAAiB,EAAoB,EAAE,CAClD,CAAC,WAAW,CAAC,WAAW,EAAE,SAAS,CAAC;IAEtC,0DAA0D;IAC1D,cAAc,EAAE,CAAC,YAAoB,EAAoB,EAAE,CACzD,CAAC,WAAW,CAAC,gBAAgB,EAAE,YAAY,CAAC;IAE9C,iBAAiB,EAAE,CAAC,SAAiB,EAAoB,EAAE,CACzD,CAAC,WAAW,CAAC,qBAAqB,EAAE,SAAS,CAAC;IAEhD,2FAA2F;IAC3F,0BAA0B,EAAE,CAAC,SAAiB,EAAoC,EAAE,CAClF,CAAC,WAAW,CAAC,qBAAqB,EAAE,SAAS,EAAE,qBAAqB,CAAC,OAAO,EAAE,YAAY,CAAC,sBAAsB,CAAC;IAEpH,oBAAoB,EAAE,CAAC,SAAiB,EAAE,YAAoB,EAAoC,EAAE,CAClG,CAAC,WAAW,CAAC,qBAAqB,EAAE,SAAS,EAAE,qBAAqB,CAAC,wBAAwB,EAAE,YAAY,CAAC;IAE9G,8EAA8E;IAC9E,qBAAqB,EAAE,CAAC,SAAiB,EAA4B,EAAE,CACrE,CAAC,WAAW,CAAC,qBAAqB,EAAE,SAAS,EAAE,qBAAqB,CAAC,wBAAwB,CAAC;IAEhG,2FAA2F;IAC3F,2BAA2B,EAAE,CAAC,SAAiB,EAA4B,EAAE,CAC3E,CAAC,WAAW,CAAC,qBAAqB,EAAE,SAAS,EAAE,qBAAqB,CAAC,+BAA+B,CAAC;IAEvG,0BAA0B,EAAE,CAAC,SAAiB,EAAE,UAAkB,EAAoC,EAAE,CACtG,CAAC,WAAW,CAAC,qBAAqB,EAAE,SAAS,EAAE,qBAAqB,CAAC,+BAA+B,EAAE,UAAU,CAAC;IAEnH,+FAA+F;IAC/F,4FAA4F;IAC5F,2BAA2B,EAAE,CAAC,SAAiB,EAAE,UAAkB,EAAoD,EAAE,CACvH,CAAC,WAAW,CAAC,qBAAqB,EAAE,SAAS,EAAE,qBAAqB,CAAC,+BAA+B,EAAE,UAAU,EAAE,qBAAqB,CAAC,+BAA+B,EAAE,YAAY,CAAC,MAAM,CAAC;IAE/L,uBAAuB,EAAE,CAAC,SAAiB,EAAE,QAAgB,EAAoC,EAAE,CACjG,CAAC,WAAW,CAAC,qBAAqB,EAAE,SAAS,EAAE,qBAAqB,CAAC,oBAAoB,EAAE,QAAQ,CAAC;IAEtG,kBAAkB,EAAE,CAAC,SAAiB,EAAE,UAAkB,EAAoC,EAAE,CAC9F,CAAC,WAAW,CAAC,qBAAqB,EAAE,SAAS,EAAE,qBAAqB,CAAC,qBAAqB,EAAE,UAAU,CAAC;IAEzG,iGAAiG;IACjG,kGAAkG;IAClG,6BAA6B,EAAE,CAAC,SAAiB,EAAE,UAAkB,EAAoC,EAAE,CACzG,CAAC,WAAW,CAAC,qBAAqB,EAAE,SAAS,EAAE,qBAAqB,CAAC,iCAAiC,EAAE,UAAU,CAAC;IAErH,kGAAkG;IAClG,qDAAqD;IACrD,6BAA6B,EAAE,CAAC,WAAmB,EAAoB,EAAE,CACvE,CAAC,WAAW,CAAC,gCAAgC,EAAE,WAAW,CAAC;IAE7D,yFAAyF;IACzF,6FAA6F;IAC7F,uBAAuB,EAAE,CAAC,WAAmB,EAAoB,EAAE,CACjE,CAAC,WAAW,CAAC,0BAA0B,EAAE,WAAW,CAAC;IAEvD,QAAQ,EAAE,CAAC,MAAc,EAAoB,EAAE,CAC7C,CAAC,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC;IAElC,sBAAsB,EAAE,CAAC,MAAc,EAAE,YAAoB,EAAoC,EAAE,CACjG,CAAC,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,qBAAqB,CAAC,0BAA0B,EAAE,YAAY,CAAC;IAElG,gFAAgF;IAChF,uBAAuB,EAAE,CAAC,MAAc,EAA4B,EAAE,CACpE,CAAC,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,qBAAqB,CAAC,0BAA0B,CAAC;IAEpF,mBAAmB,EAAE,CAAC,MAAc,EAAE,SAAiB,EAAoC,EAAE,CAC3F,CAAC,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,qBAAqB,CAAC,uBAAuB,EAAE,SAAS,CAAC;IAE5F,0EAA0E;IAC1E,oBAAoB,EAAE,CAAC,MAAc,EAA4B,EAAE,CACjE,CAAC,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,qBAAqB,CAAC,uBAAuB,CAAC;IAEjF,+CAA+C;IAC/C,oBAAoB,EAAE,CAAC,MAAc,EAAE,OAAe,EAAoC,EAAE,CAC1F,CAAC,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,qBAAqB,CAAC,wBAAwB,EAAE,OAAO,CAAC;IAE3F,mFAAmF;IACnF,qBAAqB,EAAE,CAAC,MAAc,EAA4B,EAAE,CAClE,CAAC,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,qBAAqB,CAAC,wBAAwB,CAAC;IAElF,qBAAqB,EAAE,CAAC,MAAc,EAAE,QAAgB,EAAoC,EAAE,CAC5F,CAAC,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,qBAAqB,CAAC,yBAAyB,EAAE,QAAQ,CAAC;IAE7F,eAAe,EAAE,CAAC,MAAc,EAAE,MAAc,EAAoC,EAAE,CACpF,CAAC,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,qBAAqB,CAAC,wBAAwB,EAAE,MAAM,CAAC;IAE1F,iBAAiB,EAAE,CAAC,MAAc,EAAoB,EAAE,CACtD,CAAC,WAAW,CAAC,oBAAoB,EAAE,MAAM,CAAC;IAE5C,cAAc,EAAE,CAAC,KAAa,EAAoB,EAAE,CAClD,CAAC,WAAW,CAAC,iBAAiB,EAAE,KAAK,CAAC;IAExC,iBAAiB,EAAE,CAAC,KAAa,EAAE,aAAqB,EAAoC,EAAE,CAC5F,CAAC,WAAW,CAAC,iBAAiB,EAAE,KAAK,EAAE,qBAAqB,CAAC,oBAAoB,EAAE,aAAa,CAAC;IAEnG,mCAAmC;IACnC,wDAAwD;IACxD,UAAU,EAAE,CAAC,OAAe,EAAoB,EAAE,CAChD,CAAC,WAAW,CAAC,YAAY,EAAE,OAAO,CAAC;IAErC,wFAAwF;IACxF,WAAW,EAAE,GAAa,EAAE,CAC1B,CAAC,WAAW,CAAC,YAAY,CAAC;IAE5B,gFAAgF;IAChF,yBAAyB,EAAE,CAAC,KAAa,EAAoB,EAAE,CAC7D,CAAC,WAAW,CAAC,6BAA6B,EAAE,KAAK,CAAC;IAEpD,gFAAgF;IAChF,8FAA8F;IAC9F,eAAe,EAAE,GAAqB,EAAE,CACtC,CAAC,WAAW,CAAC,WAAW,EAAE,YAAY,CAAC,UAAU,CAAC;IAEpD,gBAAgB,EAAE,GAAqB,EAAE,CACvC,CAAC,WAAW,CAAC,WAAW,EAAE,YAAY,CAAC,WAAW,CAAC;IAErD,gCAAgC,EAAE,GAAqB,EAAE,CACvD,CAAC,WAAW,CAAC,WAAW,EAAE,YAAY,CAAC,4BAA4B,CAAC;CAC9D,CAAC","sourcesContent":["// Document path builders — returns tuples of path segments.\n//\n// Frontend (Web SDK): doc(db, ...PATH_BUILDERS.userProfile(userId))\n// Backend (Admin SDK): db.doc(toPath(PATH_BUILDERS.userProfile(userId)))\n\nimport {\n COLLECTIONS,\n USER_SUBCOLLECTIONS,\n WORK_PROJECT_SUBCOLLECTIONS,\n WORK_REALM_SUBCOLLECTIONS,\n NESTED_SUBCOLLECTIONS,\n SPECIAL_DOCS,\n type HallItemSubcollection,\n} from './collections.js';\nimport type { FollowableTargetType } from '../schemas/social.js';\n\nexport const PATH_BUILDERS = {\n // ===== USER PATHS =====\n userProfile: (userId: string): [string, string] =>\n [COLLECTIONS.USER_PROFILES, userId],\n\n // Backend-mirrored public identity projection (publicUsers/{uid}).\n publicUser: (uid: string): [string, string] =>\n [COLLECTIONS.PUBLIC_USERS, uid],\n\n // Per-user account-deletion / erasure request, keyed by uid.\n accountDeletionRequest: (uid: string): [string, string] =>\n [COLLECTIONS.ACCOUNT_DELETION_REQUESTS, uid],\n\n userMentionHistoryEntry: (userId: string, entryId: string): [string, string, string, string] =>\n [COLLECTIONS.USER_PROFILES, userId, USER_SUBCOLLECTIONS.MENTION_HISTORY, entryId],\n\n userCraftSkill: (userId: string, craftSkillId: string): [string, string, string, string] =>\n [COLLECTIONS.USER_PROFILES, userId, USER_SUBCOLLECTIONS.PROFILE_CRAFT_SKILLS, craftSkillId],\n\n userPrivateData: (userId: string): [string, string, string, string] =>\n [COLLECTIONS.USER_PROFILES, userId, USER_SUBCOLLECTIONS.PRIVATE_DATA, userId],\n\n userMetadata: (userId: string): [string, string, string, string] =>\n [COLLECTIONS.USER_PROFILES, userId, USER_SUBCOLLECTIONS.USER_METADATA, SPECIAL_DOCS.NOTIFICATION_SETTINGS],\n\n // Per-user Hall viewing-state doc (hall-viewing-experience Area 2, ruled 2026-07-04):\n // userProfiles/{uid}/privateData/hallLibraryPreferences. Fixed-id privateData subdoc,\n // same shape as userMetadata above.\n hallLibraryPreferences: (userId: string): [string, string, string, string] =>\n [COLLECTIONS.USER_PROFILES, userId, USER_SUBCOLLECTIONS.PRIVATE_DATA, SPECIAL_DOCS.HALL_LIBRARY_PREFERENCES],\n\n // Generic follow edge: top-level `followEdges/{followerUid__targetType__targetId}`.\n // Deterministic ID = O(1) follow-status check + dedupe; a composite index on\n // (targetType, targetId) makes the same collection the reverse follower index.\n followEdge: (followerUid: string, targetType: FollowableTargetType, targetId: string): [string, string] =>\n [COLLECTIONS.FOLLOW_EDGES, `${followerUid}__${targetType}__${targetId}`],\n\n // Denormalized follower-count doc for a followable target: `followCounters/{targetType__targetId}`.\n // Backend-maintained (incremented in the follow/unfollow transaction); never written by clients.\n followCounter: (targetType: FollowableTargetType, targetId: string): [string, string] =>\n [COLLECTIONS.FOLLOW_COUNTERS, `${targetType}__${targetId}`],\n\n userLike: (userId: string, postId: string): [string, string, string, string, string, string] =>\n [COLLECTIONS.USER_PROFILES, userId, USER_SUBCOLLECTIONS.USER_LIKES, NESTED_SUBCOLLECTIONS.LIKE_HISTORY, NESTED_SUBCOLLECTIONS.SQUARE_STREETZ_LIKES, postId],\n\n userAuditionVote: (userId: string, auditionId: string): [string, string, string, string] =>\n [COLLECTIONS.USER_PROFILES, userId, USER_SUBCOLLECTIONS.AUDITION_VOTES, auditionId],\n\n // Archived personal notification history (userProfiles/{uid}/notificationHistory/{id}).\n userNotificationHistoryEntry: (userId: string, notificationId: string): [string, string, string, string] =>\n [COLLECTIONS.USER_PROFILES, userId, USER_SUBCOLLECTIONS.NOTIFICATION_HISTORY, notificationId],\n\n // Collection of archived personal notifications (parent of userNotificationHistoryEntry).\n userNotificationHistory: (userId: string): [string, string, string] =>\n [COLLECTIONS.USER_PROFILES, userId, USER_SUBCOLLECTIONS.NOTIFICATION_HISTORY],\n\n // ===== WORK PATHS =====\n workProject: (workProjectId: string): [string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId],\n\n publicWorkProject: (workProjectId: string): [string, string] =>\n [COLLECTIONS.PUBLIC_WORK_PROJECTS, workProjectId],\n\n // The Work's single hall-entry reservation (fixed doc id — one reservation per Work),\n // claimed create-only inside the first threshold submit's transaction.\n hallSubmissionReservation: (workProjectId: string): [string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.HALL_SUBMISSION_RESERVATION, SPECIAL_DOCS.HALL_SUBMISSION_RESERVATION],\n\n workProjectTale: (workProjectId: string, taleId: string): [string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_PROJECT_TALES, taleId],\n\n taleChapter: (workProjectId: string, taleId: string, chapterId: string): [string, string, string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_PROJECT_TALES, taleId, NESTED_SUBCOLLECTIONS.TALE_CHAPTERS, chapterId],\n\n // Collection of chapters under a tale (parent of taleChapter).\n taleChapters: (workProjectId: string, taleId: string): [string, string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_PROJECT_TALES, taleId, NESTED_SUBCOLLECTIONS.TALE_CHAPTERS],\n\n workProjectTune: (workProjectId: string, tuneId: string): [string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_PROJECT_TUNES, tuneId],\n\n tuneTrack: (workProjectId: string, tuneId: string, trackId: string): [string, string, string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_PROJECT_TUNES, tuneId, NESTED_SUBCOLLECTIONS.TUNE_TRACKS, trackId],\n\n workProjectTelevision: (workProjectId: string, televisionId: string): [string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_PROJECT_TELEVISION, televisionId],\n\n televisionEpisode: (workProjectId: string, televisionId: string, episodeId: string): [string, string, string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_PROJECT_TELEVISION, televisionId, NESTED_SUBCOLLECTIONS.TELEVISION_EPISODES, episodeId],\n\n // Collection of episodes under a television item (parent of televisionEpisode).\n televisionEpisodes: (workProjectId: string, televisionId: string): [string, string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_PROJECT_TELEVISION, televisionId, NESTED_SUBCOLLECTIONS.TELEVISION_EPISODES],\n\n workProjectGuildmateUser: (workProjectId: string, uid: string): [string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.GUILDMATE_USERS, uid],\n\n workProjectPublicGuildmateUser: (workProjectId: string, uid: string): [string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.PUBLIC_GUILDMATE_USERS, uid],\n\n workFileFolder: (workProjectId: string, workFileFolderId: string): [string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_FILE_FOLDERS, workFileFolderId],\n\n workFile: (workProjectId: string, workFileFolderId: string, workFileId: string): [string, string, string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_FILE_FOLDERS, workFileFolderId, NESTED_SUBCOLLECTIONS.WORK_FILES, workFileId],\n\n stakeShareAuditEvent: (eventId: string): [string, string] =>\n [COLLECTIONS.STAKE_SHARE_AUDIT_EVENTS, eventId],\n\n guildChatChannel: (workProjectId: string, guildChatChannelId: string): [string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.GUILD_CHAT_CHANNELS, guildChatChannelId],\n\n // ===== SQUARE PATHS =====\n activePost: (postId: string): [string, string, string, string] =>\n [COLLECTIONS.SQUARE_STREETZ_FEED, NESTED_SUBCOLLECTIONS.ACTIVE_POSTS, NESTED_SUBCOLLECTIONS.SOCIAL_POSTS, postId],\n\n trendingPosts: (): [string, string] =>\n [COLLECTIONS.SQUARE_STREETZ_FEED, NESTED_SUBCOLLECTIONS.TRENDING_POSTS],\n\n // Server-only durable Square announcement outbox job. jobId is DETERMINISTIC —\n // ALWAYS derive it via buildSquareAnnouncementJobId (doc-schemas/square-announcement-jobs.ts).\n squareAnnouncementJob: (jobId: string): [string, string] =>\n [COLLECTIONS.SQUARE_ANNOUNCEMENT_JOBS, jobId],\n\n // ===== HALL PATHS =====\n thresholdItem: (thresholdItemId: string): [string, string] =>\n [COLLECTIONS.THRESHOLD_ITEMS, thresholdItemId],\n\n hallItem: (hallItemId: string): [string, string] =>\n [COLLECTIONS.HALL_ITEMS, hallItemId],\n\n // Published hall sub-item projection (chapter/track/episode). The subcollection segment\n // is constrained to the canonical HALL_ITEM_SUBCOLLECTIONS values (hallItemTales /\n // hallItemTunes / hallItemTelevision) — derive it from\n // HALL_ITEM_SUBCOLLECTION_BY_WORK_TYPE. `workProjectType.toLowerCase()` is NOT a valid\n // derivation: it yields a segment that does not exist, silently addressing an empty\n // collection instead of failing.\n hallItemType: (hallItemId: string, subcollection: HallItemSubcollection, itemId: string): [string, string, string, string] =>\n [COLLECTIONS.HALL_ITEMS, hallItemId, subcollection, itemId],\n\n // Collection of published hall sub-items for one type (parent of hallItemType). The\n // subcollection segment is the canonical HallItemSubcollection — derive it from\n // HALL_ITEM_SUBCOLLECTION_BY_WORK_TYPE. `workProjectType.toLowerCase()` is NOT a valid\n // derivation: it yields a segment that does not exist, silently addressing an empty\n // collection instead of failing.\n hallItemSubItems: (hallItemId: string, subcollection: HallItemSubcollection): [string, string, string] =>\n [COLLECTIONS.HALL_ITEMS, hallItemId, subcollection],\n\n hallContentChangeRequest: (changeRequestId: string): [string, string] =>\n [COLLECTIONS.HALL_CONTENT_CHANGE_REQUESTS, changeRequestId],\n\n // ===== COMMISSION PATHS =====\n commissionListing: (commissionListingId: string): [string, string] =>\n [COLLECTIONS.COMMISSION_LISTINGS, commissionListingId],\n\n commissionProposal: (commissionListingId: string, commissionProposalId: string): [string, string, string, string] =>\n [COLLECTIONS.COMMISSION_LISTINGS, commissionListingId, NESTED_SUBCOLLECTIONS.COMMISSION_PROPOSALS, commissionProposalId],\n\n // ===== AUDITION PATHS =====\n audition: (auditionId: string): [string, string] =>\n [COLLECTIONS.AUDITION_BOARD, auditionId],\n\n auditionEntry: (auditionId: string, auditionEntryId: string): [string, string, string, string] =>\n [COLLECTIONS.AUDITION_BOARD, auditionId, NESTED_SUBCOLLECTIONS.AUDITION_ENTRIES, auditionEntryId],\n\n // ===== REALM PATHS =====\n workRealm: (workRealmId: string): [string, string] =>\n [COLLECTIONS.WORK_REALMS, workRealmId],\n\n // Realm shared-file FOLDER (a container only — shared files stay workFiles under their\n // owning Work and carry `realmFileFolderId` on their mediaAssets doc).\n realmFileFolder: (workRealmId: string, realmFileFolderId: string): [string, string, string, string] =>\n [COLLECTIONS.WORK_REALMS, workRealmId, WORK_REALM_SUBCOLLECTIONS.REALM_FILE_FOLDERS, realmFileFolderId],\n\n // ===== ADMIN & SYSTEM PATHS =====\n adminDispatch: (adminDispatchId: string): [string, string] =>\n [COLLECTIONS.PENDING_ADMIN_DISPATCHES, adminDispatchId],\n\n adminConversationMessage: (adminDispatchId: string, adminDispatchMessageId: string): [string, string, string, string] =>\n [COLLECTIONS.PENDING_ADMIN_DISPATCHES, adminDispatchId, NESTED_SUBCOLLECTIONS.CONVERSATION_MESSAGES, adminDispatchMessageId],\n\n guildInvite: (guildInviteId: string): [string, string] =>\n [COLLECTIONS.GUILD_INVITE_CONVERSATIONS, guildInviteId],\n\n // ===== CONVERSATION FILES (the two supported ConversationFileRef scopes) =====\n // Application and backend code must NOT assemble these paths independently.\n // `conversationFileId` is deterministic — it IS the pendingMedia id.\n guildInviteConversationFile: (guildInviteId: string, conversationFileId: string): [string, string, string, string] =>\n [COLLECTIONS.GUILD_INVITE_CONVERSATIONS, guildInviteId, NESTED_SUBCOLLECTIONS.CONVERSATION_FILES, conversationFileId],\n\n adminDispatchConversationFile: (adminDispatchId: string, conversationFileId: string): [string, string, string, string] =>\n [COLLECTIONS.PENDING_ADMIN_DISPATCHES, adminDispatchId, NESTED_SUBCOLLECTIONS.CONVERSATION_FILES, conversationFileId],\n\n contentReport: (reportId: string): [string, string] =>\n [COLLECTIONS.CONTENT_REPORTS, reportId],\n\n // The report's public, reporter-identity-free projection. The projection doc id IS the\n // report id (contentReports/{reportId}/publicProjection/{reportId}).\n reportPublicProjection: (reportId: string): [string, string, string, string] =>\n [COLLECTIONS.CONTENT_REPORTS, reportId, NESTED_SUBCOLLECTIONS.REPORT_PUBLIC_PROJECTION, reportId],\n\n // Fixed-id restricted report-PII subdocs (contentReports/{reportId}/privateDetails/{snapshot,narrative}).\n reportPrivateSnapshot: (reportId: string): [string, string, string, string] =>\n [COLLECTIONS.CONTENT_REPORTS, reportId, NESTED_SUBCOLLECTIONS.PRIVATE, SPECIAL_DOCS.REPORT_SNAPSHOT],\n\n reportPrivateNarrative: (reportId: string): [string, string, string, string] =>\n [COLLECTIONS.CONTENT_REPORTS, reportId, NESTED_SUBCOLLECTIONS.PRIVATE, SPECIAL_DOCS.REPORT_NARRATIVE],\n\n // The SECOND narrative doc, typed when an existing ordinary report is escalated into a\n // protected case — a sibling of `privateDetails/narrative` in the same restricted\n // subcollection, so the original narrative is never overwritten and the read gate is identical.\n reportPrivateEscalationNarrative: (reportId: string): [string, string, string, string] =>\n [COLLECTIONS.CONTENT_REPORTS, reportId, NESTED_SUBCOLLECTIONS.PRIVATE, SPECIAL_DOCS.REPORT_NARRATIVE_ESCALATION],\n\n activeReportGroup: (groupKey: string): [string, string] =>\n [COLLECTIONS.ACTIVE_REPORT_GROUPS, groupKey],\n\n // Per-report idempotency marker under a group (its ABSENCE gates the totalReports increment).\n reportGroupCountedReport: (groupKey: string, reportId: string): [string, string, string, string] =>\n [COLLECTIONS.ACTIVE_REPORT_GROUPS, groupKey, NESTED_SUBCOLLECTIONS.REPORT_GROUP_COUNTED_REPORTS, reportId],\n\n // Time-sensitive admin-tray \"case needs work\" pin (activeSafetyCaseAlerts/{caseId}).\n safetyCaseAlert: (caseId: string): [string, string] =>\n [COLLECTIONS.ACTIVE_SAFETY_CASE_ALERTS, caseId],\n\n contentViolation: (violationId: string): [string, string] =>\n [COLLECTIONS.CONTENT_VIOLATIONS, violationId],\n\n adminTask: (taskId: string): [string, string] =>\n [COLLECTIONS.ADMIN_TASKS, taskId],\n\n adminTaskForItem: (taskType: string, itemId: string): [string, string] =>\n [COLLECTIONS.ADMIN_TASKS, `${taskType}-${itemId}`],\n\n moderationCascadeManifest: (cascadeId: string): [string, string] =>\n [COLLECTIONS.MODERATION_CASCADE_MANIFESTS, cascadeId],\n\n moderationCascadeChangedDoc: (cascadeId: string, changedDocId: string): [string, string, string, string] =>\n [COLLECTIONS.MODERATION_CASCADE_MANIFESTS, cascadeId, NESTED_SUBCOLLECTIONS.CHANGED_DOCS, changedDocId],\n\n // ===== UTILITY PATHS =====\n reservedDisplayName: (displayNameUppercase: string): [string, string] =>\n [COLLECTIONS.RESERVED_DISPLAY_NAMES, displayNameUppercase],\n\n reservedRealmName: (workingTitleUppercase: string): [string, string] =>\n [COLLECTIONS.RESERVED_REALM_NAMES, workingTitleUppercase],\n\n shortLink: (shortId: string): [string, string] =>\n [COLLECTIONS.SHORT_LINKS, shortId],\n\n pendingMedia: (docId: string): [string, string] =>\n [COLLECTIONS.PENDING_MEDIA, docId],\n\n pendingMediaArchive: (docId: string): [string, string] =>\n [COLLECTIONS.PENDING_MEDIA_ARCHIVE, docId],\n\n mediaAsset: (mediaAssetId: string): [string, string] =>\n [COLLECTIONS.MEDIA_ASSETS, mediaAssetId],\n\n // Server-only durable activation job (prepare → activate → publish + recovery).\n mediaActivationJob: (jobId: string): [string, string] =>\n [COLLECTIONS.MEDIA_ACTIVATION_JOBS, jobId],\n\n // ===== NOTIFICATION REDESIGN (ledger + fanout engine) PATHS =====\n notificationDelivery: (deliveryId: string): [string, string] =>\n [COLLECTIONS.NOTIFICATION_DELIVERIES, deliveryId],\n\n notificationFanoutJob: (jobId: string): [string, string] =>\n [COLLECTIONS.NOTIFICATION_FANOUT_JOBS, jobId],\n\n // ===== CHAT REALTIME SYNC / PROJECTION / COMMAND PATHS =====\n chatChannelAuthProjection: (authPairKey: string): [string, string] =>\n [COLLECTIONS.CHAT_CHANNEL_AUTH_PROJECTIONS, authPairKey],\n\n chatScopeDegraded: (scopeKey: string): [string, string] =>\n [COLLECTIONS.CHAT_SCOPE_DEGRADED, scopeKey],\n\n chatScopeDegradedCause: (scopeKey: string, causeId: string): [string, string, string, string] =>\n [COLLECTIONS.CHAT_SCOPE_DEGRADED, scopeKey, NESTED_SUBCOLLECTIONS.CHAT_SCOPE_DEGRADED_CAUSES, causeId],\n\n chatSyncEvent: (eventId: string): [string, string] =>\n [COLLECTIONS.CHAT_SYNC_EVENTS, eventId],\n\n chatSyncFanoutJob: (jobId: string): [string, string] =>\n [COLLECTIONS.CHAT_SYNC_FANOUT_JOBS, jobId],\n\n chatMessageOutboxCommand: (commandId: string): [string, string] =>\n [COLLECTIONS.CHAT_MESSAGE_OUTBOX, commandId],\n\n chatAdminActionCommand: (requestId: string): [string, string] =>\n [COLLECTIONS.CHAT_ADMIN_ACTION_COMMANDS, requestId],\n\n chatHistoryAnonymizationJob: (jobId: string): [string, string] =>\n [COLLECTIONS.CHAT_HISTORY_ANONYMIZATION_JOBS, jobId],\n\n chatHistoryAnonymizationAffectedChunk: (jobId: string, chunkOrdinal: string): [string, string, string, string] =>\n [COLLECTIONS.CHAT_HISTORY_ANONYMIZATION_JOBS, jobId, NESTED_SUBCOLLECTIONS.CHAT_ANONYMIZATION_AFFECTED_CHUNKS, chunkOrdinal],\n\n // ===== PAYMENT & PLEDGE PATHS =====\n // Public-safe canonical money record. Stripe IDs live on pledgePaymentProviderRef (server-only).\n pledgePayment: (pledgePaymentId: string): [string, string] =>\n [COLLECTIONS.PLEDGE_PAYMENTS, pledgePaymentId],\n\n // Server-only Stripe references (session/PI/charge/dispute IDs). One doc per pledge — singular.\n pledgePaymentProviderRef: (pledgePaymentId: string): [string, string] =>\n [COLLECTIONS.PLEDGE_PAYMENT_PROVIDER_REFS, pledgePaymentId],\n\n // Running-totals singleton — incremented in the Stripe webhook's pledge-record transaction;\n // read (ONE doc) by the public raised-total surfaces instead of a collection-wide aggregation.\n pledgePaymentTotals: (): [string, string] =>\n [COLLECTIONS.PLEDGE_PAYMENT_TOTALS, SPECIAL_DOCS.SUMMARY],\n\n // Idempotency sentinel, keyed by the Stripe event.id.\n processedStripeEvent: (stripeEventId: string): [string, string] =>\n [COLLECTIONS.PROCESSED_STRIPE_EVENTS, stripeEventId],\n\n // Independent integrity record from the ledger verification trigger.\n pledgePaymentLedgerEvent: (ledgerId: string): [string, string] =>\n [COLLECTIONS.PLEDGE_PAYMENT_LEDGER_EVENTS, ledgerId],\n\n // Unrecoverable paid-event repair queue, keyed by the Stripe event.id.\n paymentWebhookQuarantine: (stripeEventId: string): [string, string] =>\n [COLLECTIONS.PAYMENT_WEBHOOK_QUARANTINE, stripeEventId],\n\n // User-initiated pledge refund request (post-launch), keyed by requestId. No Stripe ids on this\n // doc — those live on pledgePaymentProviderRefs.\n pledgeRefundRequest: (requestId: string): [string, string] =>\n [COLLECTIONS.PLEDGE_REFUND_REQUESTS, requestId],\n\n // ===== FEEDBACK & CRAFT PATHS =====\n feedbackSubmission: (feedbackType: string): [string, string] =>\n [COLLECTIONS.FEEDBACK_SUBMISSIONS, feedbackType],\n\n userSuggestion: (feedbackType: string, suggestionId: string): [string, string, string, string] =>\n [COLLECTIONS.FEEDBACK_SUBMISSIONS, feedbackType, NESTED_SUBCOLLECTIONS.USER_SUGGESTIONS, suggestionId],\n\n // The two submitFeedback lists live under the server-only `_serverData/feedbackLists`\n // container doc (BACKEND-108) — Cloud Functions read them via the Admin SDK and no\n // client reads either one. Doc ids are the normalized suggestion text.\n feedbackAlias: (aliasId: string): [string, string, string, string] =>\n [COLLECTIONS.SERVER_DATA, SPECIAL_DOCS.FEEDBACK_LISTS, NESTED_SUBCOLLECTIONS.FEEDBACK_ALIASES, aliasId],\n\n feedbackDenylist: (deniedWord: string): [string, string, string, string] =>\n [COLLECTIONS.SERVER_DATA, SPECIAL_DOCS.FEEDBACK_LISTS, NESTED_SUBCOLLECTIONS.FEEDBACK_DENYLIST, deniedWord],\n\n taggedCraftSkill: (tag: string, compositeId: string): [string, string, string, string] =>\n [COLLECTIONS.CRAFT_SKILLS_BY_TAG, tag, NESTED_SUBCOLLECTIONS.TAGGED_CRAFT_SKILLS, compositeId],\n\n // ===== SYSTEM DATA PATHS =====\n adminList: (): [string, string] =>\n [COLLECTIONS.SYSTEM_DATA, SPECIAL_DOCS.ADMIN_LIST],\n\n futurePlans: (): [string, string] =>\n [COLLECTIONS.APP_CONFIG, SPECIAL_DOCS.FUTURE_PLANS],\n\n profanityList: (): [string, string] =>\n [COLLECTIONS.SYSTEM_DATA, SPECIAL_DOCS.PROFANITY_LIST],\n\n reservedUsernames: (): [string, string] =>\n [COLLECTIONS.SYSTEM_DATA, SPECIAL_DOCS.RESERVED_USERNAMES],\n\n blockedFranchiseNames: (): [string, string] =>\n [COLLECTIONS.SYSTEM_DATA, SPECIAL_DOCS.BLOCKED_FRANCHISE_NAMES],\n\n rulesAndAgreements: (): [string, string] =>\n [COLLECTIONS.APP_CONFIG, SPECIAL_DOCS.RULES_AND_AGREEMENTS],\n\n termsPage: (): [string, string] =>\n [COLLECTIONS.APP_CONFIG, SPECIAL_DOCS.TERMS_PAGE],\n\n privacyPage: (): [string, string] =>\n [COLLECTIONS.APP_CONFIG, SPECIAL_DOCS.PRIVACY_PAGE],\n\n takeItDownPageCopy: (): [string, string] =>\n [COLLECTIONS.APP_CONFIG, SPECIAL_DOCS.TAKE_IT_DOWN_PAGE_COPY],\n\n appConfig: (): [string, string] =>\n [COLLECTIONS.APP_CONFIG, SPECIAL_DOCS.APP_CONFIG],\n\n appModeMarker: (): [string, string] =>\n [COLLECTIONS.SYSTEM_DATA, SPECIAL_DOCS.APP_MODE],\n\n // Singleton scan cursor for the scheduled Hall media orphan reaper\n // (reapOrphanedHallMediaCopies). Backend-only; persists the highest `createdAt` the\n // reaper has positively cleared so each pass resumes instead of re-reading the oldest page.\n hallMediaReaperCursor: (): [string, string] =>\n [COLLECTIONS.SYSTEM_DATA, SPECIAL_DOCS.HALL_MEDIA_REAPER_CURSOR],\n\n // Singleton sweep cursor for the scheduled publicUsers reconciler (reconcilePublicUsers).\n // Backend-only; persists the last userProfiles document id the sweep positively cleared so\n // each pass resumes instead of re-reading the same oldest page ('' = start from the beginning).\n publicUsersReconcilerCursor: (): [string, string] =>\n [COLLECTIONS.SYSTEM_DATA, SPECIAL_DOCS.PUBLIC_USERS_RECONCILER_CURSOR],\n\n // Backend-only post-commit auth-effect reconcile queue entry, keyed by the affected uid.\n statusReconcileQueueEntry: (uid: string): [string, string] =>\n [COLLECTIONS.STATUS_RECONCILE_QUEUE, uid],\n\n // ===== TRUST & SAFETY — child-safety case spine (§A1b, §A2) =====\n childSafetyCaseListEntry: (caseId: string): [string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASE_LIST, caseId],\n\n childSafetyCase: (caseId: string): [string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId],\n\n childSafetySourceSignal: (caseId: string, signalId: string): [string, string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_SOURCE_SIGNALS, signalId],\n\n // Collection of source-signal rows for a case (parent of childSafetySourceSignal).\n childSafetySourceSignals: (caseId: string): [string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_SOURCE_SIGNALS],\n\n childSafetyDecision: (caseId: string, decisionId: string): [string, string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_DECISIONS, decisionId],\n\n // Collection of decision rows for a case (parent of childSafetyDecision).\n childSafetyDecisions: (caseId: string): [string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_DECISIONS],\n\n childSafetyDecisionView: (caseId: string, decisionId: string, viewId: string): [string, string, string, string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_DECISIONS, decisionId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_DECISION_VIEWS, viewId],\n\n childSafetyCaseAccount: (caseId: string, uid: string): [string, string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_CASE_ACCOUNTS, uid],\n\n // Collection of per-account rows for a case (parent of childSafetyCaseAccount).\n childSafetyCaseAccounts: (caseId: string): [string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_CASE_ACCOUNTS],\n\n childSafetyCaseAccountHistory: (caseId: string, uid: string, historyId: string): [string, string, string, string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_CASE_ACCOUNTS, uid, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_CASE_ACCOUNT_HISTORY, historyId],\n\n childSafetyNcmecSubmission: (caseId: string, submissionId: string): [string, string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_NCMEC_SUBMISSIONS, submissionId],\n\n childSafetyNcmecSubmissionFile: (caseId: string, submissionId: string, fileId: string): [string, string, string, string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_NCMEC_SUBMISSIONS, submissionId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_NCMEC_SUBMISSION_FILES, fileId],\n\n // Per-submission NCMEC transmission attempt. Previously a `firestore.rules`-only segment\n // with no ttt-core constant; the segment now has a single owner (NCMEC_SUBMISSION_ATTEMPTS).\n childSafetyNcmecSubmissionAttempt: (caseId: string, submissionId: string, attemptId: string): [string, string, string, string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_NCMEC_SUBMISSIONS, submissionId, NESTED_SUBCOLLECTIONS.NCMEC_SUBMISSION_ATTEMPTS, attemptId],\n\n // The submission's single immutable completion-proof record. Fixed doc id — one proof per\n // submission, written create-if-absent in the same transaction that marks the submission\n // `completed`, so `completed` and its bound proof can never diverge.\n childSafetyNcmecCompletionProof: (caseId: string, submissionId: string): [string, string, string, string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_NCMEC_SUBMISSIONS, submissionId, NESTED_SUBCOLLECTIONS.NCMEC_COMPLETION_PROOF, SPECIAL_DOCS.RECORD],\n\n childSafetyLegalProcessEvent: (caseId: string, eventId: string): [string, string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_LEGAL_PROCESS, eventId],\n\n // Immutable portal-receipt artifact record bound to a case + NCMEC submission — the proof\n // `markNcmecPortalComplete` requires. Written create-only by recordNcmecPortalReceiptArtifact.\n childSafetyPortalReceiptArtifact: (caseId: string, artifactId: string): [string, string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.NCMEC_PORTAL_RECEIPT_ARTIFACTS, artifactId],\n\n // Collection of portal-receipt artifact rows for a case (parent of the builder above) — the\n // auto-id mint site.\n childSafetyPortalReceiptArtifacts: (caseId: string): [string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.NCMEC_PORTAL_RECEIPT_ARTIFACTS],\n\n // Immutable record that the operator filed a CORRECTION on the NCMEC manual portal. Its\n // existence is what unlocks the corrected-no-apparent-violation disposition.\n childSafetyNcmecPortalCorrection: (caseId: string, correctionId: string): [string, string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.NCMEC_PORTAL_CORRECTIONS, correctionId],\n\n // Collection of portal-correction rows for a case (parent of the builder above) — the auto-id\n // mint site and the existence query behind the disposition gate.\n childSafetyNcmecPortalCorrections: (caseId: string): [string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.NCMEC_PORTAL_CORRECTIONS],\n\n childSafetyOwningAlias: (aliasId: string): [string, string] =>\n [COLLECTIONS.CHILD_SAFETY_OWNING_ALIASES, aliasId],\n\n // ===== TRUST & SAFETY — holds + resource commands (§A3) =====\n // Composite doc id caseId__resourceKeyHash — a single {holdRefId} segment.\n safetyHoldRef: (holdRefId: string): [string, string] =>\n [COLLECTIONS.SAFETY_HOLD_REFS, holdRefId],\n\n safetyHoldResource: (resourceKeyHash: string): [string, string] =>\n [COLLECTIONS.SAFETY_HOLD_RESOURCES, resourceKeyHash],\n\n // Composite doc id resourceKeyHash__commandId — a single {commandDocId} segment.\n safetyResourceCommand: (commandDocId: string): [string, string] =>\n [COLLECTIONS.SAFETY_RESOURCE_COMMANDS, commandDocId],\n\n safetyResourceCommandAuthorizedRequest: (commandDocId: string, requestId: string): [string, string, string, string] =>\n [COLLECTIONS.SAFETY_RESOURCE_COMMANDS, commandDocId, NESTED_SUBCOLLECTIONS.SAFETY_RESOURCE_COMMAND_AUTHORIZED_REQUESTS, requestId],\n\n safetyResourceCommandBypassRef: (commandDocId: string, refId: string): [string, string, string, string] =>\n [COLLECTIONS.SAFETY_RESOURCE_COMMANDS, commandDocId, NESTED_SUBCOLLECTIONS.SAFETY_RESOURCE_COMMAND_BYPASS_REFS, refId],\n\n // ===== TRUST & SAFETY — evidence + provenance (§A4, §A6) =====\n safetyEvidenceManifest: (manifestId: string): [string, string] =>\n [COLLECTIONS.SAFETY_EVIDENCE_MANIFESTS, manifestId],\n\n safetyEvidenceJob: (jobId: string): [string, string] =>\n [COLLECTIONS.SAFETY_EVIDENCE_JOBS, jobId],\n\n safetyEvidenceJobItem: (jobId: string, itemId: string): [string, string, string, string] =>\n [COLLECTIONS.SAFETY_EVIDENCE_JOBS, jobId, NESTED_SUBCOLLECTIONS.SAFETY_EVIDENCE_JOB_ITEMS, itemId],\n\n safetyEvidenceJobDisposition: (jobId: string, locationId: string): [string, string, string, string] =>\n [COLLECTIONS.SAFETY_EVIDENCE_JOBS, jobId, NESTED_SUBCOLLECTIONS.SAFETY_EVIDENCE_JOB_DISPOSITION, locationId],\n\n eventProvenance: (eventId: string): [string, string] =>\n [COLLECTIONS.EVENT_PROVENANCE, eventId],\n\n // ===== TRUST & SAFETY — sagas + closure (§A5) =====\n quarantineSagaJob: (caseId: string): [string, string] =>\n [COLLECTIONS.QUARANTINE_SAGA_JOBS, caseId],\n\n quarantineSagaRelatedAsset: (caseId: string, assetId: string): [string, string, string, string] =>\n [COLLECTIONS.QUARANTINE_SAGA_JOBS, caseId, NESTED_SUBCOLLECTIONS.QUARANTINE_SAGA_RELATED_ASSETS, assetId],\n\n // Composite doc id caseId__submissionId — a single {ncmecJobId} segment.\n ncmecSubmissionJob: (ncmecJobId: string): [string, string] =>\n [COLLECTIONS.NCMEC_SUBMISSION_JOBS, ncmecJobId],\n\n // Composite doc id caseId__uid — a single {accountActionCommandId} segment.\n accountActionCommand: (accountActionCommandId: string): [string, string] =>\n [COLLECTIONS.ACCOUNT_ACTION_COMMANDS, accountActionCommandId],\n\n // ===== TRUST & SAFETY — SLA monitors + heartbeat (§A8) =====\n // Composite doc id {caseId|requestId}__{monitorKind} — a single {monitorId} segment.\n safetySlaMonitor: (monitorId: string): [string, string] =>\n [COLLECTIONS.SAFETY_SLA_MONITORS, monitorId],\n\n // Singleton: safetyMonitorHeartbeat/global.\n safetyMonitorHeartbeat: (): [string, string] =>\n [COLLECTIONS.SAFETY_MONITOR_HEARTBEAT, SPECIAL_DOCS.SAFETY_MONITOR_HEARTBEAT_GLOBAL],\n\n // ===== TRUST & SAFETY — age attestation nonces (§A7) =====\n ageAttestationNonce: (nonceHash: string): [string, string] =>\n [COLLECTIONS.AGE_ATTESTATION_NONCES, nonceHash],\n\n // ===== TRUST & SAFETY — operator step-up + reconciler cursors (backend-only) =====\n // [H-08] per-operator TOTP step-up state, keyed by uid. Cloud-Functions-only.\n operatorStepUp: (uid: string): [string, string] =>\n [COLLECTIONS.OPERATOR_STEP_UP, uid],\n\n // Persisted pagination cursor for one reconciler needs-work backstop sweep.\n safetyReconcilerCursor: (cursorKey: string): [string, string] =>\n [COLLECTIONS.SAFETY_RECONCILER_CURSORS, cursorKey],\n\n // Durable cadence/cursor state for one scheduled user sweep, keyed by the sweep name\n // (orphanRegistrationCleanup, reconcileAccountStatus). Backend-only.\n sweepState: (sweepName: string): [string, string] =>\n [COLLECTIONS.SWEEP_STATE, sweepName],\n\n // ===== TRUST & SAFETY — NCII / TAKE IT DOWN (§A11) =====\n nciiAllegation: (allegationId: string): [string, string] =>\n [COLLECTIONS.NCII_ALLEGATIONS, allegationId],\n\n takeItDownRequest: (requestId: string): [string, string] =>\n [COLLECTIONS.TAKE_IT_DOWN_REQUESTS, requestId],\n\n // Fixed-id requester PII subdoc (takeItDownRequests/{requestId}/privateDetails/requester).\n takeItDownRequesterPrivate: (requestId: string): [string, string, string, string] =>\n [COLLECTIONS.TAKE_IT_DOWN_REQUESTS, requestId, NESTED_SUBCOLLECTIONS.PRIVATE, SPECIAL_DOCS.TAKE_IT_DOWN_REQUESTER],\n\n takeItDownSubmission: (requestId: string, submissionId: string): [string, string, string, string] =>\n [COLLECTIONS.TAKE_IT_DOWN_REQUESTS, requestId, NESTED_SUBCOLLECTIONS.TAKE_IT_DOWN_SUBMISSIONS, submissionId],\n\n // Collection of submissions under a request (parent of takeItDownSubmission).\n takeItDownSubmissions: (requestId: string): [string, string, string] =>\n [COLLECTIONS.TAKE_IT_DOWN_REQUESTS, requestId, NESTED_SUBCOLLECTIONS.TAKE_IT_DOWN_SUBMISSIONS],\n\n // Collection of validity decisions under a request (parent of takeItDownValidityDecision).\n takeItDownValidityDecisions: (requestId: string): [string, string, string] =>\n [COLLECTIONS.TAKE_IT_DOWN_REQUESTS, requestId, NESTED_SUBCOLLECTIONS.TAKE_IT_DOWN_VALIDITY_DECISIONS],\n\n takeItDownValidityDecision: (requestId: string, decisionId: string): [string, string, string, string] =>\n [COLLECTIONS.TAKE_IT_DOWN_REQUESTS, requestId, NESTED_SUBCOLLECTIONS.TAKE_IT_DOWN_VALIDITY_DECISIONS, decisionId],\n\n // The decision's RESTRICTED rationale row (fixed doc id — one rationale per decision), written\n // create-only in the same transaction as the decision; rationaleRef / detailRef point here.\n takeItDownValidityRationale: (requestId: string, decisionId: string): [string, string, string, string, string, string] =>\n [COLLECTIONS.TAKE_IT_DOWN_REQUESTS, requestId, NESTED_SUBCOLLECTIONS.TAKE_IT_DOWN_VALIDITY_DECISIONS, decisionId, NESTED_SUBCOLLECTIONS.TAKE_IT_DOWN_VALIDITY_RATIONALE, SPECIAL_DOCS.RECORD],\n\n takeItDownRequestAction: (requestId: string, actionId: string): [string, string, string, string] =>\n [COLLECTIONS.TAKE_IT_DOWN_REQUESTS, requestId, NESTED_SUBCOLLECTIONS.TAKE_IT_DOWN_ACTIONS, actionId],\n\n takeItDownEvidence: (requestId: string, evidenceId: string): [string, string, string, string] =>\n [COLLECTIONS.TAKE_IT_DOWN_REQUESTS, requestId, NESTED_SUBCOLLECTIONS.TAKE_IT_DOWN_EVIDENCE, evidenceId],\n\n // ONE deletion-verification record per evidence object, keyed by the evidence id so a retried or\n // redelivered sweep overwrites it: the record is the CURRENT deletion status, not an attempt log.\n takeItDownEvidenceDisposition: (requestId: string, evidenceId: string): [string, string, string, string] =>\n [COLLECTIONS.TAKE_IT_DOWN_REQUESTS, requestId, NESTED_SUBCOLLECTIONS.TAKE_IT_DOWN_EVIDENCE_DISPOSITION, evidenceId],\n\n // [H-01] a retained-but-unrecorded NCII-evidence inventory row (top-level; id is deterministic on\n // bucket+key+generation so a re-fire is idempotent).\n nciiRetainedEvidenceInventory: (inventoryId: string): [string, string] =>\n [COLLECTIONS.NCII_RETAINED_EVIDENCE_INVENTORY, inventoryId],\n\n // [H-01] dead-letter entry for an inventory row that could not be written to the primary\n // nciiRetainedEvidenceInventory collection (id mirrors the primary row id for traceability).\n nciiInventoryDeadLetter: (inventoryId: string): [string, string] =>\n [COLLECTIONS.NCII_INVENTORY_DEAD_LETTER, inventoryId],\n\n nciiCase: (caseId: string): [string, string] =>\n [COLLECTIONS.NCII_CASES, caseId],\n\n nciiCaseAllegationLink: (caseId: string, allegationId: string): [string, string, string, string] =>\n [COLLECTIONS.NCII_CASES, caseId, NESTED_SUBCOLLECTIONS.NCII_CASE_ALLEGATION_LINKS, allegationId],\n\n // Collection of allegation links for a case (parent of nciiCaseAllegationLink).\n nciiCaseAllegationLinks: (caseId: string): [string, string, string] =>\n [COLLECTIONS.NCII_CASES, caseId, NESTED_SUBCOLLECTIONS.NCII_CASE_ALLEGATION_LINKS],\n\n nciiCaseRequestLink: (caseId: string, requestId: string): [string, string, string, string] =>\n [COLLECTIONS.NCII_CASES, caseId, NESTED_SUBCOLLECTIONS.NCII_CASE_REQUEST_LINKS, requestId],\n\n // Collection of request links for a case (parent of nciiCaseRequestLink).\n nciiCaseRequestLinks: (caseId: string): [string, string, string] =>\n [COLLECTIONS.NCII_CASES, caseId, NESTED_SUBCOLLECTIONS.NCII_CASE_REQUEST_LINKS],\n\n // Append-only NCII case closure/reopen events.\n nciiCaseClosureEvent: (caseId: string, eventId: string): [string, string, string, string] =>\n [COLLECTIONS.NCII_CASES, caseId, NESTED_SUBCOLLECTIONS.NCII_CASE_CLOSURE_EVENTS, eventId],\n\n // Collection of closure/reopen events for a case (parent of nciiCaseClosureEvent).\n nciiCaseClosureEvents: (caseId: string): [string, string, string] =>\n [COLLECTIONS.NCII_CASES, caseId, NESTED_SUBCOLLECTIONS.NCII_CASE_CLOSURE_EVENTS],\n\n nciiCaseRemovalAction: (caseId: string, actionId: string): [string, string, string, string] =>\n [COLLECTIONS.NCII_CASES, caseId, NESTED_SUBCOLLECTIONS.NCII_CASE_REMOVAL_ACTIONS, actionId],\n\n nciiBlockedHash: (caseId: string, hashId: string): [string, string, string, string] =>\n [COLLECTIONS.NCII_CASES, caseId, NESTED_SUBCOLLECTIONS.NCII_CASE_BLOCKED_HASHES, hashId],\n\n nciiTemporaryHold: (holdId: string): [string, string] =>\n [COLLECTIONS.NCII_TEMPORARY_HOLDS, holdId],\n\n nciiRemovalJob: (jobId: string): [string, string] =>\n [COLLECTIONS.NCII_REMOVAL_JOBS, jobId],\n\n nciiRemovalTarget: (jobId: string, targetKeyHash: string): [string, string, string, string] =>\n [COLLECTIONS.NCII_REMOVAL_JOBS, jobId, NESTED_SUBCOLLECTIONS.NCII_REMOVAL_TARGETS, targetKeyHash],\n\n // ===== BACKEND-ONLY LEDGERS =====\n // Append-only audit ledger row (auditEvents/{eventId}).\n auditEvent: (eventId: string): [string, string] =>\n [COLLECTIONS.AUDIT_EVENTS, eventId],\n\n // The audit ledger collection (parent of auditEvent — the writer mints ids against it).\n auditEvents: (): [string] =>\n [COLLECTIONS.AUDIT_EVENTS],\n\n // Server-owned \"archive all\" job (notificationArchiveAllJobs/{jobId}; CF-only).\n notificationArchiveAllJob: (jobId: string): [string, string] =>\n [COLLECTIONS.NOTIFICATION_ARCHIVE_ALL_JOBS, jobId],\n\n // ===== TRUST & SAFETY — _serverData (server-only) singletons (§A7, §A11) =====\n // Moved from _appConfig (public) to _serverData (BACKEND-108 — Cloud-Functions-only readers).\n agePolicyConfig: (): [string, string] =>\n [COLLECTIONS.SERVER_DATA, SPECIAL_DOCS.AGE_POLICY],\n\n nciiPolicyConfig: (): [string, string] =>\n [COLLECTIONS.SERVER_DATA, SPECIAL_DOCS.NCII_POLICY],\n\n privilegedReviewerSecurityConfig: (): [string, string] =>\n [COLLECTIONS.SERVER_DATA, SPECIAL_DOCS.PRIVILEGED_REVIEWER_SECURITY],\n} as const;\n"]}
1
+ {"version":3,"file":"path-builders.js","sourceRoot":"","sources":["../../src/paths/path-builders.ts"],"names":[],"mappings":"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","sourcesContent":["// Document path builders — returns tuples of path segments.\n//\n// Frontend (Web SDK): doc(db, ...PATH_BUILDERS.userProfile(userId))\n// Backend (Admin SDK): db.doc(toPath(PATH_BUILDERS.userProfile(userId)))\n\nimport {\n COLLECTIONS,\n USER_SUBCOLLECTIONS,\n WORK_PROJECT_SUBCOLLECTIONS,\n WORK_REALM_SUBCOLLECTIONS,\n NESTED_SUBCOLLECTIONS,\n SPECIAL_DOCS,\n HALL_ITEM_SUBCOLLECTION_BY_WORK_TYPE,\n type HallItemSubcollection,\n} from './collections.js';\nimport type { FollowableTargetType } from '../schemas/social.js';\nimport type { WorkProjectType } from '../types/content.js';\n\nexport const PATH_BUILDERS = {\n // ===== USER PATHS =====\n userProfile: (userId: string): [string, string] =>\n [COLLECTIONS.USER_PROFILES, userId],\n\n // Backend-mirrored public identity projection (publicUsers/{uid}).\n publicUser: (uid: string): [string, string] =>\n [COLLECTIONS.PUBLIC_USERS, uid],\n\n // Per-user account-deletion / erasure request, keyed by uid.\n accountDeletionRequest: (uid: string): [string, string] =>\n [COLLECTIONS.ACCOUNT_DELETION_REQUESTS, uid],\n\n userMentionHistoryEntry: (userId: string, entryId: string): [string, string, string, string] =>\n [COLLECTIONS.USER_PROFILES, userId, USER_SUBCOLLECTIONS.MENTION_HISTORY, entryId],\n\n userCraftSkill: (userId: string, craftSkillId: string): [string, string, string, string] =>\n [COLLECTIONS.USER_PROFILES, userId, USER_SUBCOLLECTIONS.PROFILE_CRAFT_SKILLS, craftSkillId],\n\n userPrivateData: (userId: string): [string, string, string, string] =>\n [COLLECTIONS.USER_PROFILES, userId, USER_SUBCOLLECTIONS.PRIVATE_DATA, userId],\n\n userMetadata: (userId: string): [string, string, string, string] =>\n [COLLECTIONS.USER_PROFILES, userId, USER_SUBCOLLECTIONS.USER_METADATA, SPECIAL_DOCS.NOTIFICATION_SETTINGS],\n\n // Per-user Hall viewing-state doc (hall-viewing-experience Area 2, ruled 2026-07-04):\n // userProfiles/{uid}/privateData/hallLibraryPreferences. Fixed-id privateData subdoc,\n // same shape as userMetadata above.\n hallLibraryPreferences: (userId: string): [string, string, string, string] =>\n [COLLECTIONS.USER_PROFILES, userId, USER_SUBCOLLECTIONS.PRIVATE_DATA, SPECIAL_DOCS.HALL_LIBRARY_PREFERENCES],\n\n // Generic follow edge: top-level `followEdges/{followerUid__targetType__targetId}`.\n // Deterministic ID = O(1) follow-status check + dedupe; a composite index on\n // (targetType, targetId) makes the same collection the reverse follower index.\n followEdge: (followerUid: string, targetType: FollowableTargetType, targetId: string): [string, string] =>\n [COLLECTIONS.FOLLOW_EDGES, `${followerUid}__${targetType}__${targetId}`],\n\n // Denormalized follower-count doc for a followable target: `followCounters/{targetType__targetId}`.\n // Backend-maintained (incremented in the follow/unfollow transaction); never written by clients.\n followCounter: (targetType: FollowableTargetType, targetId: string): [string, string] =>\n [COLLECTIONS.FOLLOW_COUNTERS, `${targetType}__${targetId}`],\n\n userLike: (userId: string, postId: string): [string, string, string, string, string, string] =>\n [COLLECTIONS.USER_PROFILES, userId, USER_SUBCOLLECTIONS.USER_LIKES, NESTED_SUBCOLLECTIONS.LIKE_HISTORY, NESTED_SUBCOLLECTIONS.SQUARE_STREETZ_LIKES, postId],\n\n userAuditionVote: (userId: string, auditionId: string): [string, string, string, string] =>\n [COLLECTIONS.USER_PROFILES, userId, USER_SUBCOLLECTIONS.AUDITION_VOTES, auditionId],\n\n // Archived personal notification history (userProfiles/{uid}/notificationHistory/{id}).\n userNotificationHistoryEntry: (userId: string, notificationId: string): [string, string, string, string] =>\n [COLLECTIONS.USER_PROFILES, userId, USER_SUBCOLLECTIONS.NOTIFICATION_HISTORY, notificationId],\n\n // Collection of archived personal notifications (parent of userNotificationHistoryEntry).\n userNotificationHistory: (userId: string): [string, string, string] =>\n [COLLECTIONS.USER_PROFILES, userId, USER_SUBCOLLECTIONS.NOTIFICATION_HISTORY],\n\n // ===== WORK PATHS =====\n workProject: (workProjectId: string): [string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId],\n\n publicWorkProject: (workProjectId: string): [string, string] =>\n [COLLECTIONS.PUBLIC_WORK_PROJECTS, workProjectId],\n\n // The Work's single hall-entry reservation (fixed doc id — one reservation per Work),\n // claimed create-only inside the first threshold submit's transaction.\n hallSubmissionReservation: (workProjectId: string): [string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.HALL_SUBMISSION_RESERVATION, SPECIAL_DOCS.HALL_SUBMISSION_RESERVATION],\n\n workProjectTale: (workProjectId: string, taleId: string): [string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_PROJECT_TALES, taleId],\n\n taleChapter: (workProjectId: string, taleId: string, chapterId: string): [string, string, string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_PROJECT_TALES, taleId, NESTED_SUBCOLLECTIONS.TALE_CHAPTERS, chapterId],\n\n // Collection of chapters under a tale (parent of taleChapter).\n taleChapters: (workProjectId: string, taleId: string): [string, string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_PROJECT_TALES, taleId, NESTED_SUBCOLLECTIONS.TALE_CHAPTERS],\n\n workProjectTune: (workProjectId: string, tuneId: string): [string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_PROJECT_TUNES, tuneId],\n\n tuneTrack: (workProjectId: string, tuneId: string, trackId: string): [string, string, string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_PROJECT_TUNES, tuneId, NESTED_SUBCOLLECTIONS.TUNE_TRACKS, trackId],\n\n workProjectTelevision: (workProjectId: string, televisionId: string): [string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_PROJECT_TELEVISION, televisionId],\n\n televisionEpisode: (workProjectId: string, televisionId: string, episodeId: string): [string, string, string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_PROJECT_TELEVISION, televisionId, NESTED_SUBCOLLECTIONS.TELEVISION_EPISODES, episodeId],\n\n // Collection of episodes under a television item (parent of televisionEpisode).\n televisionEpisodes: (workProjectId: string, televisionId: string): [string, string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_PROJECT_TELEVISION, televisionId, NESTED_SUBCOLLECTIONS.TELEVISION_EPISODES],\n\n workProjectGuildmateUser: (workProjectId: string, uid: string): [string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.GUILDMATE_USERS, uid],\n\n workProjectPublicGuildmateUser: (workProjectId: string, uid: string): [string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.PUBLIC_GUILDMATE_USERS, uid],\n\n workFileFolder: (workProjectId: string, workFileFolderId: string): [string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_FILE_FOLDERS, workFileFolderId],\n\n workFile: (workProjectId: string, workFileFolderId: string, workFileId: string): [string, string, string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_FILE_FOLDERS, workFileFolderId, NESTED_SUBCOLLECTIONS.WORK_FILES, workFileId],\n\n stakeShareAuditEvent: (eventId: string): [string, string] =>\n [COLLECTIONS.STAKE_SHARE_AUDIT_EVENTS, eventId],\n\n guildChatChannel: (workProjectId: string, guildChatChannelId: string): [string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.GUILD_CHAT_CHANNELS, guildChatChannelId],\n\n // ===== SQUARE PATHS =====\n activePost: (postId: string): [string, string, string, string] =>\n [COLLECTIONS.SQUARE_STREETZ_FEED, NESTED_SUBCOLLECTIONS.ACTIVE_POSTS, NESTED_SUBCOLLECTIONS.SOCIAL_POSTS, postId],\n\n trendingPosts: (): [string, string] =>\n [COLLECTIONS.SQUARE_STREETZ_FEED, NESTED_SUBCOLLECTIONS.TRENDING_POSTS],\n\n // Server-only durable Square announcement outbox job. jobId is DETERMINISTIC —\n // ALWAYS derive it via buildSquareAnnouncementJobId (doc-schemas/square-announcement-jobs.ts).\n squareAnnouncementJob: (jobId: string): [string, string] =>\n [COLLECTIONS.SQUARE_ANNOUNCEMENT_JOBS, jobId],\n\n // ===== HALL PATHS =====\n thresholdItem: (thresholdItemId: string): [string, string] =>\n [COLLECTIONS.THRESHOLD_ITEMS, thresholdItemId],\n\n hallItem: (hallItemId: string): [string, string] =>\n [COLLECTIONS.HALL_ITEMS, hallItemId],\n\n // Published hall sub-item projection (chapter/track/episode). The subcollection segment\n // is constrained to the canonical HALL_ITEM_SUBCOLLECTIONS values (hallItemTales /\n // hallItemTunes / hallItemTelevision) — derive it from\n // HALL_ITEM_SUBCOLLECTION_BY_WORK_TYPE. `workProjectType.toLowerCase()` is NOT a valid\n // derivation: it yields a segment that does not exist, silently addressing an empty\n // collection instead of failing.\n hallItemType: (hallItemId: string, subcollection: HallItemSubcollection, itemId: string): [string, string, string, string] =>\n [COLLECTIONS.HALL_ITEMS, hallItemId, subcollection, itemId],\n\n // A published Hall sub-item's path is determined by its canonical identity, never a\n // caller-provided collection segment. This is the path used by typed administrative replay\n // targets as well as ordinary Hall moderation operations.\n hallItemSubItem: (hallItemId: string, workProjectType: WorkProjectType, itemId: string): [string, string, string, string] =>\n [COLLECTIONS.HALL_ITEMS, hallItemId, HALL_ITEM_SUBCOLLECTION_BY_WORK_TYPE[workProjectType], itemId],\n\n // Collection of published hall sub-items for one type (parent of hallItemType). The\n // subcollection segment is the canonical HallItemSubcollection — derive it from\n // HALL_ITEM_SUBCOLLECTION_BY_WORK_TYPE. `workProjectType.toLowerCase()` is NOT a valid\n // derivation: it yields a segment that does not exist, silently addressing an empty\n // collection instead of failing.\n hallItemSubItems: (hallItemId: string, subcollection: HallItemSubcollection): [string, string, string] =>\n [COLLECTIONS.HALL_ITEMS, hallItemId, subcollection],\n\n hallContentChangeRequest: (changeRequestId: string): [string, string] =>\n [COLLECTIONS.HALL_CONTENT_CHANGE_REQUESTS, changeRequestId],\n\n // ===== COMMISSION PATHS =====\n commissionListing: (commissionListingId: string): [string, string] =>\n [COLLECTIONS.COMMISSION_LISTINGS, commissionListingId],\n\n commissionProposal: (commissionListingId: string, commissionProposalId: string): [string, string, string, string] =>\n [COLLECTIONS.COMMISSION_LISTINGS, commissionListingId, NESTED_SUBCOLLECTIONS.COMMISSION_PROPOSALS, commissionProposalId],\n\n // ===== AUDITION PATHS =====\n audition: (auditionId: string): [string, string] =>\n [COLLECTIONS.AUDITION_BOARD, auditionId],\n\n auditionEntry: (auditionId: string, auditionEntryId: string): [string, string, string, string] =>\n [COLLECTIONS.AUDITION_BOARD, auditionId, NESTED_SUBCOLLECTIONS.AUDITION_ENTRIES, auditionEntryId],\n\n // ===== REALM PATHS =====\n workRealm: (workRealmId: string): [string, string] =>\n [COLLECTIONS.WORK_REALMS, workRealmId],\n\n // Realm shared-file FOLDER (a container only — shared files stay workFiles under their\n // owning Work and carry `realmFileFolderId` on their mediaAssets doc).\n realmFileFolder: (workRealmId: string, realmFileFolderId: string): [string, string, string, string] =>\n [COLLECTIONS.WORK_REALMS, workRealmId, WORK_REALM_SUBCOLLECTIONS.REALM_FILE_FOLDERS, realmFileFolderId],\n\n // ===== ADMIN & SYSTEM PATHS =====\n adminDispatch: (adminDispatchId: string): [string, string] =>\n [COLLECTIONS.PENDING_ADMIN_DISPATCHES, adminDispatchId],\n\n adminConversationMessage: (adminDispatchId: string, adminDispatchMessageId: string): [string, string, string, string] =>\n [COLLECTIONS.PENDING_ADMIN_DISPATCHES, adminDispatchId, NESTED_SUBCOLLECTIONS.CONVERSATION_MESSAGES, adminDispatchMessageId],\n\n guildInvite: (guildInviteId: string): [string, string] =>\n [COLLECTIONS.GUILD_INVITE_CONVERSATIONS, guildInviteId],\n\n // ===== CONVERSATION FILES (the two supported ConversationFileRef scopes) =====\n // Application and backend code must NOT assemble these paths independently.\n // `conversationFileId` is deterministic — it IS the pendingMedia id.\n guildInviteConversationFile: (guildInviteId: string, conversationFileId: string): [string, string, string, string] =>\n [COLLECTIONS.GUILD_INVITE_CONVERSATIONS, guildInviteId, NESTED_SUBCOLLECTIONS.CONVERSATION_FILES, conversationFileId],\n\n adminDispatchConversationFile: (adminDispatchId: string, conversationFileId: string): [string, string, string, string] =>\n [COLLECTIONS.PENDING_ADMIN_DISPATCHES, adminDispatchId, NESTED_SUBCOLLECTIONS.CONVERSATION_FILES, conversationFileId],\n\n contentReport: (reportId: string): [string, string] =>\n [COLLECTIONS.CONTENT_REPORTS, reportId],\n\n // The report's public, reporter-identity-free projection. The projection doc id IS the\n // report id (contentReports/{reportId}/publicProjection/{reportId}).\n reportPublicProjection: (reportId: string): [string, string, string, string] =>\n [COLLECTIONS.CONTENT_REPORTS, reportId, NESTED_SUBCOLLECTIONS.REPORT_PUBLIC_PROJECTION, reportId],\n\n // Fixed-id restricted report-PII subdocs (contentReports/{reportId}/privateDetails/{snapshot,narrative}).\n reportPrivateSnapshot: (reportId: string): [string, string, string, string] =>\n [COLLECTIONS.CONTENT_REPORTS, reportId, NESTED_SUBCOLLECTIONS.PRIVATE, SPECIAL_DOCS.REPORT_SNAPSHOT],\n\n reportPrivateNarrative: (reportId: string): [string, string, string, string] =>\n [COLLECTIONS.CONTENT_REPORTS, reportId, NESTED_SUBCOLLECTIONS.PRIVATE, SPECIAL_DOCS.REPORT_NARRATIVE],\n\n // The SECOND narrative doc, typed when an existing ordinary report is escalated into a\n // protected case — a sibling of `privateDetails/narrative` in the same restricted\n // subcollection, so the original narrative is never overwritten and the read gate is identical.\n reportPrivateEscalationNarrative: (reportId: string): [string, string, string, string] =>\n [COLLECTIONS.CONTENT_REPORTS, reportId, NESTED_SUBCOLLECTIONS.PRIVATE, SPECIAL_DOCS.REPORT_NARRATIVE_ESCALATION],\n\n activeReportGroup: (groupKey: string): [string, string] =>\n [COLLECTIONS.ACTIVE_REPORT_GROUPS, groupKey],\n\n // Per-report idempotency marker under a group (its ABSENCE gates the totalReports increment).\n reportGroupCountedReport: (groupKey: string, reportId: string): [string, string, string, string] =>\n [COLLECTIONS.ACTIVE_REPORT_GROUPS, groupKey, NESTED_SUBCOLLECTIONS.REPORT_GROUP_COUNTED_REPORTS, reportId],\n\n // Time-sensitive admin-tray \"case needs work\" pin (activeSafetyCaseAlerts/{caseId}).\n safetyCaseAlert: (caseId: string): [string, string] =>\n [COLLECTIONS.ACTIVE_SAFETY_CASE_ALERTS, caseId],\n\n contentViolation: (violationId: string): [string, string] =>\n [COLLECTIONS.CONTENT_VIOLATIONS, violationId],\n\n adminTask: (taskId: string): [string, string] =>\n [COLLECTIONS.ADMIN_TASKS, taskId],\n\n adminTaskForItem: (taskType: string, itemId: string): [string, string] =>\n [COLLECTIONS.ADMIN_TASKS, `${taskType}-${itemId}`],\n\n moderationCascadeManifest: (cascadeId: string): [string, string] =>\n [COLLECTIONS.MODERATION_CASCADE_MANIFESTS, cascadeId],\n\n moderationCascadeChangedDoc: (cascadeId: string, changedDocId: string): [string, string, string, string] =>\n [COLLECTIONS.MODERATION_CASCADE_MANIFESTS, cascadeId, NESTED_SUBCOLLECTIONS.CHANGED_DOCS, changedDocId],\n\n // ===== UTILITY PATHS =====\n reservedDisplayName: (displayNameUppercase: string): [string, string] =>\n [COLLECTIONS.RESERVED_DISPLAY_NAMES, displayNameUppercase],\n\n reservedRealmName: (workingTitleUppercase: string): [string, string] =>\n [COLLECTIONS.RESERVED_REALM_NAMES, workingTitleUppercase],\n\n shortLink: (shortId: string): [string, string] =>\n [COLLECTIONS.SHORT_LINKS, shortId],\n\n pendingMedia: (docId: string): [string, string] =>\n [COLLECTIONS.PENDING_MEDIA, docId],\n\n pendingMediaArchive: (docId: string): [string, string] =>\n [COLLECTIONS.PENDING_MEDIA_ARCHIVE, docId],\n\n mediaAsset: (mediaAssetId: string): [string, string] =>\n [COLLECTIONS.MEDIA_ASSETS, mediaAssetId],\n\n // Server-only durable activation job (prepare → activate → publish + recovery).\n mediaActivationJob: (jobId: string): [string, string] =>\n [COLLECTIONS.MEDIA_ACTIVATION_JOBS, jobId],\n\n // ===== NOTIFICATION REDESIGN (ledger + fanout engine) PATHS =====\n notificationDelivery: (deliveryId: string): [string, string] =>\n [COLLECTIONS.NOTIFICATION_DELIVERIES, deliveryId],\n\n notificationFanoutJob: (jobId: string): [string, string] =>\n [COLLECTIONS.NOTIFICATION_FANOUT_JOBS, jobId],\n\n // ===== CHAT REALTIME SYNC / PROJECTION / COMMAND PATHS =====\n chatChannelAuthProjection: (authPairKey: string): [string, string] =>\n [COLLECTIONS.CHAT_CHANNEL_AUTH_PROJECTIONS, authPairKey],\n\n chatScopeDegraded: (scopeKey: string): [string, string] =>\n [COLLECTIONS.CHAT_SCOPE_DEGRADED, scopeKey],\n\n chatScopeDegradedCause: (scopeKey: string, causeId: string): [string, string, string, string] =>\n [COLLECTIONS.CHAT_SCOPE_DEGRADED, scopeKey, NESTED_SUBCOLLECTIONS.CHAT_SCOPE_DEGRADED_CAUSES, causeId],\n\n chatSyncEvent: (eventId: string): [string, string] =>\n [COLLECTIONS.CHAT_SYNC_EVENTS, eventId],\n\n chatSyncFanoutJob: (jobId: string): [string, string] =>\n [COLLECTIONS.CHAT_SYNC_FANOUT_JOBS, jobId],\n\n chatMessageOutboxCommand: (commandId: string): [string, string] =>\n [COLLECTIONS.CHAT_MESSAGE_OUTBOX, commandId],\n\n chatAdminActionCommand: (requestId: string): [string, string] =>\n [COLLECTIONS.CHAT_ADMIN_ACTION_COMMANDS, requestId],\n\n chatHistoryAnonymizationJob: (jobId: string): [string, string] =>\n [COLLECTIONS.CHAT_HISTORY_ANONYMIZATION_JOBS, jobId],\n\n chatHistoryAnonymizationAffectedChunk: (jobId: string, chunkOrdinal: string): [string, string, string, string] =>\n [COLLECTIONS.CHAT_HISTORY_ANONYMIZATION_JOBS, jobId, NESTED_SUBCOLLECTIONS.CHAT_ANONYMIZATION_AFFECTED_CHUNKS, chunkOrdinal],\n\n // ===== PAYMENT & PLEDGE PATHS =====\n // Public-safe canonical money record. Stripe IDs live on pledgePaymentProviderRef (server-only).\n pledgePayment: (pledgePaymentId: string): [string, string] =>\n [COLLECTIONS.PLEDGE_PAYMENTS, pledgePaymentId],\n\n // Server-only Stripe references (session/PI/charge/dispute IDs). One doc per pledge — singular.\n pledgePaymentProviderRef: (pledgePaymentId: string): [string, string] =>\n [COLLECTIONS.PLEDGE_PAYMENT_PROVIDER_REFS, pledgePaymentId],\n\n // Running-totals singleton — incremented in the Stripe webhook's pledge-record transaction;\n // read (ONE doc) by the public raised-total surfaces instead of a collection-wide aggregation.\n pledgePaymentTotals: (): [string, string] =>\n [COLLECTIONS.PLEDGE_PAYMENT_TOTALS, SPECIAL_DOCS.SUMMARY],\n\n // Idempotency sentinel, keyed by the Stripe event.id.\n processedStripeEvent: (stripeEventId: string): [string, string] =>\n [COLLECTIONS.PROCESSED_STRIPE_EVENTS, stripeEventId],\n\n // Independent integrity record from the ledger verification trigger.\n pledgePaymentLedgerEvent: (ledgerId: string): [string, string] =>\n [COLLECTIONS.PLEDGE_PAYMENT_LEDGER_EVENTS, ledgerId],\n\n // Unrecoverable paid-event repair queue, keyed by the Stripe event.id.\n paymentWebhookQuarantine: (stripeEventId: string): [string, string] =>\n [COLLECTIONS.PAYMENT_WEBHOOK_QUARANTINE, stripeEventId],\n\n // User-initiated pledge refund request (post-launch), keyed by requestId. No Stripe ids on this\n // doc — those live on pledgePaymentProviderRefs.\n pledgeRefundRequest: (requestId: string): [string, string] =>\n [COLLECTIONS.PLEDGE_REFUND_REQUESTS, requestId],\n\n // ===== FEEDBACK & CRAFT PATHS =====\n feedbackSubmission: (feedbackType: string): [string, string] =>\n [COLLECTIONS.FEEDBACK_SUBMISSIONS, feedbackType],\n\n userSuggestion: (feedbackType: string, suggestionId: string): [string, string, string, string] =>\n [COLLECTIONS.FEEDBACK_SUBMISSIONS, feedbackType, NESTED_SUBCOLLECTIONS.USER_SUGGESTIONS, suggestionId],\n\n // The two submitFeedback lists live under the server-only `_serverData/feedbackLists`\n // container doc (BACKEND-108) — Cloud Functions read them via the Admin SDK and no\n // client reads either one. Doc ids are the normalized suggestion text.\n feedbackAlias: (aliasId: string): [string, string, string, string] =>\n [COLLECTIONS.SERVER_DATA, SPECIAL_DOCS.FEEDBACK_LISTS, NESTED_SUBCOLLECTIONS.FEEDBACK_ALIASES, aliasId],\n\n feedbackDenylist: (deniedWord: string): [string, string, string, string] =>\n [COLLECTIONS.SERVER_DATA, SPECIAL_DOCS.FEEDBACK_LISTS, NESTED_SUBCOLLECTIONS.FEEDBACK_DENYLIST, deniedWord],\n\n taggedCraftSkill: (tag: string, compositeId: string): [string, string, string, string] =>\n [COLLECTIONS.CRAFT_SKILLS_BY_TAG, tag, NESTED_SUBCOLLECTIONS.TAGGED_CRAFT_SKILLS, compositeId],\n\n // ===== SYSTEM DATA PATHS =====\n adminList: (): [string, string] =>\n [COLLECTIONS.SYSTEM_DATA, SPECIAL_DOCS.ADMIN_LIST],\n\n futurePlans: (): [string, string] =>\n [COLLECTIONS.APP_CONFIG, SPECIAL_DOCS.FUTURE_PLANS],\n\n profanityList: (): [string, string] =>\n [COLLECTIONS.SYSTEM_DATA, SPECIAL_DOCS.PROFANITY_LIST],\n\n reservedUsernames: (): [string, string] =>\n [COLLECTIONS.SYSTEM_DATA, SPECIAL_DOCS.RESERVED_USERNAMES],\n\n blockedFranchiseNames: (): [string, string] =>\n [COLLECTIONS.SYSTEM_DATA, SPECIAL_DOCS.BLOCKED_FRANCHISE_NAMES],\n\n rulesAndAgreements: (): [string, string] =>\n [COLLECTIONS.APP_CONFIG, SPECIAL_DOCS.RULES_AND_AGREEMENTS],\n\n termsPage: (): [string, string] =>\n [COLLECTIONS.APP_CONFIG, SPECIAL_DOCS.TERMS_PAGE],\n\n privacyPage: (): [string, string] =>\n [COLLECTIONS.APP_CONFIG, SPECIAL_DOCS.PRIVACY_PAGE],\n\n takeItDownPageCopy: (): [string, string] =>\n [COLLECTIONS.APP_CONFIG, SPECIAL_DOCS.TAKE_IT_DOWN_PAGE_COPY],\n\n appConfig: (): [string, string] =>\n [COLLECTIONS.APP_CONFIG, SPECIAL_DOCS.APP_CONFIG],\n\n appModeMarker: (): [string, string] =>\n [COLLECTIONS.SYSTEM_DATA, SPECIAL_DOCS.APP_MODE],\n\n // Singleton scan cursor for the scheduled Hall media orphan reaper\n // (reapOrphanedHallMediaCopies). Backend-only; persists the highest `createdAt` the\n // reaper has positively cleared so each pass resumes instead of re-reading the oldest page.\n hallMediaReaperCursor: (): [string, string] =>\n [COLLECTIONS.SYSTEM_DATA, SPECIAL_DOCS.HALL_MEDIA_REAPER_CURSOR],\n\n // Singleton sweep cursor for the scheduled publicUsers reconciler (reconcilePublicUsers).\n // Backend-only; persists the last userProfiles document id the sweep positively cleared so\n // each pass resumes instead of re-reading the same oldest page ('' = start from the beginning).\n publicUsersReconcilerCursor: (): [string, string] =>\n [COLLECTIONS.SYSTEM_DATA, SPECIAL_DOCS.PUBLIC_USERS_RECONCILER_CURSOR],\n\n // Backend-only post-commit auth-effect reconcile queue entry, keyed by the affected uid.\n statusReconcileQueueEntry: (uid: string): [string, string] =>\n [COLLECTIONS.STATUS_RECONCILE_QUEUE, uid],\n\n // ===== TRUST & SAFETY — child-safety case spine (§A1b, §A2) =====\n childSafetyCaseListEntry: (caseId: string): [string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASE_LIST, caseId],\n\n childSafetyCase: (caseId: string): [string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId],\n\n childSafetySourceSignal: (caseId: string, signalId: string): [string, string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_SOURCE_SIGNALS, signalId],\n\n // Collection of source-signal rows for a case (parent of childSafetySourceSignal).\n childSafetySourceSignals: (caseId: string): [string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_SOURCE_SIGNALS],\n\n childSafetyDecision: (caseId: string, decisionId: string): [string, string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_DECISIONS, decisionId],\n\n // Collection of decision rows for a case (parent of childSafetyDecision).\n childSafetyDecisions: (caseId: string): [string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_DECISIONS],\n\n childSafetyDecisionView: (caseId: string, decisionId: string, viewId: string): [string, string, string, string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_DECISIONS, decisionId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_DECISION_VIEWS, viewId],\n\n childSafetyCaseAccount: (caseId: string, uid: string): [string, string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_CASE_ACCOUNTS, uid],\n\n // Collection of per-account rows for a case (parent of childSafetyCaseAccount).\n childSafetyCaseAccounts: (caseId: string): [string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_CASE_ACCOUNTS],\n\n childSafetyCaseAccountHistory: (caseId: string, uid: string, historyId: string): [string, string, string, string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_CASE_ACCOUNTS, uid, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_CASE_ACCOUNT_HISTORY, historyId],\n\n childSafetyNcmecSubmission: (caseId: string, submissionId: string): [string, string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_NCMEC_SUBMISSIONS, submissionId],\n\n childSafetyNcmecSubmissionFile: (caseId: string, submissionId: string, fileId: string): [string, string, string, string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_NCMEC_SUBMISSIONS, submissionId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_NCMEC_SUBMISSION_FILES, fileId],\n\n // Per-submission NCMEC transmission attempt. Previously a `firestore.rules`-only segment\n // with no ttt-core constant; the segment now has a single owner (NCMEC_SUBMISSION_ATTEMPTS).\n childSafetyNcmecSubmissionAttempt: (caseId: string, submissionId: string, attemptId: string): [string, string, string, string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_NCMEC_SUBMISSIONS, submissionId, NESTED_SUBCOLLECTIONS.NCMEC_SUBMISSION_ATTEMPTS, attemptId],\n\n // The submission's single immutable completion-proof record. Fixed doc id — one proof per\n // submission, written create-if-absent in the same transaction that marks the submission\n // `completed`, so `completed` and its bound proof can never diverge.\n childSafetyNcmecCompletionProof: (caseId: string, submissionId: string): [string, string, string, string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_NCMEC_SUBMISSIONS, submissionId, NESTED_SUBCOLLECTIONS.NCMEC_COMPLETION_PROOF, SPECIAL_DOCS.RECORD],\n\n childSafetyLegalProcessEvent: (caseId: string, eventId: string): [string, string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.CHILD_SAFETY_LEGAL_PROCESS, eventId],\n\n // Immutable portal-receipt artifact record bound to a case + NCMEC submission — the proof\n // `markNcmecPortalComplete` requires. Written create-only by recordNcmecPortalReceiptArtifact.\n childSafetyPortalReceiptArtifact: (caseId: string, artifactId: string): [string, string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.NCMEC_PORTAL_RECEIPT_ARTIFACTS, artifactId],\n\n // Collection of portal-receipt artifact rows for a case (parent of the builder above) — the\n // auto-id mint site.\n childSafetyPortalReceiptArtifacts: (caseId: string): [string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.NCMEC_PORTAL_RECEIPT_ARTIFACTS],\n\n // Immutable record that the operator filed a CORRECTION on the NCMEC manual portal. Its\n // existence is what unlocks the corrected-no-apparent-violation disposition.\n childSafetyNcmecPortalCorrection: (caseId: string, correctionId: string): [string, string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.NCMEC_PORTAL_CORRECTIONS, correctionId],\n\n // Collection of portal-correction rows for a case (parent of the builder above) — the auto-id\n // mint site and the existence query behind the disposition gate.\n childSafetyNcmecPortalCorrections: (caseId: string): [string, string, string] =>\n [COLLECTIONS.CHILD_SAFETY_CASES, caseId, NESTED_SUBCOLLECTIONS.NCMEC_PORTAL_CORRECTIONS],\n\n childSafetyOwningAlias: (aliasId: string): [string, string] =>\n [COLLECTIONS.CHILD_SAFETY_OWNING_ALIASES, aliasId],\n\n // ===== TRUST & SAFETY — holds + resource commands (§A3) =====\n // Composite doc id caseId__resourceKeyHash — a single {holdRefId} segment.\n safetyHoldRef: (holdRefId: string): [string, string] =>\n [COLLECTIONS.SAFETY_HOLD_REFS, holdRefId],\n\n safetyHoldResource: (resourceKeyHash: string): [string, string] =>\n [COLLECTIONS.SAFETY_HOLD_RESOURCES, resourceKeyHash],\n\n // Composite doc id resourceKeyHash__commandId — a single {commandDocId} segment.\n safetyResourceCommand: (commandDocId: string): [string, string] =>\n [COLLECTIONS.SAFETY_RESOURCE_COMMANDS, commandDocId],\n\n safetyResourceCommandAuthorizedRequest: (commandDocId: string, requestId: string): [string, string, string, string] =>\n [COLLECTIONS.SAFETY_RESOURCE_COMMANDS, commandDocId, NESTED_SUBCOLLECTIONS.SAFETY_RESOURCE_COMMAND_AUTHORIZED_REQUESTS, requestId],\n\n safetyResourceCommandBypassRef: (commandDocId: string, refId: string): [string, string, string, string] =>\n [COLLECTIONS.SAFETY_RESOURCE_COMMANDS, commandDocId, NESTED_SUBCOLLECTIONS.SAFETY_RESOURCE_COMMAND_BYPASS_REFS, refId],\n\n // ===== TRUST & SAFETY — evidence + provenance (§A4, §A6) =====\n safetyEvidenceManifest: (manifestId: string): [string, string] =>\n [COLLECTIONS.SAFETY_EVIDENCE_MANIFESTS, manifestId],\n\n safetyEvidenceJob: (jobId: string): [string, string] =>\n [COLLECTIONS.SAFETY_EVIDENCE_JOBS, jobId],\n\n safetyEvidenceJobItem: (jobId: string, itemId: string): [string, string, string, string] =>\n [COLLECTIONS.SAFETY_EVIDENCE_JOBS, jobId, NESTED_SUBCOLLECTIONS.SAFETY_EVIDENCE_JOB_ITEMS, itemId],\n\n safetyEvidenceJobDisposition: (jobId: string, locationId: string): [string, string, string, string] =>\n [COLLECTIONS.SAFETY_EVIDENCE_JOBS, jobId, NESTED_SUBCOLLECTIONS.SAFETY_EVIDENCE_JOB_DISPOSITION, locationId],\n\n eventProvenance: (eventId: string): [string, string] =>\n [COLLECTIONS.EVENT_PROVENANCE, eventId],\n\n // ===== TRUST & SAFETY — sagas + closure (§A5) =====\n quarantineSagaJob: (caseId: string): [string, string] =>\n [COLLECTIONS.QUARANTINE_SAGA_JOBS, caseId],\n\n quarantineSagaRelatedAsset: (caseId: string, assetId: string): [string, string, string, string] =>\n [COLLECTIONS.QUARANTINE_SAGA_JOBS, caseId, NESTED_SUBCOLLECTIONS.QUARANTINE_SAGA_RELATED_ASSETS, assetId],\n\n // Composite doc id caseId__submissionId — a single {ncmecJobId} segment.\n ncmecSubmissionJob: (ncmecJobId: string): [string, string] =>\n [COLLECTIONS.NCMEC_SUBMISSION_JOBS, ncmecJobId],\n\n // Composite doc id caseId__uid — a single {accountActionCommandId} segment.\n accountActionCommand: (accountActionCommandId: string): [string, string] =>\n [COLLECTIONS.ACCOUNT_ACTION_COMMANDS, accountActionCommandId],\n\n // ===== TRUST & SAFETY — SLA monitors + heartbeat (§A8) =====\n // Composite doc id {caseId|requestId}__{monitorKind} — a single {monitorId} segment.\n safetySlaMonitor: (monitorId: string): [string, string] =>\n [COLLECTIONS.SAFETY_SLA_MONITORS, monitorId],\n\n // Singleton: safetyMonitorHeartbeat/global.\n safetyMonitorHeartbeat: (): [string, string] =>\n [COLLECTIONS.SAFETY_MONITOR_HEARTBEAT, SPECIAL_DOCS.SAFETY_MONITOR_HEARTBEAT_GLOBAL],\n\n // ===== TRUST & SAFETY — age attestation nonces (§A7) =====\n ageAttestationNonce: (nonceHash: string): [string, string] =>\n [COLLECTIONS.AGE_ATTESTATION_NONCES, nonceHash],\n\n // ===== TRUST & SAFETY — operator step-up + reconciler cursors (backend-only) =====\n // [H-08] per-operator TOTP step-up state, keyed by uid. Cloud-Functions-only.\n operatorStepUp: (uid: string): [string, string] =>\n [COLLECTIONS.OPERATOR_STEP_UP, uid],\n\n // Persisted pagination cursor for one reconciler needs-work backstop sweep.\n safetyReconcilerCursor: (cursorKey: string): [string, string] =>\n [COLLECTIONS.SAFETY_RECONCILER_CURSORS, cursorKey],\n\n // Durable cadence/cursor state for one scheduled user sweep, keyed by the sweep name\n // (orphanRegistrationCleanup, reconcileAccountStatus). Backend-only.\n sweepState: (sweepName: string): [string, string] =>\n [COLLECTIONS.SWEEP_STATE, sweepName],\n\n // ===== TRUST & SAFETY — NCII / TAKE IT DOWN (§A11) =====\n nciiAllegation: (allegationId: string): [string, string] =>\n [COLLECTIONS.NCII_ALLEGATIONS, allegationId],\n\n takeItDownRequest: (requestId: string): [string, string] =>\n [COLLECTIONS.TAKE_IT_DOWN_REQUESTS, requestId],\n\n // Fixed-id requester PII subdoc (takeItDownRequests/{requestId}/privateDetails/requester).\n takeItDownRequesterPrivate: (requestId: string): [string, string, string, string] =>\n [COLLECTIONS.TAKE_IT_DOWN_REQUESTS, requestId, NESTED_SUBCOLLECTIONS.PRIVATE, SPECIAL_DOCS.TAKE_IT_DOWN_REQUESTER],\n\n takeItDownSubmission: (requestId: string, submissionId: string): [string, string, string, string] =>\n [COLLECTIONS.TAKE_IT_DOWN_REQUESTS, requestId, NESTED_SUBCOLLECTIONS.TAKE_IT_DOWN_SUBMISSIONS, submissionId],\n\n // Collection of submissions under a request (parent of takeItDownSubmission).\n takeItDownSubmissions: (requestId: string): [string, string, string] =>\n [COLLECTIONS.TAKE_IT_DOWN_REQUESTS, requestId, NESTED_SUBCOLLECTIONS.TAKE_IT_DOWN_SUBMISSIONS],\n\n // Collection of validity decisions under a request (parent of takeItDownValidityDecision).\n takeItDownValidityDecisions: (requestId: string): [string, string, string] =>\n [COLLECTIONS.TAKE_IT_DOWN_REQUESTS, requestId, NESTED_SUBCOLLECTIONS.TAKE_IT_DOWN_VALIDITY_DECISIONS],\n\n takeItDownValidityDecision: (requestId: string, decisionId: string): [string, string, string, string] =>\n [COLLECTIONS.TAKE_IT_DOWN_REQUESTS, requestId, NESTED_SUBCOLLECTIONS.TAKE_IT_DOWN_VALIDITY_DECISIONS, decisionId],\n\n // The decision's RESTRICTED rationale row (fixed doc id — one rationale per decision), written\n // create-only in the same transaction as the decision; rationaleRef / detailRef point here.\n takeItDownValidityRationale: (requestId: string, decisionId: string): [string, string, string, string, string, string] =>\n [COLLECTIONS.TAKE_IT_DOWN_REQUESTS, requestId, NESTED_SUBCOLLECTIONS.TAKE_IT_DOWN_VALIDITY_DECISIONS, decisionId, NESTED_SUBCOLLECTIONS.TAKE_IT_DOWN_VALIDITY_RATIONALE, SPECIAL_DOCS.RECORD],\n\n takeItDownRequestAction: (requestId: string, actionId: string): [string, string, string, string] =>\n [COLLECTIONS.TAKE_IT_DOWN_REQUESTS, requestId, NESTED_SUBCOLLECTIONS.TAKE_IT_DOWN_ACTIONS, actionId],\n\n takeItDownEvidence: (requestId: string, evidenceId: string): [string, string, string, string] =>\n [COLLECTIONS.TAKE_IT_DOWN_REQUESTS, requestId, NESTED_SUBCOLLECTIONS.TAKE_IT_DOWN_EVIDENCE, evidenceId],\n\n // ONE deletion-verification record per evidence object, keyed by the evidence id so a retried or\n // redelivered sweep overwrites it: the record is the CURRENT deletion status, not an attempt log.\n takeItDownEvidenceDisposition: (requestId: string, evidenceId: string): [string, string, string, string] =>\n [COLLECTIONS.TAKE_IT_DOWN_REQUESTS, requestId, NESTED_SUBCOLLECTIONS.TAKE_IT_DOWN_EVIDENCE_DISPOSITION, evidenceId],\n\n // [H-01] a retained-but-unrecorded NCII-evidence inventory row (top-level; id is deterministic on\n // bucket+key+generation so a re-fire is idempotent).\n nciiRetainedEvidenceInventory: (inventoryId: string): [string, string] =>\n [COLLECTIONS.NCII_RETAINED_EVIDENCE_INVENTORY, inventoryId],\n\n // [H-01] dead-letter entry for an inventory row that could not be written to the primary\n // nciiRetainedEvidenceInventory collection (id mirrors the primary row id for traceability).\n nciiInventoryDeadLetter: (inventoryId: string): [string, string] =>\n [COLLECTIONS.NCII_INVENTORY_DEAD_LETTER, inventoryId],\n\n nciiCase: (caseId: string): [string, string] =>\n [COLLECTIONS.NCII_CASES, caseId],\n\n nciiCaseAllegationLink: (caseId: string, allegationId: string): [string, string, string, string] =>\n [COLLECTIONS.NCII_CASES, caseId, NESTED_SUBCOLLECTIONS.NCII_CASE_ALLEGATION_LINKS, allegationId],\n\n // Collection of allegation links for a case (parent of nciiCaseAllegationLink).\n nciiCaseAllegationLinks: (caseId: string): [string, string, string] =>\n [COLLECTIONS.NCII_CASES, caseId, NESTED_SUBCOLLECTIONS.NCII_CASE_ALLEGATION_LINKS],\n\n nciiCaseRequestLink: (caseId: string, requestId: string): [string, string, string, string] =>\n [COLLECTIONS.NCII_CASES, caseId, NESTED_SUBCOLLECTIONS.NCII_CASE_REQUEST_LINKS, requestId],\n\n // Collection of request links for a case (parent of nciiCaseRequestLink).\n nciiCaseRequestLinks: (caseId: string): [string, string, string] =>\n [COLLECTIONS.NCII_CASES, caseId, NESTED_SUBCOLLECTIONS.NCII_CASE_REQUEST_LINKS],\n\n // Append-only NCII case closure/reopen events.\n nciiCaseClosureEvent: (caseId: string, eventId: string): [string, string, string, string] =>\n [COLLECTIONS.NCII_CASES, caseId, NESTED_SUBCOLLECTIONS.NCII_CASE_CLOSURE_EVENTS, eventId],\n\n // Collection of closure/reopen events for a case (parent of nciiCaseClosureEvent).\n nciiCaseClosureEvents: (caseId: string): [string, string, string] =>\n [COLLECTIONS.NCII_CASES, caseId, NESTED_SUBCOLLECTIONS.NCII_CASE_CLOSURE_EVENTS],\n\n nciiCaseRemovalAction: (caseId: string, actionId: string): [string, string, string, string] =>\n [COLLECTIONS.NCII_CASES, caseId, NESTED_SUBCOLLECTIONS.NCII_CASE_REMOVAL_ACTIONS, actionId],\n\n nciiBlockedHash: (caseId: string, hashId: string): [string, string, string, string] =>\n [COLLECTIONS.NCII_CASES, caseId, NESTED_SUBCOLLECTIONS.NCII_CASE_BLOCKED_HASHES, hashId],\n\n nciiTemporaryHold: (holdId: string): [string, string] =>\n [COLLECTIONS.NCII_TEMPORARY_HOLDS, holdId],\n\n nciiRemovalJob: (jobId: string): [string, string] =>\n [COLLECTIONS.NCII_REMOVAL_JOBS, jobId],\n\n nciiRemovalTarget: (jobId: string, targetKeyHash: string): [string, string, string, string] =>\n [COLLECTIONS.NCII_REMOVAL_JOBS, jobId, NESTED_SUBCOLLECTIONS.NCII_REMOVAL_TARGETS, targetKeyHash],\n\n // ===== BACKEND-ONLY LEDGERS =====\n // Append-only audit ledger row (auditEvents/{eventId}).\n auditEvent: (eventId: string): [string, string] =>\n [COLLECTIONS.AUDIT_EVENTS, eventId],\n\n // The audit ledger collection (parent of auditEvent — the writer mints ids against it).\n auditEvents: (): [string] =>\n [COLLECTIONS.AUDIT_EVENTS],\n\n // Server-owned \"archive all\" job (notificationArchiveAllJobs/{jobId}; CF-only).\n notificationArchiveAllJob: (jobId: string): [string, string] =>\n [COLLECTIONS.NOTIFICATION_ARCHIVE_ALL_JOBS, jobId],\n\n // ===== TRUST & SAFETY — _serverData (server-only) singletons (§A7, §A11) =====\n // Moved from _appConfig (public) to _serverData (BACKEND-108 — Cloud-Functions-only readers).\n agePolicyConfig: (): [string, string] =>\n [COLLECTIONS.SERVER_DATA, SPECIAL_DOCS.AGE_POLICY],\n\n nciiPolicyConfig: (): [string, string] =>\n [COLLECTIONS.SERVER_DATA, SPECIAL_DOCS.NCII_POLICY],\n\n privilegedReviewerSecurityConfig: (): [string, string] =>\n [COLLECTIONS.SERVER_DATA, SPECIAL_DOCS.PRIVILEGED_REVIEWER_SECURITY],\n} as const;\n"]}
@@ -659,9 +659,7 @@ export declare const ReopenSafetyCaseInputSchema: z.ZodObject<{
659
659
  confirmation: z.ZodLiteral<"I confirm reopening this safety case">;
660
660
  }, z.core.$strict>;
661
661
  export type ReopenSafetyCaseInput = z.infer<typeof ReopenSafetyCaseInputSchema>;
662
- /** Every ledger the dead-letter replay callable supports. `hallSubItemEdgeSync`
663
- * rows live at a 4-segment nested path, so their docId IS the full document path
664
- * (the callable splits it); every other lane is the flat [collection, docId] tuple. */
662
+ /** Every ledger the dead-letter replay callable supports. */
665
663
  export declare const DeadLetterCollectionSchema: z.ZodEnum<{
666
664
  mediaAssets: "mediaAssets";
667
665
  chatSyncEvents: "chatSyncEvents";
@@ -678,7 +676,38 @@ export declare const DeadLetterCollectionSchema: z.ZodEnum<{
678
676
  hallSubItemEdgeSync: "hallSubItemEdgeSync";
679
677
  }>;
680
678
  export type DeadLetterCollection = z.infer<typeof DeadLetterCollectionSchema>;
681
- export declare const AdminReplayDeadLetterInputSchema: z.ZodObject<{
679
+ /** Every replay lane whose target is a flat top-level document. */
680
+ export declare const FlatDeadLetterCollectionSchema: z.ZodEnum<{
681
+ mediaAssets: "mediaAssets";
682
+ chatSyncEvents: "chatSyncEvents";
683
+ chatAdminActionCommands: "chatAdminActionCommands";
684
+ notificationDeliveries: "notificationDeliveries";
685
+ chatMessageOutbox: "chatMessageOutbox";
686
+ squareAnnouncementJobs: "squareAnnouncementJobs";
687
+ chatSyncFanoutJobs: "chatSyncFanoutJobs";
688
+ quarantineSagaJobs: "quarantineSagaJobs";
689
+ nciiRemovalJobs: "nciiRemovalJobs";
690
+ safetyEvidenceJobs: "safetyEvidenceJobs";
691
+ accountActionCommands: "accountActionCommands";
692
+ activeReportGroups: "activeReportGroups";
693
+ }>;
694
+ export type FlatDeadLetterCollection = z.infer<typeof FlatDeadLetterCollectionSchema>;
695
+ /**
696
+ * Canonical identity for a published Hall sub-item edge-sync replay target. The work type derives
697
+ * the only valid nested collection through PATH_BUILDERS.hallItemSubItem; callers never submit a
698
+ * Firestore path or collection segment.
699
+ */
700
+ export declare const HallSubItemEdgeSyncReplayTargetSchema: z.ZodObject<{
701
+ hallItemId: z.ZodString;
702
+ workProjectType: z.ZodEnum<{
703
+ Tales: "Tales";
704
+ Tunes: "Tunes";
705
+ Television: "Television";
706
+ }>;
707
+ subItemId: z.ZodString;
708
+ }, z.core.$strict>;
709
+ export type HallSubItemEdgeSyncReplayTarget = z.infer<typeof HallSubItemEdgeSyncReplayTargetSchema>;
710
+ export declare const AdminReplayDeadLetterInputSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
682
711
  collection: z.ZodEnum<{
683
712
  mediaAssets: "mediaAssets";
684
713
  chatSyncEvents: "chatSyncEvents";
@@ -692,12 +721,22 @@ export declare const AdminReplayDeadLetterInputSchema: z.ZodObject<{
692
721
  safetyEvidenceJobs: "safetyEvidenceJobs";
693
722
  accountActionCommands: "accountActionCommands";
694
723
  activeReportGroups: "activeReportGroups";
695
- hallSubItemEdgeSync: "hallSubItemEdgeSync";
696
724
  }>;
697
725
  docId: z.ZodString;
698
726
  reason: z.ZodString;
699
727
  dryRun: z.ZodOptional<z.ZodBoolean>;
700
- }, z.core.$strict>;
728
+ }, z.core.$strict>, z.ZodObject<{
729
+ reason: z.ZodString;
730
+ dryRun: z.ZodOptional<z.ZodBoolean>;
731
+ hallItemId: z.ZodString;
732
+ workProjectType: z.ZodEnum<{
733
+ Tales: "Tales";
734
+ Tunes: "Tunes";
735
+ Television: "Television";
736
+ }>;
737
+ subItemId: z.ZodString;
738
+ collection: z.ZodLiteral<"hallSubItemEdgeSync">;
739
+ }, z.core.$strict>], "collection">;
701
740
  export type AdminReplayDeadLetterInput = z.infer<typeof AdminReplayDeadLetterInputSchema>;
702
741
  export declare const GetDeadLettersInputSchema: z.ZodOptional<z.ZodNullable<z.ZodObject<{
703
742
  collection: z.ZodOptional<z.ZodEnum<{
@@ -1 +1 @@
1
- {"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../src/schemas/admin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../src/schemas/admin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAwDxB,eAAO,MAAM,oCAAoC,iCAAwB,CAAC;AAC1E,MAAM,MAAM,8BAA8B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oCAAoC,CAAC,CAAC;AAElG,eAAO,MAAM,8BAA8B;;kBAEhC,CAAC;AACZ,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAC;AAItF,eAAO,MAAM,wBAAwB;;;kBAG1B,CAAC;AACZ,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E;0CAC0C;AAC1C,eAAO,MAAM,2BAA2B;;;EAAiC,CAAC;AAC1E,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEhF,eAAO,MAAM,8BAA8B;;;;;;;;kBAKhC,CAAC;AACZ,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAC;AAGtF,eAAO,MAAM,+BAA+B;;;;;;;;;iBAW1C,CAAC;AACH,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;AAaxF,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;kBAE9B,CAAC;AACZ,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAyBlF,eAAO,MAAM,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAM/C,CAAC;AACF,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mCAAmC,CAAC,CAAC;AAmBhG,eAAO,MAAM,0BAA0B;;;;;;;;kBAE5B,CAAC;AACZ,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E,eAAO,MAAM,4BAA4B;;;;;;;;kBAE9B,CAAC;AACZ,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAElF,eAAO,MAAM,mCAAmC;;kBAQ/C,CAAC;AACF,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mCAAmC,CAAC,CAAC;AAIhG,eAAO,MAAM,0BAA0B;;;;;;;;;;kBAe5B,CAAC;AACZ,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAM9E;;;;;;;GAOG;AACH,eAAO,MAAM,0BAA0B;;;;;kBAepC,CAAC;AAEJ,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAK9E,eAAO,MAAM,2BAA2B;;;;;;;iBAUtC,CAAC;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAIhF,eAAO,MAAM,yBAAyB;;;kBAS3B,CAAC;AACZ,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E,eAAO,MAAM,mCAAmC;;kBAErC,CAAC;AACZ,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mCAAmC,CAAC,CAAC;AAKhG;;0DAE0D;AAC1D,eAAO,MAAM,uBAAuB;;;;iBAOlC,CAAC;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE;sFACsF;AACtF,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;iBAWnC,CAAC;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E,eAAO,MAAM,oCAAoC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA4C/C,CAAC;AACH,MAAM,MAAM,8BAA8B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oCAAoC,CAAC,CAAC;AAElG,eAAO,MAAM,0BAA0B;;;;;;;;;kBAK5B,CAAC;AACZ,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E,eAAO,MAAM,6BAA6B;;;;;;;;kBAI/B,CAAC;AACZ,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAEpF,eAAO,MAAM,0BAA0B;;;kBAG5B,CAAC;AACZ,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E,eAAO,MAAM,wBAAwB;;;kBAG1B,CAAC;AACZ,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAI1E,eAAO,MAAM,6BAA6B;;;kBAG/B,CAAC;AACZ,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAEpF,eAAO,MAAM,2BAA2B;;;kBAG7B,CAAC;AACZ,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAIhF,eAAO,MAAM,yBAAyB;;kBAE3B,CAAC;AACZ,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAM5E,QAAA,MAAM,+BAA+B;;;EAAuD,CAAC;AAC7F,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;AAExF,eAAO,MAAM,+BAA+B;;;;;;;kBAIjC,CAAC;AACZ,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;AAExF,eAAO,MAAM,6BAA6B;;;;;;;kBAI/B,CAAC;AACZ,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAIpF,QAAA,MAAM,oBAAoB;;;;EAA0C,CAAC;AACrE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;kBAMjC,CAAC;AACZ,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;AAIxF,eAAO,MAAM,+BAA+B;;;;;;kBAGjC,CAAC;AACZ,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;AAqBxF,eAAO,MAAM,kCAAkC;;;;;;;;;;;;;;;;;;;;;;kBAkB3C,CAAC;AACL,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAC;AAqE9F;4FAC4F;AAC5F,QAAA,MAAM,+BAA+B,kEAIa,CAAC;AACnD,MAAM,MAAM,0BAA0B,GAAG,CAAC,OAAO,+BAA+B,CAAC,CAAC,MAAM,CAAC,CAAC;AAW1F,QAAA,MAAM,2BAA2B;;;;;;EAAoC,CAAC;AACtE,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAwChF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8BAkC3B,CAAC;AACL,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAWzB,CAAC;AACZ,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAmC5E,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8BAejC,CAAC;AACL,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAgBvB,CAAC;AACZ,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,eAAO,MAAM,2BAA2B;;;;;;;;;kBAQ7B,CAAC;AACZ,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAMhF,6DAA6D;AAC7D,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;EAcrC,CAAC;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E,mEAAmE;AACnE,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;EAA8D,CAAC;AAC1G,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAC;AAEtF;;;;GAIG;AACH,eAAO,MAAM,qCAAqC;;;;;;;;kBAIvC,CAAC;AACZ,MAAM,MAAM,+BAA+B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qCAAqC,CAAC,CAAC;AAEpG,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kCAczC,CAAC;AACL,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gCAAgC,CAAC,CAAC;AAE1F,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;oBAQ1B,CAAC;AACb,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC"}
@@ -569,9 +569,7 @@ export const ReopenSafetyCaseInputSchema = z
569
569
  // ---------------------------------------------------------------------------
570
570
  // Dead-letter operations — adminReplayDeadLetter + getDeadLetters (Ops Repairs).
571
571
  // ---------------------------------------------------------------------------
572
- /** Every ledger the dead-letter replay callable supports. `hallSubItemEdgeSync`
573
- * rows live at a 4-segment nested path, so their docId IS the full document path
574
- * (the callable splits it); every other lane is the flat [collection, docId] tuple. */
572
+ /** Every ledger the dead-letter replay callable supports. */
575
573
  export const DeadLetterCollectionSchema = z.enum([
576
574
  'chatSyncEvents',
577
575
  'chatAdminActionCommands',
@@ -587,15 +585,33 @@ export const DeadLetterCollectionSchema = z.enum([
587
585
  'activeReportGroups',
588
586
  'hallSubItemEdgeSync',
589
587
  ]);
588
+ /** Every replay lane whose target is a flat top-level document. */
589
+ export const FlatDeadLetterCollectionSchema = DeadLetterCollectionSchema.exclude(['hallSubItemEdgeSync']);
590
+ /**
591
+ * Canonical identity for a published Hall sub-item edge-sync replay target. The work type derives
592
+ * the only valid nested collection through PATH_BUILDERS.hallItemSubItem; callers never submit a
593
+ * Firestore path or collection segment.
594
+ */
595
+ export const HallSubItemEdgeSyncReplayTargetSchema = z.object({
596
+ hallItemId: hallItemIdSchema,
597
+ workProjectType: workProjectTypeSchema,
598
+ subItemId: z.string().min(1),
599
+ }).strict();
590
600
  export const AdminReplayDeadLetterInputSchema = z
591
- .object({
592
- collection: DeadLetterCollectionSchema,
593
- // Structural id bound (hallSubItemEdgeSync docIds are full nested paths).
594
- docId: z.string().min(1).max(200),
595
- reason: z.string().min(1).max(MAX_INTERNAL_REASON_LENGTH),
596
- dryRun: z.boolean().optional(),
597
- })
598
- .strict();
601
+ .discriminatedUnion('collection', [
602
+ z.object({
603
+ collection: FlatDeadLetterCollectionSchema,
604
+ docId: z.string().min(1).max(200),
605
+ reason: z.string().min(1).max(MAX_INTERNAL_REASON_LENGTH),
606
+ dryRun: z.boolean().optional(),
607
+ }).strict(),
608
+ z.object({
609
+ collection: z.literal('hallSubItemEdgeSync'),
610
+ ...HallSubItemEdgeSyncReplayTargetSchema.shape,
611
+ reason: z.string().min(1).max(MAX_INTERNAL_REASON_LENGTH),
612
+ dryRun: z.boolean().optional(),
613
+ }).strict(),
614
+ ]);
599
615
  export const GetDeadLettersInputSchema = z
600
616
  .object({
601
617
  /** Restrict to one ledger; absent = all supported ledgers. */
@@ -1 +1 @@
1
- {"version":3,"file":"admin.js","sourceRoot":"","sources":["../../src/schemas/admin.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod';\nimport {\n violationIdSchema,\n taskIdSchema,\n workProjectIdSchema,\n hallItemIdSchema,\n workProjectTypeSchema,\n moderationClearableSurfaceSchema,\n} from './atoms.js';\nimport {\n ReportDispositionSchema,\n ReportDispositionReasonCodeSchema,\n refineReportDispositionReasonCode,\n refineReportDispositionEvidenceRefs,\n type ReportableItemType,\n} from '../doc-schemas/safety/foundation.js';\nimport {\n ChildSafetyAccountRoleSchema,\n ChildSafetyAccountSubjectDispositionSchema,\n} from '../doc-schemas/safety/case.js';\nimport {\n ContentMediaKindSchema,\n MediaServingStatusSchema,\n} from '../doc-schemas/media-assets.js';\nimport { MAX_MANIFEST_NCMEC_RECEIPTS } from '../doc-schemas/safety/evidence.js';\nimport {\n MODERATION_CLEARABLE_TEXT_FIELDS,\n HALL_CLEARABLE_TEXT_FIELD_NAMES,\n} from '../constants/business-content.js';\nimport {\n MAX_WORK_PROJECT_TITLE_LENGTH,\n MAX_ADMIN_DISPATCH_SUBJECT_LENGTH,\n MAX_ADMIN_DISPATCH_INITIAL_TEXT_LENGTH,\n MAX_INTERNAL_REASON_LENGTH,\n MAX_USER_FACING_REASON_LENGTH,\n MAX_SAFETY_RESOLUTION_SUMMARY_LENGTH,\n MAX_SAFETY_ADMIN_NOTE_LENGTH,\n MAX_FUTURE_PLAN_TITLE_LENGTH,\n MAX_FUTURE_PLAN_DESCRIPTION_LENGTH,\n MAX_PLATFORM_RULE_TITLE_LENGTH,\n MAX_PLATFORM_RULE_DESCRIPTION_LENGTH,\n MAX_AGREEMENT_POINT_LENGTH,\n MAX_CONTENT_PAGE_HEADING_LENGTH,\n MAX_CONTENT_PAGE_BODY_LENGTH,\n MAX_TAKE_IT_DOWN_COPY_LENGTH,\n MAX_MAINTENANCE_MESSAGE_LENGTH,\n MAX_ANNOUNCEMENT_MESSAGE_LENGTH,\n MAX_APPEAL_REVIEW_NOTES_LENGTH,\n MAX_REQUIRE_RETITLE_REASON_LENGTH,\n MAX_USER_FACING_REASON_DETAIL_LENGTH,\n} from '../constants/business.js';\nimport {\n SAFETY_ACTIONS_CONFIRMATION,\n SAFETY_CASE_REOPEN_CONFIRMATION,\n} from '../constants/safety-confirmation-phrases.js';\n\nexport const CheckoutNextImportantTaskInputSchema = z.object({}).strict();\nexport type CheckoutNextImportantTaskInput = z.infer<typeof CheckoutNextImportantTaskInputSchema>;\n\nexport const GetContentViolationInputSchema = z.object({\n violationId: violationIdSchema,\n}).strict();\nexport type GetContentViolationInput = z.infer<typeof GetContentViolationInputSchema>;\n\n// `taskType` was removed — the server derives it from the task doc; the client copy was\n// ignored (and forgeable). Callers pass only the task id + the extension window.\nexport const MarkWorkLaterInputSchema = z.object({\n taskId: taskIdSchema,\n extendHours: z.union([z.literal(24), z.literal(48)]),\n}).strict();\nexport type MarkWorkLaterInput = z.infer<typeof MarkWorkLaterInputSchema>;\n\n/** The two appeal-review decisions (ONE canonical declaration — shared by the review\n * input and its authoritative result). */\nexport const ContentAppealDecisionSchema = z.enum(['approved', 'denied']);\nexport type ContentAppealDecision = z.infer<typeof ContentAppealDecisionSchema>;\n\nexport const ReviewContentAppealInputSchema = z.object({\n violationId: violationIdSchema,\n taskId: taskIdSchema,\n decision: ContentAppealDecisionSchema,\n adminNotes: z.string().max(MAX_APPEAL_REVIEW_NOTES_LENGTH),\n}).strict();\nexport type ReviewContentAppealInput = z.infer<typeof ReviewContentAppealInputSchema>;\n\n// Authoritative result of reviewContentAppeal. Non-strict (server → client posture).\nexport const ReviewContentAppealResultSchema = z.object({\n success: z.literal(true),\n violationId: violationIdSchema,\n /** Echo of the requested decision (always known — it is the input). */\n decision: ContentAppealDecisionSchema,\n /** The appealing user's uid ('' on the orphaned-task cleanup path, where the\n * underlying violation was already gone and only the stale task was cleared). */\n userId: z.string(),\n /** Operation-receipt audit id — the `admin.contentAppealReviewed` event written in the same\n * transaction. Optional/additive so an older backend that omits it still type-checks. */\n auditEventId: z.string().min(1).optional(),\n});\nexport type ReviewContentAppealResult = z.infer<typeof ReviewContentAppealResultSchema>;\n\n// --- System-doc admin updates ---\n\nconst FuturePlanItemSchema = z.object({\n id: z.string().min(1).max(128),\n title: z.string().min(1).max(MAX_FUTURE_PLAN_TITLE_LENGTH),\n description: z.string().min(1).max(MAX_FUTURE_PLAN_DESCRIPTION_LENGTH),\n order: z.number().int().min(0),\n videoUrl: z.string().url().max(2048).optional(),\n mediaType: z.enum(['video', 'image', 'audio', 'other']).optional(),\n}).strict();\n\nexport const UpdateFuturePlansInputSchema = z.object({\n plans: z.array(FuturePlanItemSchema).max(200),\n}).strict();\nexport type UpdateFuturePlansInput = z.infer<typeof UpdateFuturePlansInputSchema>;\n\nconst RuleSchema = z.object({\n id: z.string().min(1).max(128),\n title: z.string().min(1).max(MAX_PLATFORM_RULE_TITLE_LENGTH),\n description: z.string().min(1).max(MAX_PLATFORM_RULE_DESCRIPTION_LENGTH),\n videoUrl: z.string().url().max(2048).optional(),\n group: z.enum(['generic', 'workProjectType', 'hallWingType', 'workRealm', 'merchandising']).optional(),\n subgroup: z.enum(['Tales', 'Tunes', 'Television', 'entertainment', 'educational', 'newsPolitical']).optional(),\n order: z.number().int().min(0),\n}).strict();\n\nconst AgreementCategorySchema = z.object({\n points: z.array(z.string().min(1).max(MAX_AGREEMENT_POINT_LENGTH)).max(200),\n videoUrl: z.string().url().max(2048).optional(),\n}).strict();\n\nconst AgreementsSchema = z.object({\n tales: AgreementCategorySchema.optional(),\n tunes: AgreementCategorySchema.optional(),\n television: AgreementCategorySchema.optional(),\n}).strict();\n\n// Partial update — admin UI may send only `rules` or only `agreements`.\n// Server merges. At least one field must be present.\nexport const UpdateRulesAndAgreementsInputSchema = z.object({\n rules: z.array(RuleSchema).max(500).optional(),\n agreements: AgreementsSchema.optional(),\n}).strict().refine(\n (data) => data.rules !== undefined || data.agreements !== undefined,\n { message: 'At least one of `rules` or `agreements` must be provided.' },\n);\nexport type UpdateRulesAndAgreementsInput = z.infer<typeof UpdateRulesAndAgreementsInputSchema>;\n\n// --- Content-pages migration (DJ ruling 2026-07-06): per-page update callables ---\n// One callable per page (never a `kind` discriminator): updateTermsPage /\n// updatePrivacyPage / updateTakeItDownPageCopy. The client NEVER sends `version`\n// — the server bumps it atomically on every save.\n\nconst ContentPageSectionInputSchema = z.object({\n id: z.string().min(1).max(128),\n heading: z.string().min(1).max(MAX_CONTENT_PAGE_HEADING_LENGTH),\n level: z.union([z.literal(1), z.literal(2)]),\n // Empty body is LEGAL: a bare divider heading (e.g. terms \"Part 1 — Our\n // Intention\") is real content. The input schema must accept everything the\n // stored ContentPageSectionSchema accepts, or a faithfully-seeded doc becomes\n // unsaveable in the admin editor (found by adversarial review 2026-07-06).\n body: z.string().max(MAX_CONTENT_PAGE_BODY_LENGTH),\n order: z.number().int().min(0),\n}).strict();\n\nexport const UpdateTermsPageInputSchema = z.object({\n sections: z.array(ContentPageSectionInputSchema).min(1).max(300),\n}).strict();\nexport type UpdateTermsPageInput = z.infer<typeof UpdateTermsPageInputSchema>;\n\nexport const UpdatePrivacyPageInputSchema = z.object({\n sections: z.array(ContentPageSectionInputSchema).min(1).max(300),\n}).strict();\nexport type UpdatePrivacyPageInput = z.infer<typeof UpdatePrivacyPageInputSchema>;\n\nexport const UpdateTakeItDownPageCopyInputSchema = z.object({\n strings: z.record(z.string().min(1).max(128), z.string().min(1).max(MAX_TAKE_IT_DOWN_COPY_LENGTH)),\n}).strict().refine(\n (data) => {\n const count = Object.keys(data.strings).length;\n return count >= 1 && count <= 200;\n },\n { message: 'strings must contain between 1 and 200 entries.' },\n);\nexport type UpdateTakeItDownPageCopyInput = z.infer<typeof UpdateTakeItDownPageCopyInputSchema>;\n\nconst AppConfigDocIdSchema = z.literal('app');\n\nexport const UpdateAppConfigInputSchema = z.object({\n docId: AppConfigDocIdSchema,\n data: z.object({\n appVersion: z.string().min(1).max(64).optional(),\n maintenanceMode: z.boolean().optional(),\n maintenanceMessage: z.string().max(MAX_MAINTENANCE_MESSAGE_LENGTH).optional(),\n registrationEnabled: z.boolean().optional(),\n // Announcement banner copy; '' clears the banner (empty = nothing renders).\n announcementMessage: z.string().max(MAX_ANNOUNCEMENT_MESSAGE_LENGTH).optional(),\n // Runtime abuse throttle: 0 < m <= 1 (tighten-only; 1 = no throttle).\n rateLimitMultiplier: z.number().gt(0).max(1).optional(),\n }).strict().refine(\n (d) => Object.keys(d).length > 0,\n { message: 'data must have at least one field' },\n ),\n}).strict();\nexport type UpdateAppConfigInput = z.infer<typeof UpdateAppConfigInputSchema>;\n\n// --- Admin list mutations ---\n\nconst uidSchema = z.string().min(1).max(128);\n\n/**\n * Wire input for the `updateAdminList` callable in ttt-prod.\n * Used to grant or revoke admin / jrAdmin status on `_systemData/adminList`.\n *\n * All four fields are optional arrays of UIDs. At least one must be non-empty.\n * The callable's core function rejects conflicting input (e.g. same UID in\n * both addAdmins and removeAdmins) with HttpsError invalid-argument.\n */\nexport const UpdateAdminListInputSchema = z.object({\n addAdmins: z.array(uidSchema).optional(),\n removeAdmins: z.array(uidSchema).optional(),\n addJrAdmins: z.array(uidSchema).optional(),\n removeJrAdmins: z.array(uidSchema).optional(),\n})\n .strict()\n .refine(\n (data) =>\n (data.addAdmins?.length ?? 0) +\n (data.removeAdmins?.length ?? 0) +\n (data.addJrAdmins?.length ?? 0) +\n (data.removeJrAdmins?.length ?? 0) >\n 0,\n { message: 'At least one of addAdmins/removeAdmins/addJrAdmins/removeJrAdmins must be non-empty.' },\n );\n\nexport type UpdateAdminListInput = z.infer<typeof UpdateAdminListInputSchema>;\n\n// Authoritative result of updateAdminList — the grant/revoke delta counts computed inside\n// the roster transaction (uids already in their target state are no-ops and not counted).\n// Non-strict (server → client result posture).\nexport const UpdateAdminListResultSchema = z.object({\n success: z.literal(true),\n adminsGranted: z.number().int().nonnegative(),\n adminsRevoked: z.number().int().nonnegative(),\n jrAdminsGranted: z.number().int().nonnegative(),\n jrAdminsRevoked: z.number().int().nonnegative(),\n /** Operation-receipt audit id — the `admin.systemRoleGranted` / `admin.systemRoleRevoked`\n * event(s) key off the same roster transaction. Optional/additive. (No single domain id: a\n * roster edit spans multiple uids, so only the audit id is a meaningful receipt handle.) */\n auditEventId: z.string().min(1).optional(),\n});\nexport type UpdateAdminListResult = z.infer<typeof UpdateAdminListResultSchema>;\n\n// --- Admin moderation: hide / restore / retitle content + Work/Realm objects ---\n\nexport const CheckTrademarkInputSchema = z.object({\n // Primary: the work project's title (franchise-level check).\n workTitle: z.string().min(1).max(MAX_WORK_PROJECT_TITLE_LENGTH),\n // Optional: the sub-item title (chapter, track, episode). Checked secondarily.\n // `.nullish()` (not `.optional()`): the Firebase callable client serializes an\n // undefined argument as JSON null, and the work-view caller passes\n // `subItemTitle: subItem?.title` which is undefined when the sub-item hasn't\n // loaded — that arrives here as null. A bare `.optional()` would 400 on it.\n subItemTitle: z.string().max(MAX_WORK_PROJECT_TITLE_LENGTH).nullish(),\n}).strict();\nexport type CheckTrademarkInput = z.infer<typeof CheckTrademarkInputSchema>;\n\nexport const GetReportedContentDetailInputSchema = z.object({\n reportGroupId: z.string().min(1),\n}).strict();\nexport type GetReportedContentDetailInput = z.infer<typeof GetReportedContentDetailInputSchema>;\n\n// --- getReportedContentDetail result (cross-boundary: produced by the callable in functions/,\n// consumed by the admin report work-view) ---\n\n/** One display-text field of the reported doc, labeled for the review panel. The server returns\n * EVERY configured non-empty text field for the item type (title, description, body, …) in\n * display order — never just the first non-empty one. */\nexport const ReportedTextFieldSchema = z.object({\n /** Raw doc field name (e.g. 'description', 'workingTitle'). */\n field: z.string().min(1),\n /** Human label the panel renders (e.g. 'Description', 'Title'). */\n label: z.string().min(1),\n /** Current live value, trimmed; empty fields are omitted from the array. */\n value: z.string().min(1),\n});\nexport type ReportedTextField = z.infer<typeof ReportedTextFieldSchema>;\n\n/** One media asset referenced by the reported content: id + kind + current serving state\n * (for click-to-reveal) + the server-derived variant key the reveal must request. */\nexport const ReportedMediaAssetSchema = z.object({\n mediaAssetId: z.string().min(1),\n mediaKind: ContentMediaKindSchema.nullable(),\n servingStatus: MediaServingStatusSchema.nullable(),\n /** The variant key the reveal must request for its single display render (image origins split\n * between 'full' and 'main'; video/audio are always 'main'). Null when the asset doc is\n * missing/variant-less. */\n displayVariantKey: z.string().nullable(),\n /** Human label of WHAT this asset is on the reported item (e.g. 'Square cover',\n * 'Track photo — <title>'). Null when the server cannot derive one. */\n label: z.string().nullable(),\n});\nexport type ReportedMediaAsset = z.infer<typeof ReportedMediaAssetSchema>;\n\nexport const GetReportedContentDetailResultSchema = z.object({\n itemType: z.string().min(1),\n reportedItemId: z.string().min(1),\n /** First non-empty display-text field (legacy single-field snapshot; textFields is the\n * complete labeled set). */\n textSnapshot: z.string().nullable(),\n textFields: z.array(ReportedTextFieldSchema),\n mediaAssets: z.array(ReportedMediaAssetSchema),\n /** Whether the reported doc is currently hidden (best-effort, doc-flag based). */\n isHidden: z.boolean().nullable(),\n /** The content owner / uploader uid, when derivable. */\n ownerUid: z.string().nullable(),\n /**\n * The canonical moderation-clearable SURFACE this reported doc actually IS, resolved\n * SERVER-side: `chapter` / `tuneTrack` / `televisionEpisode` for a hall sub-item (through\n * `HALL_CONTENT_SURFACES_BY_WORK_TYPE`, from the parent hall doc the callable already reads),\n * `workProject` / `workRealm` for the shells.\n *\n * Why the resolved surface and not the `workProjectType` it was resolved from: the surface is\n * what a consumer needs — `MODERATION_CLEARABLE_TEXT_FIELDS[clearableSurface]` is the exact\n * clearable field set, one canonical index with no re-derivation. Shipping the work-project type\n * instead would make every consumer redo the routing AND the detail-vs-sub-item branch, which is\n * precisely the hand-rolled duplication that map was created to end.\n *\n * What it fixes: the in-flow clear's field picker offered the hall-family UNION\n * (title/description/content) because the projection never said which surface the sub-item was —\n * so an operator could tick `description` on a Tale chapter (title/content) or `content` on a\n * Tune track (title/description), pass the wire refinement, and have the clear runner silently\n * drop it. The picker now offers only this surface's fields, and the resolve path re-checks\n * caller-supplied fields against the same set.\n *\n * `.nullish()`: absent on payloads produced before this field existed, and null when the\n * reported item is not a clearable text surface at all (a square post, a chat message, a\n * profile picture).\n */\n clearableSurface: moderationClearableSurfaceSchema.nullish(),\n /** The FROZEN report-time snapshot (captured at intake), so the operator sees what was\n * reported even if the author edited the live doc to evade. Null for older reports. */\n reportTimeSnapshot: z.object({\n capturedText: z.string().nullable(),\n capturedMediaAssetIds: z.array(z.string()),\n revision: z.number().nullable(),\n capturedAt: z.number().nullable(),\n }).nullable(),\n});\nexport type GetReportedContentDetailResult = z.infer<typeof GetReportedContentDetailResultSchema>;\n\nexport const HideHallSubItemInputSchema = z.object({\n hallItemId: hallItemIdSchema,\n workProjectType: workProjectTypeSchema,\n subItemId: z.string().min(1),\n reason: z.string().min(1),\n}).strict();\nexport type HideHallSubItemInput = z.infer<typeof HideHallSubItemInputSchema>;\n\nexport const RestoreHallSubItemInputSchema = z.object({\n hallItemId: hallItemIdSchema,\n workProjectType: workProjectTypeSchema,\n subItemId: z.string().min(1),\n}).strict();\nexport type RestoreHallSubItemInput = z.infer<typeof RestoreHallSubItemInputSchema>;\n\nexport const HideWorkProjectInputSchema = z.object({\n workProjectId: workProjectIdSchema,\n reason: z.string().min(1),\n}).strict();\nexport type HideWorkProjectInput = z.infer<typeof HideWorkProjectInputSchema>;\n\nexport const HideWorkRealmInputSchema = z.object({\n workRealmId: z.string().min(1),\n reason: z.string().min(1),\n}).strict();\nexport type HideWorkRealmInput = z.infer<typeof HideWorkRealmInputSchema>;\n\n// `cascadeId` is OPTIONAL: the app backends derive all active cascades for the target when it is\n// omitted, and restore just that one cascade when it is supplied.\nexport const RestoreWorkProjectInputSchema = z.object({\n workProjectId: workProjectIdSchema,\n cascadeId: z.string().min(1).optional(),\n}).strict();\nexport type RestoreWorkProjectInput = z.infer<typeof RestoreWorkProjectInputSchema>;\n\nexport const RestoreWorkRealmInputSchema = z.object({\n workRealmId: z.string().min(1),\n cascadeId: z.string().min(1).optional(),\n}).strict();\nexport type RestoreWorkRealmInput = z.infer<typeof RestoreWorkRealmInputSchema>;\n\n// The `requireWorkProjectRetitle` / `requireWorkRealmRetitle` callables share this base\n// `{ reason }` shape and each `.extend(...)` it with its own id field at parse time.\nexport const RequireRetitleInputSchema = z.object({\n reason: z.string().min(1).max(MAX_REQUIRE_RETITLE_REASON_LENGTH),\n}).strict();\nexport type RequireRetitleInput = z.infer<typeof RequireRetitleInputSchema>;\n\n// --- Page-level \"Clear text (moderation)\" callables (per-field extension of the retitle family) ---\n\n// The clearable SHELL fields (raw doc field names) for the workProject + workRealm contexts.\n// Derived from the canonical clearable-field map — the two shell surfaces share the same fields.\nconst ModerationShellClearFieldSchema = z.enum(MODERATION_CLEARABLE_TEXT_FIELDS.workProject);\nexport type ModerationShellClearField = z.infer<typeof ModerationShellClearFieldSchema>;\n\nexport const ClearWorkProjectTextInputSchema = z.object({\n workProjectId: workProjectIdSchema,\n fields: z.array(ModerationShellClearFieldSchema).min(1),\n reason: z.string().trim().min(1).max(MAX_REQUIRE_RETITLE_REASON_LENGTH),\n}).strict();\nexport type ClearWorkProjectTextInput = z.infer<typeof ClearWorkProjectTextInputSchema>;\n\nexport const ClearWorkRealmTextInputSchema = z.object({\n workRealmId: z.string().min(1),\n fields: z.array(ModerationShellClearFieldSchema).min(1),\n reason: z.string().trim().min(1).max(MAX_REQUIRE_RETITLE_REASON_LENGTH),\n}).strict();\nexport type ClearWorkRealmTextInput = z.infer<typeof ClearWorkRealmTextInputSchema>;\n\n// The clearable TEXT fields across the whole hall content family — derived from the canonical\n// map (union of every hall surface's fields), never restated literals.\nconst HallClearFieldSchema = z.enum(HALL_CLEARABLE_TEXT_FIELD_NAMES);\nexport type HallClearField = z.infer<typeof HallClearFieldSchema>;\n\nexport const ClearHallContentTextInputSchema = z.object({\n hallItemId: hallItemIdSchema,\n workProjectType: workProjectTypeSchema,\n subItemId: z.string().min(1).optional(),\n fields: z.array(HallClearFieldSchema).min(1),\n reason: z.string().trim().min(1).max(MAX_REQUIRE_RETITLE_REASON_LENGTH),\n}).strict();\nexport type ClearHallContentTextInput = z.infer<typeof ClearHallContentTextInputSchema>;\n\n// --- getLatestHideCascade — resolve the latest hide-cascade id for a Work/Realm ---\n\nexport const GetLatestHideCascadeInputSchema = z.object({\n entityId: z.string().min(1),\n targetType: z.enum(['work-project', 'work-realm']),\n}).strict();\nexport type GetLatestHideCascadeInput = z.infer<typeof GetLatestHideCascadeInputSchema>;\n\n// --- moderateReportedContent — hide / restore / soft perma-remove an individual reported item ---\n\n// The single-item content-action target set (SUBSET of ReportableItemType — excludes the\n// close-out-only hall-library-sub-item).\nconst MODERATE_REPORTED_CONTENT_TARGET_TYPES = [\n 'square-streetz-post',\n 'audition',\n 'audition-entry',\n 'commission-listing',\n 'commission-proposal',\n 'work-asset',\n 'profile-picture',\n 'hall-library-item',\n 'craft-skill',\n // Conversation File — the hide/restore/remove action targets the file owner record +\n // its mediaAsset (the `work-asset` shape), never a chat message.\n 'conversation-file',\n] as const satisfies readonly ReportableItemType[];\n\nexport const ModerateReportedContentInputSchema = z.object({\n reportGroupId: z.string().min(1),\n targetType: z.enum(MODERATE_REPORTED_CONTENT_TARGET_TYPES),\n reportedItemId: z.string().min(1),\n parentItemId: z.string().min(1).optional(),\n action: z.enum(['hide', 'restore', 'remove']),\n // [EUAS-023] A destructive action (hide/remove) MUST carry a reason; restore is a reversal.\n reason: z.string().trim().min(1).max(MAX_INTERNAL_REASON_LENGTH).optional(),\n})\n .strict()\n .superRefine((val, ctx) => {\n if ((val.action === 'hide' || val.action === 'remove') && !val.reason) {\n ctx.addIssue({\n code: 'custom',\n message: 'A reason is required to hide or remove content.',\n path: ['reason'],\n });\n }\n });\nexport type ModerateReportedContentInput = z.infer<typeof ModerateReportedContentInputSchema>;\n\n// --- resolveAdminTask — the ONE guided close-out for EVERY admin case type ---\n\n// [EUAS-005] The content-action target set ALSO accepts hall-library-sub-item (hide/restore only),\n// which routes to the dedicated `runSetHallSubItemHidden` core (not `runModerateReportedContent`).\nconst CONTENT_ACTION_TARGET_TYPES = [\n 'square-streetz-post',\n 'audition',\n 'audition-entry',\n 'commission-listing',\n 'commission-proposal',\n 'work-asset',\n 'profile-picture',\n 'hall-library-item',\n 'craft-skill',\n 'hall-library-sub-item',\n // Conversation File — same content action as `work-asset`, routed at the file record.\n 'conversation-file',\n] as const satisfies readonly ReportableItemType[];\n\nconst ContentActionSchema = z\n .object({\n button: z.enum(['hideContent', 'restoreContent', 'permaRemoveContent']),\n targetType: z.enum(CONTENT_ACTION_TARGET_TYPES),\n reportedItemId: z.string().min(1),\n parentItemId: z.string().min(1).optional(),\n })\n .strict();\n\nconst WarnUserSchema = z\n .object({\n button: z.literal('warnUser'),\n userId: z.string().min(1),\n // A warning IS an admin dispatch (resolveAdminTask → runCreateAdminDispatchToUser),\n // so it shares the dispatch subject/body caps.\n subject: z.string().trim().min(1).max(MAX_ADMIN_DISPATCH_SUBJECT_LENGTH),\n message: z.string().trim().min(1).max(MAX_ADMIN_DISPATCH_INITIAL_TEXT_LENGTH),\n })\n .strict();\n\nconst SuspendOrBanSchema = z\n .object({\n button: z.enum(['suspendUser', 'banUser']),\n userId: z.string().min(1),\n reason: z.string().trim().min(1).max(MAX_INTERNAL_REASON_LENGTH),\n })\n .strict();\n\nconst ReinstateUserSchema = z\n .object({ button: z.literal('reinstateUser'), userId: z.string().min(1), reason: z.string().trim().max(MAX_INTERNAL_REASON_LENGTH).optional() })\n .strict();\n\nconst ForceUsernameResetSchema = z\n .object({ button: z.literal('forceUsernameReset'), userId: z.string().min(1), reason: z.string().trim().min(1).max(MAX_INTERNAL_REASON_LENGTH).optional() })\n .strict();\n\n/** Whole-object Work/Realm remedies — `reportedItemId` is the workProjectId / workRealmId. */\nconst WorkObjectActionSchema = z\n .object({\n button: z.enum(['hideWorkObject', 'restoreWorkObject', 'forceRetitle']),\n targetType: z.enum(['work-project', 'work-realm']),\n reportedItemId: z.string().min(1),\n })\n .strict();\n\n// --- The in-flow clear-content disposition (staged counterpart of the page-level clear-text\n// callables) ---\n\n/** The three targets the in-flow text clear can neutralize — the Work/Realm shells plus a single\n * published hall sub-item. Compile-linked subset of the canonical reportable-item enum. */\nconst CLEAR_CONTENT_TEXT_TARGET_TYPES = [\n 'work-project',\n 'work-realm',\n 'hall-library-sub-item',\n] as const satisfies readonly ReportableItemType[];\nexport type ClearContentTextTargetType = (typeof CLEAR_CONTENT_TEXT_TARGET_TYPES)[number];\n\n/** Every field name the staged clear can carry across those three targets — the union of the two\n * canonical clearable owners (`MODERATION_CLEARABLE_TEXT_FIELDS` for the shells,\n * `HALL_CLEARABLE_TEXT_FIELD_NAMES` for the hall family), i.e. the same two sources\n * `ClearWorkProjectTextInputSchema` / `ClearHallContentTextInputSchema` derive from. No field\n * literal is restated here. */\nconst CLEAR_CONTENT_TEXT_FIELDS = [\n ...MODERATION_CLEARABLE_TEXT_FIELDS.workProject,\n ...HALL_CLEARABLE_TEXT_FIELD_NAMES,\n] as const;\nconst ClearContentTextFieldSchema = z.enum(CLEAR_CONTENT_TEXT_FIELDS);\nexport type ClearContentTextField = z.infer<typeof ClearContentTextFieldSchema>;\n\n/** Which fields each target legally accepts — projected from those same owners, so a\n * target/field mismatch is refused at the wire instead of reaching a clear runner that would\n * drop it. Enforced by the cross-field refinement on `StagedActionSchema` below. */\nconst CLEAR_CONTENT_TEXT_FIELDS_BY_TARGET = {\n 'work-project': MODERATION_CLEARABLE_TEXT_FIELDS.workProject,\n 'work-realm': MODERATION_CLEARABLE_TEXT_FIELDS.workRealm,\n 'hall-library-sub-item': HALL_CLEARABLE_TEXT_FIELD_NAMES,\n} as const satisfies Record<ClearContentTextTargetType, readonly ClearContentTextField[]>;\n\n/** Per-field text clear — the guided close-out's staged counterpart of the page-level\n * `clearWorkProjectText` / `clearWorkRealmText` / `clearHallContentText` callables (the\n * per-field extension of `forceRetitle`). `reportedItemId` is the workProjectId / workRealmId /\n * sub-item id; `parentItemId` is the parent hall item id, required only for the sub-item target.\n * `workProjectType` is deliberately NOT on the wire — the server re-reads it from the doc (the\n * hall hide-branch precedent). */\nconst ClearContentTextActionSchema = z\n .object({\n button: z.literal('clearContentText'),\n targetType: z.enum(CLEAR_CONTENT_TEXT_TARGET_TYPES),\n reportedItemId: z.string().min(1),\n parentItemId: z.string().min(1).optional(),\n fields: z.array(ClearContentTextFieldSchema).min(1),\n })\n .strict();\n\n/** Chat message tombstone — channel + seq from the report, revision from the live thread-read. */\nconst TombstoneChatSchema = z\n .object({\n button: z.literal('tombstoneChat'),\n channel: z.discriminatedUnion('kind', [\n z.object({ kind: z.literal('channel'), workProjectId: z.string().min(1), guildChatChannelId: z.string().min(1) }).strict(),\n z.object({ kind: z.literal('invite'), guildInviteId: z.string().min(1) }).strict(),\n ]),\n messageSeq: z.number().int().nonnegative(),\n expectedMessageRevision: z.number().int().nonnegative(),\n })\n .strict();\n\nexport const StagedActionSchema = z\n .discriminatedUnion('button', [\n ContentActionSchema,\n WarnUserSchema,\n SuspendOrBanSchema,\n ReinstateUserSchema,\n ForceUsernameResetSchema,\n WorkObjectActionSchema,\n ClearContentTextActionSchema,\n TombstoneChatSchema,\n ])\n // The clearContentText arm's two cross-field rules, applied at the union (the\n // SafetyStagedActionSchema pattern below) because no other arm carries these fields:\n // every chosen field must belong to the chosen target's canonical clearable set, and the\n // hall sub-item target must name its parent hall item.\n .superRefine((value, ctx) => {\n if (value.button !== 'clearContentText') return;\n const clearable: readonly string[] = CLEAR_CONTENT_TEXT_FIELDS_BY_TARGET[value.targetType];\n value.fields.forEach((field, index) => {\n if (!clearable.includes(field)) {\n ctx.addIssue({\n code: 'custom',\n message: `Field '${field}' is not clearable on a '${value.targetType}' target.`,\n path: ['fields', index],\n });\n }\n });\n if (value.targetType === 'hall-library-sub-item' && !value.parentItemId) {\n ctx.addIssue({\n code: 'custom',\n message: 'parentItemId (the parent hall item id) is required for a hall sub-item target.',\n path: ['parentItemId'],\n });\n }\n });\nexport type StagedAction = z.infer<typeof StagedActionSchema>;\n\nexport const NormalReportInputSchema = z\n .object({\n caseType: z.literal('normalReport').default('normalReport'),\n taskId: z.string().min(1),\n outcome: z.enum(['founded', 'unfounded']),\n resolutionSummary: z.string().trim().min(1).max(MAX_SAFETY_RESOLUTION_SUMMARY_LENGTH),\n actions: z.array(StagedActionSchema).max(16).default([]),\n userFacingReasonCode: z.string().trim().min(1).max(128).optional(),\n userFacingReasonDetail: z.string().trim().max(MAX_USER_FACING_REASON_DETAIL_LENGTH).optional(),\n adminNote: z.string().trim().max(MAX_SAFETY_ADMIN_NOTE_LENGTH).optional(),\n })\n .strict();\nexport type ResolveAdminTaskInput = z.infer<typeof NormalReportInputSchema>;\n\nconst SafetyDispositionActionSchema = z\n .object({\n button: z.literal('setReportDisposition'),\n // Derived from the ONE canonical disposition enum — 'undetermined' is the initial\n // state, never an operator-settable target, so it is excluded (not re-declared).\n disposition: ReportDispositionSchema.exclude(['undetermined']),\n dispositionReasonCode: ReportDispositionReasonCodeSchema,\n // Derived from the ONE receipts-cap constant (doc-schemas/safety/evidence.ts) — the same\n // bound the callable + the embedded SetReportDispositionInputV1Schema use. No field-level min:\n // the reportRequired⇒non-empty rule lives in the shared cross-field refinement below, so every\n // other disposition may legally stage this action with no evidence revealed.\n evidenceRefs: z.array(z.string().min(1)).max(MAX_MANIFEST_NCMEC_RECEIPTS),\n expectedRevision: z.number().int().nonnegative(),\n })\n .strict();\n\nconst QuarantineActionSchema = z.object({ button: z.literal('quarantinePreserveFile') }).strict();\n\n// [C-01/EUAS-002] No client-supplied requestId — the linked statutory request id(s) are derived\n// SERVER-SIDE from the case's `requestLinks` inside `enqueueNciiRemovalForCase`.\nconst HashRemoveActionSchema = z.object({ button: z.literal('hashRemoveFile') }).strict();\n\nconst SafetyAccountActionSchema = z\n .object({\n button: z.enum(['suspendUser', 'banUser', 'reinstateUser']),\n targetUid: z.string().min(1),\n reasonInternal: z.string().trim().min(4).max(MAX_INTERNAL_REASON_LENGTH),\n reasonUserFacing: z.string().trim().min(1).max(MAX_USER_FACING_REASON_LENGTH),\n role: ChildSafetyAccountRoleSchema,\n subjectDisposition: ChildSafetyAccountSubjectDispositionSchema,\n })\n .strict();\n\nexport const SafetyStagedActionSchema = z\n .discriminatedUnion('button', [\n SafetyDispositionActionSchema,\n QuarantineActionSchema,\n HashRemoveActionSchema,\n SafetyAccountActionSchema,\n ])\n // The setReportDisposition arm reuses the ONE canonical cross-field rules (foundation.ts) via the\n // shared refinements — never re-declaring them here: the disposition↔reason pairing AND the\n // reportRequired⇒evidence-present rule. Other arms carry no such fields.\n .superRefine((value, ctx) => {\n if (value.button === 'setReportDisposition') {\n refineReportDispositionReasonCode(value, ctx);\n refineReportDispositionEvidenceRefs(value, ctx);\n }\n });\nexport type SafetyStagedAction = z.infer<typeof SafetyStagedActionSchema>;\n\nexport const SafetyCaseInputSchema = z\n .object({\n caseType: z.enum(['csam', 'ncii']),\n caseId: z.string().min(1),\n outcome: z.enum(['founded', 'unfounded']),\n resolutionSummary: z.string().trim().min(1).max(MAX_SAFETY_RESOLUTION_SUMMARY_LENGTH),\n actions: z.array(SafetyStagedActionSchema).max(16).default([]),\n adminNote: z.string().trim().max(MAX_SAFETY_ADMIN_NOTE_LENGTH).optional(),\n // [EUAS-017] Optimistic-concurrency token (`childSafetyCaseList.revision` / `nciiCases.revision`).\n // The close is rejected if the case changed since the operator loaded it — concurrent stale closes\n // can't silently overwrite. Optional for backward compatibility; the console always supplies it.\n expectedRevision: z.number().int().nonnegative().optional(),\n // Interim reauth: a single explicit typed confirmation for the privileged safety actions,\n // standing in for the passkey two-step until [H-17]. The callable is full-admin gated.\n confirmation: z.literal(SAFETY_ACTIONS_CONFIRMATION),\n })\n .strict();\nexport type SafetyCaseInput = z.infer<typeof SafetyCaseInputSchema>;\n\nexport const ReopenSafetyCaseInputSchema = z\n .object({\n caseType: z.enum(['csam', 'ncii']),\n caseId: z.string().min(1),\n reasonInternal: z.string().trim().min(4).max(MAX_INTERNAL_REASON_LENGTH),\n expectedRevision: z.number().int().nonnegative().optional(),\n confirmation: z.literal(SAFETY_CASE_REOPEN_CONFIRMATION),\n })\n .strict();\nexport type ReopenSafetyCaseInput = z.infer<typeof ReopenSafetyCaseInputSchema>;\n\n// ---------------------------------------------------------------------------\n// Dead-letter operations — adminReplayDeadLetter + getDeadLetters (Ops Repairs).\n// ---------------------------------------------------------------------------\n\n/** Every ledger the dead-letter replay callable supports. `hallSubItemEdgeSync`\n * rows live at a 4-segment nested path, so their docId IS the full document path\n * (the callable splits it); every other lane is the flat [collection, docId] tuple. */\nexport const DeadLetterCollectionSchema = z.enum([\n 'chatSyncEvents',\n 'chatAdminActionCommands',\n 'notificationDeliveries',\n 'chatMessageOutbox',\n 'squareAnnouncementJobs',\n 'chatSyncFanoutJobs',\n 'mediaAssets',\n 'quarantineSagaJobs',\n 'nciiRemovalJobs',\n 'safetyEvidenceJobs',\n 'accountActionCommands',\n 'activeReportGroups',\n 'hallSubItemEdgeSync',\n]);\nexport type DeadLetterCollection = z.infer<typeof DeadLetterCollectionSchema>;\n\nexport const AdminReplayDeadLetterInputSchema = z\n .object({\n collection: DeadLetterCollectionSchema,\n // Structural id bound (hallSubItemEdgeSync docIds are full nested paths).\n docId: z.string().min(1).max(200),\n reason: z.string().min(1).max(MAX_INTERNAL_REASON_LENGTH),\n dryRun: z.boolean().optional(),\n })\n .strict();\nexport type AdminReplayDeadLetterInput = z.infer<typeof AdminReplayDeadLetterInputSchema>;\n\nexport const GetDeadLettersInputSchema = z\n .object({\n /** Restrict to one ledger; absent = all supported ledgers. */\n collection: DeadLetterCollectionSchema.optional(),\n /** Per-ledger row cap (the callable's own ceiling applies regardless). */\n limit: z.number().int().min(1).max(200).optional(),\n })\n .strict()\n .nullish();\nexport type GetDeadLettersInput = z.infer<typeof GetDeadLettersInputSchema>;\n\n\n"]}
1
+ {"version":3,"file":"admin.js","sourceRoot":"","sources":["../../src/schemas/admin.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod';\nimport {\n violationIdSchema,\n taskIdSchema,\n workProjectIdSchema,\n hallItemIdSchema,\n workProjectTypeSchema,\n moderationClearableSurfaceSchema,\n} from './atoms.js';\nimport {\n ReportDispositionSchema,\n ReportDispositionReasonCodeSchema,\n refineReportDispositionReasonCode,\n refineReportDispositionEvidenceRefs,\n type ReportableItemType,\n} from '../doc-schemas/safety/foundation.js';\nimport {\n ChildSafetyAccountRoleSchema,\n ChildSafetyAccountSubjectDispositionSchema,\n} from '../doc-schemas/safety/case.js';\nimport {\n ContentMediaKindSchema,\n MediaServingStatusSchema,\n} from '../doc-schemas/media-assets.js';\nimport { MAX_MANIFEST_NCMEC_RECEIPTS } from '../doc-schemas/safety/evidence.js';\nimport {\n MODERATION_CLEARABLE_TEXT_FIELDS,\n HALL_CLEARABLE_TEXT_FIELD_NAMES,\n} from '../constants/business-content.js';\nimport {\n MAX_WORK_PROJECT_TITLE_LENGTH,\n MAX_ADMIN_DISPATCH_SUBJECT_LENGTH,\n MAX_ADMIN_DISPATCH_INITIAL_TEXT_LENGTH,\n MAX_INTERNAL_REASON_LENGTH,\n MAX_USER_FACING_REASON_LENGTH,\n MAX_SAFETY_RESOLUTION_SUMMARY_LENGTH,\n MAX_SAFETY_ADMIN_NOTE_LENGTH,\n MAX_FUTURE_PLAN_TITLE_LENGTH,\n MAX_FUTURE_PLAN_DESCRIPTION_LENGTH,\n MAX_PLATFORM_RULE_TITLE_LENGTH,\n MAX_PLATFORM_RULE_DESCRIPTION_LENGTH,\n MAX_AGREEMENT_POINT_LENGTH,\n MAX_CONTENT_PAGE_HEADING_LENGTH,\n MAX_CONTENT_PAGE_BODY_LENGTH,\n MAX_TAKE_IT_DOWN_COPY_LENGTH,\n MAX_MAINTENANCE_MESSAGE_LENGTH,\n MAX_ANNOUNCEMENT_MESSAGE_LENGTH,\n MAX_APPEAL_REVIEW_NOTES_LENGTH,\n MAX_REQUIRE_RETITLE_REASON_LENGTH,\n MAX_USER_FACING_REASON_DETAIL_LENGTH,\n} from '../constants/business.js';\nimport {\n SAFETY_ACTIONS_CONFIRMATION,\n SAFETY_CASE_REOPEN_CONFIRMATION,\n} from '../constants/safety-confirmation-phrases.js';\n\nexport const CheckoutNextImportantTaskInputSchema = z.object({}).strict();\nexport type CheckoutNextImportantTaskInput = z.infer<typeof CheckoutNextImportantTaskInputSchema>;\n\nexport const GetContentViolationInputSchema = z.object({\n violationId: violationIdSchema,\n}).strict();\nexport type GetContentViolationInput = z.infer<typeof GetContentViolationInputSchema>;\n\n// `taskType` was removed — the server derives it from the task doc; the client copy was\n// ignored (and forgeable). Callers pass only the task id + the extension window.\nexport const MarkWorkLaterInputSchema = z.object({\n taskId: taskIdSchema,\n extendHours: z.union([z.literal(24), z.literal(48)]),\n}).strict();\nexport type MarkWorkLaterInput = z.infer<typeof MarkWorkLaterInputSchema>;\n\n/** The two appeal-review decisions (ONE canonical declaration — shared by the review\n * input and its authoritative result). */\nexport const ContentAppealDecisionSchema = z.enum(['approved', 'denied']);\nexport type ContentAppealDecision = z.infer<typeof ContentAppealDecisionSchema>;\n\nexport const ReviewContentAppealInputSchema = z.object({\n violationId: violationIdSchema,\n taskId: taskIdSchema,\n decision: ContentAppealDecisionSchema,\n adminNotes: z.string().max(MAX_APPEAL_REVIEW_NOTES_LENGTH),\n}).strict();\nexport type ReviewContentAppealInput = z.infer<typeof ReviewContentAppealInputSchema>;\n\n// Authoritative result of reviewContentAppeal. Non-strict (server → client posture).\nexport const ReviewContentAppealResultSchema = z.object({\n success: z.literal(true),\n violationId: violationIdSchema,\n /** Echo of the requested decision (always known — it is the input). */\n decision: ContentAppealDecisionSchema,\n /** The appealing user's uid ('' on the orphaned-task cleanup path, where the\n * underlying violation was already gone and only the stale task was cleared). */\n userId: z.string(),\n /** Operation-receipt audit id — the `admin.contentAppealReviewed` event written in the same\n * transaction. Optional/additive so an older backend that omits it still type-checks. */\n auditEventId: z.string().min(1).optional(),\n});\nexport type ReviewContentAppealResult = z.infer<typeof ReviewContentAppealResultSchema>;\n\n// --- System-doc admin updates ---\n\nconst FuturePlanItemSchema = z.object({\n id: z.string().min(1).max(128),\n title: z.string().min(1).max(MAX_FUTURE_PLAN_TITLE_LENGTH),\n description: z.string().min(1).max(MAX_FUTURE_PLAN_DESCRIPTION_LENGTH),\n order: z.number().int().min(0),\n videoUrl: z.string().url().max(2048).optional(),\n mediaType: z.enum(['video', 'image', 'audio', 'other']).optional(),\n}).strict();\n\nexport const UpdateFuturePlansInputSchema = z.object({\n plans: z.array(FuturePlanItemSchema).max(200),\n}).strict();\nexport type UpdateFuturePlansInput = z.infer<typeof UpdateFuturePlansInputSchema>;\n\nconst RuleSchema = z.object({\n id: z.string().min(1).max(128),\n title: z.string().min(1).max(MAX_PLATFORM_RULE_TITLE_LENGTH),\n description: z.string().min(1).max(MAX_PLATFORM_RULE_DESCRIPTION_LENGTH),\n videoUrl: z.string().url().max(2048).optional(),\n group: z.enum(['generic', 'workProjectType', 'hallWingType', 'workRealm', 'merchandising']).optional(),\n subgroup: z.enum(['Tales', 'Tunes', 'Television', 'entertainment', 'educational', 'newsPolitical']).optional(),\n order: z.number().int().min(0),\n}).strict();\n\nconst AgreementCategorySchema = z.object({\n points: z.array(z.string().min(1).max(MAX_AGREEMENT_POINT_LENGTH)).max(200),\n videoUrl: z.string().url().max(2048).optional(),\n}).strict();\n\nconst AgreementsSchema = z.object({\n tales: AgreementCategorySchema.optional(),\n tunes: AgreementCategorySchema.optional(),\n television: AgreementCategorySchema.optional(),\n}).strict();\n\n// Partial update — admin UI may send only `rules` or only `agreements`.\n// Server merges. At least one field must be present.\nexport const UpdateRulesAndAgreementsInputSchema = z.object({\n rules: z.array(RuleSchema).max(500).optional(),\n agreements: AgreementsSchema.optional(),\n}).strict().refine(\n (data) => data.rules !== undefined || data.agreements !== undefined,\n { message: 'At least one of `rules` or `agreements` must be provided.' },\n);\nexport type UpdateRulesAndAgreementsInput = z.infer<typeof UpdateRulesAndAgreementsInputSchema>;\n\n// --- Content-pages migration (DJ ruling 2026-07-06): per-page update callables ---\n// One callable per page (never a `kind` discriminator): updateTermsPage /\n// updatePrivacyPage / updateTakeItDownPageCopy. The client NEVER sends `version`\n// — the server bumps it atomically on every save.\n\nconst ContentPageSectionInputSchema = z.object({\n id: z.string().min(1).max(128),\n heading: z.string().min(1).max(MAX_CONTENT_PAGE_HEADING_LENGTH),\n level: z.union([z.literal(1), z.literal(2)]),\n // Empty body is LEGAL: a bare divider heading (e.g. terms \"Part 1 — Our\n // Intention\") is real content. The input schema must accept everything the\n // stored ContentPageSectionSchema accepts, or a faithfully-seeded doc becomes\n // unsaveable in the admin editor (found by adversarial review 2026-07-06).\n body: z.string().max(MAX_CONTENT_PAGE_BODY_LENGTH),\n order: z.number().int().min(0),\n}).strict();\n\nexport const UpdateTermsPageInputSchema = z.object({\n sections: z.array(ContentPageSectionInputSchema).min(1).max(300),\n}).strict();\nexport type UpdateTermsPageInput = z.infer<typeof UpdateTermsPageInputSchema>;\n\nexport const UpdatePrivacyPageInputSchema = z.object({\n sections: z.array(ContentPageSectionInputSchema).min(1).max(300),\n}).strict();\nexport type UpdatePrivacyPageInput = z.infer<typeof UpdatePrivacyPageInputSchema>;\n\nexport const UpdateTakeItDownPageCopyInputSchema = z.object({\n strings: z.record(z.string().min(1).max(128), z.string().min(1).max(MAX_TAKE_IT_DOWN_COPY_LENGTH)),\n}).strict().refine(\n (data) => {\n const count = Object.keys(data.strings).length;\n return count >= 1 && count <= 200;\n },\n { message: 'strings must contain between 1 and 200 entries.' },\n);\nexport type UpdateTakeItDownPageCopyInput = z.infer<typeof UpdateTakeItDownPageCopyInputSchema>;\n\nconst AppConfigDocIdSchema = z.literal('app');\n\nexport const UpdateAppConfigInputSchema = z.object({\n docId: AppConfigDocIdSchema,\n data: z.object({\n appVersion: z.string().min(1).max(64).optional(),\n maintenanceMode: z.boolean().optional(),\n maintenanceMessage: z.string().max(MAX_MAINTENANCE_MESSAGE_LENGTH).optional(),\n registrationEnabled: z.boolean().optional(),\n // Announcement banner copy; '' clears the banner (empty = nothing renders).\n announcementMessage: z.string().max(MAX_ANNOUNCEMENT_MESSAGE_LENGTH).optional(),\n // Runtime abuse throttle: 0 < m <= 1 (tighten-only; 1 = no throttle).\n rateLimitMultiplier: z.number().gt(0).max(1).optional(),\n }).strict().refine(\n (d) => Object.keys(d).length > 0,\n { message: 'data must have at least one field' },\n ),\n}).strict();\nexport type UpdateAppConfigInput = z.infer<typeof UpdateAppConfigInputSchema>;\n\n// --- Admin list mutations ---\n\nconst uidSchema = z.string().min(1).max(128);\n\n/**\n * Wire input for the `updateAdminList` callable in ttt-prod.\n * Used to grant or revoke admin / jrAdmin status on `_systemData/adminList`.\n *\n * All four fields are optional arrays of UIDs. At least one must be non-empty.\n * The callable's core function rejects conflicting input (e.g. same UID in\n * both addAdmins and removeAdmins) with HttpsError invalid-argument.\n */\nexport const UpdateAdminListInputSchema = z.object({\n addAdmins: z.array(uidSchema).optional(),\n removeAdmins: z.array(uidSchema).optional(),\n addJrAdmins: z.array(uidSchema).optional(),\n removeJrAdmins: z.array(uidSchema).optional(),\n})\n .strict()\n .refine(\n (data) =>\n (data.addAdmins?.length ?? 0) +\n (data.removeAdmins?.length ?? 0) +\n (data.addJrAdmins?.length ?? 0) +\n (data.removeJrAdmins?.length ?? 0) >\n 0,\n { message: 'At least one of addAdmins/removeAdmins/addJrAdmins/removeJrAdmins must be non-empty.' },\n );\n\nexport type UpdateAdminListInput = z.infer<typeof UpdateAdminListInputSchema>;\n\n// Authoritative result of updateAdminList — the grant/revoke delta counts computed inside\n// the roster transaction (uids already in their target state are no-ops and not counted).\n// Non-strict (server → client result posture).\nexport const UpdateAdminListResultSchema = z.object({\n success: z.literal(true),\n adminsGranted: z.number().int().nonnegative(),\n adminsRevoked: z.number().int().nonnegative(),\n jrAdminsGranted: z.number().int().nonnegative(),\n jrAdminsRevoked: z.number().int().nonnegative(),\n /** Operation-receipt audit id — the `admin.systemRoleGranted` / `admin.systemRoleRevoked`\n * event(s) key off the same roster transaction. Optional/additive. (No single domain id: a\n * roster edit spans multiple uids, so only the audit id is a meaningful receipt handle.) */\n auditEventId: z.string().min(1).optional(),\n});\nexport type UpdateAdminListResult = z.infer<typeof UpdateAdminListResultSchema>;\n\n// --- Admin moderation: hide / restore / retitle content + Work/Realm objects ---\n\nexport const CheckTrademarkInputSchema = z.object({\n // Primary: the work project's title (franchise-level check).\n workTitle: z.string().min(1).max(MAX_WORK_PROJECT_TITLE_LENGTH),\n // Optional: the sub-item title (chapter, track, episode). Checked secondarily.\n // `.nullish()` (not `.optional()`): the Firebase callable client serializes an\n // undefined argument as JSON null, and the work-view caller passes\n // `subItemTitle: subItem?.title` which is undefined when the sub-item hasn't\n // loaded — that arrives here as null. A bare `.optional()` would 400 on it.\n subItemTitle: z.string().max(MAX_WORK_PROJECT_TITLE_LENGTH).nullish(),\n}).strict();\nexport type CheckTrademarkInput = z.infer<typeof CheckTrademarkInputSchema>;\n\nexport const GetReportedContentDetailInputSchema = z.object({\n reportGroupId: z.string().min(1),\n}).strict();\nexport type GetReportedContentDetailInput = z.infer<typeof GetReportedContentDetailInputSchema>;\n\n// --- getReportedContentDetail result (cross-boundary: produced by the callable in functions/,\n// consumed by the admin report work-view) ---\n\n/** One display-text field of the reported doc, labeled for the review panel. The server returns\n * EVERY configured non-empty text field for the item type (title, description, body, …) in\n * display order — never just the first non-empty one. */\nexport const ReportedTextFieldSchema = z.object({\n /** Raw doc field name (e.g. 'description', 'workingTitle'). */\n field: z.string().min(1),\n /** Human label the panel renders (e.g. 'Description', 'Title'). */\n label: z.string().min(1),\n /** Current live value, trimmed; empty fields are omitted from the array. */\n value: z.string().min(1),\n});\nexport type ReportedTextField = z.infer<typeof ReportedTextFieldSchema>;\n\n/** One media asset referenced by the reported content: id + kind + current serving state\n * (for click-to-reveal) + the server-derived variant key the reveal must request. */\nexport const ReportedMediaAssetSchema = z.object({\n mediaAssetId: z.string().min(1),\n mediaKind: ContentMediaKindSchema.nullable(),\n servingStatus: MediaServingStatusSchema.nullable(),\n /** The variant key the reveal must request for its single display render (image origins split\n * between 'full' and 'main'; video/audio are always 'main'). Null when the asset doc is\n * missing/variant-less. */\n displayVariantKey: z.string().nullable(),\n /** Human label of WHAT this asset is on the reported item (e.g. 'Square cover',\n * 'Track photo — <title>'). Null when the server cannot derive one. */\n label: z.string().nullable(),\n});\nexport type ReportedMediaAsset = z.infer<typeof ReportedMediaAssetSchema>;\n\nexport const GetReportedContentDetailResultSchema = z.object({\n itemType: z.string().min(1),\n reportedItemId: z.string().min(1),\n /** First non-empty display-text field (legacy single-field snapshot; textFields is the\n * complete labeled set). */\n textSnapshot: z.string().nullable(),\n textFields: z.array(ReportedTextFieldSchema),\n mediaAssets: z.array(ReportedMediaAssetSchema),\n /** Whether the reported doc is currently hidden (best-effort, doc-flag based). */\n isHidden: z.boolean().nullable(),\n /** The content owner / uploader uid, when derivable. */\n ownerUid: z.string().nullable(),\n /**\n * The canonical moderation-clearable SURFACE this reported doc actually IS, resolved\n * SERVER-side: `chapter` / `tuneTrack` / `televisionEpisode` for a hall sub-item (through\n * `HALL_CONTENT_SURFACES_BY_WORK_TYPE`, from the parent hall doc the callable already reads),\n * `workProject` / `workRealm` for the shells.\n *\n * Why the resolved surface and not the `workProjectType` it was resolved from: the surface is\n * what a consumer needs — `MODERATION_CLEARABLE_TEXT_FIELDS[clearableSurface]` is the exact\n * clearable field set, one canonical index with no re-derivation. Shipping the work-project type\n * instead would make every consumer redo the routing AND the detail-vs-sub-item branch, which is\n * precisely the hand-rolled duplication that map was created to end.\n *\n * What it fixes: the in-flow clear's field picker offered the hall-family UNION\n * (title/description/content) because the projection never said which surface the sub-item was —\n * so an operator could tick `description` on a Tale chapter (title/content) or `content` on a\n * Tune track (title/description), pass the wire refinement, and have the clear runner silently\n * drop it. The picker now offers only this surface's fields, and the resolve path re-checks\n * caller-supplied fields against the same set.\n *\n * `.nullish()`: absent on payloads produced before this field existed, and null when the\n * reported item is not a clearable text surface at all (a square post, a chat message, a\n * profile picture).\n */\n clearableSurface: moderationClearableSurfaceSchema.nullish(),\n /** The FROZEN report-time snapshot (captured at intake), so the operator sees what was\n * reported even if the author edited the live doc to evade. Null for older reports. */\n reportTimeSnapshot: z.object({\n capturedText: z.string().nullable(),\n capturedMediaAssetIds: z.array(z.string()),\n revision: z.number().nullable(),\n capturedAt: z.number().nullable(),\n }).nullable(),\n});\nexport type GetReportedContentDetailResult = z.infer<typeof GetReportedContentDetailResultSchema>;\n\nexport const HideHallSubItemInputSchema = z.object({\n hallItemId: hallItemIdSchema,\n workProjectType: workProjectTypeSchema,\n subItemId: z.string().min(1),\n reason: z.string().min(1),\n}).strict();\nexport type HideHallSubItemInput = z.infer<typeof HideHallSubItemInputSchema>;\n\nexport const RestoreHallSubItemInputSchema = z.object({\n hallItemId: hallItemIdSchema,\n workProjectType: workProjectTypeSchema,\n subItemId: z.string().min(1),\n}).strict();\nexport type RestoreHallSubItemInput = z.infer<typeof RestoreHallSubItemInputSchema>;\n\nexport const HideWorkProjectInputSchema = z.object({\n workProjectId: workProjectIdSchema,\n reason: z.string().min(1),\n}).strict();\nexport type HideWorkProjectInput = z.infer<typeof HideWorkProjectInputSchema>;\n\nexport const HideWorkRealmInputSchema = z.object({\n workRealmId: z.string().min(1),\n reason: z.string().min(1),\n}).strict();\nexport type HideWorkRealmInput = z.infer<typeof HideWorkRealmInputSchema>;\n\n// `cascadeId` is OPTIONAL: the app backends derive all active cascades for the target when it is\n// omitted, and restore just that one cascade when it is supplied.\nexport const RestoreWorkProjectInputSchema = z.object({\n workProjectId: workProjectIdSchema,\n cascadeId: z.string().min(1).optional(),\n}).strict();\nexport type RestoreWorkProjectInput = z.infer<typeof RestoreWorkProjectInputSchema>;\n\nexport const RestoreWorkRealmInputSchema = z.object({\n workRealmId: z.string().min(1),\n cascadeId: z.string().min(1).optional(),\n}).strict();\nexport type RestoreWorkRealmInput = z.infer<typeof RestoreWorkRealmInputSchema>;\n\n// The `requireWorkProjectRetitle` / `requireWorkRealmRetitle` callables share this base\n// `{ reason }` shape and each `.extend(...)` it with its own id field at parse time.\nexport const RequireRetitleInputSchema = z.object({\n reason: z.string().min(1).max(MAX_REQUIRE_RETITLE_REASON_LENGTH),\n}).strict();\nexport type RequireRetitleInput = z.infer<typeof RequireRetitleInputSchema>;\n\n// --- Page-level \"Clear text (moderation)\" callables (per-field extension of the retitle family) ---\n\n// The clearable SHELL fields (raw doc field names) for the workProject + workRealm contexts.\n// Derived from the canonical clearable-field map — the two shell surfaces share the same fields.\nconst ModerationShellClearFieldSchema = z.enum(MODERATION_CLEARABLE_TEXT_FIELDS.workProject);\nexport type ModerationShellClearField = z.infer<typeof ModerationShellClearFieldSchema>;\n\nexport const ClearWorkProjectTextInputSchema = z.object({\n workProjectId: workProjectIdSchema,\n fields: z.array(ModerationShellClearFieldSchema).min(1),\n reason: z.string().trim().min(1).max(MAX_REQUIRE_RETITLE_REASON_LENGTH),\n}).strict();\nexport type ClearWorkProjectTextInput = z.infer<typeof ClearWorkProjectTextInputSchema>;\n\nexport const ClearWorkRealmTextInputSchema = z.object({\n workRealmId: z.string().min(1),\n fields: z.array(ModerationShellClearFieldSchema).min(1),\n reason: z.string().trim().min(1).max(MAX_REQUIRE_RETITLE_REASON_LENGTH),\n}).strict();\nexport type ClearWorkRealmTextInput = z.infer<typeof ClearWorkRealmTextInputSchema>;\n\n// The clearable TEXT fields across the whole hall content family — derived from the canonical\n// map (union of every hall surface's fields), never restated literals.\nconst HallClearFieldSchema = z.enum(HALL_CLEARABLE_TEXT_FIELD_NAMES);\nexport type HallClearField = z.infer<typeof HallClearFieldSchema>;\n\nexport const ClearHallContentTextInputSchema = z.object({\n hallItemId: hallItemIdSchema,\n workProjectType: workProjectTypeSchema,\n subItemId: z.string().min(1).optional(),\n fields: z.array(HallClearFieldSchema).min(1),\n reason: z.string().trim().min(1).max(MAX_REQUIRE_RETITLE_REASON_LENGTH),\n}).strict();\nexport type ClearHallContentTextInput = z.infer<typeof ClearHallContentTextInputSchema>;\n\n// --- getLatestHideCascade — resolve the latest hide-cascade id for a Work/Realm ---\n\nexport const GetLatestHideCascadeInputSchema = z.object({\n entityId: z.string().min(1),\n targetType: z.enum(['work-project', 'work-realm']),\n}).strict();\nexport type GetLatestHideCascadeInput = z.infer<typeof GetLatestHideCascadeInputSchema>;\n\n// --- moderateReportedContent — hide / restore / soft perma-remove an individual reported item ---\n\n// The single-item content-action target set (SUBSET of ReportableItemType — excludes the\n// close-out-only hall-library-sub-item).\nconst MODERATE_REPORTED_CONTENT_TARGET_TYPES = [\n 'square-streetz-post',\n 'audition',\n 'audition-entry',\n 'commission-listing',\n 'commission-proposal',\n 'work-asset',\n 'profile-picture',\n 'hall-library-item',\n 'craft-skill',\n // Conversation File — the hide/restore/remove action targets the file owner record +\n // its mediaAsset (the `work-asset` shape), never a chat message.\n 'conversation-file',\n] as const satisfies readonly ReportableItemType[];\n\nexport const ModerateReportedContentInputSchema = z.object({\n reportGroupId: z.string().min(1),\n targetType: z.enum(MODERATE_REPORTED_CONTENT_TARGET_TYPES),\n reportedItemId: z.string().min(1),\n parentItemId: z.string().min(1).optional(),\n action: z.enum(['hide', 'restore', 'remove']),\n // [EUAS-023] A destructive action (hide/remove) MUST carry a reason; restore is a reversal.\n reason: z.string().trim().min(1).max(MAX_INTERNAL_REASON_LENGTH).optional(),\n})\n .strict()\n .superRefine((val, ctx) => {\n if ((val.action === 'hide' || val.action === 'remove') && !val.reason) {\n ctx.addIssue({\n code: 'custom',\n message: 'A reason is required to hide or remove content.',\n path: ['reason'],\n });\n }\n });\nexport type ModerateReportedContentInput = z.infer<typeof ModerateReportedContentInputSchema>;\n\n// --- resolveAdminTask — the ONE guided close-out for EVERY admin case type ---\n\n// [EUAS-005] The content-action target set ALSO accepts hall-library-sub-item (hide/restore only),\n// which routes to the dedicated `runSetHallSubItemHidden` core (not `runModerateReportedContent`).\nconst CONTENT_ACTION_TARGET_TYPES = [\n 'square-streetz-post',\n 'audition',\n 'audition-entry',\n 'commission-listing',\n 'commission-proposal',\n 'work-asset',\n 'profile-picture',\n 'hall-library-item',\n 'craft-skill',\n 'hall-library-sub-item',\n // Conversation File — same content action as `work-asset`, routed at the file record.\n 'conversation-file',\n] as const satisfies readonly ReportableItemType[];\n\nconst ContentActionSchema = z\n .object({\n button: z.enum(['hideContent', 'restoreContent', 'permaRemoveContent']),\n targetType: z.enum(CONTENT_ACTION_TARGET_TYPES),\n reportedItemId: z.string().min(1),\n parentItemId: z.string().min(1).optional(),\n })\n .strict();\n\nconst WarnUserSchema = z\n .object({\n button: z.literal('warnUser'),\n userId: z.string().min(1),\n // A warning IS an admin dispatch (resolveAdminTask → runCreateAdminDispatchToUser),\n // so it shares the dispatch subject/body caps.\n subject: z.string().trim().min(1).max(MAX_ADMIN_DISPATCH_SUBJECT_LENGTH),\n message: z.string().trim().min(1).max(MAX_ADMIN_DISPATCH_INITIAL_TEXT_LENGTH),\n })\n .strict();\n\nconst SuspendOrBanSchema = z\n .object({\n button: z.enum(['suspendUser', 'banUser']),\n userId: z.string().min(1),\n reason: z.string().trim().min(1).max(MAX_INTERNAL_REASON_LENGTH),\n })\n .strict();\n\nconst ReinstateUserSchema = z\n .object({ button: z.literal('reinstateUser'), userId: z.string().min(1), reason: z.string().trim().max(MAX_INTERNAL_REASON_LENGTH).optional() })\n .strict();\n\nconst ForceUsernameResetSchema = z\n .object({ button: z.literal('forceUsernameReset'), userId: z.string().min(1), reason: z.string().trim().min(1).max(MAX_INTERNAL_REASON_LENGTH).optional() })\n .strict();\n\n/** Whole-object Work/Realm remedies — `reportedItemId` is the workProjectId / workRealmId. */\nconst WorkObjectActionSchema = z\n .object({\n button: z.enum(['hideWorkObject', 'restoreWorkObject', 'forceRetitle']),\n targetType: z.enum(['work-project', 'work-realm']),\n reportedItemId: z.string().min(1),\n })\n .strict();\n\n// --- The in-flow clear-content disposition (staged counterpart of the page-level clear-text\n// callables) ---\n\n/** The three targets the in-flow text clear can neutralize — the Work/Realm shells plus a single\n * published hall sub-item. Compile-linked subset of the canonical reportable-item enum. */\nconst CLEAR_CONTENT_TEXT_TARGET_TYPES = [\n 'work-project',\n 'work-realm',\n 'hall-library-sub-item',\n] as const satisfies readonly ReportableItemType[];\nexport type ClearContentTextTargetType = (typeof CLEAR_CONTENT_TEXT_TARGET_TYPES)[number];\n\n/** Every field name the staged clear can carry across those three targets — the union of the two\n * canonical clearable owners (`MODERATION_CLEARABLE_TEXT_FIELDS` for the shells,\n * `HALL_CLEARABLE_TEXT_FIELD_NAMES` for the hall family), i.e. the same two sources\n * `ClearWorkProjectTextInputSchema` / `ClearHallContentTextInputSchema` derive from. No field\n * literal is restated here. */\nconst CLEAR_CONTENT_TEXT_FIELDS = [\n ...MODERATION_CLEARABLE_TEXT_FIELDS.workProject,\n ...HALL_CLEARABLE_TEXT_FIELD_NAMES,\n] as const;\nconst ClearContentTextFieldSchema = z.enum(CLEAR_CONTENT_TEXT_FIELDS);\nexport type ClearContentTextField = z.infer<typeof ClearContentTextFieldSchema>;\n\n/** Which fields each target legally accepts — projected from those same owners, so a\n * target/field mismatch is refused at the wire instead of reaching a clear runner that would\n * drop it. Enforced by the cross-field refinement on `StagedActionSchema` below. */\nconst CLEAR_CONTENT_TEXT_FIELDS_BY_TARGET = {\n 'work-project': MODERATION_CLEARABLE_TEXT_FIELDS.workProject,\n 'work-realm': MODERATION_CLEARABLE_TEXT_FIELDS.workRealm,\n 'hall-library-sub-item': HALL_CLEARABLE_TEXT_FIELD_NAMES,\n} as const satisfies Record<ClearContentTextTargetType, readonly ClearContentTextField[]>;\n\n/** Per-field text clear — the guided close-out's staged counterpart of the page-level\n * `clearWorkProjectText` / `clearWorkRealmText` / `clearHallContentText` callables (the\n * per-field extension of `forceRetitle`). `reportedItemId` is the workProjectId / workRealmId /\n * sub-item id; `parentItemId` is the parent hall item id, required only for the sub-item target.\n * `workProjectType` is deliberately NOT on the wire — the server re-reads it from the doc (the\n * hall hide-branch precedent). */\nconst ClearContentTextActionSchema = z\n .object({\n button: z.literal('clearContentText'),\n targetType: z.enum(CLEAR_CONTENT_TEXT_TARGET_TYPES),\n reportedItemId: z.string().min(1),\n parentItemId: z.string().min(1).optional(),\n fields: z.array(ClearContentTextFieldSchema).min(1),\n })\n .strict();\n\n/** Chat message tombstone — channel + seq from the report, revision from the live thread-read. */\nconst TombstoneChatSchema = z\n .object({\n button: z.literal('tombstoneChat'),\n channel: z.discriminatedUnion('kind', [\n z.object({ kind: z.literal('channel'), workProjectId: z.string().min(1), guildChatChannelId: z.string().min(1) }).strict(),\n z.object({ kind: z.literal('invite'), guildInviteId: z.string().min(1) }).strict(),\n ]),\n messageSeq: z.number().int().nonnegative(),\n expectedMessageRevision: z.number().int().nonnegative(),\n })\n .strict();\n\nexport const StagedActionSchema = z\n .discriminatedUnion('button', [\n ContentActionSchema,\n WarnUserSchema,\n SuspendOrBanSchema,\n ReinstateUserSchema,\n ForceUsernameResetSchema,\n WorkObjectActionSchema,\n ClearContentTextActionSchema,\n TombstoneChatSchema,\n ])\n // The clearContentText arm's two cross-field rules, applied at the union (the\n // SafetyStagedActionSchema pattern below) because no other arm carries these fields:\n // every chosen field must belong to the chosen target's canonical clearable set, and the\n // hall sub-item target must name its parent hall item.\n .superRefine((value, ctx) => {\n if (value.button !== 'clearContentText') return;\n const clearable: readonly string[] = CLEAR_CONTENT_TEXT_FIELDS_BY_TARGET[value.targetType];\n value.fields.forEach((field, index) => {\n if (!clearable.includes(field)) {\n ctx.addIssue({\n code: 'custom',\n message: `Field '${field}' is not clearable on a '${value.targetType}' target.`,\n path: ['fields', index],\n });\n }\n });\n if (value.targetType === 'hall-library-sub-item' && !value.parentItemId) {\n ctx.addIssue({\n code: 'custom',\n message: 'parentItemId (the parent hall item id) is required for a hall sub-item target.',\n path: ['parentItemId'],\n });\n }\n });\nexport type StagedAction = z.infer<typeof StagedActionSchema>;\n\nexport const NormalReportInputSchema = z\n .object({\n caseType: z.literal('normalReport').default('normalReport'),\n taskId: z.string().min(1),\n outcome: z.enum(['founded', 'unfounded']),\n resolutionSummary: z.string().trim().min(1).max(MAX_SAFETY_RESOLUTION_SUMMARY_LENGTH),\n actions: z.array(StagedActionSchema).max(16).default([]),\n userFacingReasonCode: z.string().trim().min(1).max(128).optional(),\n userFacingReasonDetail: z.string().trim().max(MAX_USER_FACING_REASON_DETAIL_LENGTH).optional(),\n adminNote: z.string().trim().max(MAX_SAFETY_ADMIN_NOTE_LENGTH).optional(),\n })\n .strict();\nexport type ResolveAdminTaskInput = z.infer<typeof NormalReportInputSchema>;\n\nconst SafetyDispositionActionSchema = z\n .object({\n button: z.literal('setReportDisposition'),\n // Derived from the ONE canonical disposition enum — 'undetermined' is the initial\n // state, never an operator-settable target, so it is excluded (not re-declared).\n disposition: ReportDispositionSchema.exclude(['undetermined']),\n dispositionReasonCode: ReportDispositionReasonCodeSchema,\n // Derived from the ONE receipts-cap constant (doc-schemas/safety/evidence.ts) — the same\n // bound the callable + the embedded SetReportDispositionInputV1Schema use. No field-level min:\n // the reportRequired⇒non-empty rule lives in the shared cross-field refinement below, so every\n // other disposition may legally stage this action with no evidence revealed.\n evidenceRefs: z.array(z.string().min(1)).max(MAX_MANIFEST_NCMEC_RECEIPTS),\n expectedRevision: z.number().int().nonnegative(),\n })\n .strict();\n\nconst QuarantineActionSchema = z.object({ button: z.literal('quarantinePreserveFile') }).strict();\n\n// [C-01/EUAS-002] No client-supplied requestId — the linked statutory request id(s) are derived\n// SERVER-SIDE from the case's `requestLinks` inside `enqueueNciiRemovalForCase`.\nconst HashRemoveActionSchema = z.object({ button: z.literal('hashRemoveFile') }).strict();\n\nconst SafetyAccountActionSchema = z\n .object({\n button: z.enum(['suspendUser', 'banUser', 'reinstateUser']),\n targetUid: z.string().min(1),\n reasonInternal: z.string().trim().min(4).max(MAX_INTERNAL_REASON_LENGTH),\n reasonUserFacing: z.string().trim().min(1).max(MAX_USER_FACING_REASON_LENGTH),\n role: ChildSafetyAccountRoleSchema,\n subjectDisposition: ChildSafetyAccountSubjectDispositionSchema,\n })\n .strict();\n\nexport const SafetyStagedActionSchema = z\n .discriminatedUnion('button', [\n SafetyDispositionActionSchema,\n QuarantineActionSchema,\n HashRemoveActionSchema,\n SafetyAccountActionSchema,\n ])\n // The setReportDisposition arm reuses the ONE canonical cross-field rules (foundation.ts) via the\n // shared refinements — never re-declaring them here: the disposition↔reason pairing AND the\n // reportRequired⇒evidence-present rule. Other arms carry no such fields.\n .superRefine((value, ctx) => {\n if (value.button === 'setReportDisposition') {\n refineReportDispositionReasonCode(value, ctx);\n refineReportDispositionEvidenceRefs(value, ctx);\n }\n });\nexport type SafetyStagedAction = z.infer<typeof SafetyStagedActionSchema>;\n\nexport const SafetyCaseInputSchema = z\n .object({\n caseType: z.enum(['csam', 'ncii']),\n caseId: z.string().min(1),\n outcome: z.enum(['founded', 'unfounded']),\n resolutionSummary: z.string().trim().min(1).max(MAX_SAFETY_RESOLUTION_SUMMARY_LENGTH),\n actions: z.array(SafetyStagedActionSchema).max(16).default([]),\n adminNote: z.string().trim().max(MAX_SAFETY_ADMIN_NOTE_LENGTH).optional(),\n // [EUAS-017] Optimistic-concurrency token (`childSafetyCaseList.revision` / `nciiCases.revision`).\n // The close is rejected if the case changed since the operator loaded it — concurrent stale closes\n // can't silently overwrite. Optional for backward compatibility; the console always supplies it.\n expectedRevision: z.number().int().nonnegative().optional(),\n // Interim reauth: a single explicit typed confirmation for the privileged safety actions,\n // standing in for the passkey two-step until [H-17]. The callable is full-admin gated.\n confirmation: z.literal(SAFETY_ACTIONS_CONFIRMATION),\n })\n .strict();\nexport type SafetyCaseInput = z.infer<typeof SafetyCaseInputSchema>;\n\nexport const ReopenSafetyCaseInputSchema = z\n .object({\n caseType: z.enum(['csam', 'ncii']),\n caseId: z.string().min(1),\n reasonInternal: z.string().trim().min(4).max(MAX_INTERNAL_REASON_LENGTH),\n expectedRevision: z.number().int().nonnegative().optional(),\n confirmation: z.literal(SAFETY_CASE_REOPEN_CONFIRMATION),\n })\n .strict();\nexport type ReopenSafetyCaseInput = z.infer<typeof ReopenSafetyCaseInputSchema>;\n\n// ---------------------------------------------------------------------------\n// Dead-letter operations — adminReplayDeadLetter + getDeadLetters (Ops Repairs).\n// ---------------------------------------------------------------------------\n\n/** Every ledger the dead-letter replay callable supports. */\nexport const DeadLetterCollectionSchema = z.enum([\n 'chatSyncEvents',\n 'chatAdminActionCommands',\n 'notificationDeliveries',\n 'chatMessageOutbox',\n 'squareAnnouncementJobs',\n 'chatSyncFanoutJobs',\n 'mediaAssets',\n 'quarantineSagaJobs',\n 'nciiRemovalJobs',\n 'safetyEvidenceJobs',\n 'accountActionCommands',\n 'activeReportGroups',\n 'hallSubItemEdgeSync',\n]);\nexport type DeadLetterCollection = z.infer<typeof DeadLetterCollectionSchema>;\n\n/** Every replay lane whose target is a flat top-level document. */\nexport const FlatDeadLetterCollectionSchema = DeadLetterCollectionSchema.exclude(['hallSubItemEdgeSync']);\nexport type FlatDeadLetterCollection = z.infer<typeof FlatDeadLetterCollectionSchema>;\n\n/**\n * Canonical identity for a published Hall sub-item edge-sync replay target. The work type derives\n * the only valid nested collection through PATH_BUILDERS.hallItemSubItem; callers never submit a\n * Firestore path or collection segment.\n */\nexport const HallSubItemEdgeSyncReplayTargetSchema = z.object({\n hallItemId: hallItemIdSchema,\n workProjectType: workProjectTypeSchema,\n subItemId: z.string().min(1),\n}).strict();\nexport type HallSubItemEdgeSyncReplayTarget = z.infer<typeof HallSubItemEdgeSyncReplayTargetSchema>;\n\nexport const AdminReplayDeadLetterInputSchema = z\n .discriminatedUnion('collection', [\n z.object({\n collection: FlatDeadLetterCollectionSchema,\n docId: z.string().min(1).max(200),\n reason: z.string().min(1).max(MAX_INTERNAL_REASON_LENGTH),\n dryRun: z.boolean().optional(),\n }).strict(),\n z.object({\n collection: z.literal('hallSubItemEdgeSync'),\n ...HallSubItemEdgeSyncReplayTargetSchema.shape,\n reason: z.string().min(1).max(MAX_INTERNAL_REASON_LENGTH),\n dryRun: z.boolean().optional(),\n }).strict(),\n ]);\nexport type AdminReplayDeadLetterInput = z.infer<typeof AdminReplayDeadLetterInputSchema>;\n\nexport const GetDeadLettersInputSchema = z\n .object({\n /** Restrict to one ledger; absent = all supported ledgers. */\n collection: DeadLetterCollectionSchema.optional(),\n /** Per-ledger row cap (the callable's own ceiling applies regardless). */\n limit: z.number().int().min(1).max(200).optional(),\n })\n .strict()\n .nullish();\nexport type GetDeadLettersInput = z.infer<typeof GetDeadLettersInputSchema>;\n\n\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ttt-productions/ttt-core",
3
- "version": "0.79.38",
3
+ "version": "0.79.39",
4
4
  "description": "Core types, Firestore path constants, and shared constants for TTT Productions",
5
5
  "repository": {
6
6
  "type": "git",