@eminent337/aery-ai 0.67.76 → 0.67.78

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 (182) hide show
  1. package/README.md +0 -0
  2. package/package.json +110 -110
  3. package/dist/api-registry.d.ts +0 -20
  4. package/dist/api-registry.d.ts.map +0 -1
  5. package/dist/api-registry.js +0 -44
  6. package/dist/api-registry.js.map +0 -1
  7. package/dist/bedrock-provider.d.ts +0 -5
  8. package/dist/bedrock-provider.d.ts.map +0 -1
  9. package/dist/bedrock-provider.js +0 -6
  10. package/dist/bedrock-provider.js.map +0 -1
  11. package/dist/cli.d.ts +0 -3
  12. package/dist/cli.d.ts.map +0 -1
  13. package/dist/cli.js +0 -116
  14. package/dist/cli.js.map +0 -1
  15. package/dist/env-api-keys.d.ts +0 -18
  16. package/dist/env-api-keys.d.ts.map +0 -1
  17. package/dist/env-api-keys.js +0 -162
  18. package/dist/env-api-keys.js.map +0 -1
  19. package/dist/index.d.ts +0 -26
  20. package/dist/index.d.ts.map +0 -1
  21. package/dist/index.js +0 -14
  22. package/dist/index.js.map +0 -1
  23. package/dist/models.d.ts +0 -25
  24. package/dist/models.d.ts.map +0 -1
  25. package/dist/models.generated.d.ts +0 -15860
  26. package/dist/models.generated.d.ts.map +0 -1
  27. package/dist/models.generated.js +0 -15589
  28. package/dist/models.generated.js.map +0 -1
  29. package/dist/models.js +0 -63
  30. package/dist/models.js.map +0 -1
  31. package/dist/oauth.d.ts +0 -2
  32. package/dist/oauth.d.ts.map +0 -1
  33. package/dist/oauth.js +0 -2
  34. package/dist/oauth.js.map +0 -1
  35. package/dist/providers/amazon-bedrock.d.ts +0 -38
  36. package/dist/providers/amazon-bedrock.d.ts.map +0 -1
  37. package/dist/providers/amazon-bedrock.js +0 -759
  38. package/dist/providers/amazon-bedrock.js.map +0 -1
  39. package/dist/providers/anthropic.d.ts +0 -54
  40. package/dist/providers/anthropic.d.ts.map +0 -1
  41. package/dist/providers/anthropic.js +0 -931
  42. package/dist/providers/anthropic.js.map +0 -1
  43. package/dist/providers/azure-openai-responses.d.ts +0 -15
  44. package/dist/providers/azure-openai-responses.d.ts.map +0 -1
  45. package/dist/providers/azure-openai-responses.js +0 -202
  46. package/dist/providers/azure-openai-responses.js.map +0 -1
  47. package/dist/providers/cloudflare.d.ts +0 -7
  48. package/dist/providers/cloudflare.d.ts.map +0 -1
  49. package/dist/providers/cloudflare.js +0 -19
  50. package/dist/providers/cloudflare.js.map +0 -1
  51. package/dist/providers/faux.d.ts +0 -56
  52. package/dist/providers/faux.d.ts.map +0 -1
  53. package/dist/providers/faux.js +0 -368
  54. package/dist/providers/faux.js.map +0 -1
  55. package/dist/providers/github-copilot-headers.d.ts +0 -8
  56. package/dist/providers/github-copilot-headers.d.ts.map +0 -1
  57. package/dist/providers/github-copilot-headers.js +0 -29
  58. package/dist/providers/github-copilot-headers.js.map +0 -1
  59. package/dist/providers/google-gemini-cli.d.ts +0 -74
  60. package/dist/providers/google-gemini-cli.d.ts.map +0 -1
  61. package/dist/providers/google-gemini-cli.js +0 -779
  62. package/dist/providers/google-gemini-cli.js.map +0 -1
  63. package/dist/providers/google-shared.d.ts +0 -65
  64. package/dist/providers/google-shared.d.ts.map +0 -1
  65. package/dist/providers/google-shared.js +0 -338
  66. package/dist/providers/google-shared.js.map +0 -1
  67. package/dist/providers/google-vertex.d.ts +0 -15
  68. package/dist/providers/google-vertex.d.ts.map +0 -1
  69. package/dist/providers/google-vertex.js +0 -441
  70. package/dist/providers/google-vertex.js.map +0 -1
  71. package/dist/providers/google.d.ts +0 -13
  72. package/dist/providers/google.d.ts.map +0 -1
  73. package/dist/providers/google.js +0 -399
  74. package/dist/providers/google.js.map +0 -1
  75. package/dist/providers/mistral.d.ts +0 -25
  76. package/dist/providers/mistral.d.ts.map +0 -1
  77. package/dist/providers/mistral.js +0 -534
  78. package/dist/providers/mistral.js.map +0 -1
  79. package/dist/providers/openai-codex-responses.d.ts +0 -11
  80. package/dist/providers/openai-codex-responses.d.ts.map +0 -1
  81. package/dist/providers/openai-codex-responses.js +0 -779
  82. package/dist/providers/openai-codex-responses.js.map +0 -1
  83. package/dist/providers/openai-completions.d.ts +0 -19
  84. package/dist/providers/openai-completions.d.ts.map +0 -1
  85. package/dist/providers/openai-completions.js +0 -909
  86. package/dist/providers/openai-completions.js.map +0 -1
  87. package/dist/providers/openai-responses-shared.d.ts +0 -18
  88. package/dist/providers/openai-responses-shared.d.ts.map +0 -1
  89. package/dist/providers/openai-responses-shared.js +0 -479
  90. package/dist/providers/openai-responses-shared.js.map +0 -1
  91. package/dist/providers/openai-responses.d.ts +0 -13
  92. package/dist/providers/openai-responses.d.ts.map +0 -1
  93. package/dist/providers/openai-responses.js +0 -206
  94. package/dist/providers/openai-responses.js.map +0 -1
  95. package/dist/providers/register-builtins.d.ts +0 -38
  96. package/dist/providers/register-builtins.d.ts.map +0 -1
  97. package/dist/providers/register-builtins.js +0 -261
  98. package/dist/providers/register-builtins.js.map +0 -1
  99. package/dist/providers/simple-options.d.ts +0 -8
  100. package/dist/providers/simple-options.d.ts.map +0 -1
  101. package/dist/providers/simple-options.js +0 -38
  102. package/dist/providers/simple-options.js.map +0 -1
  103. package/dist/providers/transform-messages.d.ts +0 -8
  104. package/dist/providers/transform-messages.d.ts.map +0 -1
  105. package/dist/providers/transform-messages.js +0 -184
  106. package/dist/providers/transform-messages.js.map +0 -1
  107. package/dist/stream.d.ts +0 -8
  108. package/dist/stream.d.ts.map +0 -1
  109. package/dist/stream.js +0 -27
  110. package/dist/stream.js.map +0 -1
  111. package/dist/types.d.ts +0 -397
  112. package/dist/types.d.ts.map +0 -1
  113. package/dist/types.js +0 -2
  114. package/dist/types.js.map +0 -1
  115. package/dist/utils/event-stream.d.ts +0 -21
  116. package/dist/utils/event-stream.d.ts.map +0 -1
  117. package/dist/utils/event-stream.js +0 -81
  118. package/dist/utils/event-stream.js.map +0 -1
  119. package/dist/utils/hash.d.ts +0 -3
  120. package/dist/utils/hash.d.ts.map +0 -1
  121. package/dist/utils/hash.js +0 -14
  122. package/dist/utils/hash.js.map +0 -1
  123. package/dist/utils/headers.d.ts +0 -2
  124. package/dist/utils/headers.d.ts.map +0 -1
  125. package/dist/utils/headers.js +0 -8
  126. package/dist/utils/headers.js.map +0 -1
  127. package/dist/utils/json-parse.d.ts +0 -16
  128. package/dist/utils/json-parse.d.ts.map +0 -1
  129. package/dist/utils/json-parse.js +0 -113
  130. package/dist/utils/json-parse.js.map +0 -1
  131. package/dist/utils/oauth/anthropic.d.ts +0 -25
  132. package/dist/utils/oauth/anthropic.d.ts.map +0 -1
  133. package/dist/utils/oauth/anthropic.js +0 -335
  134. package/dist/utils/oauth/anthropic.js.map +0 -1
  135. package/dist/utils/oauth/github-copilot.d.ts +0 -30
  136. package/dist/utils/oauth/github-copilot.d.ts.map +0 -1
  137. package/dist/utils/oauth/github-copilot.js +0 -292
  138. package/dist/utils/oauth/github-copilot.js.map +0 -1
  139. package/dist/utils/oauth/google-antigravity.d.ts +0 -26
  140. package/dist/utils/oauth/google-antigravity.d.ts.map +0 -1
  141. package/dist/utils/oauth/google-antigravity.js +0 -377
  142. package/dist/utils/oauth/google-antigravity.js.map +0 -1
  143. package/dist/utils/oauth/google-gemini-cli.d.ts +0 -26
  144. package/dist/utils/oauth/google-gemini-cli.d.ts.map +0 -1
  145. package/dist/utils/oauth/google-gemini-cli.js +0 -482
  146. package/dist/utils/oauth/google-gemini-cli.js.map +0 -1
  147. package/dist/utils/oauth/index.d.ts +0 -61
  148. package/dist/utils/oauth/index.d.ts.map +0 -1
  149. package/dist/utils/oauth/index.js +0 -131
  150. package/dist/utils/oauth/index.js.map +0 -1
  151. package/dist/utils/oauth/oauth-page.d.ts +0 -3
  152. package/dist/utils/oauth/oauth-page.d.ts.map +0 -1
  153. package/dist/utils/oauth/oauth-page.js +0 -105
  154. package/dist/utils/oauth/oauth-page.js.map +0 -1
  155. package/dist/utils/oauth/openai-codex.d.ts +0 -34
  156. package/dist/utils/oauth/openai-codex.d.ts.map +0 -1
  157. package/dist/utils/oauth/openai-codex.js +0 -374
  158. package/dist/utils/oauth/openai-codex.js.map +0 -1
  159. package/dist/utils/oauth/pkce.d.ts +0 -13
  160. package/dist/utils/oauth/pkce.d.ts.map +0 -1
  161. package/dist/utils/oauth/pkce.js +0 -31
  162. package/dist/utils/oauth/pkce.js.map +0 -1
  163. package/dist/utils/oauth/types.d.ts +0 -47
  164. package/dist/utils/oauth/types.d.ts.map +0 -1
  165. package/dist/utils/oauth/types.js +0 -2
  166. package/dist/utils/oauth/types.js.map +0 -1
  167. package/dist/utils/overflow.d.ts +0 -53
  168. package/dist/utils/overflow.d.ts.map +0 -1
  169. package/dist/utils/overflow.js +0 -132
  170. package/dist/utils/overflow.js.map +0 -1
  171. package/dist/utils/sanitize-unicode.d.ts +0 -22
  172. package/dist/utils/sanitize-unicode.d.ts.map +0 -1
  173. package/dist/utils/sanitize-unicode.js +0 -26
  174. package/dist/utils/sanitize-unicode.js.map +0 -1
  175. package/dist/utils/typebox-helpers.d.ts +0 -17
  176. package/dist/utils/typebox-helpers.d.ts.map +0 -1
  177. package/dist/utils/typebox-helpers.js +0 -21
  178. package/dist/utils/typebox-helpers.js.map +0 -1
  179. package/dist/utils/validation.d.ts +0 -18
  180. package/dist/utils/validation.d.ts.map +0 -1
  181. package/dist/utils/validation.js +0 -281
  182. package/dist/utils/validation.js.map +0 -1
