@genfeedai/create 0.2.0 → 0.3.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.
package/README.md CHANGED
@@ -11,7 +11,10 @@ npx @genfeedai/create my-genfeed
11
11
  The installer resolves the latest GitHub release, downloads its public
12
12
  self-hosted bundle, verifies the SHA-256 checksum and release manifest, then
13
13
  starts the exact GHCR image associated with that release. The app is available
14
- at `http://localhost:3000`.
14
+ at `http://localhost:3000` by default. The wizard asks for an OpenRouter key
15
+ (hidden input) and a domain you own (blank for localhost). It writes the final
16
+ `.env` with owner-only permissions and generated encryption/session secrets
17
+ before starting Docker.
15
18
 
16
19
  Install a specific release reproducibly:
17
20
 
@@ -25,10 +28,28 @@ Prepare and validate the installation without starting containers:
25
28
  npx @genfeedai/create my-genfeed --release v0.5.0 --no-start
26
29
  ```
27
30
 
28
- Node.js 24, Docker Compose, and `tar` must be installed. The generated directory
31
+ Node.js 24 (`>=24 <25`; other versions exit with an error), Docker Compose v2, and `tar` must be installed. The generated directory
29
32
  contains the release manifest, pinned environment, Compose file, and
30
33
  installation guide.
31
34
 
35
+ ## First sign-up and first generation
36
+
37
+ Sign-up is enabled by default. Supply a real key from
38
+ [openrouter.ai/keys](https://openrouter.ai/keys) during setup: missing or
39
+ placeholder keys stop installation/startup. Format checks do not prove provider
40
+ access or available provider credit.
41
+
42
+ For automation, pass `--yes` and securely provide `OPENROUTER_API_KEY` in the
43
+ environment. `SELFHOSTED_DOMAIN` and the three `SELFHOSTED_*_PORT` variables
44
+ override the defaults; no secret CLI argument is supported. Non-terminal input
45
+ requires `--yes` and a key, rather than silently copying an unusable template.
46
+
47
+ A domain such as `studio.example.com` derives HTTPS app/API/auth URLs and trusted
48
+ origins. You must configure DNS, TLS and reverse-proxy routing separately; the
49
+ release bundle README describes it. Existing installs upgrading to 0.2.15 must
50
+ configure a key before restarting and remove conflicting localhost auth URLs
51
+ when setting a domain.
52
+
32
53
  ## License
33
54
 
34
55
  AGPL-3.0
package/dist/index.d.ts CHANGED
@@ -2,6 +2,7 @@
2
2
  interface CliOptions {
3
3
  release?: string;
4
4
  start: boolean;
5
+ yes?: boolean;
5
6
  }
6
7
  interface ReleaseManifest {
7
8
  schemaVersion: number;
@@ -20,6 +21,7 @@ export declare function resolveReleaseTag(requestedRelease?: string, fetchImplem
20
21
  export declare function readPackageVersion(packageJsonUrl?: URL): string;
21
22
  export declare function verifyReleaseChecksum(archivePath: string, checksumPath: string): Promise<void>;
22
23
  export declare function parseReleaseManifest(content: string, expectedReleaseTag: string): ReleaseManifest;
24
+ export declare function assertSupportedNodeVersion(nodeVersion?: string): void;
23
25
  export declare function openBrowser(url: string): void;
24
26
  export declare function installRelease(projectName: string, options: CliOptions, fetchImplementation?: FetchImplementation): Promise<void>;
25
27
  export {};
package/dist/index.js CHANGED
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import { spawn, spawnSync } from 'node:child_process';
3
3
  import { createHash } from 'node:crypto';
4
- import { constants, readFileSync, realpathSync } from 'node:fs';
5
- import { access, copyFile, mkdir, mkdtemp, readFile, rm, writeFile, } from 'node:fs/promises';
4
+ import { readFileSync, realpathSync } from 'node:fs';
5
+ import { access, mkdir, mkdtemp, readFile, rm, writeFile, } from 'node:fs/promises';
6
6
  import { tmpdir } from 'node:os';
7
7
  import { join, resolve } from 'node:path';
8
8
  import { fileURLToPath } from 'node:url';
9
- import { Command } from 'commander';
10
9
  import { consola } from 'consola';
10
+ import { configureEnvironment } from './wizard.js';
11
11
  const REPOSITORY = 'genfeedai/genfeed.ai';
12
12
  const RELEASE_API_URL = `https://api.github.com/repos/${REPOSITORY}/releases/latest`;
