@wix/web50-cli 0.1.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 (102) hide show
  1. package/README.md +8 -0
  2. package/bin/web5.js +3 -0
  3. package/defaults/package.json +42 -0
  4. package/dist/cjs/auth/deviceFlow.js +76 -0
  5. package/dist/cjs/auth/deviceFlow.js.map +1 -0
  6. package/dist/cjs/auth/index.js +47 -0
  7. package/dist/cjs/auth/index.js.map +1 -0
  8. package/dist/cjs/auth/secretStore.js +103 -0
  9. package/dist/cjs/auth/secretStore.js.map +1 -0
  10. package/dist/cjs/cli.js +18 -0
  11. package/dist/cjs/cli.js.map +1 -0
  12. package/dist/cjs/commands/init.js +161 -0
  13. package/dist/cjs/commands/init.js.map +1 -0
  14. package/dist/cjs/commands/login.js +18 -0
  15. package/dist/cjs/commands/login.js.map +1 -0
  16. package/dist/cjs/commands/validate.js +706 -0
  17. package/dist/cjs/commands/validate.js.map +1 -0
  18. package/dist/cjs/counter.js +19 -0
  19. package/dist/cjs/counter.js.map +1 -0
  20. package/dist/cjs/external-types.d.js +2 -0
  21. package/dist/cjs/external-types.d.js.map +1 -0
  22. package/dist/cjs/index.js +10 -0
  23. package/dist/cjs/index.js.map +1 -0
  24. package/dist/cjs/templates/actionYamlSchema.js +33 -0
  25. package/dist/cjs/templates/actionYamlSchema.js.map +1 -0
  26. package/dist/cjs/templates/aiInstructionsSchema.js +39 -0
  27. package/dist/cjs/templates/aiInstructionsSchema.js.map +1 -0
  28. package/dist/cjs/templates/cmsSchemaSchema.js +59 -0
  29. package/dist/cjs/templates/cmsSchemaSchema.js.map +1 -0
  30. package/dist/cjs/test-types.d.js +2 -0
  31. package/dist/cjs/test-types.d.js.map +1 -0
  32. package/dist/cjs/utils/fs.js +25 -0
  33. package/dist/cjs/utils/fs.js.map +1 -0
  34. package/dist/cjs/utils/print.js +27 -0
  35. package/dist/cjs/utils/print.js.map +1 -0
  36. package/dist/cjs/utils/project.js +27 -0
  37. package/dist/cjs/utils/project.js.map +1 -0
  38. package/dist/esm/auth/deviceFlow.js +72 -0
  39. package/dist/esm/auth/deviceFlow.js.map +1 -0
  40. package/dist/esm/auth/index.js +40 -0
  41. package/dist/esm/auth/index.js.map +1 -0
  42. package/dist/esm/auth/secretStore.js +96 -0
  43. package/dist/esm/auth/secretStore.js.map +1 -0
  44. package/dist/esm/cli.js +16 -0
  45. package/dist/esm/cli.js.map +1 -0
  46. package/dist/esm/commands/init.js +161 -0
  47. package/dist/esm/commands/init.js.map +1 -0
  48. package/dist/esm/commands/login.js +14 -0
  49. package/dist/esm/commands/login.js.map +1 -0
  50. package/dist/esm/commands/validate.js +704 -0
  51. package/dist/esm/commands/validate.js.map +1 -0
  52. package/dist/esm/counter.js +16 -0
  53. package/dist/esm/counter.js.map +1 -0
  54. package/dist/esm/external-types.d.js +2 -0
  55. package/dist/esm/external-types.d.js.map +1 -0
  56. package/dist/esm/index.js +5 -0
  57. package/dist/esm/index.js.map +1 -0
  58. package/dist/esm/templates/actionYamlSchema.js +29 -0
  59. package/dist/esm/templates/actionYamlSchema.js.map +1 -0
  60. package/dist/esm/templates/aiInstructionsSchema.js +35 -0
  61. package/dist/esm/templates/aiInstructionsSchema.js.map +1 -0
  62. package/dist/esm/templates/cmsSchemaSchema.js +55 -0
  63. package/dist/esm/templates/cmsSchemaSchema.js.map +1 -0
  64. package/dist/esm/test-types.d.js +2 -0
  65. package/dist/esm/test-types.d.js.map +1 -0
  66. package/dist/esm/utils/fs.js +22 -0
  67. package/dist/esm/utils/fs.js.map +1 -0
  68. package/dist/esm/utils/print.js +18 -0
  69. package/dist/esm/utils/print.js.map +1 -0
  70. package/dist/esm/utils/project.js +23 -0
  71. package/dist/esm/utils/project.js.map +1 -0
  72. package/dist/types/auth/deviceFlow.d.ts +8 -0
  73. package/dist/types/auth/deviceFlow.d.ts.map +1 -0
  74. package/dist/types/auth/index.d.ts +6 -0
  75. package/dist/types/auth/index.d.ts.map +1 -0
  76. package/dist/types/auth/secretStore.d.ts +9 -0
  77. package/dist/types/auth/secretStore.d.ts.map +1 -0
  78. package/dist/types/cli.d.ts +2 -0
  79. package/dist/types/cli.d.ts.map +1 -0
  80. package/dist/types/commands/init.d.ts +3 -0
  81. package/dist/types/commands/init.d.ts.map +1 -0
  82. package/dist/types/commands/login.d.ts +3 -0
  83. package/dist/types/commands/login.d.ts.map +1 -0
  84. package/dist/types/commands/validate.d.ts +3 -0
  85. package/dist/types/commands/validate.d.ts.map +1 -0
  86. package/dist/types/counter.d.ts +6 -0
  87. package/dist/types/counter.d.ts.map +1 -0
  88. package/dist/types/index.d.ts +3 -0
  89. package/dist/types/index.d.ts.map +1 -0
  90. package/dist/types/templates/actionYamlSchema.d.ts +2 -0
  91. package/dist/types/templates/actionYamlSchema.d.ts.map +1 -0
  92. package/dist/types/templates/aiInstructionsSchema.d.ts +2 -0
  93. package/dist/types/templates/aiInstructionsSchema.d.ts.map +1 -0
  94. package/dist/types/templates/cmsSchemaSchema.d.ts +2 -0
  95. package/dist/types/templates/cmsSchemaSchema.d.ts.map +1 -0
  96. package/dist/types/utils/fs.d.ts +3 -0
  97. package/dist/types/utils/fs.d.ts.map +1 -0
  98. package/dist/types/utils/print.d.ts +7 -0
  99. package/dist/types/utils/print.d.ts.map +1 -0
  100. package/dist/types/utils/project.d.ts +6 -0
  101. package/dist/types/utils/project.d.ts.map +1 -0
  102. package/package.json +92 -0
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_commander","require","_2","_interopRequireDefault","_jsYaml","_fs","path","_interopRequireWildcard","_chalk","_print","_cmsSchemaSchema","_aiInstructionsSchema","_actionYamlSchema","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","SCHEMAS","yamlLoad","cmsSchemaSchemaTemplate","aiInstructionsSchemaTemplate","actionYamlSchemaTemplate","findProjectRoot","startDir","current","parent","dirname","existsSync","join","tryParseYaml","filePath","data","readFileSync","err","Error","message","String","readText","kebabToCamel","s","replace","_","c","toUpperCase","camelToSnake","toLowerCase","formatAjvError","hints","loc","instancePath","keyword","missing","params","missingProperty","hint","fix","expected","type","field","min","limit","extra","additionalProperty","AI_INSTRUCTIONS_HINTS","rules","instructions","semantics","tone","ACTION_YAML_HINTS","name","buildAiInstructionsDomain","root","fileName","ajv","Ajv","allErrors","strict","schema","parsed","fileExists","yamlOk","checks","label","run","ok","errors","result","undefined","validate","compile","map","buildCmsSchemaDomain","buildActionsDomain","actionsDir","registryPath","indexPath","yamlFiles","readdirSync","filter","endsWith","length","actionSchema","yamlFile","yamlPath","yamlData","schemaOk","actionName","basename","extname","push","getNames","camel","handler","snake","handlerFile","handlerPath","content","includes","declaredParams","Set","p","param","match","usedParams","split","trim","startsWith","undeclared","validateCommand","exports","Command","description","action","process","cwd","error","exit","info","console","log","domains","hasErrors","domain","check","chalk","green","stderr","write","red","e_"],"sources":["../../../src/commands/validate.ts"],"sourcesContent":["import { Command } from 'commander';\nimport Ajv from 'ajv/dist/2020';\nimport type { ErrorObject } from 'ajv';\nimport { load as yamlLoad } from 'js-yaml';\nimport { readFileSync, existsSync, readdirSync } from 'fs';\nimport * as path from 'path';\nimport chalk from 'chalk';\nimport { error, info } from '../utils/print';\nimport { cmsSchemaSchemaTemplate } from '../templates/cmsSchemaSchema';\nimport { aiInstructionsSchemaTemplate } from '../templates/aiInstructionsSchema';\nimport { actionYamlSchemaTemplate } from '../templates/actionYamlSchema';\n\n// ── Bundled schemas (never exposed to user's project) ────────────────────────\n\nconst SCHEMAS: Record<string, object> = {\n 'cms-schema.yaml': yamlLoad(cmsSchemaSchemaTemplate()) as object,\n 'prompt-instructions.yaml': yamlLoad(\n aiInstructionsSchemaTemplate(),\n ) as object,\n 'action.yaml': yamlLoad(actionYamlSchemaTemplate()) as object,\n};\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface CheckError {\n message: string;\n fix?: string;\n}\n\ninterface CheckResult {\n ok: boolean;\n errors: CheckError[];\n}\n\ninterface Check {\n label: string;\n run: () => CheckResult;\n}\n\ninterface Domain {\n name: string;\n checks: Check[];\n}\n\n// ── Helpers ───────────────────────────────────────────────────────────────────\n\nfunction findProjectRoot(startDir: string): string | null {\n let current = startDir;\n let parent = path.dirname(current);\n while (current !== parent) {\n if (existsSync(path.join(current, 'web5.config.json'))) {\n return current;\n }\n current = parent;\n parent = path.dirname(current);\n }\n if (existsSync(path.join(current, 'web5.config.json'))) {\n return current;\n }\n return null;\n}\n\nfunction tryParseYaml(\n filePath: string,\n): { data: unknown; err?: undefined } | { data?: undefined; err: string } {\n try {\n return { data: yamlLoad(readFileSync(filePath, 'utf8')) };\n } catch (e) {\n return { err: e instanceof Error ? e.message : String(e) };\n }\n}\n\nfunction readText(filePath: string): string {\n return readFileSync(filePath, 'utf8');\n}\n\n/** kebab-case → camelCase e.g. book-demo → bookDemo */\nfunction kebabToCamel(s: string): string {\n return s.replace(/-([a-z])/g, (_, c: string) => c.toUpperCase());\n}\n\n/** camelCase → snake_case e.g. bookDemo → book_demo */\nfunction camelToSnake(s: string): string {\n return s.replace(/([A-Z])/g, '_$1').toLowerCase();\n}\n\n// ── AJV error formatter ───────────────────────────────────────────────────────\n\n// hints: field-name → indented YAML example of the full expected structure\nfunction formatAjvError(\n e: ErrorObject,\n hints: Record<string, string> = {},\n): CheckError {\n const loc = e.instancePath || '(root)';\n\n if (e.keyword === 'required') {\n const missing = (e.params as { missingProperty: string }).missingProperty;\n const parent =\n loc === '(root)' ? 'top level' : `'${loc.replace(/^\\//, '')}'`;\n const hint = hints[missing];\n return {\n message: `[${loc}] missing required property '${missing}'`,\n fix: hint\n ? `Add '${missing}:' under ${parent}. Expected structure:\\n${hint}`\n : `Add '${missing}:' under ${parent}.`,\n };\n }\n\n if (e.keyword === 'type') {\n const expected = (e.params as { type: string }).type;\n const field = loc.replace(/^\\//, '');\n const hint = hints[field];\n return {\n message: `[${loc}] must be ${expected}`,\n fix: hint\n ? `Replace the current value of '${field}' with:\\n${hint}`\n : `Change '${field}' to a ${expected}.`,\n };\n }\n\n if (e.keyword === 'minItems') {\n const min = (e.params as { limit: number }).limit;\n const field = loc.replace(/^\\//, '');\n const hint = hints[field];\n return {\n message: `[${loc}] must have at least ${min} item${min === 1 ? '' : 's'}`,\n fix: hint\n ? `Add at least ${min} entry under '${field}':\\n${hint}`\n : `Add at least ${min} entry under '${field}'.`,\n };\n }\n\n if (e.keyword === 'additionalProperties') {\n const extra = (e.params as { additionalProperty: string })\n .additionalProperty;\n return {\n message: `[${loc}] unknown property '${extra}'`,\n fix: `Remove '${extra}' — it is not a recognised field.`,\n };\n }\n\n return { message: `[${loc}] ${e.message ?? e.keyword}` };\n}\n\n// ── Structural hints ──────────────────────────────────────────────────────────\n\nconst AI_INSTRUCTIONS_HINTS: Record<string, string> = {\n rules: [\n ' rules:',\n \" - Always respond in the language of the user's prompt\",\n ' - Do not hallucinate or fabricate information',\n ' - Refuse requests that are harmful, illegal, or unethical',\n ].join('\\n'),\n instructions: [\n ' instructions: >',\n ' Structure prompts clearly and specifically. Provide relevant',\n ' context and set output expectations (format, length, style).',\n ].join('\\n'),\n semantics: [\n ' semantics:',\n \" PROX: The user's natural language request or structured prompt\",\n ' VERIFY: A response aligned with the detected intent',\n ' SUB-ACTION: Background information or metadata alongside the prompt',\n ].join('\\n'),\n tone: [\n ' tone:',\n ' style: concise',\n ' voice: \"clear and direct — avoid filler phrases\"',\n ].join('\\n'),\n};\n\nconst ACTION_YAML_HINTS: Record<string, string> = {\n name: [' name: my-action'].join('\\n'),\n params: [\n ' params:',\n ' - param: exampleParam',\n ' values:',\n ' - value1',\n ' - value2',\n ' - param: optionalParam',\n ' optional: true',\n ' values:',\n ' - valueA',\n ].join('\\n'),\n};\n\n// ── Domain builders ───────────────────────────────────────────────────────────\n\nfunction buildAiInstructionsDomain(root: string): Domain {\n const filePath = path.join(\n root,\n 'src',\n 'configuration',\n 'ai',\n 'prompt-instructions.yaml',\n );\n const fileName = 'prompt-instructions.yaml';\n const ajv = new Ajv({ allErrors: true, strict: false });\n const schema = SCHEMAS[fileName];\n\n let parsed: unknown;\n let fileExists = false;\n let yamlOk = false;\n\n return {\n name: 'AI Instructions',\n checks: [\n {\n label: `${fileName} — file exists`,\n run(): CheckResult {\n fileExists = existsSync(filePath);\n if (fileExists) {\n return { ok: true, errors: [] };\n }\n return {\n ok: false,\n errors: [\n {\n message: `File not found: ${filePath}`,\n fix: `Create 'src/configuration/ai/prompt-instructions.yaml' in your project.`,\n },\n ],\n };\n },\n },\n {\n label: `${fileName} — valid YAML`,\n run(): CheckResult {\n if (!fileExists) {\n return {\n ok: false,\n errors: [{ message: 'skipped — file does not exist' }],\n };\n }\n const result = tryParseYaml(filePath);\n if (result.err !== undefined) {\n return {\n ok: false,\n errors: [\n {\n message: result.err,\n fix: 'Fix the YAML syntax error above.',\n },\n ],\n };\n }\n parsed = result.data;\n yamlOk = true;\n return { ok: true, errors: [] };\n },\n },\n {\n label: `${fileName} — schema valid`,\n run(): CheckResult {\n if (!yamlOk) {\n return {\n ok: false,\n errors: [{ message: 'skipped — YAML parse failed' }],\n };\n }\n const validate = ajv.compile(schema);\n if (validate(parsed)) {\n return { ok: true, errors: [] };\n }\n return {\n ok: false,\n errors: (validate.errors ?? []).map((e) =>\n formatAjvError(e, AI_INSTRUCTIONS_HINTS),\n ),\n };\n },\n },\n ],\n };\n}\n\nfunction buildCmsSchemaDomain(root: string): Domain {\n const filePath = path.join(\n root,\n 'src',\n 'configuration',\n 'cms',\n 'cms-schema.yaml',\n );\n const fileName = 'cms-schema.yaml';\n const ajv = new Ajv({ allErrors: true, strict: false });\n const schema = SCHEMAS[fileName];\n\n let parsed: unknown;\n let fileExists = false;\n let yamlOk = false;\n\n return {\n name: 'CMS Schema',\n checks: [\n {\n label: `${fileName} — file exists`,\n run(): CheckResult {\n fileExists = existsSync(filePath);\n if (fileExists) {\n return { ok: true, errors: [] };\n }\n return {\n ok: false,\n errors: [\n {\n message: `File not found: ${filePath}`,\n fix: `Create 'src/configuration/cms/cms-schema.yaml' in your project.`,\n },\n ],\n };\n },\n },\n {\n label: `${fileName} — valid YAML`,\n run(): CheckResult {\n if (!fileExists) {\n return {\n ok: false,\n errors: [{ message: 'skipped — file does not exist' }],\n };\n }\n const result = tryParseYaml(filePath);\n if (result.err !== undefined) {\n return {\n ok: false,\n errors: [\n {\n message: result.err,\n fix: 'Fix the YAML syntax error above.',\n },\n ],\n };\n }\n parsed = result.data;\n yamlOk = true;\n return { ok: true, errors: [] };\n },\n },\n {\n label: `${fileName} — schema valid`,\n run(): CheckResult {\n if (!yamlOk) {\n return {\n ok: false,\n errors: [{ message: 'skipped — YAML parse failed' }],\n };\n }\n const validate = ajv.compile(schema);\n if (validate(parsed)) {\n return { ok: true, errors: [] };\n }\n return {\n ok: false,\n errors: (validate.errors ?? []).map((e) => formatAjvError(e)),\n };\n },\n },\n ],\n };\n}\n\nfunction buildActionsDomain(root: string): Domain {\n const actionsDir = path.join(root, 'src', 'actions');\n const registryPath = path.join(root, 'src', 'createRegistry.ts');\n const indexPath = path.join(actionsDir, 'index.ts');\n\n // If the actions directory is missing, report it and stop\n if (!existsSync(actionsDir)) {\n return {\n name: 'Actions',\n checks: [\n {\n label: 'src/actions/ — directory exists',\n run: () => ({\n ok: false,\n errors: [\n {\n message: 'src/actions/ directory not found',\n fix: 'Create the src/actions/ directory and add at least one action YAML + handler.',\n },\n ],\n }),\n },\n ],\n };\n }\n\n const yamlFiles = readdirSync(actionsDir).filter(\n (f) => f.endsWith('.yaml') || f.endsWith('.yml'),\n );\n\n if (yamlFiles.length === 0) {\n return {\n name: 'Actions',\n checks: [\n {\n label: 'src/actions/ — at least one action defined',\n run: () => ({\n ok: false,\n errors: [\n {\n message: 'No action YAML files found in src/actions/',\n fix: 'Add an action YAML file, e.g. src/actions/my-action.yaml',\n },\n ],\n }),\n },\n ],\n };\n }\n\n const ajv = new Ajv({ allErrors: true, strict: false });\n const actionSchema = SCHEMAS['action.yaml'];\n const checks: Check[] = [];\n\n for (const yamlFile of yamlFiles) {\n const yamlPath = path.join(actionsDir, yamlFile);\n\n // Mutable state shared across this action's checks (captured by closures)\n let yamlData: Record<string, unknown> = {};\n let yamlOk = false;\n let schemaOk = false;\n let actionName = path.basename(yamlFile, path.extname(yamlFile));\n\n // ── Check 1: valid YAML ────────────────────────────────────────────────\n checks.push({\n label: `${yamlFile} — valid YAML`,\n run(): CheckResult {\n const result = tryParseYaml(yamlPath);\n if (result.err !== undefined) {\n return {\n ok: false,\n errors: [\n { message: result.err, fix: 'Fix the YAML syntax error.' },\n ],\n };\n }\n yamlData = result.data as Record<string, unknown>;\n yamlOk = true;\n if (typeof yamlData.name === 'string') {\n actionName = yamlData.name;\n }\n return { ok: true, errors: [] };\n },\n });\n\n // ── Check 2: schema valid ─────────────────────────────────────────────\n checks.push({\n label: `${yamlFile} — schema valid`,\n run(): CheckResult {\n if (!yamlOk) {\n return {\n ok: false,\n errors: [{ message: 'skipped — YAML parse failed' }],\n };\n }\n const validate = ajv.compile(actionSchema);\n if (validate(yamlData)) {\n schemaOk = true;\n return { ok: true, errors: [] };\n }\n return {\n ok: false,\n errors: (validate.errors ?? []).map((e) =>\n formatAjvError(e, ACTION_YAML_HINTS),\n ),\n };\n },\n });\n\n // Derive names — evaluated lazily inside each check closure after\n // yamlOk sets actionName correctly\n const getNames = () => {\n const camel = kebabToCamel(actionName);\n return {\n camel,\n handler: `${camel}Action`,\n snake: camelToSnake(camel),\n handlerFile: `${camel}Action.ts`,\n handlerPath: path.join(actionsDir, `${camel}Action.ts`),\n };\n };\n\n // ── Check 3: handler file exists ──────────────────────────────────────\n checks.push({\n label: `${yamlFile} — handler file exists`,\n run(): CheckResult {\n if (!schemaOk) {\n return {\n ok: false,\n errors: [{ message: 'skipped — YAML schema invalid' }],\n };\n }\n const { handler, handlerFile, handlerPath } = getNames();\n if (existsSync(handlerPath)) {\n return { ok: true, errors: [] };\n }\n return {\n ok: false,\n errors: [\n {\n message: `Handler not found: src/actions/${handlerFile}`,\n fix: `Create src/actions/${handlerFile} exporting 'export const ${handler}: ActionHandler = ...'`,\n },\n ],\n };\n },\n });\n\n // ── Check 4: handler exports correct name ─────────────────────────────\n checks.push({\n label: `${yamlFile} — handler exports correct name`,\n run(): CheckResult {\n if (!schemaOk) {\n return {\n ok: false,\n errors: [{ message: 'skipped — YAML schema invalid' }],\n };\n }\n const { handler, handlerFile, handlerPath } = getNames();\n if (!existsSync(handlerPath)) {\n return {\n ok: false,\n errors: [{ message: 'skipped — handler file missing' }],\n };\n }\n const content = readText(handlerPath);\n if (content.includes(`export const ${handler}`)) {\n return { ok: true, errors: [] };\n }\n return {\n ok: false,\n errors: [\n {\n message: `'export const ${handler}' not found in ${handlerFile}`,\n fix: `Rename the export to 'export const ${handler}: ActionHandler = ...'`,\n },\n ],\n };\n },\n });\n\n // ── Check 5: handler params ⊆ YAML params ────────────────────────────\n checks.push({\n label: `${yamlFile} — handler params declared in YAML`,\n run(): CheckResult {\n if (!schemaOk) {\n return {\n ok: false,\n errors: [{ message: 'skipped — YAML schema invalid' }],\n };\n }\n const { handlerPath } = getNames();\n if (!existsSync(handlerPath)) {\n return {\n ok: false,\n errors: [{ message: 'skipped — handler file missing' }],\n };\n }\n\n const declaredParams = new Set(\n ((yamlData.params as { param: string }[]) ?? []).map((p) => p.param),\n );\n\n const content = readText(handlerPath);\n const match = content.match(/const\\s*\\{([^}]+)\\}\\s*=\\s*params/);\n if (!match) {\n return { ok: true, errors: [] }; // No destructure — nothing to check\n }\n\n const usedParams = match[1]\n .split(',')\n .map((s) => s.trim())\n .filter((s) => s.length > 0 && !s.startsWith('...'))\n .map((s) => s.split(':')[0].trim()); // handle aliased: { foo: bar }\n\n const undeclared = usedParams.filter((p) => !declaredParams.has(p));\n if (undeclared.length === 0) {\n return { ok: true, errors: [] };\n }\n return {\n ok: false,\n errors: undeclared.map((p) => ({\n message: `Handler uses param '${p}' not declared in ${yamlFile}`,\n fix: `Add to ${yamlFile}:\\n params:\\n - param: ${p}\\n values: [...]`,\n })),\n };\n },\n });\n\n // ── Check 6: index.ts exports handler ─────────────────────────────────\n checks.push({\n label: `${yamlFile} — exported from src/actions/index.ts`,\n run(): CheckResult {\n if (!schemaOk) {\n return {\n ok: false,\n errors: [{ message: 'skipped — YAML schema invalid' }],\n };\n }\n const { handler } = getNames();\n if (!existsSync(indexPath)) {\n return {\n ok: false,\n errors: [\n {\n message: 'src/actions/index.ts not found',\n fix: `Create src/actions/index.ts and add:\\nexport { ${handler} } from './${handler}';`,\n },\n ],\n };\n }\n const content = readText(indexPath);\n if (content.includes(handler)) {\n return { ok: true, errors: [] };\n }\n return {\n ok: false,\n errors: [\n {\n message: `'${handler}' not found in src/actions/index.ts`,\n fix: `Add: export { ${handler} } from './${handler}';`,\n },\n ],\n };\n },\n });\n\n // ── Check 7: createRegistry.ts imports handler ────────────────────────\n checks.push({\n label: `${yamlFile} — imported in src/createRegistry.ts`,\n run(): CheckResult {\n if (!schemaOk) {\n return {\n ok: false,\n errors: [{ message: 'skipped — YAML schema invalid' }],\n };\n }\n const { handler, handlerFile } = getNames();\n if (!existsSync(registryPath)) {\n return {\n ok: false,\n errors: [{ message: 'src/createRegistry.ts not found' }],\n };\n }\n const content = readText(registryPath);\n if (content.includes(handler)) {\n return { ok: true, errors: [] };\n }\n return {\n ok: false,\n errors: [\n {\n message: `'${handler}' not imported in src/createRegistry.ts`,\n fix: `Add: import { ${handler} } from './actions/${handlerFile.replace(\n '.ts',\n '',\n )}';`,\n },\n ],\n };\n },\n });\n\n // ── Check 8: createRegistry.ts registers the action ──────────────────\n checks.push({\n label: `${yamlFile} — registered in src/createRegistry.ts`,\n run(): CheckResult {\n if (!schemaOk) {\n return {\n ok: false,\n errors: [{ message: 'skipped — YAML schema invalid' }],\n };\n }\n const { handler, snake } = getNames();\n if (!existsSync(registryPath)) {\n return {\n ok: false,\n errors: [{ message: 'src/createRegistry.ts not found' }],\n };\n }\n const content = readText(registryPath);\n if (\n content.includes(`registerAction('${snake}'`) ||\n content.includes(`registerAction(\"${snake}\"`)\n ) {\n return { ok: true, errors: [] };\n }\n return {\n ok: false,\n errors: [\n {\n message: `'.registerAction('${snake}', ...)' not found in src/createRegistry.ts`,\n fix: `Add to the registry chain:\\n .registerAction('${snake}', ${handler})`,\n },\n ],\n };\n },\n });\n }\n\n return { name: 'Actions', checks };\n}\n\n// ── Command ───────────────────────────────────────────────────────────────────\n\nexport const validateCommand = new Command('validate')\n .description('Validate project config files against their schemas')\n .action(() => {\n const root = findProjectRoot(process.cwd());\n if (!root) {\n error(\n 'No web5.config.json found — run this command from inside a Web5 project',\n );\n process.exit(1);\n }\n\n info(`Project root: ${root}`);\n console.log('');\n\n const domains: Domain[] = [\n buildAiInstructionsDomain(root),\n buildCmsSchemaDomain(root),\n buildActionsDomain(root),\n ];\n\n let hasErrors = false;\n\n for (const domain of domains) {\n console.log(domain.name);\n\n for (const check of domain.checks) {\n const result = check.run();\n\n if (result.ok) {\n console.log(chalk.green(` \\u2714 ${check.label}`));\n } else {\n hasErrors = true;\n process.stderr.write(chalk.red(` \\u2716 ${check.label}\\n`));\n for (const e_ of result.errors) {\n process.stderr.write(` ${e_.message}\\n`);\n if (e_.fix) {\n process.stderr.write(` Fix: ${e_.fix}\\n`);\n }\n }\n }\n }\n\n console.log('');\n }\n\n if (hasErrors) {\n process.exit(1);\n }\n });\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ exports.__esModule = true;
5
+ exports.default = void 0;
6
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
7
+ class Counter {
8
+ constructor() {
9
+ (0, _defineProperty2.default)(this, "_count", 0);
10
+ }
11
+ increment(n = 1) {
12
+ this._count += n;
13
+ }
14
+ getCount() {
15
+ return this._count;
16
+ }
17
+ }
18
+ exports.default = Counter;
19
+ //# sourceMappingURL=counter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Counter","constructor","_defineProperty2","default","increment","n","_count","getCount","exports"],"sources":["../../src/counter.ts"],"sourcesContent":["export default class Counter {\n _count = 0;\n\n increment(n = 1) {\n this._count += n;\n }\n\n getCount() {\n return this._count;\n }\n}\n"],"mappings":";;;;;;AAAe,MAAMA,OAAO,CAAC;EAAAC,YAAA;IAAA,IAAAC,gBAAA,CAAAC,OAAA,kBAClB,CAAC;EAAA;EAEVC,SAASA,CAACC,CAAC,GAAG,CAAC,EAAE;IACf,IAAI,CAACC,MAAM,IAAID,CAAC;EAClB;EAEAE,QAAQA,CAAA,EAAG;IACT,OAAO,IAAI,CAACD,MAAM;EACpB;AACF;AAACE,OAAA,CAAAL,OAAA,GAAAH,OAAA","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=external-types.d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["../../src/external-types.d.ts"],"sourcesContent":["/// <reference types=\"@wix/yoshi-flow-library/types\" />\n\n// keytar is an optional peer dependency — declare minimal surface so TypeScript\n// accepts the dynamic import('keytar') without requiring the package at build time.\ndeclare module 'keytar' {\n export function setPassword(\n service: string,\n account: string,\n password: string,\n ): Promise<void>;\n export function getPassword(\n service: string,\n account: string,\n ): Promise<string | null>;\n export function deletePassword(\n service: string,\n account: string,\n ): Promise<boolean>;\n}\n"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.logout = exports.login = exports.isAuthenticated = exports.getToken = void 0;
5
+ var _auth = require("./auth");
6
+ exports.login = _auth.login;
7
+ exports.logout = _auth.logout;
8
+ exports.getToken = _auth.getToken;
9
+ exports.isAuthenticated = _auth.isAuthenticated;
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_auth","require","exports","login","logout","getToken","isAuthenticated"],"sources":["../../src/index.ts"],"sourcesContent":["// Programmatic API — use these exports when consuming web50-cli as a library.\n// The CLI binary entry point is src/cli.ts (compiled to dist/cjs/cli.js).\n\nexport { login, logout, getToken, isAuthenticated } from './auth';\nexport type { Credentials } from './auth';\n"],"mappings":";;;;AAGA,IAAAA,KAAA,GAAAC,OAAA;AAAkEC,OAAA,CAAAC,KAAA,GAAAH,KAAA,CAAAG,KAAA;AAAAD,OAAA,CAAAE,MAAA,GAAAJ,KAAA,CAAAI,MAAA;AAAAF,OAAA,CAAAG,QAAA,GAAAL,KAAA,CAAAK,QAAA;AAAAH,OAAA,CAAAI,eAAA,GAAAN,KAAA,CAAAM,eAAA","ignoreList":[]}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.actionYamlSchemaTemplate = actionYamlSchemaTemplate;
5
+ function actionYamlSchemaTemplate() {
6
+ return `type: object
7
+ required: [name, params]
8
+ additionalProperties: false
9
+ properties:
10
+ name:
11
+ type: string
12
+ description:
13
+ type: string
14
+ params:
15
+ type: array
16
+ items:
17
+ type: object
18
+ required: [param, values]
19
+ additionalProperties: false
20
+ properties:
21
+ param:
22
+ type: string
23
+ values:
24
+ type: array
25
+ items:
26
+ type: string
27
+ optional:
28
+ type: boolean
29
+ description:
30
+ type: string
31
+ `;
32
+ }
33
+ //# sourceMappingURL=actionYamlSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["actionYamlSchemaTemplate"],"sources":["../../../src/templates/actionYamlSchema.ts"],"sourcesContent":["export function actionYamlSchemaTemplate(): string {\n return `type: object\nrequired: [name, params]\nadditionalProperties: false\nproperties:\n name:\n type: string\n description:\n type: string\n params:\n type: array\n items:\n type: object\n required: [param, values]\n additionalProperties: false\n properties:\n param:\n type: string\n values:\n type: array\n items:\n type: string\n optional:\n type: boolean\n description:\n type: string\n`;\n}\n"],"mappings":";;;;AAAO,SAASA,wBAAwBA,CAAA,EAAW;EACjD,OAAO;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD","ignoreList":[]}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.aiInstructionsSchemaTemplate = aiInstructionsSchemaTemplate;
5
+ function aiInstructionsSchemaTemplate() {
6
+ return `type: object
7
+ required: [rules, instructions, semantics, tone]
8
+ additionalProperties: false
9
+ properties:
10
+ rules:
11
+ type: array
12
+ minItems: 1
13
+ items:
14
+ type: string
15
+ instructions:
16
+ type: string
17
+ semantics:
18
+ type: object
19
+ required: [PROX, VERIFY, SUB-ACTION]
20
+ additionalProperties: false
21
+ properties:
22
+ PROX:
23
+ type: string
24
+ VERIFY:
25
+ type: string
26
+ SUB-ACTION:
27
+ type: string
28
+ tone:
29
+ type: object
30
+ required: [style, voice]
31
+ additionalProperties: false
32
+ properties:
33
+ style:
34
+ type: string
35
+ voice:
36
+ type: string
37
+ `;
38
+ }
39
+ //# sourceMappingURL=aiInstructionsSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["aiInstructionsSchemaTemplate"],"sources":["../../../src/templates/aiInstructionsSchema.ts"],"sourcesContent":["export function aiInstructionsSchemaTemplate(): string {\n return `type: object\nrequired: [rules, instructions, semantics, tone]\nadditionalProperties: false\nproperties:\n rules:\n type: array\n minItems: 1\n items:\n type: string\n instructions:\n type: string\n semantics:\n type: object\n required: [PROX, VERIFY, SUB-ACTION]\n additionalProperties: false\n properties:\n PROX:\n type: string\n VERIFY:\n type: string\n SUB-ACTION:\n type: string\n tone:\n type: object\n required: [style, voice]\n additionalProperties: false\n properties:\n style:\n type: string\n voice:\n type: string\n`;\n}\n"],"mappings":";;;;AAAO,SAASA,4BAA4BA,CAAA,EAAW;EACrD,OAAO;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD","ignoreList":[]}
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.cmsSchemaSchemaTemplate = cmsSchemaSchemaTemplate;
5
+ function cmsSchemaSchemaTemplate() {
6
+ return `# JSON Schema for cms-schema.yaml
7
+ # Validates the structure of CMS collection definitions.
8
+ # This file is bundled with the CLI and is not part of the user's project.
9
+
10
+ type: object
11
+ required: [collections]
12
+ additionalProperties: false
13
+ properties:
14
+ collections:
15
+ type: object
16
+ additionalProperties:
17
+ type: object
18
+ required: [displayName, fields]
19
+ additionalProperties: false
20
+ properties:
21
+ displayName:
22
+ type: string
23
+ fields:
24
+ type: object
25
+ additionalProperties:
26
+ type: object
27
+ required: [type]
28
+ properties:
29
+ type:
30
+ type: string
31
+ enum:
32
+ - string
33
+ - number
34
+ - boolean
35
+ - array
36
+ - object
37
+ - datetime
38
+ - richtext
39
+ required:
40
+ type: boolean
41
+ unique:
42
+ type: boolean
43
+ description:
44
+ type: string
45
+ default: {}
46
+ enum:
47
+ type: array
48
+ ref:
49
+ type: string
50
+ items:
51
+ type: object
52
+ auto:
53
+ type: boolean
54
+ min:
55
+ type: number
56
+ example: {}
57
+ `;
58
+ }
59
+ //# sourceMappingURL=cmsSchemaSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["cmsSchemaSchemaTemplate"],"sources":["../../../src/templates/cmsSchemaSchema.ts"],"sourcesContent":["export function cmsSchemaSchemaTemplate(): string {\n return `# JSON Schema for cms-schema.yaml\n# Validates the structure of CMS collection definitions.\n# This file is bundled with the CLI and is not part of the user's project.\n\ntype: object\nrequired: [collections]\nadditionalProperties: false\nproperties:\n collections:\n type: object\n additionalProperties:\n type: object\n required: [displayName, fields]\n additionalProperties: false\n properties:\n displayName:\n type: string\n fields:\n type: object\n additionalProperties:\n type: object\n required: [type]\n properties:\n type:\n type: string\n enum:\n - string\n - number\n - boolean\n - array\n - object\n - datetime\n - richtext\n required:\n type: boolean\n unique:\n type: boolean\n description:\n type: string\n default: {}\n enum:\n type: array\n ref:\n type: string\n items:\n type: object\n auto:\n type: boolean\n min:\n type: number\n example: {}\n`;\n}\n"],"mappings":";;;;AAAO,SAASA,uBAAuBA,CAAA,EAAW;EAChD,OAAO;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ /// <reference types="@wix/jest-yoshi-preset/types" />
2
+ //# sourceMappingURL=test-types.d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["../../src/test-types.d.ts"],"sourcesContent":["/// <reference types=\"@wix/jest-yoshi-preset/types\" />\n"],"mappings":"AAAA","ignoreList":[]}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.atomicWrite = atomicWrite;
5
+ exports.ensureDir = ensureDir;
6
+ var _promises = require("fs/promises");
7
+ var path = _interopRequireWildcard(require("path"));
8
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
9
+ async function atomicWrite(filePath, content, mode = 0o644) {
10
+ await (0, _promises.mkdir)(path.dirname(filePath), {
11
+ recursive: true
12
+ });
13
+ const tmpPath = `${filePath}.tmp`;
14
+ await (0, _promises.writeFile)(tmpPath, content, {
15
+ encoding: 'utf8',
16
+ mode
17
+ });
18
+ await (0, _promises.rename)(tmpPath, filePath);
19
+ }
20
+ async function ensureDir(dirPath) {
21
+ await (0, _promises.mkdir)(dirPath, {
22
+ recursive: true
23
+ });
24
+ }
25
+ //# sourceMappingURL=fs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_promises","require","path","_interopRequireWildcard","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","atomicWrite","filePath","content","mode","mkdir","dirname","recursive","tmpPath","writeFile","encoding","rename","ensureDir","dirPath"],"sources":["../../../src/utils/fs.ts"],"sourcesContent":["import { writeFile, rename, mkdir } from 'fs/promises';\nimport * as path from 'path';\n\nexport async function atomicWrite(\n filePath: string,\n content: string,\n mode = 0o644,\n): Promise<void> {\n await mkdir(path.dirname(filePath), { recursive: true });\n const tmpPath = `${filePath}.tmp`;\n await writeFile(tmpPath, content, { encoding: 'utf8', mode });\n await rename(tmpPath, filePath);\n}\n\nexport async function ensureDir(dirPath: string): Promise<void> {\n await mkdir(dirPath, { recursive: true });\n}\n"],"mappings":";;;;;AAAA,IAAAA,SAAA,GAAAC,OAAA;AACA,IAAAC,IAAA,GAAAC,uBAAA,CAAAF,OAAA;AAA6B,SAAAE,wBAAAC,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAH,uBAAA,YAAAA,CAAAC,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAEtB,eAAekB,WAAWA,CAC/BC,QAAgB,EAChBC,OAAe,EACfC,IAAI,GAAG,KAAK,EACG;EACf,MAAM,IAAAC,eAAK,EAACzB,IAAI,CAAC0B,OAAO,CAACJ,QAAQ,CAAC,EAAE;IAAEK,SAAS,EAAE;EAAK,CAAC,CAAC;EACxD,MAAMC,OAAO,GAAG,GAAGN,QAAQ,MAAM;EACjC,MAAM,IAAAO,mBAAS,EAACD,OAAO,EAAEL,OAAO,EAAE;IAAEO,QAAQ,EAAE,MAAM;IAAEN;EAAK,CAAC,CAAC;EAC7D,MAAM,IAAAO,gBAAM,EAACH,OAAO,EAAEN,QAAQ,CAAC;AACjC;AAEO,eAAeU,SAASA,CAACC,OAAe,EAAiB;EAC9D,MAAM,IAAAR,eAAK,EAACQ,OAAO,EAAE;IAAEN,SAAS,EAAE;EAAK,CAAC,CAAC;AAC3C","ignoreList":[]}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ exports.__esModule = true;
5
+ exports.error = error;
6
+ exports.info = info;
7
+ exports.spinner = spinner;
8
+ exports.success = success;
9
+ exports.warn = warn;
10
+ var _chalk = _interopRequireDefault(require("chalk"));
11
+ var _ora = _interopRequireDefault(require("ora"));
12
+ function success(msg) {
13
+ console.log(_chalk.default.green(`\u2714 ${msg}`));
14
+ }
15
+ function error(msg) {
16
+ process.stderr.write(_chalk.default.red(`\u2716 ${msg}\n`));
17
+ }
18
+ function info(msg) {
19
+ console.log(_chalk.default.dim(` ${msg}`));
20
+ }
21
+ function warn(msg) {
22
+ console.log(_chalk.default.yellow(`\u26a0 ${msg}`));
23
+ }
24
+ function spinner(msg) {
25
+ return (0, _ora.default)(msg).start();
26
+ }
27
+ //# sourceMappingURL=print.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_chalk","_interopRequireDefault","require","_ora","success","msg","console","log","chalk","green","error","process","stderr","write","red","info","dim","warn","yellow","spinner","ora","start"],"sources":["../../../src/utils/print.ts"],"sourcesContent":["import chalk from 'chalk';\nimport ora from 'ora';\nimport type { Ora } from 'ora';\n\nexport function success(msg: string): void {\n console.log(chalk.green(`\\u2714 ${msg}`));\n}\n\nexport function error(msg: string): void {\n process.stderr.write(chalk.red(`\\u2716 ${msg}\\n`));\n}\n\nexport function info(msg: string): void {\n console.log(chalk.dim(` ${msg}`));\n}\n\nexport function warn(msg: string): void {\n console.log(chalk.yellow(`\\u26a0 ${msg}`));\n}\n\nexport function spinner(msg: string): Ora {\n return ora(msg).start();\n}\n"],"mappings":";;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,IAAA,GAAAF,sBAAA,CAAAC,OAAA;AAGO,SAASE,OAAOA,CAACC,GAAW,EAAQ;EACzCC,OAAO,CAACC,GAAG,CAACC,cAAK,CAACC,KAAK,CAAC,WAAWJ,GAAG,EAAE,CAAC,CAAC;AAC5C;AAEO,SAASK,KAAKA,CAACL,GAAW,EAAQ;EACvCM,OAAO,CAACC,MAAM,CAACC,KAAK,CAACL,cAAK,CAACM,GAAG,CAAC,WAAWT,GAAG,IAAI,CAAC,CAAC;AACrD;AAEO,SAASU,IAAIA,CAACV,GAAW,EAAQ;EACtCC,OAAO,CAACC,GAAG,CAACC,cAAK,CAACQ,GAAG,CAAC,MAAMX,GAAG,EAAE,CAAC,CAAC;AACrC;AAEO,SAASY,IAAIA,CAACZ,GAAW,EAAQ;EACtCC,OAAO,CAACC,GAAG,CAACC,cAAK,CAACU,MAAM,CAAC,WAAWb,GAAG,EAAE,CAAC,CAAC;AAC7C;AAEO,SAASc,OAAOA,CAACd,GAAW,EAAO;EACxC,OAAO,IAAAe,YAAG,EAACf,GAAG,CAAC,CAACgB,KAAK,CAAC,CAAC;AACzB","ignoreList":[]}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.findProjectRoot = findProjectRoot;
5
+ var fs = _interopRequireWildcard(require("fs"));
6
+ var path = _interopRequireWildcard(require("path"));
7
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
8
+ /**
9
+ * Walk up from startDir until we find a directory containing web5.config.json.
10
+ * Returns that directory, or null if none found.
11
+ */
12
+ function findProjectRoot(startDir) {
13
+ let current = startDir;
14
+ let parent = path.dirname(current);
15
+ while (current !== parent) {
16
+ if (fs.existsSync(path.join(current, 'web5.config.json'))) {
17
+ return current;
18
+ }
19
+ current = parent;
20
+ parent = path.dirname(current);
21
+ }
22
+ if (fs.existsSync(path.join(current, 'web5.config.json'))) {
23
+ return current;
24
+ }
25
+ return null;
26
+ }
27
+ //# sourceMappingURL=project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["fs","_interopRequireWildcard","require","path","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","findProjectRoot","startDir","current","parent","dirname","existsSync","join"],"sources":["../../../src/utils/project.ts"],"sourcesContent":["import * as fs from 'fs';\nimport * as path from 'path';\n\n/**\n * Walk up from startDir until we find a directory containing web5.config.json.\n * Returns that directory, or null if none found.\n */\nexport function findProjectRoot(startDir: string): string | null {\n let current = startDir;\n let parent = path.dirname(current);\n while (current !== parent) {\n if (fs.existsSync(path.join(current, 'web5.config.json'))) {\n return current;\n }\n current = parent;\n parent = path.dirname(current);\n }\n if (fs.existsSync(path.join(current, 'web5.config.json'))) {\n return current;\n }\n return null;\n}\n"],"mappings":";;;;AAAA,IAAAA,EAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,IAAA,GAAAF,uBAAA,CAAAC,OAAA;AAA6B,SAAAD,wBAAAG,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAL,uBAAA,YAAAA,CAAAG,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAE7B;AACA;AACA;AACA;AACO,SAASkB,eAAeA,CAACC,QAAgB,EAAiB;EAC/D,IAAIC,OAAO,GAAGD,QAAQ;EACtB,IAAIE,MAAM,GAAGvB,IAAI,CAACwB,OAAO,CAACF,OAAO,CAAC;EAClC,OAAOA,OAAO,KAAKC,MAAM,EAAE;IACzB,IAAI1B,EAAE,CAAC4B,UAAU,CAACzB,IAAI,CAAC0B,IAAI,CAACJ,OAAO,EAAE,kBAAkB,CAAC,CAAC,EAAE;MACzD,OAAOA,OAAO;IAChB;IACAA,OAAO,GAAGC,MAAM;IAChBA,MAAM,GAAGvB,IAAI,CAACwB,OAAO,CAACF,OAAO,CAAC;EAChC;EACA,IAAIzB,EAAE,CAAC4B,UAAU,CAACzB,IAAI,CAAC0B,IAAI,CAACJ,OAAO,EAAE,kBAAkB,CAAC,CAAC,EAAE;IACzD,OAAOA,OAAO;EAChB;EACA,OAAO,IAAI;AACb","ignoreList":[]}
@@ -0,0 +1,72 @@
1
+ import * as readline from 'readline';
2
+ import { spinner, info } from '../utils/print';
3
+
4
+ // const CLIENT_ID = '602051c7-ec4b-4334-b90d-b029b076ba8f';
5
+ const CLIENT_ID = '6f95cec8-3e98-48b9-b4e5-1fb92fcd9973';
6
+ const DEVICE_CODE_URL = 'https://www.wixapis.com/oauth2/device/code';
7
+ const TOKEN_URL = 'https://www.wixapis.com/oauth2/token';
8
+ const POLL_INTERVAL_MS = 3000;
9
+ const POLL_TIMEOUT_MS = 60_000;
10
+ async function sleep(ms) {
11
+ return new Promise(resolve => setTimeout(resolve, ms));
12
+ }
13
+ async function requestDeviceCode() {
14
+ const res = await fetch(`${DEVICE_CODE_URL}?client_id=${CLIENT_ID}&scope=session_bound_access`);
15
+ if (!res.ok) {
16
+ throw new Error(`Device code request failed: ${res.status} ${res.statusText}`);
17
+ }
18
+ return res.json();
19
+ }
20
+ async function pollToken(deviceCode) {
21
+ const deadline = Date.now() + POLL_TIMEOUT_MS;
22
+ const url = `${TOKEN_URL}` + `?grant_type=${encodeURIComponent('urn:ietf:params:oauth:grant-type:device_code')}` + `&client_id=${CLIENT_ID}` + `&device_code=${encodeURIComponent(deviceCode)}`;
23
+ while (Date.now() < deadline) {
24
+ const res = await fetch(url, {
25
+ method: 'POST'
26
+ });
27
+ if (res.ok) {
28
+ return res.json();
29
+ }
30
+ const body = await res.json().catch(() => ({}));
31
+ if (body.error === 'access_denied') {
32
+ throw new Error('Access denied');
33
+ }
34
+
35
+ // authorization_pending, slow_down, unknown_error, or any transient error → keep polling
36
+ await sleep(POLL_INTERVAL_MS);
37
+ }
38
+ throw new Error('Verification failed — timed out after 60 seconds. Please run `web5 login` again.');
39
+ }
40
+ async function pressEnterToContinue() {
41
+ return new Promise(resolve => {
42
+ const rl = readline.createInterface({
43
+ input: process.stdin,
44
+ output: process.stdout
45
+ });
46
+ rl.question(' Press Enter to open in browser...', () => {
47
+ rl.close();
48
+ resolve();
49
+ });
50
+ });
51
+ }
52
+ export async function runDeviceFlow() {
53
+ const code = await requestDeviceCode();
54
+ console.log('');
55
+ info(`Verification code: ${code.userCode}`);
56
+ console.log(` ${code.verificationUri}`);
57
+ console.log('');
58
+ await pressEnterToContinue();
59
+ const open = (await import('open')).default;
60
+ await open(code.verificationUri);
61
+ console.log('');
62
+ const spin = spinner('Waiting for approval...');
63
+ try {
64
+ const token = await pollToken(code.deviceCode);
65
+ spin.succeed('Approved');
66
+ return token;
67
+ } catch (err) {
68
+ spin.fail('Authentication failed');
69
+ throw err;
70
+ }
71
+ }
72
+ //# sourceMappingURL=deviceFlow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["readline","spinner","info","CLIENT_ID","DEVICE_CODE_URL","TOKEN_URL","POLL_INTERVAL_MS","POLL_TIMEOUT_MS","sleep","ms","Promise","resolve","setTimeout","requestDeviceCode","res","fetch","ok","Error","status","statusText","json","pollToken","deviceCode","deadline","Date","now","url","encodeURIComponent","method","body","catch","error","pressEnterToContinue","rl","createInterface","input","process","stdin","output","stdout","question","close","runDeviceFlow","code","console","log","userCode","verificationUri","open","default","spin","token","succeed","err","fail"],"sources":["../../../src/auth/deviceFlow.ts"],"sourcesContent":["import * as readline from 'readline';\nimport { spinner, info } from '../utils/print';\n\n// const CLIENT_ID = '602051c7-ec4b-4334-b90d-b029b076ba8f';\nconst CLIENT_ID = '6f95cec8-3e98-48b9-b4e5-1fb92fcd9973';\nconst DEVICE_CODE_URL = 'https://www.wixapis.com/oauth2/device/code';\nconst TOKEN_URL = 'https://www.wixapis.com/oauth2/token';\nconst POLL_INTERVAL_MS = 3000;\nconst POLL_TIMEOUT_MS = 60_000;\n\ninterface DeviceCodeResponse {\n deviceCode: string;\n userCode: string;\n verificationUri: string;\n expiresIn: number;\n}\n\nexport interface TokenResponse {\n access_token: string;\n token_type: string;\n expires_in: number;\n refresh_token: string;\n}\n\nasync function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nasync function requestDeviceCode(): Promise<DeviceCodeResponse> {\n const res = await fetch(\n `${DEVICE_CODE_URL}?client_id=${CLIENT_ID}&scope=session_bound_access`,\n );\n if (!res.ok) {\n throw new Error(\n `Device code request failed: ${res.status} ${res.statusText}`,\n );\n }\n return res.json() as Promise<DeviceCodeResponse>;\n}\n\nasync function pollToken(deviceCode: string): Promise<TokenResponse> {\n const deadline = Date.now() + POLL_TIMEOUT_MS;\n const url =\n `${TOKEN_URL}` +\n `?grant_type=${encodeURIComponent(\n 'urn:ietf:params:oauth:grant-type:device_code',\n )}` +\n `&client_id=${CLIENT_ID}` +\n `&device_code=${encodeURIComponent(deviceCode)}`;\n\n while (Date.now() < deadline) {\n const res = await fetch(url, { method: 'POST' });\n\n if (res.ok) {\n return res.json() as Promise<TokenResponse>;\n }\n\n const body = (await res.json().catch(() => ({}))) as { error?: string };\n\n if (body.error === 'access_denied') {\n throw new Error('Access denied');\n }\n\n // authorization_pending, slow_down, unknown_error, or any transient error → keep polling\n await sleep(POLL_INTERVAL_MS);\n }\n\n throw new Error(\n 'Verification failed — timed out after 60 seconds. Please run `web5 login` again.',\n );\n}\n\nasync function pressEnterToContinue(): Promise<void> {\n return new Promise((resolve) => {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n rl.question(' Press Enter to open in browser...', () => {\n rl.close();\n resolve();\n });\n });\n}\n\nexport async function runDeviceFlow(): Promise<TokenResponse> {\n const code = await requestDeviceCode();\n\n console.log('');\n info(`Verification code: ${code.userCode}`);\n console.log(` ${code.verificationUri}`);\n console.log('');\n\n await pressEnterToContinue();\n\n const open = (await import('open')).default;\n await open(code.verificationUri);\n console.log('');\n\n const spin = spinner('Waiting for approval...');\n\n try {\n const token = await pollToken(code.deviceCode);\n spin.succeed('Approved');\n return token;\n } catch (err) {\n spin.fail('Authentication failed');\n throw err;\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,40 @@
1
+ import { runDeviceFlow } from './deviceFlow';
2
+ import { writeCredentials, readCredentials, clearCredentials } from './secretStore';
3
+ import { success } from '../utils/print';
4
+ export async function login(apiKey) {
5
+ if (apiKey) {
6
+ await writeCredentials({
7
+ api_key: apiKey
8
+ });
9
+ success('API key saved');
10
+ return;
11
+ }
12
+ const token = await runDeviceFlow();
13
+ await writeCredentials({
14
+ access_token: token.access_token,
15
+ refresh_token: token.refresh_token
16
+ });
17
+ success('Authenticated');
18
+ success('Tokens stored in system keychain');
19
+ }
20
+ export async function logout() {
21
+ await clearCredentials();
22
+ success('Signed out \u2014 credentials removed');
23
+ }
24
+ export async function getToken() {
25
+ const creds = await readCredentials();
26
+ if (!creds) {
27
+ return null;
28
+ }
29
+ if (creds.access_token) {
30
+ return creds.access_token;
31
+ }
32
+ if (creds.api_key) {
33
+ return creds.api_key;
34
+ }
35
+ return creds.refresh_token ?? null;
36
+ }
37
+ export async function isAuthenticated() {
38
+ return (await getToken()) !== null;
39
+ }
40
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["runDeviceFlow","writeCredentials","readCredentials","clearCredentials","success","login","apiKey","api_key","token","access_token","refresh_token","logout","getToken","creds","isAuthenticated"],"sources":["../../../src/auth/index.ts"],"sourcesContent":["import { runDeviceFlow } from './deviceFlow';\nimport {\n writeCredentials,\n readCredentials,\n clearCredentials,\n} from './secretStore';\nimport { success } from '../utils/print';\n\nexport type { Credentials } from './secretStore';\n\nexport async function login(apiKey?: string): Promise<void> {\n if (apiKey) {\n await writeCredentials({ api_key: apiKey });\n success('API key saved');\n return;\n }\n\n const token = await runDeviceFlow();\n await writeCredentials({\n access_token: token.access_token,\n refresh_token: token.refresh_token,\n });\n success('Authenticated');\n success('Tokens stored in system keychain');\n}\n\nexport async function logout(): Promise<void> {\n await clearCredentials();\n success('Signed out \\u2014 credentials removed');\n}\n\nexport async function getToken(): Promise<string | null> {\n const creds = await readCredentials();\n if (!creds) {\n return null;\n }\n if (creds.access_token) {\n return creds.access_token;\n }\n if (creds.api_key) {\n return creds.api_key;\n }\n return creds.refresh_token ?? null;\n}\n\nexport async function isAuthenticated(): Promise<boolean> {\n return (await getToken()) !== null;\n}\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,cAAc;AAC5C,SACEC,gBAAgB,EAChBC,eAAe,EACfC,gBAAgB,QACX,eAAe;AACtB,SAASC,OAAO,QAAQ,gBAAgB;AAIxC,OAAO,eAAeC,KAAKA,CAACC,MAAe,EAAiB;EAC1D,IAAIA,MAAM,EAAE;IACV,MAAML,gBAAgB,CAAC;MAAEM,OAAO,EAAED;IAAO,CAAC,CAAC;IAC3CF,OAAO,CAAC,eAAe,CAAC;IACxB;EACF;EAEA,MAAMI,KAAK,GAAG,MAAMR,aAAa,CAAC,CAAC;EACnC,MAAMC,gBAAgB,CAAC;IACrBQ,YAAY,EAAED,KAAK,CAACC,YAAY;IAChCC,aAAa,EAAEF,KAAK,CAACE;EACvB,CAAC,CAAC;EACFN,OAAO,CAAC,eAAe,CAAC;EACxBA,OAAO,CAAC,kCAAkC,CAAC;AAC7C;AAEA,OAAO,eAAeO,MAAMA,CAAA,EAAkB;EAC5C,MAAMR,gBAAgB,CAAC,CAAC;EACxBC,OAAO,CAAC,uCAAuC,CAAC;AAClD;AAEA,OAAO,eAAeQ,QAAQA,CAAA,EAA2B;EACvD,MAAMC,KAAK,GAAG,MAAMX,eAAe,CAAC,CAAC;EACrC,IAAI,CAACW,KAAK,EAAE;IACV,OAAO,IAAI;EACb;EACA,IAAIA,KAAK,CAACJ,YAAY,EAAE;IACtB,OAAOI,KAAK,CAACJ,YAAY;EAC3B;EACA,IAAII,KAAK,CAACN,OAAO,EAAE;IACjB,OAAOM,KAAK,CAACN,OAAO;EACtB;EACA,OAAOM,KAAK,CAACH,aAAa,IAAI,IAAI;AACpC;AAEA,OAAO,eAAeI,eAAeA,CAAA,EAAqB;EACxD,OAAO,CAAC,MAAMF,QAAQ,CAAC,CAAC,MAAM,IAAI;AACpC","ignoreList":[]}