package/README.md CHANGED
File without changes
package/package.json CHANGED
@@ -1,112 +1,112 @@
1
1
  {
2
- "name": "@eminent337/aery-ai",
3
- "version": "0.67.76",
4
- "description": "Aery AI \u2014 unified LLM API with 300+ provider integrations",
5
- "type": "module",
6
- "main": "./dist/index.js",
7
- "types": "./dist/index.d.ts",
8
- "exports": {
9
- ".": {
10
- "types": "./dist/index.d.ts",
11
- "import": "./dist/index.js"
12
- },
13
- "./anthropic": {
14
- "types": "./dist/providers/anthropic.d.ts",
15
- "import": "./dist/providers/anthropic.js"
16
- },
17
- "./azure-openai-responses": {
18
- "types": "./dist/providers/azure-openai-responses.d.ts",
19
- "import": "./dist/providers/azure-openai-responses.js"
20
- },
21
- "./google": {
22
- "types": "./dist/providers/google.d.ts",
23
- "import": "./dist/providers/google.js"
24
- },
25
- "./google-gemini-cli": {
26
- "types": "./dist/providers/google-gemini-cli.d.ts",
27
- "import": "./dist/providers/google-gemini-cli.js"
28
- },
29
- "./google-vertex": {
30
- "types": "./dist/providers/google-vertex.d.ts",
31
- "import": "./dist/providers/google-vertex.js"
32
- },
33
- "./mistral": {
34
- "types": "./dist/providers/mistral.d.ts",
35
- "import": "./dist/providers/mistral.js"
36
- },
37
- "./openai-codex-responses": {
38
- "types": "./dist/providers/openai-codex-responses.d.ts",
39
- "import": "./dist/providers/openai-codex-responses.js"
40
- },
41
- "./openai-completions": {
42
- "types": "./dist/providers/openai-completions.d.ts",
43
- "import": "./dist/providers/openai-completions.js"
44
- },
45
- "./openai-responses": {
46
- "types": "./dist/providers/openai-responses.d.ts",
47
- "import": "./dist/providers/openai-responses.js"
48
- },
49
- "./oauth": {
50
- "types": "./dist/oauth.d.ts",
51
- "import": "./dist/oauth.js"
52
- },
53
- "./bedrock-provider": {
54
- "types": "./dist/bedrock-provider.d.ts",
55
- "import": "./dist/bedrock-provider.js"
56
- }
57
- },
58
- "bin": {
59
- "pi-ai": "./dist/cli.js"
60
- },
61
- "files": [
62
- "dist",
63
- "README.md"
64
- ],
65
- "scripts": {
66
- "clean": "shx rm -rf dist",
67
- "generate-models": "npx tsx scripts/generate-models.ts",
68
- "build": "npm run generate-models && tsgo -p tsconfig.build.json",
69
- "dev": "tsgo -p tsconfig.build.json --watch --preserveWatchOutput",
70
- "dev:tsc": "tsgo -p tsconfig.build.json --watch --preserveWatchOutput",
71
- "test": "vitest --run",
72
- "prepublishOnly": "npm run clean && npm run build"
73
- },
74
- "dependencies": {
75
- "@anthropic-ai/sdk": "^0.90.0",
76
- "@aws-sdk/client-bedrock-runtime": "^3.1030.0",
77
- "@google/genai": "^1.40.0",
78
- "@mistralai/mistralai": "^2.2.0",
79
- "typebox": "^1.1.24",
80
- "chalk": "^5.6.2",
81
- "openai": "6.26.0",
82
- "partial-json": "^0.1.7",
83
- "proxy-agent": "^6.5.0",
84
- "undici": "^7.19.1",
85
- "zod-to-json-schema": "^3.24.6"
86
- },
87
- "keywords": [
88
- "ai",
89
- "llm",
90
- "openai",
91
- "anthropic",
92
- "gemini",
93
- "bedrock",
94
- "unified",
95
- "api"
96
- ],
97
- "author": "Aryee",
98
- "license": "MIT",
99
- "repository": {
100
- "type": "git",
101
- "url": "git+https://github.com/eminent337/aery.git",
102
- "directory": "packages/ai"
103
- },
104
- "engines": {
105
- "node": ">=20.0.0"
106
- },
107
- "devDependencies": {
108
- "@types/node": "^24.3.0",
109
- "canvas": "^3.2.0",
110
- "vitest": "^3.2.4"
111
- }
2
+ "name": "@eminent337/aery-ai",
3
+ "version": "0.67.78",
4
+ "description": "Aery AI unified LLM API with 300+ provider integrations",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ },
13
+ "./anthropic": {
14
+ "types": "./dist/providers/anthropic.d.ts",
15
+ "import": "./dist/providers/anthropic.js"
16
+ },
17
+ "./azure-openai-responses": {
18
+ "types": "./dist/providers/azure-openai-responses.d.ts",
19
+ "import": "./dist/providers/azure-openai-responses.js"
20
+ },
21
+ "./google": {
22
+ "types": "./dist/providers/google.d.ts",
23
+ "import": "./dist/providers/google.js"
24
+ },
25
+ "./google-gemini-cli": {
26
+ "types": "./dist/providers/google-gemini-cli.d.ts",
27
+ "import": "./dist/providers/google-gemini-cli.js"
28
+ },
29
+ "./google-vertex": {
30
+ "types": "./dist/providers/google-vertex.d.ts",
31
+ "import": "./dist/providers/google-vertex.js"
32
+ },
33
+ "./mistral": {
34
+ "types": "./dist/providers/mistral.d.ts",
35
+ "import": "./dist/providers/mistral.js"
36
+ },
37
+ "./openai-codex-responses": {
38
+ "types": "./dist/providers/openai-codex-responses.d.ts",
39
+ "import": "./dist/providers/openai-codex-responses.js"
40
+ },
41
+ "./openai-completions": {
42
+ "types": "./dist/providers/openai-completions.d.ts",
43
+ "import": "./dist/providers/openai-completions.js"
44
+ },
45
+ "./openai-responses": {
46
+ "types": "./dist/providers/openai-responses.d.ts",
47
+ "import": "./dist/providers/openai-responses.js"
48
+ },
49
+ "./oauth": {
50
+ "types": "./dist/oauth.d.ts",
51
+ "import": "./dist/oauth.js"
52
+ },
53
+ "./bedrock-provider": {
54
+ "types": "./dist/bedrock-provider.d.ts",
55
+ "import": "./dist/bedrock-provider.js"
56
+ }
57
+ },
58
+ "bin": {
59
+ "pi-ai": "./dist/cli.js"
60
+ },
61
+ "files": [
62
+ "dist",
63
+ "README.md"
64
+ ],
65
+ "scripts": {
66
+ "clean": "shx rm -rf dist",
67
+ "generate-models": "npx tsx scripts/generate-models.ts",
68
+ "build": "npm run generate-models && tsgo -p tsconfig.build.json",
69
+ "dev": "tsgo -p tsconfig.build.json --watch --preserveWatchOutput",
70
+ "dev:tsc": "tsgo -p tsconfig.build.json --watch --preserveWatchOutput",
71
+ "test": "vitest --run",
72
+ "prepublishOnly": "npm run clean && npm run build"
73
+ },
74
+ "dependencies": {
75
+ "@anthropic-ai/sdk": "^0.90.0",
76
+ "@aws-sdk/client-bedrock-runtime": "^3.1030.0",
77
+ "@google/genai": "^1.40.0",
78
+ "@mistralai/mistralai": "^2.2.0",
79
+ "typebox": "^1.1.24",
80
+ "chalk": "^5.6.2",
81
+ "openai": "6.26.0",
82
+ "partial-json": "^0.1.7",
83
+ "proxy-agent": "^6.5.0",
84
+ "undici": "^7.19.1",
85
+ "zod-to-json-schema": "^3.24.6"
86
+ },
87
+ "keywords": [
88
+ "ai",
89
+ "llm",
90
+ "openai",
91
+ "anthropic",
92
+ "gemini",
93
+ "bedrock",
94
+ "unified",
95
+ "api"
96
+ ],
97
+ "author": "Aryee",
98
+ "license": "MIT",
99
+ "repository": {
100
+ "type": "git",
101
+ "url": "git+https://github.com/eminent337/aery.git",
102
+ "directory": "packages/ai"
103
+ },
104
+ "engines": {
105
+ "node": ">=20.0.0"
106
+ },
107
+ "devDependencies": {
108
+ "@types/node": "^24.3.0",
109
+ "canvas": "^3.2.0",
110
+ "vitest": "^3.2.4"
111
+ }
112
112
  }
