vidspotai-shared 1.0.95 → 1.0.97
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/lib/globals/aiModels/enums.d.ts +3 -0
- package/lib/globals/aiModels/enums.d.ts.map +1 -1
- package/lib/globals/aiModels/enums.js +9 -0
- package/lib/globals/aiModels/index.d.ts.map +1 -1
- package/lib/globals/aiModels/index.js +2 -0
- package/lib/globals/aiModels/providers/hostedAvatars.d.ts +22 -0
- package/lib/globals/aiModels/providers/hostedAvatars.d.ts.map +1 -0
- package/lib/globals/aiModels/providers/hostedAvatars.js +129 -0
- package/lib/globals/aiModels/providers/kling.d.ts.map +1 -1
- package/lib/globals/aiModels/providers/kling.js +85 -1
- package/lib/globals/creditUnit.d.ts +29 -0
- package/lib/globals/creditUnit.d.ts.map +1 -1
- package/lib/globals/creditUnit.js +30 -1
- package/lib/globals/types.d.ts +58 -1
- package/lib/globals/types.d.ts.map +1 -1
- package/lib/globals/types.js +61 -1
- package/lib/models/demoVideoProject.model.d.ts +244 -0
- package/lib/models/demoVideoProject.model.d.ts.map +1 -0
- package/lib/models/demoVideoProject.model.js +2 -0
- package/lib/models/githubConnection.model.d.ts +35 -0
- package/lib/models/githubConnection.model.d.ts.map +1 -0
- package/lib/models/githubConnection.model.js +2 -0
- package/lib/models/index.d.ts +3 -0
- package/lib/models/index.d.ts.map +1 -1
- package/lib/models/index.js +3 -0
- package/lib/models/outreach.model.d.ts +175 -0
- package/lib/models/outreach.model.d.ts.map +1 -0
- package/lib/models/outreach.model.js +2 -0
- package/lib/models/video.model.d.ts +4 -0
- package/lib/models/video.model.d.ts.map +1 -1
- package/lib/schemas/brandKit.schema.d.ts +4 -0
- package/lib/schemas/brandKit.schema.d.ts.map +1 -1
- package/lib/schemas/brandKit.schema.js +10 -0
- package/lib/schemas/demoQuestion.schema.d.ts +286 -0
- package/lib/schemas/demoQuestion.schema.d.ts.map +1 -0
- package/lib/schemas/demoQuestion.schema.js +210 -0
- package/lib/schemas/demoSpec.schema.d.ts +109 -6
- package/lib/schemas/demoSpec.schema.d.ts.map +1 -1
- package/lib/schemas/demoSpec.schema.js +95 -7
- package/lib/schemas/index.d.ts +1 -0
- package/lib/schemas/index.d.ts.map +1 -1
- package/lib/schemas/index.js +1 -0
- package/lib/services/agent/providerFallback/chains.d.ts.map +1 -1
- package/lib/services/agent/providerFallback/chains.js +9 -1
- package/lib/services/agent/taskPoller.d.ts.map +1 -1
- package/lib/services/agent/taskPoller.js +17 -6
- package/lib/services/agent/tools/generateAvatarVideo.tool.d.ts +21 -9
- package/lib/services/agent/tools/generateAvatarVideo.tool.d.ts.map +1 -1
- package/lib/services/agent/tools/generateAvatarVideo.tool.js +135 -39
- package/lib/services/aiGen/aiGenFactory.service.d.ts +1 -1
- package/lib/services/aiGen/aiGenFactory.service.d.ts.map +1 -1
- package/lib/services/aiGen/aiGenFactory.service.js +11 -2
- package/lib/services/aiGen/providers/kling/kling.service.d.ts +36 -1
- package/lib/services/aiGen/providers/kling/kling.service.d.ts.map +1 -1
- package/lib/services/aiGen/providers/kling/kling.service.js +62 -5
- package/lib/services/aiGen/providers/kling/klingCredits.d.ts.map +1 -1
- package/lib/services/aiGen/providers/kling/klingCredits.js +12 -0
- package/lib/services/aiGen/providers/kling/klingRequests.d.ts +14 -1
- package/lib/services/aiGen/providers/kling/klingRequests.d.ts.map +1 -1
- package/lib/services/aiGen/providers/kling/klingRequests.js +44 -0
- package/lib/services/aiGen/providers/kling/klingStatus.d.ts +13 -1
- package/lib/services/aiGen/providers/kling/klingStatus.d.ts.map +1 -1
- package/lib/services/aiGen/providers/kling/klingStatus.js +111 -0
- package/lib/services/aiGen/providers/kling/types.d.ts +71 -0
- package/lib/services/aiGen/providers/kling/types.d.ts.map +1 -1
- package/lib/services/avatarGen/IAvatarVideoProvider.d.ts +136 -0
- package/lib/services/avatarGen/IAvatarVideoProvider.d.ts.map +1 -0
- package/lib/services/avatarGen/IAvatarVideoProvider.js +42 -0
- package/lib/services/avatarGen/avatarProviderFactory.d.ts +18 -0
- package/lib/services/avatarGen/avatarProviderFactory.d.ts.map +1 -0
- package/lib/services/avatarGen/avatarProviderFactory.js +54 -0
- package/lib/services/avatarGen/index.d.ts +6 -0
- package/lib/services/avatarGen/index.d.ts.map +1 -0
- package/lib/services/avatarGen/index.js +21 -0
- package/lib/services/avatarGen/providers/heygenAvatarProvider.d.ts +45 -0
- package/lib/services/avatarGen/providers/heygenAvatarProvider.d.ts.map +1 -0
- package/lib/services/avatarGen/providers/heygenAvatarProvider.js +190 -0
- package/lib/services/avatarGen/providers/klingAvatarProvider.d.ts +32 -0
- package/lib/services/avatarGen/providers/klingAvatarProvider.d.ts.map +1 -0
- package/lib/services/avatarGen/providers/klingAvatarProvider.js +69 -0
- package/lib/services/avatarGen/providers/tavusAvatarProvider.d.ts +56 -0
- package/lib/services/avatarGen/providers/tavusAvatarProvider.d.ts.map +1 -0
- package/lib/services/avatarGen/providers/tavusAvatarProvider.js +183 -0
- package/lib/services/demo/demoAuthor.d.ts +45 -0
- package/lib/services/demo/demoAuthor.d.ts.map +1 -0
- package/lib/services/demo/demoAuthor.js +75 -0
- package/lib/services/demo/demoAuthorNormalize.d.ts +49 -0
- package/lib/services/demo/demoAuthorNormalize.d.ts.map +1 -0
- package/lib/services/demo/demoAuthorNormalize.js +327 -0
- package/lib/services/demo/demoAuthorPrompt.d.ts +102 -0
- package/lib/services/demo/demoAuthorPrompt.d.ts.map +1 -0
- package/lib/services/demo/demoAuthorPrompt.js +243 -0
- package/lib/services/demo/demoCredits.d.ts +20 -0
- package/lib/services/demo/demoCredits.d.ts.map +1 -0
- package/lib/services/demo/demoCredits.js +51 -0
- package/lib/services/demo/demoMediaGuard.d.ts +43 -0
- package/lib/services/demo/demoMediaGuard.d.ts.map +1 -0
- package/lib/services/demo/demoMediaGuard.js +207 -0
- package/lib/services/demo/demoMusic.d.ts +13 -0
- package/lib/services/demo/demoMusic.d.ts.map +1 -0
- package/lib/services/demo/demoMusic.js +93 -0
- package/lib/services/demo/demoPrefill.d.ts +76 -0
- package/lib/services/demo/demoPrefill.d.ts.map +1 -0
- package/lib/services/demo/demoPrefill.js +435 -0
- package/lib/services/demo/demoRevisePrompt.d.ts +17 -0
- package/lib/services/demo/demoRevisePrompt.d.ts.map +1 -0
- package/lib/services/demo/demoRevisePrompt.js +85 -0
- package/lib/services/demo/demoReviser.d.ts +63 -0
- package/lib/services/demo/demoReviser.d.ts.map +1 -0
- package/lib/services/demo/demoReviser.js +81 -0
- package/lib/services/demo/demoScriptPrompt.d.ts +63 -0
- package/lib/services/demo/demoScriptPrompt.d.ts.map +1 -0
- package/lib/services/demo/demoScriptPrompt.js +234 -0
- package/lib/services/demo/demoScriptWriter.d.ts +65 -0
- package/lib/services/demo/demoScriptWriter.d.ts.map +1 -0
- package/lib/services/demo/demoScriptWriter.js +211 -0
- package/lib/services/demo/demoTriage.d.ts +65 -0
- package/lib/services/demo/demoTriage.d.ts.map +1 -0
- package/lib/services/demo/demoTriage.js +130 -0
- package/lib/services/demo/githubOAuth.d.ts +78 -0
- package/lib/services/demo/githubOAuth.d.ts.map +1 -0
- package/lib/services/demo/githubOAuth.js +209 -0
- package/lib/services/demo/githubOAuthState.d.ts +10 -0
- package/lib/services/demo/githubOAuthState.d.ts.map +1 -0
- package/lib/services/demo/githubOAuthState.js +63 -0
- package/lib/services/demo/index.d.ts +24 -0
- package/lib/services/demo/index.d.ts.map +1 -0
- package/lib/services/demo/index.js +39 -0
- package/lib/services/firestore.service.d.ts +11 -0
- package/lib/services/firestore.service.d.ts.map +1 -1
- package/lib/services/firestore.service.js +24 -0
- package/lib/services/index.d.ts +2 -0
- package/lib/services/index.d.ts.map +1 -1
- package/lib/services/index.js +2 -0
- package/lib/services/tts/providers/elevenlabs.service.d.ts.map +1 -1
- package/lib/services/tts/providers/elevenlabs.service.js +16 -8
- package/lib/utils/index.d.ts +1 -0
- package/lib/utils/index.d.ts.map +1 -1
- package/lib/utils/index.js +1 -0
- package/lib/utils/outreachTemplate.d.ts +46 -0
- package/lib/utils/outreachTemplate.d.ts.map +1 -0
- package/lib/utils/outreachTemplate.js +174 -0
- package/package.json +1 -1
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
import { FieldValue } from "firebase-admin/firestore";
|
|
2
|
+
import { EDemoVideoStatus } from "../globals/types";
|
|
3
|
+
import { DemoBrand, DemoSpec } from "../schemas/demoSpec.schema";
|
|
4
|
+
import { DemoQuestion } from "../schemas/demoQuestion.schema";
|
|
5
|
+
/**
|
|
6
|
+
* SaaS Demo Video Generator — persistent project record.
|
|
7
|
+
* See notes/SAAS_DEMO_GENERATOR_PLAN.md.
|
|
8
|
+
*
|
|
9
|
+
* Created by the Cloud Function controller (validates inputs + deducts credits +
|
|
10
|
+
* writes status=QUEUED), then claimed + driven through the multi-stage pipeline
|
|
11
|
+
* by the BullMQ worker (DEMO_VIDEO_JOBS). The wizard subscribes to this doc via
|
|
12
|
+
* onSnapshot — `status` is the coarse progress signal, `stageTimings` the detail.
|
|
13
|
+
*
|
|
14
|
+
* `demoSpec` is the editable source-of-truth: a user "change X" request mutates
|
|
15
|
+
* the spec and re-renders, rather than starting over. This is the structured,
|
|
16
|
+
* re-renderable replacement for "keep the HTML" (the reference workflow's escape
|
|
17
|
+
* hatch) — strictly better because it's typed and partially regenerable.
|
|
18
|
+
*/
|
|
19
|
+
/**
|
|
20
|
+
* Raw user-supplied inputs, before the planner resolves them into a `DemoSpec`.
|
|
21
|
+
* All three input sources are optional & combinable (screenshots + website +
|
|
22
|
+
* GitHub) — the planner uses whatever is present (plan §5).
|
|
23
|
+
*/
|
|
24
|
+
export interface IDemoVideoInputs {
|
|
25
|
+
/** Product display name (wizard step 1). Overlay text only — never AI-rendered into pixels. */
|
|
26
|
+
productName: string;
|
|
27
|
+
/** One-line value proposition. */
|
|
28
|
+
tagline?: string;
|
|
29
|
+
/** Short description of what the product does (seeds scene copy). */
|
|
30
|
+
description?: string;
|
|
31
|
+
/** Target-audience hint for script tone. */
|
|
32
|
+
audience?: string;
|
|
33
|
+
/** Target product URL. Worker attempts a headless screenshot; falls back to uploads. */
|
|
34
|
+
websiteUrl?: string;
|
|
35
|
+
/** User-uploaded product screenshots (GCS URLs). The reliable fallback for auth'd SaaS. */
|
|
36
|
+
screenshotUrls?: string[];
|
|
37
|
+
/** Public GitHub repo URL (v1) — read for brand tokens + feature extraction. OAuth depth is v2. */
|
|
38
|
+
githubRepoUrl?: string;
|
|
39
|
+
/**
|
|
40
|
+
* @deprecated Superseded by {@link githubSubPaths}. Kept so older docs still
|
|
41
|
+
* read. A single monorepo sub-path (e.g. "apps/web").
|
|
42
|
+
*/
|
|
43
|
+
githubSubPath?: string;
|
|
44
|
+
/**
|
|
45
|
+
* Monorepo sub-paths — one or more folders OR specific files to read brand/style
|
|
46
|
+
* signals from, instead of the repo root (e.g. `["apps/web", "packages/ui/theme.ts"]`).
|
|
47
|
+
* A folder entry reads that package's standard theme/config/package files; a file
|
|
48
|
+
* entry (has an extension) is read directly as a theme source. README stays at root.
|
|
49
|
+
*/
|
|
50
|
+
githubSubPaths?: string[];
|
|
51
|
+
/** Free-text notes about the repo/product to steer the planner (not rendered verbatim). */
|
|
52
|
+
repoNotes?: string;
|
|
53
|
+
/**
|
|
54
|
+
* Media the user wants FEATURED IN the output video (images AND video clips) —
|
|
55
|
+
* distinct from `screenshotUrls`, which are brand/vision *reference* the planner
|
|
56
|
+
* looks at. These are placed into scenes and actually appear on the timeline
|
|
57
|
+
* (e.g. a VidSpotAI sample clip playing inside a device frame). The planner is
|
|
58
|
+
* told they exist and must surface them; the render engine composites images via
|
|
59
|
+
* `<Img>` and clips via `<OffthreadVideo>` (Phase: media-assets).
|
|
60
|
+
*/
|
|
61
|
+
mediaAssets?: IDemoMediaAsset[];
|
|
62
|
+
/** Resolved answers to the clarifying wizard (plan §2.6 taxonomy). */
|
|
63
|
+
answers?: IDemoVideoWizardAnswers;
|
|
64
|
+
/**
|
|
65
|
+
* Answers to the agent's DYNAMIC clarifying questions (the triage/mid-run loop),
|
|
66
|
+
* keyed by question id. Distinct from `answers` (the fixed §2.6 taxonomy): these
|
|
67
|
+
* are questions the agent decided to ask based on the initial website/inputs scan.
|
|
68
|
+
* Free-form values (string | string[] | boolean) so one map covers every
|
|
69
|
+
* question kind. See [[DemoQuestion]] + plan §clarification-loop.
|
|
70
|
+
*/
|
|
71
|
+
clarifyAnswers?: Record<string, IDemoClarifyAnswerValue>;
|
|
72
|
+
}
|
|
73
|
+
/** The value of one dynamic-clarification answer — covers every question kind. */
|
|
74
|
+
export type IDemoClarifyAnswerValue = string | string[] | boolean;
|
|
75
|
+
/**
|
|
76
|
+
* One piece of user media to FEATURE inside the demo (not reference material).
|
|
77
|
+
* Uploaded via the shared media endpoint (which already accepts video), then the
|
|
78
|
+
* planner places it into a compatible scene and the render engine draws it.
|
|
79
|
+
*/
|
|
80
|
+
export interface IDemoMediaAsset {
|
|
81
|
+
/** GCS URL of the uploaded asset. */
|
|
82
|
+
url: string;
|
|
83
|
+
/** How to place it: a still image vs a playing video clip. */
|
|
84
|
+
kind: "image" | "video";
|
|
85
|
+
/** Optional human label ("Hero demo clip", "Dashboard view"). Helps the planner reference it. */
|
|
86
|
+
label?: string;
|
|
87
|
+
/** Optional user note on how/where to use it ("open with this", "show under the AI feature"). */
|
|
88
|
+
intent?: string;
|
|
89
|
+
/** Optional intrinsic pixel dimensions (best-effort, from the client) for aspect-correct framing. */
|
|
90
|
+
width?: number;
|
|
91
|
+
height?: number;
|
|
92
|
+
/** For video: clip duration in ms (best-effort, from the client) so the planner can budget scene time. */
|
|
93
|
+
durationMs?: number;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Answers to the clarifying wizard. Mirrors Claude Design's option taxonomy
|
|
97
|
+
* (plan §2.6). Every field is optional: an omitted field === the user picked
|
|
98
|
+
* "decide for me", so the planner LLM resolves it. The resolved values land in
|
|
99
|
+
* `demoSpec.style` / `demoSpec.narrative` / `demoSpec.aspect`.
|
|
100
|
+
*/
|
|
101
|
+
export interface IDemoVideoWizardAnswers {
|
|
102
|
+
/** Maps to demoSpec.style.visual. */
|
|
103
|
+
visualStyle?: DemoSpec["style"]["visual"];
|
|
104
|
+
/** Maps to demoSpec.style.pace. */
|
|
105
|
+
pace?: DemoSpec["style"]["pace"];
|
|
106
|
+
/** ~20–30s teaser · ~45–60s walkthrough · ~90s detailed. */
|
|
107
|
+
targetLength?: "teaser" | "walkthrough" | "detailed";
|
|
108
|
+
/** Maps to demoSpec.narrative. */
|
|
109
|
+
narrative?: DemoSpec["narrative"];
|
|
110
|
+
/** Maps to demoSpec.aspect. */
|
|
111
|
+
aspect?: DemoSpec["aspect"];
|
|
112
|
+
/** Maps to demoSpec.style.colorMood. */
|
|
113
|
+
colorMood?: DemoSpec["style"]["colorMood"];
|
|
114
|
+
/** Maps to demoSpec.style.audioIntent. */
|
|
115
|
+
audioIntent?: DemoSpec["style"]["audioIntent"];
|
|
116
|
+
/** Feature subset the user wants highlighted (free-text labels). */
|
|
117
|
+
features?: string[];
|
|
118
|
+
/** How many distinct-style versions to produce → that many sibling projects. */
|
|
119
|
+
versions?: number;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* A worker pause that's waiting on the user's answers to dynamic clarifying
|
|
123
|
+
* questions. Mirrors the agent gate's `IAgentPendingApproval` (same `kind`
|
|
124
|
+
* discriminator seam) so a future non-clarification pause can reuse the field.
|
|
125
|
+
*/
|
|
126
|
+
export interface IDemoPendingClarification {
|
|
127
|
+
/** Why we paused. `clarification` today; the seam for future pause kinds. */
|
|
128
|
+
kind: "clarification";
|
|
129
|
+
/** The questions to ask (validated DemoQuestion[]). */
|
|
130
|
+
questions: DemoQuestion[];
|
|
131
|
+
/**
|
|
132
|
+
* The stage the worker paused BEFORE, so the resume branch re-enters at the
|
|
133
|
+
* right place (e.g. paused before PLANNING → resume runs PLANNING onward).
|
|
134
|
+
*/
|
|
135
|
+
resumeStage: EDemoVideoStatus;
|
|
136
|
+
/** One-line reason shown above the questions. */
|
|
137
|
+
reason?: string;
|
|
138
|
+
/** Epoch ms when we paused. */
|
|
139
|
+
createdAt: number;
|
|
140
|
+
}
|
|
141
|
+
/** One timeline-synced narration segment, authored from the rendered DemoSpec timeline (plan §6). */
|
|
142
|
+
export interface IDemoVideoScriptSegment {
|
|
143
|
+
/** Scene this narration belongs to (matches DemoScene.id). */
|
|
144
|
+
sceneId: string;
|
|
145
|
+
/** Narration copy spoken over this scene. */
|
|
146
|
+
text: string;
|
|
147
|
+
/** Offset from video start, ms. */
|
|
148
|
+
startMs: number;
|
|
149
|
+
/** Spoken duration, ms (post-TTS, speed-matched to the scene). */
|
|
150
|
+
durationMs: number;
|
|
151
|
+
}
|
|
152
|
+
/** Per-stage wall-clock timing (feedback_track_stage_timings). Persisted so we can spot stuck-vs-slow. */
|
|
153
|
+
export interface IDemoVideoStageTiming {
|
|
154
|
+
stage: EDemoVideoStatus;
|
|
155
|
+
/** Epoch ms when the stage started. */
|
|
156
|
+
startedAt: number;
|
|
157
|
+
/** Wall-clock duration of the stage, ms (set when it ends). */
|
|
158
|
+
ms?: number;
|
|
159
|
+
}
|
|
160
|
+
export interface IDemoVideoProjectModel {
|
|
161
|
+
userId: string;
|
|
162
|
+
status: EDemoVideoStatus;
|
|
163
|
+
inputs: IDemoVideoInputs;
|
|
164
|
+
/** Resolved brand tokens (extracted from inputs). Present once GATHERING completes. */
|
|
165
|
+
brand?: DemoBrand;
|
|
166
|
+
/**
|
|
167
|
+
* Screenshots the worker auto-captured from `inputs.websiteUrl` during
|
|
168
|
+
* GATHERING (Phase 6). Kept separate from user uploads so a redelivered job
|
|
169
|
+
* reuses them instead of re-launching the browser, and so the UI can show
|
|
170
|
+
* "captured from your site" vs "you uploaded".
|
|
171
|
+
*/
|
|
172
|
+
capturedScreenshotUrls?: string[];
|
|
173
|
+
/** The planned, re-renderable DemoSpec. Present once PLANNING completes. */
|
|
174
|
+
demoSpec?: DemoSpec;
|
|
175
|
+
/**
|
|
176
|
+
* "Request a change" — a pending natural-language edit to `demoSpec`. Set by
|
|
177
|
+
* the revise controller (with status reset to QUEUED); the worker's REVISING
|
|
178
|
+
* stage applies it to `demoSpec`, clears the stale outputs, then re-renders,
|
|
179
|
+
* and deletes this field in the same write (so a redelivery reuses the already-
|
|
180
|
+
* revised spec instead of re-applying the change). Absent in steady state.
|
|
181
|
+
*/
|
|
182
|
+
pendingRevision?: string;
|
|
183
|
+
/**
|
|
184
|
+
* Optional reference images attached to a pending "request a change" (e.g. the
|
|
185
|
+
* per-scene edit lets the user drop screenshots showing the look/layout they
|
|
186
|
+
* mean). Set alongside `pendingRevision`; the worker's REVISING stage passes
|
|
187
|
+
* them to the reviser as extra vision + citable screenshots, then deletes this
|
|
188
|
+
* field in the same write as `pendingRevision`. Absent in steady state.
|
|
189
|
+
*/
|
|
190
|
+
pendingRevisionImageUrls?: string[];
|
|
191
|
+
/**
|
|
192
|
+
* Set while the worker is PAUSED for dynamic clarifying questions
|
|
193
|
+
* (status AWAITING_INPUT). Mirrors the agent gate's `pendingApproval`: the
|
|
194
|
+
* worker writes this + returns, the UI renders the questions off the same
|
|
195
|
+
* onSnapshot stream, and POST /:id/answer merges the answers into
|
|
196
|
+
* `inputs.clarifyAnswers`, clears this field, and re-enqueues. The `kind`
|
|
197
|
+
* discriminator matches the agent gate's forward-looking pattern. Absent in
|
|
198
|
+
* steady state. See [[DemoQuestion]].
|
|
199
|
+
*/
|
|
200
|
+
pendingClarification?: IDemoPendingClarification;
|
|
201
|
+
/**
|
|
202
|
+
* Ids of clarifying questions this project has ALREADY paused on. The worker's
|
|
203
|
+
* deterministic asset asks (missing logo / screenshots) consult this so a
|
|
204
|
+
* question is asked at most once per project — a user who SKIPS an optional
|
|
205
|
+
* upload leaves no answer behind, and without this record the resumed run
|
|
206
|
+
* would re-detect the gap and pause again forever. Appended when pausing.
|
|
207
|
+
*/
|
|
208
|
+
clarifyAskedIds?: string[];
|
|
209
|
+
/** Silent draft render — the timeline source of truth (plan §4 stage 3). */
|
|
210
|
+
draftMp4Url?: string;
|
|
211
|
+
/** Final muxed MP4 (voiceover + draft). The deliverable. */
|
|
212
|
+
finalMp4Url?: string;
|
|
213
|
+
/** Poster still for the library card. */
|
|
214
|
+
posterUrl?: string;
|
|
215
|
+
/** Timeline-synced narration. */
|
|
216
|
+
script?: IDemoVideoScriptSegment[];
|
|
217
|
+
/** Muxed-in narration track (pre-mux audio asset). */
|
|
218
|
+
voiceoverUrl?: string;
|
|
219
|
+
/**
|
|
220
|
+
* Background-music bed mixed under the narration (ducked). Selected from the
|
|
221
|
+
* curated catalog by DemoSpec style. Persisted for observability + redelivery
|
|
222
|
+
* reuse. Absent when no reachable track was found (music is best-effort).
|
|
223
|
+
*/
|
|
224
|
+
musicUrl?: string;
|
|
225
|
+
/** License attribution string for the selected music bed (curated → Pixabay). */
|
|
226
|
+
musicAttribution?: string;
|
|
227
|
+
/** Total video duration, ms (sum of scene durations). */
|
|
228
|
+
durationMs?: number;
|
|
229
|
+
/** Output geometry, mirrors demoSpec.aspect for cheap library queries. */
|
|
230
|
+
aspect?: DemoSpec["aspect"];
|
|
231
|
+
/** Per-stage timings for observability (persisted into the doc, not a side trace.json). */
|
|
232
|
+
stageTimings?: IDemoVideoStageTiming[];
|
|
233
|
+
estimatedCredits?: number;
|
|
234
|
+
totalCreditsUsed?: number;
|
|
235
|
+
errorMessage?: string;
|
|
236
|
+
errorCode?: string;
|
|
237
|
+
/** Mirrors IVideoJobModel — flags a job whose refund-on-failure path itself threw. */
|
|
238
|
+
creditReconciliationStatus?: "completed" | "pending";
|
|
239
|
+
creditReconciliationError?: string;
|
|
240
|
+
lastHeartbeatAt?: FieldValue;
|
|
241
|
+
createdAt: FieldValue;
|
|
242
|
+
updatedAt: FieldValue;
|
|
243
|
+
}
|
|
244
|
+
//# sourceMappingURL=demoVideoProject.model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"demoVideoProject.model.d.ts","sourceRoot":"","sources":["../../src/models/demoVideoProject.model.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { FieldValue } from "firebase-admin/firestore";
|
|
2
|
+
/**
|
|
3
|
+
* GitHub OAuth connection — the v2 "private repo" input source for the SaaS Demo
|
|
4
|
+
* Video generator (plan §5, Phase 9). v1 read only PUBLIC repos by URL (no auth);
|
|
5
|
+
* this lets a user connect their GitHub account so the gather stage can read
|
|
6
|
+
* brand tokens + features from their PRIVATE repositories too.
|
|
7
|
+
*
|
|
8
|
+
* One doc per user (doc id = userId) — a user has at most one GitHub connection.
|
|
9
|
+
* The access token is stored ENCRYPTED at rest via the shared token vault
|
|
10
|
+
* (AES-256-GCM, `SOCIAL_TOKEN_ENC_KEY`), never as plaintext: a DB export must not
|
|
11
|
+
* leak repo access. Only workers / Cloud Functions decrypt it at call time.
|
|
12
|
+
*
|
|
13
|
+
* Classic GitHub OAuth App tokens don't expire and carry no refresh token, so we
|
|
14
|
+
* store just the (encrypted) access token + the granted scopes + display fields.
|
|
15
|
+
*/
|
|
16
|
+
export interface IGithubConnectionModel {
|
|
17
|
+
/** Owning user (also the doc id — one connection per user). */
|
|
18
|
+
userId: string;
|
|
19
|
+
/** GitHub numeric account id (stable across renames). */
|
|
20
|
+
githubUserId: number;
|
|
21
|
+
/** GitHub login/handle (display). */
|
|
22
|
+
githubLogin: string;
|
|
23
|
+
/** Avatar for the "Connected as @login" UI. */
|
|
24
|
+
avatarUrl?: string;
|
|
25
|
+
/** Scopes GitHub actually granted (e.g. ["read:user", "repo"]). */
|
|
26
|
+
scopes: string[];
|
|
27
|
+
/**
|
|
28
|
+
* OAuth access token, ENCRYPTED via the shared token vault. Never store or log
|
|
29
|
+
* plaintext. Decrypt with `decryptToken` only inside a worker / Cloud Function.
|
|
30
|
+
*/
|
|
31
|
+
accessTokenEnc: string;
|
|
32
|
+
connectedAt: FieldValue;
|
|
33
|
+
updatedAt: FieldValue;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=githubConnection.model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"githubConnection.model.d.ts","sourceRoot":"","sources":["../../src/models/githubConnection.model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,sBAAsB;IACrC,+DAA+D;IAC/D,MAAM,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,YAAY,EAAE,MAAM,CAAC;IACrB,qCAAqC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mEAAmE;IACnE,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB;;;OAGG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,UAAU,CAAC;IACxB,SAAS,EAAE,UAAU,CAAC;CACvB"}
|
package/lib/models/index.d.ts
CHANGED
|
@@ -10,4 +10,7 @@ export * from "./share.model";
|
|
|
10
10
|
export * from "./ref.model";
|
|
11
11
|
export * from "./mediaUpload.model";
|
|
12
12
|
export * from "./social.model";
|
|
13
|
+
export * from "./demoVideoProject.model";
|
|
14
|
+
export * from "./githubConnection.model";
|
|
15
|
+
export * from "./outreach.model";
|
|
13
16
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC"}
|
package/lib/models/index.js
CHANGED
|
@@ -26,3 +26,6 @@ __exportStar(require("./share.model"), exports);
|
|
|
26
26
|
__exportStar(require("./ref.model"), exports);
|
|
27
27
|
__exportStar(require("./mediaUpload.model"), exports);
|
|
28
28
|
__exportStar(require("./social.model"), exports);
|
|
29
|
+
__exportStar(require("./demoVideoProject.model"), exports);
|
|
30
|
+
__exportStar(require("./githubConnection.model"), exports);
|
|
31
|
+
__exportStar(require("./outreach.model"), exports);
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { FieldValue } from "firebase-admin/firestore";
|
|
2
|
+
import type { VideoPlan } from "../schemas/videoPlan.schema";
|
|
3
|
+
/**
|
|
4
|
+
* Reach — Personalized Video Outreach data models.
|
|
5
|
+
*
|
|
6
|
+
* Collection layout:
|
|
7
|
+
* /outreachTemplates/{templateId} — IOutreachTemplateModel
|
|
8
|
+
* /outreachCampaigns/{campaignId} — IOutreachCampaignModel
|
|
9
|
+
* /outreachRecipients/{recipientId}— IOutreachRecipientModel (campaignId FK, top-level for easy querying)
|
|
10
|
+
* /personalizedVideos/{videoId} — IPersonalizedVideoModel
|
|
11
|
+
* /videoViews/{viewId} — IVideoViewModel (engagement events)
|
|
12
|
+
*/
|
|
13
|
+
/** How the base video is generated for this template. */
|
|
14
|
+
export type OutreachVideoSource = "avatar" | "produced_scene";
|
|
15
|
+
/**
|
|
16
|
+
* Outreach template — the reusable blueprint for a class of personalized videos.
|
|
17
|
+
* Contains a `scriptTemplate` with `{{variable}}` placeholders; the controller
|
|
18
|
+
* extracts the variable names at create/update time and stores them in `variables`
|
|
19
|
+
* so the generate endpoint can validate that all required fields are supplied.
|
|
20
|
+
*/
|
|
21
|
+
export interface IOutreachTemplateModel {
|
|
22
|
+
id?: string;
|
|
23
|
+
userId: string;
|
|
24
|
+
name: string;
|
|
25
|
+
source: OutreachVideoSource;
|
|
26
|
+
scriptTemplate: string;
|
|
27
|
+
/**
|
|
28
|
+
* Variable names extracted from `scriptTemplate` at save time.
|
|
29
|
+
* Used to validate recipient payloads at generate time.
|
|
30
|
+
*/
|
|
31
|
+
variables: string[];
|
|
32
|
+
modelKey?: string;
|
|
33
|
+
hostedAvatarId?: string;
|
|
34
|
+
hostedVoiceId?: string;
|
|
35
|
+
ttsVoiceId?: string;
|
|
36
|
+
ttsLanguageCode?: string;
|
|
37
|
+
mode?: string;
|
|
38
|
+
/**
|
|
39
|
+
* An authored multi-scene plan (Phase 4 differentiator). Planned ONCE at
|
|
40
|
+
* template-build time; the campaign fan-out deep-clones it per recipient,
|
|
41
|
+
* resolves `{{variables}}` inside scene voiceover/overlay/title text, applies
|
|
42
|
+
* the recipient locale, then enqueues a normal agent render (AGENT_RUN_JOBS)
|
|
43
|
+
* — no re-planning per recipient. Absent for `avatar` templates.
|
|
44
|
+
*/
|
|
45
|
+
scenePlan?: VideoPlan;
|
|
46
|
+
/**
|
|
47
|
+
* Default locale (BCP-47, e.g. "en", "fr", "id") used when a recipient has no
|
|
48
|
+
* per-recipient `recipientLocale`. Applies to both avatar TTS and produced
|
|
49
|
+
* voiceover. Falls back to the avatar `ttsLanguageCode` / plan voice when unset.
|
|
50
|
+
*/
|
|
51
|
+
defaultLocale?: string;
|
|
52
|
+
brandName?: string;
|
|
53
|
+
logoUrl?: string;
|
|
54
|
+
primaryColorHex?: string;
|
|
55
|
+
ctaLabel?: string;
|
|
56
|
+
ctaUrl?: string;
|
|
57
|
+
createdAt: FieldValue | string;
|
|
58
|
+
updatedAt: FieldValue | string;
|
|
59
|
+
}
|
|
60
|
+
export type OutreachCampaignStatus = "draft" | "running" | "completed" | "paused" | "failed";
|
|
61
|
+
export interface IOutreachCampaignModel {
|
|
62
|
+
id?: string;
|
|
63
|
+
userId: string;
|
|
64
|
+
templateId: string;
|
|
65
|
+
name: string;
|
|
66
|
+
status: OutreachCampaignStatus;
|
|
67
|
+
recipientCount: number;
|
|
68
|
+
pendingCount: number;
|
|
69
|
+
queuedCount: number;
|
|
70
|
+
processingCount: number;
|
|
71
|
+
completedCount: number;
|
|
72
|
+
failedCount: number;
|
|
73
|
+
skippedCount: number;
|
|
74
|
+
totalCreditsUsed: number;
|
|
75
|
+
startedAt?: FieldValue | string;
|
|
76
|
+
completedAt?: FieldValue | string;
|
|
77
|
+
createdAt: FieldValue | string;
|
|
78
|
+
updatedAt: FieldValue | string;
|
|
79
|
+
}
|
|
80
|
+
export type OutreachRecipientStatus = "pending" | "queued" | "processing" | "completed" | "failed" | "skipped";
|
|
81
|
+
export interface IOutreachRecipientModel {
|
|
82
|
+
id?: string;
|
|
83
|
+
userId: string;
|
|
84
|
+
campaignId: string;
|
|
85
|
+
templateId: string;
|
|
86
|
+
name?: string;
|
|
87
|
+
company?: string;
|
|
88
|
+
email?: string;
|
|
89
|
+
/** Arbitrary variable overrides merged on top of name/company/email. */
|
|
90
|
+
variables?: Record<string, string>;
|
|
91
|
+
/**
|
|
92
|
+
* BCP-47 locale for THIS recipient (e.g. "fr", "id", "ko"). Overrides the
|
|
93
|
+
* template `defaultLocale`. Drives avatar TTS language and produced-scene
|
|
94
|
+
* voiceover language — the multilingual wedge: one list → N languages.
|
|
95
|
+
*/
|
|
96
|
+
recipientLocale?: string;
|
|
97
|
+
/** Prospect's website — surfaced as product-aware context for produced scenes. */
|
|
98
|
+
websiteUrl?: string;
|
|
99
|
+
/** Prospect's logo — usable as a dynamic background / brand element. */
|
|
100
|
+
logoUrl?: string;
|
|
101
|
+
status: OutreachRecipientStatus;
|
|
102
|
+
personalizedVideoId?: string;
|
|
103
|
+
/** Set for `avatar` source — FK to the underlying videoJobs doc. */
|
|
104
|
+
videoJobId?: string;
|
|
105
|
+
/** Set for `produced_scene` source — FK to the agent run that produces the video. */
|
|
106
|
+
agentRunId?: string;
|
|
107
|
+
/** Set for `produced_scene` source — FK to the agent project (where the rendered MP4 lands). */
|
|
108
|
+
agentProjectId?: string;
|
|
109
|
+
videoUrl?: string;
|
|
110
|
+
thumbnailUrl?: string;
|
|
111
|
+
landingPageSlug?: string;
|
|
112
|
+
landingPageUrl?: string;
|
|
113
|
+
errorMessage?: string;
|
|
114
|
+
watchedPct?: number;
|
|
115
|
+
ctaClicked?: boolean;
|
|
116
|
+
booked?: boolean;
|
|
117
|
+
viewCount?: number;
|
|
118
|
+
createdAt: FieldValue | string;
|
|
119
|
+
updatedAt: FieldValue | string;
|
|
120
|
+
}
|
|
121
|
+
export type PersonalizedVideoStatus = "queued" | "processing" | "completed" | "failed";
|
|
122
|
+
export interface IPersonalizedVideoModel {
|
|
123
|
+
id?: string;
|
|
124
|
+
userId: string;
|
|
125
|
+
templateId: string;
|
|
126
|
+
campaignId?: string;
|
|
127
|
+
recipientId?: string;
|
|
128
|
+
recipientName?: string;
|
|
129
|
+
recipientCompany?: string;
|
|
130
|
+
recipientEmail?: string;
|
|
131
|
+
recipientVariables?: Record<string, string>;
|
|
132
|
+
resolvedScript: string;
|
|
133
|
+
/** Which generation path produced this video. Defaults to "avatar" for legacy docs. */
|
|
134
|
+
source?: OutreachVideoSource;
|
|
135
|
+
/** Locale the video was rendered in (recipient override or template default). */
|
|
136
|
+
locale?: string;
|
|
137
|
+
/**
|
|
138
|
+
* For `avatar` source — FK to the videoJobs doc whose `finalVideoUrl` is the
|
|
139
|
+
* source of truth. Optional because produced_scene videos use the agent FKs
|
|
140
|
+
* below instead.
|
|
141
|
+
*/
|
|
142
|
+
videoJobId?: string;
|
|
143
|
+
/** For `produced_scene` source — FK to the agent run. */
|
|
144
|
+
agentRunId?: string;
|
|
145
|
+
/**
|
|
146
|
+
* For `produced_scene` source — FK to the agent project. The auto-render
|
|
147
|
+
* writes the final MP4 to `agentProjects/{id}.lastRender.mp4Url`, so the
|
|
148
|
+
* reconciliation sweep reads completion from there.
|
|
149
|
+
*/
|
|
150
|
+
agentProjectId?: string;
|
|
151
|
+
status: PersonalizedVideoStatus;
|
|
152
|
+
videoUrl?: string;
|
|
153
|
+
thumbnailUrl?: string;
|
|
154
|
+
landingPageSlug?: string;
|
|
155
|
+
landingPageUrl?: string;
|
|
156
|
+
estimatedCredits?: number;
|
|
157
|
+
createdAt: FieldValue | string;
|
|
158
|
+
updatedAt: FieldValue | string;
|
|
159
|
+
}
|
|
160
|
+
/** Engagement event types for a personalized video landing page. */
|
|
161
|
+
export type VideoViewEvent = "play" | "complete" | "cta_click" | "booked" | "pause";
|
|
162
|
+
export interface IVideoViewModel {
|
|
163
|
+
id?: string;
|
|
164
|
+
personalizedVideoId: string;
|
|
165
|
+
campaignId?: string;
|
|
166
|
+
recipientId?: string;
|
|
167
|
+
/** IP address hash (not raw IP — privacy). */
|
|
168
|
+
ipHash?: string;
|
|
169
|
+
event: VideoViewEvent;
|
|
170
|
+
watchedPct?: number;
|
|
171
|
+
referrer?: string;
|
|
172
|
+
userAgent?: string;
|
|
173
|
+
createdAt: FieldValue | string;
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=outreach.model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outreach.model.d.ts","sourceRoot":"","sources":["../../src/models/outreach.model.ts"],"names":[],"mappings":"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"}
|
|
@@ -186,6 +186,10 @@ export interface IVideoJobModel {
|
|
|
186
186
|
* directly and skip TTS regeneration. */
|
|
187
187
|
ttsPreviewIsComplete?: boolean;
|
|
188
188
|
audioDurationSeconds?: number;
|
|
189
|
+
avatarEngine?: "kling" | "heygen" | "tavus";
|
|
190
|
+
hostedAvatarId?: string;
|
|
191
|
+
hostedVoiceId?: string;
|
|
192
|
+
replicaId?: string;
|
|
189
193
|
project?: Project;
|
|
190
194
|
agentRunId?: string;
|
|
191
195
|
coverThumbnailDataUrl?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"video.model.d.ts","sourceRoot":"","sources":["../../src/models/video.model.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"video.model.d.ts","sourceRoot":"","sources":["../../src/models/video.model.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,8 @@ export declare const BrandColorsSchema: z.ZodObject<{
|
|
|
13
13
|
export declare const BrandFontsSchema: z.ZodObject<{
|
|
14
14
|
heading: z.ZodOptional<z.ZodString>;
|
|
15
15
|
body: z.ZodOptional<z.ZodString>;
|
|
16
|
+
headingFileUrl: z.ZodOptional<z.ZodString>;
|
|
17
|
+
bodyFileUrl: z.ZodOptional<z.ZodString>;
|
|
16
18
|
}, z.core.$strip>;
|
|
17
19
|
export declare const BrandIdentitySchema: z.ZodObject<{
|
|
18
20
|
brandName: z.ZodOptional<z.ZodString>;
|
|
@@ -39,6 +41,8 @@ export declare const BrandKitSchema: z.ZodObject<{
|
|
|
39
41
|
fonts: z.ZodDefault<z.ZodObject<{
|
|
40
42
|
heading: z.ZodOptional<z.ZodString>;
|
|
41
43
|
body: z.ZodOptional<z.ZodString>;
|
|
44
|
+
headingFileUrl: z.ZodOptional<z.ZodString>;
|
|
45
|
+
bodyFileUrl: z.ZodOptional<z.ZodString>;
|
|
42
46
|
}, z.core.$strip>>;
|
|
43
47
|
voice: z.ZodOptional<z.ZodObject<{
|
|
44
48
|
gender: z.ZodOptional<z.ZodEnum<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brandKit.schema.d.ts","sourceRoot":"","sources":["../../src/schemas/brandKit.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB;;;;GAIG;AAEH,eAAO,MAAM,iBAAiB;;;;;iBAM5B,CAAC;AAEH,eAAO,MAAM,gBAAgB
|
|
1
|
+
{"version":3,"file":"brandKit.schema.d.ts","sourceRoot":"","sources":["../../src/schemas/brandKit.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB;;;;GAIG;AAEH,eAAO,MAAM,iBAAiB;;;;;iBAM5B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;iBAa3B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;iBAI9B,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;iBAG/B,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkBzB,CAAC;AAEH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AACtD,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC"}
|
|
@@ -19,6 +19,16 @@ exports.BrandColorsSchema = zod_1.z.object({
|
|
|
19
19
|
exports.BrandFontsSchema = zod_1.z.object({
|
|
20
20
|
heading: zod_1.z.string().optional(),
|
|
21
21
|
body: zod_1.z.string().optional(),
|
|
22
|
+
/**
|
|
23
|
+
* Optional user-supplied font FILES (woff2/woff/ttf/otf URLs). When present the
|
|
24
|
+
* demo render loads them via FontFace and uses them verbatim — the way to get
|
|
25
|
+
* an exact proprietary/non-Google brand font ("Circular", "Satoshi", a custom
|
|
26
|
+
* foundry face) into the video. Without a file, a proprietary family resolves
|
|
27
|
+
* to the nearest same-class Google font at render time. See the demo-components
|
|
28
|
+
* font registry (`resolveRenderFont`).
|
|
29
|
+
*/
|
|
30
|
+
headingFileUrl: zod_1.z.string().url().optional(),
|
|
31
|
+
bodyFileUrl: zod_1.z.string().url().optional(),
|
|
22
32
|
});
|
|
23
33
|
exports.BrandIdentitySchema = zod_1.z.object({
|
|
24
34
|
brandName: zod_1.z.string().optional(),
|