@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 +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -6
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
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
|
|
20
|
-
* Used by the local
|
|
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
|
|
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,
|
|
46
|
+
export { AlfeConfig, configExists, getAiServiceUrlFromToken, getEndpointFromToken, readConfig, writeConfig, writeRuntimeConfig };
|
|
47
47
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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,
|
|
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
|
|
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
|
|
35
|
-
* Used by the local
|
|
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
|
|
38
|
-
for (const [prefix, url] of Object.entries(
|
|
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,
|
|
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
|
|
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"}
|