@ttt-productions/ttt-core 0.78.14 → 0.78.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/capabilities/capability-registry.js.map +1 -1
- package/dist/capabilities/index.js.map +1 -1
- package/dist/capabilities/messaging-surfaces.js.map +1 -1
- package/dist/constants/admin-labels.js.map +1 -1
- package/dist/constants/app-mode.js.map +1 -1
- package/dist/constants/business-admin.js.map +1 -1
- package/dist/constants/business-content.js.map +1 -1
- package/dist/constants/business-platform.js.map +1 -1
- package/dist/constants/business-user.js.map +1 -1
- package/dist/constants/business-work-project.js.map +1 -1
- package/dist/constants/business.js.map +1 -1
- package/dist/constants/center-stage-rooms.d.ts +12 -0
- package/dist/constants/center-stage-rooms.d.ts.map +1 -0
- package/dist/constants/center-stage-rooms.js +32 -0
- package/dist/constants/center-stage-rooms.js.map +1 -0
- package/dist/constants/chat.js.map +1 -1
- package/dist/constants/company-mascots.d.ts +115 -0
- package/dist/constants/company-mascots.d.ts.map +1 -0
- package/dist/constants/company-mascots.js +272 -0
- package/dist/constants/company-mascots.js.map +1 -0
- package/dist/constants/craft-skill-statements.js.map +1 -1
- package/dist/constants/index.d.ts +2 -0
- package/dist/constants/index.d.ts.map +1 -1
- package/dist/constants/index.js +2 -0
- package/dist/constants/index.js.map +1 -1
- package/dist/constants/moderation.js.map +1 -1
- package/dist/constants/options.js.map +1 -1
- package/dist/constants/pagination.js.map +1 -1
- package/dist/constants/publish-attestations.js.map +1 -1
- package/dist/constants/release-flags.js.map +1 -1
- package/dist/constants/retention.js.map +1 -1
- package/dist/constants/safety-confirmation-phrases.js.map +1 -1
- package/dist/constants/safety-telemetry-patterns.js.map +1 -1
- package/dist/constants/scheduled-jobs.js.map +1 -1
- package/dist/constants/storage-keys.d.ts +15 -0
- package/dist/constants/storage-keys.d.ts.map +1 -1
- package/dist/constants/storage-keys.js +18 -0
- package/dist/constants/storage-keys.js.map +1 -1
- package/dist/doc-schemas/account-deletion.js.map +1 -1
- package/dist/doc-schemas/audit.js.map +1 -1
- package/dist/doc-schemas/chat-sync.js.map +1 -1
- package/dist/doc-schemas/commissions.js.map +1 -1
- package/dist/doc-schemas/content.js.map +1 -1
- package/dist/doc-schemas/firestore-primitives.js.map +1 -1
- package/dist/doc-schemas/index.js.map +1 -1
- package/dist/doc-schemas/media-activation-jobs.js.map +1 -1
- package/dist/doc-schemas/media-assets.js.map +1 -1
- package/dist/doc-schemas/messaging.js.map +1 -1
- package/dist/doc-schemas/moderation.js.map +1 -1
- package/dist/doc-schemas/ncii/allegations.js.map +1 -1
- package/dist/doc-schemas/ncii/cases.js.map +1 -1
- package/dist/doc-schemas/ncii/config.js.map +1 -1
- package/dist/doc-schemas/ncii/holds.js.map +1 -1
- package/dist/doc-schemas/ncii/removal.js.map +1 -1
- package/dist/doc-schemas/ncii/requests.js.map +1 -1
- package/dist/doc-schemas/notification-ledger.js.map +1 -1
- package/dist/doc-schemas/notifications.js.map +1 -1
- package/dist/doc-schemas/operational.js.map +1 -1
- package/dist/doc-schemas/payments.js.map +1 -1
- package/dist/doc-schemas/publicUser.js.map +1 -1
- package/dist/doc-schemas/registry.js.map +1 -1
- package/dist/doc-schemas/report-docs.js.map +1 -1
- package/dist/doc-schemas/safety/age.js.map +1 -1
- package/dist/doc-schemas/safety/case-alert.js.map +1 -1
- package/dist/doc-schemas/safety/case-aliases.js.map +1 -1
- package/dist/doc-schemas/safety/case.js.map +1 -1
- package/dist/doc-schemas/safety/evidence.js.map +1 -1
- package/dist/doc-schemas/safety/foundation.js.map +1 -1
- package/dist/doc-schemas/safety/holds.js.map +1 -1
- package/dist/doc-schemas/safety/monitors.js.map +1 -1
- package/dist/doc-schemas/safety/provenance.js.map +1 -1
- package/dist/doc-schemas/safety/report.js.map +1 -1
- package/dist/doc-schemas/safety/reviewer-security.js.map +1 -1
- package/dist/doc-schemas/safety/sagas.js.map +1 -1
- package/dist/doc-schemas/social.js.map +1 -1
- package/dist/doc-schemas/square-announcement-jobs.js.map +1 -1
- package/dist/doc-schemas/system.js.map +1 -1
- package/dist/doc-schemas/user.js.map +1 -1
- package/dist/doc-schemas/work-project.js.map +1 -1
- package/dist/ids/chat-ids.js.map +1 -1
- package/dist/ids/index.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/media/atoms.js.map +1 -1
- package/dist/media/domain-events-admin.js.map +1 -1
- package/dist/media/domain-events-social.js.map +1 -1
- package/dist/media/domain-events-user.js.map +1 -1
- package/dist/media/domain-events-work.js.map +1 -1
- package/dist/media/domain-events.js.map +1 -1
- package/dist/media/edge-serving-contract.js.map +1 -1
- package/dist/media/file-origin.js.map +1 -1
- package/dist/media/hall-library-target-fields.js.map +1 -1
- package/dist/media/index.js.map +1 -1
- package/dist/media/media-asset-url.js.map +1 -1
- package/dist/media/pending-media.js.map +1 -1
- package/dist/media/photodna-coverage.js.map +1 -1
- package/dist/media/start-upload.js.map +1 -1
- package/dist/media/target-info.js.map +1 -1
- package/dist/media/ttt-media-specs.js.map +1 -1
- package/dist/media/upload-tray-display.js.map +1 -1
- package/dist/notifications/index.js.map +1 -1
- package/dist/paths/collection-groups.js.map +1 -1
- package/dist/paths/collection-refs.js.map +1 -1
- package/dist/paths/collections.js.map +1 -1
- package/dist/paths/index.js.map +1 -1
- package/dist/paths/path-builders.js.map +1 -1
- package/dist/paths/related-ids.js.map +1 -1
- package/dist/paths/storage-paths.js.map +1 -1
- package/dist/paths/utils.js.map +1 -1
- package/dist/permissions/guild-standing-assignment-policy.js.map +1 -1
- package/dist/permissions/index.js.map +1 -1
- package/dist/permissions/work-project-permissions-data.js.map +1 -1
- package/dist/permissions/work-project-permissions.js.map +1 -1
- package/dist/report/chat-report-channel-ref.js.map +1 -1
- package/dist/report/index.js.map +1 -1
- package/dist/report/report-config-values.js.map +1 -1
- package/dist/safety/active-safety-case-alert.js.map +1 -1
- package/dist/safety/index.js.map +1 -1
- package/dist/safety/ncii-intake-derivations.js.map +1 -1
- package/dist/safety/resource-keys.js.map +1 -1
- package/dist/schemas/admin-dispatch-actions.js.map +1 -1
- package/dist/schemas/admin.js.map +1 -1
- package/dist/schemas/atoms.js.map +1 -1
- package/dist/schemas/auditions.js.map +1 -1
- package/dist/schemas/chat.js.map +1 -1
- package/dist/schemas/commissions.js.map +1 -1
- package/dist/schemas/craft-skills.js.map +1 -1
- package/dist/schemas/hall-library.js.map +1 -1
- package/dist/schemas/index.js.map +1 -1
- package/dist/schemas/media.js.map +1 -1
- package/dist/schemas/ncii.js.map +1 -1
- package/dist/schemas/notification.js.map +1 -1
- package/dist/schemas/payments.js.map +1 -1
- package/dist/schemas/safety.js.map +1 -1
- package/dist/schemas/social.js.map +1 -1
- package/dist/schemas/stake-share-operation.js.map +1 -1
- package/dist/schemas/uploads.js.map +1 -1
- package/dist/schemas/users.js.map +1 -1
- package/dist/schemas/utility.js.map +1 -1
- package/dist/schemas/voting.js.map +1 -1
- package/dist/schemas/work-project-management.js.map +1 -1
- package/dist/types/admin-ops.js.map +1 -1
- package/dist/types/admin-users.js.map +1 -1
- package/dist/types/admin.js.map +1 -1
- package/dist/types/audit.js.map +1 -1
- package/dist/types/commissions.js.map +1 -1
- package/dist/types/content.js.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/messaging.js.map +1 -1
- package/dist/types/moderation.js.map +1 -1
- package/dist/types/payments.js.map +1 -1
- package/dist/types/publicUser.js.map +1 -1
- package/dist/types/social.js.map +1 -1
- package/dist/types/system.js.map +1 -1
- package/dist/types/user.js.map +1 -1
- package/dist/types/work-project.js.map +1 -1
- package/dist/upload-variables/apply-to-commission-variables.js.map +1 -1
- package/dist/upload-variables/create-admin-audition-variables.js.map +1 -1
- package/dist/upload-variables/create-audition-entry-variables.js.map +1 -1
- package/dist/upload-variables/create-commission-variables.js.map +1 -1
- package/dist/upload-variables/create-work-project-audition-variables.js.map +1 -1
- package/dist/upload-variables/index.js.map +1 -1
- package/dist/upload-variables/on-progress.js.map +1 -1
- package/dist/upload-variables/square-streetz-post-variables.js.map +1 -1
- package/dist/upload-variables/update-chapter-media-variables.js.map +1 -1
- package/dist/upload-variables/update-episode-media-variables.js.map +1 -1
- package/dist/upload-variables/update-tale-cover-photo-variables.js.map +1 -1
- package/dist/upload-variables/update-television-cover-photo-variables.js.map +1 -1
- package/dist/upload-variables/update-track-media-variables.js.map +1 -1
- package/dist/upload-variables/update-tune-cover-photo-variables.js.map +1 -1
- package/dist/upload-variables/upload-craft-skill-variables.js.map +1 -1
- package/dist/upload-variables/upload-profile-picture-variables.js.map +1 -1
- package/dist/utils/format.js.map +1 -1
- package/dist/utils/index.js.map +1 -1
- package/package.json +15 -7
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// THE COMPANY — canonical Green Room mascot contract + content (Rule 36).
|
|
3
|
+
//
|
|
4
|
+
// The ONE home for the pure, server-safe Company business truths (id unions,
|
|
5
|
+
// billing kinds, performance intents, selectability, roster order) AND the
|
|
6
|
+
// DJ-approved VERBATIM character content (studies, click lines, footers,
|
|
7
|
+
// companion-switch exchanges, Yorick block lines, signed-out dock lines,
|
|
8
|
+
// onboarding cameos). Moved here losslessly from the app's staging modules
|
|
9
|
+
// (`src/lib/company-contract` + `src/lib/company-mascots.tsx`).
|
|
10
|
+
//
|
|
11
|
+
// This module is pure data: NO React, NO JSX, NO Next links, NO CSS, NO SVG,
|
|
12
|
+
// NO functions inside the data. Rich copy is modelled as discriminated
|
|
13
|
+
// `CompanyCopySegment`s so a web renderer, a phone app, or an AI voice can each
|
|
14
|
+
// present the exact approved words without importing a UI framework. The app
|
|
15
|
+
// owns the puppets, rig, choreography, and the adapter that turns these
|
|
16
|
+
// segments into `<p>`, `<em>`, and route-aware links.
|
|
17
|
+
//
|
|
18
|
+
// Canonical dialogue stays a versioned code constant here (never Firestore):
|
|
19
|
+
// it is the personality source, the safe AI-unavailable fallback, and the
|
|
20
|
+
// voice-regression fixture. Never reword — curly quotes/apostrophes are
|
|
21
|
+
// authored exactly as they render.
|
|
22
|
+
// ============================================================================
|
|
23
|
+
/** The roster, in billing order (Bill → Kit → Yorick). */
|
|
24
|
+
export const COMPANY_CHARACTER_IDS = ['bill', 'kit', 'yorick'];
|
|
25
|
+
/** The performance intents, in demo-button order. The app previously
|
|
26
|
+
* hand-mirrored this union in two places; consumers derive from this array. */
|
|
27
|
+
export const COMPANY_PERFORMANCE_INTENTS = ['bow', 'hop', 'wave'];
|
|
28
|
+
/** The castable dock companions, in order. */
|
|
29
|
+
export const SELECTABLE_COMPANION_IDS = ['bill', 'kit'];
|
|
30
|
+
// ── Segment construction helpers (module-private; output is pure data) ────────
|
|
31
|
+
/** A line/footer that is a single plain-text run. */
|
|
32
|
+
const textRun = (text) => [{ kind: 'text', text }];
|
|
33
|
+
/** A character's dock footer, built from the one verbatim sentence. The name is
|
|
34
|
+
* a `greenRoom` link segment (the app renders it plain when signed out); "one
|
|
35
|
+
* day" always links to `futurePlans`; `tail` is the character-specific close. */
|
|
36
|
+
const dockFooter = (name, tail) => [
|
|
37
|
+
{ kind: 'link', label: name, target: 'greenRoom' },
|
|
38
|
+
{ kind: 'text', text: ' is a basic version for now — ' },
|
|
39
|
+
{ kind: 'link', label: 'one day', target: 'futurePlans' },
|
|
40
|
+
{ kind: 'text', text: ` ${tail}` },
|
|
41
|
+
];
|
|
42
|
+
const SHARED_PERFORMANCES = [
|
|
43
|
+
{ id: 'bow', label: 'Bow', intent: 'bow', creditUid: null },
|
|
44
|
+
{ id: 'hop', label: 'Hop', intent: 'hop', creditUid: null },
|
|
45
|
+
{ id: 'wave', label: 'Wave', intent: 'wave', creditUid: null },
|
|
46
|
+
];
|
|
47
|
+
// The dock-footer close sentences, VERBATIM (the pre-Company Bill wording; Kit's
|
|
48
|
+
// from the settled spec). Curly apostrophes authored exactly as rendered.
|
|
49
|
+
const BILL_FOOTER_TAIL = 'we hope to make him an AI-powered guide who helps you navigate the site. He’ll never make content, just help.';
|
|
50
|
+
const KIT_FOOTER_TAIL = 'we hope to make him an AI-powered guide with this exact attitude. He’ll never make content. He does have opinions about yours.';
|
|
51
|
+
// ── Bill the Understudy — Founding Player ────────────────────────────────────
|
|
52
|
+
// The 14 approved lines are VERBATIM (incl. the italic emphasis in line 11).
|
|
53
|
+
const BILL = {
|
|
54
|
+
id: 'bill',
|
|
55
|
+
name: 'Bill the Understudy',
|
|
56
|
+
title: 'The Understudy',
|
|
57
|
+
billingKind: 'foundingPlayer',
|
|
58
|
+
billingLabel: 'Founding Player',
|
|
59
|
+
shortBio: "TTT's founding player and your first guide.",
|
|
60
|
+
characterStudy: [
|
|
61
|
+
{
|
|
62
|
+
kind: 'paragraph',
|
|
63
|
+
segments: textRun('The most enthusiastic understudy in show business, and TTT Productions’ founding player. Bill has read the whole script of this town — well, skimmed it — and rehearses every day for the role of your guide to everything here. He insists the ‘Bill’ is short for William, and that he once wrote plays in a town called Stratford. We have chosen to let him believe it. Someday he’ll answer anything you ask about this place. Today, he mostly waves.'),
|
|
64
|
+
},
|
|
65
|
+
],
|
|
66
|
+
originatedByUid: null,
|
|
67
|
+
originatedByFallback: 'To be determined',
|
|
68
|
+
invitesOrigination: true,
|
|
69
|
+
choreographyCaption: 'Choreography by — to be determined',
|
|
70
|
+
performances: SHARED_PERFORMANCES,
|
|
71
|
+
lines: [
|
|
72
|
+
textRun("One day I'll help you find your perfect collaborator. Today, I mostly wave."),
|
|
73
|
+
textRun("I'm just an understudy for now — but someday I'll know every corner of this town."),
|
|
74
|
+
textRun('Rehearsing my big role: your guide to everything TTT. No spoilers.'),
|
|
75
|
+
textRun("They say one day I'll have real personalities. Plural. I'm excited too."),
|
|
76
|
+
textRun("I'll never make the art — that's your job. I'll just help you find your people."),
|
|
77
|
+
textRun("Every great production starts with somebody standing in the wings. That's me. Literally."),
|
|
78
|
+
textRun("Someday you'll ask me anything about this place and I'll actually answer. Bold, I know."),
|
|
79
|
+
textRun('The Town Crier gets to shout. I get to practice my bow. For now.'),
|
|
80
|
+
textRun("I've read the whole script of this town. Well... skimmed. I'm working on it."),
|
|
81
|
+
textRun('Big dreams for a stick figure: guide, helper, friend. In that order.'),
|
|
82
|
+
[
|
|
83
|
+
{ kind: 'text', text: "When the curtain rises on my real role, you'll be the first to know. You " },
|
|
84
|
+
{ kind: 'emphasis', text: 'did' },
|
|
85
|
+
{ kind: 'text', text: ' click me first.' },
|
|
86
|
+
],
|
|
87
|
+
textRun('Until my big debut, consider me the most enthusiastic understudy in show business.'),
|
|
88
|
+
textRun("Even the greatest playwright who ever lived starts over as an understudy in a town this good. That's my story, anyway."),
|
|
89
|
+
textRun('Four hundred years of theatre experience. My résumé? A drawing of myself.'),
|
|
90
|
+
],
|
|
91
|
+
footer: dockFooter('Bill', BILL_FOOTER_TAIL),
|
|
92
|
+
selectable: true,
|
|
93
|
+
};
|
|
94
|
+
// ── Kit the Stand-In — permanent Player #2, Bill's rival ─────────────────────
|
|
95
|
+
const KIT = {
|
|
96
|
+
id: 'kit',
|
|
97
|
+
name: 'Kit the Stand-In',
|
|
98
|
+
title: 'The Stand-In',
|
|
99
|
+
billingKind: 'player',
|
|
100
|
+
billingLabel: 'Player',
|
|
101
|
+
shortBio: "Permanent Player #2, and Bill's rival.",
|
|
102
|
+
characterStudy: [
|
|
103
|
+
{
|
|
104
|
+
kind: 'paragraph',
|
|
105
|
+
segments: textRun('Sharp, quick, and absolutely certain he should have gone first. Kit auditioned for founding mascot, delivered the finest monologue the empty theatre had ever heard, and lost the part to a stick figure with a “trustworthy wave.” He has been gracious about it every single day since — loudly, to anyone in range. Keeps the rejection letter framed. Ask him about it. He’s dying for you to ask.'),
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
kind: 'aside',
|
|
109
|
+
segments: textRun('Loosely nodding to a certain rival playwright — brilliant, theatrical, gone too soon. One day, an AI-powered guide with this exact personality: genuinely helpful, faintly insulted by the request.'),
|
|
110
|
+
},
|
|
111
|
+
],
|
|
112
|
+
originatedByUid: null,
|
|
113
|
+
originatedByFallback: 'To be determined',
|
|
114
|
+
invitesOrigination: true,
|
|
115
|
+
choreographyCaption: 'Choreography by — to be determined',
|
|
116
|
+
performances: SHARED_PERFORMANCES,
|
|
117
|
+
lines: [
|
|
118
|
+
textRun("Yes, I'm the Stand-In. Permanently. The irony isn't lost on me — it lives with me now."),
|
|
119
|
+
textRun("I was FIRST in line at the founding audition. They went with a stick figure who 'waves well.'"),
|
|
120
|
+
textRun("Bill rehearses roles nobody wrote. I've already memorized them. We are not the same."),
|
|
121
|
+
textRun("One day this whole town will know my name. Today it's 'the other one.' Fine."),
|
|
122
|
+
textRun("I don't do warm-ups. I arrive brilliant."),
|
|
123
|
+
textRun('Founding mascot. FOUNDING. He waved at a login page and they gave him a title.'),
|
|
124
|
+
textRun('My five-year plan is center stage. My five-century plan is also center stage.'),
|
|
125
|
+
textRun('History remembers a playwright who died before his rival got famous. Anyway. No reason.'),
|
|
126
|
+
textRun('Click Bill for encouragement. Click me to hear the truth, beautifully delivered.'),
|
|
127
|
+
textRun('I keep my rejection letter framed. Motivation is motivation.'),
|
|
128
|
+
textRun("You clicked me first today. I rehearsed being gracious about this — give me a moment."),
|
|
129
|
+
textRun("When the curtain finally rises on my lead role, act surprised. I won't."),
|
|
130
|
+
textRun('They say I might have been a spy in a past life. I neither confirm nor deny. Mystique.'),
|
|
131
|
+
textRun('The Understudy and the Stand-In on one stage. Somewhere a playwright is laughing at us both.'),
|
|
132
|
+
],
|
|
133
|
+
footer: dockFooter('Kit', KIT_FOOTER_TAIL),
|
|
134
|
+
selectable: true,
|
|
135
|
+
};
|
|
136
|
+
// ── Yorick the Forgettable — Stand-In · Limited Engagement ───────────────────
|
|
137
|
+
// Never selectable, never the dock companion; his lines are on-stage only.
|
|
138
|
+
const YORICK = {
|
|
139
|
+
id: 'yorick',
|
|
140
|
+
name: 'Yorick the Forgettable',
|
|
141
|
+
title: 'The Forgettable',
|
|
142
|
+
billingKind: 'standIn',
|
|
143
|
+
billingLabel: 'Stand-In · Limited Engagement',
|
|
144
|
+
shortBio: 'A Limited Engagement Stand-In, keeping the light warm.',
|
|
145
|
+
characterStudy: [
|
|
146
|
+
{
|
|
147
|
+
kind: 'paragraph',
|
|
148
|
+
segments: textRun("A fellow of infinite jest, reduced to holding a light he isn't allowed to stand in. Yorick insists he was the funniest jester who ever lived — and unfortunately, everyone who could confirm it is unavailable for comment. He is keeping the stage warm until the role is properly cast, and he'd rather you didn't get attached. You'll forget him anyway. Everyone does. It's in the name."),
|
|
149
|
+
},
|
|
150
|
+
],
|
|
151
|
+
originatedByUid: null,
|
|
152
|
+
originatedByFallback: 'no one will admit to it',
|
|
153
|
+
invitesOrigination: false,
|
|
154
|
+
choreographyCaption: 'Bow · Hop · Wave — borrowed from Bill, who says he can have them',
|
|
155
|
+
performances: SHARED_PERFORMANCES,
|
|
156
|
+
lines: [
|
|
157
|
+
textRun("Oh! A visitor. Nobody visits the Wings. I'd know — I keep the guestbook. It's empty."),
|
|
158
|
+
textRun("I used to kill at court, you know. Standing ovations. Kings weeping. ...You'll take my word for it."),
|
|
159
|
+
textRun("Don't get attached. I'm told I'm temporary. The skull agrees."),
|
|
160
|
+
textRun('Alas, poor me. I knew me well.'),
|
|
161
|
+
textRun('Infinite jest, they said. INFINITE. And yet here I am, finite-ly employed.'),
|
|
162
|
+
textRun("One day they'll cast this role properly and I'll be forgotten. Ahead of schedule, honestly."),
|
|
163
|
+
],
|
|
164
|
+
selectable: false,
|
|
165
|
+
};
|
|
166
|
+
export const COMPANY_MASCOTS = {
|
|
167
|
+
bill: BILL,
|
|
168
|
+
kit: KIT,
|
|
169
|
+
yorick: YORICK,
|
|
170
|
+
};
|
|
171
|
+
/** Registry order (Bill → Kit → Yorick), reused from the roster. */
|
|
172
|
+
export const COMPANY_MASCOT_ORDER = COMPANY_CHARACTER_IDS;
|
|
173
|
+
// ── Pure helpers ─────────────────────────────────────────────────────────────
|
|
174
|
+
/** True when `x` is a canonical Company character id. */
|
|
175
|
+
export function isCompanyCharacterId(x) {
|
|
176
|
+
return typeof x === 'string' && COMPANY_CHARACTER_IDS.includes(x);
|
|
177
|
+
}
|
|
178
|
+
/** True when `id` may be cast as the dock companion — driven by the mascot
|
|
179
|
+
* data's `selectable` field (Yorick is false). */
|
|
180
|
+
export function isSelectableCompanion(id) {
|
|
181
|
+
return COMPANY_MASCOTS[id].selectable;
|
|
182
|
+
}
|
|
183
|
+
/** The mascot record for a character id. */
|
|
184
|
+
export function getCompanyMascot(id) {
|
|
185
|
+
return COMPANY_MASCOTS[id];
|
|
186
|
+
}
|
|
187
|
+
// ── Companion-switch snark exchanges (VERBATIM) ──────────────────────────────
|
|
188
|
+
// Keyed by the character being switched TO. Outgoing line first (the departing
|
|
189
|
+
// companion), then the incoming retort.
|
|
190
|
+
export const COMPANION_SWITCH_EXCHANGES = {
|
|
191
|
+
// Switching TO Kit — Bill exits, Kit enters.
|
|
192
|
+
kit: [
|
|
193
|
+
{
|
|
194
|
+
outgoing: { id: 'bill', line: "Kit?! ...No, it's fine. It's fine. I'll be in the wings. Rehearsing. Alone." },
|
|
195
|
+
incoming: { id: 'kit', line: 'Finally. Someone with taste.' },
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
outgoing: { id: 'bill', line: 'Take care of them, Kit. They click gently.' },
|
|
199
|
+
incoming: { id: 'kit', line: 'I know how to be adored, Bill.' },
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
outgoing: { id: 'bill', line: 'The understudy yields the stage. Again.' },
|
|
203
|
+
incoming: { id: 'kit', line: 'And yet history will say I earned it. Because I did.' },
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
outgoing: { id: 'bill', line: "You'll come back. They always— they usually come back." },
|
|
207
|
+
incoming: { id: 'kit', line: "Don't wait up." },
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
outgoing: { id: 'bill', line: 'Break a leg, Kit.' },
|
|
211
|
+
incoming: { id: 'kit', line: 'I never break anything but hearts and attendance records.' },
|
|
212
|
+
},
|
|
213
|
+
],
|
|
214
|
+
// Switching TO Bill — Kit exits, Bill enters.
|
|
215
|
+
bill: [
|
|
216
|
+
{
|
|
217
|
+
outgoing: { id: 'kit', line: 'Unbelievable. UNBELIEVABLE.' },
|
|
218
|
+
incoming: { id: 'bill', line: "It's good to be back! ...He'll be alright." },
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
outgoing: { id: 'kit', line: "Enjoy the waving. That's all he does, you know." },
|
|
222
|
+
incoming: { id: 'bill', line: "I also bow now! I've been practicing." },
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
outgoing: { id: 'kit', line: 'I was BRILLIANT and you choose the stick figure with the cap.' },
|
|
226
|
+
incoming: { id: 'bill', line: "He means 'welcome back.' We're working on it." },
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
outgoing: { id: 'kit', line: 'Fine. FINE. The wings have better lighting anyway.' },
|
|
230
|
+
incoming: { id: 'bill', line: "They really don't. I'd know." },
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
outgoing: { id: 'kit', line: 'This is the founding audition all over again.' },
|
|
234
|
+
incoming: { id: 'bill', line: "You'll get the next one, Kit. ...Probably not. But maybe!" },
|
|
235
|
+
},
|
|
236
|
+
],
|
|
237
|
+
};
|
|
238
|
+
// ── Yorick block lines (VERBATIM) ────────────────────────────────────────────
|
|
239
|
+
// Spoken by the ACTIVE companion when the user presses Yorick's cast button.
|
|
240
|
+
export const YORICK_BLOCK_LINES = {
|
|
241
|
+
bill: [
|
|
242
|
+
"Soft you now — he's a Stand-In! He's only keeping the light warm. Thou art stuck with me. Nay — blessed with me.",
|
|
243
|
+
"Yorick?! He doesn't even know his blocking. Literally. He asks me where to stand.",
|
|
244
|
+
"You can't cast Yorick — he's on a Limited Engagement. Very limited. He leaves when the real role is cast.",
|
|
245
|
+
'Alas, poor choice — I knew him better than you do. Pick a Player.',
|
|
246
|
+
],
|
|
247
|
+
kit: [
|
|
248
|
+
'The skeleton crew? No. Absolutely not. You have TWO trained professionals right here.',
|
|
249
|
+
"He doesn't even know his blocking. I've watched him bow into the curtain. Twice.",
|
|
250
|
+
"Yorick's not staying. Don't get attached to the help.",
|
|
251
|
+
"You'd pass over ME for the temp? ...I need to sit down. On the couch he's not allowed on.",
|
|
252
|
+
],
|
|
253
|
+
};
|
|
254
|
+
// ── Signed-out dock lines (VERBATIM) ─────────────────────────────────────────
|
|
255
|
+
// Spoken by whichever Player is on the dock when NO user is signed in — the
|
|
256
|
+
// pre-login pitch.
|
|
257
|
+
export const SIGNED_OUT_DOCK_LINES = [
|
|
258
|
+
"The show's inside — and it's free. No ads, just an email.",
|
|
259
|
+
"I'd introduce you to the whole Company, but you'll need a ticket. Tickets are free.",
|
|
260
|
+
'Everything in this town is made by real people. Come see.',
|
|
261
|
+
];
|
|
262
|
+
// ── Onboarding cameo lines (VERBATIM) ────────────────────────────────────────
|
|
263
|
+
export const ONBOARDING_CAMEOS = {
|
|
264
|
+
kitAuditionStage: "The Audition Stage. Where stars are born. I was robbed here once — anyway, you'll love it.",
|
|
265
|
+
yorickHall: 'The Hall — every tale, tune, and show the town keeps. Four hundred years of my material, and not one shelf. Enjoy.',
|
|
266
|
+
curtainCall: {
|
|
267
|
+
bill: 'Break a leg out there.',
|
|
268
|
+
kit: 'Try not to embarrass us.',
|
|
269
|
+
yorick: "You'll forget me. It's fine. Go.",
|
|
270
|
+
},
|
|
271
|
+
};
|
|
272
|
+
//# sourceMappingURL=company-mascots.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"company-mascots.js","sourceRoot":"","sources":["../../src/constants/company-mascots.ts"],"names":[],"mappings":"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","sourcesContent":["// ============================================================================\n// THE COMPANY — canonical Green Room mascot contract + content (Rule 36).\n//\n// The ONE home for the pure, server-safe Company business truths (id unions,\n// billing kinds, performance intents, selectability, roster order) AND the\n// DJ-approved VERBATIM character content (studies, click lines, footers,\n// companion-switch exchanges, Yorick block lines, signed-out dock lines,\n// onboarding cameos). Moved here losslessly from the app's staging modules\n// (`src/lib/company-contract` + `src/lib/company-mascots.tsx`).\n//\n// This module is pure data: NO React, NO JSX, NO Next links, NO CSS, NO SVG,\n// NO functions inside the data. Rich copy is modelled as discriminated\n// `CompanyCopySegment`s so a web renderer, a phone app, or an AI voice can each\n// present the exact approved words without importing a UI framework. The app\n// owns the puppets, rig, choreography, and the adapter that turns these\n// segments into `<p>`, `<em>`, and route-aware links.\n//\n// Canonical dialogue stays a versioned code constant here (never Firestore):\n// it is the personality source, the safe AI-unavailable fallback, and the\n// voice-regression fixture. Never reword — curly quotes/apostrophes are\n// authored exactly as they render.\n// ============================================================================\n\n// ── Contract: id unions, billing, intents, selectability ─────────────────────\n\n/** Every member of the Company, in roster order. */\nexport type CompanyCharacterId = 'bill' | 'kit' | 'yorick';\n\n/** The roster, in billing order (Bill → Kit → Yorick). */\nexport const COMPANY_CHARACTER_IDS: readonly CompanyCharacterId[] = ['bill', 'kit', 'yorick'];\n\n/** Billing tiers: the founding Player, permanent Players, and Stand-Ins\n * (Limited Engagement — never selectable as the companion). */\nexport type CompanyBillingKind = 'foundingPlayer' | 'player' | 'standIn';\n\n/** Demoable move intents — keyed by intent from day one so future event\n * performances (page-grabs, standing ovations) land as content, not code. */\nexport type CompanyPerformanceIntent = 'bow' | 'hop' | 'wave';\n\n/** The performance intents, in demo-button order. The app previously\n * hand-mirrored this union in two places; consumers derive from this array. */\nexport const COMPANY_PERFORMANCE_INTENTS: readonly CompanyPerformanceIntent[] = ['bow', 'hop', 'wave'];\n\n/** The characters a user may cast as their dock companion (never a Stand-In). */\nexport type SelectableCompanionId = 'bill' | 'kit';\n\n/** The castable dock companions, in order. */\nexport const SELECTABLE_COMPANION_IDS: readonly SelectableCompanionId[] = ['bill', 'kit'];\n\n// ── Rich-copy pure-data model ────────────────────────────────────────────────\n\n/** Semantic destinations the copy can link to. Each client maps these to its\n * own route/navigation — the package never carries an href in mascot copy. */\nexport type CompanyNavigationTarget = 'greenRoom' | 'futurePlans';\n\n/** A single run of copy. `link` carries a semantic target, not a URL. */\nexport type CompanyCopySegment =\n | { readonly kind: 'text'; readonly text: string }\n | { readonly kind: 'emphasis'; readonly text: string }\n | { readonly kind: 'link'; readonly label: string; readonly target: CompanyNavigationTarget };\n\n/** A block of copy — a paragraph or a set-aside aside. */\nexport type CompanyCopyBlockKind = 'paragraph' | 'aside';\n\nexport interface CompanyCopyBlock {\n readonly kind: CompanyCopyBlockKind;\n readonly segments: readonly CompanyCopySegment[];\n}\n\n// ── Registry shapes ──────────────────────────────────────────────────────────\n\nexport interface CompanyPerformance {\n readonly id: string;\n readonly label: string;\n readonly intent: CompanyPerformanceIntent;\n /** Community \"Choreography by\" credit — null until an audition stages it. */\n readonly creditUid: string | null;\n}\n\nexport interface CompanyMascot {\n readonly id: CompanyCharacterId;\n /** Full stage name shown on nameplates + the playbill (\"Bill the Understudy\"). */\n readonly name: string;\n /** The ironic-understatement epithet (the Company tradition). */\n readonly title: string;\n readonly billingKind: CompanyBillingKind;\n /** Billing line rendered beside the name (\"Founding Player\"). */\n readonly billingLabel: string;\n /** One-line structural descriptor (not character voice). */\n readonly shortBio: string;\n /** Playbill character study (human-written; the future AI personality source). */\n readonly characterStudy: readonly CompanyCopyBlock[];\n /** \"Role originated by\" — resolves live via the app when set. */\n readonly originatedByUid: string | null;\n /** Text shown after \"Role originated by — \" when originatedByUid is null. */\n readonly originatedByFallback: string;\n /** Whether the origination frame invites the reader (\"→ your name here?\"). */\n readonly invitesOrigination: boolean;\n /** The performances credit caption under the demo buttons. */\n readonly choreographyCaption: string;\n readonly performances: readonly CompanyPerformance[];\n /** Rotating click lines (dock companion bubble + on-stage line pop). Each\n * line is a segment run — most are a single text segment. */\n readonly lines: readonly (readonly CompanyCopySegment[])[];\n /** Dock speech-bubble footer segments. The character's short name is a\n * `greenRoom` link segment; the app renders it as a link when signed in and\n * as plain text when signed out. \"one day\" always links to `futurePlans`.\n * Absent for Stand-Ins (Yorick — never the dock companion). */\n readonly footer?: readonly CompanyCopySegment[];\n /** False for Stand-Ins (Yorick) — never storable as the dock companion. */\n readonly selectable: boolean;\n}\n\n/** Companion-switch snark exchange, keyed (in COMPANION_SWITCH_EXCHANGES) by the\n * character switched TO. Outgoing line first (the departing companion), then the\n * incoming retort. Plain strings. */\nexport interface CompanionSwitchExchange {\n readonly outgoing: { readonly id: SelectableCompanionId; readonly line: string };\n readonly incoming: { readonly id: SelectableCompanionId; readonly line: string };\n}\n\n/** Onboarding cameo lines — Company members crashing the registration tour. */\nexport interface OnboardingCameos {\n /** Kit crashes The Audition Stage step. */\n readonly kitAuditionStage: string;\n /** Yorick cameos on The Hall step. */\n readonly yorickHall: string;\n /** The send-off curtain call — all three bow. */\n readonly curtainCall: Readonly<Record<CompanyCharacterId, string>>;\n}\n\n// ── Segment construction helpers (module-private; output is pure data) ────────\n\n/** A line/footer that is a single plain-text run. */\nconst textRun = (text: string): readonly CompanyCopySegment[] => [{ kind: 'text', text }];\n\n/** A character's dock footer, built from the one verbatim sentence. The name is\n * a `greenRoom` link segment (the app renders it plain when signed out); \"one\n * day\" always links to `futurePlans`; `tail` is the character-specific close. */\nconst dockFooter = (name: string, tail: string): readonly CompanyCopySegment[] => [\n { kind: 'link', label: name, target: 'greenRoom' },\n { kind: 'text', text: ' is a basic version for now — ' },\n { kind: 'link', label: 'one day', target: 'futurePlans' },\n { kind: 'text', text: ` ${tail}` },\n];\n\nconst SHARED_PERFORMANCES: readonly CompanyPerformance[] = [\n { id: 'bow', label: 'Bow', intent: 'bow', creditUid: null },\n { id: 'hop', label: 'Hop', intent: 'hop', creditUid: null },\n { id: 'wave', label: 'Wave', intent: 'wave', creditUid: null },\n];\n\n// The dock-footer close sentences, VERBATIM (the pre-Company Bill wording; Kit's\n// from the settled spec). Curly apostrophes authored exactly as rendered.\nconst BILL_FOOTER_TAIL =\n 'we hope to make him an AI-powered guide who helps you navigate the site. He’ll never make content, just help.';\nconst KIT_FOOTER_TAIL =\n 'we hope to make him an AI-powered guide with this exact attitude. He’ll never make content. He does have opinions about yours.';\n\n// ── Bill the Understudy — Founding Player ────────────────────────────────────\n// The 14 approved lines are VERBATIM (incl. the italic emphasis in line 11).\nconst BILL: CompanyMascot = {\n id: 'bill',\n name: 'Bill the Understudy',\n title: 'The Understudy',\n billingKind: 'foundingPlayer',\n billingLabel: 'Founding Player',\n shortBio: \"TTT's founding player and your first guide.\",\n characterStudy: [\n {\n kind: 'paragraph',\n segments: textRun(\n 'The most enthusiastic understudy in show business, and TTT Productions’ founding player. Bill has read the whole script of this town — well, skimmed it — and rehearses every day for the role of your guide to everything here. He insists the ‘Bill’ is short for William, and that he once wrote plays in a town called Stratford. We have chosen to let him believe it. Someday he’ll answer anything you ask about this place. Today, he mostly waves.',\n ),\n },\n ],\n originatedByUid: null,\n originatedByFallback: 'To be determined',\n invitesOrigination: true,\n choreographyCaption: 'Choreography by — to be determined',\n performances: SHARED_PERFORMANCES,\n lines: [\n textRun(\"One day I'll help you find your perfect collaborator. Today, I mostly wave.\"),\n textRun(\"I'm just an understudy for now — but someday I'll know every corner of this town.\"),\n textRun('Rehearsing my big role: your guide to everything TTT. No spoilers.'),\n textRun(\"They say one day I'll have real personalities. Plural. I'm excited too.\"),\n textRun(\"I'll never make the art — that's your job. I'll just help you find your people.\"),\n textRun(\"Every great production starts with somebody standing in the wings. That's me. Literally.\"),\n textRun(\"Someday you'll ask me anything about this place and I'll actually answer. Bold, I know.\"),\n textRun('The Town Crier gets to shout. I get to practice my bow. For now.'),\n textRun(\"I've read the whole script of this town. Well... skimmed. I'm working on it.\"),\n textRun('Big dreams for a stick figure: guide, helper, friend. In that order.'),\n [\n { kind: 'text', text: \"When the curtain rises on my real role, you'll be the first to know. You \" },\n { kind: 'emphasis', text: 'did' },\n { kind: 'text', text: ' click me first.' },\n ],\n textRun('Until my big debut, consider me the most enthusiastic understudy in show business.'),\n textRun(\"Even the greatest playwright who ever lived starts over as an understudy in a town this good. That's my story, anyway.\"),\n textRun('Four hundred years of theatre experience. My résumé? A drawing of myself.'),\n ],\n footer: dockFooter('Bill', BILL_FOOTER_TAIL),\n selectable: true,\n};\n\n// ── Kit the Stand-In — permanent Player #2, Bill's rival ─────────────────────\nconst KIT: CompanyMascot = {\n id: 'kit',\n name: 'Kit the Stand-In',\n title: 'The Stand-In',\n billingKind: 'player',\n billingLabel: 'Player',\n shortBio: \"Permanent Player #2, and Bill's rival.\",\n characterStudy: [\n {\n kind: 'paragraph',\n segments: textRun(\n 'Sharp, quick, and absolutely certain he should have gone first. Kit auditioned for founding mascot, delivered the finest monologue the empty theatre had ever heard, and lost the part to a stick figure with a “trustworthy wave.” He has been gracious about it every single day since — loudly, to anyone in range. Keeps the rejection letter framed. Ask him about it. He’s dying for you to ask.',\n ),\n },\n {\n kind: 'aside',\n segments: textRun(\n 'Loosely nodding to a certain rival playwright — brilliant, theatrical, gone too soon. One day, an AI-powered guide with this exact personality: genuinely helpful, faintly insulted by the request.',\n ),\n },\n ],\n originatedByUid: null,\n originatedByFallback: 'To be determined',\n invitesOrigination: true,\n choreographyCaption: 'Choreography by — to be determined',\n performances: SHARED_PERFORMANCES,\n lines: [\n textRun(\"Yes, I'm the Stand-In. Permanently. The irony isn't lost on me — it lives with me now.\"),\n textRun(\"I was FIRST in line at the founding audition. They went with a stick figure who 'waves well.'\"),\n textRun(\"Bill rehearses roles nobody wrote. I've already memorized them. We are not the same.\"),\n textRun(\"One day this whole town will know my name. Today it's 'the other one.' Fine.\"),\n textRun(\"I don't do warm-ups. I arrive brilliant.\"),\n textRun('Founding mascot. FOUNDING. He waved at a login page and they gave him a title.'),\n textRun('My five-year plan is center stage. My five-century plan is also center stage.'),\n textRun('History remembers a playwright who died before his rival got famous. Anyway. No reason.'),\n textRun('Click Bill for encouragement. Click me to hear the truth, beautifully delivered.'),\n textRun('I keep my rejection letter framed. Motivation is motivation.'),\n textRun(\"You clicked me first today. I rehearsed being gracious about this — give me a moment.\"),\n textRun(\"When the curtain finally rises on my lead role, act surprised. I won't.\"),\n textRun('They say I might have been a spy in a past life. I neither confirm nor deny. Mystique.'),\n textRun('The Understudy and the Stand-In on one stage. Somewhere a playwright is laughing at us both.'),\n ],\n footer: dockFooter('Kit', KIT_FOOTER_TAIL),\n selectable: true,\n};\n\n// ── Yorick the Forgettable — Stand-In · Limited Engagement ───────────────────\n// Never selectable, never the dock companion; his lines are on-stage only.\nconst YORICK: CompanyMascot = {\n id: 'yorick',\n name: 'Yorick the Forgettable',\n title: 'The Forgettable',\n billingKind: 'standIn',\n billingLabel: 'Stand-In · Limited Engagement',\n shortBio: 'A Limited Engagement Stand-In, keeping the light warm.',\n characterStudy: [\n {\n kind: 'paragraph',\n segments: textRun(\n \"A fellow of infinite jest, reduced to holding a light he isn't allowed to stand in. Yorick insists he was the funniest jester who ever lived — and unfortunately, everyone who could confirm it is unavailable for comment. He is keeping the stage warm until the role is properly cast, and he'd rather you didn't get attached. You'll forget him anyway. Everyone does. It's in the name.\",\n ),\n },\n ],\n originatedByUid: null,\n originatedByFallback: 'no one will admit to it',\n invitesOrigination: false,\n choreographyCaption: 'Bow · Hop · Wave — borrowed from Bill, who says he can have them',\n performances: SHARED_PERFORMANCES,\n lines: [\n textRun(\"Oh! A visitor. Nobody visits the Wings. I'd know — I keep the guestbook. It's empty.\"),\n textRun(\"I used to kill at court, you know. Standing ovations. Kings weeping. ...You'll take my word for it.\"),\n textRun(\"Don't get attached. I'm told I'm temporary. The skull agrees.\"),\n textRun('Alas, poor me. I knew me well.'),\n textRun('Infinite jest, they said. INFINITE. And yet here I am, finite-ly employed.'),\n textRun(\"One day they'll cast this role properly and I'll be forgotten. Ahead of schedule, honestly.\"),\n ],\n selectable: false,\n};\n\nexport const COMPANY_MASCOTS: Readonly<Record<CompanyCharacterId, CompanyMascot>> = {\n bill: BILL,\n kit: KIT,\n yorick: YORICK,\n};\n\n/** Registry order (Bill → Kit → Yorick), reused from the roster. */\nexport const COMPANY_MASCOT_ORDER: readonly CompanyCharacterId[] = COMPANY_CHARACTER_IDS;\n\n// ── Pure helpers ─────────────────────────────────────────────────────────────\n\n/** True when `x` is a canonical Company character id. */\nexport function isCompanyCharacterId(x: unknown): x is CompanyCharacterId {\n return typeof x === 'string' && (COMPANY_CHARACTER_IDS as readonly string[]).includes(x);\n}\n\n/** True when `id` may be cast as the dock companion — driven by the mascot\n * data's `selectable` field (Yorick is false). */\nexport function isSelectableCompanion(id: CompanyCharacterId): id is SelectableCompanionId {\n return COMPANY_MASCOTS[id].selectable;\n}\n\n/** The mascot record for a character id. */\nexport function getCompanyMascot(id: CompanyCharacterId): CompanyMascot {\n return COMPANY_MASCOTS[id];\n}\n\n// ── Companion-switch snark exchanges (VERBATIM) ──────────────────────────────\n// Keyed by the character being switched TO. Outgoing line first (the departing\n// companion), then the incoming retort.\nexport const COMPANION_SWITCH_EXCHANGES: Readonly<\n Record<SelectableCompanionId, readonly CompanionSwitchExchange[]>\n> = {\n // Switching TO Kit — Bill exits, Kit enters.\n kit: [\n {\n outgoing: { id: 'bill', line: \"Kit?! ...No, it's fine. It's fine. I'll be in the wings. Rehearsing. Alone.\" },\n incoming: { id: 'kit', line: 'Finally. Someone with taste.' },\n },\n {\n outgoing: { id: 'bill', line: 'Take care of them, Kit. They click gently.' },\n incoming: { id: 'kit', line: 'I know how to be adored, Bill.' },\n },\n {\n outgoing: { id: 'bill', line: 'The understudy yields the stage. Again.' },\n incoming: { id: 'kit', line: 'And yet history will say I earned it. Because I did.' },\n },\n {\n outgoing: { id: 'bill', line: \"You'll come back. They always— they usually come back.\" },\n incoming: { id: 'kit', line: \"Don't wait up.\" },\n },\n {\n outgoing: { id: 'bill', line: 'Break a leg, Kit.' },\n incoming: { id: 'kit', line: 'I never break anything but hearts and attendance records.' },\n },\n ],\n // Switching TO Bill — Kit exits, Bill enters.\n bill: [\n {\n outgoing: { id: 'kit', line: 'Unbelievable. UNBELIEVABLE.' },\n incoming: { id: 'bill', line: \"It's good to be back! ...He'll be alright.\" },\n },\n {\n outgoing: { id: 'kit', line: \"Enjoy the waving. That's all he does, you know.\" },\n incoming: { id: 'bill', line: \"I also bow now! I've been practicing.\" },\n },\n {\n outgoing: { id: 'kit', line: 'I was BRILLIANT and you choose the stick figure with the cap.' },\n incoming: { id: 'bill', line: \"He means 'welcome back.' We're working on it.\" },\n },\n {\n outgoing: { id: 'kit', line: 'Fine. FINE. The wings have better lighting anyway.' },\n incoming: { id: 'bill', line: \"They really don't. I'd know.\" },\n },\n {\n outgoing: { id: 'kit', line: 'This is the founding audition all over again.' },\n incoming: { id: 'bill', line: \"You'll get the next one, Kit. ...Probably not. But maybe!\" },\n },\n ],\n};\n\n// ── Yorick block lines (VERBATIM) ────────────────────────────────────────────\n// Spoken by the ACTIVE companion when the user presses Yorick's cast button.\nexport const YORICK_BLOCK_LINES: Readonly<Record<SelectableCompanionId, readonly string[]>> = {\n bill: [\n \"Soft you now — he's a Stand-In! He's only keeping the light warm. Thou art stuck with me. Nay — blessed with me.\",\n \"Yorick?! He doesn't even know his blocking. Literally. He asks me where to stand.\",\n \"You can't cast Yorick — he's on a Limited Engagement. Very limited. He leaves when the real role is cast.\",\n 'Alas, poor choice — I knew him better than you do. Pick a Player.',\n ],\n kit: [\n 'The skeleton crew? No. Absolutely not. You have TWO trained professionals right here.',\n \"He doesn't even know his blocking. I've watched him bow into the curtain. Twice.\",\n \"Yorick's not staying. Don't get attached to the help.\",\n \"You'd pass over ME for the temp? ...I need to sit down. On the couch he's not allowed on.\",\n ],\n};\n\n// ── Signed-out dock lines (VERBATIM) ─────────────────────────────────────────\n// Spoken by whichever Player is on the dock when NO user is signed in — the\n// pre-login pitch.\nexport const SIGNED_OUT_DOCK_LINES: readonly string[] = [\n \"The show's inside — and it's free. No ads, just an email.\",\n \"I'd introduce you to the whole Company, but you'll need a ticket. Tickets are free.\",\n 'Everything in this town is made by real people. Come see.',\n];\n\n// ── Onboarding cameo lines (VERBATIM) ────────────────────────────────────────\nexport const ONBOARDING_CAMEOS: OnboardingCameos = {\n kitAuditionStage:\n \"The Audition Stage. Where stars are born. I was robbed here once — anyway, you'll love it.\",\n yorickHall:\n 'The Hall — every tale, tune, and show the town keeps. Four hundred years of my material, and not one shelf. Enjoy.',\n curtainCall: {\n bill: 'Break a leg out there.',\n kit: 'Try not to embarrass us.',\n yorick: \"You'll forget me. It's fine. Go.\",\n },\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"craft-skill-statements.js","sourceRoot":"","sources":["../../src/constants/craft-skill-statements.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,0EAA0E;AAC1E,+EAA+E;AAC/E,6EAA6E;AAC7E,+DAA+D;AAC/D,+DAA+D;AAC/D,yEAAyE;AACzE,+EAA+E;AAC/E,sEAAsE;AACtE,kEAAkE;AAClE,iCAAiC;AACjC,+EAA+E;AAI/E;kEACkE;AAClE,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAC;AAE/C,MAAM,CAAC,MAAM,uBAAuB,GAAmC;IACrE,QAAQ,EAAE,aAAa;IACvB,UAAU,EAAE,oCAAoC;IAChD,WAAW,EAAE,4CAA4C;CAC1D,CAAC;AAEF,kEAAkE;AAClE,MAAM,CAAC,MAAM,6BAA6B,GAAmC;IAC3E,QAAQ,EAAE,sCAAsC;IAChD,UAAU,EAAE,gFAAgF;IAC5F,WAAW,EAAE,iFAAiF;CAC/F,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAmC;IACpE,QAAQ,EACN,qJAAqJ;IACvJ,UAAU,EACR,oRAAoR;IACtR,WAAW,EACT,iYAAiY;CACpY,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAqB,CAAC,UAAU,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"craft-skill-statements.js","sourceRoot":"","sources":["../../src/constants/craft-skill-statements.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,0EAA0E;AAC1E,+EAA+E;AAC/E,6EAA6E;AAC7E,+DAA+D;AAC/D,+DAA+D;AAC/D,yEAAyE;AACzE,+EAA+E;AAC/E,sEAAsE;AACtE,kEAAkE;AAClE,iCAAiC;AACjC,+EAA+E;AAI/E;kEACkE;AAClE,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAC;AAE/C,MAAM,CAAC,MAAM,uBAAuB,GAAmC;IACrE,QAAQ,EAAE,aAAa;IACvB,UAAU,EAAE,oCAAoC;IAChD,WAAW,EAAE,4CAA4C;CAC1D,CAAC;AAEF,kEAAkE;AAClE,MAAM,CAAC,MAAM,6BAA6B,GAAmC;IAC3E,QAAQ,EAAE,sCAAsC;IAChD,UAAU,EAAE,gFAAgF;IAC5F,WAAW,EAAE,iFAAiF;CAC/F,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAmC;IACpE,QAAQ,EACN,qJAAqJ;IACvJ,UAAU,EACR,oRAAoR;IACtR,WAAW,EACT,iYAAiY;CACpY,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAqB,CAAC,UAAU,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC","sourcesContent":["// ============================================================================\n// CRAFT-SKILL ATTESTATION — the ONE home for the three-kind upload flow's\n// statement version, VERBATIM agreement statements (v1, wording agreed with DJ\n// 2026-07-04), kind labels/descriptions, and picker order. Consolidated here\n// 2026-07-13 from the former \"keep identical\" pair in ttt-prod\n// `src/lib/craft-skill-statements.ts` (live frontend copy) and\n// `functions/src/craft-skills/craftSkillUploadContract.ts` (dead backend\n// mirror). The client displays these and the user must explicitly agree before\n// the file picker unlocks; the backend records only `{ statementKind,\n// statementVersion, agreedAt }` and validates the version against\n// CRAFT_SKILL_STATEMENT_VERSION.\n// ============================================================================\n\nimport type { CraftSkillKind } from '../doc-schemas/user.js';\n\n/** Bump when any VERBATIM statement below changes; the version is recorded on every\n * craft-skill doc so we know which wording the user agreed to. */\nexport const CRAFT_SKILL_STATEMENT_VERSION = 1;\n\nexport const CRAFT_SKILL_KIND_LABELS: Record<CraftSkillKind, string> = {\n original: 'My own work',\n mimicOnTtt: 'Mimicked work from TTT Productions',\n mimicOffTtt: 'Mimicked work from outside TTT Productions',\n};\n\n/** One-line helper shown under each kind option in the picker. */\nexport const CRAFT_SKILL_KIND_DESCRIPTIONS: Record<CraftSkillKind, string> = {\n original: 'Entirely your own original creation.',\n mimicOnTtt: 'Your performance or recreation of another member’s TTT work (link the source).',\n mimicOffTtt: 'A cover or recreation of work from outside TTT (including public-domain works).',\n};\n\nexport const CRAFT_SKILL_STATEMENTS: Record<CraftSkillKind, string> = {\n original:\n 'I certify this craft skill is entirely my own original creation and I own all rights to it. No part of it copies or imitates another person’s work.',\n mimicOnTtt:\n 'This craft skill is my performance or recreation of work created by a member of the TTT Productions community, shown here to demonstrate my abilities. I have linked the original artisan or work below. The original work belongs to its creator, and I claim no ownership of it.',\n mimicOffTtt:\n 'This craft skill is my performance or recreation of a work that did not originate on TTT Productions (including public-domain or out-of-copyright works), shown only to demonstrate my abilities. The underlying work belongs to its owner, and I claim no ownership of it. I understand TTT Productions may remove this content at any time, including in response to a rights-holder request.',\n};\n\nexport const CRAFT_SKILL_KIND_ORDER: CraftSkillKind[] = ['original', 'mimicOnTtt', 'mimicOffTtt'];\n"]}
|
|
@@ -13,4 +13,6 @@ export * from './release-flags.js';
|
|
|
13
13
|
export * from './retention.js';
|
|
14
14
|
export * from './scheduled-jobs.js';
|
|
15
15
|
export * from './storage-keys.js';
|
|
16
|
+
export * from './company-mascots.js';
|
|
17
|
+
export * from './center-stage-rooms.js';
|
|
16
18
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kCAAkC,CAAC;AACjD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kCAAkC,CAAC;AACjD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC"}
|
package/dist/constants/index.js
CHANGED
|
@@ -13,4 +13,6 @@ export * from './release-flags.js';
|
|
|
13
13
|
export * from './retention.js';
|
|
14
14
|
export * from './scheduled-jobs.js';
|
|
15
15
|
export * from './storage-keys.js';
|
|
16
|
+
export * from './company-mascots.js';
|
|
17
|
+
export * from './center-stage-rooms.js';
|
|
16
18
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kCAAkC,CAAC;AACjD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kCAAkC,CAAC;AACjD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC","sourcesContent":["export * from './app-mode.js';\nexport * from './business.js';\nexport * from './chat.js';\nexport * from './moderation.js';\nexport * from './options.js';\nexport * from './admin-labels.js';\nexport * from './craft-skill-statements.js';\nexport * from './publish-attestations.js';\nexport * from './safety-confirmation-phrases.js';\nexport * from './safety-telemetry-patterns.js';\nexport * from './pagination.js';\nexport * from './release-flags.js';\nexport * from './retention.js';\nexport * from './scheduled-jobs.js';\nexport * from './storage-keys.js';\nexport * from './company-mascots.js';\nexport * from './center-stage-rooms.js';\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"moderation.js","sourceRoot":"","sources":["../../src/constants/moderation.ts"],"names":[],"mappings":"AAAA,mEAAmE;AAEnE,gFAAgF;AAChF,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC;AAExE,8EAA8E;AAC9E,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC;AAE5C;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,yCAAyC,GAAG,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"moderation.js","sourceRoot":"","sources":["../../src/constants/moderation.ts"],"names":[],"mappings":"AAAA,mEAAmE;AAEnE,gFAAgF;AAChF,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC;AAExE,8EAA8E;AAC9E,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC;AAE5C;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,yCAAyC,GAAG,uBAAuB,CAAC","sourcesContent":["// Content moderation constants shared between frontend and backend\n\n/** Cloud Vision SafeSearch likelihood values that trigger content rejection. */\nexport const REJECTION_LIKELIHOODS = new Set(['LIKELY', 'VERY_LIKELY']);\n\n/** Minimum character length for text to be sent to the moderation service. */\nexport const TEXT_MODERATION_MIN_LENGTH = 3;\n\n/**\n * `pendingMedia.moderationOverride` value set ONLY by the appeal-review backend\n * (`reviewContentAppeal`, decision `approved`) when re-queuing rejected media.\n * A human admin approving an appeal is an override of the automated Vision/VI\n * adult-content judgment — the pipeline must NOT re-run that classifier (it\n * would re-reject and silently defeat the approval). Scope of the bypass is the\n * Vision/VI adult-content check ONLY; PhotoDNA/CSAM scanning is orthogonal and\n * is never skipped. The field is server-set: `pendingMedia` is callable-only in\n * firestore.rules and `startUpload` never writes it.\n */\nexport const MODERATION_OVERRIDE_ADMIN_APPEAL_APPROVED = 'admin-appeal-approved';\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/constants/options.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/constants/options.ts"],"names":[],"mappings":"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","sourcesContent":["// UI option lists shared between frontend and backend admin tooling.\n\nimport type { HallWingType, WorkProjectType } from '../types/content.js';\n\n// --- WorkProject Guild Standings ---\n// WorkProject guild-standing IDs, labels, and assignment policy live in ../permissions/.\n// Keep guild-standing picker UIs backed by GUILD_STANDINGS instead of a duplicated option map.\n\n// --- Trade & Craft Options ---\n\n/**\n * Trade professions (20) — role-shaped labels used for guild roles, commission\n * requests, and file-folder permission keys. Display strings are stored/validated\n * directly (they double as the enum values in the callable input schemas that derive\n * from this constant). Kept in curated order; not alphabetized.\n */\nexport const TRADE_PROFESSION_OPTIONS = [\n // Performance\n 'Actor',\n 'Voice Actor',\n 'Singer',\n 'Musician',\n 'Dancer & Choreographer',\n // Story\n 'Writer',\n 'Editor',\n 'Director',\n 'Producer',\n // Camera & visual\n 'Cinematographer',\n 'Photographer',\n 'Animator',\n 'Artist',\n 'Graphic Designer',\n 'VFX Artist',\n 'Costume & Makeup Artist',\n 'Set & Prop Designer',\n // Audio\n 'Composer',\n 'Music Producer',\n 'Sound Designer',\n] as const;\n\n/**\n * Craft-skill discipline tags (23). Tags are Firestore doc IDs in the\n * `craftSkillsByTag/{tag}` index, so the STORED value is a machine-safe kebab-case ID\n * (`CRAFT_SKILL_TAG_OPTIONS`) — this is what the wire schema validates and what path\n * builders write. Human-readable labels (with spaces / ampersands) are mapped over the\n * IDs via `CRAFT_SKILL_TAG_LABELS`; render pickers/badges through that map. Kept in\n * curated discipline order (Performance → Writing → Visual → Film → Audio); not sorted.\n */\nexport const CRAFT_SKILL_TAG_OPTIONS = [\n // Performance\n 'acting',\n 'voice-over',\n 'singing',\n 'rapping',\n 'instrumental-performance',\n 'dance-choreography',\n 'stand-up-sketch-comedy',\n // Writing\n 'writing-storytelling',\n 'songwriting',\n 'poetry-spoken-word',\n // Visual arts\n 'drawing-illustration',\n 'painting',\n 'animation',\n 'graphic-design',\n 'photography',\n // Film & video\n 'cinematography-camera',\n 'video-editing',\n 'visual-effects',\n 'directing',\n 'costume-makeup',\n 'set-prop-design',\n // Audio\n 'music-production',\n 'composing-scoring',\n 'sound-design',\n] as const;\n\n/** The canonical tag-ID type — every tags field/param derives from this, never `string`. */\nexport type CraftSkillTagId = (typeof CRAFT_SKILL_TAG_OPTIONS)[number];\n\n/** The canonical trade-profession ID type. */\nexport type TradeProfessionId = (typeof TRADE_PROFESSION_OPTIONS)[number];\n\n/** TRADE_PROFESSION_OPTIONS as a non-empty tuple for `z.enum(...)` consumers — the ONE\n * cast, here beside the declaration (never re-cast locally in schema files). */\nexport const TRADE_PROFESSION_VALUES = TRADE_PROFESSION_OPTIONS as unknown as [\n TradeProfessionId,\n ...TradeProfessionId[],\n];\n\n/** The same allowlist as a non-empty tuple for `z.enum(...)` consumers — the ONE cast,\n * here beside the declaration (schema files import this, never re-cast locally). */\nexport const CRAFT_SKILL_TAG_VALUES = CRAFT_SKILL_TAG_OPTIONS as unknown as [\n CraftSkillTagId,\n ...CraftSkillTagId[],\n];\n\n/** Human display labels for each craft-skill tag ID. Keyed by the machine-safe ID. */\nexport const CRAFT_SKILL_TAG_LABELS: Record<(typeof CRAFT_SKILL_TAG_OPTIONS)[number], string> = {\n 'acting': 'Acting',\n 'voice-over': 'Voice Over',\n 'singing': 'Singing',\n 'rapping': 'Rapping',\n 'instrumental-performance': 'Instrumental Performance',\n 'dance-choreography': 'Dance & Choreography',\n 'stand-up-sketch-comedy': 'Stand-Up & Sketch Comedy',\n 'writing-storytelling': 'Writing & Storytelling',\n 'songwriting': 'Songwriting',\n 'poetry-spoken-word': 'Poetry & Spoken Word',\n 'drawing-illustration': 'Drawing & Illustration',\n 'painting': 'Painting',\n 'animation': 'Animation',\n 'graphic-design': 'Graphic Design',\n 'photography': 'Photography',\n 'cinematography-camera': 'Cinematography & Camera',\n 'video-editing': 'Video Editing',\n 'visual-effects': 'Visual Effects',\n 'directing': 'Directing',\n 'costume-makeup': 'Costume & Makeup',\n 'set-prop-design': 'Set & Prop Design',\n 'music-production': 'Music Production',\n 'composing-scoring': 'Composing & Scoring',\n 'sound-design': 'Sound Design',\n};\n\n// --- WorkProject-Specific Genres ---\n\n/**\n * Genres shown for each workProject type. Curated final lists (kept in the doc's order,\n * not alphabetized). \"Spooky\" (not \"Horror\") is deliberate for V1: the name carries the\n * all-ages ceiling; \"Horror\" is the natural mature sibling if mature content ever ships.\n */\nexport const WORK_PROJECT_SPECIFIC_GENRES = {\n Tales: [\n 'Adventure',\n 'Comedy',\n 'Drama',\n 'Fantasy',\n 'Fairy Tale & Fable',\n 'Historical',\n 'Mystery',\n 'Romance',\n 'Sci-Fi',\n 'Slice of Life',\n 'Spooky',\n 'Thriller',\n ],\n Tunes: [\n 'Audiobook & Spoken Word',\n 'Blues',\n 'Classical',\n 'Country',\n 'Electronic',\n 'Folk',\n 'Hip Hop & Rap',\n 'Jazz',\n 'Metal',\n 'Podcast',\n 'Pop',\n 'R&B & Soul',\n 'Reggae',\n 'Rock',\n 'Soundtrack & Score',\n ],\n Television: [\n 'Action',\n 'Animation',\n 'Comedy',\n 'Documentary',\n 'Drama',\n 'Fantasy',\n 'Kids & Family',\n 'Music Video',\n 'Mystery',\n 'Reality',\n 'Sci-Fi',\n 'Sketch & Variety',\n 'Spooky',\n 'Talk Show',\n 'Thriller',\n ],\n} as const;\n\n// --- HallLibrary / WorkProject Type Display Maps ---\n\n/** HallLibrary type display info. Used in dropdowns and badges. */\nexport const HALL_WING_TYPES: Record<HallWingType, { label: string; description: string }> = {\n entertainment: {\n label: 'Entertainment',\n description: 'Fun and engaging content',\n },\n educational: {\n label: 'Educational',\n description: 'Learning materials and resources',\n },\n newsPolitical: {\n label: 'News/Political',\n description: 'Current events and political content',\n },\n};\n\n/** WorkProject type display info. Used in dropdowns and headers. */\nexport const WORK_PROJECT_TYPES: Record<WorkProjectType, { label: string; description: string }> = {\n Tales: {\n label: 'Tales',\n description: 'Stories and narratives',\n },\n Tunes: {\n label: 'Tunes',\n description: 'Music and audio content',\n },\n Television: {\n label: 'Television',\n description: 'Video and TV content',\n },\n};\n\n// --- Sort Options ---\n\n/** Sort options shown on the audition feeds, keyed by feed type. */\nexport const AUDITION_SORT_OPTIONS = {\n default: {\n newest: { label: 'Newest First', field: 'createdOn', direction: 'desc' },\n endingSoon: { label: 'Ending Soon', field: 'openTill', direction: 'asc' },\n },\n platformAudition: {\n newest: { label: 'Newest First', field: 'createdOn', direction: 'desc' },\n endingSoon: { label: 'Ending Soon', field: 'openTill', direction: 'asc' },\n },\n sponsoredAudition: {\n newest: { label: 'Newest First', field: 'createdOn', direction: 'desc' },\n endingSoon: { label: 'Ending Soon', field: 'openTill', direction: 'asc' },\n highestPrice: { label: 'Highest Price', field: 'sponsoredAuditionAmountUSD', direction: 'desc' },\n lowestPrice: { label: 'Lowest Price', field: 'sponsoredAuditionAmountUSD', direction: 'asc' },\n },\n workAudition: {\n newest: { label: 'Newest First', field: 'createdOn', direction: 'desc' },\n endingSoon: { label: 'Ending Soon', field: 'openTill', direction: 'asc' },\n highestStakeShares: { label: 'Highest Stakes', field: 'stakeSharesOffered', direction: 'desc' },\n lowestStakeShares: { label: 'Lowest Stakes', field: 'stakeSharesOffered', direction: 'asc' },\n },\n} as const;\n\n/** Sort options shown on the hallLibrary feed. */\nexport const HALL_LIBRARY_SORT_OPTIONS: Record<\n string,\n { label: string; field: string; direction: 'asc' | 'desc' }\n> = {\n newest: { label: 'Newest First', field: 'createdOn', direction: 'desc' },\n oldest: { label: 'Oldest First', field: 'createdOn', direction: 'asc' },\n most_followed: { label: 'Most Followed', field: 'followerCount', direction: 'desc' },\n};\n\n\n\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../src/constants/pagination.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,0DAA0D;AAC1D,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC;AAExC,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC;AACzC,MAAM,CAAC,MAAM,sCAAsC,GAAG,CAAC,CAAC;AACxD,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,CAAC;AACjD,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,CAAC;AAChD,MAAM,CAAC,MAAM,4BAA4B,GAAG,EAAE,CAAC;AAC/C,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC,CAAC;AACpD,MAAM,CAAC,MAAM,uCAAuC,GAAG,CAAC,CAAC;AACzD,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC;AACzC,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC;AAC5C,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC,CAAC;AACpD,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,CAAC;AAClD,MAAM,CAAC,MAAM,6BAA6B,GAAG,EAAE,CAAC;AAChD,MAAM,CAAC,MAAM,qCAAqC,GAAG,EAAE,CAAC;AAExD,mCAAmC;AAEnC,mDAAmD;AACnD,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAE3C,yDAAyD;AACzD,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAEnC,wDAAwD;AACxD,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAEpC,0CAA0C;AAC1C,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AAEjC,qDAAqD;AACrD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAErC,gDAAgD;AAChD,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,CAAC;AAE7C,4GAA4G;AAC5G,MAAM,CAAC,MAAM,2BAA2B,GAAG,aAAa,CAAC,OAAO,CAAC,wBAAwB,CAAC;AAE1F,mCAAmC;AAEnC,uGAAuG;AACvG,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,cAAc,EAAE,EAAE;IAClB,gBAAgB,EAAE,EAAE;IACpB,iBAAiB,EAAE,EAAE;IACrB,kBAAkB,EAAE,GAAG;CACf,CAAC"}
|
|
1
|
+
{"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../src/constants/pagination.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,0DAA0D;AAC1D,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC;AAExC,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC;AACzC,MAAM,CAAC,MAAM,sCAAsC,GAAG,CAAC,CAAC;AACxD,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,CAAC;AACjD,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,CAAC;AAChD,MAAM,CAAC,MAAM,4BAA4B,GAAG,EAAE,CAAC;AAC/C,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC,CAAC;AACpD,MAAM,CAAC,MAAM,uCAAuC,GAAG,CAAC,CAAC;AACzD,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC;AACzC,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC;AAC5C,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC,CAAC;AACpD,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,CAAC;AAClD,MAAM,CAAC,MAAM,6BAA6B,GAAG,EAAE,CAAC;AAChD,MAAM,CAAC,MAAM,qCAAqC,GAAG,EAAE,CAAC;AAExD,mCAAmC;AAEnC,mDAAmD;AACnD,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAE3C,yDAAyD;AACzD,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAEnC,wDAAwD;AACxD,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAEpC,0CAA0C;AAC1C,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AAEjC,qDAAqD;AACrD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAErC,gDAAgD;AAChD,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,CAAC;AAE7C,4GAA4G;AAC5G,MAAM,CAAC,MAAM,2BAA2B,GAAG,aAAa,CAAC,OAAO,CAAC,wBAAwB,CAAC;AAE1F,mCAAmC;AAEnC,uGAAuG;AACvG,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,cAAc,EAAE,EAAE;IAClB,gBAAgB,EAAE,EAAE;IACpB,iBAAiB,EAAE,EAAE;IACrB,kBAAkB,EAAE,GAAG;CACf,CAAC","sourcesContent":["// Pagination page sizes and hallLibrary UX constants.\nimport { ACTIVE_LIMITS } from './app-mode.js';\n\n/** Default pagination size when no other size applies. */\nexport const ITEMS_PER_PAGE_GENERAL = 5;\n\nexport const ITEMS_PER_PAGE_MESSAGES = 5;\nexport const ITEMS_PER_PAGE_ADMIN_DISPATCH_MESSAGES = 6;\nexport const ITEMS_PER_PAGE_COMMISSION_BOARD = 5;\nexport const ITEMS_PER_PAGE_GUILDMATE_USERS = 3;\nexport const ITEMS_PER_PAGE_GUILD_INVITES = 10;\nexport const ITEMS_PER_PAGE_OWNED_WORK_PROJECTS = 3;\nexport const ITEMS_PER_PAGE_ASSOCIATED_WORK_PROJECTS = 3;\nexport const ITEMS_PER_PAGE_CHAPTERS = 5;\nexport const ITEMS_PER_PAGE_TUNE_TRACKS = 3;\nexport const ITEMS_PER_PAGE_TELEVISION_EPISODES = 3;\nexport const ITEMS_PER_PAGE_PROPOSAL_ARTISANS = 5;\nexport const ITEMS_PER_PAGE_FOLLOWED_USERS = 10;\nexport const ITEMS_PER_PAGE_ADMIN_DISPATCH_THREADS = 10;\n\n// --- Hook-specific page sizes ---\n\n/** Page size for the pledge-payments list hook. */\nexport const PLEDGE_PAYMENTS_PER_PAGE = 20;\n\n/** Page size for the pending-media archive list hook. */\nexport const ARCHIVE_PER_PAGE = 10;\n\n/** Page size for the workProject-channels list hook. */\nexport const CHANNELS_PER_PAGE = 10;\n\n/** Page size for the social feed hook. */\nexport const POSTS_PER_PAGE = 20;\n\n/** Page size for the content-violation list hook. */\nexport const VIOLATIONS_PER_PAGE = 5;\n\n/** Page size for the craft-skills list hook. */\nexport const CRAFT_SKILL_MEDIA_PER_PAGE = 12;\n\n/** Maximum number of recent posts the trending-feed scheduled commission processes per run. Mode-varied. */\nexport const TRENDING_FEED_PROCESS_LIMIT = ACTIVE_LIMITS.batches.trendingFeedProcessLimit;\n\n// --- HallLibrary UX constants ---\n\n/** HallLibrary page-level UX values (page size, recency window, search debounce, per-item tag cap). */\nexport const HALL_LIBRARY_PAGE_CONSTANTS = {\n ITEMS_PER_PAGE: 20,\n MAX_RECENT_VIEWS: 50,\n MAX_TAGS_PER_ITEM: 10,\n SEARCH_DEBOUNCE_MS: 300,\n} as const;\n\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish-attestations.js","sourceRoot":"","sources":["../../src/constants/publish-attestations.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,yEAAyE;AACzE,2EAA2E;AAC3E,wEAAwE;AACxE,6EAA6E;AAC7E,gDAAgD;AAChD,+EAA+E;AAI/E,MAAM,CAAC,MAAM,yBAAyB,GAAoC;IACxE,KAAK,EACH,yJAAyJ;IAC3J,KAAK,EACH,4IAA4I;IAC9I,UAAU,EACR,oJAAoJ;CACvJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"publish-attestations.js","sourceRoot":"","sources":["../../src/constants/publish-attestations.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,yEAAyE;AACzE,2EAA2E;AAC3E,wEAAwE;AACxE,6EAA6E;AAC7E,gDAAgD;AAChD,+EAA+E;AAI/E,MAAM,CAAC,MAAM,yBAAyB,GAAoC;IACxE,KAAK,EACH,yJAAyJ;IAC3J,KAAK,EACH,4IAA4I;IAC9I,UAAU,EACR,oJAAoJ;CACvJ,CAAC","sourcesContent":["// ============================================================================\n// HALL-PUBLISH ATTESTATION COPY — the ONE home for the consistent-format\n// attestation wording (Rule 36, extended 2026-07-13; consolidated from the\n// former component-local map in ttt-prod publish-attestations.tsx). The\n// attestation carries a Work-type-specific example using the Work's own unit\n// word; the publish flow always knows the type.\n// ============================================================================\n\nimport type { WorkProjectType } from '../types/content.js';\n\nexport const CONSISTENT_FORMAT_WORDING: Record<WorkProjectType, string> = {\n Tales:\n 'All items in this Work are the same kind of thing — a consistent format throughout. If chapter 1 is a short story, then all chapters are short stories.',\n Tunes:\n 'All items in this Work are the same kind of thing — a consistent format throughout. If track 1 is a podcast, then all tracks are podcasts.',\n Television:\n 'All items in this Work are the same kind of thing — a consistent format throughout. If episode 1 is a clip show, then all episodes are clip shows.',\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"release-flags.js","sourceRoot":"","sources":["../../src/constants/release-flags.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,wEAAwE;AACxE,6EAA6E;AAC7E,6DAA6D;AAC7D,6EAA6E;AAC7E,gEAAgE;AAChE,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,4EAA4E;AAC5E,4EAA4E;AAE5E,wEAAwE;AACxE,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC;AAExC,iFAAiF;AACjF,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC;AAE1C,gDAAgD;AAChD,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC;AAE1C,iDAAiD;AACjD,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC;AAE1C,8DAA8D;AAC9D,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC;AAE1C;gFACgF;AAChF,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,CAAC"}
|
|
1
|
+
{"version":3,"file":"release-flags.js","sourceRoot":"","sources":["../../src/constants/release-flags.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,wEAAwE;AACxE,6EAA6E;AAC7E,6DAA6D;AAC7D,6EAA6E;AAC7E,gEAAgE;AAChE,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,4EAA4E;AAC5E,4EAA4E;AAE5E,wEAAwE;AACxE,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC;AAExC,iFAAiF;AACjF,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC;AAE1C,gDAAgD;AAChD,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC;AAE1C,iDAAiD;AACjD,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC;AAE1C,8DAA8D;AAC9D,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC;AAE1C;gFACgF;AAChF,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,CAAC","sourcesContent":["// Charter-season release flags — one boolean per flip deliverable, default\n// false. Flipped ONLY in code: change the constant → publish ttt-core →\n// install (root + functions) → deploy IS the release, exactly like APP_MODE.\n// Never a console toggle. Server-side gating in callables is\n// `flag || caller is admin` so admins can live-test a hidden feature in prod\n// before its release moment; UI hiding alone is never the gate.\n//\n// The admin Ready-for-Launch tab renders a READ-ONLY panel of these values,\n// and the public phase page renders live/coming per deliverable from the same\n// constants — the flags that gate the features ARE the display data source,\n// so neither surface can drift. See ttt-prod docs/charter-season/README.md.\n\n/** Theme Studio save & share (docs/charter-season/theme-sharing.md). */\nexport const THEME_SHARING_LIVE = false;\n\n/** Bouquet stage 1 — buy, give, see (docs/charter-season/bouquet-staging.md). */\nexport const BOUQUET_STAGE_1_LIVE = false;\n\n/** Bouquet stage 2 — artisan earnings views. */\nexport const BOUQUET_STAGE_2_LIVE = false;\n\n/** Bouquet stage 3 — payouts (counsel-gated). */\nexport const BOUQUET_STAGE_3_LIVE = false;\n\n/** Bouquet stage 4 — Garden + Greenhouse display surfaces. */\nexport const BOUQUET_STAGE_4_LIVE = false;\n\n/** Bill the Understudy's flip upgrade (new lines / visual refresh). Display-only\n * flag — nothing server-side to gate; exists so the phase page stays honest. */\nexport const BILL_UPGRADE_LIVE = false;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retention.js","sourceRoot":"","sources":["../../src/constants/retention.ts"],"names":[],"mappings":"AAAA,sDAAsD;AAEtD,oCAAoC;AAEpC,gEAAgE;AAChE,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC;AAErD,gCAAgC;AAEhC,oFAAoF;AACpF,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,CAAC;AAElD,oFAAoF;AACpF,MAAM,CAAC,MAAM,gCAAgC,GAAG,GAAG,CAAC;AAEpD,gCAAgC;AAEhC,uFAAuF;AACvF,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAE1C,+CAA+C;AAC/C,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,CAAC;AAE5C,4CAA4C;AAC5C,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAC;AAEjD,8CAA8C;AAE9C,4EAA4E;AAC5E,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEtD,yCAAyC;AAEzC,+DAA+D;AAC/D,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEzD,wDAAwD;AACxD,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC"}
|
|
1
|
+
{"version":3,"file":"retention.js","sourceRoot":"","sources":["../../src/constants/retention.ts"],"names":[],"mappings":"AAAA,sDAAsD;AAEtD,oCAAoC;AAEpC,gEAAgE;AAChE,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC;AAErD,gCAAgC;AAEhC,oFAAoF;AACpF,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,CAAC;AAElD,oFAAoF;AACpF,MAAM,CAAC,MAAM,gCAAgC,GAAG,GAAG,CAAC;AAEpD,gCAAgC;AAEhC,uFAAuF;AACvF,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAE1C,+CAA+C;AAC/C,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,CAAC;AAE5C,4CAA4C;AAC5C,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAC;AAEjD,8CAA8C;AAE9C,4EAA4E;AAC5E,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEtD,yCAAyC;AAEzC,+DAA+D;AAC/D,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEzD,wDAAwD;AACxD,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC","sourcesContent":["// Caching, retention, and cleanup TTLs / batch sizes.\n\n// --- Profanity word list cache ---\n\n/** TTL for the in-memory profanity word list cache (1 hour). */\nexport const WORD_LIST_CACHE_TTL_MS = 1000 * 60 * 60;\n\n// --- Pending media archive ---\n\n/** Days after which a terminal pendingMedia doc is moved to pendingMediaArchive. */\nexport const PENDING_MEDIA_ARCHIVE_AFTER_DAYS = 7;\n\n/** Per-run cap on docs archived by the archivePendingMedia scheduled commission. */\nexport const PENDING_MEDIA_ARCHIVE_BATCH_SIZE = 500;\n\n// --- Orphan upload cleanup ---\n\n/** TTL in hours after which an orphan storage upload becomes eligible for deletion. */\nexport const ORPHAN_UPLOAD_TTL_HOURS = 24;\n\n/** Per-run cap on orphan storage deletions. */\nexport const ORPHAN_UPLOAD_DELETE_CAP = 500;\n\n/** Page size for listing orphan uploads. */\nexport const ORPHAN_UPLOAD_LIST_PAGE_SIZE = 1000;\n\n// --- Frontend in-flight upload listeners ---\n\n/** Maximum lookback window for the in-flight upload listener (24 hours). */\nexport const LISTENER_WINDOW_MS = 24 * 60 * 60 * 1000;\n\n// --- Public users React Query cache ---\n\n/** Stale time for the publicUsers query cache (30 minutes). */\nexport const PUBLIC_USERS_STALE_TIME_MS = 30 * 60 * 1000;\n\n/** GC time for the publicUsers query cache (1 hour). */\nexport const PUBLIC_USERS_GC_TIME_MS = 60 * 60 * 1000;\n\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"safety-confirmation-phrases.js","sourceRoot":"","sources":["../../src/constants/safety-confirmation-phrases.ts"],"names":[],"mappings":"AAAA,sFAAsF;AACtF,uFAAuF;AACvF,0CAA0C;AAC1C,EAAE;AACF,0FAA0F;AAC1F,0FAA0F;AAC1F,sFAAsF;AACtF,0FAA0F;AAC1F,sFAAsF;AACtF,yFAAyF;AACzF,yFAAyF;AACzF,EAAE;AACF,0FAA0F;AAC1F,4EAA4E;AAE5E,uFAAuF;AACvF,MAAM,CAAC,MAAM,2BAA2B,GAAG,gCAAgC,CAAC;AAE5E,uEAAuE;AACvE,MAAM,CAAC,MAAM,+BAA+B,GAAG,sCAAsC,CAAC;AAEtF,yFAAyF;AACzF,MAAM,CAAC,MAAM,kCAAkC,GAAG,+BAA+B,CAAC;AAElF,8FAA8F;AAC9F,MAAM,CAAC,MAAM,iCAAiC,GAAG,4CAA4C,CAAC;AAE9F,6EAA6E;AAC7E,MAAM,CAAC,MAAM,sCAAsC,GACjD,6DAA6D,CAAC;AAEhE,oEAAoE;AACpE,MAAM,CAAC,MAAM,iCAAiC,GAAG,qDAAqD,CAAC;AAEvG,uFAAuF;AACvF,MAAM,CAAC,MAAM,oCAAoC,GAAG,kDAAkD,CAAC;AAEvG,2FAA2F;AAC3F,MAAM,CAAC,MAAM,kCAAkC,GAAG,+CAA+C,CAAC;AAElG,oFAAoF;AACpF,MAAM,CAAC,MAAM,wCAAwC,GAAG,4CAA4C,CAAC"}
|
|
1
|
+
{"version":3,"file":"safety-confirmation-phrases.js","sourceRoot":"","sources":["../../src/constants/safety-confirmation-phrases.ts"],"names":[],"mappings":"AAAA,sFAAsF;AACtF,uFAAuF;AACvF,0CAA0C;AAC1C,EAAE;AACF,0FAA0F;AAC1F,0FAA0F;AAC1F,sFAAsF;AACtF,0FAA0F;AAC1F,sFAAsF;AACtF,yFAAyF;AACzF,yFAAyF;AACzF,EAAE;AACF,0FAA0F;AAC1F,4EAA4E;AAE5E,uFAAuF;AACvF,MAAM,CAAC,MAAM,2BAA2B,GAAG,gCAAgC,CAAC;AAE5E,uEAAuE;AACvE,MAAM,CAAC,MAAM,+BAA+B,GAAG,sCAAsC,CAAC;AAEtF,yFAAyF;AACzF,MAAM,CAAC,MAAM,kCAAkC,GAAG,+BAA+B,CAAC;AAElF,8FAA8F;AAC9F,MAAM,CAAC,MAAM,iCAAiC,GAAG,4CAA4C,CAAC;AAE9F,6EAA6E;AAC7E,MAAM,CAAC,MAAM,sCAAsC,GACjD,6DAA6D,CAAC;AAEhE,oEAAoE;AACpE,MAAM,CAAC,MAAM,iCAAiC,GAAG,qDAAqD,CAAC;AAEvG,uFAAuF;AACvF,MAAM,CAAC,MAAM,oCAAoC,GAAG,kDAAkD,CAAC;AAEvG,2FAA2F;AAC3F,MAAM,CAAC,MAAM,kCAAkC,GAAG,+CAA+C,CAAC;AAElG,oFAAoF;AACpF,MAAM,CAAC,MAAM,wCAAwC,GAAG,4CAA4C,CAAC","sourcesContent":["// Trust & Safety typed-confirmation phrases — the interim explicit typed-confirmation\n// attestations that gate the highest-risk operator/admin safety callables (standing in\n// for the passkey two-step until [H-17]).\n//\n// Rule 36: each phrase is ONE named declaration here, and every enforcement point DERIVES\n// from it — the ttt-core callable input schema (`z.literal(PHRASE)`), the frontend typed-\n// confirmation gate, and the frontend mutation payload all import the same const. The\n// operator must type the exact string, and the backend `z.literal` rejects anything else,\n// so the two sides can never drift only if they read from the same declaration. A raw\n// re-quote of any of these phrases at an enforcement point is drift by definition and is\n// caught by the definition-redeclaration guard (this file is each phrase's owner there).\n//\n// Declared as plain string consts (NOT widened to `string`), so `z.literal(PHRASE)` keeps\n// the exact-literal schema and `z.infer` narrows to the precise wire value.\n\n/** `commandSafetyCaseActions` / close-out — the batched safety-case staged actions. */\nexport const SAFETY_ACTIONS_CONFIRMATION = 'I confirm these safety actions';\n\n/** `reopenSafetyCase` — reopen a terminal child-safety / NCII case. */\nexport const SAFETY_CASE_REOPEN_CONFIRMATION = 'I confirm reopening this safety case';\n\n/** `commandAccountAction` — apply a per-account safety action on a child-safety case. */\nexport const SAFETY_ACCOUNT_ACTION_CONFIRMATION = 'I confirm this account action';\n\n/** `recordNcmecPortalReceiptArtifact` — register the NCMEC manual-portal receipt artifact. */\nexport const NCMEC_PORTAL_RECEIPT_CONFIRMATION = 'I confirm this is the NCMEC portal receipt';\n\n/** `markNcmecPortalComplete` — mark the NCMEC manual-portal report filed. */\nexport const NCMEC_MANUAL_PORTAL_FILED_CONFIRMATION =\n 'I confirm this NCMEC report was filed via the manual portal';\n\n/** `revealCaseEvidence` — metadata→evidence reveal under reauth. */\nexport const REVEAL_CASE_EVIDENCE_CONFIRMATION = 'I confirm I am revealing case evidence under reauth';\n\n/** `recordNcmecPortalCorrection` — record an NCMEC manual-portal correction filing. */\nexport const NCMEC_PORTAL_CORRECTION_CONFIRMATION = 'I confirm this NCMEC portal correction was filed';\n\n/** `decideTakeItDownValidity` — the operator validity ruling on a TAKE IT DOWN request. */\nexport const TAKE_IT_DOWN_VALIDITY_CONFIRMATION = 'I confirm this TAKE IT DOWN validity decision';\n\n/** `setReportDisposition` — the legal reporting disposition on a protected case. */\nexport const LEGAL_REPORTING_DISPOSITION_CONFIRMATION = 'I confirm this legal reporting disposition';\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"safety-telemetry-patterns.js","sourceRoot":"","sources":["../../src/constants/safety-telemetry-patterns.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,gFAAgF;AAChF,yEAAyE;AACzE,8EAA8E;AAC9E,4EAA4E;AAC5E,oEAAoE;AACpE,+EAA+E;AAC/E,qEAAqE;AACrE,uEAAuE;AACvE,EAAE;AACF,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAChF,iEAAiE;AACjE,sEAAsE;AACtE,4EAA4E;AAC5E,0EAA0E;AAC1E,gFAAgF;AAChF,+EAA+E;AAE/E,mFAAmF;AACnF,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,mCAAmC;IACnC,oCAAoC;IACpC,2BAA2B;IAC3B,4BAA4B;CACpB,CAAC;AAEX;;;;GAIG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAwB;IACnE,uFAAuF;IACvF,4EAA4E;IAC5E,GAAG,qBAAqB,CAAC,GAAG,CAC1B,CAAC,IAAI,EAAE,EAAE,CACP,IAAI,MAAM,CACR,qBAAqB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,EAC1D,IAAI,CACL,CACJ;IACD,uFAAuF;IACvF,sFAAsF;IAEtF,sEAAsE;IACtE,6FAA6F;IAC7F,gGAAgG;IAChG,4BAA4B;IAC5B,qCAAqC;IACrC,sDAAsD;IAEtD,kFAAkF;IAClF,oBAAoB;IAEpB,oCAAoC;IACpC,sFAAsF;IACtF,+CAA+C;IAC/C,qFAAqF;CACtF,CAAC"}
|
|
1
|
+
{"version":3,"file":"safety-telemetry-patterns.js","sourceRoot":"","sources":["../../src/constants/safety-telemetry-patterns.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,gFAAgF;AAChF,yEAAyE;AACzE,8EAA8E;AAC9E,4EAA4E;AAC5E,oEAAoE;AACpE,+EAA+E;AAC/E,qEAAqE;AACrE,uEAAuE;AACvE,EAAE;AACF,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAChF,iEAAiE;AACjE,sEAAsE;AACtE,4EAA4E;AAC5E,0EAA0E;AAC1E,gFAAgF;AAChF,+EAA+E;AAE/E,mFAAmF;AACnF,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,mCAAmC;IACnC,oCAAoC;IACpC,2BAA2B;IAC3B,4BAA4B;CACpB,CAAC;AAEX;;;;GAIG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAwB;IACnE,uFAAuF;IACvF,4EAA4E;IAC5E,GAAG,qBAAqB,CAAC,GAAG,CAC1B,CAAC,IAAI,EAAE,EAAE,CACP,IAAI,MAAM,CACR,qBAAqB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,EAC1D,IAAI,CACL,CACJ;IACD,uFAAuF;IACvF,sFAAsF;IAEtF,sEAAsE;IACtE,6FAA6F;IAC7F,gGAAgG;IAChG,4BAA4B;IAC5B,qCAAqC;IACrC,sDAAsD;IAEtD,kFAAkF;IAClF,oBAAoB;IAEpB,oCAAoC;IACpC,sFAAsF;IACtF,+CAA+C;IAC/C,qFAAqF;CACtF,CAAC","sourcesContent":["// ============================================================================\n// SAFETY TELEMETRY FORBIDDEN PATTERNS — the ONE declaration of the TTT-specific\n// forbidden-pattern set for the CSAM/NCII subsystem, injected into every\n// `createTelemetryScrubber({ patterns })` call (frontend client + nodejs/edge\n// inits AND the backend Sentry init). Consolidated here 2026-07-13 from the\n// former duplicate pair (functions/src/shared/safety-telemetry.ts ↔\n// src/lib/safety-telemetry-patterns.ts). Deliberately dependency-free: entries\n// are `RegExp | string`, structurally identical to monitoring-core's\n// `ForbiddenPattern`, so ttt-core needs no monitoring-core dependency.\n//\n// The patterns are SPECIFIC (→ low collateral on ordinary errors) and reference\n// the real storage prefixes + default project bucket hostnames used by the app:\n// - `nciiEvidence/`, `nciiAuthorityEvidence/` (public evidence key prefixes),\n// - `evidence/` (the SAFETY_EVIDENCE_BUCKET vault key prefix),\n// - the dev + prod default Firebase Storage buckets plus the legacy\n// `.appspot.com` form and the raw `storage.googleapis.com` object host.\n// Merged AFTER monitoring-core's generic DEFAULT_FORBIDDEN_PATTERNS (IPs,\n// bearer/authorization tokens, credential assignments) at every injection site.\n// ============================================================================\n\n/** The dev + prod default Firebase Storage bucket hostnames (apphosting*.yaml). */\nexport const EVIDENCE_BUCKET_HOSTS = [\n 'ttt-dev-cfb70.firebasestorage.app',\n 'ttt-prod-cfaf3.firebasestorage.app',\n 'ttt-dev-cfb70.appspot.com',\n 'ttt-prod-cfaf3.appspot.com',\n] as const;\n\n/**\n * TTT-specific forbidden patterns for the telemetry scrubber. `string` entries are\n * treated as literals by monitoring-core (no escaping needed); `RegExp` entries are\n * matched globally against every string in the event.\n */\nexport const TTT_FORBIDDEN_TELEMETRY_PATTERNS: (RegExp | string)[] = [\n // --- Evidence-bucket URL prefixes (dev + prod), any evidence/authority-proof key. ---\n // A fully-qualified evidence object URL: <host>/<...>/nciiEvidence/... etc.\n ...EVIDENCE_BUCKET_HOSTS.map(\n (host) =>\n new RegExp(\n `https?://[^\\\\s\"']*${host.replace(/\\./g, '\\\\.')}[^\\\\s\"']*`,\n 'gi',\n ),\n ),\n // The raw GCS object host, regardless of bucket (catches storage.googleapis.com URLs).\n /https?:\\/\\/(?:storage\\.googleapis\\.com|firebasestorage\\.googleapis\\.com)\\/[^\\s\"']*/gi,\n\n // --- Evidence storage KEY prefixes (bare object paths, no host). ---\n // nciiEvidence/{requestReference}/{fileId}, nciiAuthorityEvidence/{reservationKey}/{fileId},\n // and the vault key prefix evidence/{caseId}/{digest}. Match the prefix + the rest of the path.\n /\\bnciiEvidence\\/[^\\s\"']+/gi,\n /\\bnciiAuthorityEvidence\\/[^\\s\"']+/gi,\n /\\bevidence\\/[a-zA-Z0-9._-]+\\/[a-f0-9]{16,}[^\\s\"']*/gi,\n\n // --- PhotoDNA detector-hash shape: a 64-hex string (sha256 / detector hash). ---\n /\\b[a-f0-9]{64}\\b/gi,\n\n // --- NCMEC credential markers. ---\n // The PhotoDNA subscription-key header value + any NCMEC-credential-style assignment.\n /Ocp-Apim-Subscription-Key\\s*[:=]\\s*[^\\s\"']+/gi,\n /\\bncmec[_-]?(?:api[_-]?key|secret|password|credential|token)\\b\\s*[:=]?\\s*[^\\s\"']*/gi,\n];\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scheduled-jobs.js","sourceRoot":"","sources":["../../src/constants/scheduled-jobs.ts"],"names":[],"mappings":"AAAA,yDAAyD;AAEzD,6BAA6B;AAE7B,oEAAoE;AACpE,MAAM,CAAC,MAAM,2BAA2B,GAAG,EAAE,CAAC;AAE9C,wEAAwE;AACxE,MAAM,CAAC,MAAM,6BAA6B,GAAG,GAAG,CAAC;AAEjD,uEAAuE;AACvE,MAAM,CAAC,MAAM,iCAAiC,GAAG,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"scheduled-jobs.js","sourceRoot":"","sources":["../../src/constants/scheduled-jobs.ts"],"names":[],"mappings":"AAAA,yDAAyD;AAEzD,6BAA6B;AAE7B,oEAAoE;AACpE,MAAM,CAAC,MAAM,2BAA2B,GAAG,EAAE,CAAC;AAE9C,wEAAwE;AACxE,MAAM,CAAC,MAAM,6BAA6B,GAAG,GAAG,CAAC;AAEjD,uEAAuE;AACvE,MAAM,CAAC,MAAM,iCAAiC,GAAG,EAAE,CAAC","sourcesContent":["// Scheduled-job intervals, batch sizes, and source URLs.\n\n// --- Admin task cleanup ---\n\n/** Interval in minutes for the admin-task cleanup scheduled job. */\nexport const ADMIN_TASK_CLEANUP_INTERVAL = 15;\n\n/** Batch size of expired task checkouts processed per scheduled run. */\nexport const ADMIN_TASK_EXPIRED_BATCH_SIZE = 500;\n\n/** Safety cap on iterations within a single admin-task cleanup run. */\nexport const ADMIN_TASK_CLEANUP_MAX_ITERATIONS = 10;\n"]}
|
|
@@ -4,4 +4,19 @@ export declare const REDIRECT_PATH_KEY = "redirectPath";
|
|
|
4
4
|
export declare const LS_VERSION_KEY = "ttt-app-version";
|
|
5
5
|
/** sessionStorage key marking that a version-mismatch reload was already attempted. */
|
|
6
6
|
export declare const SS_RELOAD_ATTEMPTED_KEY = "ttt-version-reload-attempted";
|
|
7
|
+
/** localStorage key holding the user's chosen dock companion id ('bill' | 'kit'). */
|
|
8
|
+
export declare const COMPANION_STORAGE_KEY = "ttt-company-companion";
|
|
9
|
+
/** localStorage key: 'true' when the user has hidden the dock companion entirely. */
|
|
10
|
+
export declare const MASCOT_HIDDEN_STORAGE_KEY = "ttt-bill-hidden";
|
|
11
|
+
/** localStorage key holding the last-shown dock-bubble line index (avoids an
|
|
12
|
+
* immediate repeat across visits). */
|
|
13
|
+
export declare const MASCOT_LINE_INDEX_STORAGE_KEY = "ttt-bill-line-index";
|
|
14
|
+
/** Same-tab window event dispatched when MASCOT_HIDDEN_STORAGE_KEY changes
|
|
15
|
+
* (localStorage 'storage' events do not fire in the writing tab). */
|
|
16
|
+
export declare const MASCOT_HIDDEN_CHANGE_EVENT = "ttt-bill-pref-change";
|
|
17
|
+
/** Same-tab window event dispatched when COMPANION_STORAGE_KEY changes. */
|
|
18
|
+
export declare const COMPANION_CHANGE_EVENT = "ttt-company-companion-change";
|
|
19
|
+
/** Same-tab window event dispatched when the transient dock-puppet pose changes
|
|
20
|
+
* (in-memory store; never persisted). */
|
|
21
|
+
export declare const MASCOT_POSE_CHANGE_EVENT = "ttt-bill-pose-change";
|
|
7
22
|
//# sourceMappingURL=storage-keys.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage-keys.d.ts","sourceRoot":"","sources":["../../src/constants/storage-keys.ts"],"names":[],"mappings":"AAEA,4FAA4F;AAC5F,eAAO,MAAM,iBAAiB,iBAAiB,CAAC;AAEhD,2FAA2F;AAC3F,eAAO,MAAM,cAAc,oBAAoB,CAAC;AAEhD,uFAAuF;AACvF,eAAO,MAAM,uBAAuB,iCAAiC,CAAC"}
|
|
1
|
+
{"version":3,"file":"storage-keys.d.ts","sourceRoot":"","sources":["../../src/constants/storage-keys.ts"],"names":[],"mappings":"AAEA,4FAA4F;AAC5F,eAAO,MAAM,iBAAiB,iBAAiB,CAAC;AAEhD,2FAA2F;AAC3F,eAAO,MAAM,cAAc,oBAAoB,CAAC;AAEhD,uFAAuF;AACvF,eAAO,MAAM,uBAAuB,iCAAiC,CAAC;AAMtE,qFAAqF;AACrF,eAAO,MAAM,qBAAqB,0BAA0B,CAAC;AAE7D,qFAAqF;AACrF,eAAO,MAAM,yBAAyB,oBAAoB,CAAC;AAE3D;uCACuC;AACvC,eAAO,MAAM,6BAA6B,wBAAwB,CAAC;AAEnE;sEACsE;AACtE,eAAO,MAAM,0BAA0B,yBAAyB,CAAC;AAEjE,2EAA2E;AAC3E,eAAO,MAAM,sBAAsB,iCAAiC,CAAC;AAErE;0CAC0C;AAC1C,eAAO,MAAM,wBAAwB,yBAAyB,CAAC"}
|
|
@@ -5,4 +5,22 @@ export const REDIRECT_PATH_KEY = 'redirectPath';
|
|
|
5
5
|
export const LS_VERSION_KEY = 'ttt-app-version';
|
|
6
6
|
/** sessionStorage key marking that a version-mismatch reload was already attempted. */
|
|
7
7
|
export const SS_RELOAD_ATTEMPTED_KEY = 'ttt-version-reload-attempted';
|
|
8
|
+
// --- Company / Green Room dock companion (device-local v1 stores) ---
|
|
9
|
+
// Values are byte-stable for backward compatibility — the historical 'bill'
|
|
10
|
+
// naming predates the Company rename and MUST NOT change.
|
|
11
|
+
/** localStorage key holding the user's chosen dock companion id ('bill' | 'kit'). */
|
|
12
|
+
export const COMPANION_STORAGE_KEY = 'ttt-company-companion';
|
|
13
|
+
/** localStorage key: 'true' when the user has hidden the dock companion entirely. */
|
|
14
|
+
export const MASCOT_HIDDEN_STORAGE_KEY = 'ttt-bill-hidden';
|
|
15
|
+
/** localStorage key holding the last-shown dock-bubble line index (avoids an
|
|
16
|
+
* immediate repeat across visits). */
|
|
17
|
+
export const MASCOT_LINE_INDEX_STORAGE_KEY = 'ttt-bill-line-index';
|
|
18
|
+
/** Same-tab window event dispatched when MASCOT_HIDDEN_STORAGE_KEY changes
|
|
19
|
+
* (localStorage 'storage' events do not fire in the writing tab). */
|
|
20
|
+
export const MASCOT_HIDDEN_CHANGE_EVENT = 'ttt-bill-pref-change';
|
|
21
|
+
/** Same-tab window event dispatched when COMPANION_STORAGE_KEY changes. */
|
|
22
|
+
export const COMPANION_CHANGE_EVENT = 'ttt-company-companion-change';
|
|
23
|
+
/** Same-tab window event dispatched when the transient dock-puppet pose changes
|
|
24
|
+
* (in-memory store; never persisted). */
|
|
25
|
+
export const MASCOT_POSE_CHANGE_EVENT = 'ttt-bill-pose-change';
|
|
8
26
|
//# sourceMappingURL=storage-keys.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage-keys.js","sourceRoot":"","sources":["../../src/constants/storage-keys.ts"],"names":[],"mappings":"AAAA,iEAAiE;AAEjE,4FAA4F;AAC5F,MAAM,CAAC,MAAM,iBAAiB,GAAG,cAAc,CAAC;AAEhD,2FAA2F;AAC3F,MAAM,CAAC,MAAM,cAAc,GAAG,iBAAiB,CAAC;AAEhD,uFAAuF;AACvF,MAAM,CAAC,MAAM,uBAAuB,GAAG,8BAA8B,CAAC"}
|
|
1
|
+
{"version":3,"file":"storage-keys.js","sourceRoot":"","sources":["../../src/constants/storage-keys.ts"],"names":[],"mappings":"AAAA,iEAAiE;AAEjE,4FAA4F;AAC5F,MAAM,CAAC,MAAM,iBAAiB,GAAG,cAAc,CAAC;AAEhD,2FAA2F;AAC3F,MAAM,CAAC,MAAM,cAAc,GAAG,iBAAiB,CAAC;AAEhD,uFAAuF;AACvF,MAAM,CAAC,MAAM,uBAAuB,GAAG,8BAA8B,CAAC;AAEtE,uEAAuE;AACvE,4EAA4E;AAC5E,0DAA0D;AAE1D,qFAAqF;AACrF,MAAM,CAAC,MAAM,qBAAqB,GAAG,uBAAuB,CAAC;AAE7D,qFAAqF;AACrF,MAAM,CAAC,MAAM,yBAAyB,GAAG,iBAAiB,CAAC;AAE3D;uCACuC;AACvC,MAAM,CAAC,MAAM,6BAA6B,GAAG,qBAAqB,CAAC;AAEnE;sEACsE;AACtE,MAAM,CAAC,MAAM,0BAA0B,GAAG,sBAAsB,CAAC;AAEjE,2EAA2E;AAC3E,MAAM,CAAC,MAAM,sBAAsB,GAAG,8BAA8B,CAAC;AAErE;0CAC0C;AAC1C,MAAM,CAAC,MAAM,wBAAwB,GAAG,sBAAsB,CAAC","sourcesContent":["// Well-known keys used in browser sessionStorage / localStorage.\n\n/** sessionStorage key holding the path the user wanted before being redirected to login. */\nexport const REDIRECT_PATH_KEY = 'redirectPath';\n\n/** localStorage key holding the last-seen app version (used by version-gate component). */\nexport const LS_VERSION_KEY = 'ttt-app-version';\n\n/** sessionStorage key marking that a version-mismatch reload was already attempted. */\nexport const SS_RELOAD_ATTEMPTED_KEY = 'ttt-version-reload-attempted';\n\n// --- Company / Green Room dock companion (device-local v1 stores) ---\n// Values are byte-stable for backward compatibility — the historical 'bill'\n// naming predates the Company rename and MUST NOT change.\n\n/** localStorage key holding the user's chosen dock companion id ('bill' | 'kit'). */\nexport const COMPANION_STORAGE_KEY = 'ttt-company-companion';\n\n/** localStorage key: 'true' when the user has hidden the dock companion entirely. */\nexport const MASCOT_HIDDEN_STORAGE_KEY = 'ttt-bill-hidden';\n\n/** localStorage key holding the last-shown dock-bubble line index (avoids an\n * immediate repeat across visits). */\nexport const MASCOT_LINE_INDEX_STORAGE_KEY = 'ttt-bill-line-index';\n\n/** Same-tab window event dispatched when MASCOT_HIDDEN_STORAGE_KEY changes\n * (localStorage 'storage' events do not fire in the writing tab). */\nexport const MASCOT_HIDDEN_CHANGE_EVENT = 'ttt-bill-pref-change';\n\n/** Same-tab window event dispatched when COMPANION_STORAGE_KEY changes. */\nexport const COMPANION_CHANGE_EVENT = 'ttt-company-companion-change';\n\n/** Same-tab window event dispatched when the transient dock-puppet pose changes\n * (in-memory store; never persisted). */\nexport const MASCOT_POSE_CHANGE_EVENT = 'ttt-bill-pose-change';\n"]}
|