screenci 0.0.83 → 0.0.85
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/cli.d.ts +16 -3
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +138 -32
- package/dist/cli.js.map +1 -1
- package/dist/docs/video-sources/camera-and-zooming.screenci.js +1 -2
- package/dist/docs/video-sources/camera-and-zooming.screenci.js.map +1 -1
- package/dist/docs/video-sources/installation.screenci.js +1 -2
- package/dist/docs/video-sources/installation.screenci.js.map +1 -1
- package/dist/docs/video-sources/languages.screenci.js +3 -1
- package/dist/docs/video-sources/languages.screenci.js.map +1 -1
- package/dist/docs/video-sources/locator-highlight-animated.screenci.js +0 -1
- package/dist/docs/video-sources/locator-highlight-animated.screenci.js.map +1 -1
- package/dist/docs/video-sources/locator-highlight-still.screenci.js +0 -1
- package/dist/docs/video-sources/locator-highlight-still.screenci.js.map +1 -1
- package/dist/docs/video-sources/narration.screenci.js +3 -1
- package/dist/docs/video-sources/narration.screenci.js.map +1 -1
- package/dist/docs/video-sources/public-urls-and-embeds.screenci.js +3 -1
- package/dist/docs/video-sources/public-urls-and-embeds.screenci.js.map +1 -1
- package/dist/docs/video-sources/speaking-style.screenci.js +79 -14
- package/dist/docs/video-sources/speaking-style.screenci.js.map +1 -1
- package/dist/docs/video-sources/studio.screenci.js +3 -1
- package/dist/docs/video-sources/studio.screenci.js.map +1 -1
- package/dist/docs/video-sources/vertical-video.screenci.js +1 -1
- package/dist/src/anonSession.d.ts +40 -0
- package/dist/src/anonSession.d.ts.map +1 -0
- package/dist/src/anonSession.js +91 -0
- package/dist/src/anonSession.js.map +1 -0
- package/dist/src/asset.d.ts +11 -1
- package/dist/src/asset.d.ts.map +1 -1
- package/dist/src/asset.js +122 -52
- package/dist/src/asset.js.map +1 -1
- package/dist/src/audio.d.ts.map +1 -1
- package/dist/src/audio.js +2 -2
- package/dist/src/audio.js.map +1 -1
- package/dist/src/cue.d.ts.map +1 -1
- package/dist/src/cue.js +12 -4
- package/dist/src/cue.js.map +1 -1
- package/dist/src/disableAnimations.d.ts +33 -0
- package/dist/src/disableAnimations.d.ts.map +1 -0
- package/dist/src/disableAnimations.js +50 -0
- package/dist/src/disableAnimations.js.map +1 -0
- package/dist/src/events.d.ts +5 -1
- package/dist/src/events.d.ts.map +1 -1
- package/dist/src/events.js +4 -0
- package/dist/src/events.js.map +1 -1
- package/dist/src/git.d.ts +2 -0
- package/dist/src/git.d.ts.map +1 -1
- package/dist/src/git.js +1 -1
- package/dist/src/git.js.map +1 -1
- package/dist/src/init.d.ts +30 -8
- package/dist/src/init.d.ts.map +1 -1
- package/dist/src/init.js +112 -57
- package/dist/src/init.js.map +1 -1
- package/dist/src/instrument.d.ts.map +1 -1
- package/dist/src/instrument.js +5 -2
- package/dist/src/instrument.js.map +1 -1
- package/dist/src/linkSession.d.ts +13 -10
- package/dist/src/linkSession.d.ts.map +1 -1
- package/dist/src/linkSession.js +33 -29
- package/dist/src/linkSession.js.map +1 -1
- package/dist/src/missingAssetLog.d.ts +8 -0
- package/dist/src/missingAssetLog.d.ts.map +1 -0
- package/dist/src/missingAssetLog.js +16 -0
- package/dist/src/missingAssetLog.js.map +1 -0
- package/dist/src/recordingData.d.ts +1 -1
- package/dist/src/recordingData.d.ts.map +1 -1
- package/dist/src/runtimeContext.d.ts +17 -0
- package/dist/src/runtimeContext.d.ts.map +1 -1
- package/dist/src/runtimeContext.js +3 -0
- package/dist/src/runtimeContext.js.map +1 -1
- package/dist/src/runtimeMode.d.ts.map +1 -1
- package/dist/src/runtimeMode.js +8 -0
- package/dist/src/runtimeMode.js.map +1 -1
- package/dist/src/screenshot.d.ts.map +1 -1
- package/dist/src/screenshot.js +7 -0
- package/dist/src/screenshot.js.map +1 -1
- package/dist/src/types.d.ts +37 -1
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js.map +1 -1
- package/dist/src/video.d.ts.map +1 -1
- package/dist/src/video.js +7 -0
- package/dist/src/video.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/skills/screenci/SKILL.md +10 -9
- package/skills/screenci/references/init.md +5 -6
- package/skills/screenci/references/record.md +9 -7
- package/dist/docs/video-sources/landing.screenci.d.ts +0 -2
- package/dist/docs/video-sources/landing.screenci.d.ts.map +0 -1
- package/dist/docs/video-sources/landing.screenci.js +0 -34
- package/dist/docs/video-sources/landing.screenci.js.map +0 -1
|
@@ -1,49 +1,114 @@
|
|
|
1
|
-
import { hide, video, voices } from 'screenci';
|
|
1
|
+
import { hide, modelTypes, video, voices } from 'screenci';
|
|
2
2
|
// Each cue carries its own style prompt, so the same voice adapts its delivery
|
|
3
|
-
// per line without any audio editing.
|
|
4
|
-
|
|
3
|
+
// per line without any audio editing. Write the direction in plain English,
|
|
4
|
+
// however far out you want to go: the expressive model takes styles from a
|
|
5
|
+
// straight product guide all the way to a swashbuckling pirate. The style prompt
|
|
6
|
+
// for each line is overlaid on screen as a text card (one named overlay per
|
|
7
|
+
// style, so each renders its own asset).
|
|
8
|
+
function styleCard(text) {
|
|
9
|
+
return {
|
|
10
|
+
html: '<div class="ss-card">' +
|
|
11
|
+
'<span class="ss-kicker">Speaking style</span>' +
|
|
12
|
+
`<span class="ss-text">${text}</span>` +
|
|
13
|
+
'</div>',
|
|
14
|
+
css: `
|
|
15
|
+
.ss-card {
|
|
16
|
+
display: inline-flex;
|
|
17
|
+
flex-direction: column;
|
|
18
|
+
gap: 6px;
|
|
19
|
+
box-sizing: border-box;
|
|
20
|
+
padding: 18px 28px;
|
|
21
|
+
border-radius: 18px;
|
|
22
|
+
font-family: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', sans-serif;
|
|
23
|
+
color: #ffffff;
|
|
24
|
+
background: linear-gradient(135deg, #6366f1 0%, #8b5cf6 55%, #ec4899 100%);
|
|
25
|
+
border: 1px solid rgba(255, 255, 255, 0.28);
|
|
26
|
+
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.35);
|
|
27
|
+
}
|
|
28
|
+
.ss-kicker {
|
|
29
|
+
font-size: 13px;
|
|
30
|
+
font-weight: 600;
|
|
31
|
+
letter-spacing: 0.18em;
|
|
32
|
+
text-transform: uppercase;
|
|
33
|
+
opacity: 0.85;
|
|
34
|
+
}
|
|
35
|
+
.ss-text { font-size: 30px; font-weight: 700; letter-spacing: -0.01em; }
|
|
36
|
+
`,
|
|
37
|
+
x: 96,
|
|
38
|
+
y: 880,
|
|
39
|
+
width: 1000,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
video
|
|
43
|
+
.overlays({
|
|
44
|
+
sHook: styleCard('Warm and intriguing'),
|
|
45
|
+
sPirate: styleCard('🏴☠️ Boisterous pirate captain'),
|
|
46
|
+
sSports: styleCard('🎙️ Breathless sportscaster'),
|
|
47
|
+
sWhisper: styleCard('🤫 Hushed, conspiratorial whisper'),
|
|
48
|
+
sOutro: styleCard('Confident and conclusive'),
|
|
49
|
+
})
|
|
50
|
+
.narration({
|
|
5
51
|
en: {
|
|
6
52
|
hook: {
|
|
7
53
|
cue: 'Every narration line can have its own speaking style.',
|
|
8
54
|
voice: {
|
|
9
55
|
name: voices.Nora,
|
|
56
|
+
modelType: modelTypes.expressive,
|
|
10
57
|
style: 'Warm and intriguing, drawing the viewer in.',
|
|
11
58
|
},
|
|
12
59
|
},
|
|
13
|
-
|
|
14
|
-
cue: '
|
|
60
|
+
pirate: {
|
|
61
|
+
cue: 'Arr! Even a swashbuckling pirate can guide the tour, if that be the style ye prompt.',
|
|
15
62
|
voice: {
|
|
16
63
|
name: voices.Nora,
|
|
17
|
-
|
|
64
|
+
modelType: modelTypes.expressive,
|
|
65
|
+
style: 'A boisterous pirate captain, gravelly and full of swagger, rolling every R.',
|
|
18
66
|
},
|
|
19
67
|
},
|
|
20
|
-
|
|
21
|
-
cue: '
|
|
68
|
+
sportscaster: {
|
|
69
|
+
cue: 'And the feature ships, the crowd goes wild, what a release this has been!',
|
|
22
70
|
voice: {
|
|
23
71
|
name: voices.Nora,
|
|
24
|
-
|
|
72
|
+
modelType: modelTypes.expressive,
|
|
73
|
+
style: 'A breathless sportscaster calling a last-second play-by-play.',
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
whisper: {
|
|
77
|
+
cue: 'Or lean right in, because the best part is a little secret.',
|
|
78
|
+
voice: {
|
|
79
|
+
name: voices.Nora,
|
|
80
|
+
modelType: modelTypes.expressive,
|
|
81
|
+
style: 'A hushed, conspiratorial whisper, close to the mic.',
|
|
25
82
|
},
|
|
26
83
|
},
|
|
27
84
|
outro: {
|
|
28
85
|
cue: 'Write the style in plain English. The voice does the rest.',
|
|
29
86
|
voice: {
|
|
30
87
|
name: voices.Nora,
|
|
88
|
+
modelType: modelTypes.expressive,
|
|
31
89
|
style: 'Confident and conclusive, landing the final thought.',
|
|
32
90
|
},
|
|
33
91
|
},
|
|
34
92
|
},
|
|
35
|
-
})('Per-cue speaking style', async ({ page, narration }) => {
|
|
93
|
+
})('Per-cue speaking style', async ({ page, narration, overlays }) => {
|
|
36
94
|
await hide(async () => {
|
|
37
95
|
await page.goto('https://screenci.com/docs/guides/narration', {
|
|
38
96
|
waitUntil: 'domcontentloaded',
|
|
39
97
|
});
|
|
40
98
|
await page.getByRole('heading').first().waitFor();
|
|
41
99
|
});
|
|
42
|
-
|
|
43
|
-
|
|
100
|
+
// Hold each cue's style card up while that line is spoken.
|
|
101
|
+
async function line(card, cue) {
|
|
102
|
+
await card.start();
|
|
103
|
+
await cue();
|
|
104
|
+
await card.end();
|
|
105
|
+
}
|
|
106
|
+
await line(overlays.sHook, narration.hook);
|
|
107
|
+
await line(overlays.sPirate, narration.pirate);
|
|
44
108
|
await page.evaluate(() => window.scrollBy({ top: 400, behavior: 'smooth' }));
|
|
45
109
|
await page.waitForTimeout(1200);
|
|
46
|
-
await narration.
|
|
47
|
-
await narration.
|
|
110
|
+
await line(overlays.sSports, narration.sportscaster);
|
|
111
|
+
await line(overlays.sWhisper, narration.whisper);
|
|
112
|
+
await line(overlays.sOutro, narration.outro);
|
|
48
113
|
});
|
|
49
114
|
//# sourceMappingURL=speaking-style.screenci.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"speaking-style.screenci.js","sourceRoot":"","sources":["../../../docs/video-sources/speaking-style.screenci.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"speaking-style.screenci.js","sourceRoot":"","sources":["../../../docs/video-sources/speaking-style.screenci.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,7 +26,9 @@ video.narration({
|
|
|
26
26
|
// session (SCREENCI_APP_STORAGE_STATE, see screenci.config.ts). When it is not
|
|
27
27
|
// configured (e.g. CI without the session secret), skip instead of timing out
|
|
28
28
|
// on the login page.
|
|
29
|
-
|
|
29
|
+
if (!process.env.SCREENCI_APP_STORAGE_STATE) {
|
|
30
|
+
throw new Error('Not logged in. Record via `scripts/screenci.sh docs <env> record` (it signs in first), or set SCREENCI_APP_STORAGE_STATE to a Playwright storageState.');
|
|
31
|
+
}
|
|
30
32
|
// Navigate from the dashboard into Studio without showing it in the recording.
|
|
31
33
|
await hide(async () => {
|
|
32
34
|
await page.goto(appUrl);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"studio.screenci.js","sourceRoot":"","sources":["../../../docs/video-sources/studio.screenci.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjE,KAAK,CAAC,GAAG,CAAC;IACR,aAAa,EAAE;QACb,SAAS,EAAE;YACT,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,wBAAwB,EAAE;SAChE;KACF;CACF,CAAC,CAAA;AAEF,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,2BAA2B,CAAA;AAE1E,+EAA+E;AAC/E,iFAAiF;AACjF,oFAAoF;AACpF,iFAAiF;AACjF,4EAA4E;AAC5E,KAAK,CAAC,SAAS,CAAC;IACd,EAAE,EAAE;QACF,KAAK,EAAE,oEAAoE;QAC3E,IAAI,EAAE,iGAAiG;KACxG;IACD,EAAE,EAAE;QACF,KAAK,EACH,sFAAsF;QACxF,IAAI,EAAE,mHAAmH;KAC1H;CACF,CAAC,CAAC,oBAAoB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE;IACrD,0EAA0E;IAC1E,+EAA+E;IAC/E,8EAA8E;IAC9E,qBAAqB;IACrB,
|
|
1
|
+
{"version":3,"file":"studio.screenci.js","sourceRoot":"","sources":["../../../docs/video-sources/studio.screenci.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export declare const ANON_TOKEN_HEADER = "X-ScreenCI-Anon-Token";
|
|
2
|
+
export declare const SECRET_HEADER = "X-ScreenCI-Secret";
|
|
3
|
+
export type CliCredential = {
|
|
4
|
+
header: typeof SECRET_HEADER;
|
|
5
|
+
value: string;
|
|
6
|
+
} | {
|
|
7
|
+
header: typeof ANON_TOKEN_HEADER;
|
|
8
|
+
value: string;
|
|
9
|
+
};
|
|
10
|
+
export declare function secretCredential(secret: string): CliCredential;
|
|
11
|
+
export declare function anonCredential(token: string): CliCredential;
|
|
12
|
+
export declare function deleteAnonSessionFile(screenciDir: string): Promise<void>;
|
|
13
|
+
/**
|
|
14
|
+
* Reads the locally stored anon session token, minting and persisting a new
|
|
15
|
+
* one on first use in this project directory. Reused across every subsequent
|
|
16
|
+
* `record` so multiple videos land under the same anonymous trial.
|
|
17
|
+
*/
|
|
18
|
+
export declare function getOrCreateAnonToken(screenciDir: string): Promise<string>;
|
|
19
|
+
export type AnonSessionStatus = {
|
|
20
|
+
status: 'not_found';
|
|
21
|
+
} | {
|
|
22
|
+
status: 'expired';
|
|
23
|
+
} | {
|
|
24
|
+
status: 'pending';
|
|
25
|
+
} | {
|
|
26
|
+
status: 'claimed';
|
|
27
|
+
secret: string;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Checks the server-side status of a locally stored anon token before every
|
|
31
|
+
* upload attempt: still pending (proceed anonymously), claimed (the CLI
|
|
32
|
+
* should self-upgrade to the real secret), or expired/not found (start a
|
|
33
|
+
* fresh trial). Defaults to `pending` on a network failure so a transient
|
|
34
|
+
* outage doesn't block an otherwise-working anonymous upload.
|
|
35
|
+
*/
|
|
36
|
+
export declare function checkAnonSessionStatus(token: string, options?: {
|
|
37
|
+
backendUrl?: string;
|
|
38
|
+
fetchImpl?: typeof fetch;
|
|
39
|
+
}): Promise<AnonSessionStatus>;
|
|
40
|
+
//# sourceMappingURL=anonSession.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anonSession.d.ts","sourceRoot":"","sources":["../../src/anonSession.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,iBAAiB,0BAA0B,CAAA;AACxD,eAAO,MAAM,aAAa,sBAAsB,CAAA;AAEhD,MAAM,MAAM,aAAa,GACrB;IAAE,MAAM,EAAE,OAAO,aAAa,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC/C;IAAE,MAAM,EAAE,OAAO,iBAAiB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAEvD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAE9D;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAE3D;AA+BD,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CASf;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,CAOjB;AAED,MAAM,MAAM,iBAAiB,GACzB;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,GACvB;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GACrB;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GACrB;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAEzC;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;CAAO,GAC9D,OAAO,CAAC,iBAAiB,CAAC,CAwB5B"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { existsSync, mkdirSync } from 'fs';
|
|
2
|
+
import { readFile, writeFile, unlink } from 'fs/promises';
|
|
3
|
+
import { randomUUID } from 'crypto';
|
|
4
|
+
import { resolve } from 'path';
|
|
5
|
+
import { getDevBackendUrl } from './linkSession.js';
|
|
6
|
+
// Anonymous CLI trial: `screenci record` with no SCREENCI_SECRET uploads
|
|
7
|
+
// under a locally generated token instead of requiring an account up front.
|
|
8
|
+
// The token lives only in `.screenci/anon-session.json` and, server-side, in
|
|
9
|
+
// the anonymousSessions table (never printed or embedded in any URL).
|
|
10
|
+
const ANON_SESSION_FILE = 'anon-session.json';
|
|
11
|
+
export const ANON_TOKEN_HEADER = 'X-ScreenCI-Anon-Token';
|
|
12
|
+
export const SECRET_HEADER = 'X-ScreenCI-Secret';
|
|
13
|
+
export function secretCredential(secret) {
|
|
14
|
+
return { header: SECRET_HEADER, value: secret };
|
|
15
|
+
}
|
|
16
|
+
export function anonCredential(token) {
|
|
17
|
+
return { header: ANON_TOKEN_HEADER, value: token };
|
|
18
|
+
}
|
|
19
|
+
function getAnonSessionFilePath(screenciDir) {
|
|
20
|
+
return resolve(screenciDir, ANON_SESSION_FILE);
|
|
21
|
+
}
|
|
22
|
+
async function readAnonSessionFile(screenciDir) {
|
|
23
|
+
try {
|
|
24
|
+
const raw = await readFile(getAnonSessionFilePath(screenciDir), 'utf-8');
|
|
25
|
+
const parsed = JSON.parse(raw);
|
|
26
|
+
return typeof parsed.token === 'string' ? parsed.token : null;
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
async function writeAnonSessionFile(screenciDir, token) {
|
|
33
|
+
mkdirSync(screenciDir, { recursive: true });
|
|
34
|
+
await writeFile(getAnonSessionFilePath(screenciDir), `${JSON.stringify({ token }, null, 2)}\n`);
|
|
35
|
+
}
|
|
36
|
+
export async function deleteAnonSessionFile(screenciDir) {
|
|
37
|
+
const path = getAnonSessionFilePath(screenciDir);
|
|
38
|
+
if (!existsSync(path))
|
|
39
|
+
return;
|
|
40
|
+
try {
|
|
41
|
+
await unlink(path);
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
// Best-effort: a stale file left behind is harmless (a fresh token is
|
|
45
|
+
// minted on the next read if this one still resolves as expired).
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Reads the locally stored anon session token, minting and persisting a new
|
|
50
|
+
* one on first use in this project directory. Reused across every subsequent
|
|
51
|
+
* `record` so multiple videos land under the same anonymous trial.
|
|
52
|
+
*/
|
|
53
|
+
export async function getOrCreateAnonToken(screenciDir) {
|
|
54
|
+
const existing = await readAnonSessionFile(screenciDir);
|
|
55
|
+
if (existing)
|
|
56
|
+
return existing;
|
|
57
|
+
const token = randomUUID();
|
|
58
|
+
await writeAnonSessionFile(screenciDir, token);
|
|
59
|
+
return token;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Checks the server-side status of a locally stored anon token before every
|
|
63
|
+
* upload attempt: still pending (proceed anonymously), claimed (the CLI
|
|
64
|
+
* should self-upgrade to the real secret), or expired/not found (start a
|
|
65
|
+
* fresh trial). Defaults to `pending` on a network failure so a transient
|
|
66
|
+
* outage doesn't block an otherwise-working anonymous upload.
|
|
67
|
+
*/
|
|
68
|
+
export async function checkAnonSessionStatus(token, options = {}) {
|
|
69
|
+
const backendUrl = options.backendUrl ?? getDevBackendUrl();
|
|
70
|
+
const fetchImpl = options.fetchImpl ?? fetch;
|
|
71
|
+
try {
|
|
72
|
+
const response = await fetchImpl(`${backendUrl}/cli/anon-session-status`, {
|
|
73
|
+
method: 'POST',
|
|
74
|
+
headers: { 'Content-Type': 'application/json' },
|
|
75
|
+
body: JSON.stringify({ token }),
|
|
76
|
+
});
|
|
77
|
+
const body = (await response.json().catch(() => ({})));
|
|
78
|
+
if (body.status === 'claimed' && typeof body.secret === 'string') {
|
|
79
|
+
return { status: 'claimed', secret: body.secret };
|
|
80
|
+
}
|
|
81
|
+
if (body.status === 'expired')
|
|
82
|
+
return { status: 'expired' };
|
|
83
|
+
if (body.status === 'not_found')
|
|
84
|
+
return { status: 'not_found' };
|
|
85
|
+
return { status: 'pending' };
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
return { status: 'pending' };
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=anonSession.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anonSession.js","sourceRoot":"","sources":["../../src/anonSession.ts"],"names":[],"mappings":"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"}
|
package/dist/src/asset.d.ts
CHANGED
|
@@ -110,6 +110,16 @@ type OverlayCommon = {
|
|
|
110
110
|
* recording as the camera zooms and pans.
|
|
111
111
|
*/
|
|
112
112
|
pinToScreen?: boolean;
|
|
113
|
+
/**
|
|
114
|
+
* Hide the synthetic mouse cursor while this overlay is displayed, restoring
|
|
115
|
+
* its prior visibility when the overlay ends. Useful for full-screen intro or
|
|
116
|
+
* outro cards where a cursor would be a distraction. Placement-agnostic, so it
|
|
117
|
+
* works for every overlay variant. Overlapping `hideMouse` overlays keep the
|
|
118
|
+
* cursor hidden until the last one ends, and a cursor already hidden (for
|
|
119
|
+
* example via `page.mouse.hide()`) is left hidden. Has no effect on
|
|
120
|
+
* screenshots, whose cursor is hidden by default.
|
|
121
|
+
*/
|
|
122
|
+
hideMouse?: boolean;
|
|
113
123
|
};
|
|
114
124
|
/** Fields that only apply to a `.mp4` video overlay (a file `path`). */
|
|
115
125
|
type OverlayVideoFields = {
|
|
@@ -220,7 +230,7 @@ export declare const MAX_AUDIO_LEVEL = 4;
|
|
|
220
230
|
* is a finished still or clip, so source-only fields (`over`/`margin`/`animate`/
|
|
221
231
|
* `css`/`capturePadding`) do not apply.
|
|
222
232
|
*/
|
|
223
|
-
export type DependencyOverlayOptions = Pick<OverlayCommon, 'relativeTo' | 'x' | 'y' | 'width' | 'height' | 'aspectRatio' | 'fill' | 'duration' | 'crop' | 'pinToScreen'> & {
|
|
233
|
+
export type DependencyOverlayOptions = Pick<OverlayCommon, 'relativeTo' | 'x' | 'y' | 'width' | 'height' | 'aspectRatio' | 'fill' | 'duration' | 'crop' | 'pinToScreen' | 'hideMouse'> & {
|
|
224
234
|
/**
|
|
225
235
|
* Late start into the embedded VIDEO (a `'2s'`/timecode/`'50%'` position).
|
|
226
236
|
* Video dependencies only; rejected when the target resolves to a screenshot.
|
package/dist/src/asset.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asset.d.ts","sourceRoot":"","sources":["../../src/asset.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,EAEL,KAAK,cAAc,EAEnB,KAAK,WAAW,EAGjB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"asset.d.ts","sourceRoot":"","sources":["../../src/asset.ts"],"names":[],"mappings":"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"}
|