@12ui/design 0.2.0

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.
Files changed (157) hide show
  1. package/README.md +484 -0
  2. package/dist/artifact-materializer.d.ts +17 -0
  3. package/dist/artifact-materializer.d.ts.map +1 -0
  4. package/dist/artifact-materializer.js +66 -0
  5. package/dist/artifact-materializer.js.map +1 -0
  6. package/dist/cli-arguments.d.ts +8 -0
  7. package/dist/cli-arguments.d.ts.map +1 -0
  8. package/dist/cli-arguments.js +39 -0
  9. package/dist/cli-arguments.js.map +1 -0
  10. package/dist/cli-auth-command.d.ts +3 -0
  11. package/dist/cli-auth-command.d.ts.map +1 -0
  12. package/dist/cli-auth-command.js +100 -0
  13. package/dist/cli-auth-command.js.map +1 -0
  14. package/dist/cli-corpus-command.d.ts +12 -0
  15. package/dist/cli-corpus-command.d.ts.map +1 -0
  16. package/dist/cli-corpus-command.js +120 -0
  17. package/dist/cli-corpus-command.js.map +1 -0
  18. package/dist/cli-corpus-evidence.d.ts +17 -0
  19. package/dist/cli-corpus-evidence.d.ts.map +1 -0
  20. package/dist/cli-corpus-evidence.js +150 -0
  21. package/dist/cli-corpus-evidence.js.map +1 -0
  22. package/dist/cli-corpus-reference-downloads.d.ts +8 -0
  23. package/dist/cli-corpus-reference-downloads.d.ts.map +1 -0
  24. package/dist/cli-corpus-reference-downloads.js +111 -0
  25. package/dist/cli-corpus-reference-downloads.js.map +1 -0
  26. package/dist/cli-corpus-reference-receipts.d.ts +36 -0
  27. package/dist/cli-corpus-reference-receipts.d.ts.map +1 -0
  28. package/dist/cli-corpus-reference-receipts.js +137 -0
  29. package/dist/cli-corpus-reference-receipts.js.map +1 -0
  30. package/dist/cli-corpus-run.d.ts +17 -0
  31. package/dist/cli-corpus-run.d.ts.map +1 -0
  32. package/dist/cli-corpus-run.js +94 -0
  33. package/dist/cli-corpus-run.js.map +1 -0
  34. package/dist/cli-corpus-types.d.ts +52 -0
  35. package/dist/cli-corpus-types.d.ts.map +1 -0
  36. package/dist/cli-corpus-types.js +6 -0
  37. package/dist/cli-corpus-types.js.map +1 -0
  38. package/dist/cli-export-command.d.ts +3 -0
  39. package/dist/cli-export-command.d.ts.map +1 -0
  40. package/dist/cli-export-command.js +234 -0
  41. package/dist/cli-export-command.js.map +1 -0
  42. package/dist/cli-image-command.d.ts +8 -0
  43. package/dist/cli-image-command.d.ts.map +1 -0
  44. package/dist/cli-image-command.js +193 -0
  45. package/dist/cli-image-command.js.map +1 -0
  46. package/dist/cli-persistence.d.ts +25 -0
  47. package/dist/cli-persistence.d.ts.map +1 -0
  48. package/dist/cli-persistence.js +253 -0
  49. package/dist/cli-persistence.js.map +1 -0
  50. package/dist/cli-skill-command.d.ts +9 -0
  51. package/dist/cli-skill-command.d.ts.map +1 -0
  52. package/dist/cli-skill-command.js +215 -0
  53. package/dist/cli-skill-command.js.map +1 -0
  54. package/dist/cli.d.ts +3 -0
  55. package/dist/cli.d.ts.map +1 -0
  56. package/dist/cli.js +272 -0
  57. package/dist/cli.js.map +1 -0
  58. package/dist/codex-skill-config.d.ts +3 -0
  59. package/dist/codex-skill-config.d.ts.map +1 -0
  60. package/dist/codex-skill-config.js +83 -0
  61. package/dist/codex-skill-config.js.map +1 -0
  62. package/dist/config.d.ts +7 -0
  63. package/dist/config.d.ts.map +1 -0
  64. package/dist/config.js +34 -0
  65. package/dist/config.js.map +1 -0
  66. package/dist/conversion-client.d.ts +264 -0
  67. package/dist/conversion-client.d.ts.map +1 -0
  68. package/dist/conversion-client.js +445 -0
  69. package/dist/conversion-client.js.map +1 -0
  70. package/dist/conversion-models.d.ts +4 -0
  71. package/dist/conversion-models.d.ts.map +1 -0
  72. package/dist/conversion-models.js +3 -0
  73. package/dist/conversion-models.js.map +1 -0
  74. package/dist/conversion-outputs.d.ts +118 -0
  75. package/dist/conversion-outputs.d.ts.map +1 -0
  76. package/dist/conversion-outputs.js +84 -0
  77. package/dist/conversion-outputs.js.map +1 -0
  78. package/dist/conversion-problems.d.ts +3 -0
  79. package/dist/conversion-problems.d.ts.map +1 -0
  80. package/dist/conversion-problems.js +21 -0
  81. package/dist/conversion-problems.js.map +1 -0
  82. package/dist/corpus-client.d.ts +171 -0
  83. package/dist/corpus-client.d.ts.map +1 -0
  84. package/dist/corpus-client.js +85 -0
  85. package/dist/corpus-client.js.map +1 -0
  86. package/dist/credential-setup.d.ts +27 -0
  87. package/dist/credential-setup.d.ts.map +1 -0
  88. package/dist/credential-setup.js +242 -0
  89. package/dist/credential-setup.js.map +1 -0
  90. package/dist/credential-store.d.ts +12 -0
  91. package/dist/credential-store.d.ts.map +1 -0
  92. package/dist/credential-store.js +103 -0
  93. package/dist/credential-store.js.map +1 -0
  94. package/dist/idempotency-key.d.ts +2 -0
  95. package/dist/idempotency-key.d.ts.map +1 -0
  96. package/dist/idempotency-key.js +19 -0
  97. package/dist/idempotency-key.js.map +1 -0
  98. package/dist/image-generation-evidence.d.ts +26 -0
  99. package/dist/image-generation-evidence.d.ts.map +1 -0
  100. package/dist/image-generation-evidence.js +28 -0
  101. package/dist/image-generation-evidence.js.map +1 -0
  102. package/dist/image-output-width.d.ts +11 -0
  103. package/dist/image-output-width.d.ts.map +1 -0
  104. package/dist/image-output-width.js +55 -0
  105. package/dist/image-output-width.js.map +1 -0
  106. package/dist/image-provider-preflight.d.ts +21 -0
  107. package/dist/image-provider-preflight.d.ts.map +1 -0
  108. package/dist/image-provider-preflight.js +184 -0
  109. package/dist/image-provider-preflight.js.map +1 -0
  110. package/dist/index.d.ts +13 -0
  111. package/dist/index.d.ts.map +1 -0
  112. package/dist/index.js +13 -0
  113. package/dist/index.js.map +1 -0
  114. package/dist/legacy-codex-cleanup.d.ts +11 -0
  115. package/dist/legacy-codex-cleanup.d.ts.map +1 -0
  116. package/dist/legacy-codex-cleanup.js +147 -0
  117. package/dist/legacy-codex-cleanup.js.map +1 -0
  118. package/dist/legacy-skill-catalog.d.ts +5 -0
  119. package/dist/legacy-skill-catalog.d.ts.map +1 -0
  120. package/dist/legacy-skill-catalog.js +123 -0
  121. package/dist/legacy-skill-catalog.js.map +1 -0
  122. package/dist/local-conversion-input.d.ts +21 -0
  123. package/dist/local-conversion-input.d.ts.map +1 -0
  124. package/dist/local-conversion-input.js +54 -0
  125. package/dist/local-conversion-input.js.map +1 -0
  126. package/dist/login-auth.d.ts +63 -0
  127. package/dist/login-auth.d.ts.map +1 -0
  128. package/dist/login-auth.js +282 -0
  129. package/dist/login-auth.js.map +1 -0
  130. package/dist/package-client.d.ts +147 -0
  131. package/dist/package-client.d.ts.map +1 -0
  132. package/dist/package-client.js +119 -0
  133. package/dist/package-client.js.map +1 -0
  134. package/dist/project-profiles.d.ts +45 -0
  135. package/dist/project-profiles.d.ts.map +1 -0
  136. package/dist/project-profiles.js +162 -0
  137. package/dist/project-profiles.js.map +1 -0
  138. package/dist/responsive-quality.d.ts +26 -0
  139. package/dist/responsive-quality.d.ts.map +1 -0
  140. package/dist/responsive-quality.js +68 -0
  141. package/dist/responsive-quality.js.map +1 -0
  142. package/dist/server.d.ts +6 -0
  143. package/dist/server.d.ts.map +1 -0
  144. package/dist/server.js +173 -0
  145. package/dist/server.js.map +1 -0
  146. package/dist/skill-installer.d.ts +51 -0
  147. package/dist/skill-installer.d.ts.map +1 -0
  148. package/dist/skill-installer.js +328 -0
  149. package/dist/skill-installer.js.map +1 -0
  150. package/package.json +53 -0
  151. package/skills/design/SKILL.md +156 -0
  152. package/skills/design/agents/openai.yaml +6 -0
  153. package/skills/design/references/selection-contract.md +44 -0
  154. package/skills/design-convert/SKILL.md +118 -0
  155. package/skills/design-convert/agents/openai.yaml +6 -0
  156. package/skills/design-search/SKILL.md +86 -0
  157. package/skills/design-search/agents/openai.yaml +6 -0
