@ttt-productions/ttt-core 0.79.48 → 0.79.49
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/constants/business-admin.d.ts +7 -0
- package/dist/constants/business-admin.d.ts.map +1 -1
- package/dist/constants/business-admin.js +7 -0
- package/dist/constants/business-admin.js.map +1 -1
- package/dist/constants/index.d.ts +3 -0
- package/dist/constants/index.d.ts.map +1 -1
- package/dist/constants/index.js +3 -0
- package/dist/constants/index.js.map +1 -1
- package/dist/constants/legal-review-notice-state.d.ts +5 -0
- package/dist/constants/legal-review-notice-state.d.ts.map +1 -0
- package/dist/constants/legal-review-notice-state.js +19 -0
- package/dist/constants/legal-review-notice-state.js.map +1 -0
- package/dist/constants/legal-review-notice.d.ts +102 -0
- package/dist/constants/legal-review-notice.d.ts.map +1 -0
- package/dist/constants/legal-review-notice.js +171 -0
- package/dist/constants/legal-review-notice.js.map +1 -0
- package/dist/constants/public-documents.d.ts +20 -0
- package/dist/constants/public-documents.d.ts.map +1 -0
- package/dist/constants/public-documents.js +48 -0
- package/dist/constants/public-documents.js.map +1 -0
- package/dist/doc-schemas/content.d.ts +56 -0
- package/dist/doc-schemas/content.d.ts.map +1 -1
- package/dist/doc-schemas/content.js +34 -0
- package/dist/doc-schemas/content.js.map +1 -1
- package/dist/doc-schemas/index.d.ts +2 -0
- package/dist/doc-schemas/index.d.ts.map +1 -1
- package/dist/doc-schemas/index.js +2 -0
- package/dist/doc-schemas/index.js.map +1 -1
- package/dist/doc-schemas/legal-review-notice.d.ts +8 -0
- package/dist/doc-schemas/legal-review-notice.d.ts.map +1 -0
- package/dist/doc-schemas/legal-review-notice.js +14 -0
- package/dist/doc-schemas/legal-review-notice.js.map +1 -0
- package/dist/doc-schemas/payments.d.ts +4 -0
- package/dist/doc-schemas/payments.d.ts.map +1 -1
- package/dist/doc-schemas/payments.js +6 -0
- package/dist/doc-schemas/payments.js.map +1 -1
- package/dist/doc-schemas/public-documents.d.ts +677 -0
- package/dist/doc-schemas/public-documents.d.ts.map +1 -0
- package/dist/doc-schemas/public-documents.js +158 -0
- package/dist/doc-schemas/public-documents.js.map +1 -0
- package/dist/doc-schemas/registry.d.ts +338 -23
- package/dist/doc-schemas/registry.d.ts.map +1 -1
- package/dist/doc-schemas/registry.js +8 -1
- package/dist/doc-schemas/registry.js.map +1 -1
- package/dist/doc-schemas/safety/case.d.ts +3 -3
- package/dist/doc-schemas/system.d.ts +14 -0
- package/dist/doc-schemas/system.d.ts.map +1 -1
- package/dist/doc-schemas/system.js +7 -0
- package/dist/doc-schemas/system.js.map +1 -1
- package/dist/doc-schemas/user.d.ts +14 -1
- package/dist/doc-schemas/user.d.ts.map +1 -1
- package/dist/doc-schemas/user.js +13 -7
- package/dist/doc-schemas/user.js.map +1 -1
- package/dist/media/domain-events-admin.d.ts +0 -6
- package/dist/media/domain-events-admin.d.ts.map +1 -1
- package/dist/media/domain-events-admin.js +0 -10
- package/dist/media/domain-events-admin.js.map +1 -1
- package/dist/media/domain-events.d.ts +0 -5
- package/dist/media/domain-events.d.ts.map +1 -1
- package/dist/media/domain-events.js +1 -2
- package/dist/media/domain-events.js.map +1 -1
- package/dist/media/pending-media.d.ts +0 -55
- package/dist/media/pending-media.d.ts.map +1 -1
- package/dist/paths/collection-refs.d.ts +2 -0
- package/dist/paths/collection-refs.d.ts.map +1 -1
- package/dist/paths/collection-refs.js +3 -0
- package/dist/paths/collection-refs.js.map +1 -1
- package/dist/paths/collections.d.ts +5 -0
- package/dist/paths/collections.d.ts.map +1 -1
- package/dist/paths/collections.js +14 -0
- package/dist/paths/collections.js.map +1 -1
- package/dist/paths/path-builders.d.ts +8 -0
- package/dist/paths/path-builders.d.ts.map +1 -1
- package/dist/paths/path-builders.js +17 -0
- package/dist/paths/path-builders.js.map +1 -1
- package/dist/schemas/admin.d.ts +119 -42
- package/dist/schemas/admin.d.ts.map +1 -1
- package/dist/schemas/admin.js +49 -30
- package/dist/schemas/admin.js.map +1 -1
- package/dist/schemas/atoms.d.ts +8 -0
- package/dist/schemas/atoms.d.ts.map +1 -1
- package/dist/schemas/atoms.js +8 -0
- package/dist/schemas/atoms.js.map +1 -1
- package/dist/schemas/hall-library.d.ts +1 -0
- package/dist/schemas/hall-library.d.ts.map +1 -1
- package/dist/schemas/hall-library.js +6 -1
- package/dist/schemas/hall-library.js.map +1 -1
- package/dist/schemas/index.d.ts +1 -0
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +1 -0
- package/dist/schemas/index.js.map +1 -1
- package/dist/schemas/notification.d.ts +1 -1
- package/dist/schemas/payments.d.ts +1 -0
- package/dist/schemas/payments.d.ts.map +1 -1
- package/dist/schemas/payments.js +5 -0
- package/dist/schemas/payments.js.map +1 -1
- package/dist/schemas/public-documents.d.ts +399 -0
- package/dist/schemas/public-documents.d.ts.map +1 -0
- package/dist/schemas/public-documents.js +147 -0
- package/dist/schemas/public-documents.js.map +1 -0
- package/dist/schemas/safety.d.ts +1 -1
- package/dist/types/audit.d.ts +1 -1
- package/dist/types/audit.d.ts.map +1 -1
- package/dist/types/audit.js.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/public-documents.d.ts +3 -0
- package/dist/types/public-documents.d.ts.map +1 -0
- package/dist/types/public-documents.js +2 -0
- package/dist/types/public-documents.js.map +1 -0
- package/dist/types/system.d.ts +3 -3
- package/dist/types/system.js.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/public-documents.d.ts +63 -0
- package/dist/utils/public-documents.d.ts.map +1 -0
- package/dist/utils/public-documents.js +143 -0
- package/dist/utils/public-documents.js.map +1 -0
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collections.js","sourceRoot":"","sources":["../../src/paths/collections.ts"],"names":[],"mappings":"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","sourcesContent":["// Firestore collection name constants — canonical source of truth\n// Changes to these values require database migration.\n\nimport type { WorkProjectType } from '../types/content.js';\n\n/**\n * TOP-LEVEL COLLECTIONS\n */\nexport const COLLECTIONS = {\n // Core entities\n USER_PROFILES: 'userProfiles',\n PUBLIC_USERS: 'publicUsers',\n ALL_WORK_PROJECTS: 'allWorkProjects',\n PUBLIC_WORK_PROJECTS: 'publicWorkProjects',\n WORK_REALMS: 'workRealms',\n\n // Content & Social\n SQUARE_STREETZ_FEED: 'squareStreetzFeed',\n THRESHOLD_ITEMS: 'thresholdItems',\n HALL_ITEMS: 'hallItems',\n HALL_CONTENT_CHANGE_REQUESTS: 'hallContentChangeRequests',\n COMMISSION_LISTINGS: 'commissionListings',\n AUDITION_BOARD: 'auditionBoard',\n FOLLOW_EDGES: 'followEdges',\n FOLLOW_COUNTERS: 'followCounters',\n\n // System & Utility\n RESERVED_DISPLAY_NAMES: 'reservedDisplayNames',\n RESERVED_REALM_NAMES: 'reservedRealmNames',\n ACCOUNT_DELETION_REQUESTS: 'accountDeletionRequests',\n CONTENT_REPORTS: 'contentReports',\n PENDING_MEDIA: 'pendingMedia',\n PENDING_MEDIA_ARCHIVE: 'pendingMediaArchive',\n MEDIA_ASSETS: 'mediaAssets',\n MEDIA_ACTIVATION_JOBS: 'mediaActivationJobs',\n PENDING_ADMIN_DISPATCHES: 'pendingAdminDispatches',\n ACTIVE_REPORT_GROUPS: 'activeReportGroups',\n CONTENT_VIOLATIONS: 'contentViolations',\n ADMIN_TASKS: 'adminTasks',\n SHORT_LINKS: 'shortLinks',\n GUILD_INVITE_CONVERSATIONS: 'guildInviteConversations',\n STAKE_SHARE_AUDIT_EVENTS: 'stakeShareAuditEvents',\n MODERATION_CASCADE_MANIFESTS: 'moderationCascadeManifests',\n // Backend-only append-only audit ledger (audit-core shape; auditEvents/{eventId}). Was a\n // rules-only name written through a literal until the constant landed here.\n AUDIT_EVENTS: 'auditEvents',\n\n // Notification system\n ACTIVE_USER_NOTIFICATIONS: 'activeUserNotifications',\n ACTIVE_ADMIN_NOTIFICATIONS: 'activeAdminNotifications',\n ADMIN_NOTIFICATION_HISTORY: 'adminNotificationHistory',\n PENDING_NOTIFICATIONS: 'pendingNotifications',\n\n // Notification redesign — delivery ledger + unified fanout engine (Admin-SDK-only).\n NOTIFICATION_DELIVERIES: 'notificationDeliveries',\n NOTIFICATION_FANOUT_JOBS: 'notificationFanoutJobs',\n // Server-owned \"archive all\" jobs (one per user+category+requestId; CF-only, never\n // client-readable — the client learns state through getArchiveAllStatus).\n NOTIFICATION_ARCHIVE_ALL_JOBS: 'notificationArchiveAllJobs',\n\n // Chat realtime sync / projection / command collections (Admin-SDK-only).\n CHAT_CHANNEL_AUTH_PROJECTIONS: 'chatChannelAuthProjections',\n CHAT_SCOPE_DEGRADED: 'chatScopeDegraded',\n CHAT_SYNC_EVENTS: 'chatSyncEvents',\n CHAT_SYNC_FANOUT_JOBS: 'chatSyncFanoutJobs',\n CHAT_MESSAGE_OUTBOX: 'chatMessageOutbox',\n CHAT_ADMIN_ACTION_COMMANDS: 'chatAdminActionCommands',\n CHAT_HISTORY_ANONYMIZATION_JOBS: 'chatHistoryAnonymizationJobs',\n\n // Square Streetz announcement outbox (Admin-SDK-only): durable jobs enqueued in the\n // announcing domain's transaction and drained by the outbox trigger worker. Job ids\n // are deterministic so a replayed transaction collides instead of duplicating —\n // ALWAYS derive them via buildSquareAnnouncementJobId (doc-schemas/square-announcement-jobs.ts).\n SQUARE_ANNOUNCEMENT_JOBS: 'squareAnnouncementJobs',\n\n // Feedback & Metadata\n FEEDBACK_SUBMISSIONS: 'feedbackSubmissions',\n CRAFT_SKILLS_BY_TAG: 'craftSkillsByTag',\n SYSTEM_DATA: '_systemData',\n APP_CONFIG: '_appConfig',\n // Server-only singleton bucket (BACKEND-108 — least-privileged reader). Docs whose ONLY\n // readers are Cloud Functions (Admin SDK) live here, never in the public `_appConfig`\n // bucket. Firestore rules deny all client reads/writes on `_serverData`.\n // Docs: agePolicy, nciiPolicy, privilegedReviewerSecurity, and the feedbackLists\n // container whose feedbackAliases / feedbackDenylist subcollections back submitFeedback.\n SERVER_DATA: '_serverData',\n\n // Payments & pledge ledger\n PLEDGE_PAYMENTS: 'pledgePayments',\n PLEDGE_PAYMENT_PROVIDER_REFS: 'pledgePaymentProviderRefs',\n PROCESSED_STRIPE_EVENTS: 'processedStripeEvents',\n PLEDGE_PAYMENT_LEDGER_EVENTS: 'pledgePaymentLedgerEvents',\n PAYMENT_WEBHOOK_QUARANTINE: 'paymentWebhookQuarantine',\n // Running-totals singleton (pledgePaymentTotals/current) — auth-readable, server-only writes.\n PLEDGE_PAYMENT_TOTALS: 'pledgePaymentTotals',\n // User-initiated pledge refund requests (post-launch handler; keyed by requestId). No Stripe ids\n // here — those stay on pledgePaymentProviderRefs. Server-only writes.\n PLEDGE_REFUND_REQUESTS: 'pledgeRefundRequests',\n\n // Trust & Safety — child-safety case spine (§A1b, §A2)\n CHILD_SAFETY_CASE_LIST: 'childSafetyCaseList',\n CHILD_SAFETY_CASES: 'childSafetyCases',\n CHILD_SAFETY_OWNING_ALIASES: 'childSafetyOwningAliases',\n\n // Trust & Safety — time-sensitive admin-tray \"case needs work\" pins (admin-readable\n // projection; the 5th notification-tray tab reads it, the Safety Case Console owns detail).\n ACTIVE_SAFETY_CASE_ALERTS: 'activeSafetyCaseAlerts',\n\n // Trust & Safety — holds + resource commands (§A3)\n SAFETY_HOLD_REFS: 'safetyHoldRefs',\n SAFETY_HOLD_RESOURCES: 'safetyHoldResources',\n SAFETY_RESOURCE_COMMANDS: 'safetyResourceCommands',\n\n // Trust & Safety — evidence + provenance (§A4, §A6)\n SAFETY_EVIDENCE_MANIFESTS: 'safetyEvidenceManifests',\n SAFETY_EVIDENCE_JOBS: 'safetyEvidenceJobs',\n EVENT_PROVENANCE: 'eventProvenance',\n\n // Trust & Safety — sagas + closure (§A5)\n QUARANTINE_SAGA_JOBS: 'quarantineSagaJobs',\n NCMEC_SUBMISSION_JOBS: 'ncmecSubmissionJobs',\n ACCOUNT_ACTION_COMMANDS: 'accountActionCommands',\n\n // Trust & Safety — SLA monitors + heartbeat (§A8)\n SAFETY_SLA_MONITORS: 'safetySlaMonitors',\n SAFETY_MONITOR_HEARTBEAT: 'safetyMonitorHeartbeat',\n\n // Trust & Safety — age attestation nonces (§A7)\n AGE_ATTESTATION_NONCES: 'ageAttestationNonces',\n\n // Trust & Safety — NCII / TAKE IT DOWN (§A11)\n NCII_ALLEGATIONS: 'nciiAllegations',\n TAKE_IT_DOWN_REQUESTS: 'takeItDownRequests',\n NCII_CASES: 'nciiCases',\n NCII_TEMPORARY_HOLDS: 'nciiTemporaryHolds',\n NCII_REMOVAL_JOBS: 'nciiRemovalJobs',\n // [H-01] durable operator-visible inventory of NCII-evidence objects RETAINED but never recorded\n // as evidence (orphan / oversized / spoof / unknown-reference). Never auto-deleted.\n NCII_RETAINED_EVIDENCE_INVENTORY: 'nciiRetainedEvidenceInventory',\n // [H-01] app-only dead-letter sink for NCII retained-evidence inventory rows that could not be\n // written to the primary nciiRetainedEvidenceInventory collection (e.g. write failure during\n // the onNciiEvidenceUploaded trigger). Never auto-deleted; operator-visible for manual triage.\n NCII_INVENTORY_DEAD_LETTER: 'nciiInventoryDeadLetter',\n\n // Backend-only retry queue for post-commit auth-effect reconciliation: when an account-status\n // change committed to Firestore but the follow-on Auth effect (custom-claim / disable) failed,\n // a queue entry keyed by uid drives a retry loop toward the target status. Admin-SDK-only.\n STATUS_RECONCILE_QUEUE: 'statusReconcileQueue',\n\n // Trust & Safety — [H-08] per-operator TOTP step-up state (secret + active grant window),\n // keyed by uid. Cloud-Functions-only: the secret is returned to the client exactly once by\n // the enroll callable and is NEVER readable through Firestore.\n OPERATOR_STEP_UP: 'operatorStepUp',\n\n // Trust & Safety — one persisted pagination-cursor doc per reconciler needs-work backstop\n // sweep (quarantine enqueue, NCMEC enqueue), keyed by the sweep's cursor key. Admin-SDK-only.\n SAFETY_RECONCILER_CURSORS: 'safetyReconcilerCursors',\n\n // Durable per-sweep cadence/cursor state for the scheduled user sweeps, keyed by the sweep\n // name (orphanRegistrationCleanup, reconcileAccountStatus). Wall-clock stamps that survive a\n // container recycle, so a \"~once/day\" or \"~once/week\" pass fires on real elapsed time instead\n // of an in-memory counter. Admin-SDK-only.\n SWEEP_STATE: 'sweepState',\n} as const;\n\n/**\n * USER PROFILE SUBCOLLECTIONS\n * Nested under userProfiles/{userId}/\n */\nexport const USER_SUBCOLLECTIONS = {\n PROFILE_CRAFT_SKILLS: 'profileCraftSkills',\n PRIVATE_DATA: 'privateData',\n USER_METADATA: 'userMetadata',\n USER_LIKES: 'userLikes',\n MENTION_HISTORY: 'mentionHistory',\n AUDITION_VOTES: 'auditionVotes',\n // Archived personal notification history (userProfiles/{uid}/notificationHistory/{id}).\n NOTIFICATION_HISTORY: 'notificationHistory',\n} as const;\n\n/**\n * WORKPROJECT SUBCOLLECTIONS\n * Nested under allWorkProjects/{workProjectId}/\n */\nexport const WORK_PROJECT_SUBCOLLECTIONS = {\n WORK_PROJECT_TALES: 'workProjectTales',\n WORK_PROJECT_TUNES: 'workProjectTunes',\n WORK_PROJECT_TELEVISION: 'workProjectTelevision',\n GUILDMATE_USERS: 'guildmateUsers',\n PUBLIC_GUILDMATE_USERS: 'publicGuildmateUsers',\n WORK_FILE_FOLDERS: 'workFileFolders',\n GUILD_CHAT_CHANNELS: 'guildChatChannels',\n // The Work's single hall-entry reservation (allWorkProjects/{id}/hallSubmissionReservation/\n // reservation): claimed create-only inside the first threshold submit's transaction so a\n // project can only ever own ONE hall item.\n HALL_SUBMISSION_RESERVATION: 'hallSubmissionReservation',\n} as const;\n\n/**\n * WORKREALM SUBCOLLECTIONS\n * Nested under workRealms/{workRealmId}/\n */\nexport const WORK_REALM_SUBCOLLECTIONS = {\n // The Realm steward's folders for the realm shared-file pool. The FILES themselves are\n // never docs here — a shared file stays a `workFile` under its owning Work and carries\n // `realmFileFolderId` on its mediaAssets doc.\n REALM_FILE_FOLDERS: 'realmFileFolders',\n} as const;\n\n/**\n * HALL ITEM SUBCOLLECTIONS\n * Nested under hallItems/{hallItemId}/ — the PUBLISHED sub-item projections\n * (chapters/tracks/episodes copied out of the Work at publish time by\n * runPublishApprovedHallLibraryItem).\n *\n * The segment is an INDEPENDENT compound-camelCase collection name (ARCH-104) — it is\n * NOT any transformation of `WorkProjectType`. Map a work type to its segment through\n * HALL_ITEM_SUBCOLLECTION_BY_WORK_TYPE; `workProjectType.toLowerCase()` is not merely\n * discouraged, it produces a segment that DOES NOT EXIST ('tales', 'tunes',\n * 'television'), so the resulting path silently reads/writes an empty collection.\n */\nexport const HALL_ITEM_SUBCOLLECTIONS = {\n TALES: 'hallItemTales',\n TUNES: 'hallItemTunes',\n TELEVISION: 'hallItemTelevision',\n} as const;\n\nexport type HallItemSubcollection =\n (typeof HALL_ITEM_SUBCOLLECTIONS)[keyof typeof HALL_ITEM_SUBCOLLECTIONS];\n\n/** WorkProjectType → published hall sub-item subcollection segment. */\nexport const HALL_ITEM_SUBCOLLECTION_BY_WORK_TYPE: Record<WorkProjectType, HallItemSubcollection> = {\n Tales: HALL_ITEM_SUBCOLLECTIONS.TALES,\n Tunes: HALL_ITEM_SUBCOLLECTIONS.TUNES,\n Television: HALL_ITEM_SUBCOLLECTIONS.TELEVISION,\n};\n\n/**\n * DEEPLY NESTED SUBCOLLECTIONS\n * Third level and beyond\n */\nexport const NESTED_SUBCOLLECTIONS = {\n // Content subcollections\n TALE_CHAPTERS: 'taleChapters',\n TUNE_TRACKS: 'tuneTracks',\n TELEVISION_EPISODES: 'televisionEpisodes',\n\n // Work-project file folders (S7): files nested under each folder.\n WORK_FILES: 'workFiles',\n\n // Communication — guild channel + invite messages are REALTIME-ONLY (chat Worker\n // Durable Object, never Firestore); only admin-support conversationMessages persist here.\n CONVERSATION_MESSAGES: 'conversationMessages',\n\n // Conversation Files — the flat per-conversation file list. Nested under the\n // conversation's NATURAL Firestore parent, so the same subcollection segment serves\n // both supported scopes:\n // guildInviteConversations/{guildInviteId}/conversationFiles/{conversationFileId}\n // pendingAdminDispatches/{adminDispatchId}/conversationFiles/{conversationFileId}\n // Guild chat channels deliberately have NO conversationFiles subcollection.\n CONVERSATION_FILES: 'conversationFiles',\n\n // SquareStreetz & Social\n SOCIAL_POSTS: 'socialPosts',\n ACTIVE_POSTS: 'activePosts',\n TRENDING_POSTS: 'trendingPosts',\n\n // Commissions & Auditions\n COMMISSION_PROPOSALS: 'commissionProposals',\n AUDITION_ENTRIES: 'auditionEntries',\n\n // User history\n LIKE_HISTORY: 'likeHistory',\n SQUARE_STREETZ_LIKES: 'squareStreetzLikes',\n\n // Craft Skills & Feedback\n TAGGED_CRAFT_SKILLS: 'taggedCraftSkills',\n USER_SUGGESTIONS: 'userSuggestions',\n\n // Moderation\n CHANGED_DOCS: 'changedDocs',\n\n // Trust & Safety — report spine (§A1): the public, reporter-identity-free projection\n // is a deterministic child of the protected report root\n // (contentReports/{reportId}/publicProjection/{reportId}).\n REPORT_PUBLIC_PROJECTION: 'publicProjection',\n // Per-report idempotency markers under a report group\n // (activeReportGroups/{groupKey}/reportGroupCountedReports/{reportId}): the group's\n // totalReports increment is gated on the marker's ABSENCE, so a redelivered create event\n // never double-counts. Backend-only.\n REPORT_GROUP_COUNTED_REPORTS: 'reportGroupCountedReports',\n // Restricted reporter/requester PII subcollection, shared by the report spine\n // (contentReports/{reportId}/privateDetails/{snapshot,narrative}) and TAKE IT DOWN\n // (takeItDownRequests/{requestId}/privateDetails/requester). ONE shared compound value\n // serves both parents — never split per parent. Admin-read-only / server-only.\n PRIVATE: 'privateDetails',\n\n // Chat degraded-scope causes\n // (chatScopeDegraded/{scopeKey}/chatScopeDegradedCauses/{causeId}).\n CHAT_SCOPE_DEGRADED_CAUSES: 'chatScopeDegradedCauses',\n // Anonymization affected-chunk set (chatHistoryAnonymizationJobs/{jobId}/affectedChunks/{chunkOrdinal}).\n CHAT_ANONYMIZATION_AFFECTED_CHUNKS: 'affectedChunks',\n\n // Trust & Safety — child-safety case append-only detail (NEVER arrays).\n CHILD_SAFETY_SOURCE_SIGNALS: 'sourceSignals',\n CHILD_SAFETY_DECISIONS: 'childSafetyDecisions',\n CHILD_SAFETY_DECISION_VIEWS: 'childSafetyDecisionViews',\n CHILD_SAFETY_CASE_ACCOUNTS: 'childSafetyCaseAccounts',\n CHILD_SAFETY_CASE_ACCOUNT_HISTORY: 'childSafetyCaseAccountHistory',\n CHILD_SAFETY_NCMEC_SUBMISSIONS: 'ncmecSubmissions',\n CHILD_SAFETY_NCMEC_SUBMISSION_FILES: 'ncmecSubmissionFiles',\n // Per-submission NCMEC transmission attempts\n // (childSafetyCases/{caseId}/ncmecSubmissions/{submissionId}/ncmecSubmissionAttempts/{attemptId}).\n // Rules-only until now — registered here so the segment has a single owner.\n NCMEC_SUBMISSION_ATTEMPTS: 'ncmecSubmissionAttempts',\n CHILD_SAFETY_LEGAL_PROCESS: 'legalProcess',\n // Immutable portal-filed NCMEC artifacts recorded on the case by the two step-up-gated\n // operator callables — the receipt artifact that gates `markNcmecPortalComplete`\n // (childSafetyCases/{caseId}/portalReceiptArtifacts/{artifactId}) and the correction record\n // that gates the corrected-no-apparent-violation disposition\n // (childSafetyCases/{caseId}/ncmecPortalCorrections/{correctionId}). Admin-SDK-only; both\n // segments were app-local literals until now.\n NCMEC_PORTAL_RECEIPT_ARTIFACTS: 'portalReceiptArtifacts',\n NCMEC_PORTAL_CORRECTIONS: 'ncmecPortalCorrections',\n // The single immutable completion-proof record bound to one NCMEC submission\n // (childSafetyCases/{caseId}/ncmecSubmissions/{submissionId}/ncmecCompletionProof/record).\n // A submission can never reach `completed` without this record existing — it is written\n // create-if-absent in the SAME transaction as the state transition.\n NCMEC_COMPLETION_PROOF: 'ncmecCompletionProof',\n\n // Trust & Safety — resource-command subcollections (§A3).\n SAFETY_RESOURCE_COMMAND_AUTHORIZED_REQUESTS: 'authorizedRequests',\n SAFETY_RESOURCE_COMMAND_BYPASS_REFS: 'bypassRefs',\n\n // Trust & Safety — evidence-job subcollections (§A4).\n SAFETY_EVIDENCE_JOB_ITEMS: 'safetyEvidenceJobItems',\n SAFETY_EVIDENCE_JOB_DISPOSITION: 'safetyEvidenceJobDisposition',\n\n // Trust & Safety — quarantine-saga subcollection (§A5).\n QUARANTINE_SAGA_RELATED_ASSETS: 'relatedAssets',\n\n // Trust & Safety — TAKE IT DOWN request subcollections (§A11). The restricted\n // requester-PII subcollection uses the shared `PRIVATE` constant above.\n TAKE_IT_DOWN_SUBMISSIONS: 'takeItDownSubmissions',\n TAKE_IT_DOWN_VALIDITY_DECISIONS: 'validityDecisions',\n TAKE_IT_DOWN_ACTIONS: 'takeItDownActions',\n TAKE_IT_DOWN_EVIDENCE: 'takeItDownEvidence',\n // The deletion-verification record the retention sweep keeps for each evidence object it removes\n // (…/takeItDownEvidenceDisposition/{evidenceId}). Its own subcollection, mirroring\n // `safetyEvidenceJobDisposition`, so `takeItDownActions` holds action rows only. Backend-only.\n TAKE_IT_DOWN_EVIDENCE_DISPOSITION: 'takeItDownEvidenceDisposition',\n // The RESTRICTED operator rationale row bound to one validity decision\n // (…/validityDecisions/{decisionId}/takeItDownValidityRationale/record) — the row the\n // decision's rationaleRef and the action's detailRef point at. Backend-only.\n TAKE_IT_DOWN_VALIDITY_RATIONALE: 'takeItDownValidityRationale',\n\n // Trust & Safety — NCII case subcollections (§A11).\n NCII_CASE_ALLEGATION_LINKS: 'allegationLinks',\n NCII_CASE_REQUEST_LINKS: 'requestLinks',\n NCII_CASE_REMOVAL_ACTIONS: 'removalActions',\n NCII_CASE_BLOCKED_HASHES: 'blockedHashes',\n // Append-only NCII case closure/reopen events (nciiCases/{caseId}/closureEvents/{eventId}).\n NCII_CASE_CLOSURE_EVENTS: 'closureEvents',\n\n // Trust & Safety — NCII removal-job targets (§A11).\n NCII_REMOVAL_TARGETS: 'nciiRemovalTargets',\n\n // Feedback lists under the server-only `_serverData/feedbackLists` container doc\n // (BACKEND-108): the alias map and the denylist submitFeedback consults via the Admin\n // SDK. Moved out of the top-level `feedbackAliases` / `feedbackDenylist` collections,\n // which were anonymously readable with no client reader.\n FEEDBACK_ALIASES: 'feedbackAliases',\n FEEDBACK_DENYLIST: 'feedbackDenylist',\n} as const;\n\n/**\n * SPECIAL DOCUMENT PATHS\n * Static document IDs for singleton documents\n */\nexport const SPECIAL_DOCS = {\n ADMIN_LIST: 'adminList',\n APP_CONFIG: 'app',\n // Charter→full app-mode marker doc (_systemData/appMode) that recordAppModeFlip writes.\n APP_MODE: 'appMode',\n FUTURE_PLANS: 'futurePlans',\n NOTIFICATION_SETTINGS: 'notificationSettings',\n // Hall viewing-state doc id under userProfiles/{uid}/privateData/ (hall-viewing-experience\n // Area 2, ruled 2026-07-04). Mirrors the NOTIFICATION_SETTINGS fixed-id privateData pattern.\n HALL_LIBRARY_PREFERENCES: 'hallLibraryPreferences',\n PROFANITY_LIST: 'profanityList',\n RESERVED_USERNAMES: 'reservedUsernames',\n BLOCKED_FRANCHISE_NAMES: 'blockedFranchiseNames',\n RULES_AND_AGREEMENTS: 'rulesAndAgreements',\n // _systemData/hallMediaReaperCursor — the reapOrphanedHallMediaCopies scan cursor\n // (highest `createdAt` the reaper has positively cleared). Backend-only.\n HALL_MEDIA_REAPER_CURSOR: 'hallMediaReaperCursor',\n // _systemData/publicUsersReconcilerCursor — the reconcilePublicUsers sweep cursor (last\n // userProfiles document id positively cleared; '' = start). Backend-only.\n PUBLIC_USERS_RECONCILER_CURSOR: 'publicUsersReconcilerCursor',\n // Editable content-page singletons under _appConfig (content-pages Firestore\n // migration, DJ ruling 2026-07-06): the ONLY source for /terms, /privacy, and\n // the /take-it-down page copy — no hardcoded fallbacks anywhere.\n TERMS_PAGE: 'termsOfService',\n PRIVACY_PAGE: 'privacyPolicy',\n TAKE_IT_DOWN_PAGE_COPY: 'takeItDownPageCopy',\n // Also the doc id of the pledge running-totals singleton (pledgePaymentTotals/summary).\n SUMMARY: 'summary',\n\n // Trust & Safety — singleton global SLA-monitor heartbeat (safetyMonitorHeartbeat/global).\n SAFETY_MONITOR_HEARTBEAT_GLOBAL: 'global',\n\n // Trust & Safety — _serverData (server-only) singletons (§A7, §A11). Moved out of the\n // public _appConfig bucket: their only readers are Cloud Functions (BACKEND-108).\n AGE_POLICY: 'agePolicy',\n NCII_POLICY: 'nciiPolicy',\n PRIVILEGED_REVIEWER_SECURITY: 'privilegedReviewerSecurity',\n\n // _serverData container doc for the two submitFeedback lists. It holds no fields — it\n // exists only as the parent of the feedbackAliases / feedbackDenylist subcollections,\n // which moved out of the anonymously-readable top-level collections (BACKEND-108).\n FEEDBACK_LISTS: 'feedbackLists',\n\n // Trust & Safety — fixed-id TAKE IT DOWN request subdocs (§A11).\n TAKE_IT_DOWN_REQUESTER: 'requester', // takeItDownRequests/{requestId}/privateDetails/requester\n\n // The fixed doc id of a one-per-parent singleton row: the NCMEC completion proof\n // (…/ncmecCompletionProof/record) and the TAKE IT DOWN validity rationale\n // (…/takeItDownValidityRationale/record). ONE shared value serves both — never split.\n RECORD: 'record',\n\n // The Work's single hall-entry reservation doc (…/hallSubmissionReservation/reservation).\n HALL_SUBMISSION_RESERVATION: 'reservation',\n\n // Trust & Safety — fixed-id report-spine private subdocs (§A1).\n REPORT_SNAPSHOT: 'snapshot', // contentReports/{reportId}/privateDetails/snapshot\n REPORT_NARRATIVE: 'narrative', // contentReports/{reportId}/privateDetails/narrative\n // contentReports/{reportId}/privateDetails/narrativeEscalation — the NEW narrative typed\n // when an EXISTING ordinary report is escalated into a protected case (the original\n // narrative doc already exists, so a re-create would collide).\n REPORT_NARRATIVE_ESCALATION: 'narrativeEscalation',\n} as const;\n"]}
|
|
1
|
+
{"version":3,"file":"collections.js","sourceRoot":"","sources":["../../src/paths/collections.ts"],"names":[],"mappings":"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","sourcesContent":["// Firestore collection name constants — canonical source of truth\n// Changes to these values require database migration.\n\nimport type { WorkProjectType } from '../types/content.js';\n\n/**\n * TOP-LEVEL COLLECTIONS\n */\nexport const COLLECTIONS = {\n // Core entities\n USER_PROFILES: 'userProfiles',\n PUBLIC_USERS: 'publicUsers',\n ALL_WORK_PROJECTS: 'allWorkProjects',\n PUBLIC_WORK_PROJECTS: 'publicWorkProjects',\n WORK_REALMS: 'workRealms',\n\n // Content & Social\n SQUARE_STREETZ_FEED: 'squareStreetzFeed',\n THRESHOLD_ITEMS: 'thresholdItems',\n HALL_ITEMS: 'hallItems',\n HALL_CONTENT_CHANGE_REQUESTS: 'hallContentChangeRequests',\n COMMISSION_LISTINGS: 'commissionListings',\n AUDITION_BOARD: 'auditionBoard',\n FOLLOW_EDGES: 'followEdges',\n FOLLOW_COUNTERS: 'followCounters',\n\n // System & Utility\n RESERVED_DISPLAY_NAMES: 'reservedDisplayNames',\n RESERVED_REALM_NAMES: 'reservedRealmNames',\n ACCOUNT_DELETION_REQUESTS: 'accountDeletionRequests',\n CONTENT_REPORTS: 'contentReports',\n PENDING_MEDIA: 'pendingMedia',\n PENDING_MEDIA_ARCHIVE: 'pendingMediaArchive',\n MEDIA_ASSETS: 'mediaAssets',\n MEDIA_ACTIVATION_JOBS: 'mediaActivationJobs',\n PENDING_ADMIN_DISPATCHES: 'pendingAdminDispatches',\n ACTIVE_REPORT_GROUPS: 'activeReportGroups',\n CONTENT_VIOLATIONS: 'contentViolations',\n ADMIN_TASKS: 'adminTasks',\n SHORT_LINKS: 'shortLinks',\n GUILD_INVITE_CONVERSATIONS: 'guildInviteConversations',\n STAKE_SHARE_AUDIT_EVENTS: 'stakeShareAuditEvents',\n MODERATION_CASCADE_MANIFESTS: 'moderationCascadeManifests',\n // Backend-only append-only audit ledger (audit-core shape; auditEvents/{eventId}). Was a\n // rules-only name written through a literal until the constant landed here.\n AUDIT_EVENTS: 'auditEvents',\n\n // Notification system\n ACTIVE_USER_NOTIFICATIONS: 'activeUserNotifications',\n ACTIVE_ADMIN_NOTIFICATIONS: 'activeAdminNotifications',\n ADMIN_NOTIFICATION_HISTORY: 'adminNotificationHistory',\n PENDING_NOTIFICATIONS: 'pendingNotifications',\n\n // Notification redesign — delivery ledger + unified fanout engine (Admin-SDK-only).\n NOTIFICATION_DELIVERIES: 'notificationDeliveries',\n NOTIFICATION_FANOUT_JOBS: 'notificationFanoutJobs',\n // Server-owned \"archive all\" jobs (one per user+category+requestId; CF-only, never\n // client-readable — the client learns state through getArchiveAllStatus).\n NOTIFICATION_ARCHIVE_ALL_JOBS: 'notificationArchiveAllJobs',\n\n // Chat realtime sync / projection / command collections (Admin-SDK-only).\n CHAT_CHANNEL_AUTH_PROJECTIONS: 'chatChannelAuthProjections',\n CHAT_SCOPE_DEGRADED: 'chatScopeDegraded',\n CHAT_SYNC_EVENTS: 'chatSyncEvents',\n CHAT_SYNC_FANOUT_JOBS: 'chatSyncFanoutJobs',\n CHAT_MESSAGE_OUTBOX: 'chatMessageOutbox',\n CHAT_ADMIN_ACTION_COMMANDS: 'chatAdminActionCommands',\n CHAT_HISTORY_ANONYMIZATION_JOBS: 'chatHistoryAnonymizationJobs',\n\n // Square Streetz announcement outbox (Admin-SDK-only): durable jobs enqueued in the\n // announcing domain's transaction and drained by the outbox trigger worker. Job ids\n // are deterministic so a replayed transaction collides instead of duplicating —\n // ALWAYS derive them via buildSquareAnnouncementJobId (doc-schemas/square-announcement-jobs.ts).\n SQUARE_ANNOUNCEMENT_JOBS: 'squareAnnouncementJobs',\n\n // Feedback & Metadata\n FEEDBACK_SUBMISSIONS: 'feedbackSubmissions',\n CRAFT_SKILLS_BY_TAG: 'craftSkillsByTag',\n SYSTEM_DATA: '_systemData',\n APP_CONFIG: '_appConfig',\n // Server-only singleton bucket (BACKEND-108 — least-privileged reader). Docs whose ONLY\n // readers are Cloud Functions (Admin SDK) live here, never in the public `_appConfig`\n // bucket. Firestore rules deny all client reads/writes on `_serverData`.\n // Docs: agePolicy, nciiPolicy, privilegedReviewerSecurity, and the feedbackLists\n // container whose feedbackAliases / feedbackDenylist subcollections back submitFeedback.\n SERVER_DATA: '_serverData',\n\n // Payments & pledge ledger\n PLEDGE_PAYMENTS: 'pledgePayments',\n PLEDGE_PAYMENT_PROVIDER_REFS: 'pledgePaymentProviderRefs',\n PROCESSED_STRIPE_EVENTS: 'processedStripeEvents',\n PLEDGE_PAYMENT_LEDGER_EVENTS: 'pledgePaymentLedgerEvents',\n PAYMENT_WEBHOOK_QUARANTINE: 'paymentWebhookQuarantine',\n // Running-totals singleton (pledgePaymentTotals/current) — auth-readable, server-only writes.\n PLEDGE_PAYMENT_TOTALS: 'pledgePaymentTotals',\n // User-initiated pledge refund requests (post-launch handler; keyed by requestId). No Stripe ids\n // here — those stay on pledgePaymentProviderRefs. Server-only writes.\n PLEDGE_REFUND_REQUESTS: 'pledgeRefundRequests',\n\n // Trust & Safety — child-safety case spine (§A1b, §A2)\n CHILD_SAFETY_CASE_LIST: 'childSafetyCaseList',\n CHILD_SAFETY_CASES: 'childSafetyCases',\n CHILD_SAFETY_OWNING_ALIASES: 'childSafetyOwningAliases',\n\n // Trust & Safety — time-sensitive admin-tray \"case needs work\" pins (admin-readable\n // projection; the 5th notification-tray tab reads it, the Safety Case Console owns detail).\n ACTIVE_SAFETY_CASE_ALERTS: 'activeSafetyCaseAlerts',\n\n // Trust & Safety — holds + resource commands (§A3)\n SAFETY_HOLD_REFS: 'safetyHoldRefs',\n SAFETY_HOLD_RESOURCES: 'safetyHoldResources',\n SAFETY_RESOURCE_COMMANDS: 'safetyResourceCommands',\n\n // Trust & Safety — evidence + provenance (§A4, §A6)\n SAFETY_EVIDENCE_MANIFESTS: 'safetyEvidenceManifests',\n SAFETY_EVIDENCE_JOBS: 'safetyEvidenceJobs',\n EVENT_PROVENANCE: 'eventProvenance',\n\n // Trust & Safety — sagas + closure (§A5)\n QUARANTINE_SAGA_JOBS: 'quarantineSagaJobs',\n NCMEC_SUBMISSION_JOBS: 'ncmecSubmissionJobs',\n ACCOUNT_ACTION_COMMANDS: 'accountActionCommands',\n\n // Trust & Safety — SLA monitors + heartbeat (§A8)\n SAFETY_SLA_MONITORS: 'safetySlaMonitors',\n SAFETY_MONITOR_HEARTBEAT: 'safetyMonitorHeartbeat',\n\n // Trust & Safety — age attestation nonces (§A7)\n AGE_ATTESTATION_NONCES: 'ageAttestationNonces',\n\n // Trust & Safety — NCII / TAKE IT DOWN (§A11)\n NCII_ALLEGATIONS: 'nciiAllegations',\n TAKE_IT_DOWN_REQUESTS: 'takeItDownRequests',\n NCII_CASES: 'nciiCases',\n NCII_TEMPORARY_HOLDS: 'nciiTemporaryHolds',\n NCII_REMOVAL_JOBS: 'nciiRemovalJobs',\n // [H-01] durable operator-visible inventory of NCII-evidence objects RETAINED but never recorded\n // as evidence (orphan / oversized / spoof / unknown-reference). Never auto-deleted.\n NCII_RETAINED_EVIDENCE_INVENTORY: 'nciiRetainedEvidenceInventory',\n // [H-01] app-only dead-letter sink for NCII retained-evidence inventory rows that could not be\n // written to the primary nciiRetainedEvidenceInventory collection (e.g. write failure during\n // the onNciiEvidenceUploaded trigger). Never auto-deleted; operator-visible for manual triage.\n NCII_INVENTORY_DEAD_LETTER: 'nciiInventoryDeadLetter',\n\n // Backend-only retry queue for post-commit auth-effect reconciliation: when an account-status\n // change committed to Firestore but the follow-on Auth effect (custom-claim / disable) failed,\n // a queue entry keyed by uid drives a retry loop toward the target status. Admin-SDK-only.\n STATUS_RECONCILE_QUEUE: 'statusReconcileQueue',\n\n // Trust & Safety — [H-08] per-operator TOTP step-up state (secret + active grant window),\n // keyed by uid. Cloud-Functions-only: the secret is returned to the client exactly once by\n // the enroll callable and is NEVER readable through Firestore.\n OPERATOR_STEP_UP: 'operatorStepUp',\n\n // Trust & Safety — one persisted pagination-cursor doc per reconciler needs-work backstop\n // sweep (quarantine enqueue, NCMEC enqueue), keyed by the sweep's cursor key. Admin-SDK-only.\n SAFETY_RECONCILER_CURSORS: 'safetyReconcilerCursors',\n\n // Durable per-sweep cadence/cursor state for the scheduled user sweeps, keyed by the sweep\n // name (orphanRegistrationCleanup, reconcileAccountStatus). Wall-clock stamps that survive a\n // container recycle, so a \"~once/day\" or \"~once/week\" pass fires on real elapsed time instead\n // of an in-memory counter. Admin-SDK-only.\n SWEEP_STATE: 'sweepState',\n\n // Versioned public documents (Terms, Privacy, Rules & Agreements, Future Plans, DMCA,\n // Take It Down copy). `publicDocuments/{documentId}` is a field-less container whose\n // `publicDocumentVersions` subcollection holds the immutable published versions; the one\n // private working copy per document and the release records are top-level. All three are\n // backend-written; the public reads the `_appConfig/{documentId}` current projection.\n PUBLIC_DOCUMENTS: 'publicDocuments',\n PUBLIC_DOCUMENT_DRAFTS: 'publicDocumentDrafts',\n PUBLIC_DOCUMENT_RELEASES: 'publicDocumentReleases',\n} as const;\n\n/**\n * USER PROFILE SUBCOLLECTIONS\n * Nested under userProfiles/{userId}/\n */\nexport const USER_SUBCOLLECTIONS = {\n PROFILE_CRAFT_SKILLS: 'profileCraftSkills',\n PRIVATE_DATA: 'privateData',\n USER_METADATA: 'userMetadata',\n USER_LIKES: 'userLikes',\n MENTION_HISTORY: 'mentionHistory',\n AUDITION_VOTES: 'auditionVotes',\n // Archived personal notification history (userProfiles/{uid}/notificationHistory/{id}).\n NOTIFICATION_HISTORY: 'notificationHistory',\n} as const;\n\n/**\n * WORKPROJECT SUBCOLLECTIONS\n * Nested under allWorkProjects/{workProjectId}/\n */\nexport const WORK_PROJECT_SUBCOLLECTIONS = {\n WORK_PROJECT_TALES: 'workProjectTales',\n WORK_PROJECT_TUNES: 'workProjectTunes',\n WORK_PROJECT_TELEVISION: 'workProjectTelevision',\n GUILDMATE_USERS: 'guildmateUsers',\n PUBLIC_GUILDMATE_USERS: 'publicGuildmateUsers',\n WORK_FILE_FOLDERS: 'workFileFolders',\n GUILD_CHAT_CHANNELS: 'guildChatChannels',\n // The Work's single hall-entry reservation (allWorkProjects/{id}/hallSubmissionReservation/\n // reservation): claimed create-only inside the first threshold submit's transaction so a\n // project can only ever own ONE hall item.\n HALL_SUBMISSION_RESERVATION: 'hallSubmissionReservation',\n} as const;\n\n/**\n * WORKREALM SUBCOLLECTIONS\n * Nested under workRealms/{workRealmId}/\n */\nexport const WORK_REALM_SUBCOLLECTIONS = {\n // The Realm steward's folders for the realm shared-file pool. The FILES themselves are\n // never docs here — a shared file stays a `workFile` under its owning Work and carries\n // `realmFileFolderId` on its mediaAssets doc.\n REALM_FILE_FOLDERS: 'realmFileFolders',\n} as const;\n\n/**\n * HALL ITEM SUBCOLLECTIONS\n * Nested under hallItems/{hallItemId}/ — the PUBLISHED sub-item projections\n * (chapters/tracks/episodes copied out of the Work at publish time by\n * runPublishApprovedHallLibraryItem).\n *\n * The segment is an INDEPENDENT compound-camelCase collection name (ARCH-104) — it is\n * NOT any transformation of `WorkProjectType`. Map a work type to its segment through\n * HALL_ITEM_SUBCOLLECTION_BY_WORK_TYPE; `workProjectType.toLowerCase()` is not merely\n * discouraged, it produces a segment that DOES NOT EXIST ('tales', 'tunes',\n * 'television'), so the resulting path silently reads/writes an empty collection.\n */\nexport const HALL_ITEM_SUBCOLLECTIONS = {\n TALES: 'hallItemTales',\n TUNES: 'hallItemTunes',\n TELEVISION: 'hallItemTelevision',\n} as const;\n\nexport type HallItemSubcollection =\n (typeof HALL_ITEM_SUBCOLLECTIONS)[keyof typeof HALL_ITEM_SUBCOLLECTIONS];\n\n/** WorkProjectType → published hall sub-item subcollection segment. */\nexport const HALL_ITEM_SUBCOLLECTION_BY_WORK_TYPE: Record<WorkProjectType, HallItemSubcollection> = {\n Tales: HALL_ITEM_SUBCOLLECTIONS.TALES,\n Tunes: HALL_ITEM_SUBCOLLECTIONS.TUNES,\n Television: HALL_ITEM_SUBCOLLECTIONS.TELEVISION,\n};\n\n/**\n * DEEPLY NESTED SUBCOLLECTIONS\n * Third level and beyond\n */\nexport const NESTED_SUBCOLLECTIONS = {\n // Content subcollections\n TALE_CHAPTERS: 'taleChapters',\n TUNE_TRACKS: 'tuneTracks',\n TELEVISION_EPISODES: 'televisionEpisodes',\n\n // Work-project file folders (S7): files nested under each folder.\n WORK_FILES: 'workFiles',\n\n // Communication — guild channel + invite messages are REALTIME-ONLY (chat Worker\n // Durable Object, never Firestore); only admin-support conversationMessages persist here.\n CONVERSATION_MESSAGES: 'conversationMessages',\n\n // Conversation Files — the flat per-conversation file list. Nested under the\n // conversation's NATURAL Firestore parent, so the same subcollection segment serves\n // both supported scopes:\n // guildInviteConversations/{guildInviteId}/conversationFiles/{conversationFileId}\n // pendingAdminDispatches/{adminDispatchId}/conversationFiles/{conversationFileId}\n // Guild chat channels deliberately have NO conversationFiles subcollection.\n CONVERSATION_FILES: 'conversationFiles',\n\n // SquareStreetz & Social\n SOCIAL_POSTS: 'socialPosts',\n ACTIVE_POSTS: 'activePosts',\n TRENDING_POSTS: 'trendingPosts',\n\n // Commissions & Auditions\n COMMISSION_PROPOSALS: 'commissionProposals',\n AUDITION_ENTRIES: 'auditionEntries',\n\n // User history\n LIKE_HISTORY: 'likeHistory',\n SQUARE_STREETZ_LIKES: 'squareStreetzLikes',\n\n // Craft Skills & Feedback\n TAGGED_CRAFT_SKILLS: 'taggedCraftSkills',\n USER_SUGGESTIONS: 'userSuggestions',\n\n // Moderation\n CHANGED_DOCS: 'changedDocs',\n\n // Trust & Safety — report spine (§A1): the public, reporter-identity-free projection\n // is a deterministic child of the protected report root\n // (contentReports/{reportId}/publicProjection/{reportId}).\n REPORT_PUBLIC_PROJECTION: 'publicProjection',\n // Per-report idempotency markers under a report group\n // (activeReportGroups/{groupKey}/reportGroupCountedReports/{reportId}): the group's\n // totalReports increment is gated on the marker's ABSENCE, so a redelivered create event\n // never double-counts. Backend-only.\n REPORT_GROUP_COUNTED_REPORTS: 'reportGroupCountedReports',\n // Restricted reporter/requester PII subcollection, shared by the report spine\n // (contentReports/{reportId}/privateDetails/{snapshot,narrative}) and TAKE IT DOWN\n // (takeItDownRequests/{requestId}/privateDetails/requester). ONE shared compound value\n // serves both parents — never split per parent. Admin-read-only / server-only.\n PRIVATE: 'privateDetails',\n\n // Chat degraded-scope causes\n // (chatScopeDegraded/{scopeKey}/chatScopeDegradedCauses/{causeId}).\n CHAT_SCOPE_DEGRADED_CAUSES: 'chatScopeDegradedCauses',\n // Anonymization affected-chunk set (chatHistoryAnonymizationJobs/{jobId}/affectedChunks/{chunkOrdinal}).\n CHAT_ANONYMIZATION_AFFECTED_CHUNKS: 'affectedChunks',\n\n // Trust & Safety — child-safety case append-only detail (NEVER arrays).\n CHILD_SAFETY_SOURCE_SIGNALS: 'sourceSignals',\n CHILD_SAFETY_DECISIONS: 'childSafetyDecisions',\n CHILD_SAFETY_DECISION_VIEWS: 'childSafetyDecisionViews',\n CHILD_SAFETY_CASE_ACCOUNTS: 'childSafetyCaseAccounts',\n CHILD_SAFETY_CASE_ACCOUNT_HISTORY: 'childSafetyCaseAccountHistory',\n CHILD_SAFETY_NCMEC_SUBMISSIONS: 'ncmecSubmissions',\n CHILD_SAFETY_NCMEC_SUBMISSION_FILES: 'ncmecSubmissionFiles',\n // Per-submission NCMEC transmission attempts\n // (childSafetyCases/{caseId}/ncmecSubmissions/{submissionId}/ncmecSubmissionAttempts/{attemptId}).\n // Rules-only until now — registered here so the segment has a single owner.\n NCMEC_SUBMISSION_ATTEMPTS: 'ncmecSubmissionAttempts',\n CHILD_SAFETY_LEGAL_PROCESS: 'legalProcess',\n // Immutable portal-filed NCMEC artifacts recorded on the case by the two step-up-gated\n // operator callables — the receipt artifact that gates `markNcmecPortalComplete`\n // (childSafetyCases/{caseId}/portalReceiptArtifacts/{artifactId}) and the correction record\n // that gates the corrected-no-apparent-violation disposition\n // (childSafetyCases/{caseId}/ncmecPortalCorrections/{correctionId}). Admin-SDK-only; both\n // segments were app-local literals until now.\n NCMEC_PORTAL_RECEIPT_ARTIFACTS: 'portalReceiptArtifacts',\n NCMEC_PORTAL_CORRECTIONS: 'ncmecPortalCorrections',\n // The single immutable completion-proof record bound to one NCMEC submission\n // (childSafetyCases/{caseId}/ncmecSubmissions/{submissionId}/ncmecCompletionProof/record).\n // A submission can never reach `completed` without this record existing — it is written\n // create-if-absent in the SAME transaction as the state transition.\n NCMEC_COMPLETION_PROOF: 'ncmecCompletionProof',\n\n // Trust & Safety — resource-command subcollections (§A3).\n SAFETY_RESOURCE_COMMAND_AUTHORIZED_REQUESTS: 'authorizedRequests',\n SAFETY_RESOURCE_COMMAND_BYPASS_REFS: 'bypassRefs',\n\n // Trust & Safety — evidence-job subcollections (§A4).\n SAFETY_EVIDENCE_JOB_ITEMS: 'safetyEvidenceJobItems',\n SAFETY_EVIDENCE_JOB_DISPOSITION: 'safetyEvidenceJobDisposition',\n\n // Trust & Safety — quarantine-saga subcollection (§A5).\n QUARANTINE_SAGA_RELATED_ASSETS: 'relatedAssets',\n\n // Trust & Safety — TAKE IT DOWN request subcollections (§A11). The restricted\n // requester-PII subcollection uses the shared `PRIVATE` constant above.\n TAKE_IT_DOWN_SUBMISSIONS: 'takeItDownSubmissions',\n TAKE_IT_DOWN_VALIDITY_DECISIONS: 'validityDecisions',\n TAKE_IT_DOWN_ACTIONS: 'takeItDownActions',\n TAKE_IT_DOWN_EVIDENCE: 'takeItDownEvidence',\n // The deletion-verification record the retention sweep keeps for each evidence object it removes\n // (…/takeItDownEvidenceDisposition/{evidenceId}). Its own subcollection, mirroring\n // `safetyEvidenceJobDisposition`, so `takeItDownActions` holds action rows only. Backend-only.\n TAKE_IT_DOWN_EVIDENCE_DISPOSITION: 'takeItDownEvidenceDisposition',\n // The RESTRICTED operator rationale row bound to one validity decision\n // (…/validityDecisions/{decisionId}/takeItDownValidityRationale/record) — the row the\n // decision's rationaleRef and the action's detailRef point at. Backend-only.\n TAKE_IT_DOWN_VALIDITY_RATIONALE: 'takeItDownValidityRationale',\n\n // Trust & Safety — NCII case subcollections (§A11).\n NCII_CASE_ALLEGATION_LINKS: 'allegationLinks',\n NCII_CASE_REQUEST_LINKS: 'requestLinks',\n NCII_CASE_REMOVAL_ACTIONS: 'removalActions',\n NCII_CASE_BLOCKED_HASHES: 'blockedHashes',\n // Append-only NCII case closure/reopen events (nciiCases/{caseId}/closureEvents/{eventId}).\n NCII_CASE_CLOSURE_EVENTS: 'closureEvents',\n\n // Trust & Safety — NCII removal-job targets (§A11).\n NCII_REMOVAL_TARGETS: 'nciiRemovalTargets',\n\n // Feedback lists under the server-only `_serverData/feedbackLists` container doc\n // (BACKEND-108): the alias map and the denylist submitFeedback consults via the Admin\n // SDK. Moved out of the top-level `feedbackAliases` / `feedbackDenylist` collections,\n // which were anonymously readable with no client reader.\n FEEDBACK_ALIASES: 'feedbackAliases',\n FEEDBACK_DENYLIST: 'feedbackDenylist',\n\n // Immutable published versions of one public document\n // (publicDocuments/{documentId}/publicDocumentVersions/{versionId}).\n PUBLIC_DOCUMENT_VERSIONS: 'publicDocumentVersions',\n} as const;\n\n/**\n * SPECIAL DOCUMENT PATHS\n * Static document IDs for singleton documents\n */\nexport const SPECIAL_DOCS = {\n ADMIN_LIST: 'adminList',\n APP_CONFIG: 'app',\n // Charter→full app-mode marker doc (_systemData/appMode) that recordAppModeFlip writes.\n APP_MODE: 'appMode',\n FUTURE_PLANS: 'futurePlans',\n NOTIFICATION_SETTINGS: 'notificationSettings',\n // Hall viewing-state doc id under userProfiles/{uid}/privateData/ (hall-viewing-experience\n // Area 2, ruled 2026-07-04). Mirrors the NOTIFICATION_SETTINGS fixed-id privateData pattern.\n HALL_LIBRARY_PREFERENCES: 'hallLibraryPreferences',\n PROFANITY_LIST: 'profanityList',\n RESERVED_USERNAMES: 'reservedUsernames',\n BLOCKED_FRANCHISE_NAMES: 'blockedFranchiseNames',\n RULES_AND_AGREEMENTS: 'rulesAndAgreements',\n // _systemData/hallMediaReaperCursor — the reapOrphanedHallMediaCopies scan cursor\n // (highest `createdAt` the reaper has positively cleared). Backend-only.\n HALL_MEDIA_REAPER_CURSOR: 'hallMediaReaperCursor',\n // _systemData/publicUsersReconcilerCursor — the reconcilePublicUsers sweep cursor (last\n // userProfiles document id positively cleared; '' = start). Backend-only.\n PUBLIC_USERS_RECONCILER_CURSOR: 'publicUsersReconcilerCursor',\n // Editable content-page singletons under _appConfig (content-pages Firestore\n // migration, DJ ruling 2026-07-06): the ONLY source for /terms, /privacy, and\n // the /take-it-down page copy — no hardcoded fallbacks anywhere.\n TERMS_PAGE: 'termsOfService',\n PRIVACY_PAGE: 'privacyPolicy',\n TAKE_IT_DOWN_PAGE_COPY: 'takeItDownPageCopy',\n // The /dmca page's current projection (_appConfig/dmcaPolicy). Each of these page ids is\n // also that document's PublicDocumentId (constants/public-documents.ts).\n DMCA_POLICY: 'dmcaPolicy',\n // Also the doc id of the pledge running-totals singleton (pledgePaymentTotals/summary).\n SUMMARY: 'summary',\n\n // Trust & Safety — singleton global SLA-monitor heartbeat (safetyMonitorHeartbeat/global).\n SAFETY_MONITOR_HEARTBEAT_GLOBAL: 'global',\n\n // Trust & Safety — _serverData (server-only) singletons (§A7, §A11). Moved out of the\n // public _appConfig bucket: their only readers are Cloud Functions (BACKEND-108).\n AGE_POLICY: 'agePolicy',\n NCII_POLICY: 'nciiPolicy',\n PRIVILEGED_REVIEWER_SECURITY: 'privilegedReviewerSecurity',\n\n // _serverData container doc for the two submitFeedback lists. It holds no fields — it\n // exists only as the parent of the feedbackAliases / feedbackDenylist subcollections,\n // which moved out of the anonymously-readable top-level collections (BACKEND-108).\n FEEDBACK_LISTS: 'feedbackLists',\n\n // Trust & Safety — fixed-id TAKE IT DOWN request subdocs (§A11).\n TAKE_IT_DOWN_REQUESTER: 'requester', // takeItDownRequests/{requestId}/privateDetails/requester\n\n // The fixed doc id of a one-per-parent singleton row: the NCMEC completion proof\n // (…/ncmecCompletionProof/record) and the TAKE IT DOWN validity rationale\n // (…/takeItDownValidityRationale/record). ONE shared value serves both — never split.\n RECORD: 'record',\n\n // The Work's single hall-entry reservation doc (…/hallSubmissionReservation/reservation).\n HALL_SUBMISSION_RESERVATION: 'reservation',\n\n // Trust & Safety — fixed-id report-spine private subdocs (§A1).\n REPORT_SNAPSHOT: 'snapshot', // contentReports/{reportId}/privateDetails/snapshot\n REPORT_NARRATIVE: 'narrative', // contentReports/{reportId}/privateDetails/narrative\n // contentReports/{reportId}/privateDetails/narrativeEscalation — the NEW narrative typed\n // when an EXISTING ordinary report is escalated into a protected case (the original\n // narrative doc already exists, so a re-create would collide).\n REPORT_NARRATIVE_ESCALATION: 'narrativeEscalation',\n} as const;\n"]}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { type HallItemSubcollection } from './collections.js';
|
|
2
2
|
import type { FollowableTargetType } from '../schemas/social.js';
|
|
3
3
|
import type { WorkProjectType } from '../types/content.js';
|
|
4
|
+
import type { PublicDocumentId } from '../constants/public-documents.js';
|
|
5
|
+
/** The doc id of a published public-document version: `v1`, `v2`, … (whole numbers from 1). */
|
|
6
|
+
export declare const publicDocumentVersionDocId: (version: number) => string;
|
|
4
7
|
export declare const PATH_BUILDERS: {
|
|
5
8
|
readonly userProfile: (userId: string) => [string, string];
|
|
6
9
|
readonly publicUser: (uid: string) => [string, string];
|
|
@@ -107,6 +110,11 @@ export declare const PATH_BUILDERS: {
|
|
|
107
110
|
readonly termsPage: () => [string, string];
|
|
108
111
|
readonly privacyPage: () => [string, string];
|
|
109
112
|
readonly takeItDownPageCopy: () => [string, string];
|
|
113
|
+
readonly dmcaPolicy: () => [string, string];
|
|
114
|
+
readonly publicDocumentProjection: (documentId: PublicDocumentId) => [string, string];
|
|
115
|
+
readonly publicDocumentVersion: (documentId: PublicDocumentId, version: number) => [string, string, string, string];
|
|
116
|
+
readonly publicDocumentDraft: (documentId: PublicDocumentId) => [string, string];
|
|
117
|
+
readonly publicDocumentRelease: (releaseId: string) => [string, string];
|
|
110
118
|
readonly appConfig: () => [string, string];
|
|
111
119
|
readonly appModeMarker: () => [string, string];
|
|
112
120
|
readonly hallMediaReaperCursor: () => [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;AAC3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEzE,+FAA+F;AAC/F,eAAO,MAAM,0BAA0B,GAAI,SAAS,MAAM,KAAG,MAK5D,CAAC;AAEF,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;sDAK1B,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;uDAGxB,MAAM,KAAG,CAAC,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;+BAGxB,CAAC,MAAM,EAAE,MAAM,CAAC;oDAMO,gBAAgB,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;iDAItC,gBAAgB,WAAW,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;+CAItE,gBAAgB,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;gDAGlC,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC;8BAG7C,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"}
|
|
@@ -3,6 +3,13 @@
|
|
|
3
3
|
// Frontend (Web SDK): doc(db, ...PATH_BUILDERS.userProfile(userId))
|
|
4
4
|
// Backend (Admin SDK): db.doc(toPath(PATH_BUILDERS.userProfile(userId)))
|
|
5
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
|
+
/** The doc id of a published public-document version: `v1`, `v2`, … (whole numbers from 1). */
|
|
7
|
+
export const publicDocumentVersionDocId = (version) => {
|
|
8
|
+
if (!Number.isInteger(version) || version < 1) {
|
|
9
|
+
throw new Error(`public document versions are whole numbers from 1 (got ${version})`);
|
|
10
|
+
}
|
|
11
|
+
return `v${version}`;
|
|
12
|
+
};
|
|
6
13
|
export const PATH_BUILDERS = {
|
|
7
14
|
// ===== USER PATHS =====
|
|
8
15
|
userProfile: (userId) => [COLLECTIONS.USER_PROFILES, userId],
|
|
@@ -183,6 +190,16 @@ export const PATH_BUILDERS = {
|
|
|
183
190
|
termsPage: () => [COLLECTIONS.APP_CONFIG, SPECIAL_DOCS.TERMS_PAGE],
|
|
184
191
|
privacyPage: () => [COLLECTIONS.APP_CONFIG, SPECIAL_DOCS.PRIVACY_PAGE],
|
|
185
192
|
takeItDownPageCopy: () => [COLLECTIONS.APP_CONFIG, SPECIAL_DOCS.TAKE_IT_DOWN_PAGE_COPY],
|
|
193
|
+
dmcaPolicy: () => [COLLECTIONS.APP_CONFIG, SPECIAL_DOCS.DMCA_POLICY],
|
|
194
|
+
// ===== PUBLIC DOCUMENTS (versioned releases) =====
|
|
195
|
+
// The public current projection of any public document. The id IS the `_appConfig` doc id,
|
|
196
|
+
// so this and the per-page builders above (termsPage(), dmcaPolicy(), …) name the same docs.
|
|
197
|
+
publicDocumentProjection: (documentId) => [COLLECTIONS.APP_CONFIG, documentId],
|
|
198
|
+
// One immutable published version (doc id `v{version}`).
|
|
199
|
+
publicDocumentVersion: (documentId, version) => [COLLECTIONS.PUBLIC_DOCUMENTS, documentId, NESTED_SUBCOLLECTIONS.PUBLIC_DOCUMENT_VERSIONS, publicDocumentVersionDocId(version)],
|
|
200
|
+
// The one private working copy of a document.
|
|
201
|
+
publicDocumentDraft: (documentId) => [COLLECTIONS.PUBLIC_DOCUMENT_DRAFTS, documentId],
|
|
202
|
+
publicDocumentRelease: (releaseId) => [COLLECTIONS.PUBLIC_DOCUMENT_RELEASES, releaseId],
|
|
186
203
|
appConfig: () => [COLLECTIONS.APP_CONFIG, SPECIAL_DOCS.APP_CONFIG],
|
|
187
204
|
appModeMarker: () => [COLLECTIONS.SYSTEM_DATA, SPECIAL_DOCS.APP_MODE],
|
|
188
205
|
// Singleton scan cursor for the scheduled Hall media orphan reaper
|
|
@@ -1 +1 @@
|
|
|
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 // Active notification cards. Category chooses the lane; these builders keep the\n // category config, direct-card writers, and archive flow on the same collection names.\n activeUserNotification: (notificationId: string): [string, string] =>\n [COLLECTIONS.ACTIVE_USER_NOTIFICATIONS, notificationId],\n\n activeAdminNotification: (notificationId: string): [string, string] =>\n [COLLECTIONS.ACTIVE_ADMIN_NOTIFICATIONS, notificationId],\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"]}
|
|
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';\nimport type { PublicDocumentId } from '../constants/public-documents.js';\n\n/** The doc id of a published public-document version: `v1`, `v2`, … (whole numbers from 1). */\nexport const publicDocumentVersionDocId = (version: number): string => {\n if (!Number.isInteger(version) || version < 1) {\n throw new Error(`public document versions are whole numbers from 1 (got ${version})`);\n }\n return `v${version}`;\n};\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 // Active notification cards. Category chooses the lane; these builders keep the\n // category config, direct-card writers, and archive flow on the same collection names.\n activeUserNotification: (notificationId: string): [string, string] =>\n [COLLECTIONS.ACTIVE_USER_NOTIFICATIONS, notificationId],\n\n activeAdminNotification: (notificationId: string): [string, string] =>\n [COLLECTIONS.ACTIVE_ADMIN_NOTIFICATIONS, notificationId],\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 dmcaPolicy: (): [string, string] =>\n [COLLECTIONS.APP_CONFIG, SPECIAL_DOCS.DMCA_POLICY],\n\n // ===== PUBLIC DOCUMENTS (versioned releases) =====\n // The public current projection of any public document. The id IS the `_appConfig` doc id,\n // so this and the per-page builders above (termsPage(), dmcaPolicy(), …) name the same docs.\n publicDocumentProjection: (documentId: PublicDocumentId): [string, string] =>\n [COLLECTIONS.APP_CONFIG, documentId],\n\n // One immutable published version (doc id `v{version}`).\n publicDocumentVersion: (documentId: PublicDocumentId, version: number): [string, string, string, string] =>\n [COLLECTIONS.PUBLIC_DOCUMENTS, documentId, NESTED_SUBCOLLECTIONS.PUBLIC_DOCUMENT_VERSIONS, publicDocumentVersionDocId(version)],\n\n // The one private working copy of a document.\n publicDocumentDraft: (documentId: PublicDocumentId): [string, string] =>\n [COLLECTIONS.PUBLIC_DOCUMENT_DRAFTS, documentId],\n\n publicDocumentRelease: (releaseId: string): [string, string] =>\n [COLLECTIONS.PUBLIC_DOCUMENT_RELEASES, releaseId],\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"]}
|