@ttt-productions/ttt-core 0.79.78 → 0.79.80
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/constants/admin-labels.d.ts +12 -3
- package/dist/constants/admin-labels.d.ts.map +1 -1
- package/dist/constants/admin-labels.js +26 -14
- package/dist/constants/admin-labels.js.map +1 -1
- package/dist/constants/business-admin.d.ts +9 -0
- package/dist/constants/business-admin.d.ts.map +1 -1
- package/dist/constants/business-admin.js +9 -0
- package/dist/constants/business-admin.js.map +1 -1
- package/dist/constants/safety-active-statuses.d.ts +2 -2
- package/dist/constants/text-fields.d.ts +23 -0
- package/dist/constants/text-fields.d.ts.map +1 -1
- package/dist/constants/text-fields.js +6 -1
- package/dist/constants/text-fields.js.map +1 -1
- package/dist/doc-schemas/chat-sync.d.ts +1 -1
- package/dist/doc-schemas/commissions.d.ts +6 -6
- package/dist/doc-schemas/content.d.ts +100 -69
- package/dist/doc-schemas/content.d.ts.map +1 -1
- package/dist/doc-schemas/content.js +41 -22
- package/dist/doc-schemas/content.js.map +1 -1
- package/dist/doc-schemas/media-assets.d.ts +5 -5
- package/dist/doc-schemas/media-copy-intents.d.ts +2 -2
- package/dist/doc-schemas/messaging.d.ts +1 -1
- package/dist/doc-schemas/moderation.d.ts +6 -6
- package/dist/doc-schemas/ncii/cases.d.ts +1 -1
- package/dist/doc-schemas/ncii/requests.d.ts +4 -4
- package/dist/doc-schemas/notification-archive-all-jobs.d.ts +2 -2
- package/dist/doc-schemas/notifications.d.ts +4 -4
- package/dist/doc-schemas/operational.d.ts +2 -2
- package/dist/doc-schemas/public-documents.d.ts +222 -167
- package/dist/doc-schemas/public-documents.d.ts.map +1 -1
- package/dist/doc-schemas/public-documents.js +7 -2
- package/dist/doc-schemas/public-documents.js.map +1 -1
- package/dist/doc-schemas/registry.d.ts +191 -151
- package/dist/doc-schemas/registry.d.ts.map +1 -1
- package/dist/doc-schemas/report-docs.d.ts +3 -3
- package/dist/doc-schemas/safety/case.d.ts +13 -13
- package/dist/doc-schemas/safety/evidence.d.ts +4 -4
- package/dist/doc-schemas/safety/foundation.d.ts +3 -3
- package/dist/doc-schemas/safety/report.d.ts +2 -2
- package/dist/doc-schemas/safety/sagas.d.ts +2 -2
- package/dist/doc-schemas/social.d.ts +4 -4
- package/dist/doc-schemas/square-announcement-jobs.d.ts +6 -6
- package/dist/doc-schemas/system-slots.d.ts +8 -1
- package/dist/doc-schemas/system-slots.d.ts.map +1 -1
- package/dist/doc-schemas/system.d.ts.map +1 -1
- package/dist/doc-schemas/system.js +2 -1
- package/dist/doc-schemas/system.js.map +1 -1
- package/dist/doc-schemas/user.d.ts +8 -8
- package/dist/doc-schemas/work-project.d.ts +1 -1
- package/dist/media/target-info.d.ts +9 -2
- package/dist/media/target-info.d.ts.map +1 -1
- package/dist/schemas/admin.d.ts +104 -73
- package/dist/schemas/admin.d.ts.map +1 -1
- package/dist/schemas/admin.js +48 -21
- package/dist/schemas/admin.js.map +1 -1
- package/dist/schemas/chat.d.ts +1 -1
- package/dist/schemas/commissions.d.ts +1 -1
- package/dist/schemas/notification.d.ts +1 -1
- package/dist/schemas/public-documents.d.ts +87 -65
- package/dist/schemas/public-documents.d.ts.map +1 -1
- package/dist/schemas/safety.d.ts +43 -43
- package/dist/schemas/users.d.ts +59 -1
- package/dist/schemas/users.d.ts.map +1 -1
- package/dist/schemas/users.js +36 -0
- package/dist/schemas/users.js.map +1 -1
- package/dist/schemas/work-project-management.d.ts +8 -8
- package/dist/system-slots/system-slots.d.ts +62 -5
- package/dist/system-slots/system-slots.d.ts.map +1 -1
- package/dist/system-slots/system-slots.js +47 -0
- package/dist/system-slots/system-slots.js.map +1 -1
- package/dist/types/admin-users.d.ts +1 -10
- package/dist/types/admin-users.d.ts.map +1 -1
- package/dist/types/admin-users.js.map +1 -1
- package/dist/types/content.d.ts +4 -1
- package/dist/types/content.d.ts.map +1 -1
- package/dist/types/content.js +2 -0
- package/dist/types/content.js.map +1 -1
- package/dist/upload-variables/upload-system-content-variables.d.ts +8 -1
- package/dist/upload-variables/upload-system-content-variables.d.ts.map +1 -1
- package/dist/utils/app-config.d.ts +36 -7
- package/dist/utils/app-config.d.ts.map +1 -1
- package/dist/utils/app-config.js +34 -16
- package/dist/utils/app-config.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"users.js","sourceRoot":"","sources":["../../src/schemas/users.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod';\nimport { userIdSchema, calendarDateSchema } from './atoms.js';\nimport { MAX_ARTISAN_LOCATION_LENGTH, MAX_USER_SEARCH_QUERY_LENGTH } from '../constants/business.js';\nimport { ACCOUNT_ACTION_REASON_INPUT, ARTISAN_REGION_INPUT, USERNAME_INPUT } from '../constants/text-fields.js';\nimport { textFieldSchema } from './text-field.js';\nimport { UserAccountStatusSchema } from '../doc-schemas/user.js';\nimport { PublicDocumentVersionOrNoneSchema } from '../doc-schemas/public-documents.js';\nimport {\n ShownPublicDocumentVersionsSchema,\n PublicDocumentsRefreshRequiredResultSchema,\n} from './public-documents.js';\n\n/** The ONE display-name field schema, over its declaration (`USERNAME_INPUT`). Every callable\n * accepting a display name uses this — never a re-composed copy. */\nexport const displayNameSchema = textFieldSchema(USERNAME_INPUT);\n\n/**\n * A date of birth's fields with no bounds at all — for the registration age step, which must answer\n * a malformed or out-of-range date exactly as it answers an under-13 one. A bound here would refuse\n * that date as a distinguishable bad request and reveal which answer the date got; the range checks\n * belong to `deriveAgeBracket`, whose `invalid` the route maps to the same refusal.\n */\nexport const DateOfBirthShapeSchema = z\n .object({\n year: z.number(),\n month: z.number(),\n day: z.number(),\n })\n .strict();\n\n/**\n * A date of birth as a form submits it — whole-number parts, month 1–12, day 1–31. Only the shape:\n * whether it is a real, past date and which bracket it gives is `deriveAgeBracket`'s to decide.\n */\nexport const DateOfBirthSchema = DateOfBirthShapeSchema.extend({\n year: z.number().int(),\n month: z.number().int().min(1).max(12),\n day: z.number().int().min(1).max(31),\n});\nexport type DateOfBirth = z.infer<typeof DateOfBirthSchema>;\n\nexport const AcceptSquareStreetzAgreementsInputSchema = z.object({}).strict();\nexport type AcceptSquareStreetzAgreementsInput = z.infer<typeof AcceptSquareStreetzAgreementsInputSchema>;\n\n/**\n * `social.squareStreetzAgreementsAccepted` — the `metadata` of the event written with the\n * private acceptance record. The card incorporates the Rules & Agreements page by reference, so\n * the version is that page's: `acceptedVersion` is the one this acceptance recorded (0 while no\n * Rules version is published), and `previousAcceptedVersion` the one the record held before,\n * null when none was recorded (the first acceptance). The actor and server time ride the event\n * envelope.\n */\nexport const SquareStreetzAgreementsAcceptedAuditPayloadSchema = z.object({\n acceptedVersion: PublicDocumentVersionOrNoneSchema,\n previousAcceptedVersion: PublicDocumentVersionOrNoneSchema.nullable(),\n}).strict();\nexport type SquareStreetzAgreementsAcceptedAuditPayload = z.infer<typeof SquareStreetzAgreementsAcceptedAuditPayloadSchema>;\n\n// One-time acknowledgement gate before a user may download Hall content for personal\n// offline use (final wording owned by the legal-and-content step). No payload — the\n// callable records the timestamp in the caller's privateData. See\n// docs/design/media-assets-and-protected-serving.md (Hall/Library downloads).\nexport const AcceptHallDownloadAcknowledgementInputSchema = z.object({}).strict();\nexport type AcceptHallDownloadAcknowledgementInput = z.infer<typeof AcceptHallDownloadAcknowledgementInputSchema>;\n\n// The become-creator dialog's \"I confirm I am 18 years of age or older\" checkbox must reach the\n// server: the callable rejects when absent and records the attestation on the\n// artisanCreator.grantedToUser audit event (immutable, timestamped, with IP/UA) so it is provable.\nexport const BecomeArtisanCreatorInputSchema = z.object({\n ageAttested: z.literal(true),\n // \"I confirm I am a person located in the United States\" — required for now (only U.S. persons\n // may become artisans). Mirrors ageAttested: the callable rejects when absent and records the\n // attestation timestamp (privateData.usPersonAttestedAt) + the grant audit event.\n usPersonAttested: z.literal(true),\n // [Q21.5 REVISED — DJ 2026-07-06] The artisan's date of birth — the ONLY point in the system\n // where a DOB is collected for persistence (registration/upgrade derive the bracket and store\n // nothing). The dialog copy tells the user this must be THEIR birthday: when the payout system\n // ships, it has to match their payout (KYC) identity. The callable re-derives 18+ server-side\n // from this value; an under-18 derivation rejects (failure audit, nothing stored). Stored as\n // privateData attestedDateOfBirth + attestedDobSource 'artisanOnboarding'.\n dob: DateOfBirthSchema,\n}).strict();\nexport type BecomeArtisanCreatorInput = z.infer<typeof BecomeArtisanCreatorInputSchema>;\n\nexport const MarkWaitingForNewsApprovalInputSchema = z.object({}).strict();\nexport type MarkWaitingForNewsApprovalInput = z.infer<typeof MarkWaitingForNewsApprovalInputSchema>;\n\n// First-visit site-tour preference writer (updateSiteTourPreference). This is the ONE\n// server writer for `privateData/{uid}.siteTour`; the client never writes tour state\n// directly. Discriminated on `action`:\n// - deferToday: records the member's LOCAL calendar `date` (\"Not today\"); the automatic\n// invitation is suppressed for exactly that date.\n// - dismissAutomaticInvites: records the permanent \"Don't show this again\" time; no payload.\n// - completeTour: records completion; the callable stamps SITE_TOUR_CURRENT_VERSION and\n// completedAt server-side, so no version is accepted from the client (mirrors the\n// acknowledgement callables that record the authoritative value server-side rather than\n// trusting a client-supplied one). Bump SITE_TOUR_CURRENT_VERSION to re-invite everyone.\n// `date` uses the same strict YYYY-MM-DD convention as the age cluster's attestedDateOfBirth.\nexport const UpdateSiteTourPreferenceInputSchema = z.discriminatedUnion('action', [\n z.object({\n action: z.literal('deferToday'),\n date: calendarDateSchema, // 'YYYY-MM-DD' (member's LOCAL calendar date)\n }).strict(),\n z.object({\n action: z.literal('dismissAutomaticInvites'),\n }).strict(),\n z.object({\n action: z.literal('completeTour'),\n }).strict(),\n]);\nexport type UpdateSiteTourPreferenceInput = z.infer<typeof UpdateSiteTourPreferenceInputSchema>;\n\n// The device-local shape behind the ONE sanctioned optimistic-hide exception: a site-tour choice\n// the member has already made, persisted at `siteTourPendingStorageKey(uid)`\n// (constants/storage-keys.ts) while its `updateSiteTourPreference` write is unconfirmed. It exists\n// so the overlay can close on the click instead of after a callable round-trip, and so a failed\n// write is replayed on the next boot rather than silently lost.\n//\n// It is NOT a cache, mirror, or second authority: `privateData/{uid}.siteTour` remains the sole\n// source of tour eligibility, and this entry only OVERLAYS it (suppressing an invitation the member\n// has already dismissed) until the server state converges.\n//\n// Every field is load-bearing against a specific failure:\n// - `schemaVersion` lets a future shape change be recognized instead of silently mis-parsed.\n// - `id` is the compare-and-remove token: on callable success the owner removes the entry ONLY if\n// the stored id still matches the one it sent, so a slow response in tab A can never erase a\n// newer choice made in tab B.\n// - `uid` must equal the authenticated key owner before the entry may affect eligibility or be\n// replayed — defence in depth behind the uid-scoped key itself.\n// - `createdAt` is epoch ms, for ordering/diagnostics only; it is never an expiry.\n// - `completeTour` carries the `tourVersion` the member actually completed. On reconciliation an\n// entry whose version differs from SITE_TOUR_CURRENT_VERSION is STALE and is discarded, so an\n// old pending completion can never complete a newer tour. The callable payload stays\n// version-free (the server stamps the authoritative version) — this is a replay guard, not\n// server authority.\n//\n// STRICT and fully validated on read: malformed or unknown persisted data is removed and\n// eligibility falls back to the server. Invalid storage must never hide the tour forever.\nexport const SiteTourPendingPreferenceSchema = z.discriminatedUnion('action', [\n z.object({\n schemaVersion: z.literal(1),\n id: z.string().min(1),\n uid: userIdSchema,\n createdAt: z.number(),\n action: z.literal('deferToday'),\n date: calendarDateSchema, // 'YYYY-MM-DD' (member's LOCAL calendar date)\n }).strict(),\n z.object({\n schemaVersion: z.literal(1),\n id: z.string().min(1),\n uid: userIdSchema,\n createdAt: z.number(),\n action: z.literal('dismissAutomaticInvites'),\n }).strict(),\n z.object({\n schemaVersion: z.literal(1),\n id: z.string().min(1),\n uid: userIdSchema,\n createdAt: z.number(),\n action: z.literal('completeTour'),\n tourVersion: z.number().int().positive(),\n }).strict(),\n]);\nexport type SiteTourPendingPreference = z.infer<typeof SiteTourPendingPreferenceSchema>;\n\n// Non-U.S. artisan-interest signup (the FCFS \"waitlist\" fields on privateData). Mirrors\n// MarkWaitingForNewsApproval but carries the applicant's country (+ optional region) so signups\n// can be opened by jurisdiction as each region's laws clear. The callable records it ONLY for\n// adult accounts (never a minor's location).\nexport const MarkNonUsArtisanInterestInputSchema = z.object({\n country: z.string().min(1).max(MAX_ARTISAN_LOCATION_LENGTH),\n region: textFieldSchema(ARTISAN_REGION_INPUT).optional(),\n}).strict();\nexport type MarkNonUsArtisanInterestInput = z.infer<typeof MarkNonUsArtisanInterestInputSchema>;\n\nexport const RegisterUserInputSchema = z.object({\n displayName: displayNameSchema,\n agreements: z.object({\n age: z.literal(true),\n nudity: z.literal(true),\n meet: z.literal(true),\n cookies: z.literal(true),\n terms: z.literal(true),\n }).strict(),\n // The public-document versions the signup page SHOWED when the person agreed: every published\n // document at its current version, `changedPublicDocuments(block, undefined)` off the live\n // `_appConfig/app` version block. Empty before the first release (the first-admin bootstrap).\n // Registration re-reads the block in its transaction and answers `refreshRequired`, writing\n // nothing, when a publish raced the page — the same comparison the acceptance prompt's Accept makes.\n publicDocuments: ShownPublicDocumentVersionsSchema,\n}).strict();\nexport type RegisterUserInput = z.infer<typeof RegisterUserInputSchema>;\n\nexport const RegisterUserResultSchema = z.discriminatedUnion('status', [\n // The account is registered with the documents shown accepted (or already was — an idempotent\n // replay). Refresh the token: the `docsAccepted` claim was set after the commit.\n z.object({ status: z.literal('registered') }),\n PublicDocumentsRefreshRequiredResultSchema,\n]);\nexport type RegisterUserResult = z.infer<typeof RegisterUserResultSchema>;\n\nexport const SetUserStatusInputSchema = z.object({\n userId: userIdSchema,\n status: UserAccountStatusSchema,\n // Required by the callable when status is 'suspended' or 'banned' (shown to the\n // user in their restricted view and recorded on the audit event). Optional here\n // so reinstating to 'active' can omit it; the callable enforces presence.\n reason: textFieldSchema(ACCOUNT_ACTION_REASON_INPUT).optional(),\n}).strict();\nexport type SetUserStatusInput = z.infer<typeof SetUserStatusInputSchema>;\n\n// Admin forces an abusive display name off a user: the name is swapped to a neutral\n// placeholder, the old name is blocked from reuse, and the user must pick a new one.\nexport const ForceDisplayNameResetInputSchema = z.object({\n userId: userIdSchema,\n // Optional admin note recorded on the audit event.\n reason: textFieldSchema(ACCOUNT_ACTION_REASON_INPUT).optional(),\n}).strict();\nexport type ForceDisplayNameResetInput = z.infer<typeof ForceDisplayNameResetInputSchema>;\n\n// User completes a forced display-name reset by choosing a new name. Only honored while\n// the caller's userProfiles doc has `displayNameResetRequired === true`.\nexport const SetMyDisplayNameInputSchema = z.object({\n displayName: displayNameSchema,\n}).strict();\nexport type SetMyDisplayNameInput = z.infer<typeof SetMyDisplayNameInputSchema>;\n\n// Unauthenticated soft-check the register page runs BEFORE creating the Auth user so a\n// taken name never orphans an auth account. Mirrors the RegisterUser displayName contract\n// (same length + regex). The authoritative claim still happens inside registerUser.\nexport const CheckDisplayNameAvailableInputSchema = z.object({\n displayName: displayNameSchema,\n}).strict();\nexport type CheckDisplayNameAvailableInput = z.infer<typeof CheckDisplayNameAvailableInputSchema>;\n\n// Teen→adult upgrade: a transient DOB (never persisted) the callable re-derives adult\n// eligibility from server-side against a fresh attestation. Only the shape is validated\n// here; the age math + attestation binding live in the callable.\nexport const UpgradeAccountToAdultInputSchema = z.object({\n dob: DateOfBirthSchema,\n}).strict();\nexport type UpgradeAccountToAdultInput = z.infer<typeof UpgradeAccountToAdultInputSchema>;\n\n// Admin-only user lookup for the User Management view (prefix search on publicUsers by\n// displayName). Only the trimmed query string is validated here; authz (admin/jr-admin)\n// lives in the callable.\nexport const SearchPublicUsersInputSchema = z.object({\n query: z.string().trim().min(1).max(MAX_USER_SEARCH_QUERY_LENGTH),\n}).strict();\nexport type SearchPublicUsersInput = z.infer<typeof SearchPublicUsersInputSchema>;\n\n// Admin exact-account lookup (\"look up by email or uid\" in User Management): a solo full\n// admin resolves ONE account by its exact email, uid, or display name. The app detects\n// email-vs-uid-vs-name both client- and server-side, so there is ONE query field (mirrors\n// SearchPublicUsersInput's single trimmed-query shape + bound). Only the trimmed query is\n// validated here; authz (full admin) lives in the callable.\nexport const LookupUserByEmailOrUidInputSchema = z.object({\n query: z.string().trim().min(1).max(MAX_USER_SEARCH_QUERY_LENGTH),\n}).strict();\nexport type LookupUserByEmailOrUidInput = z.infer<typeof LookupUserByEmailOrUidInputSchema>;\n\n// N3 account deletion — wire result contracts for the two user-facing callables (both take\n// no input). Previously declared independently in functions/src and src/hooks — one drifting\n// pair per callable. Non-strict (server → client result posture).\nexport const RequestAccountDeletionResultSchema = z.object({\n success: z.literal(true),\n /** When the scheduled scrub will run (requestedAt + the grace window), epoch ms. */\n scheduledScrubAt: z.number(),\n /** True when an ACTIVE request already existed and its schedule was re-returned. */\n alreadyPending: z.boolean(),\n});\nexport type RequestAccountDeletionResult = z.infer<typeof RequestAccountDeletionResultSchema>;\n\nexport const CancelAccountDeletionResultSchema = z.object({\n success: z.literal(true),\n /** False when there was no active request to cancel (idempotent no-op). */\n cancelled: z.boolean(),\n});\nexport type CancelAccountDeletionResult = z.infer<typeof CancelAccountDeletionResultSchema>;\n\n"]}
|
|
1
|
+
{"version":3,"file":"users.js","sourceRoot":"","sources":["../../src/schemas/users.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod';\nimport { userIdSchema, calendarDateSchema } from './atoms.js';\nimport { MAX_ARTISAN_LOCATION_LENGTH, MAX_USER_SEARCH_QUERY_LENGTH } from '../constants/business.js';\nimport { ACCOUNT_ACTION_REASON_INPUT, ARTISAN_REGION_INPUT, USERNAME_INPUT } from '../constants/text-fields.js';\nimport { textFieldSchema } from './text-field.js';\nimport { UserAccountStatusSchema } from '../doc-schemas/user.js';\nimport { PublicDocumentVersionOrNoneSchema } from '../doc-schemas/public-documents.js';\nimport {\n ShownPublicDocumentVersionsSchema,\n PublicDocumentsRefreshRequiredResultSchema,\n} from './public-documents.js';\n\n/** The ONE display-name field schema, over its declaration (`USERNAME_INPUT`). Every callable\n * accepting a display name uses this — never a re-composed copy. */\nexport const displayNameSchema = textFieldSchema(USERNAME_INPUT);\n\n/**\n * A date of birth's fields with no bounds at all — for the registration age step, which must answer\n * a malformed or out-of-range date exactly as it answers an under-13 one. A bound here would refuse\n * that date as a distinguishable bad request and reveal which answer the date got; the range checks\n * belong to `deriveAgeBracket`, whose `invalid` the route maps to the same refusal.\n */\nexport const DateOfBirthShapeSchema = z\n .object({\n year: z.number(),\n month: z.number(),\n day: z.number(),\n })\n .strict();\n\n/**\n * A date of birth as a form submits it — whole-number parts, month 1–12, day 1–31. Only the shape:\n * whether it is a real, past date and which bracket it gives is `deriveAgeBracket`'s to decide.\n */\nexport const DateOfBirthSchema = DateOfBirthShapeSchema.extend({\n year: z.number().int(),\n month: z.number().int().min(1).max(12),\n day: z.number().int().min(1).max(31),\n});\nexport type DateOfBirth = z.infer<typeof DateOfBirthSchema>;\n\nexport const AcceptSquareStreetzAgreementsInputSchema = z.object({}).strict();\nexport type AcceptSquareStreetzAgreementsInput = z.infer<typeof AcceptSquareStreetzAgreementsInputSchema>;\n\n/**\n * `social.squareStreetzAgreementsAccepted` — the `metadata` of the event written with the\n * private acceptance record. The card incorporates the Rules & Agreements page by reference, so\n * the version is that page's: `acceptedVersion` is the one this acceptance recorded (0 while no\n * Rules version is published), and `previousAcceptedVersion` the one the record held before,\n * null when none was recorded (the first acceptance). The actor and server time ride the event\n * envelope.\n */\nexport const SquareStreetzAgreementsAcceptedAuditPayloadSchema = z.object({\n acceptedVersion: PublicDocumentVersionOrNoneSchema,\n previousAcceptedVersion: PublicDocumentVersionOrNoneSchema.nullable(),\n}).strict();\nexport type SquareStreetzAgreementsAcceptedAuditPayload = z.infer<typeof SquareStreetzAgreementsAcceptedAuditPayloadSchema>;\n\n// One-time acknowledgement gate before a user may download Hall content for personal\n// offline use (final wording owned by the legal-and-content step). No payload — the\n// callable records the timestamp in the caller's privateData. See\n// docs/design/media-assets-and-protected-serving.md (Hall/Library downloads).\nexport const AcceptHallDownloadAcknowledgementInputSchema = z.object({}).strict();\nexport type AcceptHallDownloadAcknowledgementInput = z.infer<typeof AcceptHallDownloadAcknowledgementInputSchema>;\n\n// The become-creator dialog's \"I confirm I am 18 years of age or older\" checkbox must reach the\n// server: the callable rejects when absent and records the attestation on the\n// artisanCreator.grantedToUser audit event (immutable, timestamped, with IP/UA) so it is provable.\nexport const BecomeArtisanCreatorInputSchema = z.object({\n ageAttested: z.literal(true),\n // \"I confirm I am a person located in the United States\" — required for now (only U.S. persons\n // may become artisans). Mirrors ageAttested: the callable rejects when absent and records the\n // attestation timestamp (privateData.usPersonAttestedAt) + the grant audit event.\n usPersonAttested: z.literal(true),\n // [Q21.5 REVISED — DJ 2026-07-06] The artisan's date of birth — the ONLY point in the system\n // where a DOB is collected for persistence (registration/upgrade derive the bracket and store\n // nothing). The dialog copy tells the user this must be THEIR birthday: when the payout system\n // ships, it has to match their payout (KYC) identity. The callable re-derives 18+ server-side\n // from this value; an under-18 derivation rejects (failure audit, nothing stored). Stored as\n // privateData attestedDateOfBirth + attestedDobSource 'artisanOnboarding'.\n dob: DateOfBirthSchema,\n}).strict();\nexport type BecomeArtisanCreatorInput = z.infer<typeof BecomeArtisanCreatorInputSchema>;\n\nexport const MarkWaitingForNewsApprovalInputSchema = z.object({}).strict();\nexport type MarkWaitingForNewsApprovalInput = z.infer<typeof MarkWaitingForNewsApprovalInputSchema>;\n\n// First-visit site-tour preference writer (updateSiteTourPreference). This is the ONE\n// server writer for `privateData/{uid}.siteTour`; the client never writes tour state\n// directly. Discriminated on `action`:\n// - deferToday: records the member's LOCAL calendar `date` (\"Not today\"); the automatic\n// invitation is suppressed for exactly that date.\n// - dismissAutomaticInvites: records the permanent \"Don't show this again\" time; no payload.\n// - completeTour: records completion; the callable stamps SITE_TOUR_CURRENT_VERSION and\n// completedAt server-side, so no version is accepted from the client (mirrors the\n// acknowledgement callables that record the authoritative value server-side rather than\n// trusting a client-supplied one). Bump SITE_TOUR_CURRENT_VERSION to re-invite everyone.\n// `date` uses the same strict YYYY-MM-DD convention as the age cluster's attestedDateOfBirth.\nexport const UpdateSiteTourPreferenceInputSchema = z.discriminatedUnion('action', [\n z.object({\n action: z.literal('deferToday'),\n date: calendarDateSchema, // 'YYYY-MM-DD' (member's LOCAL calendar date)\n }).strict(),\n z.object({\n action: z.literal('dismissAutomaticInvites'),\n }).strict(),\n z.object({\n action: z.literal('completeTour'),\n }).strict(),\n]);\nexport type UpdateSiteTourPreferenceInput = z.infer<typeof UpdateSiteTourPreferenceInputSchema>;\n\n// The device-local shape behind the ONE sanctioned optimistic-hide exception: a site-tour choice\n// the member has already made, persisted at `siteTourPendingStorageKey(uid)`\n// (constants/storage-keys.ts) while its `updateSiteTourPreference` write is unconfirmed. It exists\n// so the overlay can close on the click instead of after a callable round-trip, and so a failed\n// write is replayed on the next boot rather than silently lost.\n//\n// It is NOT a cache, mirror, or second authority: `privateData/{uid}.siteTour` remains the sole\n// source of tour eligibility, and this entry only OVERLAYS it (suppressing an invitation the member\n// has already dismissed) until the server state converges.\n//\n// Every field is load-bearing against a specific failure:\n// - `schemaVersion` lets a future shape change be recognized instead of silently mis-parsed.\n// - `id` is the compare-and-remove token: on callable success the owner removes the entry ONLY if\n// the stored id still matches the one it sent, so a slow response in tab A can never erase a\n// newer choice made in tab B.\n// - `uid` must equal the authenticated key owner before the entry may affect eligibility or be\n// replayed — defence in depth behind the uid-scoped key itself.\n// - `createdAt` is epoch ms, for ordering/diagnostics only; it is never an expiry.\n// - `completeTour` carries the `tourVersion` the member actually completed. On reconciliation an\n// entry whose version differs from SITE_TOUR_CURRENT_VERSION is STALE and is discarded, so an\n// old pending completion can never complete a newer tour. The callable payload stays\n// version-free (the server stamps the authoritative version) — this is a replay guard, not\n// server authority.\n//\n// STRICT and fully validated on read: malformed or unknown persisted data is removed and\n// eligibility falls back to the server. Invalid storage must never hide the tour forever.\nexport const SiteTourPendingPreferenceSchema = z.discriminatedUnion('action', [\n z.object({\n schemaVersion: z.literal(1),\n id: z.string().min(1),\n uid: userIdSchema,\n createdAt: z.number(),\n action: z.literal('deferToday'),\n date: calendarDateSchema, // 'YYYY-MM-DD' (member's LOCAL calendar date)\n }).strict(),\n z.object({\n schemaVersion: z.literal(1),\n id: z.string().min(1),\n uid: userIdSchema,\n createdAt: z.number(),\n action: z.literal('dismissAutomaticInvites'),\n }).strict(),\n z.object({\n schemaVersion: z.literal(1),\n id: z.string().min(1),\n uid: userIdSchema,\n createdAt: z.number(),\n action: z.literal('completeTour'),\n tourVersion: z.number().int().positive(),\n }).strict(),\n]);\nexport type SiteTourPendingPreference = z.infer<typeof SiteTourPendingPreferenceSchema>;\n\n// Non-U.S. artisan-interest signup (the FCFS \"waitlist\" fields on privateData). Mirrors\n// MarkWaitingForNewsApproval but carries the applicant's country (+ optional region) so signups\n// can be opened by jurisdiction as each region's laws clear. The callable records it ONLY for\n// adult accounts (never a minor's location).\nexport const MarkNonUsArtisanInterestInputSchema = z.object({\n country: z.string().min(1).max(MAX_ARTISAN_LOCATION_LENGTH),\n region: textFieldSchema(ARTISAN_REGION_INPUT).optional(),\n}).strict();\nexport type MarkNonUsArtisanInterestInput = z.infer<typeof MarkNonUsArtisanInterestInputSchema>;\n\nexport const RegisterUserInputSchema = z.object({\n displayName: displayNameSchema,\n agreements: z.object({\n age: z.literal(true),\n nudity: z.literal(true),\n meet: z.literal(true),\n cookies: z.literal(true),\n terms: z.literal(true),\n }).strict(),\n // The public-document versions the signup page SHOWED when the person agreed: every published\n // document at its current version, `changedPublicDocuments(block, undefined)` off the live\n // `_appConfig/app` version block. Empty before the first release (the first-admin bootstrap).\n // Registration re-reads the block in its transaction and answers `refreshRequired`, writing\n // nothing, when a publish raced the page — the same comparison the acceptance prompt's Accept makes.\n publicDocuments: ShownPublicDocumentVersionsSchema,\n}).strict();\nexport type RegisterUserInput = z.infer<typeof RegisterUserInputSchema>;\n\nexport const RegisterUserResultSchema = z.discriminatedUnion('status', [\n // The account is registered with the documents shown accepted (or already was — an idempotent\n // replay). Refresh the token: the `docsAccepted` claim was set after the commit.\n z.object({ status: z.literal('registered') }),\n PublicDocumentsRefreshRequiredResultSchema,\n]);\nexport type RegisterUserResult = z.infer<typeof RegisterUserResultSchema>;\n\nexport const SetUserStatusInputSchema = z.object({\n userId: userIdSchema,\n status: UserAccountStatusSchema,\n // Required by the callable when status is 'suspended' or 'banned' (shown to the\n // user in their restricted view and recorded on the audit event). Optional here\n // so reinstating to 'active' can omit it; the callable enforces presence.\n reason: textFieldSchema(ACCOUNT_ACTION_REASON_INPUT).optional(),\n}).strict();\nexport type SetUserStatusInput = z.infer<typeof SetUserStatusInputSchema>;\n\n// Admin forces an abusive display name off a user: the name is swapped to a neutral\n// placeholder, the old name is blocked from reuse, and the user must pick a new one.\nexport const ForceDisplayNameResetInputSchema = z.object({\n userId: userIdSchema,\n // Optional admin note recorded on the audit event.\n reason: textFieldSchema(ACCOUNT_ACTION_REASON_INPUT).optional(),\n}).strict();\nexport type ForceDisplayNameResetInput = z.infer<typeof ForceDisplayNameResetInputSchema>;\n\n// User completes a forced display-name reset by choosing a new name. Only honored while\n// the caller's userProfiles doc has `displayNameResetRequired === true`.\nexport const SetMyDisplayNameInputSchema = z.object({\n displayName: displayNameSchema,\n}).strict();\nexport type SetMyDisplayNameInput = z.infer<typeof SetMyDisplayNameInputSchema>;\n\n// Unauthenticated soft-check the register page runs BEFORE creating the Auth user so a\n// taken name never orphans an auth account. Mirrors the RegisterUser displayName contract\n// (same length + regex). The authoritative claim still happens inside registerUser.\nexport const CheckDisplayNameAvailableInputSchema = z.object({\n displayName: displayNameSchema,\n}).strict();\nexport type CheckDisplayNameAvailableInput = z.infer<typeof CheckDisplayNameAvailableInputSchema>;\n\n/** Why a display name cannot be had: another account holds it, it is reserved, or the word list\n * refuses it. */\nexport const DISPLAY_NAME_UNAVAILABLE_REASONS = ['taken', 'reserved', 'disallowed'] as const;\nexport const DisplayNameUnavailableReasonSchema = z.enum(DISPLAY_NAME_UNAVAILABLE_REASONS);\nexport type DisplayNameUnavailableReason = z.infer<typeof DisplayNameUnavailableReasonSchema>;\n\nexport const CheckDisplayNameAvailableResultSchema = z.object({\n available: z.boolean(),\n reason: DisplayNameUnavailableReasonSchema.optional(),\n});\nexport type CheckDisplayNameAvailableResult = z.infer<typeof CheckDisplayNameAvailableResultSchema>;\n\n// Teen→adult upgrade: a transient DOB (never persisted) the callable re-derives adult\n// eligibility from server-side against a fresh attestation. Only the shape is validated\n// here; the age math + attestation binding live in the callable.\nexport const UpgradeAccountToAdultInputSchema = z.object({\n dob: DateOfBirthSchema,\n}).strict();\nexport type UpgradeAccountToAdultInput = z.infer<typeof UpgradeAccountToAdultInputSchema>;\n\n// Admin-only user lookup for the User Management view (prefix search on publicUsers by\n// displayName). Only the trimmed query string is validated here; authz (admin/jr-admin)\n// lives in the callable.\nexport const SearchPublicUsersInputSchema = z.object({\n query: z.string().trim().min(1).max(MAX_USER_SEARCH_QUERY_LENGTH),\n}).strict();\nexport type SearchPublicUsersInput = z.infer<typeof SearchPublicUsersInputSchema>;\n\n// Admin exact-account lookup (\"look up by email or uid\" in User Management): a solo full\n// admin resolves ONE account by its exact email, uid, or display name. The app detects\n// email-vs-uid-vs-name both client- and server-side, so there is ONE query field (mirrors\n// SearchPublicUsersInput's single trimmed-query shape + bound). Only the trimmed query is\n// validated here; authz (full admin) lives in the callable.\nexport const LookupUserByEmailOrUidInputSchema = z.object({\n query: z.string().trim().min(1).max(MAX_USER_SEARCH_QUERY_LENGTH),\n}).strict();\nexport type LookupUserByEmailOrUidInput = z.infer<typeof LookupUserByEmailOrUidInputSchema>;\n\n/** A full email address — the exact-match lookup resolves it through Auth's email index. */\nexport const USER_LOOKUP_EMAIL_PATTERN = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n/** A Firebase Auth uid: 28 letters and digits. */\nexport const USER_LOOKUP_UID_PATTERN = /^[A-Za-z0-9]{28}$/;\n\n/** Which search an admin's user query runs: a full email or a uid is an exact lookup; anything\n * else is the display-name prefix search. */\nexport type UserSearchKind = 'email' | 'uid' | 'name';\n\n/** The one routing of an admin user query — the User Management search box and the lookup\n * callable's choice of Auth method both read it. */\nexport function detectUserSearchKind(query: string): UserSearchKind {\n const trimmed = query.trim();\n if (USER_LOOKUP_EMAIL_PATTERN.test(trimmed)) return 'email';\n if (USER_LOOKUP_UID_PATTERN.test(trimmed)) return 'uid';\n return 'name';\n}\n\n/** One account the exact-match lookup resolved. Carries the owner-only email (the lookup is\n * full-admin only) and the account's admin standing alongside its status tier. */\nexport const AdminUserLookupResultSchema = z.object({\n uid: z.string(),\n displayName: z.string(),\n email: z.string(),\n status: UserAccountStatusSchema,\n isAdmin: z.boolean().optional(),\n});\nexport type AdminUserLookupResult = z.infer<typeof AdminUserLookupResultSchema>;\n\n/** The `lookupUserByEmailOrUid` callable's result: the single exact match, or `null` when no\n * account resolves. */\nexport const LookupUserByEmailOrUidResultSchema = z.object({\n user: AdminUserLookupResultSchema.nullable(),\n});\nexport type LookupUserByEmailOrUidResult = z.infer<typeof LookupUserByEmailOrUidResultSchema>;\n\n// N3 account deletion — wire result contracts for the two user-facing callables (both take\n// no input). Previously declared independently in functions/src and src/hooks — one drifting\n// pair per callable. Non-strict (server → client result posture).\nexport const RequestAccountDeletionResultSchema = z.object({\n success: z.literal(true),\n /** When the scheduled scrub will run (requestedAt + the grace window), epoch ms. */\n scheduledScrubAt: z.number(),\n /** True when an ACTIVE request already existed and its schedule was re-returned. */\n alreadyPending: z.boolean(),\n});\nexport type RequestAccountDeletionResult = z.infer<typeof RequestAccountDeletionResultSchema>;\n\nexport const CancelAccountDeletionResultSchema = z.object({\n success: z.literal(true),\n /** False when there was no active request to cancel (idempotent no-op). */\n cancelled: z.boolean(),\n});\nexport type CancelAccountDeletionResult = z.infer<typeof CancelAccountDeletionResultSchema>;\n\n"]}
|
|
@@ -4,8 +4,8 @@ import { z } from 'zod';
|
|
|
4
4
|
export declare const RealmSharedFileProjectionSchema: z.ZodObject<{
|
|
5
5
|
mediaAssetId: z.ZodString;
|
|
6
6
|
mediaKind: z.ZodEnum<{
|
|
7
|
-
video: "video";
|
|
8
7
|
image: "image";
|
|
8
|
+
video: "video";
|
|
9
9
|
audio: "audio";
|
|
10
10
|
}>;
|
|
11
11
|
realmFileCanonStatus: z.ZodEnum<{
|
|
@@ -43,8 +43,8 @@ export declare const GetRealmSharedFilesResponseSchema: z.ZodObject<{
|
|
|
43
43
|
files: z.ZodArray<z.ZodObject<{
|
|
44
44
|
mediaAssetId: z.ZodString;
|
|
45
45
|
mediaKind: z.ZodEnum<{
|
|
46
|
-
video: "video";
|
|
47
46
|
image: "image";
|
|
47
|
+
video: "video";
|
|
48
48
|
audio: "audio";
|
|
49
49
|
}>;
|
|
50
50
|
realmFileCanonStatus: z.ZodEnum<{
|
|
@@ -72,8 +72,8 @@ export type GetRealmSharedFilesResponse = z.infer<typeof GetRealmSharedFilesResp
|
|
|
72
72
|
export declare const RealmFilePromotionQueueRowSchema: z.ZodObject<{
|
|
73
73
|
mediaAssetId: z.ZodString;
|
|
74
74
|
mediaKind: z.ZodEnum<{
|
|
75
|
-
video: "video";
|
|
76
75
|
image: "image";
|
|
76
|
+
video: "video";
|
|
77
77
|
audio: "audio";
|
|
78
78
|
}>;
|
|
79
79
|
realmFileCanonStatus: z.ZodLiteral<"pendingApproval">;
|
|
@@ -98,8 +98,8 @@ export declare const GetRealmFilePromotionQueueResponseSchema: z.ZodObject<{
|
|
|
98
98
|
requests: z.ZodArray<z.ZodObject<{
|
|
99
99
|
mediaAssetId: z.ZodString;
|
|
100
100
|
mediaKind: z.ZodEnum<{
|
|
101
|
-
video: "video";
|
|
102
101
|
image: "image";
|
|
102
|
+
video: "video";
|
|
103
103
|
audio: "audio";
|
|
104
104
|
}>;
|
|
105
105
|
realmFileCanonStatus: z.ZodLiteral<"pendingApproval">;
|
|
@@ -176,8 +176,8 @@ export declare const RealmFileListsChangeSchema: z.ZodObject<{
|
|
|
176
176
|
sharedFile: z.ZodNullable<z.ZodObject<{
|
|
177
177
|
mediaAssetId: z.ZodString;
|
|
178
178
|
mediaKind: z.ZodEnum<{
|
|
179
|
-
video: "video";
|
|
180
179
|
image: "image";
|
|
180
|
+
video: "video";
|
|
181
181
|
audio: "audio";
|
|
182
182
|
}>;
|
|
183
183
|
realmFileCanonStatus: z.ZodEnum<{
|
|
@@ -194,8 +194,8 @@ export declare const RealmFileListsChangeSchema: z.ZodObject<{
|
|
|
194
194
|
promotionRequest: z.ZodNullable<z.ZodObject<{
|
|
195
195
|
mediaAssetId: z.ZodString;
|
|
196
196
|
mediaKind: z.ZodEnum<{
|
|
197
|
-
video: "video";
|
|
198
197
|
image: "image";
|
|
198
|
+
video: "video";
|
|
199
199
|
audio: "audio";
|
|
200
200
|
}>;
|
|
201
201
|
realmFileCanonStatus: z.ZodLiteral<"pendingApproval">;
|
|
@@ -236,8 +236,8 @@ export declare const RealmFileTransitionResultSchema: z.ZodObject<{
|
|
|
236
236
|
sharedFile: z.ZodNullable<z.ZodObject<{
|
|
237
237
|
mediaAssetId: z.ZodString;
|
|
238
238
|
mediaKind: z.ZodEnum<{
|
|
239
|
-
video: "video";
|
|
240
239
|
image: "image";
|
|
240
|
+
video: "video";
|
|
241
241
|
audio: "audio";
|
|
242
242
|
}>;
|
|
243
243
|
realmFileCanonStatus: z.ZodEnum<{
|
|
@@ -254,8 +254,8 @@ export declare const RealmFileTransitionResultSchema: z.ZodObject<{
|
|
|
254
254
|
promotionRequest: z.ZodNullable<z.ZodObject<{
|
|
255
255
|
mediaAssetId: z.ZodString;
|
|
256
256
|
mediaKind: z.ZodEnum<{
|
|
257
|
-
video: "video";
|
|
258
257
|
image: "image";
|
|
258
|
+
video: "video";
|
|
259
259
|
audio: "audio";
|
|
260
260
|
}>;
|
|
261
261
|
realmFileCanonStatus: z.ZodLiteral<"pendingApproval">;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
import { type RuleGroup } from '../types/content.js';
|
|
2
3
|
/** `video` holds one processed video; `uid` names one account; `uidList` names an ordered list. */
|
|
3
4
|
export declare const SystemSlotKindSchema: z.ZodEnum<{
|
|
4
5
|
video: "video";
|
|
@@ -22,6 +23,12 @@ export declare const SYSTEM_SLOT_GROUPS: readonly [{
|
|
|
22
23
|
}, {
|
|
23
24
|
readonly id: "helpComponents";
|
|
24
25
|
readonly label: "Help components";
|
|
26
|
+
}, {
|
|
27
|
+
readonly id: "futurePlansPage";
|
|
28
|
+
readonly label: "Future Plans page";
|
|
29
|
+
}, {
|
|
30
|
+
readonly id: "rulesPage";
|
|
31
|
+
readonly label: "Rules & Agreements page";
|
|
25
32
|
}];
|
|
26
33
|
export type SystemSlotGroupId = (typeof SYSTEM_SLOT_GROUPS)[number]['id'];
|
|
27
34
|
interface SystemSlotDefinitionBase {
|
|
@@ -43,6 +50,14 @@ export type SystemSlotDefinition = (SystemSlotDefinitionBase & {
|
|
|
43
50
|
}) | (SystemSlotDefinitionBase & {
|
|
44
51
|
readonly kind: 'uid' | 'uidList';
|
|
45
52
|
});
|
|
53
|
+
/** The optional video under a fixed Rules & Agreements rule group's heading. */
|
|
54
|
+
declare const RULE_GROUP_SLOT_SUFFIXES: {
|
|
55
|
+
readonly generic: "general";
|
|
56
|
+
readonly merchandising: "merchandising";
|
|
57
|
+
readonly hallWing: "hall-wing";
|
|
58
|
+
readonly workRealm: "realm";
|
|
59
|
+
};
|
|
60
|
+
export declare function ruleGroupVideoSlotId<G extends RuleGroup>(group: G): `rules-${(typeof RULE_GROUP_SLOT_SUFFIXES)[G]}`;
|
|
46
61
|
export declare const SYSTEM_SLOTS: readonly [{
|
|
47
62
|
readonly id: "founder";
|
|
48
63
|
readonly kind: "uid";
|
|
@@ -76,7 +91,35 @@ export declare const SYSTEM_SLOTS: readonly [{
|
|
|
76
91
|
description: "Work page — the Work Project Information section." | "Work page — the Team Communication (guild chat) section." | "Work page — the Your Team section." | "Work page — the Guildmate Users list inside Your Team." | "Work page — a Guildmate's details, beside their Stake count." | "Work page — a Guildmate's details, beside their Guild Standings." | "Work page — a Guildmate's details, beside their Trade Professions." | "Work page — the Pending Invitations section." | "Work page — the craft search for inviting an Artisan." | "Work page — the Work Project Files section." | "Work page — the Find Talent (commissions) section." | "Work page — the Get Community Feedback (auditions) section." | "Work page — the Work's auditions list." | "Work page — the Submit to the Hall section." | "Work page — the episodic publishing list inside Submit to the Hall." | "Work page — the Platform Correspondence section." | "The Hall — its masthead." | "The Square — its masthead." | "The Notice Board — its masthead." | "The Craft Fair — its search bar." | "The Audition Stage — its masthead." | "An audition card on the Audition Stage and an audition's page — beside a Sponsored audition's prize." | "An audition's full view (a Work's or the admin's) — beside a Sponsored audition's prize." | "Admin → Audition Mngt — the audition form, beside the Sponsored prize field." | "Messages — the admin dispatches section." | "Messages — the guild invites section." | "Profile page — the profile header." | "Profile page — the Square activity section." | "Profile page — the Following section." | "Profile page — the Become an Artisan Creator section." | "Profile page — the Works section." | "Profile page — the Crafts section.";
|
|
77
92
|
group: "helpComponents";
|
|
78
93
|
requiredVideo: boolean;
|
|
79
|
-
}
|
|
94
|
+
} | {
|
|
95
|
+
id: "rules-merchandising" | "rules-general" | "rules-hall-wing" | "rules-realm";
|
|
96
|
+
kind: "video";
|
|
97
|
+
label: string;
|
|
98
|
+
description: string;
|
|
99
|
+
group: "rulesPage";
|
|
100
|
+
requiredVideo: boolean;
|
|
101
|
+
} | {
|
|
102
|
+
readonly id: "future-plans-page";
|
|
103
|
+
readonly kind: "video";
|
|
104
|
+
readonly label: "Future Plans";
|
|
105
|
+
readonly description: "The video under the intro on the Future Plans page.";
|
|
106
|
+
readonly group: "futurePlansPage";
|
|
107
|
+
readonly requiredVideo: false;
|
|
108
|
+
} | {
|
|
109
|
+
readonly id: "rules-page";
|
|
110
|
+
readonly kind: "video";
|
|
111
|
+
readonly label: "Rules & Agreements";
|
|
112
|
+
readonly description: "The video under the intro on the Rules & Agreements page.";
|
|
113
|
+
readonly group: "rulesPage";
|
|
114
|
+
readonly requiredVideo: false;
|
|
115
|
+
})[], {
|
|
116
|
+
readonly id: "rules-artisan-agreements";
|
|
117
|
+
readonly kind: "video";
|
|
118
|
+
readonly label: "Artisan Agreements";
|
|
119
|
+
readonly description: "The video under the Artisan Agreements heading on the Rules & Agreements page.";
|
|
120
|
+
readonly group: "rulesPage";
|
|
121
|
+
readonly requiredVideo: false;
|
|
122
|
+
}];
|
|
80
123
|
type SystemSlot = (typeof SYSTEM_SLOTS)[number];
|
|
81
124
|
export type SystemSlotId = SystemSlot['id'];
|
|
82
125
|
export type SystemVideoSlotId = Extract<SystemSlot, {
|
|
@@ -89,6 +132,9 @@ export type SystemUidListSlotId = Extract<SystemSlot, {
|
|
|
89
132
|
kind: 'uidList';
|
|
90
133
|
}>['id'];
|
|
91
134
|
export declare const SystemSlotIdSchema: z.ZodEnum<{
|
|
135
|
+
founder: "founder";
|
|
136
|
+
team: "team";
|
|
137
|
+
"landing-hero": "landing-hero";
|
|
92
138
|
"guide-ttt-in-five-minutes": "guide-ttt-in-five-minutes";
|
|
93
139
|
"guide-finding-your-way-around": "guide-finding-your-way-around";
|
|
94
140
|
"guide-find-something-to-enjoy": "guide-find-something-to-enjoy";
|
|
@@ -131,11 +177,16 @@ export declare const SystemSlotIdSchema: z.ZodEnum<{
|
|
|
131
177
|
"help-profile-artisan-tools": "help-profile-artisan-tools";
|
|
132
178
|
"help-profile-work-projects": "help-profile-work-projects";
|
|
133
179
|
"help-profile-crafts": "help-profile-crafts";
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
"
|
|
180
|
+
"future-plans-page": "future-plans-page";
|
|
181
|
+
"rules-page": "rules-page";
|
|
182
|
+
"rules-merchandising": "rules-merchandising";
|
|
183
|
+
"rules-general": "rules-general";
|
|
184
|
+
"rules-hall-wing": "rules-hall-wing";
|
|
185
|
+
"rules-realm": "rules-realm";
|
|
186
|
+
"rules-artisan-agreements": "rules-artisan-agreements";
|
|
137
187
|
}>;
|
|
138
188
|
export declare const SystemVideoSlotIdSchema: z.ZodEnum<{
|
|
189
|
+
"landing-hero": "landing-hero";
|
|
139
190
|
"guide-ttt-in-five-minutes": "guide-ttt-in-five-minutes";
|
|
140
191
|
"guide-finding-your-way-around": "guide-finding-your-way-around";
|
|
141
192
|
"guide-find-something-to-enjoy": "guide-find-something-to-enjoy";
|
|
@@ -178,7 +229,13 @@ export declare const SystemVideoSlotIdSchema: z.ZodEnum<{
|
|
|
178
229
|
"help-profile-artisan-tools": "help-profile-artisan-tools";
|
|
179
230
|
"help-profile-work-projects": "help-profile-work-projects";
|
|
180
231
|
"help-profile-crafts": "help-profile-crafts";
|
|
181
|
-
"
|
|
232
|
+
"future-plans-page": "future-plans-page";
|
|
233
|
+
"rules-page": "rules-page";
|
|
234
|
+
"rules-merchandising": "rules-merchandising";
|
|
235
|
+
"rules-general": "rules-general";
|
|
236
|
+
"rules-hall-wing": "rules-hall-wing";
|
|
237
|
+
"rules-realm": "rules-realm";
|
|
238
|
+
"rules-artisan-agreements": "rules-artisan-agreements";
|
|
182
239
|
}>;
|
|
183
240
|
export declare const SystemUidSlotIdSchema: z.ZodEnum<{
|
|
184
241
|
founder: "founder";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system-slots.d.ts","sourceRoot":"","sources":["../../src/system-slots/system-slots.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"system-slots.d.ts","sourceRoot":"","sources":["../../src/system-slots/system-slots.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,8 @@
|
|
|
7
7
|
import { z } from 'zod';
|
|
8
8
|
import { GUIDE_VIDEO_DEFINITIONS, guideVideoSlotId } from './guide-videos.js';
|
|
9
9
|
import { HELP_VIDEO_DEFINITIONS, helpVideoSlotId } from './help-videos.js';
|
|
10
|
+
import { RULE_GROUP_KEYS } from '../types/content.js';
|
|
11
|
+
import { ARTISAN_AGREEMENTS_TITLE, RULE_GROUP_TITLES } from '../constants/admin-labels.js';
|
|
10
12
|
/** `video` holds one processed video; `uid` names one account; `uidList` names an ordered list. */
|
|
11
13
|
export const SystemSlotKindSchema = z.enum(['video', 'uid', 'uidList']);
|
|
12
14
|
/**
|
|
@@ -18,6 +20,8 @@ export const SYSTEM_SLOT_GROUPS = [
|
|
|
18
20
|
{ id: 'acknowledgmentsPage', label: 'Acknowledgments page' },
|
|
19
21
|
{ id: 'backstageGuide', label: 'Backstage Guide' },
|
|
20
22
|
{ id: 'helpComponents', label: 'Help components' },
|
|
23
|
+
{ id: 'futurePlansPage', label: 'Future Plans page' },
|
|
24
|
+
{ id: 'rulesPage', label: 'Rules & Agreements page' },
|
|
21
25
|
];
|
|
22
26
|
const GUIDE_VIDEO_SLOTS = GUIDE_VIDEO_DEFINITIONS.map((video) => ({
|
|
23
27
|
id: guideVideoSlotId(video.id),
|
|
@@ -35,6 +39,24 @@ const HELP_VIDEO_SLOTS = HELP_VIDEO_DEFINITIONS.map((help) => ({
|
|
|
35
39
|
group: 'helpComponents',
|
|
36
40
|
requiredVideo: false,
|
|
37
41
|
}));
|
|
42
|
+
/** The optional video under a fixed Rules & Agreements rule group's heading. */
|
|
43
|
+
const RULE_GROUP_SLOT_SUFFIXES = {
|
|
44
|
+
generic: 'general',
|
|
45
|
+
merchandising: 'merchandising',
|
|
46
|
+
hallWing: 'hall-wing',
|
|
47
|
+
workRealm: 'realm',
|
|
48
|
+
};
|
|
49
|
+
export function ruleGroupVideoSlotId(group) {
|
|
50
|
+
return `rules-${RULE_GROUP_SLOT_SUFFIXES[group]}`;
|
|
51
|
+
}
|
|
52
|
+
const RULE_GROUP_VIDEO_SLOTS = RULE_GROUP_KEYS.map((group) => ({
|
|
53
|
+
id: ruleGroupVideoSlotId(group),
|
|
54
|
+
kind: 'video',
|
|
55
|
+
label: RULE_GROUP_TITLES[group],
|
|
56
|
+
description: `The video under the ${RULE_GROUP_TITLES[group]} heading on the Rules & Agreements page.`,
|
|
57
|
+
group: 'rulesPage',
|
|
58
|
+
requiredVideo: false,
|
|
59
|
+
}));
|
|
38
60
|
export const SYSTEM_SLOTS = [
|
|
39
61
|
{
|
|
40
62
|
id: 'founder',
|
|
@@ -60,6 +82,31 @@ export const SYSTEM_SLOTS = [
|
|
|
60
82
|
},
|
|
61
83
|
...GUIDE_VIDEO_SLOTS,
|
|
62
84
|
...HELP_VIDEO_SLOTS,
|
|
85
|
+
{
|
|
86
|
+
id: 'future-plans-page',
|
|
87
|
+
kind: 'video',
|
|
88
|
+
label: 'Future Plans',
|
|
89
|
+
description: 'The video under the intro on the Future Plans page.',
|
|
90
|
+
group: 'futurePlansPage',
|
|
91
|
+
requiredVideo: false,
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
id: 'rules-page',
|
|
95
|
+
kind: 'video',
|
|
96
|
+
label: 'Rules & Agreements',
|
|
97
|
+
description: 'The video under the intro on the Rules & Agreements page.',
|
|
98
|
+
group: 'rulesPage',
|
|
99
|
+
requiredVideo: false,
|
|
100
|
+
},
|
|
101
|
+
...RULE_GROUP_VIDEO_SLOTS,
|
|
102
|
+
{
|
|
103
|
+
id: 'rules-artisan-agreements',
|
|
104
|
+
kind: 'video',
|
|
105
|
+
label: ARTISAN_AGREEMENTS_TITLE,
|
|
106
|
+
description: 'The video under the Artisan Agreements heading on the Rules & Agreements page.',
|
|
107
|
+
group: 'rulesPage',
|
|
108
|
+
requiredVideo: false,
|
|
109
|
+
},
|
|
63
110
|
];
|
|
64
111
|
function slotIdsOfKind(kind) {
|
|
65
112
|
const ids = SYSTEM_SLOTS.filter((slot) => slot.kind === kind).map((slot) => slot.id);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system-slots.js","sourceRoot":"","sources":["../../src/system-slots/system-slots.ts"],"names":[],"mappings":"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","sourcesContent":["// System slots: the admin-managed places the app shows a founder-recorded video or names a special\n// account. Each surface is one registry entry; its value lives in Firestore and is set from the\n// admin System Slots view, never in code.\n//\n// Every `uid` / `uidList` slot is PUBLIC data: its values are stored in the public `_appConfig`\n// bucket, so a slot that names accounts is readable by anyone, signed in or not.\n\nimport { z } from 'zod';\nimport { GUIDE_VIDEO_DEFINITIONS, guideVideoSlotId } from './guide-videos.js';\nimport { HELP_VIDEO_DEFINITIONS, helpVideoSlotId } from './help-videos.js';\n\n/** `video` holds one processed video; `uid` names one account; `uidList` names an ordered list. */\nexport const SystemSlotKindSchema = z.enum(['video', 'uid', 'uidList']);\nexport type SystemSlotKind = z.infer<typeof SystemSlotKindSchema>;\n\n/**\n * Where a slot appears — the admin System Slots view groups slots by it, in this order, under these\n * names. A group is declared only once a slot belongs to it.\n */\nexport const SYSTEM_SLOT_GROUPS = [\n { id: 'landingPage', label: 'Landing page' },\n { id: 'acknowledgmentsPage', label: 'Acknowledgments page' },\n { id: 'backstageGuide', label: 'Backstage Guide' },\n { id: 'helpComponents', label: 'Help components' },\n] as const;\nexport type SystemSlotGroupId = (typeof SYSTEM_SLOT_GROUPS)[number]['id'];\n\ninterface SystemSlotDefinitionBase {\n readonly id: string;\n /** The admin view's row title. */\n readonly label: string;\n /** Where the slot appears, in one sentence. */\n readonly description: string;\n readonly group: SystemSlotGroupId;\n}\n\n/**\n * A video slot declares whether its place always shows a video. `requiredVideo: true` reserves the\n * 16:9 box everywhere it is shown and holds the coming-soon placard until a video is uploaded;\n * `false` takes no space and shows nothing until a video is uploaded.\n */\nexport type SystemSlotDefinition =\n | (SystemSlotDefinitionBase & { readonly kind: 'video'; readonly requiredVideo: boolean })\n | (SystemSlotDefinitionBase & { readonly kind: 'uid' | 'uidList' });\n\nconst GUIDE_VIDEO_SLOTS = GUIDE_VIDEO_DEFINITIONS.map((video) => ({\n id: guideVideoSlotId(video.id),\n kind: 'video' as const,\n label: video.plannedTitle,\n description: 'A Backstage Guide video, shown wherever the Guide offers it.',\n group: 'backstageGuide' as const,\n requiredVideo: true,\n}));\n\nconst HELP_VIDEO_SLOTS = HELP_VIDEO_DEFINITIONS.map((help) => ({\n id: helpVideoSlotId(help.id),\n kind: 'video' as const,\n label: help.title,\n description: help.location,\n group: 'helpComponents' as const,\n requiredVideo: false,\n}));\n\nexport const SYSTEM_SLOTS = [\n {\n id: 'founder',\n kind: 'uid',\n label: 'Founder',\n description: 'The founder named on the acknowledgments page.',\n group: 'acknowledgmentsPage',\n },\n {\n id: 'team',\n kind: 'uidList',\n label: 'Our Team',\n description: 'The team listed on the acknowledgments page.',\n group: 'acknowledgmentsPage',\n },\n {\n id: 'landing-hero',\n kind: 'video',\n label: 'Landing page hero',\n description: 'The video under the hero on the signed-in landing page.',\n group: 'landingPage',\n requiredVideo: true,\n },\n ...GUIDE_VIDEO_SLOTS,\n ...HELP_VIDEO_SLOTS,\n] as const satisfies readonly SystemSlotDefinition[];\n\ntype SystemSlot = (typeof SYSTEM_SLOTS)[number];\nexport type SystemSlotId = SystemSlot['id'];\nexport type SystemVideoSlotId = Extract<SystemSlot, { kind: 'video' }>['id'];\nexport type SystemUidSlotId = Extract<SystemSlot, { kind: 'uid' }>['id'];\nexport type SystemUidListSlotId = Extract<SystemSlot, { kind: 'uidList' }>['id'];\n\nfunction slotIdsOfKind<K extends SystemSlotKind>(kind: K) {\n const ids = SYSTEM_SLOTS.filter((slot) => slot.kind === kind).map((slot) => slot.id);\n return ids as unknown as [Extract<SystemSlot, { kind: K }>['id'], ...Extract<SystemSlot, { kind: K }>['id'][]];\n}\n\nexport const SystemSlotIdSchema = z.enum(\n SYSTEM_SLOTS.map((slot) => slot.id) as unknown as [SystemSlotId, ...SystemSlotId[]],\n);\nexport const SystemVideoSlotIdSchema = z.enum(slotIdsOfKind('video'));\nexport const SystemUidSlotIdSchema = z.enum(slotIdsOfKind('uid'));\nexport const SystemUidListSlotIdSchema = z.enum(slotIdsOfKind('uidList'));\n/** A slot that names accounts: a `uid` or a `uidList` slot. */\nexport const SystemAccountSlotIdSchema = z.enum([\n ...SystemUidSlotIdSchema.options,\n ...SystemUidListSlotIdSchema.options,\n]);\nexport type SystemAccountSlotId = z.infer<typeof SystemAccountSlotIdSchema>;\n\n/** The registry entry for `id`, or undefined for an id the registry does not hold. */\nexport function getSystemSlot(id: string): SystemSlotDefinition | undefined {\n return SYSTEM_SLOTS.find((slot) => slot.id === id);\n}\n\n/** Whether a video slot's place always shows a video (its box and placard) — read from the registry. */\nexport function isRequiredVideoSlot(slotId: SystemVideoSlotId): boolean {\n const slot = SYSTEM_SLOTS.find((entry) => entry.id === slotId);\n return slot?.kind === 'video' && slot.requiredVideo;\n}\n\n/** The registry's slots under each group, in the groups' order; a group no slot belongs to is left out. */\nexport function systemSlotsByGroup(): Array<{ group: (typeof SYSTEM_SLOT_GROUPS)[number]; slots: SystemSlot[] }> {\n return SYSTEM_SLOT_GROUPS.map((group) => ({\n group,\n slots: SYSTEM_SLOTS.filter((slot) => slot.group === group.id),\n })).filter((entry) => entry.slots.length > 0);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"system-slots.js","sourceRoot":"","sources":["../../src/system-slots/system-slots.ts"],"names":[],"mappings":"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","sourcesContent":["// System slots: the admin-managed places the app shows a founder-recorded video or names a special\n// account. Each surface is one registry entry; its value lives in Firestore and is set from the\n// admin System Slots view, never in code.\n//\n// Every `uid` / `uidList` slot is PUBLIC data: its values are stored in the public `_appConfig`\n// bucket, so a slot that names accounts is readable by anyone, signed in or not.\n\nimport { z } from 'zod';\nimport { GUIDE_VIDEO_DEFINITIONS, guideVideoSlotId } from './guide-videos.js';\nimport { HELP_VIDEO_DEFINITIONS, helpVideoSlotId } from './help-videos.js';\nimport { RULE_GROUP_KEYS, type RuleGroup } from '../types/content.js';\nimport { ARTISAN_AGREEMENTS_TITLE, RULE_GROUP_TITLES } from '../constants/admin-labels.js';\n\n/** `video` holds one processed video; `uid` names one account; `uidList` names an ordered list. */\nexport const SystemSlotKindSchema = z.enum(['video', 'uid', 'uidList']);\nexport type SystemSlotKind = z.infer<typeof SystemSlotKindSchema>;\n\n/**\n * Where a slot appears — the admin System Slots view groups slots by it, in this order, under these\n * names. A group is declared only once a slot belongs to it.\n */\nexport const SYSTEM_SLOT_GROUPS = [\n { id: 'landingPage', label: 'Landing page' },\n { id: 'acknowledgmentsPage', label: 'Acknowledgments page' },\n { id: 'backstageGuide', label: 'Backstage Guide' },\n { id: 'helpComponents', label: 'Help components' },\n { id: 'futurePlansPage', label: 'Future Plans page' },\n { id: 'rulesPage', label: 'Rules & Agreements page' },\n] as const;\nexport type SystemSlotGroupId = (typeof SYSTEM_SLOT_GROUPS)[number]['id'];\n\ninterface SystemSlotDefinitionBase {\n readonly id: string;\n /** The admin view's row title. */\n readonly label: string;\n /** Where the slot appears, in one sentence. */\n readonly description: string;\n readonly group: SystemSlotGroupId;\n}\n\n/**\n * A video slot declares whether its place always shows a video. `requiredVideo: true` reserves the\n * 16:9 box everywhere it is shown and holds the coming-soon placard until a video is uploaded;\n * `false` takes no space and shows nothing until a video is uploaded.\n */\nexport type SystemSlotDefinition =\n | (SystemSlotDefinitionBase & { readonly kind: 'video'; readonly requiredVideo: boolean })\n | (SystemSlotDefinitionBase & { readonly kind: 'uid' | 'uidList' });\n\nconst GUIDE_VIDEO_SLOTS = GUIDE_VIDEO_DEFINITIONS.map((video) => ({\n id: guideVideoSlotId(video.id),\n kind: 'video' as const,\n label: video.plannedTitle,\n description: 'A Backstage Guide video, shown wherever the Guide offers it.',\n group: 'backstageGuide' as const,\n requiredVideo: true,\n}));\n\nconst HELP_VIDEO_SLOTS = HELP_VIDEO_DEFINITIONS.map((help) => ({\n id: helpVideoSlotId(help.id),\n kind: 'video' as const,\n label: help.title,\n description: help.location,\n group: 'helpComponents' as const,\n requiredVideo: false,\n}));\n\n/** The optional video under a fixed Rules & Agreements rule group's heading. */\nconst RULE_GROUP_SLOT_SUFFIXES = {\n generic: 'general',\n merchandising: 'merchandising',\n hallWing: 'hall-wing',\n workRealm: 'realm',\n} as const satisfies Record<RuleGroup, string>;\n\nexport function ruleGroupVideoSlotId<G extends RuleGroup>(\n group: G,\n): `rules-${(typeof RULE_GROUP_SLOT_SUFFIXES)[G]}` {\n return `rules-${RULE_GROUP_SLOT_SUFFIXES[group]}`;\n}\n\nconst RULE_GROUP_VIDEO_SLOTS = RULE_GROUP_KEYS.map((group) => ({\n id: ruleGroupVideoSlotId(group),\n kind: 'video' as const,\n label: RULE_GROUP_TITLES[group],\n description: `The video under the ${RULE_GROUP_TITLES[group]} heading on the Rules & Agreements page.`,\n group: 'rulesPage' as const,\n requiredVideo: false,\n}));\n\nexport const SYSTEM_SLOTS = [\n {\n id: 'founder',\n kind: 'uid',\n label: 'Founder',\n description: 'The founder named on the acknowledgments page.',\n group: 'acknowledgmentsPage',\n },\n {\n id: 'team',\n kind: 'uidList',\n label: 'Our Team',\n description: 'The team listed on the acknowledgments page.',\n group: 'acknowledgmentsPage',\n },\n {\n id: 'landing-hero',\n kind: 'video',\n label: 'Landing page hero',\n description: 'The video under the hero on the signed-in landing page.',\n group: 'landingPage',\n requiredVideo: true,\n },\n ...GUIDE_VIDEO_SLOTS,\n ...HELP_VIDEO_SLOTS,\n {\n id: 'future-plans-page',\n kind: 'video',\n label: 'Future Plans',\n description: 'The video under the intro on the Future Plans page.',\n group: 'futurePlansPage',\n requiredVideo: false,\n },\n {\n id: 'rules-page',\n kind: 'video',\n label: 'Rules & Agreements',\n description: 'The video under the intro on the Rules & Agreements page.',\n group: 'rulesPage',\n requiredVideo: false,\n },\n ...RULE_GROUP_VIDEO_SLOTS,\n {\n id: 'rules-artisan-agreements',\n kind: 'video',\n label: ARTISAN_AGREEMENTS_TITLE,\n description: 'The video under the Artisan Agreements heading on the Rules & Agreements page.',\n group: 'rulesPage',\n requiredVideo: false,\n },\n] as const satisfies readonly SystemSlotDefinition[];\n\ntype SystemSlot = (typeof SYSTEM_SLOTS)[number];\nexport type SystemSlotId = SystemSlot['id'];\nexport type SystemVideoSlotId = Extract<SystemSlot, { kind: 'video' }>['id'];\nexport type SystemUidSlotId = Extract<SystemSlot, { kind: 'uid' }>['id'];\nexport type SystemUidListSlotId = Extract<SystemSlot, { kind: 'uidList' }>['id'];\n\nfunction slotIdsOfKind<K extends SystemSlotKind>(kind: K) {\n const ids = SYSTEM_SLOTS.filter((slot) => slot.kind === kind).map((slot) => slot.id);\n return ids as unknown as [Extract<SystemSlot, { kind: K }>['id'], ...Extract<SystemSlot, { kind: K }>['id'][]];\n}\n\nexport const SystemSlotIdSchema = z.enum(\n SYSTEM_SLOTS.map((slot) => slot.id) as unknown as [SystemSlotId, ...SystemSlotId[]],\n);\nexport const SystemVideoSlotIdSchema = z.enum(slotIdsOfKind('video'));\nexport const SystemUidSlotIdSchema = z.enum(slotIdsOfKind('uid'));\nexport const SystemUidListSlotIdSchema = z.enum(slotIdsOfKind('uidList'));\n/** A slot that names accounts: a `uid` or a `uidList` slot. */\nexport const SystemAccountSlotIdSchema = z.enum([\n ...SystemUidSlotIdSchema.options,\n ...SystemUidListSlotIdSchema.options,\n]);\nexport type SystemAccountSlotId = z.infer<typeof SystemAccountSlotIdSchema>;\n\n/** The registry entry for `id`, or undefined for an id the registry does not hold. */\nexport function getSystemSlot(id: string): SystemSlotDefinition | undefined {\n return SYSTEM_SLOTS.find((slot) => slot.id === id);\n}\n\n/** Whether a video slot's place always shows a video (its box and placard) — read from the registry. */\nexport function isRequiredVideoSlot(slotId: SystemVideoSlotId): boolean {\n const slot = SYSTEM_SLOTS.find((entry) => entry.id === slotId);\n return slot?.kind === 'video' && slot.requiredVideo;\n}\n\n/** The registry's slots under each group, in the groups' order; a group no slot belongs to is left out. */\nexport function systemSlotsByGroup(): Array<{ group: (typeof SYSTEM_SLOT_GROUPS)[number]; slots: SystemSlot[] }> {\n return SYSTEM_SLOT_GROUPS.map((group) => ({\n group,\n slots: SYSTEM_SLOTS.filter((slot) => slot.group === group.id),\n })).filter((entry) => entry.slots.length > 0);\n}\n"]}
|
|
@@ -7,14 +7,5 @@ export interface PublicUserSearchResult {
|
|
|
7
7
|
displayName: string;
|
|
8
8
|
status: UserAccountStatus;
|
|
9
9
|
}
|
|
10
|
-
|
|
11
|
-
* admin resolves by email, uid, or display name. Carries the owner-only email (an admin-gated
|
|
12
|
-
* read of the account's privateData) and the admin-claim flag alongside the status tier. */
|
|
13
|
-
export interface AdminUserLookupResult {
|
|
14
|
-
uid: string;
|
|
15
|
-
displayName: string;
|
|
16
|
-
email: string;
|
|
17
|
-
status: UserAccountStatus;
|
|
18
|
-
isAdmin?: boolean;
|
|
19
|
-
}
|
|
10
|
+
export type { AdminUserLookupResult, LookupUserByEmailOrUidResult } from '../schemas/users.js';
|
|
20
11
|
//# sourceMappingURL=admin-users.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-users.d.ts","sourceRoot":"","sources":["../../src/types/admin-users.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhE;;iFAEiF;AACjF,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,iBAAiB,CAAC;CAC3B;
|
|
1
|
+
{"version":3,"file":"admin-users.d.ts","sourceRoot":"","sources":["../../src/types/admin-users.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhE;;iFAEiF;AACjF,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,iBAAiB,CAAC;CAC3B;AAGD,YAAY,EAAE,qBAAqB,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-users.js","sourceRoot":"","sources":["../../src/types/admin-users.ts"],"names":[],"mappings":"AAAA,sFAAsF;AACtF,0FAA0F;AAC1F,0FAA0F;AAC1F,mFAAmF;AACnF,oEAAoE","sourcesContent":["// Admin user-directory callable RESULT shapes — cross-boundary contracts (the backend\n// builds them, the admin User Management surface renders them), so they live HERE per the\n// Cross-Boundary Type Invariant (same rationale as admin-ops.ts). The account status tier\n// reuses the ONE canonical UserAccountStatus union (doc-schemas/user.ts) — never a\n// re-declared 'active' | 'suspended' | 'banned' literal (ARCH-102).\n\nimport type { UserAccountStatus } from '../doc-schemas/user.js';\n\n/** One row of the admin display-name prefix search (`searchPublicUsers`). The status tier is\n * resolved server-side from the authoritative `userProfiles/{uid}` doc — `publicUsers` only\n * mirrors a derived `disabled` boolean, not the active/suspended/banned tier. */\nexport interface PublicUserSearchResult {\n uid: string;\n displayName: string;\n status: UserAccountStatus;\n}\n\n
|
|
1
|
+
{"version":3,"file":"admin-users.js","sourceRoot":"","sources":["../../src/types/admin-users.ts"],"names":[],"mappings":"AAAA,sFAAsF;AACtF,0FAA0F;AAC1F,0FAA0F;AAC1F,mFAAmF;AACnF,oEAAoE","sourcesContent":["// Admin user-directory callable RESULT shapes — cross-boundary contracts (the backend\n// builds them, the admin User Management surface renders them), so they live HERE per the\n// Cross-Boundary Type Invariant (same rationale as admin-ops.ts). The account status tier\n// reuses the ONE canonical UserAccountStatus union (doc-schemas/user.ts) — never a\n// re-declared 'active' | 'suspended' | 'banned' literal (ARCH-102).\n\nimport type { UserAccountStatus } from '../doc-schemas/user.js';\n\n/** One row of the admin display-name prefix search (`searchPublicUsers`). The status tier is\n * resolved server-side from the authoritative `userProfiles/{uid}` doc — `publicUsers` only\n * mirrors a derived `disabled` boolean, not the active/suspended/banned tier. */\nexport interface PublicUserSearchResult {\n uid: string;\n displayName: string;\n status: UserAccountStatus;\n}\n\n// The exact-match lookup's result shape is declared with its schema (schemas/users.ts).\nexport type { AdminUserLookupResult, LookupUserByEmailOrUidResult } from '../schemas/users.js';\n"]}
|
package/dist/types/content.d.ts
CHANGED
|
@@ -7,6 +7,9 @@ export declare const WORK_PROJECT_TYPE_KEYS: readonly ["Tales", "Tunes", "Televi
|
|
|
7
7
|
export type WorkProjectType = (typeof WORK_PROJECT_TYPE_KEYS)[number];
|
|
8
8
|
/** WorkProjectType with 'All' filter option — for UI filtering only, not stored in Firestore */
|
|
9
9
|
export type WorkProjectTypeFilter = WorkProjectType | 'All';
|
|
10
|
+
/** The fixed Rules & Agreements rule groups, in page order. */
|
|
11
|
+
export declare const RULE_GROUP_KEYS: readonly ["generic", "merchandising", "hallWing", "workRealm"];
|
|
12
|
+
export type RuleGroup = (typeof RULE_GROUP_KEYS)[number];
|
|
10
13
|
export type { ItemsKey } from '../doc-schemas/content.js';
|
|
11
14
|
export type { ThresholdItem, PublishedHallItem, PublishedTuneTrack, PublishedChapter, PublishedTelevisionEpisode, HallContentChangeRequest, HallContentTextSurface, } from '../doc-schemas/content.js';
|
|
12
15
|
export type { HallLibraryPreferences, HallLibraryInProgressEntry, HallLibraryRecentlyViewedEntry, HallLibrarySettings, } from '../doc-schemas/content.js';
|
|
@@ -16,5 +19,5 @@ export type HallLibraryFilters = {
|
|
|
16
19
|
workProjectType: WorkProjectTypeFilter;
|
|
17
20
|
sortBy: HallLibrarySortOption;
|
|
18
21
|
};
|
|
19
|
-
export type { FuturePlanItem, FuturePlansDocument,
|
|
22
|
+
export type { FuturePlanGroup, FuturePlanItem, FuturePlansDocument, Rule, AgreementPoint, ArtisanAgreements, RulesAndAgreements, } from '../doc-schemas/content.js';
|
|
20
23
|
//# sourceMappingURL=content.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../src/types/content.ts"],"names":[],"mappings":"AAGA,YAAY,EACV,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,aAAa,EACb,cAAc,EACd,qBAAqB,GACtB,MAAM,2BAA2B,CAAC;AAInC,eAAO,MAAM,mBAAmB,4DAA6D,CAAC;AAC9F,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhE,6FAA6F;AAC7F,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG,KAAK,CAAC;AAEtD,eAAO,MAAM,sBAAsB,2CAA4C,CAAC;AAChF,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtE,gGAAgG;AAChG,MAAM,MAAM,qBAAqB,GAAG,eAAe,GAAG,KAAK,CAAC;AAE5D,YAAY,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAG1D,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,0BAA0B,EAC1B,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,2BAA2B,CAAC;AAEnC,YAAY,EACV,sBAAsB,EACtB,0BAA0B,EAC1B,8BAA8B,EAC9B,mBAAmB,GACpB,MAAM,2BAA2B,CAAC;AAEnC,MAAM,MAAM,qBAAqB,GAC7B,QAAQ,GACR,QAAQ,GACR,eAAe,CAAC;AAMpB,MAAM,MAAM,kBAAkB,GAAG;IAC/B,YAAY,EAAE,kBAAkB,CAAC;IACjC,eAAe,EAAE,qBAAqB,CAAC;IACvC,MAAM,EAAE,qBAAqB,CAAC;CAC/B,CAAC;AAGF,YAAY,EACV,cAAc,EACd,mBAAmB,EACnB,
|
|
1
|
+
{"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../src/types/content.ts"],"names":[],"mappings":"AAGA,YAAY,EACV,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,aAAa,EACb,cAAc,EACd,qBAAqB,GACtB,MAAM,2BAA2B,CAAC;AAInC,eAAO,MAAM,mBAAmB,4DAA6D,CAAC;AAC9F,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhE,6FAA6F;AAC7F,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG,KAAK,CAAC;AAEtD,eAAO,MAAM,sBAAsB,2CAA4C,CAAC;AAChF,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtE,gGAAgG;AAChG,MAAM,MAAM,qBAAqB,GAAG,eAAe,GAAG,KAAK,CAAC;AAE5D,+DAA+D;AAC/D,eAAO,MAAM,eAAe,gEAAiE,CAAC;AAC9F,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD,YAAY,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAG1D,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,0BAA0B,EAC1B,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,2BAA2B,CAAC;AAEnC,YAAY,EACV,sBAAsB,EACtB,0BAA0B,EAC1B,8BAA8B,EAC9B,mBAAmB,GACpB,MAAM,2BAA2B,CAAC;AAEnC,MAAM,MAAM,qBAAqB,GAC7B,QAAQ,GACR,QAAQ,GACR,eAAe,CAAC;AAMpB,MAAM,MAAM,kBAAkB,GAAG;IAC/B,YAAY,EAAE,kBAAkB,CAAC;IACjC,eAAe,EAAE,qBAAqB,CAAC;IACvC,MAAM,EAAE,qBAAqB,CAAC;CAC/B,CAAC;AAGF,YAAY,EACV,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,IAAI,EACJ,cAAc,EACd,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,2BAA2B,CAAC"}
|
package/dist/types/content.js
CHANGED
|
@@ -2,4 +2,6 @@
|
|
|
2
2
|
// --- HallLibrary Types ---
|
|
3
3
|
export const HALL_WING_TYPE_KEYS = ['entertainment', 'educational', 'newsPolitical'];
|
|
4
4
|
export const WORK_PROJECT_TYPE_KEYS = ['Tales', 'Tunes', 'Television'];
|
|
5
|
+
/** The fixed Rules & Agreements rule groups, in page order. */
|
|
6
|
+
export const RULE_GROUP_KEYS = ['generic', 'merchandising', 'hallWing', 'workRealm'];
|
|
5
7
|
//# sourceMappingURL=content.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content.js","sourceRoot":"","sources":["../../src/types/content.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAYvD,4BAA4B;AAE5B,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,eAAe,EAAE,aAAa,EAAE,eAAe,CAAU,CAAC;AAM9F,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,CAAU,CAAC","sourcesContent":["// Content types: Tales, Tunes, Television, HallLibrary\n\n// --- WorkProject content sub-docs (shapes in ../doc-schemas/content.ts) ---\nexport type {\n FullTale,\n FullChapter,\n FullTune,\n FullTuneTrack,\n FullTelevision,\n FullTelevisionEpisode,\n} from '../doc-schemas/content.js';\n\n// --- HallLibrary Types ---\n\nexport const HALL_WING_TYPE_KEYS = ['entertainment', 'educational', 'newsPolitical'] as const;\nexport type HallWingType = (typeof HALL_WING_TYPE_KEYS)[number];\n\n/** HallWingType with 'All' filter option — for UI filtering only, not stored in Firestore */\nexport type HallWingTypeFilter = HallWingType | 'All';\n\nexport const WORK_PROJECT_TYPE_KEYS = ['Tales', 'Tunes', 'Television'] as const;\nexport type WorkProjectType = (typeof WORK_PROJECT_TYPE_KEYS)[number];\n\n/** WorkProjectType with 'All' filter option — for UI filtering only, not stored in Firestore */\nexport type WorkProjectTypeFilter = WorkProjectType | 'All';\n\nexport type { ItemsKey } from '../doc-schemas/content.js';\n\n// --- Threshold + Hall library items (shapes in ../doc-schemas/content.ts) ---\nexport type {\n ThresholdItem,\n PublishedHallItem,\n PublishedTuneTrack,\n PublishedChapter,\n PublishedTelevisionEpisode,\n HallContentChangeRequest,\n HallContentTextSurface,\n} from '../doc-schemas/content.js';\n\nexport type {\n HallLibraryPreferences,\n HallLibraryInProgressEntry,\n HallLibraryRecentlyViewedEntry,\n HallLibrarySettings,\n} from '../doc-schemas/content.js';\n\nexport type HallLibrarySortOption =\n | 'newest'\n | 'oldest'\n | 'most_followed';\n\n// V1 Hall browse filters on the big categories only (medium coins × wing coins). The genre\n// FILTER was removed for launch (DJ, 2026-07-27) — works still TAG per-medium genres at\n// creation and display them, so a browse genre filter can return post-launch once real\n// content data exists (options recorded in ttt-prod docs/post-launch).\nexport type HallLibraryFilters = {\n hallWingType: HallWingTypeFilter;\n workProjectType: WorkProjectTypeFilter;\n sortBy: HallLibrarySortOption;\n};\n\n// --- _config singleton docs (shapes in ../doc-schemas/content.ts) ---\nexport type {\n
|
|
1
|
+
{"version":3,"file":"content.js","sourceRoot":"","sources":["../../src/types/content.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAYvD,4BAA4B;AAE5B,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,eAAe,EAAE,aAAa,EAAE,eAAe,CAAU,CAAC;AAM9F,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,CAAU,CAAC;AAMhF,+DAA+D;AAC/D,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,SAAS,EAAE,eAAe,EAAE,UAAU,EAAE,WAAW,CAAU,CAAC","sourcesContent":["// Content types: Tales, Tunes, Television, HallLibrary\n\n// --- WorkProject content sub-docs (shapes in ../doc-schemas/content.ts) ---\nexport type {\n FullTale,\n FullChapter,\n FullTune,\n FullTuneTrack,\n FullTelevision,\n FullTelevisionEpisode,\n} from '../doc-schemas/content.js';\n\n// --- HallLibrary Types ---\n\nexport const HALL_WING_TYPE_KEYS = ['entertainment', 'educational', 'newsPolitical'] as const;\nexport type HallWingType = (typeof HALL_WING_TYPE_KEYS)[number];\n\n/** HallWingType with 'All' filter option — for UI filtering only, not stored in Firestore */\nexport type HallWingTypeFilter = HallWingType | 'All';\n\nexport const WORK_PROJECT_TYPE_KEYS = ['Tales', 'Tunes', 'Television'] as const;\nexport type WorkProjectType = (typeof WORK_PROJECT_TYPE_KEYS)[number];\n\n/** WorkProjectType with 'All' filter option — for UI filtering only, not stored in Firestore */\nexport type WorkProjectTypeFilter = WorkProjectType | 'All';\n\n/** The fixed Rules & Agreements rule groups, in page order. */\nexport const RULE_GROUP_KEYS = ['generic', 'merchandising', 'hallWing', 'workRealm'] as const;\nexport type RuleGroup = (typeof RULE_GROUP_KEYS)[number];\n\nexport type { ItemsKey } from '../doc-schemas/content.js';\n\n// --- Threshold + Hall library items (shapes in ../doc-schemas/content.ts) ---\nexport type {\n ThresholdItem,\n PublishedHallItem,\n PublishedTuneTrack,\n PublishedChapter,\n PublishedTelevisionEpisode,\n HallContentChangeRequest,\n HallContentTextSurface,\n} from '../doc-schemas/content.js';\n\nexport type {\n HallLibraryPreferences,\n HallLibraryInProgressEntry,\n HallLibraryRecentlyViewedEntry,\n HallLibrarySettings,\n} from '../doc-schemas/content.js';\n\nexport type HallLibrarySortOption =\n | 'newest'\n | 'oldest'\n | 'most_followed';\n\n// V1 Hall browse filters on the big categories only (medium coins × wing coins). The genre\n// FILTER was removed for launch (DJ, 2026-07-27) — works still TAG per-medium genres at\n// creation and display them, so a browse genre filter can return post-launch once real\n// content data exists (options recorded in ttt-prod docs/post-launch).\nexport type HallLibraryFilters = {\n hallWingType: HallWingTypeFilter;\n workProjectType: WorkProjectTypeFilter;\n sortBy: HallLibrarySortOption;\n};\n\n// --- _config singleton docs (shapes in ../doc-schemas/content.ts) ---\nexport type {\n FuturePlanGroup,\n FuturePlanItem,\n FuturePlansDocument,\n Rule,\n AgreementPoint,\n ArtisanAgreements,\n RulesAndAgreements,\n} from '../doc-schemas/content.js';\n\n\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
export declare const UploadSystemContentVariablesSchema: z.ZodObject<{
|
|
3
3
|
slotId: z.ZodEnum<{
|
|
4
|
+
"landing-hero": "landing-hero";
|
|
4
5
|
"guide-ttt-in-five-minutes": "guide-ttt-in-five-minutes";
|
|
5
6
|
"guide-finding-your-way-around": "guide-finding-your-way-around";
|
|
6
7
|
"guide-find-something-to-enjoy": "guide-find-something-to-enjoy";
|
|
@@ -43,7 +44,13 @@ export declare const UploadSystemContentVariablesSchema: z.ZodObject<{
|
|
|
43
44
|
"help-profile-artisan-tools": "help-profile-artisan-tools";
|
|
44
45
|
"help-profile-work-projects": "help-profile-work-projects";
|
|
45
46
|
"help-profile-crafts": "help-profile-crafts";
|
|
46
|
-
"
|
|
47
|
+
"future-plans-page": "future-plans-page";
|
|
48
|
+
"rules-page": "rules-page";
|
|
49
|
+
"rules-merchandising": "rules-merchandising";
|
|
50
|
+
"rules-general": "rules-general";
|
|
51
|
+
"rules-hall-wing": "rules-hall-wing";
|
|
52
|
+
"rules-realm": "rules-realm";
|
|
53
|
+
"rules-artisan-agreements": "rules-artisan-agreements";
|
|
47
54
|
}>;
|
|
48
55
|
videoFile: z.ZodUnion<[z.ZodCustom<File, File>, z.ZodCustom<Blob, Blob>]>;
|
|
49
56
|
claim: z.ZodOptional<z.ZodObject<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload-system-content-variables.d.ts","sourceRoot":"","sources":["../../src/upload-variables/upload-system-content-variables.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,kCAAkC
|
|
1
|
+
{"version":3,"file":"upload-system-content-variables.d.ts","sourceRoot":"","sources":["../../src/upload-variables/upload-system-content-variables.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAQpC,CAAC;AACZ,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAC"}
|