@@ -0,0 +1,54 @@
1
+ import path from 'node:path';
2
+ import { CONVERSION_OUTPUT_FILENAME_SUFFIXES, isLayerDocInputOutput, } from './conversion-outputs.js';
3
+ import { isProjectConversionOutput, parseConversionOutputProfile, } from './project-profiles.js';
4
+ const IMAGE_MEDIA_TYPES = {
5
+ '.jpeg': 'image/jpeg',
6
+ '.jpg': 'image/jpeg',
7
+ '.png': 'image/png',
8
+ '.webp': 'image/webp',
9
+ };
10
+ export const classifyLocalConversionInput = (filePath) => {
11
+ const extension = path.extname(filePath).toLowerCase();
12
+ const imageMediaType = IMAGE_MEDIA_TYPES[extension];
13
+ if (imageMediaType)
14
+ return { kind: 'image', mediaType: imageMediaType };
15
+ if (extension === '.json')
16
+ return { kind: 'layerdoc' };
17
+ throw new Error('Input must be a PNG, JPEG, WebP, or LayerDoc JSON file');
18
+ };
19
+ export const createInputForLocalFile = (args) => {
20
+ const input = classifyLocalConversionInput(args.filePath);
21
+ const filename = path.basename(args.filePath);
22
+ const profile = isProjectConversionOutput(args.output)
23
+ ? parseConversionOutputProfile(args.output, args.profile)
24
+ : undefined;
25
+ if (!isProjectConversionOutput(args.output) && args.profile !== undefined) {
26
+ throw new Error('profile is only valid for web_project or app_project outputs');
27
+ }
28
+ const outputSelection = profile
29
+ ? { output: args.output, profile }
30
+ : { output: args.output };
31
+ if (input.kind === 'layerdoc') {
32
+ if (!isLayerDocInputOutput(args.output)) {
33
+ throw new Error(`Unsupported LayerDoc output: ${String(args.output)}`);
34
+ }
35
+ return { layerdoc: args.bytes, filename, ...outputSelection };
36
+ }
37
+ return {
38
+ bytes: args.bytes,
39
+ filename,
40
+ mediaType: input.mediaType,
41
+ ...outputSelection,
42
+ };
43
+ };
44
+ export const defaultConversionOutputPath = (inputPath, output) => {
45
+ const suffix = CONVERSION_OUTPUT_FILENAME_SUFFIXES[output];
46
+ const extension = path.extname(inputPath);
47
+ const stem = inputPath.toLowerCase().endsWith('.layerdoc.json')
48
+ ? inputPath.slice(0, -'.layerdoc.json'.length)
49
+ : extension
50
+ ? inputPath.slice(0, -extension.length)
51
+ : inputPath;
52
+ return `${stem}.${suffix}`;
53
+ };
54
+ //# sourceMappingURL=local-conversion-input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-conversion-input.js","sourceRoot":"","sources":["../src/local-conversion-input.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAM7B,OAAO,EACL,mCAAmC,EACnC,qBAAqB,GAEtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,yBAAyB,EACzB,4BAA4B,GAE7B,MAAM,uBAAuB,CAAC;AAU/B,MAAM,iBAAiB,GAAmC;IACxD,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,YAAY;IACpB,MAAM,EAAE,WAAW;IACnB,OAAO,EAAE,YAAY;CACtB,CAAC;AAEF,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,QAAgB,EAAwB,EAAE;IACrF,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IACvD,MAAM,cAAc,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACpD,IAAI,cAAc;QAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC;IACxE,IAAI,SAAS,KAAK,OAAO;QAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IACvD,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;AAC5E,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,IAKvC,EAA8B,EAAE;IAC/B,MAAM,KAAK,GAAG,4BAA4B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,yBAAyB,CAAC,IAAI,CAAC,MAAM,CAAC;QACpD,CAAC,CAAC,4BAA4B,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC;QACzD,CAAC,CAAC,SAAS,CAAC;IACd,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1E,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAClF,CAAC;IACD,MAAM,eAAe,GAAG,OAAO;QAC7B,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE;QAClC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;IAC5B,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC9B,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,gCAAgC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACzE,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,eAAe,EAAmC,CAAC;IACjG,CAAC;IACD,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,QAAQ;QACR,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,GAAG,eAAe;KACW,CAAC;AAClC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,2BAA2B,GAAG,CACzC,SAAiB,EACjB,MAAwB,EAChB,EAAE;IACV,MAAM,MAAM,GAAG,mCAAmC,CAAC,MAAM,CAAC,CAAC;IAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAC7D,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC;QAC9C,CAAC,CAAC,SAAS;YACT,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC;YACvC,CAAC,CAAC,SAAS,CAAC;IAChB,OAAO,GAAG,IAAI,IAAI,MAAM,EAAE,CAAC;AAC7B,CAAC,CAAC"}
@@ -0,0 +1,63 @@
1
+ export declare const TWELVE_UI_DEVICE_SCOPES: readonly ["design.convert", "design.corpus.retrieve"];
2
+ export type TwelveUiDeviceScope = (typeof TWELVE_UI_DEVICE_SCOPES)[number];
3
+ export declare const DEFAULT_TWELVE_UI_DEVICE_SCOPES: readonly TwelveUiDeviceScope[];
4
+ export declare const DEFAULT_TWELVE_UI_LOGIN_ORIGIN = "https://login.justevery.com";
5
+ type Fetch = typeof fetch;
6
+ export type VerifiedTwelveUiCredential = {
7
+ subjectType: 'user';
8
+ subjectId: string;
9
+ credentialId: string;
10
+ scopes: TwelveUiDeviceScope[];
11
+ };
12
+ export type TwelveUiDeviceCredential = VerifiedTwelveUiCredential & {
13
+ apiKey: string;
14
+ };
15
+ export type VerifiedConvertCredential = VerifiedTwelveUiCredential;
16
+ export declare const normalizeLoginOrigin: (value?: string) => string;
17
+ export declare const verifyTwelveUiCredential: (args: {
18
+ apiKey: string;
19
+ loginOrigin?: string;
20
+ requiredScopes?: readonly TwelveUiDeviceScope[];
21
+ fetch?: Fetch;
22
+ signal?: AbortSignal;
23
+ }) => Promise<VerifiedTwelveUiCredential>;
24
+ export declare const verifyConvertApiKey: (args: {
25
+ apiKey: string;
26
+ loginOrigin?: string;
27
+ fetch?: Fetch;
28
+ signal?: AbortSignal;
29
+ }) => Promise<VerifiedConvertCredential>;
30
+ export declare const authenticateTwelveUiDevice: (args: {
31
+ loginOrigin?: string;
32
+ clientName?: string;
33
+ deviceName?: string;
34
+ scopes?: readonly TwelveUiDeviceScope[];
35
+ fetch?: Fetch;
36
+ openApproval?: (url: string) => void | Promise<void>;
37
+ onApprovalUrl?: (url: string) => void;
38
+ sleep?: (milliseconds: number, signal?: AbortSignal) => Promise<void>;
39
+ signal?: AbortSignal;
40
+ }) => Promise<TwelveUiDeviceCredential>;
41
+ export declare const authenticateAndCreateConvertApiKey: (args: {
42
+ loginOrigin?: string;
43
+ keyName?: string;
44
+ fetch?: Fetch;
45
+ openApproval?: (url: string) => void | Promise<void>;
46
+ onApprovalUrl?: (url: string) => void;
47
+ sleep?: (milliseconds: number, signal?: AbortSignal) => Promise<void>;
48
+ signal?: AbortSignal;
49
+ }) => Promise<string>;
50
+ export declare const revokeTwelveUiCredential: (args: {
51
+ apiKey: string;
52
+ loginOrigin?: string;
53
+ fetch?: Fetch;
54
+ signal?: AbortSignal;
55
+ }) => Promise<void>;
56
+ export declare const revokeConvertApiKey: (args: {
57
+ apiKey: string;
58
+ loginOrigin?: string;
59
+ fetch?: Fetch;
60
+ signal?: AbortSignal;
61
+ }) => Promise<void>;
62
+ export {};
63
+ //# sourceMappingURL=login-auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login-auth.d.ts","sourceRoot":"","sources":["../src/login-auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,282 @@
1
+ import { spawn } from 'node:child_process';
2
+ import os from 'node:os';
3
+ import { normalizeConversionOrigin } from './config.js';
4
+ export const TWELVE_UI_DEVICE_SCOPES = [
5
+ 'design.convert',
6
+ 'design.corpus.retrieve',
7
+ ];
8
+ export const DEFAULT_TWELVE_UI_DEVICE_SCOPES = [
9
+ 'design.convert',
10
+ ];
11
+ export const DEFAULT_TWELVE_UI_LOGIN_ORIGIN = 'https://login.justevery.com';
12
+ const record = (value) => (value !== null && typeof value === 'object' && !Array.isArray(value)
13
+ ? value
14
+ : null);
15
+ const safeUrl = (value) => {
16
+ try {
17
+ const parsed = new URL(value);
18
+ parsed.search = '';
19
+ parsed.hash = '';
20
+ return parsed.toString();
21
+ }
22
+ catch {
23
+ return 'Login request';
24
+ }
25
+ };
26
+ const errorDetail = (value, status) => {
27
+ const body = record(value);
28
+ return typeof body?.error === 'string' ? body.error : `HTTP ${status}`;
29
+ };
30
+ const requestJson = async (fetchImpl, url, init) => {
31
+ const response = await fetchImpl(url, init);
32
+ const value = await response.json().catch(() => null);
33
+ return { response, value };
34
+ };
35
+ const fetchJson = async (fetchImpl, url, init) => {
36
+ const { response, value } = await requestJson(fetchImpl, url, init);
37
+ if (!response.ok) {
38
+ throw new Error(`${safeUrl(url)} failed: ${errorDetail(value, response.status)}`);
39
+ }
40
+ return value;
41
+ };
42
+ const requestedScopes = (value) => {
43
+ const source = value ?? DEFAULT_TWELVE_UI_DEVICE_SCOPES;
44
+ if (source.length === 0)
45
+ throw new Error('At least one 12ui device scope is required');
46
+ const requested = new Set();
47
+ for (const scope of source) {
48
+ if (!TWELVE_UI_DEVICE_SCOPES.includes(scope)) {
49
+ throw new Error(`Unsupported 12ui device scope: ${String(scope)}`);
50
+ }
51
+ requested.add(scope);
52
+ }
53
+ return TWELVE_UI_DEVICE_SCOPES.filter((scope) => requested.has(scope));
54
+ };
55
+ const parseDeviceAuthorization = (value, loginOrigin) => {
56
+ const body = record(value);
57
+ const expiresIn = Number(body?.expires_in);
58
+ const intervalSeconds = Number(body?.interval);
59
+ if (typeof body?.device_code !== 'string'
60
+ || typeof body.verification_uri_complete !== 'string'
61
+ || !Number.isFinite(expiresIn)
62
+ || expiresIn <= 0
63
+ || !Number.isFinite(intervalSeconds)
64
+ || intervalSeconds <= 0) {
65
+ throw new Error('Login returned an invalid 12ui device authorization');
66
+ }
67
+ let approvalUrl;
68
+ try {
69
+ approvalUrl = new URL(body.verification_uri_complete);
70
+ }
71
+ catch {
72
+ throw new Error('Login returned an invalid 12ui approval URL');
73
+ }
74
+ if (approvalUrl.origin !== loginOrigin) {
75
+ throw new Error('Login returned a 12ui approval URL on an unexpected origin');
76
+ }
77
+ return {
78
+ deviceCode: body.device_code,
79
+ approvalUrl: approvalUrl.toString(),
80
+ expiresAt: Date.now() + expiresIn * 1_000,
81
+ intervalMs: intervalSeconds * 1_000,
82
+ };
83
+ };
84
+ const launchBrowser = (url) => {
85
+ const command = process.platform === 'darwin'
86
+ ? { executable: 'open', args: [url] }
87
+ : process.platform === 'win32'
88
+ ? { executable: 'cmd', args: ['/c', 'start', '', url] }
89
+ : { executable: 'xdg-open', args: [url] };
90
+ const child = spawn(command.executable, command.args, {
91
+ detached: true,
92
+ stdio: 'ignore',
93
+ });
94
+ child.on('error', () => undefined);
95
+ child.unref();
96
+ };
97
+ const abortError = (signal) => (signal.reason instanceof Error ? signal.reason : new Error('12ui authorization was cancelled'));
98
+ const sleepWithSignal = async (milliseconds, signal) => {
99
+ if (signal?.aborted)
100
+ throw abortError(signal);
101
+ await new Promise((resolve, reject) => {
102
+ const onAbort = () => {
103
+ clearTimeout(timer);
104
+ reject(signal ? abortError(signal) : new Error('12ui authorization was cancelled'));
105
+ };
106
+ const timer = setTimeout(() => {
107
+ signal?.removeEventListener('abort', onAbort);
108
+ resolve();
109
+ }, milliseconds);
110
+ signal?.addEventListener('abort', onAbort, { once: true });
111
+ });
112
+ };
113
+ const parseApprovedCredential = (value, requiredScopes) => {
114
+ const body = record(value);
115
+ if (body?.status !== 'approved' || typeof body.api_key !== 'string')
116
+ return null;
117
+ const apiKey = body.api_key.trim();
118
+ const subjectId = typeof body.subject_id === 'string' ? body.subject_id.trim() : '';
119
+ const credentialId = typeof body.credential_id === 'string' ? body.credential_id.trim() : '';
120
+ const scopes = Array.isArray(body.scopes)
121
+ ? body.scopes.filter((scope) => (typeof scope === 'string'
122
+ && TWELVE_UI_DEVICE_SCOPES.includes(scope)))
123
+ : [];
124
+ if (body.subject_type !== 'user'
125
+ || !apiKey
126
+ || !subjectId
127
+ || !credentialId
128
+ || requiredScopes.some((scope) => !scopes.includes(scope))) {
129
+ throw new Error('Login returned an invalid 12ui device credential');
130
+ }
131
+ return {
132
+ apiKey,
133
+ subjectType: 'user',
134
+ subjectId,
135
+ credentialId,
136
+ scopes,
137
+ };
138
+ };
139
+ const pollForCredential = async (args) => {
140
+ let intervalMs = args.authorization.intervalMs;
141
+ while (Date.now() < args.authorization.expiresAt) {
142
+ if (args.signal?.aborted)
143
+ throw abortError(args.signal);
144
+ const url = `${args.loginOrigin}/api/auth/12ui/device/token`;
145
+ const { response, value } = await requestJson(args.fetch, url, {
146
+ method: 'POST',
147
+ headers: { Accept: 'application/json', 'Content-Type': 'application/json' },
148
+ body: JSON.stringify({ device_code: args.authorization.deviceCode }),
149
+ ...(args.signal ? { signal: args.signal } : {}),
150
+ });
151
+ const body = record(value);
152
+ if (response.ok && body?.status === 'approved') {
153
+ const credential = parseApprovedCredential(value, args.requiredScopes);
154
+ if (credential)
155
+ return credential;
156
+ }
157
+ if (response.ok && body?.status === 'pending') {
158
+ const serverInterval = Number(body.interval);
159
+ if (Number.isFinite(serverInterval) && serverInterval > 0) {
160
+ intervalMs = serverInterval * 1_000;
161
+ }
162
+ await (args.signal ? args.sleep(intervalMs, args.signal) : args.sleep(intervalMs));
163
+ continue;
164
+ }
165
+ if (response.status === 429 && body?.status === 'slow_down') {
166
+ const retryAfter = Number(body.retry_after);
167
+ intervalMs = Number.isFinite(retryAfter) && retryAfter > 0
168
+ ? retryAfter * 1_000
169
+ : intervalMs + 1_000;
170
+ await (args.signal ? args.sleep(intervalMs, args.signal) : args.sleep(intervalMs));
171
+ continue;
172
+ }
173
+ if (body?.status === 'denied')
174
+ throw new Error('12ui authorization was declined');
175
+ if (body?.status === 'expired')
176
+ throw new Error('12ui authorization expired');
177
+ throw new Error(`${safeUrl(url)} failed: ${errorDetail(value, response.status)}`);
178
+ }
179
+ throw new Error('12ui authorization expired');
180
+ };
181
+ const isLoopbackHostname = (hostname) => (hostname === 'localhost' || hostname === '127.0.0.1' || hostname === '[::1]' || hostname === '::1');
182
+ export const normalizeLoginOrigin = (value = DEFAULT_TWELVE_UI_LOGIN_ORIGIN) => {
183
+ try {
184
+ const origin = normalizeConversionOrigin(value);
185
+ const parsed = new URL(origin);
186
+ if (parsed.protocol !== 'https:' && !isLoopbackHostname(parsed.hostname.toLowerCase())) {
187
+ throw new Error('Login origin must use HTTPS unless it is a loopback development service');
188
+ }
189
+ return origin;
190
+ }
191
+ catch (error) {
192
+ throw new Error(`Invalid Login origin: ${error instanceof Error ? error.message : String(error)}`);
193
+ }
194
+ };
195
+ export const verifyTwelveUiCredential = async (args) => {
196
+ const loginOrigin = normalizeLoginOrigin(args.loginOrigin);
197
+ const fetchImpl = args.fetch ?? fetch;
198
+ const requiredScopes = requestedScopes(args.requiredScopes);
199
+ const value = await fetchJson(fetchImpl, `${loginOrigin}/api/auth/12ui/api-key/verify`, {
200
+ method: 'POST',
201
+ headers: {
202
+ Accept: 'application/json',
203
+ Authorization: `Bearer ${args.apiKey.trim()}`,
204
+ 'Content-Type': 'application/json',
205
+ },
206
+ body: JSON.stringify({ requiredScope: requiredScopes[0] }),
207
+ ...(args.signal ? { signal: args.signal } : {}),
208
+ });
209
+ const body = record(value);
210
+ const scopes = Array.isArray(body?.scopes)
211
+ ? body.scopes.filter((scope) => (typeof scope === 'string'
212
+ && TWELVE_UI_DEVICE_SCOPES.includes(scope)))
213
+ : [];
214
+ if (body?.ok !== true
215
+ || body.subjectType !== 'user'
216
+ || typeof body.subjectId !== 'string'
217
+ || typeof body.credentialId !== 'string'
218
+ || requiredScopes.some((scope) => !scopes.includes(scope))) {
219
+ throw new Error('The key is not a personal 12ui credential with the required scopes');
220
+ }
221
+ return {
222
+ subjectType: 'user',
223
+ subjectId: body.subjectId,
224
+ credentialId: body.credentialId,
225
+ scopes,
226
+ };
227
+ };
228
+ export const verifyConvertApiKey = async (args) => verifyTwelveUiCredential({
229
+ ...args,
230
+ requiredScopes: ['design.convert'],
231
+ });
232
+ export const authenticateTwelveUiDevice = async (args) => {
233
+ const loginOrigin = normalizeLoginOrigin(args.loginOrigin);
234
+ const fetchImpl = args.fetch ?? fetch;
235
+ const scopes = requestedScopes(args.scopes);
236
+ const clientName = args.clientName?.trim() || '12ui CLI';
237
+ const deviceName = args.deviceName?.trim() || `${clientName} on ${os.hostname()}`;
238
+ const authorization = parseDeviceAuthorization(await fetchJson(fetchImpl, `${loginOrigin}/api/auth/12ui/device/code`, {
239
+ method: 'POST',
240
+ headers: { Accept: 'application/json', 'Content-Type': 'application/json' },
241
+ body: JSON.stringify({
242
+ client_name: clientName,
243
+ device_name: deviceName,
244
+ scopes,
245
+ }),
246
+ ...(args.signal ? { signal: args.signal } : {}),
247
+ }), loginOrigin);
248
+ args.onApprovalUrl?.(authorization.approvalUrl);
249
+ await (args.openApproval ?? launchBrowser)(authorization.approvalUrl);
250
+ return pollForCredential({
251
+ authorization,
252
+ loginOrigin,
253
+ requiredScopes: scopes,
254
+ fetch: fetchImpl,
255
+ sleep: args.sleep ?? sleepWithSignal,
256
+ ...(args.signal ? { signal: args.signal } : {}),
257
+ });
258
+ };
259
+ export const authenticateAndCreateConvertApiKey = async (args) => (await authenticateTwelveUiDevice({
260
+ loginOrigin: args.loginOrigin,
261
+ clientName: '12ui CLI',
262
+ deviceName: args.keyName,
263
+ scopes: ['design.convert'],
264
+ fetch: args.fetch,
265
+ openApproval: args.openApproval,
266
+ onApprovalUrl: args.onApprovalUrl,
267
+ sleep: args.sleep,
268
+ signal: args.signal,
269
+ })).apiKey;
270
+ export const revokeTwelveUiCredential = async (args) => {
271
+ const loginOrigin = normalizeLoginOrigin(args.loginOrigin);
272
+ await fetchJson(args.fetch ?? fetch, `${loginOrigin}/api/auth/12ui/credentials/current`, {
273
+ method: 'DELETE',
274
+ headers: {
275
+ Accept: 'application/json',
276
+ Authorization: `Bearer ${args.apiKey.trim()}`,
277
+ },
278
+ ...(args.signal ? { signal: args.signal } : {}),
279
+ });
280
+ };
281
+ export const revokeConvertApiKey = revokeTwelveUiCredential;
282
+ //# sourceMappingURL=login-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login-auth.js","sourceRoot":"","sources":["../src/login-auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,147 @@
1
+ import type { ConversionModel } from './conversion-models.js';
2
+ import type { ConversionOutput } from './conversion-outputs.js';
3
+ import type { ConversionOutputProfile } from './project-profiles.js';
4
+ import type { ConversionProblem, ConversionStatus } from './conversion-client.js';
5
+ import type { PersistedResponsiveConversionQuality, ResponsiveConversionQuality } from './responsive-quality.js';
6
+ export declare const CONVERSION_PACKAGE_MEDIA_TYPE: "application/vnd.12ui.package+json;version=1";
7
+ export declare const CONVERSION_PACKAGE_SITE_MEDIA_TYPE: "application/zip";
8
+ export type ConversionPackageLegacyManifest = {
9
+ version: 1;
10
+ source?: {
11
+ kind: string;
12
+ project_id: string;
13
+ revision?: string | number;
14
+ authority_revision?: string | number;
15
+ };
16
+ output: ConversionOutput;
17
+ site?: never;
18
+ responsive_quality?: ResponsiveConversionQuality;
19
+ model?: ConversionModel;
20
+ profile?: ConversionOutputProfile;
21
+ pages: Array<{
22
+ id: string;
23
+ ordinal: number;
24
+ kind?: 'source' | 'additional';
25
+ title?: string;
26
+ purpose?: string;
27
+ path?: string;
28
+ viewports: Array<{
29
+ id: string;
30
+ ordinal: number;
31
+ screenshot_part: string;
32
+ layerdoc?: {
33
+ part: string;
34
+ assets: Record<string, string>;
35
+ };
36
+ }>;
37
+ }>;
38
+ };
39
+ export type ConversionPackageSiteManifest = Omit<ConversionPackageLegacyManifest, 'output' | 'site' | 'pages'> & {
40
+ output: 'html';
41
+ site: {
42
+ version: 1;
43
+ };
44
+ pages: Array<ConversionPackageLegacyManifest['pages'][number] & Required<Pick<ConversionPackageLegacyManifest['pages'][number], 'kind' | 'title' | 'purpose' | 'path'>> & {
45
+ navigation?: Array<{
46
+ layer: number;
47
+ target_page_id: string;
48
+ }>;
49
+ }>;
50
+ };
51
+ export type ConversionPackageManifest = ConversionPackageLegacyManifest | ConversionPackageSiteManifest;
52
+ export type ConversionPackageFile = {
53
+ partId: string;
54
+ bytes: Uint8Array;
55
+ mediaType: string;
56
+ };
57
+ export type CreateConversionPackageInput = {
58
+ manifest: ConversionPackageManifest;
59
+ screenshots: ConversionPackageFile[];
60
+ layerdocs?: ConversionPackageFile[];
61
+ assets?: ConversionPackageFile[];
62
+ idempotencyKey?: string;
63
+ signal?: AbortSignal;
64
+ };
65
+ export type ConversionPackageOperation = {
66
+ id: string;
67
+ status: ConversionStatus;
68
+ output: ConversionOutput;
69
+ responsive_quality?: PersistedResponsiveConversionQuality;
70
+ model: ConversionModel;
71
+ profile?: ConversionOutputProfile;
72
+ created_at: string;
73
+ updated_at: string;
74
+ expires_at: string;
75
+ request_id: string;
76
+ progress?: {
77
+ stage: 'convert_viewports' | 'compose_pages' | 'export_pages' | 'publish';
78
+ percent: number;
79
+ completed: number;
80
+ total: number;
81
+ };
82
+ pages: Array<{
83
+ id: string;
84
+ ordinal: number;
85
+ kind?: 'source' | 'additional';
86
+ title?: string;
87
+ purpose?: string;
88
+ path?: string;
89
+ status: 'queued' | 'running' | 'succeeded' | 'failed';
90
+ viewports: Array<{
91
+ id: string;
92
+ ordinal: number;
93
+ status: 'queued' | 'running' | 'succeeded' | 'failed';
94
+ conversion_id?: string;
95
+ }>;
96
+ conversion_id?: string;
97
+ href?: string;
98
+ media_type?: string;
99
+ }>;
100
+ result?: {
101
+ kind: 'package';
102
+ media_type: typeof CONVERSION_PACKAGE_MEDIA_TYPE;
103
+ pages: Array<{
104
+ id: string;
105
+ ordinal: number;
106
+ title?: string;
107
+ path?: string;
108
+ conversion_id: string;
109
+ href: string;
110
+ media_type: string;
111
+ }>;
112
+ artifact?: {
113
+ href: string;
114
+ media_type: typeof CONVERSION_PACKAGE_SITE_MEDIA_TYPE;
115
+ size_bytes: number;
116
+ sha256: string;
117
+ };
118
+ common_components: number;
119
+ normalized_typography_fields: number;
120
+ };
121
+ error?: ConversionProblem;
122
+ };
123
+ export type ConversionPackageClientOptions = {
124
+ origin: string;
125
+ apiKey: string;
126
+ fetch?: typeof fetch;
127
+ };
128
+ export declare class TwelveUiConversionPackageClient {
129
+ readonly origin: string;
130
+ private readonly apiKey;
131
+ private readonly fetchImpl;
132
+ constructor(options: ConversionPackageClientOptions);
133
+ createPackage(input: CreateConversionPackageInput): Promise<ConversionPackageOperation>;
134
+ getPackage(id: string, signal?: AbortSignal): Promise<ConversionPackageOperation>;
135
+ waitForPackage(id: string, options?: {
136
+ intervalMs?: number;
137
+ timeoutMs?: number;
138
+ signal?: AbortSignal;
139
+ }): Promise<ConversionPackageOperation>;
140
+ downloadPage(operation: ConversionPackageOperation, pageId: string, signal?: AbortSignal): Promise<{
141
+ bytes: Uint8Array;
142
+ mediaType: string;
143
+ }>;
144
+ private packageUrl;
145
+ private headers;
146
+ }
147
+ //# sourceMappingURL=package-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-client.d.ts","sourceRoot":"","sources":["../src/package-client.ts"],"names":[],"mappings":"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"}