@alfe.ai/config 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -16,10 +16,10 @@ interface AlfeConfig {
16
16
  */
17
17
  declare function getEndpointFromToken(token: string): string;
18
18
  /**
19
- * Derive the ai-proxy URL from a token's prefix.
20
- * Used by the local ai-proxy to know where to forward requests.
19
+ * Derive the AI service URL from a token's prefix.
20
+ * Used by the local AI proxy to know where to forward requests.
21
21
  */
22
- declare function getAiProxyUrlFromToken(token: string): string;
22
+ declare function getAiServiceUrlFromToken(token: string): string;
23
23
  /**
24
24
  * Check if ~/.alfe/config.toml exists.
25
25
  */
@@ -43,5 +43,5 @@ declare function writeRuntimeConfig(name: string, runtimeConfig: {
43
43
  }): Promise<void>;
44
44
  //# sourceMappingURL=index.d.ts.map
45
45
  //#endregion
46
- export { AlfeConfig, configExists, getAiProxyUrlFromToken, getEndpointFromToken, readConfig, writeConfig, writeRuntimeConfig };
46
+ export { AlfeConfig, configExists, getAiServiceUrlFromToken, getEndpointFromToken, readConfig, writeConfig, writeRuntimeConfig };
47
47
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/index.ts"],"mappings":";;AAaA;AA2BA;AAaA;AAYA;AAQA;AAAgC,UA5Df,UAAA,CA4De;SAAY,EAAA,MAAA;SAAR,CAAA,EAAA,MAAA;EAAO,WAAA,CAAA,EAAA,MAAA;AA2B3C;;;;;AAmBsB,iBA/EN,oBAAA,CAkFN,KAAA,EAAA,MAAA,CAAA,EAAA,MAAA;;;;;iBArEM,sBAAA;;;;iBAYA,YAAA,CAAA;;;;;iBAQM,UAAA,CAAA,GAAc,QAAQ;;;;;iBA2BtB,WAAA,SAAoB,aAAa;;;;;iBAmBjC,kBAAA;;IAGnB"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/index.ts"],"mappings":";;AAaA;AA2BA;AAaA;AAYA;AAQA;AAAgC,UA5Df,UAAA,CA4De;SAAY,EAAA,MAAA;SAAR,CAAA,EAAA,MAAA;EAAO,WAAA,CAAA,EAAA,MAAA;AA2B3C;;;;;AAmBsB,iBA/EN,oBAAA,CAkFN,KAAA,EAAA,MAAA,CAAA,EAAA,MAAA;;;;;iBArEM,wBAAA;;;;iBAYA,YAAA,CAAA;;;;;iBAQM,UAAA,CAAA,GAAc,QAAQ;;;;;iBA2BtB,WAAA,SAAoB,aAAa;;;;;iBAmBjC,kBAAA;;IAGnB"}
package/dist/index.js CHANGED
@@ -17,7 +17,7 @@ const TOKEN_PREFIX_MAP = {
17
17
  "alfe_test_": "https://api.test.alfe.ai",
18
18
  "alfe_live_": "https://api.alfe.ai"
19
19
  };