@@ -1,20 +0,0 @@
1
- import type { Api, AssistantMessageEventStream, Context, Model, SimpleStreamOptions, StreamFunction, StreamOptions } from "./types.js";
2
- export type ApiStreamFunction = (model: Model<Api>, context: Context, options?: StreamOptions) => AssistantMessageEventStream;
3
- export type ApiStreamSimpleFunction = (model: Model<Api>, context: Context, options?: SimpleStreamOptions) => AssistantMessageEventStream;
4
- export interface ApiProvider<TApi extends Api = Api, TOptions extends StreamOptions = StreamOptions> {
5
- api: TApi;
6
- stream: StreamFunction<TApi, TOptions>;
7
- streamSimple: StreamFunction<TApi, SimpleStreamOptions>;
8
- }
9
- interface ApiProviderInternal {
10
- api: Api;
11
- stream: ApiStreamFunction;
12
- streamSimple: ApiStreamSimpleFunction;
13
- }
14
- export declare function registerApiProvider<TApi extends Api, TOptions extends StreamOptions>(provider: ApiProvider<TApi, TOptions>, sourceId?: string): void;
15
- export declare function getApiProvider(api: Api): ApiProviderInternal | undefined;
16
- export declare function getApiProviders(): ApiProviderInternal[];
17
- export declare function unregisterApiProviders(sourceId: string): void;
18
- export declare function clearApiProviders(): void;
19
- export {};
20
- //# sourceMappingURL=api-registry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"api-registry.d.ts","sourceRoot":"","sources":["../src/api-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,GAAG,EACH,2BAA2B,EAC3B,OAAO,EACP,KAAK,EACL,mBAAmB,EACnB,cAAc,EACd,aAAa,EACb,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,iBAAiB,GAAG,CAC/B,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EACjB,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,aAAa,KACnB,2BAA2B,CAAC;AAEjC,MAAM,MAAM,uBAAuB,GAAG,CACrC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EACjB,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,mBAAmB,KACzB,2BAA2B,CAAC;AAEjC,MAAM,WAAW,WAAW,CAAC,IAAI,SAAS,GAAG,GAAG,GAAG,EAAE,QAAQ,SAAS,aAAa,GAAG,aAAa;IAClG,GAAG,EAAE,IAAI,CAAC;IACV,MAAM,EAAE,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACvC,YAAY,EAAE,cAAc,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;CACxD;AAED,UAAU,mBAAmB;IAC5B,GAAG,EAAE,GAAG,CAAC;IACT,MAAM,EAAE,iBAAiB,CAAC;IAC1B,YAAY,EAAE,uBAAuB,CAAC;CACtC;AAiCD,wBAAgB,mBAAmB,CAAC,IAAI,SAAS,GAAG,EAAE,QAAQ,SAAS,aAAa,EACnF,QAAQ,EAAE,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,EACrC,QAAQ,CAAC,EAAE,MAAM,GACf,IAAI,CASN;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,GAAG,mBAAmB,GAAG,SAAS,CAExE;AAED,wBAAgB,eAAe,IAAI,mBAAmB,EAAE,CAEvD;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAM7D;AAED,wBAAgB,iBAAiB,IAAI,IAAI,CAExC","sourcesContent":["import type {\n\tApi,\n\tAssistantMessageEventStream,\n\tContext,\n\tModel,\n\tSimpleStreamOptions,\n\tStreamFunction,\n\tStreamOptions,\n} from \"./types.js\";\n\nexport type ApiStreamFunction = (\n\tmodel: Model<Api>,\n\tcontext: Context,\n\toptions?: StreamOptions,\n) => AssistantMessageEventStream;\n\nexport type ApiStreamSimpleFunction = (\n\tmodel: Model<Api>,\n\tcontext: Context,\n\toptions?: SimpleStreamOptions,\n) => AssistantMessageEventStream;\n\nexport interface ApiProvider<TApi extends Api = Api, TOptions extends StreamOptions = StreamOptions> {\n\tapi: TApi;\n\tstream: StreamFunction<TApi, TOptions>;\n\tstreamSimple: StreamFunction<TApi, SimpleStreamOptions>;\n}\n\ninterface ApiProviderInternal {\n\tapi: Api;\n\tstream: ApiStreamFunction;\n\tstreamSimple: ApiStreamSimpleFunction;\n}\n\ntype RegisteredApiProvider = {\n\tprovider: ApiProviderInternal;\n\tsourceId?: string;\n};\n\nconst apiProviderRegistry = new Map<string, RegisteredApiProvider>();\n\nfunction wrapStream<TApi extends Api, TOptions extends StreamOptions>(\n\tapi: TApi,\n\tstream: StreamFunction<TApi, TOptions>,\n): ApiStreamFunction {\n\treturn (model, context, options) => {\n\t\tif (model.api !== api) {\n\t\t\tthrow new Error(`Mismatched api: ${model.api} expected ${api}`);\n\t\t}\n\t\treturn stream(model as Model<TApi>, context, options as TOptions);\n\t};\n}\n\nfunction wrapStreamSimple<TApi extends Api>(\n\tapi: TApi,\n\tstreamSimple: StreamFunction<TApi, SimpleStreamOptions>,\n): ApiStreamSimpleFunction {\n\treturn (model, context, options) => {\n\t\tif (model.api !== api) {\n\t\t\tthrow new Error(`Mismatched api: ${model.api} expected ${api}`);\n\t\t}\n\t\treturn streamSimple(model as Model<TApi>, context, options);\n\t};\n}\n\nexport function registerApiProvider<TApi extends Api, TOptions extends StreamOptions>(\n\tprovider: ApiProvider<TApi, TOptions>,\n\tsourceId?: string,\n): void {\n\tapiProviderRegistry.set(provider.api, {\n\t\tprovider: {\n\t\t\tapi: provider.api,\n\t\t\tstream: wrapStream(provider.api, provider.stream),\n\t\t\tstreamSimple: wrapStreamSimple(provider.api, provider.streamSimple),\n\t\t},\n\t\tsourceId,\n\t});\n}\n\nexport function getApiProvider(api: Api): ApiProviderInternal | undefined {\n\treturn apiProviderRegistry.get(api)?.provider;\n}\n\nexport function getApiProviders(): ApiProviderInternal[] {\n\treturn Array.from(apiProviderRegistry.values(), (entry) => entry.provider);\n}\n\nexport function unregisterApiProviders(sourceId: string): void {\n\tfor (const [api, entry] of apiProviderRegistry.entries()) {\n\t\tif (entry.sourceId === sourceId) {\n\t\t\tapiProviderRegistry.delete(api);\n\t\t}\n\t}\n}\n\nexport function clearApiProviders(): void {\n\tapiProviderRegistry.clear();\n}\n"]}
@@ -1,44 +0,0 @@
1
- const apiProviderRegistry = new Map();
2
- function wrapStream(api, stream) {
3
- return (model, context, options) => {
4
- if (model.api !== api) {
5
- throw new Error(`Mismatched api: ${model.api} expected ${api}`);
6
- }
7
- return stream(model, context, options);
8
- };
9
- }
10
- function wrapStreamSimple(api, streamSimple) {
11
- return (model, context, options) => {
12
- if (model.api !== api) {
13
- throw new Error(`Mismatched api: ${model.api} expected ${api}`);
14
- }
15
- return streamSimple(model, context, options);
16
- };
17
- }
18
- export function registerApiProvider(provider, sourceId) {
19
- apiProviderRegistry.set(provider.api, {
20
- provider: {
21
- api: provider.api,
22
- stream: wrapStream(provider.api, provider.stream),
23
- streamSimple: wrapStreamSimple(provider.api, provider.streamSimple),
24
- },
25
- sourceId,
26
- });
27
- }
28
- export function getApiProvider(api) {
29
- return apiProviderRegistry.get(api)?.provider;
30
- }
31
- export function getApiProviders() {
32
- return Array.from(apiProviderRegistry.values(), (entry) => entry.provider);
33
- }
34
- export function unregisterApiProviders(sourceId) {
35
- for (const [api, entry] of apiProviderRegistry.entries()) {
36
- if (entry.sourceId === sourceId) {
37
- apiProviderRegistry.delete(api);
38
- }
39
- }
40
- }
41
- export function clearApiProviders() {
42
- apiProviderRegistry.clear();
43
- }
44
- //# sourceMappingURL=api-registry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"api-registry.js","sourceRoot":"","sources":["../src/api-registry.ts"],"names":[],"mappings":"AAuCA,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAiC,CAAC;AAErE,SAAS,UAAU,CAClB,GAAS,EACT,MAAsC,EAClB;IACpB,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC;QACnC,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,mBAAmB,KAAK,CAAC,GAAG,aAAa,GAAG,EAAE,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,MAAM,CAAC,KAAoB,EAAE,OAAO,EAAE,OAAmB,CAAC,CAAC;IAAA,CAClE,CAAC;AAAA,CACF;AAED,SAAS,gBAAgB,CACxB,GAAS,EACT,YAAuD,EAC7B;IAC1B,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC;QACnC,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,mBAAmB,KAAK,CAAC,GAAG,aAAa,GAAG,EAAE,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,YAAY,CAAC,KAAoB,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAAA,CAC5D,CAAC;AAAA,CACF;AAED,MAAM,UAAU,mBAAmB,CAClC,QAAqC,EACrC,QAAiB,EACV;IACP,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE;QACrC,QAAQ,EAAE;YACT,GAAG,EAAE,QAAQ,CAAC,GAAG;YACjB,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC;YACjD,YAAY,EAAE,gBAAgB,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,YAAY,CAAC;SACnE;QACD,QAAQ;KACR,CAAC,CAAC;AAAA,CACH;AAED,MAAM,UAAU,cAAc,CAAC,GAAQ,EAAmC;IACzE,OAAO,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC;AAAA,CAC9C;AAED,MAAM,UAAU,eAAe,GAA0B;IACxD,OAAO,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAAA,CAC3E;AAED,MAAM,UAAU,sBAAsB,CAAC,QAAgB,EAAQ;IAC9D,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,mBAAmB,CAAC,OAAO,EAAE,EAAE,CAAC;QAC1D,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACjC,mBAAmB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjC,CAAC;IACF,CAAC;AAAA,CACD;AAED,MAAM,UAAU,iBAAiB,GAAS;IACzC,mBAAmB,CAAC,KAAK,EAAE,CAAC;AAAA,CAC5B","sourcesContent":["import type {\n\tApi,\n\tAssistantMessageEventStream,\n\tContext,\n\tModel,\n\tSimpleStreamOptions,\n\tStreamFunction,\n\tStreamOptions,\n} from \"./types.js\";\n\nexport type ApiStreamFunction = (\n\tmodel: Model<Api>,\n\tcontext: Context,\n\toptions?: StreamOptions,\n) => AssistantMessageEventStream;\n\nexport type ApiStreamSimpleFunction = (\n\tmodel: Model<Api>,\n\tcontext: Context,\n\toptions?: SimpleStreamOptions,\n) => AssistantMessageEventStream;\n\nexport interface ApiProvider<TApi extends Api = Api, TOptions extends StreamOptions = StreamOptions> {\n\tapi: TApi;\n\tstream: StreamFunction<TApi, TOptions>;\n\tstreamSimple: StreamFunction<TApi, SimpleStreamOptions>;\n}\n\ninterface ApiProviderInternal {\n\tapi: Api;\n\tstream: ApiStreamFunction;\n\tstreamSimple: ApiStreamSimpleFunction;\n}\n\ntype RegisteredApiProvider = {\n\tprovider: ApiProviderInternal;\n\tsourceId?: string;\n};\n\nconst apiProviderRegistry = new Map<string, RegisteredApiProvider>();\n\nfunction wrapStream<TApi extends Api, TOptions extends StreamOptions>(\n\tapi: TApi,\n\tstream: StreamFunction<TApi, TOptions>,\n): ApiStreamFunction {\n\treturn (model, context, options) => {\n\t\tif (model.api !== api) {\n\t\t\tthrow new Error(`Mismatched api: ${model.api} expected ${api}`);\n\t\t}\n\t\treturn stream(model as Model<TApi>, context, options as TOptions);\n\t};\n}\n\nfunction wrapStreamSimple<TApi extends Api>(\n\tapi: TApi,\n\tstreamSimple: StreamFunction<TApi, SimpleStreamOptions>,\n): ApiStreamSimpleFunction {\n\treturn (model, context, options) => {\n\t\tif (model.api !== api) {\n\t\t\tthrow new Error(`Mismatched api: ${model.api} expected ${api}`);\n\t\t}\n\t\treturn streamSimple(model as Model<TApi>, context, options);\n\t};\n}\n\nexport function registerApiProvider<TApi extends Api, TOptions extends StreamOptions>(\n\tprovider: ApiProvider<TApi, TOptions>,\n\tsourceId?: string,\n): void {\n\tapiProviderRegistry.set(provider.api, {\n\t\tprovider: {\n\t\t\tapi: provider.api,\n\t\t\tstream: wrapStream(provider.api, provider.stream),\n\t\t\tstreamSimple: wrapStreamSimple(provider.api, provider.streamSimple),\n\t\t},\n\t\tsourceId,\n\t});\n}\n\nexport function getApiProvider(api: Api): ApiProviderInternal | undefined {\n\treturn apiProviderRegistry.get(api)?.provider;\n}\n\nexport function getApiProviders(): ApiProviderInternal[] {\n\treturn Array.from(apiProviderRegistry.values(), (entry) => entry.provider);\n}\n\nexport function unregisterApiProviders(sourceId: string): void {\n\tfor (const [api, entry] of apiProviderRegistry.entries()) {\n\t\tif (entry.sourceId === sourceId) {\n\t\t\tapiProviderRegistry.delete(api);\n\t\t}\n\t}\n}\n\nexport function clearApiProviders(): void {\n\tapiProviderRegistry.clear();\n}\n"]}
@@ -1,5 +0,0 @@
1
- export declare const bedrockProviderModule: {
2
- streamBedrock: import("./types.js").StreamFunction<"bedrock-converse-stream", import("./providers/amazon-bedrock.js").BedrockOptions>;
3
- streamSimpleBedrock: import("./types.js").StreamFunction<"bedrock-converse-stream", import("./types.js").SimpleStreamOptions>;
4
- };
5
- //# sourceMappingURL=bedrock-provider.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bedrock-provider.d.ts","sourceRoot":"","sources":["../src/bedrock-provider.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,qBAAqB;;;CAGjC,CAAC","sourcesContent":["import { streamBedrock, streamSimpleBedrock } from \"./providers/amazon-bedrock.js\";\n\nexport const bedrockProviderModule = {\n\tstreamBedrock,\n\tstreamSimpleBedrock,\n};\n"]}
@@ -1,6 +0,0 @@
1
- import { streamBedrock, streamSimpleBedrock } from "./providers/amazon-bedrock.js";
2
- export const bedrockProviderModule = {
3
- streamBedrock,
4
- streamSimpleBedrock,
5
- };
6
- //# sourceMappingURL=bedrock-provider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bedrock-provider.js","sourceRoot":"","sources":["../src/bedrock-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEnF,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACpC,aAAa;IACb,mBAAmB;CACnB,CAAC","sourcesContent":["import { streamBedrock, streamSimpleBedrock } from \"./providers/amazon-bedrock.js\";\n\nexport const bedrockProviderModule = {\n\tstreamBedrock,\n\tstreamSimpleBedrock,\n};\n"]}
package/dist/cli.d.ts DELETED
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
3
- //# sourceMappingURL=cli.d.ts.map
package/dist/cli.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"","sourcesContent":["#!/usr/bin/env node\n\nimport { createInterface } from \"node:readline\";\nimport { existsSync, readFileSync, writeFileSync } from \"fs\";\nimport { getOAuthProvider, getOAuthProviders } from \"./utils/oauth/index.js\";\nimport type { OAuthCredentials, OAuthProviderId } from \"./utils/oauth/types.js\";\n\nconst AUTH_FILE = \"auth.json\";\nconst PROVIDERS = getOAuthProviders();\n\nfunction prompt(rl: ReturnType<typeof createInterface>, question: string): Promise<string> {\n\treturn new Promise((resolve) => rl.question(question, resolve));\n}\n\nfunction loadAuth(): Record<string, { type: \"oauth\" } & OAuthCredentials> {\n\tif (!existsSync(AUTH_FILE)) return {};\n\ttry {\n\t\treturn JSON.parse(readFileSync(AUTH_FILE, \"utf-8\"));\n\t} catch {\n\t\treturn {};\n\t}\n}\n\nfunction saveAuth(auth: Record<string, { type: \"oauth\" } & OAuthCredentials>): void {\n\twriteFileSync(AUTH_FILE, JSON.stringify(auth, null, 2), \"utf-8\");\n}\n\nasync function login(providerId: OAuthProviderId): Promise<void> {\n\tconst provider = getOAuthProvider(providerId);\n\tif (!provider) {\n\t\tconsole.error(`Unknown provider: ${providerId}`);\n\t\tprocess.exit(1);\n\t}\n\n\tconst rl = createInterface({ input: process.stdin, output: process.stdout });\n\tconst promptFn = (msg: string) => prompt(rl, `${msg} `);\n\n\ttry {\n\t\tconst credentials = await provider.login({\n\t\t\tonAuth: (info) => {\n\t\t\t\tconsole.log(`\\nOpen this URL in your browser:\\n${info.url}`);\n\t\t\t\tif (info.instructions) console.log(info.instructions);\n\t\t\t\tconsole.log();\n\t\t\t},\n\t\t\tonPrompt: async (p) => {\n\t\t\t\treturn await promptFn(`${p.message}${p.placeholder ? ` (${p.placeholder})` : \"\"}:`);\n\t\t\t},\n\t\t\tonProgress: (msg) => console.log(msg),\n\t\t});\n\n\t\tconst auth = loadAuth();\n\t\tauth[providerId] = { type: \"oauth\", ...credentials };\n\t\tsaveAuth(auth);\n\n\t\tconsole.log(`\\nCredentials saved to ${AUTH_FILE}`);\n\t} finally {\n\t\trl.close();\n\t}\n}\n\nasync function main(): Promise<void> {\n\tconst args = process.argv.slice(2);\n\tconst command = args[0];\n\n\tif (!command || command === \"help\" || command === \"--help\" || command === \"-h\") {\n\t\tconst providerList = PROVIDERS.map((p) => ` ${p.id.padEnd(20)} ${p.name}`).join(\"\\n\");\n\t\tconsole.log(`Usage: npx @eminent337/aery-ai <command> [provider]\n\nCommands:\n login [provider] Login to an OAuth provider\n list List available providers\n\nProviders:\n${providerList}\n\nExamples:\n npx @eminent337/aery-ai login # interactive provider selection\n npx @eminent337/aery-ai login anthropic # login to specific provider\n npx @eminent337/aery-ai list # list providers\n`);\n\t\treturn;\n\t}\n\n\tif (command === \"list\") {\n\t\tconsole.log(\"Available OAuth providers:\\n\");\n\t\tfor (const p of PROVIDERS) {\n\t\t\tconsole.log(` ${p.id.padEnd(20)} ${p.name}`);\n\t\t}\n\t\treturn;\n\t}\n\n\tif (command === \"login\") {\n\t\tlet provider = args[1] as OAuthProviderId | undefined;\n\n\t\tif (!provider) {\n\t\t\tconst rl = createInterface({ input: process.stdin, output: process.stdout });\n\t\t\tconsole.log(\"Select a provider:\\n\");\n\t\t\tfor (let i = 0; i < PROVIDERS.length; i++) {\n\t\t\t\tconsole.log(` ${i + 1}. ${PROVIDERS[i].name}`);\n\t\t\t}\n\t\t\tconsole.log();\n\n\t\t\tconst choice = await prompt(rl, `Enter number (1-${PROVIDERS.length}): `);\n\t\t\trl.close();\n\n\t\t\tconst index = parseInt(choice, 10) - 1;\n\t\t\tif (index < 0 || index >= PROVIDERS.length) {\n\t\t\t\tconsole.error(\"Invalid selection\");\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\t\t\tprovider = PROVIDERS[index].id;\n\t\t}\n\n\t\tif (!PROVIDERS.some((p) => p.id === provider)) {\n\t\t\tconsole.error(`Unknown provider: ${provider}`);\n\t\t\tconsole.error(`Use 'npx @eminent337/aery-ai list' to see available providers`);\n\t\t\tprocess.exit(1);\n\t\t}\n\n\t\tconsole.log(`Logging in to ${provider}...`);\n\t\tawait login(provider);\n\t\treturn;\n\t}\n\n\tconsole.error(`Unknown command: ${command}`);\n\tconsole.error(`Use 'npx @eminent337/aery-ai --help' for usage`);\n\tprocess.exit(1);\n}\n\nmain().catch((err) => {\n\tconsole.error(\"Error:\", err.message);\n\tprocess.exit(1);\n});\n"]}
package/dist/cli.js DELETED
@@ -1,116 +0,0 @@
1
- #!/usr/bin/env node
2
- import { createInterface } from "node:readline";
3
- import { existsSync, readFileSync, writeFileSync } from "fs";
4
- import { getOAuthProvider, getOAuthProviders } from "./utils/oauth/index.js";
5
- const AUTH_FILE = "auth.json";
6
- const PROVIDERS = getOAuthProviders();
7
- function prompt(rl, question) {
8
- return new Promise((resolve) => rl.question(question, resolve));
9
- }
10
- function loadAuth() {
11
- if (!existsSync(AUTH_FILE))
12
- return {};
13
- try {
14
- return JSON.parse(readFileSync(AUTH_FILE, "utf-8"));
15
- }
16
- catch {
17
- return {};
18
- }
19
- }
20
- function saveAuth(auth) {
21
- writeFileSync(AUTH_FILE, JSON.stringify(auth, null, 2), "utf-8");
22
- }
23
- async function login(providerId) {
24
- const provider = getOAuthProvider(providerId);
25
- if (!provider) {
26
- console.error(`Unknown provider: ${providerId}`);
27
- process.exit(1);
28
- }
29
- const rl = createInterface({ input: process.stdin, output: process.stdout });
30
- const promptFn = (msg) => prompt(rl, `${msg} `);
31
- try {
32
- const credentials = await provider.login({
33
- onAuth: (info) => {
34
- console.log(`\nOpen this URL in your browser:\n${info.url}`);
35
- if (info.instructions)
36
- console.log(info.instructions);
37
- console.log();
38
- },
39
- onPrompt: async (p) => {
40
- return await promptFn(`${p.message}${p.placeholder ? ` (${p.placeholder})` : ""}:`);
41
- },
42
- onProgress: (msg) => console.log(msg),
43
- });
44
- const auth = loadAuth();
45
- auth[providerId] = { type: "oauth", ...credentials };
46
- saveAuth(auth);
47
- console.log(`\nCredentials saved to ${AUTH_FILE}`);
48
- }
49
- finally {
50
- rl.close();
51
- }
52
- }
53
- async function main() {
54
- const args = process.argv.slice(2);
55
- const command = args[0];
56
- if (!command || command === "help" || command === "--help" || command === "-h") {
57
- const providerList = PROVIDERS.map((p) => ` ${p.id.padEnd(20)} ${p.name}`).join("\n");
58
- console.log(`Usage: npx @eminent337/aery-ai <command> [provider]
59
-
60
- Commands:
61
- login [provider] Login to an OAuth provider
62
- list List available providers
63
-
64
- Providers:
65
- ${providerList}
66
-
67
- Examples:
68
- npx @eminent337/aery-ai login # interactive provider selection
69
- npx @eminent337/aery-ai login anthropic # login to specific provider
70
- npx @eminent337/aery-ai list # list providers
71
- `);
72
- return;
73
- }
74
- if (command === "list") {
75
- console.log("Available OAuth providers:\n");
76
- for (const p of PROVIDERS) {
77
- console.log(` ${p.id.padEnd(20)} ${p.name}`);
78
- }
79
- return;
80
- }
81
- if (command === "login") {
82
- let provider = args[1];
83
- if (!provider) {
84
- const rl = createInterface({ input: process.stdin, output: process.stdout });
85
- console.log("Select a provider:\n");
86
- for (let i = 0; i < PROVIDERS.length; i++) {
87
- console.log(` ${i + 1}. ${PROVIDERS[i].name}`);
88
- }
89
- console.log();
90
- const choice = await prompt(rl, `Enter number (1-${PROVIDERS.length}): `);
91
- rl.close();
92
- const index = parseInt(choice, 10) - 1;
93
- if (index < 0 || index >= PROVIDERS.length) {
94
- console.error("Invalid selection");
95
- process.exit(1);
96
- }
97
- provider = PROVIDERS[index].id;
98
- }
99
- if (!PROVIDERS.some((p) => p.id === provider)) {
100
- console.error(`Unknown provider: ${provider}`);
101
- console.error(`Use 'npx @eminent337/aery-ai list' to see available providers`);
102
- process.exit(1);
103
- }
104
- console.log(`Logging in to ${provider}...`);
105
- await login(provider);
106
- return;
107
- }
108
- console.error(`Unknown command: ${command}`);
109
- console.error(`Use 'npx @eminent337/aery-ai --help' for usage`);
110
- process.exit(1);
111
- }
112
- main().catch((err) => {
113
- console.error("Error:", err.message);
114
- process.exit(1);
115
- });
116
- //# sourceMappingURL=cli.js.map
package/dist/cli.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAG7E,MAAM,SAAS,GAAG,WAAW,CAAC;AAC9B,MAAM,SAAS,GAAG,iBAAiB,EAAE,CAAC;AAEtC,SAAS,MAAM,CAAC,EAAsC,EAAE,QAAgB,EAAmB;IAC1F,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;AAAA,CAChE;AAED,SAAS,QAAQ,GAAyD;IACzE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,EAAE,CAAC;IACtC,IAAI,CAAC;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,EAAE,CAAC;IACX,CAAC;AAAA,CACD;AAED,SAAS,QAAQ,CAAC,IAA0D,EAAQ;IACnF,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAAA,CACjE;AAED,KAAK,UAAU,KAAK,CAAC,UAA2B,EAAiB;IAChE,MAAM,QAAQ,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAC9C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,qBAAqB,UAAU,EAAE,CAAC,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7E,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC;IAExD,IAAI,CAAC;QACJ,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC;YACxC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,qCAAqC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;gBAC7D,IAAI,IAAI,CAAC,YAAY;oBAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACtD,OAAO,CAAC,GAAG,EAAE,CAAC;YAAA,CACd;YACD,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtB,OAAO,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAAA,CACpF;YACD,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;SACrC,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;QACxB,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,WAAW,EAAE,CAAC;QACrD,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEf,OAAO,CAAC,GAAG,CAAC,0BAA0B,SAAS,EAAE,CAAC,CAAC;IACpD,CAAC;YAAS,CAAC;QACV,EAAE,CAAC,KAAK,EAAE,CAAC;IACZ,CAAC;AAAA,CACD;AAED,KAAK,UAAU,IAAI,GAAkB;IACpC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAExB,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,MAAM,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QAChF,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvF,OAAO,CAAC,GAAG,CAAC;;;;;;;EAOZ,YAAY;;;;;;CAMb,CAAC,CAAC;QACD,OAAO;IACR,CAAC;IAED,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAC5C,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO;IACR,CAAC;IAED,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACzB,IAAI,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAgC,CAAC;QAEtD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACf,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YAC7E,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;YACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACjD,CAAC;YACD,OAAO,CAAC,GAAG,EAAE,CAAC;YAEd,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,EAAE,EAAE,mBAAmB,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC;YAC1E,EAAE,CAAC,KAAK,EAAE,CAAC;YAEX,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;YACvC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;gBAC5C,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;gBACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjB,CAAC;YACD,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QAChC,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE,CAAC;YAC/C,OAAO,CAAC,KAAK,CAAC,qBAAqB,QAAQ,EAAE,CAAC,CAAC;YAC/C,OAAO,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC;YAC/E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,iBAAiB,QAAQ,KAAK,CAAC,CAAC;QAC5C,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC;QACtB,OAAO;IACR,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;IAC7C,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;IAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAAA,CAChB;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;IACrB,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAAA,CAChB,CAAC,CAAC","sourcesContent":["#!/usr/bin/env node\n\nimport { createInterface } from \"node:readline\";\nimport { existsSync, readFileSync, writeFileSync } from \"fs\";\nimport { getOAuthProvider, getOAuthProviders } from \"./utils/oauth/index.js\";\nimport type { OAuthCredentials, OAuthProviderId } from \"./utils/oauth/types.js\";\n\nconst AUTH_FILE = \"auth.json\";\nconst PROVIDERS = getOAuthProviders();\n\nfunction prompt(rl: ReturnType<typeof createInterface>, question: string): Promise<string> {\n\treturn new Promise((resolve) => rl.question(question, resolve));\n}\n\nfunction loadAuth(): Record<string, { type: \"oauth\" } & OAuthCredentials> {\n\tif (!existsSync(AUTH_FILE)) return {};\n\ttry {\n\t\treturn JSON.parse(readFileSync(AUTH_FILE, \"utf-8\"));\n\t} catch {\n\t\treturn {};\n\t}\n}\n\nfunction saveAuth(auth: Record<string, { type: \"oauth\" } & OAuthCredentials>): void {\n\twriteFileSync(AUTH_FILE, JSON.stringify(auth, null, 2), \"utf-8\");\n}\n\nasync function login(providerId: OAuthProviderId): Promise<void> {\n\tconst provider = getOAuthProvider(providerId);\n\tif (!provider) {\n\t\tconsole.error(`Unknown provider: ${providerId}`);\n\t\tprocess.exit(1);\n\t}\n\n\tconst rl = createInterface({ input: process.stdin, output: process.stdout });\n\tconst promptFn = (msg: string) => prompt(rl, `${msg} `);\n\n\ttry {\n\t\tconst credentials = await provider.login({\n\t\t\tonAuth: (info) => {\n\t\t\t\tconsole.log(`\\nOpen this URL in your browser:\\n${info.url}`);\n\t\t\t\tif (info.instructions) console.log(info.instructions);\n\t\t\t\tconsole.log();\n\t\t\t},\n\t\t\tonPrompt: async (p) => {\n\t\t\t\treturn await promptFn(`${p.message}${p.placeholder ? ` (${p.placeholder})` : \"\"}:`);\n\t\t\t},\n\t\t\tonProgress: (msg) => console.log(msg),\n\t\t});\n\n\t\tconst auth = loadAuth();\n\t\tauth[providerId] = { type: \"oauth\", ...credentials };\n\t\tsaveAuth(auth);\n\n\t\tconsole.log(`\\nCredentials saved to ${AUTH_FILE}`);\n\t} finally {\n\t\trl.close();\n\t}\n}\n\nasync function main(): Promise<void> {\n\tconst args = process.argv.slice(2);\n\tconst command = args[0];\n\n\tif (!command || command === \"help\" || command === \"--help\" || command === \"-h\") {\n\t\tconst providerList = PROVIDERS.map((p) => ` ${p.id.padEnd(20)} ${p.name}`).join(\"\\n\");\n\t\tconsole.log(`Usage: npx @eminent337/aery-ai <command> [provider]\n\nCommands:\n login [provider] Login to an OAuth provider\n list List available providers\n\nProviders:\n${providerList}\n\nExamples:\n npx @eminent337/aery-ai login # interactive provider selection\n npx @eminent337/aery-ai login anthropic # login to specific provider\n npx @eminent337/aery-ai list # list providers\n`);\n\t\treturn;\n\t}\n\n\tif (command === \"list\") {\n\t\tconsole.log(\"Available OAuth providers:\\n\");\n\t\tfor (const p of PROVIDERS) {\n\t\t\tconsole.log(` ${p.id.padEnd(20)} ${p.name}`);\n\t\t}\n\t\treturn;\n\t}\n\n\tif (command === \"login\") {\n\t\tlet provider = args[1] as OAuthProviderId | undefined;\n\n\t\tif (!provider) {\n\t\t\tconst rl = createInterface({ input: process.stdin, output: process.stdout });\n\t\t\tconsole.log(\"Select a provider:\\n\");\n\t\t\tfor (let i = 0; i < PROVIDERS.length; i++) {\n\t\t\t\tconsole.log(` ${i + 1}. ${PROVIDERS[i].name}`);\n\t\t\t}\n\t\t\tconsole.log();\n\n\t\t\tconst choice = await prompt(rl, `Enter number (1-${PROVIDERS.length}): `);\n\t\t\trl.close();\n\n\t\t\tconst index = parseInt(choice, 10) - 1;\n\t\t\tif (index < 0 || index >= PROVIDERS.length) {\n\t\t\t\tconsole.error(\"Invalid selection\");\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\t\t\tprovider = PROVIDERS[index].id;\n\t\t}\n\n\t\tif (!PROVIDERS.some((p) => p.id === provider)) {\n\t\t\tconsole.error(`Unknown provider: ${provider}`);\n\t\t\tconsole.error(`Use 'npx @eminent337/aery-ai list' to see available providers`);\n\t\t\tprocess.exit(1);\n\t\t}\n\n\t\tconsole.log(`Logging in to ${provider}...`);\n\t\tawait login(provider);\n\t\treturn;\n\t}\n\n\tconsole.error(`Unknown command: ${command}`);\n\tconsole.error(`Use 'npx @eminent337/aery-ai --help' for usage`);\n\tprocess.exit(1);\n}\n\nmain().catch((err) => {\n\tconsole.error(\"Error:\", err.message);\n\tprocess.exit(1);\n});\n"]}
@@ -1,18 +0,0 @@
1
- import type { KnownProvider } from "./types.js";
2
- /**
3
- * Find configured environment variables that can provide an API key for a provider.
4
- *
5
- * This only reports actual API key variables. It intentionally excludes ambient
6
- * credential sources such as AWS profiles, AWS IAM credentials, and Google
7
- * Application Default Credentials.
8
- */
9
- export declare function findEnvKeys(provider: KnownProvider): string[] | undefined;
10
- export declare function findEnvKeys(provider: string): string[] | undefined;
11
- /**
12
- * Get API key for provider from known environment variables, e.g. OPENAI_API_KEY.
13
- *
14
- * Will not return API keys for providers that require OAuth tokens.
15
- */
16
- export declare function getEnvApiKey(provider: KnownProvider): string | undefined;
17
- export declare function getEnvApiKey(provider: string): string | undefined;
18
- //# sourceMappingURL=env-api-keys.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"env-api-keys.d.ts","sourceRoot":"","sources":["../src/env-api-keys.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAsGhD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC;AAC3E,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC;AASpE;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,GAAG,SAAS,CAAC;AAC1E,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC","sourcesContent":["// NEVER convert to top-level imports - breaks browser/Vite builds (web-ui)\nlet _existsSync: typeof import(\"node:fs\").existsSync | null = null;\nlet _homedir: typeof import(\"node:os\").homedir | null = null;\nlet _join: typeof import(\"node:path\").join | null = null;\n\ntype DynamicImport = (specifier: string) => Promise<unknown>;\n\nconst dynamicImport: DynamicImport = (specifier) => import(specifier);\nconst NODE_FS_SPECIFIER = \"node:\" + \"fs\";\nconst NODE_OS_SPECIFIER = \"node:\" + \"os\";\nconst NODE_PATH_SPECIFIER = \"node:\" + \"path\";\n\n// Eagerly load in Node.js/Bun environment only\nif (typeof process !== \"undefined\" && (process.versions?.node || process.versions?.bun)) {\n\tdynamicImport(NODE_FS_SPECIFIER).then((m) => {\n\t\t_existsSync = (m as typeof import(\"node:fs\")).existsSync;\n\t});\n\tdynamicImport(NODE_OS_SPECIFIER).then((m) => {\n\t\t_homedir = (m as typeof import(\"node:os\")).homedir;\n\t});\n\tdynamicImport(NODE_PATH_SPECIFIER).then((m) => {\n\t\t_join = (m as typeof import(\"node:path\")).join;\n\t});\n}\n\nimport type { KnownProvider } from \"./types.js\";\n\nlet _procEnvCache: Map<string, string> | null = null;\n\n/**\n * Fallback for https://github.com/oven-sh/bun/issues/27802\n * Bun compiled binaries have an empty `process.env` inside sandbox\n * environments on Linux. We can recover the env from `/proc/self/environ`.\n */\nfunction getProcEnv(key: string): string | undefined {\n\tif (!process.versions?.bun) return undefined;\n\tif (typeof process === \"undefined\") return undefined;\n\n\t// If process.env already has entries, the bug is not triggered.\n\tif (Object.keys(process.env).length > 0) return undefined;\n\n\tif (_procEnvCache === null) {\n\t\t_procEnvCache = new Map();\n\t\ttry {\n\t\t\tconst { readFileSync } = require(\"node:fs\") as typeof import(\"node:fs\");\n\t\t\tconst data = readFileSync(\"/proc/self/environ\", \"utf-8\");\n\t\t\tfor (const entry of data.split(\"\\0\")) {\n\t\t\t\tconst idx = entry.indexOf(\"=\");\n\t\t\t\tif (idx > 0) {\n\t\t\t\t\t_procEnvCache.set(entry.slice(0, idx), entry.slice(idx + 1));\n\t\t\t\t}\n\t\t\t}\n\t\t} catch {\n\t\t\t// /proc/self/environ may not be readable.\n\t\t}\n\t}\n\n\treturn _procEnvCache.get(key);\n}\n\nlet cachedVertexAdcCredentialsExists: boolean | null = null;\n\nfunction hasVertexAdcCredentials(): boolean {\n\tif (cachedVertexAdcCredentialsExists === null) {\n\t\t// If node modules haven't loaded yet (async import race at startup),\n\t\t// return false WITHOUT caching so the next call retries once they're ready.\n\t\t// Only cache false permanently in a browser environment where fs is never available.\n\t\tif (!_existsSync || !_homedir || !_join) {\n\t\t\tconst isNode = typeof process !== \"undefined\" && (process.versions?.node || process.versions?.bun);\n\t\t\tif (!isNode) {\n\t\t\t\t// Definitively in a browser — safe to cache false permanently\n\t\t\t\tcachedVertexAdcCredentialsExists = false;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\t// Check GOOGLE_APPLICATION_CREDENTIALS env var first (standard way)\n\t\tconst gacPath = process.env.GOOGLE_APPLICATION_CREDENTIALS || getProcEnv(\"GOOGLE_APPLICATION_CREDENTIALS\");\n\t\tif (gacPath) {\n\t\t\tcachedVertexAdcCredentialsExists = _existsSync(gacPath);\n\t\t} else {\n\t\t\t// Fall back to default ADC path (lazy evaluation)\n\t\t\tcachedVertexAdcCredentialsExists = _existsSync(\n\t\t\t\t_join(_homedir(), \".config\", \"gcloud\", \"application_default_credentials.json\"),\n\t\t\t);\n\t\t}\n\t}\n\treturn cachedVertexAdcCredentialsExists;\n}\n\nfunction getApiKeyEnvVars(provider: string): readonly string[] | undefined {\n\tif (provider === \"github-copilot\") {\n\t\treturn [\"COPILOT_GITHUB_TOKEN\", \"GH_TOKEN\", \"GITHUB_TOKEN\"];\n\t}\n\n\t// ANTHROPIC_OAUTH_TOKEN takes precedence over ANTHROPIC_API_KEY\n\tif (provider === \"anthropic\") {\n\t\treturn [\"ANTHROPIC_OAUTH_TOKEN\", \"ANTHROPIC_API_KEY\"];\n\t}\n\n\tconst envMap: Record<string, string> = {\n\t\topenai: \"OPENAI_API_KEY\",\n\t\t\"azure-openai-responses\": \"AZURE_OPENAI_API_KEY\",\n\t\tdeepseek: \"DEEPSEEK_API_KEY\",\n\t\tgoogle: \"GEMINI_API_KEY\",\n\t\t\"google-vertex\": \"GOOGLE_CLOUD_API_KEY\",\n\t\tgroq: \"GROQ_API_KEY\",\n\t\tcerebras: \"CEREBRAS_API_KEY\",\n\t\txai: \"XAI_API_KEY\",\n\t\topenrouter: \"OPENROUTER_API_KEY\",\n\t\t\"vercel-ai-gateway\": \"AI_GATEWAY_API_KEY\",\n\t\tzai: \"ZAI_API_KEY\",\n\t\tmistral: \"MISTRAL_API_KEY\",\n\t\tminimax: \"MINIMAX_API_KEY\",\n\t\t\"minimax-cn\": \"MINIMAX_CN_API_KEY\",\n\t\thuggingface: \"HF_TOKEN\",\n\t\tfireworks: \"FIREWORKS_API_KEY\",\n\t\topencode: \"OPENCODE_API_KEY\",\n\t\t\"opencode-go\": \"OPENCODE_API_KEY\",\n\t\t\"kimi-coding\": \"KIMI_API_KEY\",\n\t\t\"cloudflare-workers-ai\": \"CLOUDFLARE_API_KEY\",\n\t};\n\n\tconst envVar = envMap[provider];\n\treturn envVar ? [envVar] : undefined;\n}\n\n/**\n * Find configured environment variables that can provide an API key for a provider.\n *\n * This only reports actual API key variables. It intentionally excludes ambient\n * credential sources such as AWS profiles, AWS IAM credentials, and Google\n * Application Default Credentials.\n */\nexport function findEnvKeys(provider: KnownProvider): string[] | undefined;\nexport function findEnvKeys(provider: string): string[] | undefined;\nexport function findEnvKeys(provider: string): string[] | undefined {\n\tconst envVars = getApiKeyEnvVars(provider);\n\tif (!envVars) return undefined;\n\n\tconst found = envVars.filter((envVar) => !!process.env[envVar] || !!getProcEnv(envVar));\n\treturn found.length > 0 ? found : undefined;\n}\n\n/**\n * Get API key for provider from known environment variables, e.g. OPENAI_API_KEY.\n *\n * Will not return API keys for providers that require OAuth tokens.\n */\nexport function getEnvApiKey(provider: KnownProvider): string | undefined;\nexport function getEnvApiKey(provider: string): string | undefined;\nexport function getEnvApiKey(provider: string): string | undefined {\n\tconst envKeys = findEnvKeys(provider);\n\tif (envKeys?.[0]) {\n\t\treturn process.env[envKeys[0]] || getProcEnv(envKeys[0]);\n\t}\n\n\t// Vertex AI supports either an explicit API key or Application Default Credentials.\n\t// Auth is configured via `gcloud auth application-default login`.\n\tif (provider === \"google-vertex\") {\n\t\tconst hasCredentials = hasVertexAdcCredentials();\n\t\tconst hasProject = !!(\n\t\t\tprocess.env.GOOGLE_CLOUD_PROJECT ||\n\t\t\tprocess.env.GCLOUD_PROJECT ||\n\t\t\tgetProcEnv(\"GOOGLE_CLOUD_PROJECT\") ||\n\t\t\tgetProcEnv(\"GCLOUD_PROJECT\")\n\t\t);\n\t\tconst hasLocation = !!(process.env.GOOGLE_CLOUD_LOCATION || getProcEnv(\"GOOGLE_CLOUD_LOCATION\"));\n\n\t\tif (hasCredentials && hasProject && hasLocation) {\n\t\t\treturn \"<authenticated>\";\n\t\t}\n\t}\n\n\tif (provider === \"amazon-bedrock\") {\n\t\t// Amazon Bedrock supports multiple credential sources:\n\t\t// 1. AWS_PROFILE - named profile from ~/.aws/credentials\n\t\t// 2. AWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEY - standard IAM keys\n\t\t// 3. AWS_BEARER_TOKEN_BEDROCK - Bedrock bearer token\n\t\t// 4. AWS_CONTAINER_CREDENTIALS_RELATIVE_URI - ECS task roles\n\t\t// 5. AWS_CONTAINER_CREDENTIALS_FULL_URI - ECS task roles (full URI)\n\t\t// 6. AWS_WEB_IDENTITY_TOKEN_FILE - IRSA (IAM Roles for Service Accounts)\n\t\tif (\n\t\t\tprocess.env.AWS_PROFILE ||\n\t\t\t(process.env.AWS_ACCESS_KEY_ID && process.env.AWS_SECRET_ACCESS_KEY) ||\n\t\t\tprocess.env.AWS_BEARER_TOKEN_BEDROCK ||\n\t\t\tprocess.env.AWS_CONTAINER_CREDENTIALS_RELATIVE_URI ||\n\t\t\tprocess.env.AWS_CONTAINER_CREDENTIALS_FULL_URI ||\n\t\t\tprocess.env.AWS_WEB_IDENTITY_TOKEN_FILE ||\n\t\t\tgetProcEnv(\"AWS_PROFILE\") ||\n\t\t\t(getProcEnv(\"AWS_ACCESS_KEY_ID\") && getProcEnv(\"AWS_SECRET_ACCESS_KEY\")) ||\n\t\t\tgetProcEnv(\"AWS_BEARER_TOKEN_BEDROCK\") ||\n\t\t\tgetProcEnv(\"AWS_CONTAINER_CREDENTIALS_RELATIVE_URI\") ||\n\t\t\tgetProcEnv(\"AWS_CONTAINER_CREDENTIALS_FULL_URI\") ||\n\t\t\tgetProcEnv(\"AWS_WEB_IDENTITY_TOKEN_FILE\")\n\t\t) {\n\t\t\treturn \"<authenticated>\";\n\t\t}\n\t}\n\n\treturn undefined;\n}\n"]}