13
13
  const DEFAULT_DOWNLOAD_BASE_URL = `https://github.com/${REPOSITORY}/releases/download`;
@@ -15,8 +15,10 @@ const RELEASE_ARCHIVE_NAME = 'genfeed-selfhosted.tar.gz';
15
15
  const RELEASE_CHECKSUM_NAME = `${RELEASE_ARCHIVE_NAME}.sha256`;
16
16
  const RELEASE_MANIFEST_NAME = 'release.json';
17
17
  const EXPECTED_IMAGE_REPOSITORY = 'ghcr.io/genfeedai/genfeed.ai';
18
- const APP_URL = 'http://localhost:3000';
19
- function isRecord(value) {
18
+ // Keep in sync with "engines.node" (>=24 <25) in package.json.
19
+ const MIN_NODE_MAJOR = 24;
20
+ const MAX_NODE_MAJOR_EXCLUSIVE = 25;
21
+ function isNonNullObject(value) {
20
22
  return typeof value === 'object' && value !== null;
21
23
  }
22
24
  export function normalizeReleaseTag(value) {
@@ -54,7 +56,7 @@ export async function resolveReleaseTag(requestedRelease, fetchImplementation =
54
56
  throw new Error(`Could not resolve the latest Genfeed.ai release (HTTP ${response.status}).`);
55
57
  }
56
58
  const payload = await response.json();
57
- if (!isRecord(payload)) {
59
+ if (!isNonNullObject(payload)) {
58
60
  throw new Error('GitHub returned invalid latest-release metadata.');
59
61
  }
60
62
  const tagName = payload.tag_name;
@@ -65,7 +67,7 @@ export async function resolveReleaseTag(requestedRelease, fetchImplementation =
65
67
  }
66
68
  export function readPackageVersion(packageJsonUrl = new URL('../package.json', import.meta.url)) {
67
69
  const manifest = JSON.parse(readFileSync(fileURLToPath(packageJsonUrl), 'utf8'));
68
- if (!isRecord(manifest) || typeof manifest.version !== 'string') {
70
+ if (!isNonNullObject(manifest) || typeof manifest.version !== 'string') {
69
71
  throw new Error('Could not read the @genfeedai/create package version.');
70
72
  }
71
73
  return manifest.version;
@@ -96,7 +98,7 @@ export async function verifyReleaseChecksum(archivePath, checksumPath) {
96
98
  }
97
99
  export function parseReleaseManifest(content, expectedReleaseTag) {
98
100
  const parsed = JSON.parse(content);
99
- if (!isRecord(parsed)) {
101
+ if (!isNonNullObject(parsed)) {
100
102
  throw new Error('Release manifest is not an object.');
101
103
  }
102
104
  const normalizedTag = normalizeReleaseTag(expectedReleaseTag);
@@ -134,6 +136,14 @@ async function runCommand(command, args, options = {}) {
134
136
  });
135
137
  });
136
138
  }
139
+ export function assertSupportedNodeVersion(nodeVersion = process.versions.node) {
140
+ const major = Number.parseInt(nodeVersion.split('.')[0] ?? '', 10);
141
+ if (!Number.isInteger(major) ||
142
+ major < MIN_NODE_MAJOR ||
143
+ major >= MAX_NODE_MAJOR_EXCLUSIVE) {
144
+ throw new Error(`Node.js ${MIN_NODE_MAJOR} is required (supported range: >=${MIN_NODE_MAJOR} <${MAX_NODE_MAJOR_EXCLUSIVE}); found ${nodeVersion}. Install Node.js ${MIN_NODE_MAJOR} and run again.`);
145
+ }
146
+ }
137
147
  function assertInstallPrerequisites() {
138
148
  if (!commandExists('tar')) {
139
149
  throw new Error('tar is required to extract the Genfeed.ai release bundle.');
@@ -142,11 +152,11 @@ function assertInstallPrerequisites() {
142
152
  throw new Error('Docker Compose is required. Install Docker Desktop or the Docker Compose plugin.');
143
153
  }
144
154
  }
145
- async function waitForApp(fetchImplementation, timeoutMs = 180_000) {
155
+ async function waitForApp(fetchImplementation, appUrl, timeoutMs = 180_000) {
146
156
  const start = Date.now();
147
157
  while (Date.now() - start < timeoutMs) {
148
158
  try {
149
- const response = await fetchImplementation(APP_URL, {
159
+ const response = await fetchImplementation(appUrl, {
150
160
  redirect: 'manual',
151
161
  signal: AbortSignal.timeout(2_000),
152
162
  });
@@ -215,7 +225,11 @@ export async function installRelease(projectName, options, fetchImplementation =
215
225
  createdProjectDirectory = true;
216
226
  await runCommand('tar', ['-xzf', archivePath, '-C', projectDirectory, '--strip-components=1'], { stdio: 'ignore' });
217
227
  const releaseManifest = parseReleaseManifest(await readFile(join(projectDirectory, RELEASE_MANIFEST_NAME), 'utf8'), releaseTag);
218
- await copyFile(join(projectDirectory, '.env.example'), join(projectDirectory, '.env'), constants.COPYFILE_EXCL);
228
+ const setup = await configureEnvironment(await readFile(join(projectDirectory, '.env.example'), 'utf8'), options.yes);
229
+ await writeFile(join(projectDirectory, '.env'), setup.content, {
230
+ flag: 'wx',
231
+ mode: 0o600,
232
+ });
219
233
  await runCommand('docker', [
220
234
  'compose',
221
235
  '--env-file',
@@ -233,12 +247,12 @@ export async function installRelease(projectName, options, fetchImplementation =
233
247
  startAttempted = true;
234
248
  await runCommand('docker', ['compose', '--env-file', '.env', '-f', 'compose.yml', 'up', '-d'], { cwd: projectDirectory });
235
249
  consola.start('Waiting for Genfeed.ai to become ready…');
236
- if (await waitForApp(fetchImplementation)) {
237
- consola.success(`Genfeed.ai is running at ${APP_URL}`);
238
- openBrowser(APP_URL);
250
+ if (await waitForApp(fetchImplementation, setup.appUrl)) {
251
+ consola.success(`Genfeed.ai is running at ${setup.appUrl}`);
252
+ openBrowser(setup.appUrl);
239
253
  }
240
254
  else {
241
- consola.warn(`The containers started, but ${APP_URL} is not ready yet.`);
255
+ consola.warn(`The containers started, but ${setup.appUrl} is not ready yet.`);
242
256
  }
243
257
  }
244
258
  catch (error) {
@@ -255,12 +269,22 @@ export async function installRelease(projectName, options, fetchImplementation =
255
269
  }
256
270
  }
257
271
  async function main() {
272
+ try {
273
+ assertSupportedNodeVersion();
274
+ }
275
+ catch (error) {
276
+ consola.error(error instanceof Error ? error.message : String(error));
277
+ process.exitCode = 1;
278
+ return;
279
+ }
280
+ const { Command } = await import('commander');
258
281
  const program = new Command()
259
282
  .name('genfeedai')
260
283
  .description('Install a public Genfeed.ai Community release.')
261
284
  .version(readPackageVersion())
262
285
  .argument('<project-name>', 'Directory for the self-hosted installation')
263
286
  .option('--release <tag>', 'Install an exact release (for example, v0.5.0)')
287
+ .option('--yes', 'Use OPENROUTER_API_KEY and optional SELFHOSTED_DOMAIN without prompts')
264
288
  .option('--no-start', 'Prepare and verify the installation without starting it')
265
289
  .action(async (projectName, options) => {
266
290
  await installRelease(projectName, options);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ type SetupInput = Record<string, string | undefined>;
2
+ export declare function resolveSetupEnvironment(input: SetupInput): Record<string, string>;
3
+ export {};
package/dist/setup.js ADDED
@@ -0,0 +1,93 @@
1
+ import { pathToFileURL } from 'node:url';
2
+ function origin(value, variable, allowPath = false) {
3
+ try {
4
+ const parsed = new URL(value);
5
+ if (!['http:', 'https:'].includes(parsed.protocol) ||
6
+ parsed.username ||
7
+ parsed.password ||
8
+ /['"`$\\\r\n]/.test(value) ||
9
+ (parsed.pathname !== '/' && !allowPath) ||
10
+ parsed.search ||
11
+ parsed.hash)
12
+ throw new Error();
13
+ return allowPath ? parsed.href : parsed.origin;
14
+ }
15
+ catch {
16
+ throw new Error(`${variable} must be an HTTP(S) origin without credentials, path, query or fragment.`);
17
+ }
18
+ }
19
+ function isLocal(value) {
20
+ return ['localhost', '127.0.0.1', '[::1]'].includes(new URL(value).hostname);
21
+ }
22
+ export function resolveSetupEnvironment(input) {
23
+ const key = input.OPENROUTER_API_KEY ?? '';
24
+ if (!/^sk-or-[A-Za-z0-9_-]{8,}$/.test(key) ||
25
+ /placeholder|your[_-]|change[_-]?me|example|dummy/i.test(key)) {
26
+ throw new Error('OPENROUTER_API_KEY is required and must contain a non-placeholder OpenRouter key. Set it before starting.');
27
+ }
28
+ const domain = input.SELFHOSTED_DOMAIN?.trim() ?? '';
29
+ for (const name of [
30
+ 'SELFHOSTED_APP_PORT',
31
+ 'SELFHOSTED_API_PORT',
32
+ 'SELFHOSTED_MCP_PORT',
33
+ ]) {
34
+ const value = input[name];
35
+ if (value &&
36
+ (!/^\d+$/.test(value) || Number(value) < 1 || Number(value) > 65535))
37
+ throw new Error(`${name} must be a port from 1 to 65535.`);
38
+ }
39
+ const publicOrigin = domain
40
+ ? origin(domain.includes('://') ? domain : `https://${domain}`, 'SELFHOSTED_DOMAIN')
41
+ : '';
42
+ const app = origin(input.GENFEEDAI_PUBLIC_URL ||
43
+ publicOrigin ||
44
+ `http://localhost:${input.SELFHOSTED_APP_PORT || '3000'}`, 'GENFEEDAI_PUBLIC_URL');
45
+ const api = origin(input.GENFEEDAI_API_PUBLIC_URL ||
46
+ publicOrigin ||
47
+ (isLocal(app)
48
+ ? `http://localhost:${input.SELFHOSTED_API_PORT || '3010'}`
49
+ : app), 'GENFEEDAI_API_PUBLIC_URL');
50
+ const auth = origin(input.BETTER_AUTH_URL || api, 'BETTER_AUTH_URL');
51
+ const trusted = (input.BETTER_AUTH_TRUSTED_ORIGINS || app)
52
+ .split(',')
53
+ .map((value) => origin(value.trim(), 'BETTER_AUTH_TRUSTED_ORIGINS'));
54
+ if (!isLocal(app) || !isLocal(api)) {
55
+ const publicVariable = !isLocal(app)
56
+ ? 'GENFEEDAI_PUBLIC_URL'
57
+ : 'GENFEEDAI_API_PUBLIC_URL';
58
+ const publicValue = !isLocal(app) ? app : api;
59
+ if (isLocal(auth))
60
+ throw new Error(`${publicVariable}=${publicValue} conflicts with BETTER_AUTH_URL=${auth}. Use the public auth origin.`);
61
+ if (auth !== api)
62
+ throw new Error('BETTER_AUTH_URL must match GENFEEDAI_API_PUBLIC_URL.');
63
+ if (trusted.some(isLocal) || !trusted.includes(app))
64
+ throw new Error(`${publicVariable}=${publicValue} conflicts with BETTER_AUTH_TRUSTED_ORIGINS=${trusted.join(',')}. Include the public app origin and remove localhost.`);
65
+ if (isLocal(app) || isLocal(api))
66
+ throw new Error('GENFEEDAI_PUBLIC_URL and GENFEEDAI_API_PUBLIC_URL must both use public origins for a domain install.');
67
+ }
68
+ return {
69
+ SELFHOSTED_DOMAIN: publicOrigin,
70
+ GENFEEDAI_PUBLIC_URL: app,
71
+ GENFEEDAI_API_PUBLIC_URL: api,
72
+ GENFEEDAI_MCP_PUBLIC_URL: origin(input.GENFEEDAI_MCP_PUBLIC_URL ||
73
+ (!isLocal(app)
74
+ ? `${app}/mcp`
75
+ : `http://localhost:${input.SELFHOSTED_MCP_PORT || '3014'}/mcp`), 'GENFEEDAI_MCP_PUBLIC_URL', true),
76
+ BETTER_AUTH_URL: auth,
77
+ BETTER_AUTH_TRUSTED_ORIGINS: trusted.join(','),
78
+ };
79
+ }
80
+ if (process.argv[1] &&
81
+ import.meta.url === pathToFileURL(process.argv[1]).href) {
82
+ try {
83
+ const environment = resolveSetupEnvironment(process.env);
84
+ for (const [name, value] of Object.entries(environment)) {
85
+ process.stdout.write(`export ${name}='${value.replaceAll("'", "'\\''")}'\n`);
86
+ }
87
+ }
88
+ catch (error) {
89
+ process.stderr.write(`[entrypoint] FATAL: ${error instanceof Error ? error.message : 'Invalid self-hosted configuration'}\n`);
90
+ process.exitCode = 1;
91
+ }
92
+ }
93
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function configureEnvironment(template: string, yes?: boolean): Promise<{
2
+ content: string;
3
+ appUrl: string;
4
+ }>;
package/dist/wizard.js ADDED
@@ -0,0 +1,61 @@
1
+ import { randomBytes } from 'node:crypto';
2
+ import { createInterface } from 'node:readline/promises';
3
+ import { Writable } from 'node:stream';
4
+ import { resolveSetupEnvironment } from './setup.js';
5
+ async function ask(question, secret = false) {
6
+ process.stdout.write(question);
7
+ const output = secret
8
+ ? new Writable({
9
+ write(_chunk, _encoding, done) {
10
+ done();
11
+ },
12
+ })
13
+ : process.stdout;
14
+ const reader = createInterface({
15
+ input: process.stdin,
16
+ output,
17
+ terminal: true,
18
+ });
19
+ const cancellation = new AbortController();
20
+ reader.once('SIGINT', () => cancellation.abort());
21
+ try {
22
+ return await reader.question('', { signal: cancellation.signal });
23
+ }
24
+ finally {
25
+ reader.close();
26
+ if (secret)
27
+ process.stdout.write('\n');
28
+ }
29
+ }
30
+ export async function configureEnvironment(template, yes = false) {
31
+ const input = { ...process.env };
32
+ if (!yes && process.stdin.isTTY) {
33
+ input.OPENROUTER_API_KEY ||= await ask('OpenRouter API key (hidden): ', true);
34
+ if (input.SELFHOSTED_DOMAIN === undefined)
35
+ input.SELFHOSTED_DOMAIN = await ask('Domain you own (blank for localhost): ');
36
+ }
37
+ else if (!yes) {
38
+ throw new Error('Non-interactive installation requires --yes and OPENROUTER_API_KEY; SELFHOSTED_DOMAIN is optional.');
39
+ }
40
+ const resolved = resolveSetupEnvironment(input);
41
+ const environment = {
42
+ ...resolved,
43
+ OPENROUTER_API_KEY: input.OPENROUTER_API_KEY?.trim() ?? '',
44
+ BETTER_AUTH_SECRET: randomBytes(48).toString('hex'),
45
+ TOKEN_ENCRYPTION_KEY: randomBytes(16).toString('hex'),
46
+ SELFHOSTED_APP_PORT: input.SELFHOSTED_APP_PORT || '3000',
47
+ SELFHOSTED_API_PORT: input.SELFHOSTED_API_PORT || '3010',
48
+ SELFHOSTED_MCP_PORT: input.SELFHOSTED_MCP_PORT || '3014',
49
+ };
50
+ const names = new Set(Object.keys(environment));
51
+ const retained = template
52
+ .split('\n')
53
+ .filter((line) => !names.has(line.split('=')[0]))
54
+ .join('\n');
55
+ const lines = Object.entries(environment).map(([name, value]) => `${name}='${value.replaceAll("'", "'\\''")}'`);
56
+ return {
57
+ content: `${retained.trimEnd()}\n${lines.join('\n')}\n`,
58
+ appUrl: resolved.GENFEEDAI_PUBLIC_URL,
59
+ };
60
+ }
61
+ //# sourceMappingURL=wizard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wizard.js","sourceRoot":"","sources":["../src/wizard.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -13,7 +13,7 @@
13
13
  "devDependencies": {
14
14
  "@types/node": "24.13.3",
15
15
  "@typescript/native": "npm:typescript@7.0.2",
16
- "vitest": "4.1.10"
16
+ "vitest": "5.0.5"
17
17
  },
18
18
  "files": [
19
19
  "dist"
@@ -46,5 +46,5 @@
46
46
  "check": "tsc --noEmit -p tsconfig.json",
47
47
  "test": "vitest run"
48
48
  },
49
- "version": "0.2.0"
49
+ "version": "0.3.0"
50
50
  }