screenci 0.0.89 → 0.0.91
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 +39 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +357 -75
- package/dist/cli.js.map +1 -1
- package/dist/docs/manifest.d.ts +29 -29
- package/dist/docs/manifest.js +9 -9
- package/dist/docs/manifest.js.map +1 -1
- package/dist/docs/video-sources/assets/StyleCard.d.ts +4 -0
- package/dist/docs/video-sources/assets/StyleCard.d.ts.map +1 -0
- package/dist/docs/video-sources/assets/StyleCard.js +27 -0
- package/dist/docs/video-sources/assets/StyleCard.js.map +1 -0
- package/dist/docs/video-sources/camera-and-zooming.screenci.js +2 -9
- package/dist/docs/video-sources/camera-and-zooming.screenci.js.map +1 -1
- package/dist/docs/video-sources/editor.screenci.d.ts +2 -0
- package/dist/docs/video-sources/editor.screenci.d.ts.map +1 -0
- package/dist/docs/video-sources/{studio.screenci.js → editor.screenci.js} +18 -19
- package/dist/docs/video-sources/editor.screenci.js.map +1 -0
- package/dist/docs/video-sources/languages.screenci.js +12 -12
- package/dist/docs/video-sources/languages.screenci.js.map +1 -1
- package/dist/docs/video-sources/locator-highlight-animated.screenci.js +2 -15
- package/dist/docs/video-sources/locator-highlight-animated.screenci.js.map +1 -1
- package/dist/docs/video-sources/locator-highlight-still.screenci.js +2 -1
- package/dist/docs/video-sources/locator-highlight-still.screenci.js.map +1 -1
- package/dist/docs/video-sources/narration.screenci.js +11 -11
- package/dist/docs/video-sources/narration.screenci.js.map +1 -1
- package/dist/docs/video-sources/public-urls-and-embeds.screenci.js +2 -2
- package/dist/docs/video-sources/public-urls-and-embeds.screenci.js.map +1 -1
- package/dist/docs/video-sources/speaking-style.screenci.js +4 -28
- package/dist/docs/video-sources/speaking-style.screenci.js.map +1 -1
- package/dist/docs/videos.d.ts +2 -2
- package/dist/docs/videos.js +2 -2
- package/dist/e2e/fixtures/ClientCounter.d.ts +5 -0
- package/dist/e2e/fixtures/ClientCounter.d.ts.map +1 -0
- package/dist/e2e/fixtures/ClientCounter.js +29 -0
- package/dist/e2e/fixtures/ClientCounter.js.map +1 -0
- package/dist/e2e/htmlRasterizer.e2e.js +104 -23
- package/dist/e2e/htmlRasterizer.e2e.js.map +1 -1
- package/dist/index.d.ts +4 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -5
- package/dist/index.js.map +1 -1
- package/dist/src/anonSession.d.ts +20 -6
- package/dist/src/anonSession.d.ts.map +1 -1
- package/dist/src/anonSession.js +60 -13
- package/dist/src/anonSession.js.map +1 -1
- package/dist/src/asset.d.ts +68 -100
- package/dist/src/asset.d.ts.map +1 -1
- package/dist/src/asset.js +134 -289
- package/dist/src/asset.js.map +1 -1
- package/dist/src/audio.d.ts +1 -1
- package/dist/src/audio.js +1 -1
- package/dist/src/builder.d.ts +25 -25
- package/dist/src/builder.d.ts.map +1 -1
- package/dist/src/builder.js +8 -8
- package/dist/src/builder.js.map +1 -1
- package/dist/src/clientOverlay.d.ts +29 -0
- package/dist/src/clientOverlay.d.ts.map +1 -0
- package/dist/src/clientOverlay.js +83 -0
- package/dist/src/clientOverlay.js.map +1 -0
- package/dist/src/cue.d.ts +9 -9
- package/dist/src/cue.d.ts.map +1 -1
- package/dist/src/cue.js +6 -6
- package/dist/src/cue.js.map +1 -1
- package/dist/src/declare.d.ts +6 -6
- package/dist/src/declare.d.ts.map +1 -1
- package/dist/src/declare.js +9 -9
- package/dist/src/declare.js.map +1 -1
- package/dist/src/events.d.ts +14 -46
- package/dist/src/events.d.ts.map +1 -1
- package/dist/src/events.js +14 -24
- package/dist/src/events.js.map +1 -1
- package/dist/src/htmlRasterizer.d.ts +21 -42
- package/dist/src/htmlRasterizer.d.ts.map +1 -1
- package/dist/src/htmlRasterizer.js +47 -66
- package/dist/src/htmlRasterizer.js.map +1 -1
- package/dist/src/init.d.ts +2 -1
- package/dist/src/init.d.ts.map +1 -1
- package/dist/src/init.js +131 -137
- package/dist/src/init.js.map +1 -1
- package/dist/src/instrument.d.ts.map +1 -1
- package/dist/src/instrument.js +146 -0
- package/dist/src/instrument.js.map +1 -1
- package/dist/src/localize.d.ts +17 -11
- package/dist/src/localize.d.ts.map +1 -1
- package/dist/src/localize.js +1 -1
- package/dist/src/localize.js.map +1 -1
- package/dist/src/localizeRuntime.d.ts +8 -8
- package/dist/src/localizeRuntime.d.ts.map +1 -1
- package/dist/src/localizeRuntime.js +4 -4
- package/dist/src/localizeRuntime.js.map +1 -1
- package/dist/src/manualZoom.d.ts.map +1 -1
- package/dist/src/manualZoom.js +8 -3
- package/dist/src/manualZoom.js.map +1 -1
- package/dist/src/overlayFlush.js +6 -6
- package/dist/src/overlayFlush.js.map +1 -1
- package/dist/src/recordingData.d.ts +2 -2
- package/dist/src/runtimeContext.d.ts +0 -11
- package/dist/src/runtimeContext.d.ts.map +1 -1
- package/dist/src/runtimeContext.js +0 -7
- package/dist/src/runtimeContext.js.map +1 -1
- package/dist/src/screenshot.d.ts +7 -7
- package/dist/src/screenshot.d.ts.map +1 -1
- package/dist/src/studio.d.ts +41 -38
- package/dist/src/studio.d.ts.map +1 -1
- package/dist/src/studio.js +9 -9
- package/dist/src/studio.js.map +1 -1
- package/dist/src/types.d.ts +19 -10
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/video.d.ts +15 -15
- package/dist/src/video.d.ts.map +1 -1
- package/dist/src/video.js +10 -10
- package/dist/src/video.js.map +1 -1
- package/dist/src/voiceConfig.d.ts +26 -7
- package/dist/src/voiceConfig.d.ts.map +1 -1
- package/dist/src/voices.d.ts +22 -2
- package/dist/src/voices.d.ts.map +1 -1
- package/dist/src/voices.js +18 -0
- package/dist/src/voices.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -1
- package/skills/screenci/SKILL.md +1 -1
- package/skills/screenci/references/init.md +8 -1
- package/skills/screenci/references/record.md +1 -1
- package/dist/docs/video-sources/studio.screenci.d.ts +0 -2
- package/dist/docs/video-sources/studio.screenci.d.ts.map +0 -1
- package/dist/docs/video-sources/studio.screenci.js.map +0 -1
- package/dist/src/recordingSize.d.ts +0 -32
- package/dist/src/recordingSize.d.ts.map +0 -1
- package/dist/src/recordingSize.js +0 -54
- package/dist/src/recordingSize.js.map +0 -1
|
@@ -2,17 +2,17 @@ import { hide, resetZoom, video, voices, zoomTo } from 'screenci';
|
|
|
2
2
|
video.use({
|
|
3
3
|
renderOptions: {
|
|
4
4
|
narration: {
|
|
5
|
-
voice: { name: voices.
|
|
5
|
+
voice: { name: voices.Ava, style: 'Friendly product guide' },
|
|
6
6
|
},
|
|
7
7
|
},
|
|
8
8
|
});
|
|
9
9
|
const appUrl = process.env.SCREENCI_APP_URL ?? 'https://app.screenci.com/';
|
|
10
10
|
// Narration walkthrough recorded against the ScreenCI app (app.screenci.com) for
|
|
11
11
|
// the Narration guide. It explains cue-based narration out loud, then shows the
|
|
12
|
-
//
|
|
13
|
-
//
|
|
12
|
+
// web editor where teammates manage the spoken text without code. The Editor
|
|
13
|
+
// requires auth to record, so set
|
|
14
14
|
// SCREENCI_APP_STORAGE_STATE to a Playwright storageState JSON (see
|
|
15
|
-
// screenci.config.ts). The navigation mirrors
|
|
15
|
+
// screenci.config.ts). The navigation mirrors editor.screenci.ts.
|
|
16
16
|
//
|
|
17
17
|
// The logo intro (assets/logo.png) is gitignored: it is uploaded to the ScreenCI
|
|
18
18
|
// backend on the first record and reused on later runs (CI included).
|
|
@@ -24,16 +24,16 @@ video
|
|
|
24
24
|
en: {
|
|
25
25
|
intro: 'Narration is cue based: you attach a script, then mark where speech starts.',
|
|
26
26
|
overlap: 'A cue can start, run while the interface moves, and end on your mark.',
|
|
27
|
-
|
|
27
|
+
editor: 'Teammates manage the same narration in the web editor.',
|
|
28
28
|
outro: 'Change the words and re-render, with no re-recording required.',
|
|
29
29
|
},
|
|
30
30
|
})('Narration walkthrough', async ({ page, narration, overlays }) => {
|
|
31
|
-
//
|
|
32
|
-
//
|
|
31
|
+
// The Editor requires auth (SCREENCI_APP_STORAGE_STATE, see screenci.config.ts).
|
|
32
|
+
// Fail before stalling on the login page when the session is not configured.
|
|
33
33
|
if (!process.env.SCREENCI_APP_STORAGE_STATE) {
|
|
34
34
|
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.');
|
|
35
35
|
}
|
|
36
|
-
// Open a finished video's
|
|
36
|
+
// Open a finished video's Editor page without showing the navigation.
|
|
37
37
|
await hide(async () => {
|
|
38
38
|
await page.goto(appUrl);
|
|
39
39
|
await page.waitForLoadState('networkidle');
|
|
@@ -50,13 +50,13 @@ video
|
|
|
50
50
|
.first()
|
|
51
51
|
.click();
|
|
52
52
|
await page
|
|
53
|
-
.getByRole('heading', { name: /^
|
|
53
|
+
.getByRole('heading', { name: /^editor$/i })
|
|
54
54
|
.waitFor({ timeout: 30000 });
|
|
55
55
|
});
|
|
56
56
|
// Brand intro, then explain the cue model out loud.
|
|
57
57
|
await overlays.logo.for('2s');
|
|
58
58
|
await narration.intro();
|
|
59
|
-
// Frame the
|
|
59
|
+
// Frame the Editor narration section while explaining overlap and web editing.
|
|
60
60
|
await narration.overlap.start();
|
|
61
61
|
const narrationHeading = page
|
|
62
62
|
.getByRole('heading', { name: /narration/i })
|
|
@@ -67,7 +67,7 @@ video
|
|
|
67
67
|
await resetZoom();
|
|
68
68
|
}
|
|
69
69
|
await narration.overlap.end();
|
|
70
|
-
await narration.
|
|
70
|
+
await narration.editor();
|
|
71
71
|
await narration.outro();
|
|
72
72
|
});
|
|
73
73
|
//# sourceMappingURL=narration.screenci.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"narration.screenci.js","sourceRoot":"","sources":["../../../docs/video-sources/narration.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,
|
|
1
|
+
{"version":3,"file":"narration.screenci.js","sourceRoot":"","sources":["../../../docs/video-sources/narration.screenci.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { hide, resetZoom, video, voices, zoomTo } from 'screenci';
|
|
|
2
2
|
video.use({
|
|
3
3
|
renderOptions: {
|
|
4
4
|
narration: {
|
|
5
|
-
voice: { name: voices.
|
|
5
|
+
voice: { name: voices.Ava, style: 'Friendly product guide' },
|
|
6
6
|
},
|
|
7
7
|
},
|
|
8
8
|
});
|
|
@@ -11,7 +11,7 @@ const appUrl = process.env.SCREENCI_APP_URL ?? 'https://app.screenci.com/';
|
|
|
11
11
|
// the Public URLs and Embeds guide. It opens a finished video and highlights the
|
|
12
12
|
// Enable public URL switch that mints stable, language-specific delivery URLs.
|
|
13
13
|
// Recording needs a logged-in session: set SCREENCI_APP_STORAGE_STATE (see
|
|
14
|
-
// screenci.config.ts). The navigation mirrors
|
|
14
|
+
// screenci.config.ts). The navigation mirrors the Editor walkthrough up to the video
|
|
15
15
|
// page.
|
|
16
16
|
//
|
|
17
17
|
// The logo intro (assets/logo.png) is gitignored: it is uploaded on the first
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public-urls-and-embeds.screenci.js","sourceRoot":"","sources":["../../../docs/video-sources/public-urls-and-embeds.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,
|
|
1
|
+
{"version":3,"file":"public-urls-and-embeds.screenci.js","sourceRoot":"","sources":["../../../docs/video-sources/public-urls-and-embeds.screenci.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,36 +4,12 @@ import { hide, modelTypes, video, voices } from 'screenci';
|
|
|
4
4
|
// however far out you want to go: the expressive model takes styles from a
|
|
5
5
|
// straight product guide all the way to a swashbuckling pirate. The style prompt
|
|
6
6
|
// for each line is overlaid on screen as a text card (one named overlay per
|
|
7
|
-
// style, so each renders its own asset).
|
|
7
|
+
// style, so each renders its own asset). Each card is the same .tsx page overlay
|
|
8
|
+
// (assets/StyleCard.tsx) with a different `text` prop.
|
|
8
9
|
function styleCard(text) {
|
|
9
10
|
return {
|
|
10
|
-
|
|
11
|
-
|
|
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
|
-
`,
|
|
11
|
+
path: './assets/StyleCard.tsx',
|
|
12
|
+
props: { text },
|
|
37
13
|
x: 96,
|
|
38
14
|
y: 880,
|
|
39
15
|
width: 1000,
|
|
@@ -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,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAE1D,+EAA+E;AAC/E,4EAA4E;AAC5E,2EAA2E;AAC3E,iFAAiF;AACjF,4EAA4E;AAC5E,
|
|
1
|
+
{"version":3,"file":"speaking-style.screenci.js","sourceRoot":"","sources":["../../../docs/video-sources/speaking-style.screenci.ts"],"names":[],"mappings":"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"}
|
package/dist/docs/videos.d.ts
CHANGED
|
@@ -46,8 +46,8 @@ export declare const docsVideoRegistry: {
|
|
|
46
46
|
readonly sourcePath: "screenci/docs/video-sources/languages.screenci.ts";
|
|
47
47
|
readonly showSource: false;
|
|
48
48
|
};
|
|
49
|
-
readonly 'docs/guides/
|
|
50
|
-
readonly sourcePath: "screenci/docs/video-sources/
|
|
49
|
+
readonly 'docs/guides/editor': {
|
|
50
|
+
readonly sourcePath: "screenci/docs/video-sources/editor.screenci.ts";
|
|
51
51
|
readonly showSource: false;
|
|
52
52
|
};
|
|
53
53
|
readonly 'docs/guides/public-urls-and-embeds': {
|
package/dist/docs/videos.js
CHANGED
|
@@ -34,8 +34,8 @@ export const docsVideoRegistry = {
|
|
|
34
34
|
sourcePath: 'screenci/docs/video-sources/languages.screenci.ts',
|
|
35
35
|
showSource: false,
|
|
36
36
|
},
|
|
37
|
-
'docs/guides/
|
|
38
|
-
sourcePath: 'screenci/docs/video-sources/
|
|
37
|
+
'docs/guides/editor': {
|
|
38
|
+
sourcePath: 'screenci/docs/video-sources/editor.screenci.ts',
|
|
39
39
|
showSource: false,
|
|
40
40
|
},
|
|
41
41
|
'docs/guides/public-urls-and-embeds': {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClientCounter.d.ts","sourceRoot":"","sources":["../../../e2e/fixtures/ClientCounter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAA;AAMlD,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EAAE,EAAQ,EAAE,EAAE;IAAE,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,qBA4BlE"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useEffect } from 'react';
|
|
3
|
+
// Fixture for the client-rendered overlay e2e test: a normal React component with
|
|
4
|
+
// a hook and an effect. When bundled and mounted in the overlay page under the
|
|
5
|
+
// capture clock, the effect's requestAnimationFrame animates the value, proving
|
|
6
|
+
// hooks/effects run during capture.
|
|
7
|
+
export default function ClientCounter({ to = 100 }) {
|
|
8
|
+
const [n, setN] = useState(0);
|
|
9
|
+
useEffect(() => {
|
|
10
|
+
const start = Date.now();
|
|
11
|
+
let raf = 0;
|
|
12
|
+
const tick = () => {
|
|
13
|
+
const t = Math.min(1, (Date.now() - start) / 500);
|
|
14
|
+
setN(Math.round(t * to));
|
|
15
|
+
if (t < 1)
|
|
16
|
+
raf = requestAnimationFrame(tick);
|
|
17
|
+
};
|
|
18
|
+
tick();
|
|
19
|
+
return () => cancelAnimationFrame(raf);
|
|
20
|
+
}, [to]);
|
|
21
|
+
return (_jsx("div", { id: "counter", "data-n": n, style: {
|
|
22
|
+
width: 200,
|
|
23
|
+
height: 80,
|
|
24
|
+
color: '#fff',
|
|
25
|
+
background: '#111',
|
|
26
|
+
font: '700 40px system-ui',
|
|
27
|
+
}, children: n }));
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=ClientCounter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClientCounter.js","sourceRoot":"","sources":["../../../e2e/fixtures/ClientCounter.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAElD,kFAAkF;AAClF,+EAA+E;AAC/E,gFAAgF;AAChF,oCAAoC;AACpC,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EAAE,EAAE,GAAG,GAAG,EAAmB;IACjE,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IAC7B,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACxB,IAAI,GAAG,GAAG,CAAC,CAAA;QACX,MAAM,IAAI,GAAG,GAAG,EAAE;YAChB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAA;YACjD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;YACxB,IAAI,CAAC,GAAG,CAAC;gBAAE,GAAG,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAA;QAC9C,CAAC,CAAA;QACD,IAAI,EAAE,CAAA;QACN,OAAO,GAAG,EAAE,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAA;IACxC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IACR,OAAO,CACL,cACE,EAAE,EAAC,SAAS,YACJ,CAAC,EACT,KAAK,EAAE;YACL,KAAK,EAAE,GAAG;YACV,MAAM,EAAE,EAAE;YACV,KAAK,EAAE,MAAM;YACb,UAAU,EAAE,MAAM;YAClB,IAAI,EAAE,oBAAoB;SAC3B,YAEA,CAAC,GACE,CACP,CAAA;AACH,CAAC"}
|
|
@@ -1,20 +1,31 @@
|
|
|
1
1
|
import { test, expect } from '@playwright/test';
|
|
2
2
|
import { mkdtemp, rm, readFile } from 'fs/promises';
|
|
3
3
|
import { tmpdir } from 'os';
|
|
4
|
-
import { join } from 'path';
|
|
4
|
+
import { dirname, join } from 'path';
|
|
5
|
+
import { fileURLToPath } from 'url';
|
|
5
6
|
import { spawnSync } from 'child_process';
|
|
6
7
|
import ffmpegStatic from 'ffmpeg-static';
|
|
7
8
|
import { rasterizeAnimatedHtmlOverlay, rasterizeHtmlOverlay, } from '../src/htmlRasterizer.js';
|
|
9
|
+
import { buildClientOverlayDocument } from '../src/clientOverlay.js';
|
|
8
10
|
import { createScreenCIRuntimeContext, runWithScreenCIRuntimeContext, } from '../src/runtimeContext.js';
|
|
11
|
+
const clientCounterEntry = join(dirname(fileURLToPath(import.meta.url)), 'fixtures', 'ClientCounter.tsx');
|
|
9
12
|
const PNG_SIGNATURE = Buffer.from([
|
|
10
13
|
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a,
|
|
11
14
|
]);
|
|
12
|
-
|
|
15
|
+
// A complete overlay document with the content wrapped in the capture root, the
|
|
16
|
+
// shape the rasterizer expects for a `.html` page overlay.
|
|
17
|
+
function doc(inner) {
|
|
18
|
+
return ('<!doctype html><html><head><meta charset="utf-8"><style>' +
|
|
19
|
+
'html,body{margin:0;padding:0;background:transparent}' +
|
|
20
|
+
'#screenci-overlay-root{display:inline-block}' +
|
|
21
|
+
`</style></head><body><div id="screenci-overlay-root">${inner}</div></body></html>`);
|
|
22
|
+
}
|
|
23
|
+
test('rasterizes a full HTML document to a transparent PNG sized to the overlay root', async ({ page, }) => {
|
|
13
24
|
const dir = await mkdtemp(join(tmpdir(), 'screenci-html-e2e-'));
|
|
14
25
|
try {
|
|
15
26
|
const result = await runWithScreenCIRuntimeContext(createScreenCIRuntimeContext({ page, recordingDir: dir }), () => rasterizeHtmlOverlay({
|
|
16
27
|
name: 'badge',
|
|
17
|
-
html: '<div style="width:200px;height:80px;background:#f00">hi</div>',
|
|
28
|
+
html: doc('<div style="width:200px;height:80px;background:#f00">hi</div>'),
|
|
18
29
|
}));
|
|
19
30
|
// boundingBox is reported in CSS pixels (the underlying PNG is rendered at
|
|
20
31
|
// the device scale factor for crispness).
|
|
@@ -28,12 +39,30 @@ test('rasterizes HTML to a transparent PNG sized to its content', async ({ page,
|
|
|
28
39
|
await rm(dir, { recursive: true, force: true });
|
|
29
40
|
}
|
|
30
41
|
});
|
|
42
|
+
test('captures the document body when the page has no overlay root', async ({ page, }) => {
|
|
43
|
+
const dir = await mkdtemp(join(tmpdir(), 'screenci-html-body-e2e-'));
|
|
44
|
+
try {
|
|
45
|
+
const result = await runWithScreenCIRuntimeContext(createScreenCIRuntimeContext({ page, recordingDir: dir }), () => rasterizeHtmlOverlay({
|
|
46
|
+
name: 'no-root',
|
|
47
|
+
html: '<!doctype html><html><head><meta charset="utf-8">' +
|
|
48
|
+
'<style>html,body{margin:0;background:transparent}' +
|
|
49
|
+
'body{width:320px;height:90px}</style></head>' +
|
|
50
|
+
'<body><div style="width:100%;height:100%;background:#08f"></div></body></html>',
|
|
51
|
+
}));
|
|
52
|
+
// Falls back to the body's box (sized by the page's own CSS).
|
|
53
|
+
expect(result.width).toBe(320);
|
|
54
|
+
expect(result.height).toBe(90);
|
|
55
|
+
}
|
|
56
|
+
finally {
|
|
57
|
+
await rm(dir, { recursive: true, force: true });
|
|
58
|
+
}
|
|
59
|
+
});
|
|
31
60
|
test('does not require a fixed viewport: content larger than the default viewport still renders', async ({ page, }) => {
|
|
32
61
|
const dir = await mkdtemp(join(tmpdir(), 'screenci-html-e2e-'));
|
|
33
62
|
try {
|
|
34
63
|
const result = await runWithScreenCIRuntimeContext(createScreenCIRuntimeContext({ page, recordingDir: dir }), () => rasterizeHtmlOverlay({
|
|
35
64
|
name: 'wide',
|
|
36
|
-
html: '<div style="width:640px;height:120px;background:#0a0"></div>',
|
|
65
|
+
html: doc('<div style="width:640px;height:120px;background:#0a0"></div>'),
|
|
37
66
|
}));
|
|
38
67
|
expect(result.width).toBe(640);
|
|
39
68
|
expect(result.height).toBe(120);
|
|
@@ -47,9 +76,9 @@ test('rasterizes an animated overlay to a two-stream transparent clip', async ({
|
|
|
47
76
|
try {
|
|
48
77
|
const result = await runWithScreenCIRuntimeContext(createScreenCIRuntimeContext({ page, recordingDir: dir }), () => rasterizeAnimatedHtmlOverlay({
|
|
49
78
|
name: 'intro',
|
|
50
|
-
html: '<div style="width:200px;height:80px;background:#f00;' +
|
|
79
|
+
html: doc('<div style="width:200px;height:80px;background:#f00;' +
|
|
51
80
|
'animation:fade 1s linear">hi' +
|
|
52
|
-
'<style>@keyframes fade{from{opacity:0}to{opacity:1}}</style></div>',
|
|
81
|
+
'<style>@keyframes fade{from{opacity:0}to{opacity:1}}</style></div>'),
|
|
53
82
|
durationMs: 500,
|
|
54
83
|
fps: 30,
|
|
55
84
|
}));
|
|
@@ -72,33 +101,85 @@ test('rasterizes an animated overlay to a two-stream transparent clip', async ({
|
|
|
72
101
|
await rm(dir, { recursive: true, force: true });
|
|
73
102
|
}
|
|
74
103
|
});
|
|
75
|
-
test('
|
|
76
|
-
const dir = await mkdtemp(join(tmpdir(), 'screenci-
|
|
104
|
+
test('captures a JS-driven (requestAnimationFrame) animated overlay from a full document', async ({ page, }) => {
|
|
105
|
+
const dir = await mkdtemp(join(tmpdir(), 'screenci-script-anim-e2e-'));
|
|
77
106
|
try {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
107
|
+
// A full document whose own <script> widens a bar from 0 to 300px over 1s via
|
|
108
|
+
// requestAnimationFrame, reading the virtual clock the capture advances. A
|
|
109
|
+
// reserved 300x40 root keeps the captured box constant while the bar animates.
|
|
110
|
+
const html = doc('<div style="width:300px;height:40px">' +
|
|
111
|
+
'<div id="bar" style="width:0px;height:40px;background:#0a0"></div></div>' +
|
|
112
|
+
'<script>var bar=document.getElementById("bar");' +
|
|
113
|
+
'function f(){bar.style.width=Math.min(300,Date.now()/1000*300)+"px";' +
|
|
114
|
+
'requestAnimationFrame(f);}f();</script>');
|
|
115
|
+
const result = await runWithScreenCIRuntimeContext(createScreenCIRuntimeContext({ page, recordingDir: dir }), () => rasterizeAnimatedHtmlOverlay({
|
|
116
|
+
name: 'scripted-anim',
|
|
117
|
+
html,
|
|
118
|
+
durationMs: 1000,
|
|
119
|
+
fps: 30,
|
|
82
120
|
}));
|
|
83
|
-
|
|
84
|
-
expect(result.
|
|
85
|
-
expect(result.
|
|
121
|
+
expect(result.width).toBe(300);
|
|
122
|
+
expect(result.height).toBe(40);
|
|
123
|
+
expect(result.durationMs).toBe(1000);
|
|
124
|
+
expect(result.path.endsWith('.mp4')).toBe(true);
|
|
125
|
+
const ffmpegPath = ffmpegStatic;
|
|
126
|
+
const probe = spawnSync(ffmpegPath, ['-hide_banner', '-i', result.path], {
|
|
127
|
+
encoding: 'utf8',
|
|
128
|
+
});
|
|
129
|
+
const info = `${probe.stdout ?? ''}${probe.stderr ?? ''}`;
|
|
130
|
+
const videoStreams = (info.match(/Stream #0:\d+.*Video:/g) ?? []).length;
|
|
131
|
+
expect(videoStreams).toBe(2);
|
|
86
132
|
}
|
|
87
133
|
finally {
|
|
88
134
|
await rm(dir, { recursive: true, force: true });
|
|
89
135
|
}
|
|
90
136
|
});
|
|
91
|
-
test('
|
|
92
|
-
const dir = await mkdtemp(join(tmpdir(), 'screenci-
|
|
137
|
+
test('mounts a client-rendered (.tsx) React overlay (still) and sizes to it', async ({ page, }) => {
|
|
138
|
+
const dir = await mkdtemp(join(tmpdir(), 'screenci-client-still-e2e-'));
|
|
93
139
|
try {
|
|
140
|
+
// Bundle a real React component into a full host document and mount it
|
|
141
|
+
// client-side; awaitMount waits for React to commit before the box is
|
|
142
|
+
// measured, so an empty root is not captured.
|
|
143
|
+
const html = await buildClientOverlayDocument(clientCounterEntry, {
|
|
144
|
+
to: 100,
|
|
145
|
+
});
|
|
94
146
|
const result = await runWithScreenCIRuntimeContext(createScreenCIRuntimeContext({ page, recordingDir: dir }), () => rasterizeHtmlOverlay({
|
|
95
|
-
name: '
|
|
96
|
-
html
|
|
97
|
-
|
|
147
|
+
name: 'client-still',
|
|
148
|
+
html,
|
|
149
|
+
awaitMount: true,
|
|
150
|
+
}));
|
|
151
|
+
// The mounted component is 200x80; without awaitMount the empty root is 0x0.
|
|
152
|
+
expect(result.width).toBe(200);
|
|
153
|
+
expect(result.height).toBe(80);
|
|
154
|
+
}
|
|
155
|
+
finally {
|
|
156
|
+
await rm(dir, { recursive: true, force: true });
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
test('captures a client-rendered (.tsx) React overlay with hooks + effects (animated)', async ({ page, }) => {
|
|
160
|
+
const dir = await mkdtemp(join(tmpdir(), 'screenci-client-anim-e2e-'));
|
|
161
|
+
try {
|
|
162
|
+
const html = await buildClientOverlayDocument(clientCounterEntry, {
|
|
163
|
+
to: 100,
|
|
164
|
+
});
|
|
165
|
+
const result = await runWithScreenCIRuntimeContext(createScreenCIRuntimeContext({ page, recordingDir: dir }), () => rasterizeAnimatedHtmlOverlay({
|
|
166
|
+
name: 'client-anim',
|
|
167
|
+
html,
|
|
168
|
+
awaitMount: true,
|
|
169
|
+
durationMs: 600,
|
|
170
|
+
fps: 30,
|
|
98
171
|
}));
|
|
99
|
-
|
|
100
|
-
expect(result.
|
|
101
|
-
expect(result.
|
|
172
|
+
expect(result.width).toBe(200);
|
|
173
|
+
expect(result.height).toBe(80);
|
|
174
|
+
expect(result.durationMs).toBe(600);
|
|
175
|
+
expect(result.path.endsWith('.mp4')).toBe(true);
|
|
176
|
+
const ffmpegPath = ffmpegStatic;
|
|
177
|
+
const probe = spawnSync(ffmpegPath, ['-hide_banner', '-i', result.path], {
|
|
178
|
+
encoding: 'utf8',
|
|
179
|
+
});
|
|
180
|
+
const info = `${probe.stdout ?? ''}${probe.stderr ?? ''}`;
|
|
181
|
+
const videoStreams = (info.match(/Stream #0:\d+.*Video:/g) ?? []).length;
|
|
182
|
+
expect(videoStreams).toBe(2);
|
|
102
183
|
}
|
|
103
184
|
finally {
|
|
104
185
|
await rm(dir, { recursive: true, force: true });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"htmlRasterizer.e2e.js","sourceRoot":"","sources":["../../e2e/htmlRasterizer.e2e.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAA;AAC3B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"htmlRasterizer.e2e.js","sourceRoot":"","sources":["../../e2e/htmlRasterizer.e2e.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -7,8 +7,8 @@ export { screenshot } from './src/screenshot.js';
|
|
|
7
7
|
export type { CropTarget, CropRegion, CropOptions, ScreenshotCrop, ScreenshotCropRecord, ResolvedCropPadding, } from './src/crop.js';
|
|
8
8
|
export type { ScreenCIPage, ScreenCILocator, ScreenCILocatorClickOptions, ScreenCILocatorPostClickMoveOptions, ScreenCILocatorFillOptions, ScreenCILocatorPressSequentiallyOptions, ScreenCILocatorCheckOptions, ScreenCILocatorHoverOptions, ScreenCILocatorSelectTextOptions, ScreenCILocatorDragToOptions, ScreenCILocatorSelectOptionOptions, } from './src/types.js';
|
|
9
9
|
export type { NarrationCue, Cues, TopLevelVoiceConfig } from './src/cue.js';
|
|
10
|
-
export {
|
|
11
|
-
export type {
|
|
10
|
+
export { editable } from './src/studio.js';
|
|
11
|
+
export type { EditableMarker, EditablePending } from './src/studio.js';
|
|
12
12
|
export type { TimelineOffset } from './src/timelineOffset.js';
|
|
13
13
|
export type { LangNarrationOverride } from './src/voiceConfig.js';
|
|
14
14
|
export type { EachVariant, MediaBuilder, VideoBuilder, LocalizeMode, LanguagesArg, LanguagesConfig, RecordingLocalize, } from './src/builder.js';
|
|
@@ -22,10 +22,9 @@ export { speed } from './src/speed.js';
|
|
|
22
22
|
export { time } from './src/time.js';
|
|
23
23
|
export { autoZoom } from './src/autoZoom.js';
|
|
24
24
|
export { zoomTo, resetZoom } from './src/manualZoom.js';
|
|
25
|
-
export { resizeRecording, resetRecordingSize, type ResizeRecordingOptions, } from './src/recordingSize.js';
|
|
26
25
|
export { hideNarration, showNarration } from './src/narrationVisibility.js';
|
|
27
|
-
export {
|
|
28
|
-
export type { OverlayController, OverlayConfig, OverlayConfigFactory, OverlayInput, OverlayInputOrFactory, Overlays, OverlayControllerFor,
|
|
26
|
+
export { MAX_AUDIO_LEVEL, selected } from './src/asset.js';
|
|
27
|
+
export type { OverlayController, OverlayConfig, OverlayDuration, TsxOverlayConfig, HtmlPageOverlayConfig, MediaOverlayConfig, OverlayConfigFactory, OverlayInput, OverlayInputOrFactory, Overlays, OverlayControllerFor, OverlayPlacement, OverlayCrop, DependencyOverlayInput, DependencyOverlayOptions, } from './src/asset.js';
|
|
29
28
|
export { overlayRect } from './src/overlayRect.js';
|
|
30
29
|
export type { OverlayRect, OverlayRectOptions } from './src/overlayRect.js';
|
|
31
30
|
export type { AudioController, AudioConfig, AudioInput, AudioTracks, } from './src/audio.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,WAAW,EACX,GAAG,EACH,OAAO,EACP,kBAAkB,EAClB,aAAa,EACb,aAAa,EACb,sBAAsB,EACtB,uBAAuB,EACvB,cAAc,EACd,sBAAsB,EACtB,eAAe,EACf,MAAM,EACN,kBAAkB,GACnB,MAAM,gBAAgB,CAAA;AAGvB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACpD,YAAY,EACV,QAAQ,EACR,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,SAAS,GACV,MAAM,iBAAiB,CAAA;AAGxB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAG9C,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,YAAY,EACV,UAAU,EACV,UAAU,EACV,WAAW,EACX,cAAc,EACd,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,eAAe,CAAA;AACtB,YAAY,EACV,YAAY,EACZ,eAAe,EACf,2BAA2B,EAC3B,mCAAmC,EACnC,0BAA0B,EAC1B,uCAAuC,EACvC,2BAA2B,EAC3B,2BAA2B,EAC3B,gCAAgC,EAChC,4BAA4B,EAC5B,kCAAkC,GACnC,MAAM,gBAAgB,CAAA;AAIvB,YAAY,EAAE,YAAY,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAI3E,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -5,10 +5,10 @@ export { defineConfig } from './src/config.js';
|
|
|
5
5
|
// Re-export video fixture and narration cue
|
|
6
6
|
export { video } from './src/video.js';
|
|
7
7
|
export { screenshot } from './src/screenshot.js';
|
|
8
|
-
// `
|
|
9
|
-
// `
|
|
8
|
+
// `editable(...)` defers a feature/language declaration to the ScreenCI web app:
|
|
9
|
+
// `editable(['name'])` blank names, `editable({ name: value })` seeded, `editable()`
|
|
10
10
|
// keyless (languages only).
|
|
11
|
-
export {
|
|
11
|
+
export { editable } from './src/studio.js';
|
|
12
12
|
export { resolveLocaleForLanguage, DEFAULT_LANGUAGE_LOCALES, } from './src/locales.js';
|
|
13
13
|
export { hide } from './src/hide.js';
|
|
14
14
|
export { redact, unredactAll } from './src/redact.js';
|
|
@@ -16,8 +16,7 @@ export { speed } from './src/speed.js';
|
|
|
16
16
|
export { time } from './src/time.js';
|
|
17
17
|
export { autoZoom } from './src/autoZoom.js';
|
|
18
18
|
export { zoomTo, resetZoom } from './src/manualZoom.js';
|
|
19
|
-
export { resizeRecording, resetRecordingSize, } from './src/recordingSize.js';
|
|
20
19
|
export { hideNarration, showNarration } from './src/narrationVisibility.js';
|
|
21
|
-
export {
|
|
20
|
+
export { MAX_AUDIO_LEVEL, selected } from './src/asset.js';
|
|
22
21
|
export { overlayRect } from './src/overlayRect.js';
|
|
23
22
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAiBA,mBAAmB;AACnB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AASpD,4BAA4B;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAE9C,4CAA4C;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AA0BhD
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAiBA,mBAAmB;AACnB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AASpD,4BAA4B;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAE9C,4CAA4C;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AA0BhD,iFAAiF;AACjF,qFAAqF;AACrF,4BAA4B;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAe1C,OAAO,EACL,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AACpC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAErD,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAC3E,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAkB1D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export declare const ANON_SESSION_FILE = "anon-session.json";
|
|
2
2
|
export declare const ANON_TOKEN_HEADER = "X-ScreenCI-Anon-Token";
|
|
3
3
|
export declare const SECRET_HEADER = "X-ScreenCI-Secret";
|
|
4
|
+
export declare const ANON_MAX_VIDEOS_PER_RECORDING = 3;
|
|
4
5
|
export declare const SCREENCI_TERMS_URL = "https://screenci.com/legal/tos";
|
|
5
6
|
/**
|
|
6
7
|
* Single-line browsewrap notice shown on the anonymous trial path. Kept pure
|
|
@@ -24,6 +25,18 @@ export declare function deleteAnonSessionFile(screenciDir: string): Promise<void
|
|
|
24
25
|
* `record` so multiple videos land under the same anonymous trial.
|
|
25
26
|
*/
|
|
26
27
|
export declare function getOrCreateAnonToken(screenciDir: string): Promise<string>;
|
|
28
|
+
/**
|
|
29
|
+
* Remembers the successful anonymous recording URL locally so a second
|
|
30
|
+
* anonymous `record` attempt can point back to the trial recording instead of
|
|
31
|
+
* only showing the sign-up URL.
|
|
32
|
+
*/
|
|
33
|
+
export declare function saveAnonSessionRecordUrl(screenciDir: string, token: string, recordUrl: string): Promise<void>;
|
|
34
|
+
export declare function readAnonSessionRecordUrl(screenciDir: string): Promise<string | null>;
|
|
35
|
+
export declare const ANON_MAX_RECORDINGS = 3;
|
|
36
|
+
/** A short "N recordings left" phrase for the anonymous trial. */
|
|
37
|
+
export declare function formatAnonRecordingsLeft(remaining: number): string;
|
|
38
|
+
/** A single-line notice shown after an anonymous recording succeeds. */
|
|
39
|
+
export declare function formatAnonPostRecordNotice(remaining: number): string;
|
|
27
40
|
export type AnonSessionStatus = {
|
|
28
41
|
status: 'not_found';
|
|
29
42
|
} | {
|
|
@@ -31,6 +44,7 @@ export type AnonSessionStatus = {
|
|
|
31
44
|
} | {
|
|
32
45
|
status: 'pending';
|
|
33
46
|
used: boolean;
|
|
47
|
+
remaining: number;
|
|
34
48
|
} | {
|
|
35
49
|
status: 'claimed';
|
|
36
50
|
secret: string;
|
|
@@ -54,13 +68,13 @@ export type AnonRecordingGate = {
|
|
|
54
68
|
};
|
|
55
69
|
/**
|
|
56
70
|
* Decides whether a fresh anonymous `record` is allowed to START, given the
|
|
57
|
-
* session's current status. An anonymous trial gets
|
|
58
|
-
* once
|
|
59
|
-
* session has expired, a
|
|
60
|
-
* told to sign up before anything renders, rather than silently minting a new
|
|
71
|
+
* session's current status. An anonymous trial gets up to ANON_MAX_RECORDINGS
|
|
72
|
+
* recordings: once all are used (a pending session that has spent its trial) or
|
|
73
|
+
* the session has expired, a further recording is refused up front so the user
|
|
74
|
+
* is told to sign up before anything renders, rather than silently minting a new
|
|
61
75
|
* trial or only failing after the whole recording ran. A first-run token the
|
|
62
|
-
* server has not seen yet (`not_found`), a pending
|
|
63
|
-
* `claimed` session (the upload path self-upgrades to the real secret) all
|
|
76
|
+
* server has not seen yet (`not_found`), a pending session with recordings left,
|
|
77
|
+
* and a `claimed` session (the upload path self-upgrades to the real secret) all
|
|
64
78
|
* proceed.
|
|
65
79
|
*/
|
|
66
80
|
export declare function evaluateAnonRecordingGate(status: AnonSessionStatus): AnonRecordingGate;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anonSession.d.ts","sourceRoot":"","sources":["../../src/anonSession.ts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,iBAAiB,sBAAsB,CAAA;AAEpD,eAAO,MAAM,iBAAiB,0BAA0B,CAAA;AACxD,eAAO,MAAM,aAAa,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"anonSession.d.ts","sourceRoot":"","sources":["../../src/anonSession.ts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,iBAAiB,sBAAsB,CAAA;AAEpD,eAAO,MAAM,iBAAiB,0BAA0B,CAAA;AACxD,eAAO,MAAM,aAAa,sBAAsB,CAAA;AAChD,eAAO,MAAM,6BAA6B,IAAI,CAAA;AAO9C,eAAO,MAAM,kBAAkB,mCAAmC,CAAA;AAElE;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED,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;AAqCD,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;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,wBAAsB,wBAAwB,CAC5C,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAGxB;AAID,eAAO,MAAM,mBAAmB,IAAI,CAAA;AAEpC,kEAAkE;AAClE,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAOlE;AAED,wEAAwE;AACxE,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAOpE;AAED,MAAM,MAAM,iBAAiB,GACzB;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,GACvB;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GAErB;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACvD;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,CAgC5B;AAED,MAAM,MAAM,iBAAiB,GACzB;IAAE,OAAO,EAAE,IAAI,CAAA;CAAE,GACjB;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAA;AAElD;;;;;;;;;;GAUG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,iBAAiB,GACxB,iBAAiB,CAMnB"}
|