@ttt-productions/ttt-core 0.79.54 → 0.79.55
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/doc-schemas/index.d.ts +1 -0
- package/dist/doc-schemas/index.d.ts.map +1 -1
- package/dist/doc-schemas/index.js +1 -0
- package/dist/doc-schemas/index.js.map +1 -1
- package/dist/doc-schemas/media-copy-intents.d.ts +41 -0
- package/dist/doc-schemas/media-copy-intents.d.ts.map +1 -0
- package/dist/doc-schemas/media-copy-intents.js +40 -0
- package/dist/doc-schemas/media-copy-intents.js.map +1 -0
- package/dist/doc-schemas/registry.d.ts +33 -0
- package/dist/doc-schemas/registry.d.ts.map +1 -1
- package/dist/doc-schemas/registry.js +2 -0
- package/dist/doc-schemas/registry.js.map +1 -1
- package/dist/paths/collection-refs.d.ts +1 -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 +1 -0
- package/dist/paths/collections.d.ts.map +1 -1
- package/dist/paths/collections.js +1 -0
- package/dist/paths/collections.js.map +1 -1
- package/dist/paths/path-builders.d.ts +1 -0
- package/dist/paths/path-builders.d.ts.map +1 -1
- package/dist/paths/path-builders.js +2 -0
- package/dist/paths/path-builders.js.map +1 -1
- package/package.json +1 -1
|
@@ -2,6 +2,7 @@ export * from './user.js';
|
|
|
2
2
|
export * from './firestore-primitives.js';
|
|
3
3
|
export * from './media-assets.js';
|
|
4
4
|
export * from './media-activation-jobs.js';
|
|
5
|
+
export * from './media-copy-intents.js';
|
|
5
6
|
export * from './publicUser.js';
|
|
6
7
|
export * from './account-deletion.js';
|
|
7
8
|
export * from './work-project.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/doc-schemas/index.ts"],"names":[],"mappings":"AAMA,cAAc,WAAW,CAAC;AAC1B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,+BAA+B,CAAC;AAC9C,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oCAAoC,CAAC;AACnD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AAGjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAGhC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AAGjC,cAAc,oBAAoB,CAAC;AAEnC,cAAc,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/doc-schemas/index.ts"],"names":[],"mappings":"AAMA,cAAc,WAAW,CAAC;AAC1B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,+BAA+B,CAAC;AAC9C,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oCAAoC,CAAC;AACnD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AAGjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAGhC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AAGjC,cAAc,oBAAoB,CAAC;AAEnC,cAAc,eAAe,CAAC"}
|
|
@@ -7,6 +7,7 @@ export * from './user.js';
|
|
|
7
7
|
export * from './firestore-primitives.js';
|
|
8
8
|
export * from './media-assets.js';
|
|
9
9
|
export * from './media-activation-jobs.js';
|
|
10
|
+
export * from './media-copy-intents.js';
|
|
10
11
|
export * from './publicUser.js';
|
|
11
12
|
export * from './account-deletion.js';
|
|
12
13
|
export * from './work-project.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/doc-schemas/index.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,sFAAsF;AACtF,sFAAsF;AACtF,wFAAwF;AACxF,mFAAmF;AAEnF,cAAc,WAAW,CAAC;AAC1B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,+BAA+B,CAAC;AAC9C,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oCAAoC,CAAC;AACnD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AAEjC,6EAA6E;AAC7E,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAEhC,0DAA0D;AAC1D,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AAEjC,sDAAsD;AACtD,cAAc,oBAAoB,CAAC;AAEnC,cAAc,eAAe,CAAC","sourcesContent":["// Barrel for the Firestore document SCHEMAS (Zod) and the collection registry.\n// Exposed on the `@ttt-productions/ttt-core/doc-schemas` subpath. The schema registry\n// (COLLECTION_SCHEMAS) is consumed by the schema-doc generator (ttt-packages) and the\n// drift-check (ttt-prod). Document TYPES are inferred from these schemas and surface on\n// the main barrel via ../types/*; this subpath is the home of the runtime schemas.\n\nexport * from './user.js';\nexport * from './firestore-primitives.js';\nexport * from './media-assets.js';\nexport * from './media-activation-jobs.js';\nexport * from './publicUser.js';\nexport * from './account-deletion.js';\nexport * from './work-project.js';\nexport * from './content.js';\nexport * from './social.js';\nexport * from './square-announcement-jobs.js';\nexport * from './payments.js';\nexport * from './commissions.js';\nexport * from './messaging.js';\nexport * from './system.js';\nexport * from './public-documents.js';\nexport * from './legal-review-notice.js';\nexport * from './moderation.js';\nexport * from './report-docs.js';\nexport * from './audit.js';\nexport * from './notifications.js';\nexport * from './notification-ledger.js';\nexport * from './notification-archive-all-jobs.js';\nexport * from './chat-sync.js';\nexport * from './operational.js';\n\n// ===== Trust & Safety — shared foundation + cluster schemas (§A1–A11) =====\nexport * from './safety/foundation.js';\nexport * from './safety/report.js';\nexport * from './safety/case-alert.js';\nexport * from './safety/case.js';\nexport * from './safety/case-aliases.js';\nexport * from './safety/holds.js';\nexport * from './safety/evidence.js';\nexport * from './safety/provenance.js';\nexport * from './safety/sagas.js';\nexport * from './safety/monitors.js';\nexport * from './safety/age.js';\n\n// ===== Trust & Safety — NCII / TAKE IT DOWN (§A11) =====\nexport * from './ncii/allegations.js';\nexport * from './ncii/requests.js';\nexport * from './ncii/cases.js';\nexport * from './ncii/holds.js';\nexport * from './ncii/removal.js';\nexport * from './ncii/config.js';\n\n// ===== Backend-only cursor / operational state =====\nexport * from './backend-state.js';\n\nexport * from './registry.js';\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/doc-schemas/index.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,sFAAsF;AACtF,sFAAsF;AACtF,wFAAwF;AACxF,mFAAmF;AAEnF,cAAc,WAAW,CAAC;AAC1B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,+BAA+B,CAAC;AAC9C,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oCAAoC,CAAC;AACnD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AAEjC,6EAA6E;AAC7E,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAEhC,0DAA0D;AAC1D,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AAEjC,sDAAsD;AACtD,cAAc,oBAAoB,CAAC;AAEnC,cAAc,eAAe,CAAC","sourcesContent":["// Barrel for the Firestore document SCHEMAS (Zod) and the collection registry.\n// Exposed on the `@ttt-productions/ttt-core/doc-schemas` subpath. The schema registry\n// (COLLECTION_SCHEMAS) is consumed by the schema-doc generator (ttt-packages) and the\n// drift-check (ttt-prod). Document TYPES are inferred from these schemas and surface on\n// the main barrel via ../types/*; this subpath is the home of the runtime schemas.\n\nexport * from './user.js';\nexport * from './firestore-primitives.js';\nexport * from './media-assets.js';\nexport * from './media-activation-jobs.js';\nexport * from './media-copy-intents.js';\nexport * from './publicUser.js';\nexport * from './account-deletion.js';\nexport * from './work-project.js';\nexport * from './content.js';\nexport * from './social.js';\nexport * from './square-announcement-jobs.js';\nexport * from './payments.js';\nexport * from './commissions.js';\nexport * from './messaging.js';\nexport * from './system.js';\nexport * from './public-documents.js';\nexport * from './legal-review-notice.js';\nexport * from './moderation.js';\nexport * from './report-docs.js';\nexport * from './audit.js';\nexport * from './notifications.js';\nexport * from './notification-ledger.js';\nexport * from './notification-archive-all-jobs.js';\nexport * from './chat-sync.js';\nexport * from './operational.js';\n\n// ===== Trust & Safety — shared foundation + cluster schemas (§A1–A11) =====\nexport * from './safety/foundation.js';\nexport * from './safety/report.js';\nexport * from './safety/case-alert.js';\nexport * from './safety/case.js';\nexport * from './safety/case-aliases.js';\nexport * from './safety/holds.js';\nexport * from './safety/evidence.js';\nexport * from './safety/provenance.js';\nexport * from './safety/sagas.js';\nexport * from './safety/monitors.js';\nexport * from './safety/age.js';\n\n// ===== Trust & Safety — NCII / TAKE IT DOWN (§A11) =====\nexport * from './ncii/allegations.js';\nexport * from './ncii/requests.js';\nexport * from './ncii/cases.js';\nexport * from './ncii/holds.js';\nexport * from './ncii/removal.js';\nexport * from './ncii/config.js';\n\n// ===== Backend-only cursor / operational state =====\nexport * from './backend-state.js';\n\nexport * from './registry.js';\n"]}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const MediaCopyIntentStateSchema: z.ZodEnum<{
|
|
3
|
+
copying: "copying";
|
|
4
|
+
reaping: "reaping";
|
|
5
|
+
}>;
|
|
6
|
+
export type MediaCopyIntentState = z.infer<typeof MediaCopyIntentStateSchema>;
|
|
7
|
+
export declare const MediaCopyIntentSchema: z.ZodObject<{
|
|
8
|
+
newAssetId: z.ZodString;
|
|
9
|
+
sourceAssetId: z.ZodString;
|
|
10
|
+
ownerType: z.ZodEnum<{
|
|
11
|
+
workProject: "workProject";
|
|
12
|
+
hallItem: "hallItem";
|
|
13
|
+
userProfile: "userProfile";
|
|
14
|
+
craftSkill: "craftSkill";
|
|
15
|
+
squareStreetzPost: "squareStreetzPost";
|
|
16
|
+
workContent: "workContent";
|
|
17
|
+
commissionListing: "commissionListing";
|
|
18
|
+
commissionProposal: "commissionProposal";
|
|
19
|
+
audition: "audition";
|
|
20
|
+
auditionEntry: "auditionEntry";
|
|
21
|
+
conversationFile: "conversationFile";
|
|
22
|
+
realmFile: "realmFile";
|
|
23
|
+
safetyEvidence: "safetyEvidence";
|
|
24
|
+
}>;
|
|
25
|
+
ownerId: z.ZodString;
|
|
26
|
+
variantKeys: z.ZodArray<z.ZodEnum<{
|
|
27
|
+
small: "small";
|
|
28
|
+
full: "full";
|
|
29
|
+
medium: "medium";
|
|
30
|
+
main: "main";
|
|
31
|
+
}>>;
|
|
32
|
+
state: z.ZodEnum<{
|
|
33
|
+
copying: "copying";
|
|
34
|
+
reaping: "reaping";
|
|
35
|
+
}>;
|
|
36
|
+
createdAt: z.ZodNumber;
|
|
37
|
+
updatedAt: z.ZodNumber;
|
|
38
|
+
reapClaimedAt: z.ZodOptional<z.ZodNumber>;
|
|
39
|
+
}, z.core.$strict>;
|
|
40
|
+
export type MediaCopyIntent = z.infer<typeof MediaCopyIntentSchema>;
|
|
41
|
+
//# sourceMappingURL=media-copy-intents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-copy-intents.d.ts","sourceRoot":"","sources":["../../src/doc-schemas/media-copy-intents.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,0BAA0B;;;EAGrC,CAAC;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAwB9B,CAAC;AACL,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// mediaCopyIntents/{newAssetId} — the intent of one cross-owner media copy. A copy writes
|
|
2
|
+
// its variant objects to deterministic keys BEFORE its asset doc exists, so a copy that
|
|
3
|
+
// stops partway leaves objects no asset doc references. The intent is recorded before the
|
|
4
|
+
// first object is copied and cleared in the transaction that creates the asset doc; an
|
|
5
|
+
// intent that outlives its copy is how the objects it names are found and removed.
|
|
6
|
+
// Server-only (`allow read, write: if false`).
|
|
7
|
+
//
|
|
8
|
+
// No TTL field: an intent removed before its objects are reaped strands those objects.
|
|
9
|
+
import { z } from 'zod';
|
|
10
|
+
import { MEDIA_VARIANT_KEYS, MediaAssetOwnerTypeSchema, MediaVariantKeySchema } from './media-assets.js';
|
|
11
|
+
export const MediaCopyIntentStateSchema = z.enum([
|
|
12
|
+
'copying', // recorded before the first object is copied; the copy may still complete
|
|
13
|
+
'reaping', // claimed by the sweep, which is deleting the copied objects
|
|
14
|
+
]);
|
|
15
|
+
export const MediaCopyIntentSchema = z
|
|
16
|
+
.object({
|
|
17
|
+
newAssetId: z.string().min(1),
|
|
18
|
+
sourceAssetId: z.string().min(1),
|
|
19
|
+
ownerType: MediaAssetOwnerTypeSchema,
|
|
20
|
+
ownerId: z.string().min(1),
|
|
21
|
+
// Variant NAMES, never object keys: each key derives from an asset id and a variant.
|
|
22
|
+
variantKeys: z.array(MediaVariantKeySchema).min(1).max(MEDIA_VARIANT_KEYS.length),
|
|
23
|
+
state: MediaCopyIntentStateSchema,
|
|
24
|
+
createdAt: z.number().int().nonnegative(),
|
|
25
|
+
updatedAt: z.number().int().nonnegative(),
|
|
26
|
+
reapClaimedAt: z.number().int().nonnegative().optional(),
|
|
27
|
+
})
|
|
28
|
+
.strict()
|
|
29
|
+
.superRefine((val, ctx) => {
|
|
30
|
+
if (new Set(val.variantKeys).size !== val.variantKeys.length) {
|
|
31
|
+
ctx.addIssue({ code: 'custom', path: ['variantKeys'], message: 'variantKeys names each variant at most once' });
|
|
32
|
+
}
|
|
33
|
+
if (val.state === 'reaping' && val.reapClaimedAt === undefined) {
|
|
34
|
+
ctx.addIssue({ code: 'custom', path: ['reapClaimedAt'], message: 'a reaping intent records when it was claimed' });
|
|
35
|
+
}
|
|
36
|
+
if (val.state === 'copying' && val.reapClaimedAt !== undefined) {
|
|
37
|
+
ctx.addIssue({ code: 'custom', path: ['reapClaimedAt'], message: 'a copying intent has not been claimed' });
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
//# sourceMappingURL=media-copy-intents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-copy-intents.js","sourceRoot":"","sources":["../../src/doc-schemas/media-copy-intents.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAC1F,wFAAwF;AACxF,0FAA0F;AAC1F,uFAAuF;AACvF,mFAAmF;AACnF,+CAA+C;AAC/C,EAAE;AACF,uFAAuF;AAEvF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAEzG,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,IAAI,CAAC;IAC/C,SAAS,EAAE,0EAA0E;IACrF,SAAS,EAAE,6DAA6D;CACzE,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC;KACnC,MAAM,CAAC;IACN,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAChC,SAAS,EAAE,yBAAyB;IACpC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,qFAAqF;IACrF,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,MAAM,CAAC;IACjF,KAAK,EAAE,0BAA0B;IACjC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IACzC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IACzC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;CACzD,CAAC;KACD,MAAM,EAAE;KACR,WAAW,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;IACxB,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;QAC7D,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,6CAA6C,EAAE,CAAC,CAAC;IAClH,CAAC;IACD,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS,IAAI,GAAG,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QAC/D,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,8CAA8C,EAAE,CAAC,CAAC;IACrH,CAAC;IACD,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS,IAAI,GAAG,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QAC/D,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,uCAAuC,EAAE,CAAC,CAAC;IAC9G,CAAC;AACH,CAAC,CAAC,CAAC","sourcesContent":["// mediaCopyIntents/{newAssetId} — the intent of one cross-owner media copy. A copy writes\n// its variant objects to deterministic keys BEFORE its asset doc exists, so a copy that\n// stops partway leaves objects no asset doc references. The intent is recorded before the\n// first object is copied and cleared in the transaction that creates the asset doc; an\n// intent that outlives its copy is how the objects it names are found and removed.\n// Server-only (`allow read, write: if false`).\n//\n// No TTL field: an intent removed before its objects are reaped strands those objects.\n\nimport { z } from 'zod';\nimport { MEDIA_VARIANT_KEYS, MediaAssetOwnerTypeSchema, MediaVariantKeySchema } from './media-assets.js';\n\nexport const MediaCopyIntentStateSchema = z.enum([\n 'copying', // recorded before the first object is copied; the copy may still complete\n 'reaping', // claimed by the sweep, which is deleting the copied objects\n]);\nexport type MediaCopyIntentState = z.infer<typeof MediaCopyIntentStateSchema>;\n\nexport const MediaCopyIntentSchema = z\n .object({\n newAssetId: z.string().min(1),\n sourceAssetId: z.string().min(1),\n ownerType: MediaAssetOwnerTypeSchema,\n ownerId: z.string().min(1),\n // Variant NAMES, never object keys: each key derives from an asset id and a variant.\n variantKeys: z.array(MediaVariantKeySchema).min(1).max(MEDIA_VARIANT_KEYS.length),\n state: MediaCopyIntentStateSchema,\n createdAt: z.number().int().nonnegative(),\n updatedAt: z.number().int().nonnegative(),\n reapClaimedAt: z.number().int().nonnegative().optional(),\n })\n .strict()\n .superRefine((val, ctx) => {\n if (new Set(val.variantKeys).size !== val.variantKeys.length) {\n ctx.addIssue({ code: 'custom', path: ['variantKeys'], message: 'variantKeys names each variant at most once' });\n }\n if (val.state === 'reaping' && val.reapClaimedAt === undefined) {\n ctx.addIssue({ code: 'custom', path: ['reapClaimedAt'], message: 'a reaping intent records when it was claimed' });\n }\n if (val.state === 'copying' && val.reapClaimedAt !== undefined) {\n ctx.addIssue({ code: 'custom', path: ['reapClaimedAt'], message: 'a copying intent has not been claimed' });\n }\n });\nexport type MediaCopyIntent = z.infer<typeof MediaCopyIntentSchema>;\n"]}
|
|
@@ -4127,6 +4127,39 @@ export declare const COLLECTION_SCHEMAS: {
|
|
|
4127
4127
|
deadLetteredAt: z.ZodOptional<z.ZodNumber>;
|
|
4128
4128
|
expireAt: z.ZodOptional<z.ZodCustom<import("./firestore-primitives.js").FirestoreTimestampLike, import("./firestore-primitives.js").FirestoreTimestampLike>>;
|
|
4129
4129
|
}, z.core.$strict>;
|
|
4130
|
+
readonly 'mediaCopyIntents/{newAssetId}': z.ZodObject<{
|
|
4131
|
+
newAssetId: z.ZodString;
|
|
4132
|
+
sourceAssetId: z.ZodString;
|
|
4133
|
+
ownerType: z.ZodEnum<{
|
|
4134
|
+
workProject: "workProject";
|
|
4135
|
+
hallItem: "hallItem";
|
|
4136
|
+
userProfile: "userProfile";
|
|
4137
|
+
craftSkill: "craftSkill";
|
|
4138
|
+
squareStreetzPost: "squareStreetzPost";
|
|
4139
|
+
workContent: "workContent";
|
|
4140
|
+
commissionListing: "commissionListing";
|
|
4141
|
+
commissionProposal: "commissionProposal";
|
|
4142
|
+
audition: "audition";
|
|
4143
|
+
auditionEntry: "auditionEntry";
|
|
4144
|
+
conversationFile: "conversationFile";
|
|
4145
|
+
realmFile: "realmFile";
|
|
4146
|
+
safetyEvidence: "safetyEvidence";
|
|
4147
|
+
}>;
|
|
4148
|
+
ownerId: z.ZodString;
|
|
4149
|
+
variantKeys: z.ZodArray<z.ZodEnum<{
|
|
4150
|
+
small: "small";
|
|
4151
|
+
full: "full";
|
|
4152
|
+
medium: "medium";
|
|
4153
|
+
main: "main";
|
|
4154
|
+
}>>;
|
|
4155
|
+
state: z.ZodEnum<{
|
|
4156
|
+
copying: "copying";
|
|
4157
|
+
reaping: "reaping";
|
|
4158
|
+
}>;
|
|
4159
|
+
createdAt: z.ZodNumber;
|
|
4160
|
+
updatedAt: z.ZodNumber;
|
|
4161
|
+
reapClaimedAt: z.ZodOptional<z.ZodNumber>;
|
|
4162
|
+
}, z.core.$strict>;
|
|
4130
4163
|
readonly 'activeUserNotifications/{notificationId}': z.ZodObject<{
|
|
4131
4164
|
id: z.ZodString;
|
|
4132
4165
|
type: z.ZodString;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/doc-schemas/registry.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/doc-schemas/registry.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAoN7B,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoQkB,CAAC;AAElD,MAAM,MAAM,wBAAwB,GAAG,MAAM,OAAO,kBAAkB,CAAC;AAEvE;;;;;;;;;GASG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;CAmBiC,CAAC;AAEvE;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAOvC,CAAC"}
|
|
@@ -28,6 +28,7 @@ import { SquareAnnouncementJobSchema } from './square-announcement-jobs.js';
|
|
|
28
28
|
import { PendingMediaSchema, ArchivedPendingMediaDocSchema } from '../media/pending-media.js';
|
|
29
29
|
import { MediaAssetSchema } from './media-assets.js';
|
|
30
30
|
import { MediaActivationJobSchema } from './media-activation-jobs.js';
|
|
31
|
+
import { MediaCopyIntentSchema } from './media-copy-intents.js';
|
|
31
32
|
import { ReservedDisplayNameSchema, ReservedRealmNameSchema, StakeShareAuditEventSchema, ShortLinkSchema, FeedbackAliasSchema, UserSuggestionSchema, StatusReconcileQueueEntrySchema, } from './operational.js';
|
|
32
33
|
// ===== Trust & Safety — report spine (§A1) =====
|
|
33
34
|
import { ProtectedReportRootV1Schema, ReportPublicProjectionV1Schema, ReportGroupV1Schema, ReportGroupCountedReportSchema, ReportTargetSnapshotV1Schema, NarrativeRecordV1Schema, } from './safety/report.js';
|
|
@@ -146,6 +147,7 @@ export const COLLECTION_SCHEMAS = {
|
|
|
146
147
|
'pendingMediaArchive/{pendingMediaId}': ArchivedPendingMediaDocSchema,
|
|
147
148
|
'mediaAssets/{mediaAssetId}': MediaAssetSchema,
|
|
148
149
|
'mediaActivationJobs/{jobId}': MediaActivationJobSchema,
|
|
150
|
+
'mediaCopyIntents/{newAssetId}': MediaCopyIntentSchema,
|
|
149
151
|
// ===== Notifications =====
|
|
150
152
|
'activeUserNotifications/{notificationId}': NotificationDocSchema,
|
|
151
153
|
'activeAdminNotifications/{notificationId}': NotificationDocSchema,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/doc-schemas/registry.ts"],"names":[],"mappings":"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","sourcesContent":["// Firestore collection registry — the single, authoritative binding from each Firestore\n// collection/subcollection path template to its document Zod schema. This is the input to\n// the schema-doc generator and the drift-check, and its completeness is CI-enforced\n// (registry.test.ts) against the COLLECTIONS / *_SUBCOLLECTIONS name constants, so a new\n// collection cannot be added without either a schema or an explicit PENDING entry.\n//\n// Path templates reuse the segment names from ../paths/collections.ts (and the shapes the\n// path-builders produce). `{placeholder}` segments are document/parent IDs.\n\nimport type { z } from 'zod';\nimport {\n FullUserSchema,\n UserPrivateDataSchema,\n CraftSkillSchema,\n CraftSkillReferenceSchema,\n} from './user.js';\nimport { PublicUserSchema } from './publicUser.js';\nimport { AccountDeletionRequestV1Schema } from './account-deletion.js';\nimport {\n FullWorkProjectSchema,\n PublicWorkProjectSchema,\n WorkFileFolderSchema,\n WorkFileSchema,\n WorkRealmSchema,\n RealmFileFolderSchema,\n GuildmateUserSchema,\n PublicGuildmateUserSchema,\n} from './work-project.js';\nimport {\n FullTaleSchema,\n FullChapterSchema,\n FullTuneSchema,\n FullTuneTrackSchema,\n FullTelevisionSchema,\n FullTelevisionEpisodeSchema,\n ThresholdItemSchema,\n HallSubmissionReservationSchema,\n PublishedHallItemSchema,\n PublishedChapterSchema,\n PublishedTuneTrackSchema,\n PublishedTelevisionEpisodeSchema,\n HallContentChangeRequestSchema,\n FuturePlansDocumentSchema,\n RulesAndAgreementsSchema,\n LegalPageDocumentSchema,\n TakeItDownPageCopySchema,\n DmcaPolicyDocumentSchema,\n HallLibraryPreferencesSchema,\n} from './content.js';\nimport {\n SquareStreetzPostSchema,\n MentionHistoryDocumentSchema,\n FollowEdgeSchema,\n FollowCounterSchema,\n SquareStreetzLikeSchema,\n TrendingPostsSchema,\n} from './social.js';\nimport {\n PledgePaymentSchema,\n PledgePaymentProviderRefSchema,\n ProcessedStripeEventSchema,\n PledgePaymentLedgerEventSchema,\n PaymentWebhookQuarantineSchema,\n PledgePaymentTotalsDocSchema,\n PledgeRefundRequestSchema,\n} from './payments.js';\nimport {\n FullCommissionListingSchema,\n CommissionProposalSchema,\n AuditionSchema,\n AuditionEntrySchema,\n UserAuditionVoteSchema,\n} from './commissions.js';\nimport {\n GuildChatChannelSchema,\n GuildInviteConversationSchema,\n AdminDispatchSchema,\n ChatMessageV1Schema,\n ConversationFileSchema,\n} from './messaging.js';\nimport {\n PublicDocumentVersionSchema,\n PublicDocumentDraftSchema,\n PublicDocumentReleaseSchema,\n} from './public-documents.js';\nimport { AppConfigSchema, AdminListSchema, ProfanityListSchema, ReservedUsernamesSchema, BlockedFranchiseNamesSchema, AppModeMarkerSchema } from './system.js';\nimport {\n ContentViolationSchema,\n ModerationCascadeManifestSchema,\n ModerationCascadeChangedDocSchema,\n} from './moderation.js';\nimport {\n AdminTaskDocSchema,\n} from './report-docs.js';\nimport { TTTAuditEventSchema } from './audit.js';\nimport {\n NotificationDocSchema,\n NotificationHistoryDocSchema,\n PendingNotificationSchema,\n} from './notifications.js';\nimport {\n NotificationDeliverySchema,\n NotificationFanoutJobSchema,\n} from './notification-ledger.js';\nimport { NotificationArchiveAllJobSchema } from './notification-archive-all-jobs.js';\nimport {\n ChatChannelAuthProjectionSchema,\n ChatScopeDegradedSchema,\n ChatScopeDegradedCauseSchema,\n ChatSyncEventSchema,\n ChatSyncFanoutJobSchema,\n ChatMessageOutboxSchema,\n ChatAdminActionCommandSchema,\n ChatHistoryAnonymizationJobSchema,\n ChatHistoryAnonymizationAffectedChunkSchema,\n} from './chat-sync.js';\nimport { SquareAnnouncementJobSchema } from './square-announcement-jobs.js';\nimport { PendingMediaSchema, ArchivedPendingMediaDocSchema } from '../media/pending-media.js';\nimport { MediaAssetSchema } from './media-assets.js';\nimport { MediaActivationJobSchema } from './media-activation-jobs.js';\nimport {\n ReservedDisplayNameSchema,\n ReservedRealmNameSchema,\n StakeShareAuditEventSchema,\n ShortLinkSchema,\n FeedbackAliasSchema,\n UserSuggestionSchema,\n StatusReconcileQueueEntrySchema,\n} from './operational.js';\n// ===== Trust & Safety — report spine (§A1) =====\nimport {\n ProtectedReportRootV1Schema,\n ReportPublicProjectionV1Schema,\n ReportGroupV1Schema,\n ReportGroupCountedReportSchema,\n ReportTargetSnapshotV1Schema,\n NarrativeRecordV1Schema,\n} from './safety/report.js';\nimport { SafetyCaseAlertV1Schema } from './safety/case-alert.js';\n// ===== Trust & Safety — child-safety case spine (§A1b, §A2) =====\nimport {\n ChildSafetyCaseListV1Schema,\n ChildSafetyCaseV1Schema,\n ChildSafetySourceSignalV1Schema,\n ChildSafetyDecisionV1Schema,\n ChildSafetyDecisionViewV1Schema,\n ChildSafetyCaseAccountV1Schema,\n ChildSafetyCaseAccountHistoryV1Schema,\n ChildSafetyNcmecSubmissionV1Schema,\n ChildSafetyNcmecSubmissionFileV1Schema,\n ChildSafetyLegalProcessEventV1Schema,\n} from './safety/case.js';\nimport {\n ChildSafetyOwningAliasV1Schema,\n} from './safety/case-aliases.js';\nimport {\n SafetyHoldRefV1Schema,\n SafetyHoldResourceV1Schema,\n SafetyResourceCommandV1Schema,\n SafetyResourceCommandAuthorizedRequestV1Schema,\n SafetyResourceCommandBypassRefV1Schema,\n} from './safety/holds.js';\nimport {\n SafetyEvidenceManifestV1Schema,\n SafetyEvidenceJobV1Schema,\n SafetyEvidenceJobItemDocV1Schema,\n SafetyEvidenceDispositionV1Schema,\n} from './safety/evidence.js';\nimport { EventProvenanceV1Schema } from './safety/provenance.js';\nimport {\n QuarantineSagaJobV1Schema,\n QuarantineSagaRelatedAssetV1Schema,\n NcmecSubmissionJobV1Schema,\n AccountActionCommandV1Schema,\n} from './safety/sagas.js';\nimport {\n SafetySlaMonitorV1Schema,\n SafetyMonitorHeartbeatV1Schema,\n} from './safety/monitors.js';\nimport { AgeAttestationNonceV1Schema, AgePolicyConfigV1Schema } from './safety/age.js';\n// ===== Trust & Safety — NCII / TAKE IT DOWN (§A11) =====\nimport { NciiAllegationV1Schema } from './ncii/allegations.js';\nimport {\n TakeItDownRequestRootV1Schema,\n TakeItDownRequesterPrivateV1Schema,\n TakeItDownSubmissionV1Schema,\n TakeItDownValidityDecisionV1Schema,\n TakeItDownValidityRationaleV1Schema,\n TakeItDownRequestActionV1Schema,\n TakeItDownEvidenceV1Schema,\n NciiRetainedEvidenceInventoryV1Schema,\n} from './ncii/requests.js';\nimport {\n NciiCaseV1Schema,\n NciiCaseAllegationLinkV1Schema,\n NciiCaseRequestLinkV1Schema,\n NciiCaseRemovalActionV1Schema,\n NciiBlockedHashV1Schema,\n NciiCaseClosureEventV1Schema,\n} from './ncii/cases.js';\nimport { NciiTemporaryHoldV1Schema } from './ncii/holds.js';\nimport {\n NciiRemovalJobV1Schema,\n NciiRemovalTargetV1Schema,\n} from './ncii/removal.js';\nimport {\n NciiPolicyConfigV1Schema,\n PrivilegedReviewerSecurityProfileV1Schema,\n} from './ncii/config.js';\nimport {\n HallMediaReaperCursorSchema,\n NcmecCompletionProofRecordV1Schema,\n NcmecPortalCorrectionRecordV1Schema,\n NcmecPortalReceiptArtifactV1Schema,\n OperatorStepUpSchema,\n PublicUsersReconcilerCursorSchema,\n SafetyReconcilerCursorSchema,\n SweepStateSchema,\n} from './backend-state.js';\n\nexport const COLLECTION_SCHEMAS = {\n // ===== Users =====\n 'userProfiles/{userId}': FullUserSchema,\n 'userProfiles/{userId}/privateData/{userId}': UserPrivateDataSchema,\n 'userProfiles/{userId}/privateData/hallLibraryPreferences': HallLibraryPreferencesSchema,\n 'userProfiles/{userId}/profileCraftSkills/{craftSkillId}': CraftSkillSchema,\n 'userProfiles/{userId}/auditionVotes/{auditionId}': UserAuditionVoteSchema,\n 'userProfiles/{userId}/mentionHistory/{docId}': MentionHistoryDocumentSchema,\n 'userProfiles/{userId}/notificationHistory/{notificationId}': NotificationHistoryDocSchema,\n 'userProfiles/{userId}/userLikes/likeHistory/squareStreetzLikes/{postId}': SquareStreetzLikeSchema,\n 'publicUsers/{uid}': PublicUserSchema,\n\n // ===== Work / Realm / Guild =====\n 'allWorkProjects/{workProjectId}': FullWorkProjectSchema,\n 'allWorkProjects/{workProjectId}/guildmateUsers/{uid}': GuildmateUserSchema,\n 'allWorkProjects/{workProjectId}/publicGuildmateUsers/{uid}': PublicGuildmateUserSchema,\n 'allWorkProjects/{workProjectId}/workFileFolders/{workFileFolderId}': WorkFileFolderSchema,\n 'allWorkProjects/{workProjectId}/workFileFolders/{workFileFolderId}/workFiles/{workFileId}': WorkFileSchema,\n 'allWorkProjects/{workProjectId}/hallSubmissionReservation/reservation': HallSubmissionReservationSchema,\n 'allWorkProjects/{workProjectId}/workProjectTales/{taleId}': FullTaleSchema,\n 'allWorkProjects/{workProjectId}/workProjectTales/{taleId}/taleChapters/{chapterId}': FullChapterSchema,\n 'allWorkProjects/{workProjectId}/workProjectTunes/{tuneId}': FullTuneSchema,\n 'allWorkProjects/{workProjectId}/workProjectTunes/{tuneId}/tuneTracks/{trackId}': FullTuneTrackSchema,\n 'allWorkProjects/{workProjectId}/workProjectTelevision/{televisionId}': FullTelevisionSchema,\n 'allWorkProjects/{workProjectId}/workProjectTelevision/{televisionId}/televisionEpisodes/{episodeId}': FullTelevisionEpisodeSchema,\n 'allWorkProjects/{workProjectId}/guildChatChannels/{guildChatChannelId}': GuildChatChannelSchema,\n // Guild channel + invite messages are REALTIME-ONLY (chat Worker DO) — no Firestore schema.\n 'publicWorkProjects/{workProjectId}': PublicWorkProjectSchema,\n 'workRealms/{workRealmId}': WorkRealmSchema,\n // Realm shared-file folders — steward-owned containers; callable-written, client-read denied\n // (the gallery projection returns them alongside the files).\n 'workRealms/{workRealmId}/realmFileFolders/{realmFileFolderId}': RealmFileFolderSchema,\n 'guildInviteConversations/{guildInviteId}': GuildInviteConversationSchema,\n // Conversation Files — the flat per-conversation file list. Backend-only writes;\n // client-readable only while the caller holds conversation read access.\n 'guildInviteConversations/{guildInviteId}/conversationFiles/{conversationFileId}': ConversationFileSchema,\n\n // ===== Square / Social =====\n // SquareStreetzPostSchema is a refined ZodObject (superRefine for the MEDIA-101\n // mediaAssetId↔mediaType pair invariant); the schema-doc generator and the\n // drift-check both unwrap the effect to introspect its shape, so binding the\n // refined schema here is correct.\n 'squareStreetzFeed/activePosts/socialPosts/{postId}': SquareStreetzPostSchema,\n 'squareStreetzFeed/trendingPosts': TrendingPostsSchema,\n 'followEdges/{followEdgeId}': FollowEdgeSchema,\n 'followCounters/{followCounterId}': FollowCounterSchema,\n // Durable Square announcement outbox (Admin-SDK-only; deterministic job ids).\n 'squareAnnouncementJobs/{jobId}': SquareAnnouncementJobSchema,\n\n // ===== Payments / pledge ledger =====\n 'pledgePayments/{pledgePaymentId}': PledgePaymentSchema,\n 'pledgePaymentProviderRefs/{pledgePaymentId}': PledgePaymentProviderRefSchema,\n 'processedStripeEvents/{stripeEventId}': ProcessedStripeEventSchema,\n 'pledgePaymentLedgerEvents/{ledgerId}': PledgePaymentLedgerEventSchema,\n 'paymentWebhookQuarantine/{stripeEventId}': PaymentWebhookQuarantineSchema,\n 'pledgePaymentTotals/summary': PledgePaymentTotalsDocSchema,\n 'pledgeRefundRequests/{requestId}': PledgeRefundRequestSchema,\n\n // ===== Threshold / Hall =====\n 'thresholdItems/{thresholdItemId}': ThresholdItemSchema,\n 'hallItems/{hallItemId}': PublishedHallItemSchema,\n // Published hall sub-item projections — the chapter/track/episode docs copied out of\n // the Work at publish time (runPublishApprovedHallLibraryItem). Segment names are the\n // HALL_ITEM_SUBCOLLECTIONS constants — fixed compound names, NOT derived from\n // WorkProjectType.\n 'hallItems/{hallItemId}/hallItemTales/{itemId}': PublishedChapterSchema,\n 'hallItems/{hallItemId}/hallItemTunes/{itemId}': PublishedTuneTrackSchema,\n 'hallItems/{hallItemId}/hallItemTelevision/{itemId}': PublishedTelevisionEpisodeSchema,\n 'hallContentChangeRequests/{changeRequestId}': HallContentChangeRequestSchema,\n\n // ===== Commission / Audition =====\n 'commissionListings/{commissionListingId}': FullCommissionListingSchema,\n 'commissionListings/{commissionListingId}/commissionProposals/{commissionProposalId}': CommissionProposalSchema,\n 'auditionBoard/{auditionId}': AuditionSchema,\n 'auditionBoard/{auditionId}/auditionEntries/{auditionEntryId}': AuditionEntrySchema,\n\n // ===== Moderation / Reports / Admin =====\n // The report spine (§A1): the restricted root, its public projection subdoc, and the\n // dedup/count group. The root + projection are written by the app's submitReport\n // callable; the group is maintained by an app-side trigger.\n 'contentReports/{reportId}': ProtectedReportRootV1Schema,\n 'contentReports/{reportId}/publicProjection/{reportId}': ReportPublicProjectionV1Schema,\n 'contentReports/{reportId}/privateDetails/snapshot': ReportTargetSnapshotV1Schema,\n 'contentReports/{reportId}/privateDetails/narrative': NarrativeRecordV1Schema,\n // The escalation narrative is byte-identical to the original — ONE shape, ONE definition\n // (ENG-002): the same NarrativeRecordV1Schema binds both docs, never a duplicate schema.\n 'contentReports/{reportId}/privateDetails/narrativeEscalation': NarrativeRecordV1Schema,\n 'activeReportGroups/{groupKey}': ReportGroupV1Schema,\n 'activeReportGroups/{groupKey}/reportGroupCountedReports/{reportId}': ReportGroupCountedReportSchema,\n 'adminTasks/{taskId}': AdminTaskDocSchema,\n 'contentViolations/{violationId}': ContentViolationSchema,\n 'moderationCascadeManifests/{cascadeId}': ModerationCascadeManifestSchema,\n 'moderationCascadeManifests/{cascadeId}/changedDocs/{changedDocId}': ModerationCascadeChangedDocSchema,\n 'auditEvents/{eventId}': TTTAuditEventSchema,\n 'stakeShareAuditEvents/{eventId}': StakeShareAuditEventSchema,\n 'pendingAdminDispatches/{adminDispatchId}': AdminDispatchSchema,\n 'pendingAdminDispatches/{adminDispatchId}/conversationMessages/{adminDispatchMessageId}': ChatMessageV1Schema,\n 'pendingAdminDispatches/{adminDispatchId}/conversationFiles/{conversationFileId}': ConversationFileSchema,\n\n // ===== Media pipeline =====\n 'pendingMedia/{pendingMediaId}': PendingMediaSchema,\n 'pendingMediaArchive/{pendingMediaId}': ArchivedPendingMediaDocSchema,\n 'mediaAssets/{mediaAssetId}': MediaAssetSchema,\n 'mediaActivationJobs/{jobId}': MediaActivationJobSchema,\n\n // ===== Notifications =====\n 'activeUserNotifications/{notificationId}': NotificationDocSchema,\n 'activeAdminNotifications/{notificationId}': NotificationDocSchema,\n 'adminNotificationHistory/{notificationId}': NotificationHistoryDocSchema,\n 'pendingNotifications/{notificationId}': PendingNotificationSchema,\n\n // ===== Notification redesign — delivery ledger + fanout engine =====\n 'notificationDeliveries/{deliveryId}': NotificationDeliverySchema,\n 'notificationFanoutJobs/{jobId}': NotificationFanoutJobSchema,\n 'notificationArchiveAllJobs/{jobId}': NotificationArchiveAllJobSchema,\n\n // ===== Chat realtime sync / projection / commands =====\n 'chatChannelAuthProjections/{authPairKey}': ChatChannelAuthProjectionSchema,\n 'chatScopeDegraded/{scopeKey}': ChatScopeDegradedSchema,\n 'chatScopeDegraded/{scopeKey}/chatScopeDegradedCauses/{causeId}': ChatScopeDegradedCauseSchema,\n 'chatSyncEvents/{eventId}': ChatSyncEventSchema,\n 'chatSyncFanoutJobs/{jobId}': ChatSyncFanoutJobSchema,\n 'chatMessageOutbox/{commandId}': ChatMessageOutboxSchema,\n 'chatAdminActionCommands/{requestId}': ChatAdminActionCommandSchema,\n 'chatHistoryAnonymizationJobs/{jobId}': ChatHistoryAnonymizationJobSchema,\n 'chatHistoryAnonymizationJobs/{jobId}/affectedChunks/{chunkOrdinal}': ChatHistoryAnonymizationAffectedChunkSchema,\n\n // ===== Craft skills index =====\n 'craftSkillsByTag/{tag}/taggedCraftSkills/{compositeId}': CraftSkillReferenceSchema,\n\n // ===== Operational / utility =====\n 'reservedDisplayNames/{displayNameUppercase}': ReservedDisplayNameSchema,\n 'reservedRealmNames/{workingTitleUppercase}': ReservedRealmNameSchema,\n 'accountDeletionRequests/{uid}': AccountDeletionRequestV1Schema,\n 'shortLinks/{shortId}': ShortLinkSchema,\n 'feedbackSubmissions/{feedbackType}/userSuggestions/{suggestionId}': UserSuggestionSchema,\n 'statusReconcileQueue/{uid}': StatusReconcileQueueEntrySchema,\n\n // ===== Versioned public documents (backend-written; never public — the public reads the _appConfig projections) =====\n 'publicDocuments/{documentId}/publicDocumentVersions/{versionId}': PublicDocumentVersionSchema,\n 'publicDocumentDrafts/{documentId}': PublicDocumentDraftSchema,\n 'publicDocumentReleases/{releaseId}': PublicDocumentReleaseSchema,\n\n // ===== Trust & Safety — child-safety case spine (§A1b, §A2) =====\n 'childSafetyCaseList/{caseId}': ChildSafetyCaseListV1Schema,\n 'activeSafetyCaseAlerts/{caseId}': SafetyCaseAlertV1Schema,\n 'childSafetyCases/{caseId}': ChildSafetyCaseV1Schema,\n 'childSafetyCases/{caseId}/sourceSignals/{signalId}': ChildSafetySourceSignalV1Schema,\n 'childSafetyCases/{caseId}/childSafetyDecisions/{decisionId}': ChildSafetyDecisionV1Schema,\n 'childSafetyCases/{caseId}/childSafetyDecisions/{decisionId}/childSafetyDecisionViews/{viewId}': ChildSafetyDecisionViewV1Schema,\n 'childSafetyCases/{caseId}/childSafetyCaseAccounts/{uid}': ChildSafetyCaseAccountV1Schema,\n 'childSafetyCases/{caseId}/childSafetyCaseAccounts/{uid}/childSafetyCaseAccountHistory/{historyId}': ChildSafetyCaseAccountHistoryV1Schema,\n 'childSafetyCases/{caseId}/ncmecSubmissions/{submissionId}': ChildSafetyNcmecSubmissionV1Schema,\n 'childSafetyCases/{caseId}/ncmecSubmissions/{submissionId}/ncmecSubmissionFiles/{fileId}': ChildSafetyNcmecSubmissionFileV1Schema,\n // [H-05] the submission's single immutable completion-proof record (fixed doc id). Backend-only,\n // so its shape lives in doc-schemas/backend-state.ts alongside the portal artifacts.\n 'childSafetyCases/{caseId}/ncmecSubmissions/{submissionId}/ncmecCompletionProof/record': NcmecCompletionProofRecordV1Schema,\n 'childSafetyCases/{caseId}/legalProcess/{eventId}': ChildSafetyLegalProcessEventV1Schema,\n // Portal-filed NCMEC artifacts recorded by the two step-up-gated operator callables. Both\n // are backend-only (no client reader), so their shapes live in doc-schemas/backend-state.ts.\n 'childSafetyCases/{caseId}/portalReceiptArtifacts/{artifactId}': NcmecPortalReceiptArtifactV1Schema,\n 'childSafetyCases/{caseId}/ncmecPortalCorrections/{correctionId}': NcmecPortalCorrectionRecordV1Schema,\n 'childSafetyOwningAliases/{aliasId}': ChildSafetyOwningAliasV1Schema,\n\n // ===== Trust & Safety — holds + resource commands (§A3) =====\n 'safetyHoldRefs/{holdRefId}': SafetyHoldRefV1Schema,\n 'safetyHoldResources/{resourceKeyHash}': SafetyHoldResourceV1Schema,\n 'safetyResourceCommands/{commandDocId}': SafetyResourceCommandV1Schema,\n 'safetyResourceCommands/{commandDocId}/authorizedRequests/{requestId}': SafetyResourceCommandAuthorizedRequestV1Schema,\n 'safetyResourceCommands/{commandDocId}/bypassRefs/{refId}': SafetyResourceCommandBypassRefV1Schema,\n\n // ===== Trust & Safety — evidence + provenance (§A4, §A6) =====\n // SafetyEvidenceManifestV1Schema is a refined ZodObject (superRefine for the H5\n // sourceKind invariant); the schema-doc generator unwraps the effect to introspect\n // its shape, so binding the refined schema here is correct.\n 'safetyEvidenceManifests/{manifestId}': SafetyEvidenceManifestV1Schema,\n 'safetyEvidenceJobs/{jobId}': SafetyEvidenceJobV1Schema,\n 'safetyEvidenceJobs/{jobId}/safetyEvidenceJobItems/{itemId}': SafetyEvidenceJobItemDocV1Schema,\n 'safetyEvidenceJobs/{jobId}/safetyEvidenceJobDisposition/{locationId}': SafetyEvidenceDispositionV1Schema,\n 'eventProvenance/{eventId}': EventProvenanceV1Schema,\n\n // ===== Trust & Safety — sagas + closure (§A5) =====\n 'quarantineSagaJobs/{caseId}': QuarantineSagaJobV1Schema,\n 'quarantineSagaJobs/{caseId}/relatedAssets/{assetId}': QuarantineSagaRelatedAssetV1Schema,\n 'ncmecSubmissionJobs/{ncmecJobId}': NcmecSubmissionJobV1Schema,\n 'accountActionCommands/{accountActionCommandId}': AccountActionCommandV1Schema,\n\n // ===== Trust & Safety — SLA monitors + heartbeat (§A8) =====\n 'safetySlaMonitors/{monitorId}': SafetySlaMonitorV1Schema,\n 'safetyMonitorHeartbeat/global': SafetyMonitorHeartbeatV1Schema,\n\n // ===== Trust & Safety — age attestation nonces (§A7) =====\n 'ageAttestationNonces/{nonceHash}': AgeAttestationNonceV1Schema,\n\n // ===== Trust & Safety — operator step-up + reconciler cursors (backend-only) =====\n // Cloud-Functions-only readers/writers; client access denied in firestore.rules.\n 'operatorStepUp/{uid}': OperatorStepUpSchema,\n 'safetyReconcilerCursors/{cursorKey}': SafetyReconcilerCursorSchema,\n\n // ===== Scheduled user sweeps — durable cadence/cursor state (backend-only) =====\n 'sweepState/{sweepName}': SweepStateSchema,\n\n // ===== Trust & Safety — NCII / TAKE IT DOWN (§A11) =====\n 'nciiAllegations/{allegationId}': NciiAllegationV1Schema,\n 'takeItDownRequests/{requestId}': TakeItDownRequestRootV1Schema,\n 'takeItDownRequests/{requestId}/privateDetails/requester': TakeItDownRequesterPrivateV1Schema,\n 'takeItDownRequests/{requestId}/takeItDownSubmissions/{submissionId}': TakeItDownSubmissionV1Schema,\n 'takeItDownRequests/{requestId}/validityDecisions/{decisionId}': TakeItDownValidityDecisionV1Schema,\n 'takeItDownRequests/{requestId}/validityDecisions/{decisionId}/takeItDownValidityRationale/record': TakeItDownValidityRationaleV1Schema,\n 'takeItDownRequests/{requestId}/takeItDownActions/{actionId}': TakeItDownRequestActionV1Schema,\n // Deletion-verification record per evidence object — see SafetyEvidenceDispositionV1Schema for what\n // `result: 'gone'` means in THIS bucket (absent from the live bucket, not permanent destruction).\n 'takeItDownRequests/{requestId}/takeItDownEvidenceDisposition/{evidenceId}': SafetyEvidenceDispositionV1Schema,\n 'takeItDownRequests/{requestId}/takeItDownEvidence/{evidenceId}': TakeItDownEvidenceV1Schema,\n 'nciiCases/{caseId}': NciiCaseV1Schema,\n 'nciiCases/{caseId}/allegationLinks/{allegationId}': NciiCaseAllegationLinkV1Schema,\n 'nciiCases/{caseId}/requestLinks/{requestId}': NciiCaseRequestLinkV1Schema,\n 'nciiCases/{caseId}/removalActions/{actionId}': NciiCaseRemovalActionV1Schema,\n 'nciiCases/{caseId}/blockedHashes/{hashId}': NciiBlockedHashV1Schema,\n 'nciiCases/{caseId}/closureEvents/{eventId}': NciiCaseClosureEventV1Schema,\n 'nciiRetainedEvidenceInventory/{inventoryId}': NciiRetainedEvidenceInventoryV1Schema,\n // [H-01] dead-letter sink for inventory rows that could not be written to the primary\n // nciiRetainedEvidenceInventory collection. Stores the same document shape.\n 'nciiInventoryDeadLetter/{inventoryId}': NciiRetainedEvidenceInventoryV1Schema,\n 'nciiTemporaryHolds/{holdId}': NciiTemporaryHoldV1Schema,\n 'nciiRemovalJobs/{jobId}': NciiRemovalJobV1Schema,\n 'nciiRemovalJobs/{jobId}/nciiRemovalTargets/{targetKeyHash}': NciiRemovalTargetV1Schema,\n\n // ===== _appConfig singletons (public) =====\n '_appConfig/app': AppConfigSchema,\n '_appConfig/futurePlans': FuturePlansDocumentSchema,\n '_appConfig/rulesAndAgreements': RulesAndAgreementsSchema,\n // Content-pages migration (DJ ruling 2026-07-06): /terms, /privacy, and the\n // /take-it-down page copy render exclusively from these (all public pages —\n // take-it-down is a NO-LOGIN page, so its copy doc must be publicly readable).\n '_appConfig/termsOfService': LegalPageDocumentSchema,\n '_appConfig/privacyPolicy': LegalPageDocumentSchema,\n '_appConfig/takeItDownPageCopy': TakeItDownPageCopySchema,\n // The /dmca page's current projection — a public document like the three above.\n '_appConfig/dmcaPolicy': DmcaPolicyDocumentSchema,\n\n // ===== _serverData singletons (server-only — Cloud-Functions-only readers, BACKEND-108) =====\n '_serverData/agePolicy': AgePolicyConfigV1Schema,\n '_serverData/nciiPolicy': NciiPolicyConfigV1Schema,\n '_serverData/privilegedReviewerSecurity': PrivilegedReviewerSecurityProfileV1Schema,\n // The submitFeedback alias map — moved off the anonymously-readable top-level\n // `feedbackAliases` collection into the server-only bucket (BACKEND-108). The sibling\n // `feedbackDenylist` subcollection has no field contract (`.exists`-only) — see\n // PENDING_COLLECTIONS.\n '_serverData/feedbackLists/feedbackAliases/{aliasId}': FeedbackAliasSchema,\n\n // ===== _systemData singletons =====\n '_systemData/adminList': AdminListSchema,\n '_systemData/profanityList': ProfanityListSchema,\n '_systemData/reservedUsernames': ReservedUsernamesSchema,\n '_systemData/blockedFranchiseNames': BlockedFranchiseNamesSchema,\n '_systemData/appMode': AppModeMarkerSchema,\n '_systemData/hallMediaReaperCursor': HallMediaReaperCursorSchema,\n '_systemData/publicUsersReconcilerCursor': PublicUsersReconcilerCursorSchema,\n} as const satisfies Record<string, z.ZodTypeAny>;\n\nexport type RegisteredCollectionPath = keyof typeof COLLECTION_SCHEMAS;\n\n/**\n * Doc-id field annotation: for the listed bindings, the named body field equals the\n * Firestore document id and is injected at READ time (`{ ...doc.data(), <field>: doc.id }`),\n * never persisted — the write callables store the body via `Omit<…, '<field>'>`. The bound\n * schema models the (correct) consumer/read shape, where the field is required, so a raw\n * stored doc is \"missing\" it. The drift-check injects `{ [field]: doc.id, ...data }` before\n * validating, generalizing the one-off `AdminTaskDocSchema` stored-shape workaround into a\n * single mechanism so real-callable drift-checks don't false-flag every doc-id collection.\n * The schema-doc generator ignores this map. Keys are compiler-checked against the registry.\n */\nexport const COLLECTION_DOC_ID_FIELDS = {\n 'allWorkProjects/{workProjectId}/workProjectTales/{taleId}': 'uid',\n 'allWorkProjects/{workProjectId}/workProjectTales/{taleId}/taleChapters/{chapterId}': 'uid',\n 'allWorkProjects/{workProjectId}/workProjectTunes/{tuneId}': 'uid',\n 'allWorkProjects/{workProjectId}/workProjectTunes/{tuneId}/tuneTracks/{trackId}': 'uid',\n 'allWorkProjects/{workProjectId}/workProjectTelevision/{televisionId}': 'uid',\n 'allWorkProjects/{workProjectId}/workProjectTelevision/{televisionId}/televisionEpisodes/{episodeId}': 'uid',\n 'allWorkProjects/{workProjectId}/guildChatChannels/{guildChatChannelId}': 'guildChatChannelId',\n // Published hall sub-items: the doc id IS the live sub-item's id; `uid` is injected at\n // read (the publish writer spreads the live doc's stored body, which has no `uid`).\n 'hallItems/{hallItemId}/hallItemTales/{itemId}': 'uid',\n 'hallItems/{hallItemId}/hallItemTunes/{itemId}': 'uid',\n 'hallItems/{hallItemId}/hallItemTelevision/{itemId}': 'uid',\n 'activeUserNotifications/{notificationId}': 'id',\n 'activeAdminNotifications/{notificationId}': 'id',\n 'adminNotificationHistory/{notificationId}': 'archiveOccurrenceId',\n 'userProfiles/{userId}/notificationHistory/{notificationId}': 'archiveOccurrenceId',\n 'pendingNotifications/{notificationId}': 'id',\n 'statusReconcileQueue/{uid}': 'uid',\n} as const satisfies Partial<Record<RegisteredCollectionPath, string>>;\n\n/**\n * Collections that exist (in COLLECTIONS / *_SUBCOLLECTIONS or firestore.rules) but are\n * intentionally NOT bound to a schema, each with a reason. Listed EXPLICITLY so completeness is\n * enforced and nothing is silently uncovered; the registry test fails if a NEW unlisted collection\n * appears. These are the only remaining gaps after the schema-registry binding pass:\n *\n * - userMetadata: `userProfiles/{uid}/userMetadata/notificationSettings` — a firestore.rules\n * match and `PATH_BUILDERS.userMetadata` exist, but there is no live reader/writer and no\n * notification-settings type anywhere yet. Bind once that shape is implemented.\n * - feedbackDenylist: `_serverData/feedbackLists/feedbackDenylist/{deniedWord}` — Console-managed\n * (no callable writes it) and submitFeedback reads it via `.exists` only, so there is no field\n * contract to author a schema from. The doc id is the denied word; the body is unused.\n * - ncmecSubmissionAttempts: see the inline reason below.\n */\nexport const PENDING_COLLECTIONS: readonly string[] = [\n 'userMetadata',\n 'feedbackDenylist',\n // Per-submission NCMEC transmission attempts. The segment exists only in firestore.rules\n // today and has no writer or reader yet; the constant is registered so the name has one\n // owner. Bind once the attempt-record shape is implemented.\n 'ncmecSubmissionAttempts',\n] as const;\n"]}
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/doc-schemas/registry.ts"],"names":[],"mappings":"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","sourcesContent":["// Firestore collection registry — the single, authoritative binding from each Firestore\n// collection/subcollection path template to its document Zod schema. This is the input to\n// the schema-doc generator and the drift-check, and its completeness is CI-enforced\n// (registry.test.ts) against the COLLECTIONS / *_SUBCOLLECTIONS name constants, so a new\n// collection cannot be added without either a schema or an explicit PENDING entry.\n//\n// Path templates reuse the segment names from ../paths/collections.ts (and the shapes the\n// path-builders produce). `{placeholder}` segments are document/parent IDs.\n\nimport type { z } from 'zod';\nimport {\n FullUserSchema,\n UserPrivateDataSchema,\n CraftSkillSchema,\n CraftSkillReferenceSchema,\n} from './user.js';\nimport { PublicUserSchema } from './publicUser.js';\nimport { AccountDeletionRequestV1Schema } from './account-deletion.js';\nimport {\n FullWorkProjectSchema,\n PublicWorkProjectSchema,\n WorkFileFolderSchema,\n WorkFileSchema,\n WorkRealmSchema,\n RealmFileFolderSchema,\n GuildmateUserSchema,\n PublicGuildmateUserSchema,\n} from './work-project.js';\nimport {\n FullTaleSchema,\n FullChapterSchema,\n FullTuneSchema,\n FullTuneTrackSchema,\n FullTelevisionSchema,\n FullTelevisionEpisodeSchema,\n ThresholdItemSchema,\n HallSubmissionReservationSchema,\n PublishedHallItemSchema,\n PublishedChapterSchema,\n PublishedTuneTrackSchema,\n PublishedTelevisionEpisodeSchema,\n HallContentChangeRequestSchema,\n FuturePlansDocumentSchema,\n RulesAndAgreementsSchema,\n LegalPageDocumentSchema,\n TakeItDownPageCopySchema,\n DmcaPolicyDocumentSchema,\n HallLibraryPreferencesSchema,\n} from './content.js';\nimport {\n SquareStreetzPostSchema,\n MentionHistoryDocumentSchema,\n FollowEdgeSchema,\n FollowCounterSchema,\n SquareStreetzLikeSchema,\n TrendingPostsSchema,\n} from './social.js';\nimport {\n PledgePaymentSchema,\n PledgePaymentProviderRefSchema,\n ProcessedStripeEventSchema,\n PledgePaymentLedgerEventSchema,\n PaymentWebhookQuarantineSchema,\n PledgePaymentTotalsDocSchema,\n PledgeRefundRequestSchema,\n} from './payments.js';\nimport {\n FullCommissionListingSchema,\n CommissionProposalSchema,\n AuditionSchema,\n AuditionEntrySchema,\n UserAuditionVoteSchema,\n} from './commissions.js';\nimport {\n GuildChatChannelSchema,\n GuildInviteConversationSchema,\n AdminDispatchSchema,\n ChatMessageV1Schema,\n ConversationFileSchema,\n} from './messaging.js';\nimport {\n PublicDocumentVersionSchema,\n PublicDocumentDraftSchema,\n PublicDocumentReleaseSchema,\n} from './public-documents.js';\nimport { AppConfigSchema, AdminListSchema, ProfanityListSchema, ReservedUsernamesSchema, BlockedFranchiseNamesSchema, AppModeMarkerSchema } from './system.js';\nimport {\n ContentViolationSchema,\n ModerationCascadeManifestSchema,\n ModerationCascadeChangedDocSchema,\n} from './moderation.js';\nimport {\n AdminTaskDocSchema,\n} from './report-docs.js';\nimport { TTTAuditEventSchema } from './audit.js';\nimport {\n NotificationDocSchema,\n NotificationHistoryDocSchema,\n PendingNotificationSchema,\n} from './notifications.js';\nimport {\n NotificationDeliverySchema,\n NotificationFanoutJobSchema,\n} from './notification-ledger.js';\nimport { NotificationArchiveAllJobSchema } from './notification-archive-all-jobs.js';\nimport {\n ChatChannelAuthProjectionSchema,\n ChatScopeDegradedSchema,\n ChatScopeDegradedCauseSchema,\n ChatSyncEventSchema,\n ChatSyncFanoutJobSchema,\n ChatMessageOutboxSchema,\n ChatAdminActionCommandSchema,\n ChatHistoryAnonymizationJobSchema,\n ChatHistoryAnonymizationAffectedChunkSchema,\n} from './chat-sync.js';\nimport { SquareAnnouncementJobSchema } from './square-announcement-jobs.js';\nimport { PendingMediaSchema, ArchivedPendingMediaDocSchema } from '../media/pending-media.js';\nimport { MediaAssetSchema } from './media-assets.js';\nimport { MediaActivationJobSchema } from './media-activation-jobs.js';\nimport { MediaCopyIntentSchema } from './media-copy-intents.js';\nimport {\n ReservedDisplayNameSchema,\n ReservedRealmNameSchema,\n StakeShareAuditEventSchema,\n ShortLinkSchema,\n FeedbackAliasSchema,\n UserSuggestionSchema,\n StatusReconcileQueueEntrySchema,\n} from './operational.js';\n// ===== Trust & Safety — report spine (§A1) =====\nimport {\n ProtectedReportRootV1Schema,\n ReportPublicProjectionV1Schema,\n ReportGroupV1Schema,\n ReportGroupCountedReportSchema,\n ReportTargetSnapshotV1Schema,\n NarrativeRecordV1Schema,\n} from './safety/report.js';\nimport { SafetyCaseAlertV1Schema } from './safety/case-alert.js';\n// ===== Trust & Safety — child-safety case spine (§A1b, §A2) =====\nimport {\n ChildSafetyCaseListV1Schema,\n ChildSafetyCaseV1Schema,\n ChildSafetySourceSignalV1Schema,\n ChildSafetyDecisionV1Schema,\n ChildSafetyDecisionViewV1Schema,\n ChildSafetyCaseAccountV1Schema,\n ChildSafetyCaseAccountHistoryV1Schema,\n ChildSafetyNcmecSubmissionV1Schema,\n ChildSafetyNcmecSubmissionFileV1Schema,\n ChildSafetyLegalProcessEventV1Schema,\n} from './safety/case.js';\nimport {\n ChildSafetyOwningAliasV1Schema,\n} from './safety/case-aliases.js';\nimport {\n SafetyHoldRefV1Schema,\n SafetyHoldResourceV1Schema,\n SafetyResourceCommandV1Schema,\n SafetyResourceCommandAuthorizedRequestV1Schema,\n SafetyResourceCommandBypassRefV1Schema,\n} from './safety/holds.js';\nimport {\n SafetyEvidenceManifestV1Schema,\n SafetyEvidenceJobV1Schema,\n SafetyEvidenceJobItemDocV1Schema,\n SafetyEvidenceDispositionV1Schema,\n} from './safety/evidence.js';\nimport { EventProvenanceV1Schema } from './safety/provenance.js';\nimport {\n QuarantineSagaJobV1Schema,\n QuarantineSagaRelatedAssetV1Schema,\n NcmecSubmissionJobV1Schema,\n AccountActionCommandV1Schema,\n} from './safety/sagas.js';\nimport {\n SafetySlaMonitorV1Schema,\n SafetyMonitorHeartbeatV1Schema,\n} from './safety/monitors.js';\nimport { AgeAttestationNonceV1Schema, AgePolicyConfigV1Schema } from './safety/age.js';\n// ===== Trust & Safety — NCII / TAKE IT DOWN (§A11) =====\nimport { NciiAllegationV1Schema } from './ncii/allegations.js';\nimport {\n TakeItDownRequestRootV1Schema,\n TakeItDownRequesterPrivateV1Schema,\n TakeItDownSubmissionV1Schema,\n TakeItDownValidityDecisionV1Schema,\n TakeItDownValidityRationaleV1Schema,\n TakeItDownRequestActionV1Schema,\n TakeItDownEvidenceV1Schema,\n NciiRetainedEvidenceInventoryV1Schema,\n} from './ncii/requests.js';\nimport {\n NciiCaseV1Schema,\n NciiCaseAllegationLinkV1Schema,\n NciiCaseRequestLinkV1Schema,\n NciiCaseRemovalActionV1Schema,\n NciiBlockedHashV1Schema,\n NciiCaseClosureEventV1Schema,\n} from './ncii/cases.js';\nimport { NciiTemporaryHoldV1Schema } from './ncii/holds.js';\nimport {\n NciiRemovalJobV1Schema,\n NciiRemovalTargetV1Schema,\n} from './ncii/removal.js';\nimport {\n NciiPolicyConfigV1Schema,\n PrivilegedReviewerSecurityProfileV1Schema,\n} from './ncii/config.js';\nimport {\n HallMediaReaperCursorSchema,\n NcmecCompletionProofRecordV1Schema,\n NcmecPortalCorrectionRecordV1Schema,\n NcmecPortalReceiptArtifactV1Schema,\n OperatorStepUpSchema,\n PublicUsersReconcilerCursorSchema,\n SafetyReconcilerCursorSchema,\n SweepStateSchema,\n} from './backend-state.js';\n\nexport const COLLECTION_SCHEMAS = {\n // ===== Users =====\n 'userProfiles/{userId}': FullUserSchema,\n 'userProfiles/{userId}/privateData/{userId}': UserPrivateDataSchema,\n 'userProfiles/{userId}/privateData/hallLibraryPreferences': HallLibraryPreferencesSchema,\n 'userProfiles/{userId}/profileCraftSkills/{craftSkillId}': CraftSkillSchema,\n 'userProfiles/{userId}/auditionVotes/{auditionId}': UserAuditionVoteSchema,\n 'userProfiles/{userId}/mentionHistory/{docId}': MentionHistoryDocumentSchema,\n 'userProfiles/{userId}/notificationHistory/{notificationId}': NotificationHistoryDocSchema,\n 'userProfiles/{userId}/userLikes/likeHistory/squareStreetzLikes/{postId}': SquareStreetzLikeSchema,\n 'publicUsers/{uid}': PublicUserSchema,\n\n // ===== Work / Realm / Guild =====\n 'allWorkProjects/{workProjectId}': FullWorkProjectSchema,\n 'allWorkProjects/{workProjectId}/guildmateUsers/{uid}': GuildmateUserSchema,\n 'allWorkProjects/{workProjectId}/publicGuildmateUsers/{uid}': PublicGuildmateUserSchema,\n 'allWorkProjects/{workProjectId}/workFileFolders/{workFileFolderId}': WorkFileFolderSchema,\n 'allWorkProjects/{workProjectId}/workFileFolders/{workFileFolderId}/workFiles/{workFileId}': WorkFileSchema,\n 'allWorkProjects/{workProjectId}/hallSubmissionReservation/reservation': HallSubmissionReservationSchema,\n 'allWorkProjects/{workProjectId}/workProjectTales/{taleId}': FullTaleSchema,\n 'allWorkProjects/{workProjectId}/workProjectTales/{taleId}/taleChapters/{chapterId}': FullChapterSchema,\n 'allWorkProjects/{workProjectId}/workProjectTunes/{tuneId}': FullTuneSchema,\n 'allWorkProjects/{workProjectId}/workProjectTunes/{tuneId}/tuneTracks/{trackId}': FullTuneTrackSchema,\n 'allWorkProjects/{workProjectId}/workProjectTelevision/{televisionId}': FullTelevisionSchema,\n 'allWorkProjects/{workProjectId}/workProjectTelevision/{televisionId}/televisionEpisodes/{episodeId}': FullTelevisionEpisodeSchema,\n 'allWorkProjects/{workProjectId}/guildChatChannels/{guildChatChannelId}': GuildChatChannelSchema,\n // Guild channel + invite messages are REALTIME-ONLY (chat Worker DO) — no Firestore schema.\n 'publicWorkProjects/{workProjectId}': PublicWorkProjectSchema,\n 'workRealms/{workRealmId}': WorkRealmSchema,\n // Realm shared-file folders — steward-owned containers; callable-written, client-read denied\n // (the gallery projection returns them alongside the files).\n 'workRealms/{workRealmId}/realmFileFolders/{realmFileFolderId}': RealmFileFolderSchema,\n 'guildInviteConversations/{guildInviteId}': GuildInviteConversationSchema,\n // Conversation Files — the flat per-conversation file list. Backend-only writes;\n // client-readable only while the caller holds conversation read access.\n 'guildInviteConversations/{guildInviteId}/conversationFiles/{conversationFileId}': ConversationFileSchema,\n\n // ===== Square / Social =====\n // SquareStreetzPostSchema is a refined ZodObject (superRefine for the MEDIA-101\n // mediaAssetId↔mediaType pair invariant); the schema-doc generator and the\n // drift-check both unwrap the effect to introspect its shape, so binding the\n // refined schema here is correct.\n 'squareStreetzFeed/activePosts/socialPosts/{postId}': SquareStreetzPostSchema,\n 'squareStreetzFeed/trendingPosts': TrendingPostsSchema,\n 'followEdges/{followEdgeId}': FollowEdgeSchema,\n 'followCounters/{followCounterId}': FollowCounterSchema,\n // Durable Square announcement outbox (Admin-SDK-only; deterministic job ids).\n 'squareAnnouncementJobs/{jobId}': SquareAnnouncementJobSchema,\n\n // ===== Payments / pledge ledger =====\n 'pledgePayments/{pledgePaymentId}': PledgePaymentSchema,\n 'pledgePaymentProviderRefs/{pledgePaymentId}': PledgePaymentProviderRefSchema,\n 'processedStripeEvents/{stripeEventId}': ProcessedStripeEventSchema,\n 'pledgePaymentLedgerEvents/{ledgerId}': PledgePaymentLedgerEventSchema,\n 'paymentWebhookQuarantine/{stripeEventId}': PaymentWebhookQuarantineSchema,\n 'pledgePaymentTotals/summary': PledgePaymentTotalsDocSchema,\n 'pledgeRefundRequests/{requestId}': PledgeRefundRequestSchema,\n\n // ===== Threshold / Hall =====\n 'thresholdItems/{thresholdItemId}': ThresholdItemSchema,\n 'hallItems/{hallItemId}': PublishedHallItemSchema,\n // Published hall sub-item projections — the chapter/track/episode docs copied out of\n // the Work at publish time (runPublishApprovedHallLibraryItem). Segment names are the\n // HALL_ITEM_SUBCOLLECTIONS constants — fixed compound names, NOT derived from\n // WorkProjectType.\n 'hallItems/{hallItemId}/hallItemTales/{itemId}': PublishedChapterSchema,\n 'hallItems/{hallItemId}/hallItemTunes/{itemId}': PublishedTuneTrackSchema,\n 'hallItems/{hallItemId}/hallItemTelevision/{itemId}': PublishedTelevisionEpisodeSchema,\n 'hallContentChangeRequests/{changeRequestId}': HallContentChangeRequestSchema,\n\n // ===== Commission / Audition =====\n 'commissionListings/{commissionListingId}': FullCommissionListingSchema,\n 'commissionListings/{commissionListingId}/commissionProposals/{commissionProposalId}': CommissionProposalSchema,\n 'auditionBoard/{auditionId}': AuditionSchema,\n 'auditionBoard/{auditionId}/auditionEntries/{auditionEntryId}': AuditionEntrySchema,\n\n // ===== Moderation / Reports / Admin =====\n // The report spine (§A1): the restricted root, its public projection subdoc, and the\n // dedup/count group. The root + projection are written by the app's submitReport\n // callable; the group is maintained by an app-side trigger.\n 'contentReports/{reportId}': ProtectedReportRootV1Schema,\n 'contentReports/{reportId}/publicProjection/{reportId}': ReportPublicProjectionV1Schema,\n 'contentReports/{reportId}/privateDetails/snapshot': ReportTargetSnapshotV1Schema,\n 'contentReports/{reportId}/privateDetails/narrative': NarrativeRecordV1Schema,\n // The escalation narrative is byte-identical to the original — ONE shape, ONE definition\n // (ENG-002): the same NarrativeRecordV1Schema binds both docs, never a duplicate schema.\n 'contentReports/{reportId}/privateDetails/narrativeEscalation': NarrativeRecordV1Schema,\n 'activeReportGroups/{groupKey}': ReportGroupV1Schema,\n 'activeReportGroups/{groupKey}/reportGroupCountedReports/{reportId}': ReportGroupCountedReportSchema,\n 'adminTasks/{taskId}': AdminTaskDocSchema,\n 'contentViolations/{violationId}': ContentViolationSchema,\n 'moderationCascadeManifests/{cascadeId}': ModerationCascadeManifestSchema,\n 'moderationCascadeManifests/{cascadeId}/changedDocs/{changedDocId}': ModerationCascadeChangedDocSchema,\n 'auditEvents/{eventId}': TTTAuditEventSchema,\n 'stakeShareAuditEvents/{eventId}': StakeShareAuditEventSchema,\n 'pendingAdminDispatches/{adminDispatchId}': AdminDispatchSchema,\n 'pendingAdminDispatches/{adminDispatchId}/conversationMessages/{adminDispatchMessageId}': ChatMessageV1Schema,\n 'pendingAdminDispatches/{adminDispatchId}/conversationFiles/{conversationFileId}': ConversationFileSchema,\n\n // ===== Media pipeline =====\n 'pendingMedia/{pendingMediaId}': PendingMediaSchema,\n 'pendingMediaArchive/{pendingMediaId}': ArchivedPendingMediaDocSchema,\n 'mediaAssets/{mediaAssetId}': MediaAssetSchema,\n 'mediaActivationJobs/{jobId}': MediaActivationJobSchema,\n 'mediaCopyIntents/{newAssetId}': MediaCopyIntentSchema,\n\n // ===== Notifications =====\n 'activeUserNotifications/{notificationId}': NotificationDocSchema,\n 'activeAdminNotifications/{notificationId}': NotificationDocSchema,\n 'adminNotificationHistory/{notificationId}': NotificationHistoryDocSchema,\n 'pendingNotifications/{notificationId}': PendingNotificationSchema,\n\n // ===== Notification redesign — delivery ledger + fanout engine =====\n 'notificationDeliveries/{deliveryId}': NotificationDeliverySchema,\n 'notificationFanoutJobs/{jobId}': NotificationFanoutJobSchema,\n 'notificationArchiveAllJobs/{jobId}': NotificationArchiveAllJobSchema,\n\n // ===== Chat realtime sync / projection / commands =====\n 'chatChannelAuthProjections/{authPairKey}': ChatChannelAuthProjectionSchema,\n 'chatScopeDegraded/{scopeKey}': ChatScopeDegradedSchema,\n 'chatScopeDegraded/{scopeKey}/chatScopeDegradedCauses/{causeId}': ChatScopeDegradedCauseSchema,\n 'chatSyncEvents/{eventId}': ChatSyncEventSchema,\n 'chatSyncFanoutJobs/{jobId}': ChatSyncFanoutJobSchema,\n 'chatMessageOutbox/{commandId}': ChatMessageOutboxSchema,\n 'chatAdminActionCommands/{requestId}': ChatAdminActionCommandSchema,\n 'chatHistoryAnonymizationJobs/{jobId}': ChatHistoryAnonymizationJobSchema,\n 'chatHistoryAnonymizationJobs/{jobId}/affectedChunks/{chunkOrdinal}': ChatHistoryAnonymizationAffectedChunkSchema,\n\n // ===== Craft skills index =====\n 'craftSkillsByTag/{tag}/taggedCraftSkills/{compositeId}': CraftSkillReferenceSchema,\n\n // ===== Operational / utility =====\n 'reservedDisplayNames/{displayNameUppercase}': ReservedDisplayNameSchema,\n 'reservedRealmNames/{workingTitleUppercase}': ReservedRealmNameSchema,\n 'accountDeletionRequests/{uid}': AccountDeletionRequestV1Schema,\n 'shortLinks/{shortId}': ShortLinkSchema,\n 'feedbackSubmissions/{feedbackType}/userSuggestions/{suggestionId}': UserSuggestionSchema,\n 'statusReconcileQueue/{uid}': StatusReconcileQueueEntrySchema,\n\n // ===== Versioned public documents (backend-written; never public — the public reads the _appConfig projections) =====\n 'publicDocuments/{documentId}/publicDocumentVersions/{versionId}': PublicDocumentVersionSchema,\n 'publicDocumentDrafts/{documentId}': PublicDocumentDraftSchema,\n 'publicDocumentReleases/{releaseId}': PublicDocumentReleaseSchema,\n\n // ===== Trust & Safety — child-safety case spine (§A1b, §A2) =====\n 'childSafetyCaseList/{caseId}': ChildSafetyCaseListV1Schema,\n 'activeSafetyCaseAlerts/{caseId}': SafetyCaseAlertV1Schema,\n 'childSafetyCases/{caseId}': ChildSafetyCaseV1Schema,\n 'childSafetyCases/{caseId}/sourceSignals/{signalId}': ChildSafetySourceSignalV1Schema,\n 'childSafetyCases/{caseId}/childSafetyDecisions/{decisionId}': ChildSafetyDecisionV1Schema,\n 'childSafetyCases/{caseId}/childSafetyDecisions/{decisionId}/childSafetyDecisionViews/{viewId}': ChildSafetyDecisionViewV1Schema,\n 'childSafetyCases/{caseId}/childSafetyCaseAccounts/{uid}': ChildSafetyCaseAccountV1Schema,\n 'childSafetyCases/{caseId}/childSafetyCaseAccounts/{uid}/childSafetyCaseAccountHistory/{historyId}': ChildSafetyCaseAccountHistoryV1Schema,\n 'childSafetyCases/{caseId}/ncmecSubmissions/{submissionId}': ChildSafetyNcmecSubmissionV1Schema,\n 'childSafetyCases/{caseId}/ncmecSubmissions/{submissionId}/ncmecSubmissionFiles/{fileId}': ChildSafetyNcmecSubmissionFileV1Schema,\n // [H-05] the submission's single immutable completion-proof record (fixed doc id). Backend-only,\n // so its shape lives in doc-schemas/backend-state.ts alongside the portal artifacts.\n 'childSafetyCases/{caseId}/ncmecSubmissions/{submissionId}/ncmecCompletionProof/record': NcmecCompletionProofRecordV1Schema,\n 'childSafetyCases/{caseId}/legalProcess/{eventId}': ChildSafetyLegalProcessEventV1Schema,\n // Portal-filed NCMEC artifacts recorded by the two step-up-gated operator callables. Both\n // are backend-only (no client reader), so their shapes live in doc-schemas/backend-state.ts.\n 'childSafetyCases/{caseId}/portalReceiptArtifacts/{artifactId}': NcmecPortalReceiptArtifactV1Schema,\n 'childSafetyCases/{caseId}/ncmecPortalCorrections/{correctionId}': NcmecPortalCorrectionRecordV1Schema,\n 'childSafetyOwningAliases/{aliasId}': ChildSafetyOwningAliasV1Schema,\n\n // ===== Trust & Safety — holds + resource commands (§A3) =====\n 'safetyHoldRefs/{holdRefId}': SafetyHoldRefV1Schema,\n 'safetyHoldResources/{resourceKeyHash}': SafetyHoldResourceV1Schema,\n 'safetyResourceCommands/{commandDocId}': SafetyResourceCommandV1Schema,\n 'safetyResourceCommands/{commandDocId}/authorizedRequests/{requestId}': SafetyResourceCommandAuthorizedRequestV1Schema,\n 'safetyResourceCommands/{commandDocId}/bypassRefs/{refId}': SafetyResourceCommandBypassRefV1Schema,\n\n // ===== Trust & Safety — evidence + provenance (§A4, §A6) =====\n // SafetyEvidenceManifestV1Schema is a refined ZodObject (superRefine for the H5\n // sourceKind invariant); the schema-doc generator unwraps the effect to introspect\n // its shape, so binding the refined schema here is correct.\n 'safetyEvidenceManifests/{manifestId}': SafetyEvidenceManifestV1Schema,\n 'safetyEvidenceJobs/{jobId}': SafetyEvidenceJobV1Schema,\n 'safetyEvidenceJobs/{jobId}/safetyEvidenceJobItems/{itemId}': SafetyEvidenceJobItemDocV1Schema,\n 'safetyEvidenceJobs/{jobId}/safetyEvidenceJobDisposition/{locationId}': SafetyEvidenceDispositionV1Schema,\n 'eventProvenance/{eventId}': EventProvenanceV1Schema,\n\n // ===== Trust & Safety — sagas + closure (§A5) =====\n 'quarantineSagaJobs/{caseId}': QuarantineSagaJobV1Schema,\n 'quarantineSagaJobs/{caseId}/relatedAssets/{assetId}': QuarantineSagaRelatedAssetV1Schema,\n 'ncmecSubmissionJobs/{ncmecJobId}': NcmecSubmissionJobV1Schema,\n 'accountActionCommands/{accountActionCommandId}': AccountActionCommandV1Schema,\n\n // ===== Trust & Safety — SLA monitors + heartbeat (§A8) =====\n 'safetySlaMonitors/{monitorId}': SafetySlaMonitorV1Schema,\n 'safetyMonitorHeartbeat/global': SafetyMonitorHeartbeatV1Schema,\n\n // ===== Trust & Safety — age attestation nonces (§A7) =====\n 'ageAttestationNonces/{nonceHash}': AgeAttestationNonceV1Schema,\n\n // ===== Trust & Safety — operator step-up + reconciler cursors (backend-only) =====\n // Cloud-Functions-only readers/writers; client access denied in firestore.rules.\n 'operatorStepUp/{uid}': OperatorStepUpSchema,\n 'safetyReconcilerCursors/{cursorKey}': SafetyReconcilerCursorSchema,\n\n // ===== Scheduled user sweeps — durable cadence/cursor state (backend-only) =====\n 'sweepState/{sweepName}': SweepStateSchema,\n\n // ===== Trust & Safety — NCII / TAKE IT DOWN (§A11) =====\n 'nciiAllegations/{allegationId}': NciiAllegationV1Schema,\n 'takeItDownRequests/{requestId}': TakeItDownRequestRootV1Schema,\n 'takeItDownRequests/{requestId}/privateDetails/requester': TakeItDownRequesterPrivateV1Schema,\n 'takeItDownRequests/{requestId}/takeItDownSubmissions/{submissionId}': TakeItDownSubmissionV1Schema,\n 'takeItDownRequests/{requestId}/validityDecisions/{decisionId}': TakeItDownValidityDecisionV1Schema,\n 'takeItDownRequests/{requestId}/validityDecisions/{decisionId}/takeItDownValidityRationale/record': TakeItDownValidityRationaleV1Schema,\n 'takeItDownRequests/{requestId}/takeItDownActions/{actionId}': TakeItDownRequestActionV1Schema,\n // Deletion-verification record per evidence object — see SafetyEvidenceDispositionV1Schema for what\n // `result: 'gone'` means in THIS bucket (absent from the live bucket, not permanent destruction).\n 'takeItDownRequests/{requestId}/takeItDownEvidenceDisposition/{evidenceId}': SafetyEvidenceDispositionV1Schema,\n 'takeItDownRequests/{requestId}/takeItDownEvidence/{evidenceId}': TakeItDownEvidenceV1Schema,\n 'nciiCases/{caseId}': NciiCaseV1Schema,\n 'nciiCases/{caseId}/allegationLinks/{allegationId}': NciiCaseAllegationLinkV1Schema,\n 'nciiCases/{caseId}/requestLinks/{requestId}': NciiCaseRequestLinkV1Schema,\n 'nciiCases/{caseId}/removalActions/{actionId}': NciiCaseRemovalActionV1Schema,\n 'nciiCases/{caseId}/blockedHashes/{hashId}': NciiBlockedHashV1Schema,\n 'nciiCases/{caseId}/closureEvents/{eventId}': NciiCaseClosureEventV1Schema,\n 'nciiRetainedEvidenceInventory/{inventoryId}': NciiRetainedEvidenceInventoryV1Schema,\n // [H-01] dead-letter sink for inventory rows that could not be written to the primary\n // nciiRetainedEvidenceInventory collection. Stores the same document shape.\n 'nciiInventoryDeadLetter/{inventoryId}': NciiRetainedEvidenceInventoryV1Schema,\n 'nciiTemporaryHolds/{holdId}': NciiTemporaryHoldV1Schema,\n 'nciiRemovalJobs/{jobId}': NciiRemovalJobV1Schema,\n 'nciiRemovalJobs/{jobId}/nciiRemovalTargets/{targetKeyHash}': NciiRemovalTargetV1Schema,\n\n // ===== _appConfig singletons (public) =====\n '_appConfig/app': AppConfigSchema,\n '_appConfig/futurePlans': FuturePlansDocumentSchema,\n '_appConfig/rulesAndAgreements': RulesAndAgreementsSchema,\n // Content-pages migration (DJ ruling 2026-07-06): /terms, /privacy, and the\n // /take-it-down page copy render exclusively from these (all public pages —\n // take-it-down is a NO-LOGIN page, so its copy doc must be publicly readable).\n '_appConfig/termsOfService': LegalPageDocumentSchema,\n '_appConfig/privacyPolicy': LegalPageDocumentSchema,\n '_appConfig/takeItDownPageCopy': TakeItDownPageCopySchema,\n // The /dmca page's current projection — a public document like the three above.\n '_appConfig/dmcaPolicy': DmcaPolicyDocumentSchema,\n\n // ===== _serverData singletons (server-only — Cloud-Functions-only readers, BACKEND-108) =====\n '_serverData/agePolicy': AgePolicyConfigV1Schema,\n '_serverData/nciiPolicy': NciiPolicyConfigV1Schema,\n '_serverData/privilegedReviewerSecurity': PrivilegedReviewerSecurityProfileV1Schema,\n // The submitFeedback alias map — moved off the anonymously-readable top-level\n // `feedbackAliases` collection into the server-only bucket (BACKEND-108). The sibling\n // `feedbackDenylist` subcollection has no field contract (`.exists`-only) — see\n // PENDING_COLLECTIONS.\n '_serverData/feedbackLists/feedbackAliases/{aliasId}': FeedbackAliasSchema,\n\n // ===== _systemData singletons =====\n '_systemData/adminList': AdminListSchema,\n '_systemData/profanityList': ProfanityListSchema,\n '_systemData/reservedUsernames': ReservedUsernamesSchema,\n '_systemData/blockedFranchiseNames': BlockedFranchiseNamesSchema,\n '_systemData/appMode': AppModeMarkerSchema,\n '_systemData/hallMediaReaperCursor': HallMediaReaperCursorSchema,\n '_systemData/publicUsersReconcilerCursor': PublicUsersReconcilerCursorSchema,\n} as const satisfies Record<string, z.ZodTypeAny>;\n\nexport type RegisteredCollectionPath = keyof typeof COLLECTION_SCHEMAS;\n\n/**\n * Doc-id field annotation: for the listed bindings, the named body field equals the\n * Firestore document id and is injected at READ time (`{ ...doc.data(), <field>: doc.id }`),\n * never persisted — the write callables store the body via `Omit<…, '<field>'>`. The bound\n * schema models the (correct) consumer/read shape, where the field is required, so a raw\n * stored doc is \"missing\" it. The drift-check injects `{ [field]: doc.id, ...data }` before\n * validating, generalizing the one-off `AdminTaskDocSchema` stored-shape workaround into a\n * single mechanism so real-callable drift-checks don't false-flag every doc-id collection.\n * The schema-doc generator ignores this map. Keys are compiler-checked against the registry.\n */\nexport const COLLECTION_DOC_ID_FIELDS = {\n 'allWorkProjects/{workProjectId}/workProjectTales/{taleId}': 'uid',\n 'allWorkProjects/{workProjectId}/workProjectTales/{taleId}/taleChapters/{chapterId}': 'uid',\n 'allWorkProjects/{workProjectId}/workProjectTunes/{tuneId}': 'uid',\n 'allWorkProjects/{workProjectId}/workProjectTunes/{tuneId}/tuneTracks/{trackId}': 'uid',\n 'allWorkProjects/{workProjectId}/workProjectTelevision/{televisionId}': 'uid',\n 'allWorkProjects/{workProjectId}/workProjectTelevision/{televisionId}/televisionEpisodes/{episodeId}': 'uid',\n 'allWorkProjects/{workProjectId}/guildChatChannels/{guildChatChannelId}': 'guildChatChannelId',\n // Published hall sub-items: the doc id IS the live sub-item's id; `uid` is injected at\n // read (the publish writer spreads the live doc's stored body, which has no `uid`).\n 'hallItems/{hallItemId}/hallItemTales/{itemId}': 'uid',\n 'hallItems/{hallItemId}/hallItemTunes/{itemId}': 'uid',\n 'hallItems/{hallItemId}/hallItemTelevision/{itemId}': 'uid',\n 'activeUserNotifications/{notificationId}': 'id',\n 'activeAdminNotifications/{notificationId}': 'id',\n 'adminNotificationHistory/{notificationId}': 'archiveOccurrenceId',\n 'userProfiles/{userId}/notificationHistory/{notificationId}': 'archiveOccurrenceId',\n 'pendingNotifications/{notificationId}': 'id',\n 'statusReconcileQueue/{uid}': 'uid',\n} as const satisfies Partial<Record<RegisteredCollectionPath, string>>;\n\n/**\n * Collections that exist (in COLLECTIONS / *_SUBCOLLECTIONS or firestore.rules) but are\n * intentionally NOT bound to a schema, each with a reason. Listed EXPLICITLY so completeness is\n * enforced and nothing is silently uncovered; the registry test fails if a NEW unlisted collection\n * appears. These are the only remaining gaps after the schema-registry binding pass:\n *\n * - userMetadata: `userProfiles/{uid}/userMetadata/notificationSettings` — a firestore.rules\n * match and `PATH_BUILDERS.userMetadata` exist, but there is no live reader/writer and no\n * notification-settings type anywhere yet. Bind once that shape is implemented.\n * - feedbackDenylist: `_serverData/feedbackLists/feedbackDenylist/{deniedWord}` — Console-managed\n * (no callable writes it) and submitFeedback reads it via `.exists` only, so there is no field\n * contract to author a schema from. The doc id is the denied word; the body is unused.\n * - ncmecSubmissionAttempts: see the inline reason below.\n */\nexport const PENDING_COLLECTIONS: readonly string[] = [\n 'userMetadata',\n 'feedbackDenylist',\n // Per-submission NCMEC transmission attempts. The segment exists only in firestore.rules\n // today and has no writer or reader yet; the constant is registered so the name has one\n // owner. Bind once the attempt-record shape is implemented.\n 'ncmecSubmissionAttempts',\n] as const;\n"]}
|
|
@@ -31,6 +31,7 @@ export declare const COLLECTION_REFS: {
|
|
|
31
31
|
readonly adminDispatchConversationMessages: (adminDispatchId: string) => [string, string, string];
|
|
32
32
|
readonly pendingMedia: () => [string];
|
|
33
33
|
readonly pendingMediaArchive: () => [string];
|
|
34
|
+
readonly mediaCopyIntents: () => [string];
|
|
34
35
|
readonly publicDocumentVersions: (documentId: PublicDocumentId) => [string, string, string];
|
|
35
36
|
};
|
|
36
37
|
//# sourceMappingURL=collection-refs.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collection-refs.d.ts","sourceRoot":"","sources":["../../src/paths/collection-refs.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEzE,eAAO,MAAM,eAAe;iCAER,CAAC,MAAM,CAAC;oCACL,CAAC,MAAM,CAAC;uCACL,CAAC,MAAM,CAAC;+BAChB,CAAC,MAAM,CAAC;sCACD,CAAC,MAAM,CAAC;uCACP,CAAC,MAAM,CAAC;kCACb,CAAC,MAAM,CAAC;gCACV,CAAC,MAAM,CAAC;mCACL,CAAC,MAAM,CAAC;4CAIC,CAAC,MAAM,CAAC;6CACP,CAAC,MAAM,CAAC;uCAGZ,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;+CAIzB,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;+CAGjC,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;oDAG5B,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;8DAGvB,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;gDAG/C,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;6CAMpC,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;gCAIhD,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;mCAIrB,CAAC,MAAM,CAAC;8BAEb,CAAC,MAAM,CAAC;8CAEQ,CAAC,MAAM,CAAC;wDAGI,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;2CAG9C,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;yCAGnC,MAAM,UAAU,MAAM,KAAG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;uDAG5D,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;2DAK7B,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;+DAG7B,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;kEAO9B,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;iCAOpE,CAAC,MAAM,CAAC;wCAED,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"collection-refs.d.ts","sourceRoot":"","sources":["../../src/paths/collection-refs.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEzE,eAAO,MAAM,eAAe;iCAER,CAAC,MAAM,CAAC;oCACL,CAAC,MAAM,CAAC;uCACL,CAAC,MAAM,CAAC;+BAChB,CAAC,MAAM,CAAC;sCACD,CAAC,MAAM,CAAC;uCACP,CAAC,MAAM,CAAC;kCACb,CAAC,MAAM,CAAC;gCACV,CAAC,MAAM,CAAC;mCACL,CAAC,MAAM,CAAC;4CAIC,CAAC,MAAM,CAAC;6CACP,CAAC,MAAM,CAAC;uCAGZ,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;+CAIzB,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;+CAGjC,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;oDAG5B,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;8DAGvB,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;gDAG/C,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;6CAMpC,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;gCAIhD,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;mCAIrB,CAAC,MAAM,CAAC;8BAEb,CAAC,MAAM,CAAC;8CAEQ,CAAC,MAAM,CAAC;wDAGI,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;2CAG9C,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;yCAGnC,MAAM,UAAU,MAAM,KAAG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;uDAG5D,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;2DAK7B,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;+DAG7B,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;kEAO9B,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;iCAOpE,CAAC,MAAM,CAAC;wCAED,CAAC,MAAM,CAAC;qCAIX,CAAC,MAAM,CAAC;kDAIO,gBAAgB,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;CAExE,CAAC"}
|
|
@@ -56,6 +56,9 @@ export const COLLECTION_REFS = {
|
|
|
56
56
|
// PATH_BUILDERS.pendingMediaArchive.
|
|
57
57
|
pendingMedia: () => [COLLECTIONS.PENDING_MEDIA],
|
|
58
58
|
pendingMediaArchive: () => [COLLECTIONS.PENDING_MEDIA_ARCHIVE],
|
|
59
|
+
// The media copy intents, which the orphaned-copy sweep queries for expired ones; the
|
|
60
|
+
// per-document counterpart is PATH_BUILDERS.mediaCopyIntent.
|
|
61
|
+
mediaCopyIntents: () => [COLLECTIONS.MEDIA_COPY_INTENTS],
|
|
59
62
|
// One public document's immutable version history (queried newest-first by `version` for
|
|
60
63
|
// the admin history read). The per-document counterpart is PATH_BUILDERS.publicDocumentVersion.
|
|
61
64
|
publicDocumentVersions: (documentId) => [COLLECTIONS.PUBLIC_DOCUMENTS, documentId, NESTED_SUBCOLLECTIONS.PUBLIC_DOCUMENT_VERSIONS],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collection-refs.js","sourceRoot":"","sources":["../../src/paths/collection-refs.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,EAAE;AACF,8DAA8D;AAC9D,kEAAkE;AAElE,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,2BAA2B,EAC3B,yBAAyB,EACzB,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAG1B,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,wBAAwB;IACxB,YAAY,EAAE,GAAa,EAAE,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC;IACzD,eAAe,EAAE,GAAa,EAAE,CAAC,CAAC,WAAW,CAAC,iBAAiB,CAAC;IAChE,kBAAkB,EAAE,GAAa,EAAE,CAAC,CAAC,WAAW,CAAC,oBAAoB,CAAC;IACtE,UAAU,EAAE,GAAa,EAAE,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC;IACrD,iBAAiB,EAAE,GAAa,EAAE,CAAC,CAAC,WAAW,CAAC,mBAAmB,CAAC;IACpE,kBAAkB,EAAE,GAAa,EAAE,CAAC,CAAC,WAAW,CAAC,mBAAmB,CAAC;IACrE,aAAa,EAAE,GAAa,EAAE,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC;IAC3D,WAAW,EAAE,GAAa,EAAE,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC;IACvD,cAAc,EAAE,GAAa,EAAE,CAAC,CAAC,WAAW,CAAC,eAAe,CAAC;IAE7D,gFAAgF;IAChF,yEAAyE;IACzE,uBAAuB,EAAE,GAAa,EAAE,CAAC,CAAC,WAAW,CAAC,yBAAyB,CAAC;IAChF,wBAAwB,EAAE,GAAa,EAAE,CAAC,CAAC,WAAW,CAAC,0BAA0B,CAAC;IAElF,sBAAsB;IACtB,eAAe,EAAE,CAAC,MAAc,EAA4B,EAAE,CAC5D,CAAC,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,mBAAmB,CAAC,oBAAoB,CAAC;IAE/E,6BAA6B;IAC7B,gBAAgB,EAAE,CAAC,aAAqB,EAA4B,EAAE,CACpE,CAAC,WAAW,CAAC,iBAAiB,EAAE,aAAa,EAAE,2BAA2B,CAAC,kBAAkB,CAAC;IAEhG,gBAAgB,EAAE,CAAC,aAAqB,EAA4B,EAAE,CACpE,CAAC,WAAW,CAAC,iBAAiB,EAAE,aAAa,EAAE,2BAA2B,CAAC,kBAAkB,CAAC;IAEhG,qBAAqB,EAAE,CAAC,aAAqB,EAA4B,EAAE,CACzE,CAAC,WAAW,CAAC,iBAAiB,EAAE,aAAa,EAAE,2BAA2B,CAAC,uBAAuB,CAAC;IAErG,+BAA+B,EAAE,CAAC,aAAqB,EAA4B,EAAE,CACnF,CAAC,WAAW,CAAC,iBAAiB,EAAE,aAAa,EAAE,2BAA2B,CAAC,sBAAsB,CAAC;IAEpG,iBAAiB,EAAE,CAAC,aAAqB,EAA4B,EAAE,CACrE,CAAC,WAAW,CAAC,iBAAiB,EAAE,aAAa,EAAE,2BAA2B,CAAC,mBAAmB,CAAC;IAEjG,2FAA2F;IAC3F,iFAAiF;IACjF,mEAAmE;IACnE,gBAAgB,EAAE,CAAC,WAAmB,EAA4B,EAAE,CAClE,CAAC,WAAW,CAAC,WAAW,EAAE,WAAW,EAAE,yBAAyB,CAAC,kBAAkB,CAAC;IAEtF,4BAA4B;IAC5B,WAAW,EAAE,GAA6B,EAAE,CAC1C,CAAC,WAAW,CAAC,mBAAmB,EAAE,qBAAqB,CAAC,YAAY,EAAE,qBAAqB,CAAC,YAAY,CAAC;IAE3G,0BAA0B;IAC1B,cAAc,EAAE,GAAa,EAAE,CAAC,CAAC,WAAW,CAAC,eAAe,CAAC;IAE7D,SAAS,EAAE,GAAa,EAAE,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC;IAEnD,yBAAyB,EAAE,GAAa,EAAE,CAAC,CAAC,WAAW,CAAC,4BAA4B,CAAC;IAErF,kCAAkC;IAClC,mBAAmB,EAAE,CAAC,mBAA2B,EAA4B,EAAE,CAC7E,CAAC,WAAW,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,qBAAqB,CAAC,oBAAoB,CAAC;IAEpG,eAAe,EAAE,CAAC,UAAkB,EAA4B,EAAE,CAChE,CAAC,WAAW,CAAC,cAAc,EAAE,UAAU,EAAE,qBAAqB,CAAC,gBAAgB,CAAC;IAElF,UAAU,EAAE,CAAC,aAAqB,EAAE,MAAc,EAAqD,EAAE,CACvG,CAAC,WAAW,CAAC,iBAAiB,EAAE,aAAa,EAAE,2BAA2B,CAAC,kBAAkB,EAAE,MAAM,EAAE,qBAAqB,CAAC,WAAW,CAAU;IAEpJ,4BAA4B,EAAE,CAAC,SAAiB,EAA4B,EAAE,CAC5E,CAAC,WAAW,CAAC,4BAA4B,EAAE,SAAS,EAAE,qBAAqB,CAAC,YAAY,CAAC;IAE3F,kFAAkF;IAClF,8DAA8D;IAC9D,4BAA4B,EAAE,CAAC,aAAqB,EAA4B,EAAE,CAChF,CAAC,WAAW,CAAC,0BAA0B,EAAE,aAAa,EAAE,qBAAqB,CAAC,kBAAkB,CAAC;IAEnG,8BAA8B,EAAE,CAAC,eAAuB,EAA4B,EAAE,CACpF,CAAC,WAAW,CAAC,wBAAwB,EAAE,eAAe,EAAE,qBAAqB,CAAC,kBAAkB,CAAC;IAEnG,uFAAuF;IACvF,yFAAyF;IACzF,0FAA0F;IAC1F,0CAA0C;IAC1C,iCAAiC,EAAE,CAAC,eAAuB,EAA4B,EAAE,CACvF,CAAC,WAAW,CAAC,wBAAwB,EAAE,eAAe,EAAE,qBAAqB,CAAC,qBAAqB,CAAC;IAEtG,uFAAuF;IACvF,qFAAqF;IACrF,gFAAgF;IAChF,qCAAqC;IACrC,YAAY,EAAE,GAAa,EAAE,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC;IAEzD,mBAAmB,EAAE,GAAa,EAAE,CAAC,CAAC,WAAW,CAAC,qBAAqB,CAAC;IAExE,yFAAyF;IACzF,gGAAgG;IAChG,sBAAsB,EAAE,CAAC,UAA4B,EAA4B,EAAE,CACjF,CAAC,WAAW,CAAC,gBAAgB,EAAE,UAAU,EAAE,qBAAqB,CAAC,wBAAwB,CAAC;CACpF,CAAC","sourcesContent":["// Collection reference builders — for collection-level operations.\n//\n// Frontend: collection(db, ...COLLECTION_REFS.userProfiles())\n// Backend: db.collection(toPath(COLLECTION_REFS.userProfiles()))\n\nimport {\n COLLECTIONS,\n USER_SUBCOLLECTIONS,\n WORK_PROJECT_SUBCOLLECTIONS,\n WORK_REALM_SUBCOLLECTIONS,\n NESTED_SUBCOLLECTIONS,\n} from './collections.js';\nimport type { PublicDocumentId } from '../constants/public-documents.js';\n\nexport const COLLECTION_REFS = {\n // Top-level collections\n userProfiles: (): [string] => [COLLECTIONS.USER_PROFILES],\n allWorkProjects: (): [string] => [COLLECTIONS.ALL_WORK_PROJECTS],\n publicWorkProjects: (): [string] => [COLLECTIONS.PUBLIC_WORK_PROJECTS],\n workRealms: (): [string] => [COLLECTIONS.WORK_REALMS],\n squareStreetzFeed: (): [string] => [COLLECTIONS.SQUARE_STREETZ_FEED],\n commissionListings: (): [string] => [COLLECTIONS.COMMISSION_LISTINGS],\n auditionBoard: (): [string] => [COLLECTIONS.AUDITION_BOARD],\n followEdges: (): [string] => [COLLECTIONS.FOLLOW_EDGES],\n followCounters: (): [string] => [COLLECTIONS.FOLLOW_COUNTERS],\n\n // Active notification lanes. Both collections are top-level and are selected by\n // notification category; callers never hand-roll their collection names.\n activeUserNotifications: (): [string] => [COLLECTIONS.ACTIVE_USER_NOTIFICATIONS],\n activeAdminNotifications: (): [string] => [COLLECTIONS.ACTIVE_ADMIN_NOTIFICATIONS],\n\n // User subcollections\n userCraftSkills: (userId: string): [string, string, string] =>\n [COLLECTIONS.USER_PROFILES, userId, USER_SUBCOLLECTIONS.PROFILE_CRAFT_SKILLS],\n\n // WorkProject subcollections\n workProjectTales: (workProjectId: string): [string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_PROJECT_TALES],\n\n workProjectTunes: (workProjectId: string): [string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_PROJECT_TUNES],\n\n workProjectTelevision: (workProjectId: string): [string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_PROJECT_TELEVISION],\n\n workProjectPublicGuildmateUsers: (workProjectId: string): [string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.PUBLIC_GUILDMATE_USERS],\n\n guildChatChannels: (workProjectId: string): [string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.GUILD_CHAT_CHANNELS],\n\n // WorkRealm subcollections — the steward's realm shared-file folders. The projection owner\n // lists this collection (bounded by MAX_REALM_FILE_FOLDERS) and the folder-cap /\n // name-uniqueness checks query it; clients never read it directly.\n realmFileFolders: (workRealmId: string): [string, string, string] =>\n [COLLECTIONS.WORK_REALMS, workRealmId, WORK_REALM_SUBCOLLECTIONS.REALM_FILE_FOLDERS],\n\n // SquareStreetz collections\n activePosts: (): [string, string, string] =>\n [COLLECTIONS.SQUARE_STREETZ_FEED, NESTED_SUBCOLLECTIONS.ACTIVE_POSTS, NESTED_SUBCOLLECTIONS.SOCIAL_POSTS],\n\n // HallLibrary collections\n thresholdItems: (): [string] => [COLLECTIONS.THRESHOLD_ITEMS],\n\n hallItems: (): [string] => [COLLECTIONS.HALL_ITEMS],\n\n hallContentChangeRequests: (): [string] => [COLLECTIONS.HALL_CONTENT_CHANGE_REQUESTS],\n\n // Commission/Audition collections\n commissionProposals: (commissionListingId: string): [string, string, string] =>\n [COLLECTIONS.COMMISSION_LISTINGS, commissionListingId, NESTED_SUBCOLLECTIONS.COMMISSION_PROPOSALS],\n\n auditionEntries: (auditionId: string): [string, string, string] =>\n [COLLECTIONS.AUDITION_BOARD, auditionId, NESTED_SUBCOLLECTIONS.AUDITION_ENTRIES],\n\n tuneTracks: (workProjectId: string, tuneId: string): readonly [string, string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_PROJECT_TUNES, tuneId, NESTED_SUBCOLLECTIONS.TUNE_TRACKS] as const,\n\n moderationCascadeChangedDocs: (cascadeId: string): [string, string, string] =>\n [COLLECTIONS.MODERATION_CASCADE_MANIFESTS, cascadeId, NESTED_SUBCOLLECTIONS.CHANGED_DOCS],\n\n // Conversation Files list for each supported ConversationFileRef scope (the panel\n // subscribes to the collection; the backend writes the docs).\n guildInviteConversationFiles: (guildInviteId: string): [string, string, string] =>\n [COLLECTIONS.GUILD_INVITE_CONVERSATIONS, guildInviteId, NESTED_SUBCOLLECTIONS.CONVERSATION_FILES],\n\n adminDispatchConversationFiles: (adminDispatchId: string): [string, string, string] =>\n [COLLECTIONS.PENDING_ADMIN_DISPATCHES, adminDispatchId, NESTED_SUBCOLLECTIONS.CONVERSATION_FILES],\n\n // The admin-support thread's message subcollection. Backend writers mint a new message\n // document with `db.collection(toPath(...)).doc()` so the id is a Firestore auto-id; the\n // admin-dispatch panel subscribes to the same collection. The per-document counterpart is\n // PATH_BUILDERS.adminConversationMessage.\n adminDispatchConversationMessages: (adminDispatchId: string): [string, string, string] =>\n [COLLECTIONS.PENDING_ADMIN_DISPATCHES, adminDispatchId, NESTED_SUBCOLLECTIONS.CONVERSATION_MESSAGES],\n\n // The upload pipeline's pending-row collection and the archive it sweeps terminal rows\n // into. The sweep addresses both as COLLECTIONS (query the live one, write a row per\n // archived doc); the per-document counterparts are PATH_BUILDERS.pendingMedia /\n // PATH_BUILDERS.pendingMediaArchive.\n pendingMedia: (): [string] => [COLLECTIONS.PENDING_MEDIA],\n\n pendingMediaArchive: (): [string] => [COLLECTIONS.PENDING_MEDIA_ARCHIVE],\n\n // One public document's immutable version history (queried newest-first by `version` for\n // the admin history read). The per-document counterpart is PATH_BUILDERS.publicDocumentVersion.\n publicDocumentVersions: (documentId: PublicDocumentId): [string, string, string] =>\n [COLLECTIONS.PUBLIC_DOCUMENTS, documentId, NESTED_SUBCOLLECTIONS.PUBLIC_DOCUMENT_VERSIONS],\n} as const;\n"]}
|
|
1
|
+
{"version":3,"file":"collection-refs.js","sourceRoot":"","sources":["../../src/paths/collection-refs.ts"],"names":[],"mappings":"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","sourcesContent":["// Collection reference builders — for collection-level operations.\n//\n// Frontend: collection(db, ...COLLECTION_REFS.userProfiles())\n// Backend: db.collection(toPath(COLLECTION_REFS.userProfiles()))\n\nimport {\n COLLECTIONS,\n USER_SUBCOLLECTIONS,\n WORK_PROJECT_SUBCOLLECTIONS,\n WORK_REALM_SUBCOLLECTIONS,\n NESTED_SUBCOLLECTIONS,\n} from './collections.js';\nimport type { PublicDocumentId } from '../constants/public-documents.js';\n\nexport const COLLECTION_REFS = {\n // Top-level collections\n userProfiles: (): [string] => [COLLECTIONS.USER_PROFILES],\n allWorkProjects: (): [string] => [COLLECTIONS.ALL_WORK_PROJECTS],\n publicWorkProjects: (): [string] => [COLLECTIONS.PUBLIC_WORK_PROJECTS],\n workRealms: (): [string] => [COLLECTIONS.WORK_REALMS],\n squareStreetzFeed: (): [string] => [COLLECTIONS.SQUARE_STREETZ_FEED],\n commissionListings: (): [string] => [COLLECTIONS.COMMISSION_LISTINGS],\n auditionBoard: (): [string] => [COLLECTIONS.AUDITION_BOARD],\n followEdges: (): [string] => [COLLECTIONS.FOLLOW_EDGES],\n followCounters: (): [string] => [COLLECTIONS.FOLLOW_COUNTERS],\n\n // Active notification lanes. Both collections are top-level and are selected by\n // notification category; callers never hand-roll their collection names.\n activeUserNotifications: (): [string] => [COLLECTIONS.ACTIVE_USER_NOTIFICATIONS],\n activeAdminNotifications: (): [string] => [COLLECTIONS.ACTIVE_ADMIN_NOTIFICATIONS],\n\n // User subcollections\n userCraftSkills: (userId: string): [string, string, string] =>\n [COLLECTIONS.USER_PROFILES, userId, USER_SUBCOLLECTIONS.PROFILE_CRAFT_SKILLS],\n\n // WorkProject subcollections\n workProjectTales: (workProjectId: string): [string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_PROJECT_TALES],\n\n workProjectTunes: (workProjectId: string): [string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_PROJECT_TUNES],\n\n workProjectTelevision: (workProjectId: string): [string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_PROJECT_TELEVISION],\n\n workProjectPublicGuildmateUsers: (workProjectId: string): [string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.PUBLIC_GUILDMATE_USERS],\n\n guildChatChannels: (workProjectId: string): [string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.GUILD_CHAT_CHANNELS],\n\n // WorkRealm subcollections — the steward's realm shared-file folders. The projection owner\n // lists this collection (bounded by MAX_REALM_FILE_FOLDERS) and the folder-cap /\n // name-uniqueness checks query it; clients never read it directly.\n realmFileFolders: (workRealmId: string): [string, string, string] =>\n [COLLECTIONS.WORK_REALMS, workRealmId, WORK_REALM_SUBCOLLECTIONS.REALM_FILE_FOLDERS],\n\n // SquareStreetz collections\n activePosts: (): [string, string, string] =>\n [COLLECTIONS.SQUARE_STREETZ_FEED, NESTED_SUBCOLLECTIONS.ACTIVE_POSTS, NESTED_SUBCOLLECTIONS.SOCIAL_POSTS],\n\n // HallLibrary collections\n thresholdItems: (): [string] => [COLLECTIONS.THRESHOLD_ITEMS],\n\n hallItems: (): [string] => [COLLECTIONS.HALL_ITEMS],\n\n hallContentChangeRequests: (): [string] => [COLLECTIONS.HALL_CONTENT_CHANGE_REQUESTS],\n\n // Commission/Audition collections\n commissionProposals: (commissionListingId: string): [string, string, string] =>\n [COLLECTIONS.COMMISSION_LISTINGS, commissionListingId, NESTED_SUBCOLLECTIONS.COMMISSION_PROPOSALS],\n\n auditionEntries: (auditionId: string): [string, string, string] =>\n [COLLECTIONS.AUDITION_BOARD, auditionId, NESTED_SUBCOLLECTIONS.AUDITION_ENTRIES],\n\n tuneTracks: (workProjectId: string, tuneId: string): readonly [string, string, string, string, string] =>\n [COLLECTIONS.ALL_WORK_PROJECTS, workProjectId, WORK_PROJECT_SUBCOLLECTIONS.WORK_PROJECT_TUNES, tuneId, NESTED_SUBCOLLECTIONS.TUNE_TRACKS] as const,\n\n moderationCascadeChangedDocs: (cascadeId: string): [string, string, string] =>\n [COLLECTIONS.MODERATION_CASCADE_MANIFESTS, cascadeId, NESTED_SUBCOLLECTIONS.CHANGED_DOCS],\n\n // Conversation Files list for each supported ConversationFileRef scope (the panel\n // subscribes to the collection; the backend writes the docs).\n guildInviteConversationFiles: (guildInviteId: string): [string, string, string] =>\n [COLLECTIONS.GUILD_INVITE_CONVERSATIONS, guildInviteId, NESTED_SUBCOLLECTIONS.CONVERSATION_FILES],\n\n adminDispatchConversationFiles: (adminDispatchId: string): [string, string, string] =>\n [COLLECTIONS.PENDING_ADMIN_DISPATCHES, adminDispatchId, NESTED_SUBCOLLECTIONS.CONVERSATION_FILES],\n\n // The admin-support thread's message subcollection. Backend writers mint a new message\n // document with `db.collection(toPath(...)).doc()` so the id is a Firestore auto-id; the\n // admin-dispatch panel subscribes to the same collection. The per-document counterpart is\n // PATH_BUILDERS.adminConversationMessage.\n adminDispatchConversationMessages: (adminDispatchId: string): [string, string, string] =>\n [COLLECTIONS.PENDING_ADMIN_DISPATCHES, adminDispatchId, NESTED_SUBCOLLECTIONS.CONVERSATION_MESSAGES],\n\n // The upload pipeline's pending-row collection and the archive it sweeps terminal rows\n // into. The sweep addresses both as COLLECTIONS (query the live one, write a row per\n // archived doc); the per-document counterparts are PATH_BUILDERS.pendingMedia /\n // PATH_BUILDERS.pendingMediaArchive.\n pendingMedia: (): [string] => [COLLECTIONS.PENDING_MEDIA],\n\n pendingMediaArchive: (): [string] => [COLLECTIONS.PENDING_MEDIA_ARCHIVE],\n\n // The media copy intents, which the orphaned-copy sweep queries for expired ones; the\n // per-document counterpart is PATH_BUILDERS.mediaCopyIntent.\n mediaCopyIntents: (): [string] => [COLLECTIONS.MEDIA_COPY_INTENTS],\n\n // One public document's immutable version history (queried newest-first by `version` for\n // the admin history read). The per-document counterpart is PATH_BUILDERS.publicDocumentVersion.\n publicDocumentVersions: (documentId: PublicDocumentId): [string, string, string] =>\n [COLLECTIONS.PUBLIC_DOCUMENTS, documentId, NESTED_SUBCOLLECTIONS.PUBLIC_DOCUMENT_VERSIONS],\n} as const;\n"]}
|
|
@@ -24,6 +24,7 @@ export declare const COLLECTIONS: {
|
|
|
24
24
|
readonly PENDING_MEDIA_ARCHIVE: "pendingMediaArchive";
|
|
25
25
|
readonly MEDIA_ASSETS: "mediaAssets";
|
|
26
26
|
readonly MEDIA_ACTIVATION_JOBS: "mediaActivationJobs";
|
|
27
|
+
readonly MEDIA_COPY_INTENTS: "mediaCopyIntents";
|
|
27
28
|
readonly PENDING_ADMIN_DISPATCHES: "pendingAdminDispatches";
|
|
28
29
|
readonly ACTIVE_REPORT_GROUPS: "activeReportGroups";
|
|
29
30
|
readonly CONTENT_VIOLATIONS: "contentViolations";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collections.d.ts","sourceRoot":"","sources":["../../src/paths/collections.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D;;GAEG;AACH,eAAO,MAAM,WAAW
|
|
1
|
+
{"version":3,"file":"collections.d.ts","sourceRoot":"","sources":["../../src/paths/collections.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqKd,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;CAStB,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,2BAA2B;;;;;;;;;CAY9B,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,yBAAyB;;CAK5B,CAAC;AAEX;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,wBAAwB;;;;CAI3B,CAAC;AAEX,MAAM,MAAM,qBAAqB,GAC/B,CAAC,OAAO,wBAAwB,CAAC,CAAC,MAAM,OAAO,wBAAwB,CAAC,CAAC;AAE3E,uEAAuE;AACvE,eAAO,MAAM,oCAAoC,EAAE,MAAM,CAAC,eAAe,EAAE,qBAAqB,CAI/F,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwIxB,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgEf,CAAC"}
|
|
@@ -28,6 +28,7 @@ export const COLLECTIONS = {
|
|
|
28
28
|
PENDING_MEDIA_ARCHIVE: 'pendingMediaArchive',
|
|
29
29
|
MEDIA_ASSETS: 'mediaAssets',
|
|
30
30
|
MEDIA_ACTIVATION_JOBS: 'mediaActivationJobs',
|
|
31
|
+
MEDIA_COPY_INTENTS: 'mediaCopyIntents',
|
|
31
32
|
PENDING_ADMIN_DISPATCHES: 'pendingAdminDispatches',
|
|
32
33
|
ACTIVE_REPORT_GROUPS: 'activeReportGroups',
|
|
33
34
|
CONTENT_VIOLATIONS: 'contentViolations',
|
|
@@ -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\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
|
+
{"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 MEDIA_COPY_INTENTS: 'mediaCopyIntents',\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"]}
|
|
@@ -78,6 +78,7 @@ export declare const PATH_BUILDERS: {
|
|
|
78
78
|
readonly pendingMediaArchive: (docId: string) => [string, string];
|
|
79
79
|
readonly mediaAsset: (mediaAssetId: string) => [string, string];
|
|
80
80
|
readonly mediaActivationJob: (jobId: string) => [string, string];
|
|
81
|
+
readonly mediaCopyIntent: (newAssetId: string) => [string, string];
|
|
81
82
|
readonly notificationDelivery: (deliveryId: string) => [string, string];
|
|
82
83
|
readonly notificationFanoutJob: (jobId: string) => [string, string];
|
|
83
84
|
readonly chatChannelAuthProjection: (authPairKey: string) => [string, string];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path-builders.d.ts","sourceRoot":"","sources":["../../src/paths/path-builders.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"path-builders.d.ts","sourceRoot":"","sources":["../../src/paths/path-builders.ts"],"names":[],"mappings":"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"}
|
|
@@ -141,6 +141,8 @@ export const PATH_BUILDERS = {
|
|
|
141
141
|
mediaAsset: (mediaAssetId) => [COLLECTIONS.MEDIA_ASSETS, mediaAssetId],
|
|
142
142
|
// Server-only durable activation job (prepare → activate → publish + recovery).
|
|
143
143
|
mediaActivationJob: (jobId) => [COLLECTIONS.MEDIA_ACTIVATION_JOBS, jobId],
|
|
144
|
+
// Server-only intent of one cross-owner media copy, keyed by the copy's new asset id.
|
|
145
|
+
mediaCopyIntent: (newAssetId) => [COLLECTIONS.MEDIA_COPY_INTENTS, newAssetId],
|
|
144
146
|
// ===== NOTIFICATION REDESIGN (ledger + fanout engine) PATHS =====
|
|
145
147
|
notificationDelivery: (deliveryId) => [COLLECTIONS.NOTIFICATION_DELIVERIES, deliveryId],
|
|
146
148
|
notificationFanoutJob: (jobId) => [COLLECTIONS.NOTIFICATION_FANOUT_JOBS, jobId],
|
|
@@ -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';\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"]}
|
|
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 // Server-only intent of one cross-owner media copy, keyed by the copy's new asset id.\n mediaCopyIntent: (newAssetId: string): [string, string] =>\n [COLLECTIONS.MEDIA_COPY_INTENTS, newAssetId],\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"]}
|