@12ui/design 0.2.27 → 0.2.28
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/README.md +72 -87
- package/SKILL.md +5 -5
- package/dist/branch-completion.d.ts.map +1 -1
- package/dist/branch-completion.js +37 -14
- package/dist/branch-completion.js.map +1 -1
- package/dist/branch-execution.d.ts.map +1 -1
- package/dist/branch-execution.js +28 -8
- package/dist/branch-execution.js.map +1 -1
- package/dist/branch-identity.d.ts +10 -4
- package/dist/branch-identity.d.ts.map +1 -1
- package/dist/branch-identity.js +9 -6
- package/dist/branch-identity.js.map +1 -1
- package/dist/branch-page-conversion.d.ts +9 -8
- package/dist/branch-page-conversion.d.ts.map +1 -1
- package/dist/branch-page-conversion.js +8 -2
- package/dist/branch-page-conversion.js.map +1 -1
- package/dist/branch-page-packaging.d.ts +31 -0
- package/dist/branch-page-packaging.d.ts.map +1 -0
- package/dist/branch-page-packaging.js +86 -0
- package/dist/branch-page-packaging.js.map +1 -0
- package/dist/branch-plan.d.ts +6 -0
- package/dist/branch-plan.d.ts.map +1 -1
- package/dist/branch-plan.js +6 -1
- package/dist/branch-plan.js.map +1 -1
- package/dist/branch-progress.d.ts +22 -0
- package/dist/branch-progress.d.ts.map +1 -1
- package/dist/branch-progress.js +33 -8
- package/dist/branch-progress.js.map +1 -1
- package/dist/branch-run-record.d.ts +9 -0
- package/dist/branch-run-record.d.ts.map +1 -1
- package/dist/branch-run-record.js.map +1 -1
- package/dist/branch-status.d.ts +2 -0
- package/dist/branch-status.d.ts.map +1 -1
- package/dist/branch-status.js +60 -15
- package/dist/branch-status.js.map +1 -1
- package/dist/branch-winner.d.ts +13 -15
- package/dist/branch-winner.d.ts.map +1 -1
- package/dist/branch-winner.js +25 -77
- package/dist/branch-winner.js.map +1 -1
- package/dist/cli-auth-command.d.ts.map +1 -1
- package/dist/cli-auth-command.js +5 -0
- package/dist/cli-auth-command.js.map +1 -1
- package/dist/cli-auth-onboarding.d.ts +12 -0
- package/dist/cli-auth-onboarding.d.ts.map +1 -0
- package/dist/cli-auth-onboarding.js +21 -0
- package/dist/cli-auth-onboarding.js.map +1 -0
- package/dist/cli-branch-command.d.ts +14 -19
- package/dist/cli-branch-command.d.ts.map +1 -1
- package/dist/cli-branch-command.js +207 -137
- package/dist/cli-branch-command.js.map +1 -1
- package/dist/cli-capabilities.d.ts +10 -51
- package/dist/cli-capabilities.d.ts.map +1 -1
- package/dist/cli-capabilities.js +13 -26
- package/dist/cli-capabilities.js.map +1 -1
- package/dist/cli-cli-command.d.ts +3 -0
- package/dist/cli-cli-command.d.ts.map +1 -1
- package/dist/cli-cli-command.js +15 -3
- package/dist/cli-cli-command.js.map +1 -1
- package/dist/cli-conversion-derivation.d.ts +30 -0
- package/dist/cli-conversion-derivation.d.ts.map +1 -0
- package/dist/{cli-export-command.js → cli-conversion-derivation.js} +178 -110
- package/dist/cli-conversion-derivation.js.map +1 -0
- package/dist/cli-conversion-output-directory.d.ts +5 -0
- package/dist/cli-conversion-output-directory.d.ts.map +1 -0
- package/dist/{cli-export-output-directory.js → cli-conversion-output-directory.js} +10 -10
- package/dist/cli-conversion-output-directory.js.map +1 -0
- package/dist/cli-convert-command.d.ts +9 -0
- package/dist/cli-convert-command.d.ts.map +1 -1
- package/dist/cli-convert-command.js +528 -158
- package/dist/cli-convert-command.js.map +1 -1
- package/dist/cli-corpus-command.d.ts.map +1 -1
- package/dist/cli-corpus-command.js +77 -10
- package/dist/cli-corpus-command.js.map +1 -1
- package/dist/cli-corpus-reference-downloads.d.ts +5 -0
- package/dist/cli-corpus-reference-downloads.d.ts.map +1 -1
- package/dist/cli-corpus-reference-downloads.js +18 -7
- package/dist/cli-corpus-reference-downloads.js.map +1 -1
- package/dist/cli-corpus-run.d.ts +9 -0
- package/dist/cli-corpus-run.d.ts.map +1 -1
- package/dist/cli-corpus-run.js +18 -0
- package/dist/cli-corpus-run.js.map +1 -1
- package/dist/cli-detach.d.ts +12 -4
- package/dist/cli-detach.d.ts.map +1 -1
- package/dist/cli-detach.js +49 -17
- package/dist/cli-detach.js.map +1 -1
- package/dist/cli-draft-command.d.ts +44 -61
- package/dist/cli-draft-command.d.ts.map +1 -1
- package/dist/cli-draft-command.js +307 -180
- package/dist/cli-draft-command.js.map +1 -1
- package/dist/cli-help/conversion.d.ts +30 -0
- package/dist/cli-help/conversion.d.ts.map +1 -0
- package/dist/cli-help/conversion.js +55 -0
- package/dist/cli-help/conversion.js.map +1 -0
- package/dist/cli-help/design.d.ts +74 -0
- package/dist/cli-help/design.d.ts.map +1 -0
- package/dist/cli-help/design.js +131 -0
- package/dist/cli-help/design.js.map +1 -0
- package/dist/cli-help/index.d.ts +224 -0
- package/dist/cli-help/index.d.ts.map +1 -0
- package/dist/cli-help/index.js +32 -0
- package/dist/cli-help/index.js.map +1 -0
- package/dist/cli-help/meta.d.ts +24 -0
- package/dist/cli-help/meta.d.ts.map +1 -0
- package/dist/cli-help/meta.js +30 -0
- package/dist/cli-help/meta.js.map +1 -0
- package/dist/cli-help/render.d.ts +4 -0
- package/dist/cli-help/render.d.ts.map +1 -0
- package/dist/cli-help/render.js +28 -0
- package/dist/cli-help/render.js.map +1 -0
- package/dist/cli-help/setup.d.ts +93 -0
- package/dist/cli-help/setup.d.ts.map +1 -0
- package/dist/cli-help/setup.js +142 -0
- package/dist/cli-help/setup.js.map +1 -0
- package/dist/cli-help/types.d.ts +10 -0
- package/dist/cli-help/types.d.ts.map +1 -0
- package/dist/cli-help/types.js +2 -0
- package/dist/cli-help/types.js.map +1 -0
- package/dist/cli-next-command.d.ts +11 -8
- package/dist/cli-next-command.d.ts.map +1 -1
- package/dist/cli-next-command.js +288 -88
- package/dist/cli-next-command.js.map +1 -1
- package/dist/cli-output-paths.d.ts +2 -23
- package/dist/cli-output-paths.d.ts.map +1 -1
- package/dist/cli-output-paths.js +2 -36
- package/dist/cli-output-paths.js.map +1 -1
- package/dist/cli-package-command.d.ts +1 -0
- package/dist/cli-package-command.d.ts.map +1 -1
- package/dist/cli-package-command.js +107 -34
- package/dist/cli-package-command.js.map +1 -1
- package/dist/cli-pending-auth.d.ts +20 -0
- package/dist/cli-pending-auth.d.ts.map +1 -0
- package/dist/cli-pending-auth.js +160 -0
- package/dist/cli-pending-auth.js.map +1 -0
- package/dist/cli-progress.d.ts +256 -75
- package/dist/cli-progress.d.ts.map +1 -1
- package/dist/cli-progress.js +425 -98
- package/dist/cli-progress.js.map +1 -1
- package/dist/cli-run.d.ts +2 -0
- package/dist/cli-run.d.ts.map +1 -1
- package/dist/cli-run.js +56 -75
- package/dist/cli-run.js.map +1 -1
- package/dist/cli-skill-command.d.ts +3 -0
- package/dist/cli-skill-command.d.ts.map +1 -1
- package/dist/cli-skill-command.js +26 -3
- package/dist/cli-skill-command.js.map +1 -1
- package/dist/cli-usage.d.ts +17 -8
- package/dist/cli-usage.d.ts.map +1 -1
- package/dist/cli-usage.js +55 -40
- package/dist/cli-usage.js.map +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +8 -2
- package/dist/config.js.map +1 -1
- package/dist/conversion-client.d.ts +4 -0
- package/dist/conversion-client.d.ts.map +1 -1
- package/dist/conversion-client.js.map +1 -1
- package/dist/conversion-outputs.d.ts +11 -0
- package/dist/conversion-outputs.d.ts.map +1 -1
- package/dist/conversion-outputs.js +13 -1
- package/dist/conversion-outputs.js.map +1 -1
- package/dist/conversion-receipt.d.ts +1 -1
- package/dist/conversion-receipt.js +1 -1
- package/dist/conversion-recovery.d.ts +20 -0
- package/dist/conversion-recovery.d.ts.map +1 -0
- package/dist/conversion-recovery.js +61 -0
- package/dist/conversion-recovery.js.map +1 -0
- package/dist/conversion-status-contract.js +1 -1
- package/dist/conversion-status-contract.js.map +1 -1
- package/dist/credential-setup.d.ts +9 -1
- package/dist/credential-setup.d.ts.map +1 -1
- package/dist/credential-setup.js +13 -1
- package/dist/credential-setup.js.map +1 -1
- package/dist/draft-adoption.d.ts +9 -3
- package/dist/draft-adoption.d.ts.map +1 -1
- package/dist/draft-adoption.js +26 -41
- package/dist/draft-adoption.js.map +1 -1
- package/dist/draft-identity.d.ts +9 -12
- package/dist/draft-identity.d.ts.map +1 -1
- package/dist/draft-identity.js +0 -0
- package/dist/draft-identity.js.map +1 -1
- package/dist/draft-run.d.ts +9 -19
- package/dist/draft-run.d.ts.map +1 -1
- package/dist/draft-run.js +67 -95
- package/dist/draft-run.js.map +1 -1
- package/dist/draft-workspace.d.ts +26 -18
- package/dist/draft-workspace.d.ts.map +1 -1
- package/dist/draft-workspace.js +16 -5
- package/dist/draft-workspace.js.map +1 -1
- package/dist/hosted-draft-identity.d.ts +20 -0
- package/dist/hosted-draft-identity.d.ts.map +1 -0
- package/dist/hosted-draft-identity.js +30 -0
- package/dist/hosted-draft-identity.js.map +1 -0
- package/dist/hosted-draft-run.d.ts +60 -0
- package/dist/hosted-draft-run.d.ts.map +1 -0
- package/dist/hosted-draft-run.js +97 -0
- package/dist/hosted-draft-run.js.map +1 -0
- package/dist/legacy-codex-cleanup.d.ts +13 -0
- package/dist/legacy-codex-cleanup.d.ts.map +1 -1
- package/dist/legacy-codex-cleanup.js +83 -0
- package/dist/legacy-codex-cleanup.js.map +1 -1
- package/dist/legacy-skill-catalog.d.ts +2 -2
- package/dist/legacy-skill-catalog.d.ts.map +1 -1
- package/dist/legacy-skill-catalog.js +76 -5
- package/dist/legacy-skill-catalog.js.map +1 -1
- package/dist/login-auth.d.ts +38 -0
- package/dist/login-auth.d.ts.map +1 -1
- package/dist/login-auth.js +67 -16
- package/dist/login-auth.js.map +1 -1
- package/dist/mcp-tool-definitions.js +1 -1
- package/dist/mcp-tool-definitions.js.map +1 -1
- package/dist/next-target.d.ts +1 -4
- package/dist/next-target.d.ts.map +1 -1
- package/dist/next-target.js +5 -9
- package/dist/next-target.js.map +1 -1
- package/dist/next-wait-lease.d.ts +17 -0
- package/dist/next-wait-lease.d.ts.map +1 -0
- package/dist/next-wait-lease.js +92 -0
- package/dist/next-wait-lease.js.map +1 -0
- package/dist/package-client.d.ts +30 -0
- package/dist/package-client.d.ts.map +1 -1
- package/dist/package-client.js.map +1 -1
- package/dist/package-submission.d.ts +17 -0
- package/dist/package-submission.d.ts.map +1 -1
- package/dist/package-submission.js +13 -0
- package/dist/package-submission.js.map +1 -1
- package/dist/pending-auth-store.d.ts +15 -0
- package/dist/pending-auth-store.d.ts.map +1 -0
- package/dist/pending-auth-store.js +90 -0
- package/dist/pending-auth-store.js.map +1 -0
- package/dist/responsive-quality.d.ts +2 -2
- package/dist/responsive-quality.js +2 -2
- package/dist/run-journal-commands.d.ts.map +1 -1
- package/dist/run-journal-commands.js +30 -78
- package/dist/run-journal-commands.js.map +1 -1
- package/dist/run-journal-in-flight.d.ts +2 -2
- package/dist/run-journal-in-flight.d.ts.map +1 -1
- package/dist/run-journal-in-flight.js +0 -0
- package/dist/run-journal-in-flight.js.map +1 -1
- package/dist/skill-installer.d.ts +2 -2
- package/dist/skill-installer.d.ts.map +1 -1
- package/dist/skill-installer.js +2 -2
- package/dist/skill-installer.js.map +1 -1
- package/open-design.json +3 -3
- package/package.json +1 -1
- package/skills/12ui-design/SKILL.md +62 -0
- package/skills/12ui-design/agents/openai.yaml +6 -0
- package/skills/12ui-design/inspire.md +11 -0
- package/dist/cli-create-command.d.ts +0 -59
- package/dist/cli-create-command.d.ts.map +0 -1
- package/dist/cli-create-command.js +0 -354
- package/dist/cli-create-command.js.map +0 -1
- package/dist/cli-export-command.d.ts +0 -26
- package/dist/cli-export-command.d.ts.map +0 -1
- package/dist/cli-export-command.js.map +0 -1
- package/dist/cli-export-output-directory.d.ts +0 -5
- package/dist/cli-export-output-directory.d.ts.map +0 -1
- package/dist/cli-export-output-directory.js.map +0 -1
- package/dist/cli-image-batch-command.d.ts +0 -29
- package/dist/cli-image-batch-command.d.ts.map +0 -1
- package/dist/cli-image-batch-command.js +0 -236
- package/dist/cli-image-batch-command.js.map +0 -1
- package/dist/cli-image-batch-materialize.d.ts +0 -27
- package/dist/cli-image-batch-materialize.d.ts.map +0 -1
- package/dist/cli-image-batch-materialize.js +0 -41
- package/dist/cli-image-batch-materialize.js.map +0 -1
- package/dist/cli-image-batch-resume.d.ts +0 -36
- package/dist/cli-image-batch-resume.d.ts.map +0 -1
- package/dist/cli-image-batch-resume.js +0 -176
- package/dist/cli-image-batch-resume.js.map +0 -1
- package/dist/cli-image-command.d.ts +0 -10
- package/dist/cli-image-command.d.ts.map +0 -1
- package/dist/cli-image-command.js +0 -106
- package/dist/cli-image-command.js.map +0 -1
- package/dist/cli-select-command.d.ts +0 -16
- package/dist/cli-select-command.d.ts.map +0 -1
- package/dist/cli-select-command.js +0 -60
- package/dist/cli-select-command.js.map +0 -1
- package/dist/create-identity.d.ts +0 -25
- package/dist/create-identity.d.ts.map +0 -1
- package/dist/create-identity.js +0 -0
- package/dist/create-identity.js.map +0 -1
- package/dist/draft-prompts.d.ts +0 -35
- package/dist/draft-prompts.d.ts.map +0 -1
- package/dist/draft-prompts.js +0 -51
- package/dist/draft-prompts.js.map +0 -1
- package/dist/image-batch-status.d.ts +0 -42
- package/dist/image-batch-status.d.ts.map +0 -1
- package/dist/image-batch-status.js +0 -143
- package/dist/image-batch-status.js.map +0 -1
- package/dist/image-generation-batch-attempt.d.ts +0 -28
- package/dist/image-generation-batch-attempt.d.ts.map +0 -1
- package/dist/image-generation-batch-attempt.js +0 -48
- package/dist/image-generation-batch-attempt.js.map +0 -1
- package/dist/image-generation-batch-manifest.d.ts +0 -25
- package/dist/image-generation-batch-manifest.d.ts.map +0 -1
- package/dist/image-generation-batch-manifest.js +0 -97
- package/dist/image-generation-batch-manifest.js.map +0 -1
- package/dist/image-generation-completion.d.ts +0 -43
- package/dist/image-generation-completion.d.ts.map +0 -1
- package/dist/image-generation-completion.js +0 -54
- package/dist/image-generation-completion.js.map +0 -1
- package/dist/image-generation-error.d.ts +0 -3
- package/dist/image-generation-error.d.ts.map +0 -1
- package/dist/image-generation-error.js +0 -30
- package/dist/image-generation-error.js.map +0 -1
- package/dist/image-generation-evidence.d.ts +0 -43
- package/dist/image-generation-evidence.d.ts.map +0 -1
- package/dist/image-generation-evidence.js +0 -28
- package/dist/image-generation-evidence.js.map +0 -1
- package/dist/image-generation-fs.d.ts +0 -3
- package/dist/image-generation-fs.d.ts.map +0 -1
- package/dist/image-generation-fs.js +0 -23
- package/dist/image-generation-fs.js.map +0 -1
- package/dist/image-generation-output.d.ts +0 -3
- package/dist/image-generation-output.d.ts.map +0 -1
- package/dist/image-generation-output.js +0 -51
- package/dist/image-generation-output.js.map +0 -1
- package/dist/image-generation-request.d.ts +0 -43
- package/dist/image-generation-request.d.ts.map +0 -1
- package/dist/image-generation-request.js +0 -52
- package/dist/image-generation-request.js.map +0 -1
- package/dist/image-generation-resume.d.ts +0 -49
- package/dist/image-generation-resume.d.ts.map +0 -1
- package/dist/image-generation-resume.js +0 -96
- package/dist/image-generation-resume.js.map +0 -1
- package/dist/image-generation-run.d.ts +0 -46
- package/dist/image-generation-run.d.ts.map +0 -1
- package/dist/image-generation-run.js +0 -158
- package/dist/image-generation-run.js.map +0 -1
- package/dist/image-generation-staging.d.ts +0 -25
- package/dist/image-generation-staging.d.ts.map +0 -1
- package/dist/image-generation-staging.js +0 -80
- package/dist/image-generation-staging.js.map +0 -1
- package/dist/image-generation-usage.d.ts +0 -75
- package/dist/image-generation-usage.d.ts.map +0 -1
- package/dist/image-generation-usage.js +0 -219
- package/dist/image-generation-usage.js.map +0 -1
- package/dist/image-provider-preflight.d.ts +0 -21
- package/dist/image-provider-preflight.d.ts.map +0 -1
- package/dist/image-provider-preflight.js +0 -184
- package/dist/image-provider-preflight.js.map +0 -1
- package/dist/selection-record.d.ts +0 -97
- package/dist/selection-record.d.ts.map +0 -1
- package/dist/selection-record.js +0 -138
- package/dist/selection-record.js.map +0 -1
- package/skills/design/SKILL.md +0 -116
- package/skills/design/agents/openai.yaml +0 -8
- package/skills/design/assets/large-logo.svg +0 -3
- package/skills/design/assets/small-400px.png +0 -0
package/dist/cli-output-paths.js
CHANGED
|
@@ -48,8 +48,8 @@ export const prepareOutputDirectory = async (outDir) => {
|
|
|
48
48
|
* checked, and the resolved absolute file path comes back.
|
|
49
49
|
*
|
|
50
50
|
* The parent check alone is not enough. A measured run named its working
|
|
51
|
-
* directory
|
|
52
|
-
*
|
|
51
|
+
* directory where a file was required: the parent existed and was writable,
|
|
52
|
+
* the paid work settled, and the write then died with a raw EISDIR — the exact
|
|
53
53
|
* money-first failure this module exists to prevent, under a different errno.
|
|
54
54
|
* So a resolved target that IS an existing directory refuses before dispatch.
|
|
55
55
|
*/
|
|
@@ -64,38 +64,4 @@ export const prepareOutputFile = async (outFile) => {
|
|
|
64
64
|
await prepareOutputDirectory(path.dirname(resolved));
|
|
65
65
|
return resolved;
|
|
66
66
|
};
|
|
67
|
-
/**
|
|
68
|
-
* `--out` on `12ui convert` names EITHER a file or a directory to write inside.
|
|
69
|
-
*
|
|
70
|
-
* WHY THE EXCEPTION. The fused convert takes two output paths that did not even
|
|
71
|
-
* agree on their type: a measured run passed `--out build/target.layerdoc.json
|
|
72
|
-
* --export-out build` — a file for one, a directory for the other — and spent
|
|
73
|
-
* four recovery commands on the difference. The distance between the best run
|
|
74
|
-
* of that wave and the worst was entirely where the output paths pointed. So
|
|
75
|
-
* the happy path loses the decision: name a directory and both artifacts land
|
|
76
|
-
* in it under names derived from the input.
|
|
77
|
-
*
|
|
78
|
-
* THE CONTRACT, stated once so nothing has to guess. A path that already exists
|
|
79
|
-
* as a directory is a directory. A path written with a trailing separator is a
|
|
80
|
-
* directory, whether or not it exists yet — that is the caller saying so, and
|
|
81
|
-
* it is the case `prepareOutputFile` would otherwise turn into a file called
|
|
82
|
-
* `build`. Anything else is a file. `--export-out` and `resume --out` stay
|
|
83
|
-
* file-only and still refuse a directory: they name one artifact each, so there
|
|
84
|
-
* is nothing to derive a name from.
|
|
85
|
-
*/
|
|
86
|
-
export const namesDirectory = async (out) => {
|
|
87
|
-
const named = out.trim();
|
|
88
|
-
const resolved = path.resolve(named);
|
|
89
|
-
const trailingSeparator = named.endsWith('/') || named.endsWith(path.sep);
|
|
90
|
-
const existing = await stat(resolved).catch(() => null);
|
|
91
|
-
return Boolean(existing?.isDirectory()) || (trailingSeparator && !existing);
|
|
92
|
-
};
|
|
93
|
-
export const prepareOutputTarget = async (out, deriveFilename) => {
|
|
94
|
-
const resolved = path.resolve(out.trim());
|
|
95
|
-
if (await namesDirectory(out)) {
|
|
96
|
-
await prepareOutputDirectory(resolved);
|
|
97
|
-
return path.join(resolved, deriveFilename());
|
|
98
|
-
}
|
|
99
|
-
return prepareOutputFile(resolved);
|
|
100
|
-
};
|
|
101
67
|
//# sourceMappingURL=cli-output-paths.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-output-paths.js","sourceRoot":"","sources":["../src/cli-output-paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAU,EAAE,CAAC,CAC3C,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,EAAE,MAAc,EAAmB,EAAE;IAC9E,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACtC,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,MAAM,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,UAAU,CAClB,mBAAmB,QAAQ,KAAK,QAAQ,CAAC,KAAK,CAAC,GAAG;cAChD,oEAAoE,EACtE,wBAAwB,EACxB,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EAAE,OAAe,EAAmB,EAAE;IAC1E,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IACxD,IAAI,QAAQ,EAAE,WAAW,EAAE,EAAE,CAAC;QAC5B,MAAM,IAAI,UAAU,CAClB,GAAG,QAAQ,wDAAwD;cACjE,8CAA8C;cAC9C,2DAA2D,EAC7D,wBAAwB,CACzB,CAAC;IACJ,CAAC;IACD,MAAM,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACrD,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC
|
|
1
|
+
{"version":3,"file":"cli-output-paths.js","sourceRoot":"","sources":["../src/cli-output-paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAU,EAAE,CAAC,CAC3C,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,EAAE,MAAc,EAAmB,EAAE;IAC9E,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACtC,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,MAAM,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,UAAU,CAClB,mBAAmB,QAAQ,KAAK,QAAQ,CAAC,KAAK,CAAC,GAAG;cAChD,oEAAoE,EACtE,wBAAwB,EACxB,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EAAE,OAAe,EAAmB,EAAE;IAC1E,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IACxD,IAAI,QAAQ,EAAE,WAAW,EAAE,EAAE,CAAC;QAC5B,MAAM,IAAI,UAAU,CAClB,GAAG,QAAQ,wDAAwD;cACjE,8CAA8C;cAC9C,2DAA2D,EAC7D,wBAAwB,CACzB,CAAC;IACJ,CAAC;IACD,MAAM,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACrD,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC"}
|
|
@@ -10,6 +10,7 @@ import { type PackageSubmissionResult } from './package-submission.js';
|
|
|
10
10
|
*/
|
|
11
11
|
/** A multi-viewport page converts its viewports in parallel, then composes. */
|
|
12
12
|
export declare const PACKAGE_DURATION_SECONDS = 360;
|
|
13
|
+
export declare const PACKAGE_TEMPLATE_NEXT_COMMAND = "Next: 12ui convert package --manifest package.json --out-dir <directory>";
|
|
13
14
|
/**
|
|
14
15
|
* `12ui convert package --template` prints the starting manifest and returns
|
|
15
16
|
* before any config read or network call, so it works with no credentials.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-package-command.d.ts","sourceRoot":"","sources":["../src/cli-package-command.ts"],"names":[],"mappings":"AAGA,OAAO,EAA2B,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAI5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAInD,OAAO,EAAE,+BAA+B,EAAE,MAAM,qBAAqB,CAAC;AAMtE,OAAO,EAIL,KAAK,uBAAuB,EAC7B,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"cli-package-command.d.ts","sourceRoot":"","sources":["../src/cli-package-command.ts"],"names":[],"mappings":"AAGA,OAAO,EAA2B,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAI5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAInD,OAAO,EAAE,+BAA+B,EAAE,MAAM,qBAAqB,CAAC;AAMtE,OAAO,EAIL,KAAK,uBAAuB,EAC7B,MAAM,yBAAyB,CAAC;AAMjC;;;;;GAKG;AAEH,+EAA+E;AAC/E,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAE5C,eAAO,MAAM,6BAA6B,6EACkC,CAAC;AA2B7E;;;;;;;;;GASG;AACH,eAAO,MAAM,yBAAyB,GAAI,OAAO,QAAQ,KAAG,OAK3D,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,OAAO,QAAQ,EACf,eAAc;IACZ,UAAU,CAAC,EAAE,OAAO,oBAAoB,CAAC;IACzC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,oBAAoB,CAAC,KAAK,+BAA+B,CAAC;IACpG,2EAA2E;IAC3E,YAAY,CAAC,EAAE,MAAM,CAAC;CAClB,KACL,OAAO,CAAC,uBAAuB,CAqKjC,CAAC"}
|
|
@@ -12,7 +12,7 @@ import { TwelveUiConversionPackageClient } from './package-client.js';
|
|
|
12
12
|
import { readLocalPackageManifest } from './package-manifest-file.js';
|
|
13
13
|
import { PACKAGE_MANIFEST_TEMPLATE_NOTES, renderPackageManifestTemplate, } from './package-manifest-template.js';
|
|
14
14
|
import { PACKAGE_RESULT_FILENAME, submitConversionPackage, writePackageResultRecord, } from './package-submission.js';
|
|
15
|
-
import {
|
|
15
|
+
import { createLongRunningProgress, packageStageUnit, } from './cli-progress.js';
|
|
16
16
|
/**
|
|
17
17
|
* `12ui convert package` — the ordered-viewport submission that had no CLI at
|
|
18
18
|
* all. Without it the terminal step of the branch path was the least supported
|
|
@@ -21,6 +21,7 @@ import { createPackageProgressReporter, formatDuration, nextActionLine, } from '
|
|
|
21
21
|
*/
|
|
22
22
|
/** A multi-viewport page converts its viewports in parallel, then composes. */
|
|
23
23
|
export const PACKAGE_DURATION_SECONDS = 360;
|
|
24
|
+
export const PACKAGE_TEMPLATE_NEXT_COMMAND = 'Next: 12ui convert package --manifest package.json --out-dir <directory>';
|
|
24
25
|
const parseTimeoutMs = (value) => {
|
|
25
26
|
if (value === undefined)
|
|
26
27
|
return undefined;
|
|
@@ -57,7 +58,7 @@ const refuseExistingResult = async (outDir) => {
|
|
|
57
58
|
export const runPackageTemplateCommand = (flags) => {
|
|
58
59
|
if (!booleanFlag(flags, 'template'))
|
|
59
60
|
return false;
|
|
60
|
-
process.stderr.write(`${PACKAGE_MANIFEST_TEMPLATE_NOTES}\n`);
|
|
61
|
+
process.stderr.write(`${PACKAGE_MANIFEST_TEMPLATE_NOTES}\n${PACKAGE_TEMPLATE_NEXT_COMMAND}\n`);
|
|
61
62
|
process.stdout.write(renderPackageManifestTemplate());
|
|
62
63
|
return true;
|
|
63
64
|
};
|
|
@@ -90,40 +91,97 @@ export const runPackageCommand = async (flags, dependencies = {}) => {
|
|
|
90
91
|
});
|
|
91
92
|
const client = (dependencies.createClient ?? ((value) => (new TwelveUiConversionPackageClient(value))))(config);
|
|
92
93
|
const viewportCount = manifest.pages.reduce((total, page) => total + page.viewports.length, 0);
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
const startedAt = Date.now();
|
|
98
|
-
const reportProgress = createPackageProgressReporter({
|
|
99
|
-
write: (line) => { process.stderr.write(`${line}\n`); },
|
|
100
|
-
elapsed: () => formatDuration((Date.now() - startedAt) / 1000),
|
|
94
|
+
const progress = createLongRunningProgress({
|
|
95
|
+
label: 'convert package',
|
|
96
|
+
typicalSeconds: PACKAGE_DURATION_SECONDS,
|
|
97
|
+
quiet,
|
|
101
98
|
});
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
idempotencyKey,
|
|
99
|
+
progress.brief({
|
|
100
|
+
request: `convert package: ${manifest.pages.length} page(s), ${viewportCount} viewport(s),`
|
|
101
|
+
+ ` to ${manifest.output}`,
|
|
102
|
+
paid: 'one package conversion (new viewports paid; attached source conversions replay free)',
|
|
103
|
+
done: `one document per page + ${PACKAGE_RESULT_FILENAME} in ${outDir}`,
|
|
104
|
+
expectation: {
|
|
105
|
+
typicalSeconds: PACKAGE_DURATION_SECONDS,
|
|
106
|
+
basis: 'measured median for a one-page package; pages convert up to three at a time',
|
|
111
107
|
},
|
|
112
|
-
|
|
113
|
-
? {}
|
|
114
|
-
: { timeoutMs: parseTimeoutMs(stringFlag(flags, 'timeout-ms')) }),
|
|
115
|
-
onSubmitted: quiet
|
|
116
|
-
? undefined
|
|
117
|
-
: (packageId) => {
|
|
118
|
-
process.stderr.write(`12ui convert package ${packageId} submitted.\n${nextActionLine({
|
|
119
|
-
what: 'A multi-viewport page conversion',
|
|
120
|
-
typicalSeconds: PACKAGE_DURATION_SECONDS,
|
|
121
|
-
statusCommand: `GET /api/v1/convert/package/${packageId}`,
|
|
122
|
-
waitHint: 'or leave this command running, which is what --wait already does by default',
|
|
123
|
-
})}\n`);
|
|
124
|
-
},
|
|
125
|
-
onProgress: quiet ? undefined : (event) => { reportProgress(undefined, event); },
|
|
108
|
+
blocking: true,
|
|
126
109
|
});
|
|
110
|
+
progress.update({
|
|
111
|
+
stage: 'prepare',
|
|
112
|
+
completed: 0,
|
|
113
|
+
total: manifest.pages.length,
|
|
114
|
+
unit: 'pages',
|
|
115
|
+
});
|
|
116
|
+
let result;
|
|
117
|
+
try {
|
|
118
|
+
result = await submitConversionPackage({
|
|
119
|
+
client,
|
|
120
|
+
outDir,
|
|
121
|
+
submission: {
|
|
122
|
+
output: manifest.output,
|
|
123
|
+
...(manifest.model ? { model: manifest.model } : {}),
|
|
124
|
+
...(manifest.responsiveQuality ? { responsiveQuality: manifest.responsiveQuality } : {}),
|
|
125
|
+
pages: manifest.pages,
|
|
126
|
+
idempotencyKey,
|
|
127
|
+
},
|
|
128
|
+
...(parseTimeoutMs(stringFlag(flags, 'timeout-ms')) === undefined
|
|
129
|
+
? {}
|
|
130
|
+
: { timeoutMs: parseTimeoutMs(stringFlag(flags, 'timeout-ms')) }),
|
|
131
|
+
onSubmitted: (packageId) => {
|
|
132
|
+
// Identity said once, not on every tick.
|
|
133
|
+
progress.note(`claimed package ${packageId}`);
|
|
134
|
+
progress.update({
|
|
135
|
+
stage: 'queued',
|
|
136
|
+
completed: 0,
|
|
137
|
+
total: manifest.pages.length,
|
|
138
|
+
unit: 'pages',
|
|
139
|
+
});
|
|
140
|
+
},
|
|
141
|
+
onProgress: (event) => {
|
|
142
|
+
progress.update({
|
|
143
|
+
stage: event.stage === 'succeeded' ? 'collecting' : event.stage,
|
|
144
|
+
// Raw percents (package scale AND per-child) never render — the
|
|
145
|
+
// owner's risk rule; children carry their advancing stage words.
|
|
146
|
+
// The elapsed clock anchors to the package's own age: an
|
|
147
|
+
// idempotent resubmission attaches to existing work, and quoting
|
|
148
|
+
// a fresh-run clock against a 13-minute-old package overstated
|
|
149
|
+
// the estimate and understated the progress (measured, board v2).
|
|
150
|
+
...(event.createdAt
|
|
151
|
+
? { elapsedSeconds: Math.max(0, (Date.now() - Date.parse(event.createdAt)) / 1000) || 0 }
|
|
152
|
+
: {}),
|
|
153
|
+
...(event.completed === undefined ? {} : {
|
|
154
|
+
completed: event.completed,
|
|
155
|
+
total: event.total,
|
|
156
|
+
unit: packageStageUnit(event.stage),
|
|
157
|
+
}),
|
|
158
|
+
...(event.running === undefined ? {} : { running: event.running }),
|
|
159
|
+
// The children ARE the news of a long phase: their stage and
|
|
160
|
+
// percent keep moving while the package percent plateaus. The
|
|
161
|
+
// board held `exporting pages 93%` for 2m8s while a child was
|
|
162
|
+
// mid-anchor — and rendered `1 child operation(s) reporting`.
|
|
163
|
+
...(event.children?.length
|
|
164
|
+
? { children: event.children.map((child) => ({ id: child.id, stage: child.stage })) }
|
|
165
|
+
: {}),
|
|
166
|
+
...(event.stageSince ? { stageSince: event.stageSince } : {}),
|
|
167
|
+
...(event.quotaParked
|
|
168
|
+
? {
|
|
169
|
+
detail: `waiting on quota (${event.quotaParked.reason}${event.quotaParked.detail ? `: ${event.quotaParked.detail}` : ''})`,
|
|
170
|
+
}
|
|
171
|
+
: event.pagesAvailable
|
|
172
|
+
? { detail: `${event.pagesAvailable} page(s) already fetchable` }
|
|
173
|
+
: {}),
|
|
174
|
+
});
|
|
175
|
+
},
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
catch (error) {
|
|
179
|
+
progress.finish('stopped', {
|
|
180
|
+
detail: error instanceof Error ? error.message : String(error),
|
|
181
|
+
next: `re-run with the same manifest and --out-dir: the idempotency key replays settled work free`,
|
|
182
|
+
});
|
|
183
|
+
throw error;
|
|
184
|
+
}
|
|
127
185
|
const resultPath = await writePackageResultRecord(outDir, result);
|
|
128
186
|
// Every viewport the package converted is a reusable artifact in its own
|
|
129
187
|
// right, so the screenshots this manifest named are proved for the next run
|
|
@@ -136,8 +194,23 @@ export const runPackageCommand = async (flags, dependencies = {}) => {
|
|
|
136
194
|
...(quiet ? {} : { warn: (message) => { process.stderr.write(`${message}\n`); } }),
|
|
137
195
|
});
|
|
138
196
|
const reported = { ...result, resultPath };
|
|
139
|
-
console.log(JSON.stringify({ manifestPath, outDir, ...reported }, null, 2));
|
|
140
197
|
const failed = reported.pages.filter((page) => page.status === 'failed');
|
|
198
|
+
progress.finish(failed.length > 0 ? 'partial' : 'succeeded', {
|
|
199
|
+
...(failed.length > 0
|
|
200
|
+
? { detail: `${failed.length} of ${reported.pages.length} page(s) failed` }
|
|
201
|
+
: {}),
|
|
202
|
+
artifacts: [
|
|
203
|
+
...reported.pages.map((page) => ({
|
|
204
|
+
name: `page ${page.id}`,
|
|
205
|
+
state: page.status,
|
|
206
|
+
...(page.outFile ? { path: page.outFile } : {}),
|
|
207
|
+
})),
|
|
208
|
+
{ name: 'package result', state: 'written', path: resultPath },
|
|
209
|
+
],
|
|
210
|
+
spend: `package ${reported.packageId} purchased; attached source conversions replayed free`,
|
|
211
|
+
next: `every page and conversion id: ${resultPath}`,
|
|
212
|
+
});
|
|
213
|
+
console.log(JSON.stringify({ manifestPath, outDir, ...reported }, null, 2));
|
|
141
214
|
if (failed.length > 0) {
|
|
142
215
|
throw new Error(`Package ${reported.packageId} converted ${reported.pages.length - failed.length} of`
|
|
143
216
|
+ ` ${reported.pages.length} page(s). Failed: ${failed.map((page) => page.id).join(', ')}.`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-package-command.js","sourceRoot":"","sources":["../src/cli-package-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,WAAW,EAAE,UAAU,EAAiB,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EAAE,+BAA+B,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,+BAA+B,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EACL,+BAA+B,EAC/B,6BAA6B,GAC9B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,GAEzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"cli-package-command.js","sourceRoot":"","sources":["../src/cli-package-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
type Fetch = typeof fetch;
|
|
2
|
+
export type AuthOnboardingLink = {
|
|
3
|
+
approvalUrl: string;
|
|
4
|
+
source: 'minted' | 'reused' | 'static';
|
|
5
|
+
};
|
|
6
|
+
export type PendingAuthOptions = {
|
|
7
|
+
origin?: string;
|
|
8
|
+
loginOrigin?: string;
|
|
9
|
+
fetch?: Fetch;
|
|
10
|
+
now?: () => number;
|
|
11
|
+
pendingFile?: string;
|
|
12
|
+
requestTimeoutMs?: number;
|
|
13
|
+
};
|
|
14
|
+
export declare const prepareAuthOnboardingLink: (options?: PendingAuthOptions) => Promise<AuthOnboardingLink>;
|
|
15
|
+
export declare const redeemPendingAuthOnce: (options?: PendingAuthOptions) => Promise<AuthOnboardingLink | {
|
|
16
|
+
authenticated: true;
|
|
17
|
+
}>;
|
|
18
|
+
export declare const runWithPendingAuthRedemption: <Result>(operation: () => Promise<Result>, options?: PendingAuthOptions) => Promise<Result>;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=cli-pending-auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-pending-auth.d.ts","sourceRoot":"","sources":["../src/cli-pending-auth.ts"],"names":[],"mappings":"AAiBA,KAAK,KAAK,GAAG,OAAO,KAAK,CAAC;AAI1B,MAAM,MAAM,kBAAkB,GAAG;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAkDF,eAAO,MAAM,yBAAyB,GACpC,UAAS,kBAAuB,KAC/B,OAAO,CAAC,kBAAkB,CAyC5B,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAChC,UAAS,kBAAuB,KAC/B,OAAO,CAAC,kBAAkB,GAAG;IAAE,aAAa,EAAE,IAAI,CAAA;CAAE,CAmEtD,CAAC;AAEF,eAAO,MAAM,4BAA4B,GAAU,MAAM,EACvD,WAAW,MAAM,OAAO,CAAC,MAAM,CAAC,EAChC,UAAS,kBAAuB,KAC/B,OAAO,CAAC,MAAM,CAUhB,CAAC"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { MissingTwelveUiCredentialError, TWELVE_UI_CONNECT_CLI_URL } from './cli-auth-onboarding.js';
|
|
2
|
+
import { normalizeConversionOrigin } from './config.js';
|
|
3
|
+
import { storeRedeemedConversionCredentials } from './credential-setup.js';
|
|
4
|
+
import { createTwelveUiDeviceAuthorization, normalizeLoginOrigin, pollTwelveUiDeviceOnce, TWELVE_UI_DEVICE_SCOPES, } from './login-auth.js';
|
|
5
|
+
import { readPendingAuthorization, removePendingAuthorization, resolvePendingAuthFile, writePendingAuthorization, } from './pending-auth-store.js';
|
|
6
|
+
const AUTH_REQUEST_TIMEOUT_MS = 2_500;
|
|
7
|
+
const boundedFetch = (fetchImpl, timeoutMs) => (input, init = {}) => fetchImpl(input, {
|
|
8
|
+
...init,
|
|
9
|
+
signal: init.signal ?? AbortSignal.timeout(timeoutMs),
|
|
10
|
+
});
|
|
11
|
+
const approvalUrlFor = (pending) => {
|
|
12
|
+
const url = new URL('/connect-cli', pending.connectOrigin);
|
|
13
|
+
url.searchParams.set('user_code', pending.userCode);
|
|
14
|
+
return url.toString();
|
|
15
|
+
};
|
|
16
|
+
const expectedOrigins = (options) => ({
|
|
17
|
+
connectOrigin: normalizeConversionOrigin(options.origin ?? process.env.TWELVE_UI_ORIGIN ?? 'https://12ui.com'),
|
|
18
|
+
loginOrigin: normalizeLoginOrigin(options.loginOrigin),
|
|
19
|
+
});
|
|
20
|
+
const matchesRequest = (pending, expected) => (pending.connectOrigin === expected.connectOrigin
|
|
21
|
+
&& pending.loginOrigin === expected.loginOrigin
|
|
22
|
+
&& pending.scopes.length === TWELVE_UI_DEVICE_SCOPES.length
|
|
23
|
+
&& TWELVE_UI_DEVICE_SCOPES.every((scope) => pending.scopes.includes(scope)));
|
|
24
|
+
const staticLink = () => ({
|
|
25
|
+
approvalUrl: TWELVE_UI_CONNECT_CLI_URL,
|
|
26
|
+
source: 'static',
|
|
27
|
+
});
|
|
28
|
+
const discardUnreadablePending = async (pendingFile) => {
|
|
29
|
+
try {
|
|
30
|
+
await removePendingAuthorization(pendingFile);
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
// Rendering the static onboarding copy is safer than replacing the wrapped
|
|
34
|
+
// command's missing-credential failure with a local cleanup failure.
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
export const prepareAuthOnboardingLink = async (options = {}) => {
|
|
38
|
+
const pendingFile = options.pendingFile ?? resolvePendingAuthFile();
|
|
39
|
+
const now = options.now ?? Date.now;
|
|
40
|
+
try {
|
|
41
|
+
const expected = expectedOrigins(options);
|
|
42
|
+
let pending;
|
|
43
|
+
try {
|
|
44
|
+
pending = await readPendingAuthorization(pendingFile);
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
await discardUnreadablePending(pendingFile);
|
|
48
|
+
pending = null;
|
|
49
|
+
}
|
|
50
|
+
if (pending && matchesRequest(pending, expected) && pending.expiresAt > now()) {
|
|
51
|
+
return { approvalUrl: approvalUrlFor(pending), source: 'reused' };
|
|
52
|
+
}
|
|
53
|
+
if (pending)
|
|
54
|
+
await removePendingAuthorization(pendingFile);
|
|
55
|
+
const fetchImpl = boundedFetch(options.fetch ?? fetch, options.requestTimeoutMs ?? AUTH_REQUEST_TIMEOUT_MS);
|
|
56
|
+
const created = await createTwelveUiDeviceAuthorization({
|
|
57
|
+
loginOrigin: expected.loginOrigin,
|
|
58
|
+
clientName: '12ui CLI',
|
|
59
|
+
scopes: TWELVE_UI_DEVICE_SCOPES,
|
|
60
|
+
fetch: fetchImpl,
|
|
61
|
+
});
|
|
62
|
+
const record = {
|
|
63
|
+
version: 1,
|
|
64
|
+
deviceCode: created.authorization.deviceCode,
|
|
65
|
+
userCode: created.authorization.userCode,
|
|
66
|
+
expiresAt: created.authorization.expiresAt,
|
|
67
|
+
loginOrigin: created.loginOrigin,
|
|
68
|
+
connectOrigin: expected.connectOrigin,
|
|
69
|
+
scopes: created.scopes,
|
|
70
|
+
};
|
|
71
|
+
await writePendingAuthorization(record, pendingFile);
|
|
72
|
+
return { approvalUrl: approvalUrlFor(record), source: 'minted' };
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
return staticLink();
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
export const redeemPendingAuthOnce = async (options = {}) => {
|
|
79
|
+
const pendingFile = options.pendingFile ?? resolvePendingAuthFile();
|
|
80
|
+
const now = options.now ?? Date.now;
|
|
81
|
+
let pending;
|
|
82
|
+
try {
|
|
83
|
+
pending = await readPendingAuthorization(pendingFile);
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
await discardUnreadablePending(pendingFile);
|
|
87
|
+
return prepareAuthOnboardingLink(options);
|
|
88
|
+
}
|
|
89
|
+
if (!pending)
|
|
90
|
+
return prepareAuthOnboardingLink(options);
|
|
91
|
+
let expected;
|
|
92
|
+
try {
|
|
93
|
+
expected = expectedOrigins(options);
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
return staticLink();
|
|
97
|
+
}
|
|
98
|
+
if (!matchesRequest(pending, expected) || pending.expiresAt <= now()) {
|
|
99
|
+
try {
|
|
100
|
+
await removePendingAuthorization(pendingFile);
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
return staticLink();
|
|
104
|
+
}
|
|
105
|
+
return prepareAuthOnboardingLink(options);
|
|
106
|
+
}
|
|
107
|
+
const fetchImpl = boundedFetch(options.fetch ?? fetch, options.requestTimeoutMs ?? AUTH_REQUEST_TIMEOUT_MS);
|
|
108
|
+
let result;
|
|
109
|
+
try {
|
|
110
|
+
result = await pollTwelveUiDeviceOnce({
|
|
111
|
+
authorization: pending,
|
|
112
|
+
loginOrigin: pending.loginOrigin,
|
|
113
|
+
requiredScopes: pending.scopes,
|
|
114
|
+
fetch: fetchImpl,
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
return { approvalUrl: approvalUrlFor(pending), source: 'reused' };
|
|
119
|
+
}
|
|
120
|
+
if (result.status === 'pending') {
|
|
121
|
+
return { approvalUrl: approvalUrlFor(pending), source: 'reused' };
|
|
122
|
+
}
|
|
123
|
+
if (result.status === 'denied' || result.status === 'expired') {
|
|
124
|
+
try {
|
|
125
|
+
await removePendingAuthorization(pendingFile);
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
return staticLink();
|
|
129
|
+
}
|
|
130
|
+
return prepareAuthOnboardingLink(options);
|
|
131
|
+
}
|
|
132
|
+
try {
|
|
133
|
+
await storeRedeemedConversionCredentials({
|
|
134
|
+
credential: result.credential,
|
|
135
|
+
origin: pending.connectOrigin,
|
|
136
|
+
loginOrigin: pending.loginOrigin,
|
|
137
|
+
requiredScopes: pending.scopes,
|
|
138
|
+
fetch: fetchImpl,
|
|
139
|
+
});
|
|
140
|
+
await removePendingAuthorization(pendingFile);
|
|
141
|
+
return { authenticated: true };
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
return { approvalUrl: approvalUrlFor(pending), source: 'reused' };
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
export const runWithPendingAuthRedemption = async (operation, options = {}) => {
|
|
148
|
+
try {
|
|
149
|
+
return await operation();
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
if (!(error instanceof MissingTwelveUiCredentialError))
|
|
153
|
+
throw error;
|
|
154
|
+
}
|
|
155
|
+
const redemption = await redeemPendingAuthOnce(options);
|
|
156
|
+
if ('authenticated' in redemption)
|
|
157
|
+
return operation();
|
|
158
|
+
throw new MissingTwelveUiCredentialError(redemption.approvalUrl);
|
|
159
|
+
};
|
|
160
|
+
//# sourceMappingURL=cli-pending-auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-pending-auth.js","sourceRoot":"","sources":["../src/cli-pending-auth.ts"],"names":[],"mappings":"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"}
|