20
- const AI_PROXY_PREFIX_MAP = {
20
+ const AI_SERVICE_PREFIX_MAP = {
21
21
  "alfe_dev_": "https://ai.dev.alfe.ai",
22
22
  "alfe_test_": "https://ai.test.alfe.ai",
23
23
  "alfe_live_": "https://ai.alfe.ai"
@@ -31,11 +31,11 @@ function getEndpointFromToken(token) {
31
31
  throw new Error(`Unknown token prefix — expected alfe_dev_, alfe_test_, or alfe_live_`);
32
32
  }
33
33
  /**
34
- * Derive the ai-proxy URL from a token's prefix.
35
- * Used by the local ai-proxy to know where to forward requests.
34
+ * Derive the AI service URL from a token's prefix.
35
+ * Used by the local AI proxy to know where to forward requests.
36
36
  */
37
- function getAiProxyUrlFromToken(token) {
38
- for (const [prefix, url] of Object.entries(AI_PROXY_PREFIX_MAP)) if (token.startsWith(prefix)) return url;
37
+ function getAiServiceUrlFromToken(token) {
38
+ for (const [prefix, url] of Object.entries(AI_SERVICE_PREFIX_MAP)) if (token.startsWith(prefix)) return url;
39
39
  throw new Error(`Unknown token prefix — expected alfe_dev_, alfe_test_, or alfe_live_`);
40
40
  }
41
41
  /**
@@ -82,6 +82,6 @@ async function writeRuntimeConfig(name, runtimeConfig) {
82
82
  await writeFile(CONFIG_PATH, stringify(existing) + "\n", "utf-8");
83
83
  }
84
84
  //#endregion
85
- export { configExists, getAiProxyUrlFromToken, getEndpointFromToken, readConfig, writeConfig, writeRuntimeConfig };
85
+ export { configExists, getAiServiceUrlFromToken, getEndpointFromToken, readConfig, writeConfig, writeRuntimeConfig };
86
86
 
87
87
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["/**\n * @alfe.ai/config — read/write ~/.alfe/config.toml\n *\n * Shared across CLI, gateway, and other services so all can\n * resolve the user's API key without circular dependencies.\n */\n\nimport { readFile, writeFile, mkdir } from \"node:fs/promises\";\nimport { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport { parse, stringify } from \"smol-toml\";\n\nexport interface AlfeConfig {\n api_key: string;\n gateway?: string;\n gateway_url?: string;\n}\n\nconst ALFE_DIR = join(homedir(), \".alfe\");\nconst CONFIG_PATH = join(ALFE_DIR, \"config.toml\");\n\n// ── Token-based endpoint derivation ─────────────────────────\n\nconst TOKEN_PREFIX_MAP: Record<string, string> = {\n 'alfe_dev_': 'https://api.dev.alfe.ai',\n 'alfe_test_': 'https://api.test.alfe.ai',\n 'alfe_live_': 'https://api.alfe.ai',\n};\n\nconst AI_PROXY_PREFIX_MAP: Record<string, string> = {\n 'alfe_dev_': 'https://ai.dev.alfe.ai',\n 'alfe_test_': 'https://ai.test.alfe.ai',\n 'alfe_live_': 'https://ai.alfe.ai',\n};\n\n/**\n * Derive the API endpoint URL from a token's prefix.\n * Throws if the token doesn't match any known prefix.\n */\nexport function getEndpointFromToken(token: string): string {\n for (const [prefix, url] of Object.entries(TOKEN_PREFIX_MAP)) {\n if (token.startsWith(prefix)) return url;\n }\n throw new Error(\n `Unknown token prefix — expected alfe_dev_, alfe_test_, or alfe_live_`,\n );\n}\n\n/**\n * Derive the ai-proxy URL from a token's prefix.\n * Used by the local ai-proxy to know where to forward requests.\n */\nexport function getAiProxyUrlFromToken(token: string): string {\n for (const [prefix, url] of Object.entries(AI_PROXY_PREFIX_MAP)) {\n if (token.startsWith(prefix)) return url;\n }\n throw new Error(\n `Unknown token prefix — expected alfe_dev_, alfe_test_, or alfe_live_`,\n );\n}\n\n/**\n * Check if ~/.alfe/config.toml exists.\n */\nexport function configExists(): boolean {\n return existsSync(CONFIG_PATH);\n}\n\n/**\n * Read the Alfe config from ~/.alfe/config.toml.\n * Throws if the file doesn't exist or is malformed.\n */\nexport async function readConfig(): Promise<AlfeConfig> {\n if (!configExists()) {\n throw new Error(\n \"Config not found. Run `alfe login` to set up your API key.\",\n );\n }\n\n const raw = await readFile(CONFIG_PATH, \"utf-8\");\n const parsed = parse(raw);\n\n if (typeof parsed.api_key !== \"string\" || !parsed.api_key) {\n throw new Error(\n \"Invalid config: missing api_key. Run `alfe login` to reconfigure.\",\n );\n }\n\n return {\n api_key: parsed.api_key,\n gateway: parsed.gateway as string | undefined,\n gateway_url: parsed.gateway_url as string | undefined,\n };\n}\n\n/**\n * Write the Alfe config to ~/.alfe/config.toml.\n * Creates the ~/.alfe directory if it doesn't exist.\n */\nexport async function writeConfig(config: AlfeConfig): Promise<void> {\n await mkdir(ALFE_DIR, { recursive: true });\n\n const data: Record<string, string> = {\n api_key: config.api_key,\n };\n\n if (config.gateway) {\n data.gateway = config.gateway;\n }\n\n const toml = stringify(data);\n await writeFile(CONFIG_PATH, toml + \"\\n\", \"utf-8\");\n}\n\n/**\n * Add or update a [runtimes.<name>] section in ~/.alfe/config.toml.\n * Preserves existing config values and only merges the runtime section.\n */\nexport async function writeRuntimeConfig(\n name: string,\n runtimeConfig: { workspace: string },\n): Promise<void> {\n await mkdir(ALFE_DIR, { recursive: true });\n\n let existing: Record<string, unknown> = {};\n if (existsSync(CONFIG_PATH)) {\n const raw = await readFile(CONFIG_PATH, \"utf-8\");\n existing = parse(raw) as Record<string, unknown>;\n }\n\n const runtimes = (existing.runtimes ?? {}) as Record<\n string,\n Record<string, unknown>\n >;\n runtimes[name] = { workspace: runtimeConfig.workspace };\n existing.runtimes = runtimes;\n\n const toml = stringify(existing);\n await writeFile(CONFIG_PATH, toml + \"\\n\", \"utf-8\");\n}\n"],"mappings":";;;;;;;;;;;;AAmBA,MAAM,WAAW,KAAK,SAAS,EAAE,QAAQ;AACzC,MAAM,cAAc,KAAK,UAAU,cAAc;AAIjD,MAAM,mBAA2C;CAC/C,aAAc;CACd,cAAc;CACd,cAAc;CACf;AAED,MAAM,sBAA8C;CAClD,aAAc;CACd,cAAc;CACd,cAAc;CACf;;;;;AAMD,SAAgB,qBAAqB,OAAuB;AAC1D,MAAK,MAAM,CAAC,QAAQ,QAAQ,OAAO,QAAQ,iBAAiB,CAC1D,KAAI,MAAM,WAAW,OAAO,CAAE,QAAO;AAEvC,OAAM,IAAI,MACR,uEACD;;;;;;AAOH,SAAgB,uBAAuB,OAAuB;AAC5D,MAAK,MAAM,CAAC,QAAQ,QAAQ,OAAO,QAAQ,oBAAoB,CAC7D,KAAI,MAAM,WAAW,OAAO,CAAE,QAAO;AAEvC,OAAM,IAAI,MACR,uEACD;;;;;AAMH,SAAgB,eAAwB;AACtC,QAAO,WAAW,YAAY;;;;;;AAOhC,eAAsB,aAAkC;AACtD,KAAI,CAAC,cAAc,CACjB,OAAM,IAAI,MACR,6DACD;CAIH,MAAM,SAAS,MADH,MAAM,SAAS,aAAa,QAAQ,CACvB;AAEzB,KAAI,OAAO,OAAO,YAAY,YAAY,CAAC,OAAO,QAChD,OAAM,IAAI,MACR,oEACD;AAGH,QAAO;EACL,SAAS,OAAO;EAChB,SAAS,OAAO;EAChB,aAAa,OAAO;EACrB;;;;;;AAOH,eAAsB,YAAY,QAAmC;AACnE,OAAM,MAAM,UAAU,EAAE,WAAW,MAAM,CAAC;CAE1C,MAAM,OAA+B,EACnC,SAAS,OAAO,SACjB;AAED,KAAI,OAAO,QACT,MAAK,UAAU,OAAO;AAIxB,OAAM,UAAU,aADH,UAAU,KAAK,GACQ,MAAM,QAAQ;;;;;;AAOpD,eAAsB,mBACpB,MACA,eACe;AACf,OAAM,MAAM,UAAU,EAAE,WAAW,MAAM,CAAC;CAE1C,IAAI,WAAoC,EAAE;AAC1C,KAAI,WAAW,YAAY,CAEzB,YAAW,MADC,MAAM,SAAS,aAAa,QAAQ,CAC3B;CAGvB,MAAM,WAAY,SAAS,YAAY,EAAE;AAIzC,UAAS,QAAQ,EAAE,WAAW,cAAc,WAAW;AACvD,UAAS,WAAW;AAGpB,OAAM,UAAU,aADH,UAAU,SAAS,GACI,MAAM,QAAQ"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["/**\n * @alfe.ai/config — read/write ~/.alfe/config.toml\n *\n * Shared across CLI, gateway, and other services so all can\n * resolve the user's API key without circular dependencies.\n */\n\nimport { readFile, writeFile, mkdir } from \"node:fs/promises\";\nimport { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport { parse, stringify } from \"smol-toml\";\n\nexport interface AlfeConfig {\n api_key: string;\n gateway?: string;\n gateway_url?: string;\n}\n\nconst ALFE_DIR = join(homedir(), \".alfe\");\nconst CONFIG_PATH = join(ALFE_DIR, \"config.toml\");\n\n// ── Token-based endpoint derivation ─────────────────────────\n\nconst TOKEN_PREFIX_MAP: Record<string, string> = {\n 'alfe_dev_': 'https://api.dev.alfe.ai',\n 'alfe_test_': 'https://api.test.alfe.ai',\n 'alfe_live_': 'https://api.alfe.ai',\n};\n\nconst AI_SERVICE_PREFIX_MAP: Record<string, string> = {\n 'alfe_dev_': 'https://ai.dev.alfe.ai',\n 'alfe_test_': 'https://ai.test.alfe.ai',\n 'alfe_live_': 'https://ai.alfe.ai',\n};\n\n/**\n * Derive the API endpoint URL from a token's prefix.\n * Throws if the token doesn't match any known prefix.\n */\nexport function getEndpointFromToken(token: string): string {\n for (const [prefix, url] of Object.entries(TOKEN_PREFIX_MAP)) {\n if (token.startsWith(prefix)) return url;\n }\n throw new Error(\n `Unknown token prefix — expected alfe_dev_, alfe_test_, or alfe_live_`,\n );\n}\n\n/**\n * Derive the AI service URL from a token's prefix.\n * Used by the local AI proxy to know where to forward requests.\n */\nexport function getAiServiceUrlFromToken(token: string): string {\n for (const [prefix, url] of Object.entries(AI_SERVICE_PREFIX_MAP)) {\n if (token.startsWith(prefix)) return url;\n }\n throw new Error(\n `Unknown token prefix — expected alfe_dev_, alfe_test_, or alfe_live_`,\n );\n}\n\n/**\n * Check if ~/.alfe/config.toml exists.\n */\nexport function configExists(): boolean {\n return existsSync(CONFIG_PATH);\n}\n\n/**\n * Read the Alfe config from ~/.alfe/config.toml.\n * Throws if the file doesn't exist or is malformed.\n */\nexport async function readConfig(): Promise<AlfeConfig> {\n if (!configExists()) {\n throw new Error(\n \"Config not found. Run `alfe login` to set up your API key.\",\n );\n }\n\n const raw = await readFile(CONFIG_PATH, \"utf-8\");\n const parsed = parse(raw);\n\n if (typeof parsed.api_key !== \"string\" || !parsed.api_key) {\n throw new Error(\n \"Invalid config: missing api_key. Run `alfe login` to reconfigure.\",\n );\n }\n\n return {\n api_key: parsed.api_key,\n gateway: parsed.gateway as string | undefined,\n gateway_url: parsed.gateway_url as string | undefined,\n };\n}\n\n/**\n * Write the Alfe config to ~/.alfe/config.toml.\n * Creates the ~/.alfe directory if it doesn't exist.\n */\nexport async function writeConfig(config: AlfeConfig): Promise<void> {\n await mkdir(ALFE_DIR, { recursive: true });\n\n const data: Record<string, string> = {\n api_key: config.api_key,\n };\n\n if (config.gateway) {\n data.gateway = config.gateway;\n }\n\n const toml = stringify(data);\n await writeFile(CONFIG_PATH, toml + \"\\n\", \"utf-8\");\n}\n\n/**\n * Add or update a [runtimes.<name>] section in ~/.alfe/config.toml.\n * Preserves existing config values and only merges the runtime section.\n */\nexport async function writeRuntimeConfig(\n name: string,\n runtimeConfig: { workspace: string },\n): Promise<void> {\n await mkdir(ALFE_DIR, { recursive: true });\n\n let existing: Record<string, unknown> = {};\n if (existsSync(CONFIG_PATH)) {\n const raw = await readFile(CONFIG_PATH, \"utf-8\");\n existing = parse(raw) as Record<string, unknown>;\n }\n\n const runtimes = (existing.runtimes ?? {}) as Record<\n string,\n Record<string, unknown>\n >;\n runtimes[name] = { workspace: runtimeConfig.workspace };\n existing.runtimes = runtimes;\n\n const toml = stringify(existing);\n await writeFile(CONFIG_PATH, toml + \"\\n\", \"utf-8\");\n}\n"],"mappings":";;;;;;;;;;;;AAmBA,MAAM,WAAW,KAAK,SAAS,EAAE,QAAQ;AACzC,MAAM,cAAc,KAAK,UAAU,cAAc;AAIjD,MAAM,mBAA2C;CAC/C,aAAc;CACd,cAAc;CACd,cAAc;CACf;AAED,MAAM,wBAAgD;CACpD,aAAc;CACd,cAAc;CACd,cAAc;CACf;;;;;AAMD,SAAgB,qBAAqB,OAAuB;AAC1D,MAAK,MAAM,CAAC,QAAQ,QAAQ,OAAO,QAAQ,iBAAiB,CAC1D,KAAI,MAAM,WAAW,OAAO,CAAE,QAAO;AAEvC,OAAM,IAAI,MACR,uEACD;;;;;;AAOH,SAAgB,yBAAyB,OAAuB;AAC9D,MAAK,MAAM,CAAC,QAAQ,QAAQ,OAAO,QAAQ,sBAAsB,CAC/D,KAAI,MAAM,WAAW,OAAO,CAAE,QAAO;AAEvC,OAAM,IAAI,MACR,uEACD;;;;;AAMH,SAAgB,eAAwB;AACtC,QAAO,WAAW,YAAY;;;;;;AAOhC,eAAsB,aAAkC;AACtD,KAAI,CAAC,cAAc,CACjB,OAAM,IAAI,MACR,6DACD;CAIH,MAAM,SAAS,MADH,MAAM,SAAS,aAAa,QAAQ,CACvB;AAEzB,KAAI,OAAO,OAAO,YAAY,YAAY,CAAC,OAAO,QAChD,OAAM,IAAI,MACR,oEACD;AAGH,QAAO;EACL,SAAS,OAAO;EAChB,SAAS,OAAO;EAChB,aAAa,OAAO;EACrB;;;;;;AAOH,eAAsB,YAAY,QAAmC;AACnE,OAAM,MAAM,UAAU,EAAE,WAAW,MAAM,CAAC;CAE1C,MAAM,OAA+B,EACnC,SAAS,OAAO,SACjB;AAED,KAAI,OAAO,QACT,MAAK,UAAU,OAAO;AAIxB,OAAM,UAAU,aADH,UAAU,KAAK,GACQ,MAAM,QAAQ;;;;;;AAOpD,eAAsB,mBACpB,MACA,eACe;AACf,OAAM,MAAM,UAAU,EAAE,WAAW,MAAM,CAAC;CAE1C,IAAI,WAAoC,EAAE;AAC1C,KAAI,WAAW,YAAY,CAEzB,YAAW,MADC,MAAM,SAAS,aAAa,QAAQ,CAC3B;CAGvB,MAAM,WAAY,SAAS,YAAY,EAAE;AAIzC,UAAS,QAAQ,EAAE,WAAW,cAAc,WAAW;AACvD,UAAS,WAAW;AAGpB,OAAM,UAAU,aADH,UAAU,SAAS,GACI,MAAM,QAAQ"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alfe.ai/config",
3
- "version": "0.0.1",
3
+ "version": "0.0.2",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",