@matthewdunbar/amazon-bedrock-mantle 0.0.2 → 0.0.4

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.mts CHANGED
@@ -3,8 +3,7 @@ import { FetchFunction } from '@ai-sdk/provider-utils';
3
3
 
4
4
  interface AmazonBedrockMantleProviderSettings {
5
5
  /**
6
- * The AWS region to use for the Bedrock Mantle provider. Defaults to the value of the
7
- * `AWS_REGION` environment variable.
6
+ * The AWS region to use for the Bedrock Mantle provider. Defaults to 'us-east-1'.
8
7
  */
9
8
  region?: string;
10
9
  /**
package/dist/index.d.ts CHANGED
@@ -3,8 +3,7 @@ import { FetchFunction } from '@ai-sdk/provider-utils';
3
3
 
4
4
  interface AmazonBedrockMantleProviderSettings {
5
5
  /**
6
- * The AWS region to use for the Bedrock Mantle provider. Defaults to the value of the
7
- * `AWS_REGION` environment variable.
6
+ * The AWS region to use for the Bedrock Mantle provider. Defaults to 'us-east-1'.
8
7
  */
9
8
  region?: string;
10
9
  /**
package/dist/index.js CHANGED
@@ -30,6 +30,42 @@ module.exports = __toCommonJS(src_exports);
30
30
  var import_provider_utils = require("@ai-sdk/provider-utils");
31
31
  var import_openai_compatible = require("@ai-sdk/openai-compatible");
32
32
  var import_aws4fetch = require("aws4fetch");
33
+ var import_fs = require("fs");
34
+ var import_path = require("path");
35
+ var import_os = require("os");
36
+ function loadCredentialsFromProfile(profile) {
37
+ var _a, _b, _c;
38
+ const credentialsPath = (0, import_path.resolve)((0, import_os.homedir)(), ".aws", "credentials");
39
+ if (!(0, import_fs.existsSync)(credentialsPath)) {
40
+ throw new Error(`AWS credentials file not found at ${credentialsPath}`);
41
+ }
42
+ const credentialsContent = (0, import_fs.readFileSync)(credentialsPath, "utf-8");
43
+ const lines = credentialsContent.split("\n");
44
+ let currentProfile = "";
45
+ let accessKeyId = "";
46
+ let secretAccessKey = "";
47
+ let sessionToken;
48
+ for (const line of lines) {
49
+ const trimmedLine = line.trim();
50
+ if (trimmedLine.startsWith("[") && trimmedLine.endsWith("]")) {
51
+ currentProfile = trimmedLine.slice(1, -1);
52
+ } else if (currentProfile === profile) {
53
+ if (trimmedLine.startsWith("aws_access_key_id")) {
54
+ accessKeyId = ((_a = trimmedLine.split("=")[1]) == null ? void 0 : _a.trim()) || "";
55
+ } else if (trimmedLine.startsWith("aws_secret_access_key")) {
56
+ secretAccessKey = ((_b = trimmedLine.split("=")[1]) == null ? void 0 : _b.trim()) || "";
57
+ } else if (trimmedLine.startsWith("aws_session_token")) {
58
+ sessionToken = (_c = trimmedLine.split("=")[1]) == null ? void 0 : _c.trim();
59
+ }
60
+ }
61
+ }
62
+ if (!accessKeyId || !secretAccessKey) {
63
+ throw new Error(
64
+ `AWS profile '${profile}' not found in credentials file or missing access key/secret`
65
+ );
66
+ }
67
+ return { accessKeyId, secretAccessKey, sessionToken };
68
+ }
33
69
  function createMantleSigV4FetchFunction(getCredentials, fetchImpl = globalThis.fetch) {
34
70
  return async (input, init) => {
35
71
  var _a, _b;
@@ -58,21 +94,27 @@ function createMantleSigV4FetchFunction(getCredentials, fetchImpl = globalThis.f
58
94
  };
59
95
  }
60
96
  function createAmazonBedrockMantle(options = {}) {
61
- var _a, _b, _c;
97
+ var _a, _b, _c, _d, _e, _f, _g, _h;
98
+ const region = (_b = (_a = options.region) != null ? _a : (0, import_provider_utils.loadOptionalSetting)({
99
+ settingValue: void 0,
100
+ environmentVariableName: "AWS_REGION"
101
+ })) != null ? _b : "us-east-1";
62
102
  const rawApiKey = (0, import_provider_utils.loadOptionalSetting)({
63
103
  settingValue: options.apiKey,
64
104
  environmentVariableName: "AWS_BEARER_TOKEN_BEDROCK"
65
105
  });
66
106
  const apiKey = rawApiKey && rawApiKey.trim().length > 0 ? rawApiKey.trim() : void 0;
67
- const region = (0, import_provider_utils.loadSetting)({
68
- settingValue: options.region,
69
- settingName: "region",
70
- environmentVariableName: "AWS_REGION",
71
- description: "AWS region"
72
- });
73
107
  let fetchFunction;
74
108
  if (apiKey) {
75
- fetchFunction = (_a = options.fetch) != null ? _a : globalThis.fetch;
109
+ fetchFunction = (_c = options.fetch) != null ? _c : globalThis.fetch;
110
+ } else if (options.profile) {
111
+ const profileCredentials = loadCredentialsFromProfile(options.profile);
112
+ fetchFunction = createMantleSigV4FetchFunction(async () => {
113
+ return {
114
+ ...profileCredentials,
115
+ region
116
+ };
117
+ }, options.fetch);
76
118
  } else if (options.credentialProvider) {
77
119
  fetchFunction = createMantleSigV4FetchFunction(async () => {
78
120
  return {
@@ -81,31 +123,35 @@ function createAmazonBedrockMantle(options = {}) {
81
123
  };
82
124
  }, options.fetch);
83
125
  } else {
126
+ const accessKeyId = (_d = options.accessKeyId) != null ? _d : (0, import_provider_utils.loadOptionalSetting)({
127
+ settingValue: void 0,
128
+ environmentVariableName: "AWS_ACCESS_KEY_ID"
129
+ });
130
+ const secretAccessKey = (_e = options.secretAccessKey) != null ? _e : (0, import_provider_utils.loadOptionalSetting)({
131
+ settingValue: void 0,
132
+ environmentVariableName: "AWS_SECRET_ACCESS_KEY"
133
+ });
134
+ const sessionToken = (_f = options.sessionToken) != null ? _f : (0, import_provider_utils.loadOptionalSetting)({
135
+ settingValue: void 0,
136
+ environmentVariableName: "AWS_SESSION_TOKEN"
137
+ });
138
+ if (!accessKeyId || !secretAccessKey) {
139
+ throw new Error(
140
+ "AWS credentials are required. Please provide either:\n1. Set AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY environment variables\n2. Provide accessKeyId and secretAccessKey in options\n3. Use a credentialProvider function\n4. Use API key authentication with AWS_BEARER_TOKEN_BEDROCK or apiKey option"
141
+ );
142
+ }
84
143
  fetchFunction = createMantleSigV4FetchFunction(async () => {
85
144
  return {
86
145
  region,
87
- accessKeyId: (0, import_provider_utils.loadSetting)({
88
- settingValue: options.accessKeyId,
89
- settingName: "accessKeyId",
90
- environmentVariableName: "AWS_ACCESS_KEY_ID",
91
- description: "AWS access key ID"
92
- }),
93
- secretAccessKey: (0, import_provider_utils.loadSetting)({
94
- settingValue: options.secretAccessKey,
95
- settingName: "secretAccessKey",
96
- environmentVariableName: "AWS_SECRET_ACCESS_KEY",
97
- description: "AWS secret access key"
98
- }),
99
- sessionToken: (0, import_provider_utils.loadOptionalSetting)({
100
- settingValue: options.sessionToken,
101
- environmentVariableName: "AWS_SESSION_TOKEN"
102
- })
146
+ accessKeyId,
147
+ secretAccessKey,
148
+ sessionToken
103
149
  };
104
150
  }, options.fetch);
105
151
  }
106
- const baseURL = (_c = (0, import_provider_utils.withoutTrailingSlash)(
107
- (_b = options.baseURL) != null ? _b : `https://bedrock-mantle.${region}.api.aws/v1`
108
- )) != null ? _c : `https://bedrock-mantle.us-east-1.api.aws/v1`;
152
+ const baseURL = (_h = (0, import_provider_utils.withoutTrailingSlash)(
153
+ (_g = options.baseURL) != null ? _g : `https://bedrock-mantle.${region}.api.aws/v1`
154
+ )) != null ? _h : `https://bedrock-mantle.us-east-1.api.aws/v1`;
109
155
  const mantleProvider = (0, import_openai_compatible.createOpenAICompatible)({
110
156
  baseURL,
111
157
  name: "amazon-bedrock-mantle",
@@ -132,7 +178,7 @@ function createAmazonBedrockMantle(options = {}) {
132
178
  var bedrockMantle = createAmazonBedrockMantle();
133
179
 
134
180
  // src/version.ts
135
- var VERSION = true ? "0.0.1" : "0.0.0-test";
181
+ var VERSION = true ? "0.0.3" : "0.0.0-test";
136
182
  // Annotate the CommonJS export names for ESM import in node:
137
183
  0 && (module.exports = {
138
184
  VERSION,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/bedrock-mantle-provider.ts","../src/version.ts"],"sourcesContent":["export {\n bedrockMantle,\n createAmazonBedrockMantle,\n} from './bedrock-mantle-provider';\nexport type {\n AmazonBedrockMantleProvider,\n AmazonBedrockMantleProviderSettings,\n BedrockMantleChatModelId,\n} from './bedrock-mantle-provider';\nexport { VERSION } from './version';\n","import {\n EmbeddingModelV3,\n ImageModelV3,\n LanguageModelV3,\n ProviderV3,\n} from '@ai-sdk/provider';\nimport {\n FetchFunction,\n loadOptionalSetting,\n loadSetting,\n withoutTrailingSlash,\n} from '@ai-sdk/provider-utils';\nimport {\n createOpenAICompatible,\n OpenAICompatibleProvider,\n} from '@ai-sdk/openai-compatible';\nimport { AwsV4Signer } from 'aws4fetch';\n\nexport interface AmazonBedrockMantleProviderSettings {\n /**\n * The AWS region to use for the Bedrock Mantle provider. Defaults to the value of the\n * `AWS_REGION` environment variable.\n */\n region?: string;\n\n /**\n * API key for authenticating requests using Bearer token authentication.\n * When provided, this will be used instead of AWS SigV4 authentication.\n * Defaults to the value of the `AWS_BEARER_TOKEN_BEDROCK` environment variable.\n *\n * Note: When `apiKey` is provided, it takes precedence over AWS SigV4 authentication.\n * If neither `apiKey` nor `AWS_BEARER_TOKEN_BEDROCK` environment variable is set,\n * the provider will fall back to AWS SigV4 authentication using AWS credentials.\n */\n apiKey?: string;\n\n /**\n * The AWS access key ID to use for the Bedrock Mantle provider. Defaults to the value of the\n * `AWS_ACCESS_KEY_ID` environment variable.\n */\n accessKeyId?: string;\n\n /**\n * The AWS secret access key to use for the Bedrock Mantle provider. Defaults to the value of the\n * `AWS_SECRET_ACCESS_KEY` environment variable.\n */\n secretAccessKey?: string;\n\n /**\n * The AWS session token to use for the Bedrock Mantle provider. Defaults to the value of the\n * `AWS_SESSION_TOKEN` environment variable.\n */\n sessionToken?: string;\n\n /**\n * The AWS profile to use for loading credentials from the AWS CLI configuration.\n * When specified, credentials will be loaded from ~/.aws/credentials for the given profile.\n * This takes precedence over static credentials but is overridden by `apiKey`.\n */\n profile?: string;\n\n /**\n * Base URL for the Bedrock Mantle API calls. Defaults to the bedrock-mantle endpoint.\n */\n baseURL?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n\n /**\n * The AWS credential provider to use for the Bedrock Mantle provider to get dynamic\n * credentials similar to the AWS SDK. Setting a provider here will cause its\n * credential values to be used instead of the `accessKeyId`, `secretAccessKey`,\n * and `sessionToken` settings.\n */\n credentialProvider?: () => PromiseLike<{\n accessKeyId: string;\n secretAccessKey: string;\n sessionToken?: string;\n }>;\n}\n\nexport type BedrockMantleChatModelId = string;\nexport type BedrockMantleEmbeddingModelId = string;\nexport type BedrockMantleImageModelId = string;\n\nexport interface AmazonBedrockMantleProvider extends ProviderV3 {\n (modelId: BedrockMantleChatModelId): LanguageModelV3;\n\n languageModel(modelId: BedrockMantleChatModelId): LanguageModelV3;\n\n chatModel(modelId: BedrockMantleChatModelId): LanguageModelV3;\n\n embeddingModel(modelId: BedrockMantleEmbeddingModelId): EmbeddingModelV3;\n\n imageModel(modelId: BedrockMantleImageModelId): ImageModelV3;\n}\n\ninterface BedrockCredentials {\n region: string;\n accessKeyId: string;\n secretAccessKey: string;\n sessionToken?: string;\n}\n\n/**\n * Creates a fetch function that applies AWS Signature Version 4 signing for bedrock-mantle service.\n *\n * @param getCredentials - Function that returns the AWS credentials to use when signing.\n * @param fetchImpl - Optional original fetch implementation to wrap. Defaults to global fetch.\n * @returns A FetchFunction that signs requests before passing them to the underlying fetch.\n */\nfunction createMantleSigV4FetchFunction(\n getCredentials: () => BedrockCredentials | PromiseLike<BedrockCredentials>,\n fetchImpl: FetchFunction = globalThis.fetch,\n): FetchFunction {\n return async (\n input: RequestInfo | URL,\n init?: RequestInit,\n ): Promise<Response> => {\n const url =\n typeof input === 'string'\n ? input\n : input instanceof URL\n ? input.href\n : input.url;\n\n const body =\n typeof init?.body === 'string'\n ? init.body\n : init?.body\n ? JSON.stringify(init.body)\n : undefined;\n\n const headers = init?.headers ?? {};\n const headerEntries =\n headers instanceof Headers\n ? Array.from(headers.entries())\n : Array.isArray(headers)\n ? headers\n : Object.entries(headers);\n\n const credentials = await getCredentials();\n const signer = new AwsV4Signer({\n url,\n method: init?.method ?? 'POST',\n headers: headerEntries,\n body,\n region: credentials.region,\n accessKeyId: credentials.accessKeyId,\n secretAccessKey: credentials.secretAccessKey,\n sessionToken: credentials.sessionToken,\n service: 'bedrock-mantle',\n });\n\n const signed = await signer.sign();\n return fetchImpl(input, {\n ...init,\n body,\n headers: Object.fromEntries(signed.headers.entries()),\n });\n };\n}\n\n/**\n * Create an Amazon Bedrock Mantle provider instance.\n * Bedrock Mantle is AWS Bedrock's OpenAI-compatible endpoint that routes all requests\n * through bedrock-mantle.<region>.api.aws/v1 using OpenAI API format.\n */\nexport function createAmazonBedrockMantle(\n options: AmazonBedrockMantleProviderSettings = {},\n): AmazonBedrockMantleProvider {\n // Check for API key authentication first\n const rawApiKey = loadOptionalSetting({\n settingValue: options.apiKey,\n environmentVariableName: 'AWS_BEARER_TOKEN_BEDROCK',\n });\n\n // Only use API key if it's a non-empty, non-whitespace string\n const apiKey =\n rawApiKey && rawApiKey.trim().length > 0 ? rawApiKey.trim() : undefined;\n\n const region = loadSetting({\n settingValue: options.region,\n settingName: 'region',\n environmentVariableName: 'AWS_REGION',\n description: 'AWS region',\n });\n\n // Use API key authentication if available, otherwise fall back to SigV4\n let fetchFunction: FetchFunction;\n if (apiKey) {\n fetchFunction = options.fetch ?? globalThis.fetch;\n } else if (options.credentialProvider) {\n fetchFunction = createMantleSigV4FetchFunction(async () => {\n return {\n ...(await options.credentialProvider!()),\n region,\n };\n }, options.fetch);\n } else {\n fetchFunction = createMantleSigV4FetchFunction(async () => {\n return {\n region,\n accessKeyId: loadSetting({\n settingValue: options.accessKeyId,\n settingName: 'accessKeyId',\n environmentVariableName: 'AWS_ACCESS_KEY_ID',\n description: 'AWS access key ID',\n }),\n secretAccessKey: loadSetting({\n settingValue: options.secretAccessKey,\n settingName: 'secretAccessKey',\n environmentVariableName: 'AWS_SECRET_ACCESS_KEY',\n description: 'AWS secret access key',\n }),\n sessionToken: loadOptionalSetting({\n settingValue: options.sessionToken,\n environmentVariableName: 'AWS_SESSION_TOKEN',\n }),\n };\n }, options.fetch);\n }\n\n const baseURL =\n withoutTrailingSlash(\n options.baseURL ?? `https://bedrock-mantle.${region}.api.aws/v1`,\n ) ?? `https://bedrock-mantle.us-east-1.api.aws/v1`;\n\n // Create the OpenAI-compatible provider\n const mantleProvider: OpenAICompatibleProvider<\n string,\n string,\n string,\n string\n > = createOpenAICompatible({\n baseURL,\n name: 'amazon-bedrock-mantle',\n apiKey: apiKey ?? 'dummy-key-for-sigv4',\n fetch: fetchFunction,\n headers: options.headers,\n includeUsage: true,\n });\n\n const provider = function (modelId: BedrockMantleChatModelId) {\n if (new.target) {\n throw new Error(\n 'The Amazon Bedrock Mantle model function cannot be called with the new keyword.',\n );\n }\n return mantleProvider.languageModel(modelId);\n };\n\n provider.specificationVersion = 'v3' as const;\n provider.languageModel = mantleProvider.languageModel;\n provider.chatModel = mantleProvider.languageModel;\n provider.embeddingModel = mantleProvider.embeddingModel;\n provider.imageModel = mantleProvider.imageModel;\n\n return provider as AmazonBedrockMantleProvider;\n}\n\n/**\n * Default Bedrock Mantle provider instance.\n */\nexport const bedrockMantle = createAmazonBedrockMantle();\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/index.ts","../src/bedrock-mantle-provider.ts","../src/version.ts"],"sourcesContent":["export {\n bedrockMantle,\n createAmazonBedrockMantle,\n} from './bedrock-mantle-provider';\nexport type {\n AmazonBedrockMantleProvider,\n AmazonBedrockMantleProviderSettings,\n BedrockMantleChatModelId,\n} from './bedrock-mantle-provider';\nexport { VERSION } from './version';\n","import {\n EmbeddingModelV3,\n ImageModelV3,\n LanguageModelV3,\n ProviderV3,\n} from '@ai-sdk/provider';\nimport {\n FetchFunction,\n loadOptionalSetting,\n withoutTrailingSlash,\n} from '@ai-sdk/provider-utils';\nimport {\n createOpenAICompatible,\n OpenAICompatibleProvider,\n} from '@ai-sdk/openai-compatible';\nimport { AwsV4Signer } from 'aws4fetch';\nimport { readFileSync, existsSync } from 'fs';\nimport { resolve } from 'path';\nimport { homedir } from 'os';\n\nfunction loadCredentialsFromProfile(profile: string): {\n accessKeyId: string;\n secretAccessKey: string;\n sessionToken?: string;\n} {\n const credentialsPath = resolve(homedir(), '.aws', 'credentials');\n\n if (!existsSync(credentialsPath)) {\n throw new Error(`AWS credentials file not found at ${credentialsPath}`);\n }\n\n const credentialsContent = readFileSync(credentialsPath, 'utf-8');\n const lines = credentialsContent.split('\\n');\n\n let currentProfile = '';\n let accessKeyId = '';\n let secretAccessKey = '';\n let sessionToken: string | undefined;\n\n for (const line of lines) {\n const trimmedLine = line.trim();\n\n if (trimmedLine.startsWith('[') && trimmedLine.endsWith(']')) {\n currentProfile = trimmedLine.slice(1, -1);\n } else if (currentProfile === profile) {\n if (trimmedLine.startsWith('aws_access_key_id')) {\n accessKeyId = trimmedLine.split('=')[1]?.trim() || '';\n } else if (trimmedLine.startsWith('aws_secret_access_key')) {\n secretAccessKey = trimmedLine.split('=')[1]?.trim() || '';\n } else if (trimmedLine.startsWith('aws_session_token')) {\n sessionToken = trimmedLine.split('=')[1]?.trim();\n }\n }\n }\n\n if (!accessKeyId || !secretAccessKey) {\n throw new Error(\n `AWS profile '${profile}' not found in credentials file or missing access key/secret`,\n );\n }\n\n return { accessKeyId, secretAccessKey, sessionToken };\n}\n\nexport interface AmazonBedrockMantleProviderSettings {\n /**\n * The AWS region to use for the Bedrock Mantle provider. Defaults to 'us-east-1'.\n */\n region?: string;\n\n /**\n * API key for authenticating requests using Bearer token authentication.\n * When provided, this will be used instead of AWS SigV4 authentication.\n * Defaults to the value of the `AWS_BEARER_TOKEN_BEDROCK` environment variable.\n *\n * Note: When `apiKey` is provided, it takes precedence over AWS SigV4 authentication.\n * If neither `apiKey` nor `AWS_BEARER_TOKEN_BEDROCK` environment variable is set,\n * the provider will fall back to AWS SigV4 authentication using AWS credentials.\n */\n apiKey?: string;\n\n /**\n * The AWS access key ID to use for the Bedrock Mantle provider. Defaults to the value of the\n * `AWS_ACCESS_KEY_ID` environment variable.\n */\n accessKeyId?: string;\n\n /**\n * The AWS secret access key to use for the Bedrock Mantle provider. Defaults to the value of the\n * `AWS_SECRET_ACCESS_KEY` environment variable.\n */\n secretAccessKey?: string;\n\n /**\n * The AWS session token to use for the Bedrock Mantle provider. Defaults to the value of the\n * `AWS_SESSION_TOKEN` environment variable.\n */\n sessionToken?: string;\n\n /**\n * The AWS profile to use for loading credentials from the AWS CLI configuration.\n * When specified, credentials will be loaded from ~/.aws/credentials for the given profile.\n * This takes precedence over static credentials but is overridden by `apiKey`.\n */\n profile?: string;\n\n /**\n * Base URL for the Bedrock Mantle API calls. Defaults to the bedrock-mantle endpoint.\n */\n baseURL?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n\n /**\n * The AWS credential provider to use for the Bedrock Mantle provider to get dynamic\n * credentials similar to the AWS SDK. Setting a provider here will cause its\n * credential values to be used instead of the `accessKeyId`, `secretAccessKey`,\n * and `sessionToken` settings.\n */\n credentialProvider?: () => PromiseLike<{\n accessKeyId: string;\n secretAccessKey: string;\n sessionToken?: string;\n }>;\n}\n\nexport type BedrockMantleChatModelId = string;\nexport type BedrockMantleEmbeddingModelId = string;\nexport type BedrockMantleImageModelId = string;\n\nexport interface AmazonBedrockMantleProvider extends ProviderV3 {\n (modelId: BedrockMantleChatModelId): LanguageModelV3;\n\n languageModel(modelId: BedrockMantleChatModelId): LanguageModelV3;\n\n chatModel(modelId: BedrockMantleChatModelId): LanguageModelV3;\n\n embeddingModel(modelId: BedrockMantleEmbeddingModelId): EmbeddingModelV3;\n\n imageModel(modelId: BedrockMantleImageModelId): ImageModelV3;\n}\n\ninterface BedrockCredentials {\n region: string;\n accessKeyId: string;\n secretAccessKey: string;\n sessionToken?: string;\n}\n\n/**\n * Creates a fetch function that applies AWS Signature Version 4 signing for bedrock-mantle service.\n *\n * @param getCredentials - Function that returns the AWS credentials to use when signing.\n * @param fetchImpl - Optional original fetch implementation to wrap. Defaults to global fetch.\n * @returns A FetchFunction that signs requests before passing them to the underlying fetch.\n */\nfunction createMantleSigV4FetchFunction(\n getCredentials: () => BedrockCredentials | PromiseLike<BedrockCredentials>,\n fetchImpl: FetchFunction = globalThis.fetch,\n): FetchFunction {\n return async (\n input: RequestInfo | URL,\n init?: RequestInit,\n ): Promise<Response> => {\n const url =\n typeof input === 'string'\n ? input\n : input instanceof URL\n ? input.href\n : input.url;\n\n const body =\n typeof init?.body === 'string'\n ? init.body\n : init?.body\n ? JSON.stringify(init.body)\n : undefined;\n\n const headers = init?.headers ?? {};\n const headerEntries =\n headers instanceof Headers\n ? Array.from(headers.entries())\n : Array.isArray(headers)\n ? headers\n : Object.entries(headers);\n\n const credentials = await getCredentials();\n const signer = new AwsV4Signer({\n url,\n method: init?.method ?? 'POST',\n headers: headerEntries,\n body,\n region: credentials.region,\n accessKeyId: credentials.accessKeyId,\n secretAccessKey: credentials.secretAccessKey,\n sessionToken: credentials.sessionToken,\n service: 'bedrock-mantle',\n });\n\n const signed = await signer.sign();\n return fetchImpl(input, {\n ...init,\n body,\n headers: Object.fromEntries(signed.headers.entries()),\n });\n };\n}\n\n/**\n * Create an Amazon Bedrock Mantle provider instance.\n * Bedrock Mantle is AWS Bedrock's OpenAI-compatible endpoint that routes all requests\n * through bedrock-mantle.<region>.api.aws/v1 using OpenAI API format.\n */\nexport function createAmazonBedrockMantle(\n options: AmazonBedrockMantleProviderSettings = {},\n): AmazonBedrockMantleProvider {\n // Get region - use option first, then environment variable, then default to us-east-1\n const region =\n options.region ??\n loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: 'AWS_REGION',\n }) ??\n 'us-east-1';\n\n // Check for API key authentication\n const rawApiKey = loadOptionalSetting({\n settingValue: options.apiKey,\n environmentVariableName: 'AWS_BEARER_TOKEN_BEDROCK',\n });\n\n // Only use API key if it's a non-empty, non-whitespace string\n const apiKey =\n rawApiKey && rawApiKey.trim().length > 0 ? rawApiKey.trim() : undefined;\n\n // Use API key authentication if available, otherwise fall back to SigV4\n let fetchFunction: FetchFunction;\n if (apiKey) {\n fetchFunction = options.fetch ?? globalThis.fetch;\n } else if (options.profile) {\n // Load credentials from AWS profile\n const profileCredentials = loadCredentialsFromProfile(options.profile);\n fetchFunction = createMantleSigV4FetchFunction(async () => {\n return {\n ...profileCredentials,\n region,\n };\n }, options.fetch);\n } else if (options.credentialProvider) {\n fetchFunction = createMantleSigV4FetchFunction(async () => {\n return {\n ...(await options.credentialProvider!()),\n region,\n };\n }, options.fetch);\n } else {\n // For static credentials, load from options or environment variables\n const accessKeyId =\n options.accessKeyId ??\n loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: 'AWS_ACCESS_KEY_ID',\n });\n\n const secretAccessKey =\n options.secretAccessKey ??\n loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: 'AWS_SECRET_ACCESS_KEY',\n });\n\n const sessionToken =\n options.sessionToken ??\n loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: 'AWS_SESSION_TOKEN',\n });\n\n if (!accessKeyId || !secretAccessKey) {\n throw new Error(\n 'AWS credentials are required. Please provide either:\\n' +\n '1. Set AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY environment variables\\n' +\n '2. Provide accessKeyId and secretAccessKey in options\\n' +\n '3. Use a credentialProvider function\\n' +\n '4. Use API key authentication with AWS_BEARER_TOKEN_BEDROCK or apiKey option',\n );\n }\n\n fetchFunction = createMantleSigV4FetchFunction(async () => {\n return {\n region,\n accessKeyId: accessKeyId!,\n secretAccessKey: secretAccessKey!,\n sessionToken,\n };\n }, options.fetch);\n }\n\n const baseURL =\n withoutTrailingSlash(\n options.baseURL ?? `https://bedrock-mantle.${region}.api.aws/v1`,\n ) ?? `https://bedrock-mantle.us-east-1.api.aws/v1`;\n\n // Create the OpenAI-compatible provider\n const mantleProvider: OpenAICompatibleProvider<\n string,\n string,\n string,\n string\n > = createOpenAICompatible({\n baseURL,\n name: 'amazon-bedrock-mantle',\n apiKey: apiKey ?? 'dummy-key-for-sigv4',\n fetch: fetchFunction,\n headers: options.headers,\n includeUsage: true,\n });\n\n const provider = function (modelId: BedrockMantleChatModelId) {\n if (new.target) {\n throw new Error(\n 'The Amazon Bedrock Mantle model function cannot be called with the new keyword.',\n );\n }\n return mantleProvider.languageModel(modelId);\n };\n\n provider.specificationVersion = 'v3' as const;\n provider.languageModel = mantleProvider.languageModel;\n provider.chatModel = mantleProvider.languageModel;\n provider.embeddingModel = mantleProvider.embeddingModel;\n provider.imageModel = mantleProvider.imageModel;\n\n return provider as AmazonBedrockMantleProvider;\n}\n\n/**\n * Default Bedrock Mantle provider instance.\n */\nexport const bedrockMantle = createAmazonBedrockMantle();\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n"],"mappings":"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","names":[]}
package/dist/index.mjs CHANGED
@@ -1,13 +1,48 @@
1
1
  // src/bedrock-mantle-provider.ts
2
2
  import {
3
3
  loadOptionalSetting,
4
- loadSetting,
5
4
  withoutTrailingSlash
6
5
  } from "@ai-sdk/provider-utils";
7
6
  import {
8
7
  createOpenAICompatible
9
8
  } from "@ai-sdk/openai-compatible";
10
9
  import { AwsV4Signer } from "aws4fetch";
10
+ import { readFileSync, existsSync } from "fs";
11
+ import { resolve } from "path";
12
+ import { homedir } from "os";
13
+ function loadCredentialsFromProfile(profile) {
14
+ var _a, _b, _c;
15
+ const credentialsPath = resolve(homedir(), ".aws", "credentials");
16
+ if (!existsSync(credentialsPath)) {
17
+ throw new Error(`AWS credentials file not found at ${credentialsPath}`);
18
+ }
19
+ const credentialsContent = readFileSync(credentialsPath, "utf-8");
20
+ const lines = credentialsContent.split("\n");
21
+ let currentProfile = "";
22
+ let accessKeyId = "";
23
+ let secretAccessKey = "";
24
+ let sessionToken;
25
+ for (const line of lines) {
26
+ const trimmedLine = line.trim();
27
+ if (trimmedLine.startsWith("[") && trimmedLine.endsWith("]")) {
28
+ currentProfile = trimmedLine.slice(1, -1);
29
+ } else if (currentProfile === profile) {
30
+ if (trimmedLine.startsWith("aws_access_key_id")) {
31
+ accessKeyId = ((_a = trimmedLine.split("=")[1]) == null ? void 0 : _a.trim()) || "";
32
+ } else if (trimmedLine.startsWith("aws_secret_access_key")) {
33
+ secretAccessKey = ((_b = trimmedLine.split("=")[1]) == null ? void 0 : _b.trim()) || "";
34
+ } else if (trimmedLine.startsWith("aws_session_token")) {
35
+ sessionToken = (_c = trimmedLine.split("=")[1]) == null ? void 0 : _c.trim();
36
+ }
37
+ }
38
+ }
39
+ if (!accessKeyId || !secretAccessKey) {
40
+ throw new Error(
41
+ `AWS profile '${profile}' not found in credentials file or missing access key/secret`
42
+ );
43
+ }
44
+ return { accessKeyId, secretAccessKey, sessionToken };
45
+ }
11
46
  function createMantleSigV4FetchFunction(getCredentials, fetchImpl = globalThis.fetch) {
12
47
  return async (input, init) => {
13
48
  var _a, _b;
@@ -36,21 +71,27 @@ function createMantleSigV4FetchFunction(getCredentials, fetchImpl = globalThis.f
36
71
  };
37
72
  }
38
73
  function createAmazonBedrockMantle(options = {}) {
39
- var _a, _b, _c;
74
+ var _a, _b, _c, _d, _e, _f, _g, _h;
75
+ const region = (_b = (_a = options.region) != null ? _a : loadOptionalSetting({
76
+ settingValue: void 0,
77
+ environmentVariableName: "AWS_REGION"
78
+ })) != null ? _b : "us-east-1";
40
79
  const rawApiKey = loadOptionalSetting({
41
80
  settingValue: options.apiKey,
42
81
  environmentVariableName: "AWS_BEARER_TOKEN_BEDROCK"
43
82
  });
44
83
  const apiKey = rawApiKey && rawApiKey.trim().length > 0 ? rawApiKey.trim() : void 0;
45
- const region = loadSetting({
46
- settingValue: options.region,
47
- settingName: "region",
48
- environmentVariableName: "AWS_REGION",
49
- description: "AWS region"
50
- });
51
84
  let fetchFunction;
52
85
  if (apiKey) {
53
- fetchFunction = (_a = options.fetch) != null ? _a : globalThis.fetch;
86
+ fetchFunction = (_c = options.fetch) != null ? _c : globalThis.fetch;
87
+ } else if (options.profile) {
88
+ const profileCredentials = loadCredentialsFromProfile(options.profile);
89
+ fetchFunction = createMantleSigV4FetchFunction(async () => {
90
+ return {
91
+ ...profileCredentials,
92
+ region
93
+ };
94
+ }, options.fetch);
54
95
  } else if (options.credentialProvider) {
55
96
  fetchFunction = createMantleSigV4FetchFunction(async () => {
56
97
  return {
@@ -59,31 +100,35 @@ function createAmazonBedrockMantle(options = {}) {
59
100
  };
60
101
  }, options.fetch);
61
102
  } else {
103
+ const accessKeyId = (_d = options.accessKeyId) != null ? _d : loadOptionalSetting({
104
+ settingValue: void 0,
105
+ environmentVariableName: "AWS_ACCESS_KEY_ID"
106
+ });
107
+ const secretAccessKey = (_e = options.secretAccessKey) != null ? _e : loadOptionalSetting({
108
+ settingValue: void 0,
109
+ environmentVariableName: "AWS_SECRET_ACCESS_KEY"
110
+ });
111
+ const sessionToken = (_f = options.sessionToken) != null ? _f : loadOptionalSetting({
112
+ settingValue: void 0,
113
+ environmentVariableName: "AWS_SESSION_TOKEN"
114
+ });
115
+ if (!accessKeyId || !secretAccessKey) {
116
+ throw new Error(
117
+ "AWS credentials are required. Please provide either:\n1. Set AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY environment variables\n2. Provide accessKeyId and secretAccessKey in options\n3. Use a credentialProvider function\n4. Use API key authentication with AWS_BEARER_TOKEN_BEDROCK or apiKey option"
118
+ );
119
+ }
62
120
  fetchFunction = createMantleSigV4FetchFunction(async () => {
63
121
  return {
64
122
  region,
65
- accessKeyId: loadSetting({
66
- settingValue: options.accessKeyId,
67
- settingName: "accessKeyId",
68
- environmentVariableName: "AWS_ACCESS_KEY_ID",
69
- description: "AWS access key ID"
70
- }),
71
- secretAccessKey: loadSetting({
72
- settingValue: options.secretAccessKey,
73
- settingName: "secretAccessKey",
74
- environmentVariableName: "AWS_SECRET_ACCESS_KEY",
75
- description: "AWS secret access key"
76
- }),
77
- sessionToken: loadOptionalSetting({
78
- settingValue: options.sessionToken,
79
- environmentVariableName: "AWS_SESSION_TOKEN"
80
- })
123
+ accessKeyId,
124
+ secretAccessKey,
125
+ sessionToken
81
126
  };
82
127
  }, options.fetch);
83
128
  }
84
- const baseURL = (_c = withoutTrailingSlash(
85
- (_b = options.baseURL) != null ? _b : `https://bedrock-mantle.${region}.api.aws/v1`
86
- )) != null ? _c : `https://bedrock-mantle.us-east-1.api.aws/v1`;
129
+ const baseURL = (_h = withoutTrailingSlash(
130
+ (_g = options.baseURL) != null ? _g : `https://bedrock-mantle.${region}.api.aws/v1`
131
+ )) != null ? _h : `https://bedrock-mantle.us-east-1.api.aws/v1`;
87
132
  const mantleProvider = createOpenAICompatible({
88
133
  baseURL,
89
134
  name: "amazon-bedrock-mantle",
@@ -110,7 +155,7 @@ function createAmazonBedrockMantle(options = {}) {
110
155
  var bedrockMantle = createAmazonBedrockMantle();
111
156
 
112
157
  // src/version.ts
113
- var VERSION = true ? "0.0.1" : "0.0.0-test";
158
+ var VERSION = true ? "0.0.3" : "0.0.0-test";
114
159
  export {
115
160
  VERSION,
116
161
  bedrockMantle,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/bedrock-mantle-provider.ts","../src/version.ts"],"sourcesContent":["import {\n EmbeddingModelV3,\n ImageModelV3,\n LanguageModelV3,\n ProviderV3,\n} from '@ai-sdk/provider';\nimport {\n FetchFunction,\n loadOptionalSetting,\n loadSetting,\n withoutTrailingSlash,\n} from '@ai-sdk/provider-utils';\nimport {\n createOpenAICompatible,\n OpenAICompatibleProvider,\n} from '@ai-sdk/openai-compatible';\nimport { AwsV4Signer } from 'aws4fetch';\n\nexport interface AmazonBedrockMantleProviderSettings {\n /**\n * The AWS region to use for the Bedrock Mantle provider. Defaults to the value of the\n * `AWS_REGION` environment variable.\n */\n region?: string;\n\n /**\n * API key for authenticating requests using Bearer token authentication.\n * When provided, this will be used instead of AWS SigV4 authentication.\n * Defaults to the value of the `AWS_BEARER_TOKEN_BEDROCK` environment variable.\n *\n * Note: When `apiKey` is provided, it takes precedence over AWS SigV4 authentication.\n * If neither `apiKey` nor `AWS_BEARER_TOKEN_BEDROCK` environment variable is set,\n * the provider will fall back to AWS SigV4 authentication using AWS credentials.\n */\n apiKey?: string;\n\n /**\n * The AWS access key ID to use for the Bedrock Mantle provider. Defaults to the value of the\n * `AWS_ACCESS_KEY_ID` environment variable.\n */\n accessKeyId?: string;\n\n /**\n * The AWS secret access key to use for the Bedrock Mantle provider. Defaults to the value of the\n * `AWS_SECRET_ACCESS_KEY` environment variable.\n */\n secretAccessKey?: string;\n\n /**\n * The AWS session token to use for the Bedrock Mantle provider. Defaults to the value of the\n * `AWS_SESSION_TOKEN` environment variable.\n */\n sessionToken?: string;\n\n /**\n * The AWS profile to use for loading credentials from the AWS CLI configuration.\n * When specified, credentials will be loaded from ~/.aws/credentials for the given profile.\n * This takes precedence over static credentials but is overridden by `apiKey`.\n */\n profile?: string;\n\n /**\n * Base URL for the Bedrock Mantle API calls. Defaults to the bedrock-mantle endpoint.\n */\n baseURL?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n\n /**\n * The AWS credential provider to use for the Bedrock Mantle provider to get dynamic\n * credentials similar to the AWS SDK. Setting a provider here will cause its\n * credential values to be used instead of the `accessKeyId`, `secretAccessKey`,\n * and `sessionToken` settings.\n */\n credentialProvider?: () => PromiseLike<{\n accessKeyId: string;\n secretAccessKey: string;\n sessionToken?: string;\n }>;\n}\n\nexport type BedrockMantleChatModelId = string;\nexport type BedrockMantleEmbeddingModelId = string;\nexport type BedrockMantleImageModelId = string;\n\nexport interface AmazonBedrockMantleProvider extends ProviderV3 {\n (modelId: BedrockMantleChatModelId): LanguageModelV3;\n\n languageModel(modelId: BedrockMantleChatModelId): LanguageModelV3;\n\n chatModel(modelId: BedrockMantleChatModelId): LanguageModelV3;\n\n embeddingModel(modelId: BedrockMantleEmbeddingModelId): EmbeddingModelV3;\n\n imageModel(modelId: BedrockMantleImageModelId): ImageModelV3;\n}\n\ninterface BedrockCredentials {\n region: string;\n accessKeyId: string;\n secretAccessKey: string;\n sessionToken?: string;\n}\n\n/**\n * Creates a fetch function that applies AWS Signature Version 4 signing for bedrock-mantle service.\n *\n * @param getCredentials - Function that returns the AWS credentials to use when signing.\n * @param fetchImpl - Optional original fetch implementation to wrap. Defaults to global fetch.\n * @returns A FetchFunction that signs requests before passing them to the underlying fetch.\n */\nfunction createMantleSigV4FetchFunction(\n getCredentials: () => BedrockCredentials | PromiseLike<BedrockCredentials>,\n fetchImpl: FetchFunction = globalThis.fetch,\n): FetchFunction {\n return async (\n input: RequestInfo | URL,\n init?: RequestInit,\n ): Promise<Response> => {\n const url =\n typeof input === 'string'\n ? input\n : input instanceof URL\n ? input.href\n : input.url;\n\n const body =\n typeof init?.body === 'string'\n ? init.body\n : init?.body\n ? JSON.stringify(init.body)\n : undefined;\n\n const headers = init?.headers ?? {};\n const headerEntries =\n headers instanceof Headers\n ? Array.from(headers.entries())\n : Array.isArray(headers)\n ? headers\n : Object.entries(headers);\n\n const credentials = await getCredentials();\n const signer = new AwsV4Signer({\n url,\n method: init?.method ?? 'POST',\n headers: headerEntries,\n body,\n region: credentials.region,\n accessKeyId: credentials.accessKeyId,\n secretAccessKey: credentials.secretAccessKey,\n sessionToken: credentials.sessionToken,\n service: 'bedrock-mantle',\n });\n\n const signed = await signer.sign();\n return fetchImpl(input, {\n ...init,\n body,\n headers: Object.fromEntries(signed.headers.entries()),\n });\n };\n}\n\n/**\n * Create an Amazon Bedrock Mantle provider instance.\n * Bedrock Mantle is AWS Bedrock's OpenAI-compatible endpoint that routes all requests\n * through bedrock-mantle.<region>.api.aws/v1 using OpenAI API format.\n */\nexport function createAmazonBedrockMantle(\n options: AmazonBedrockMantleProviderSettings = {},\n): AmazonBedrockMantleProvider {\n // Check for API key authentication first\n const rawApiKey = loadOptionalSetting({\n settingValue: options.apiKey,\n environmentVariableName: 'AWS_BEARER_TOKEN_BEDROCK',\n });\n\n // Only use API key if it's a non-empty, non-whitespace string\n const apiKey =\n rawApiKey && rawApiKey.trim().length > 0 ? rawApiKey.trim() : undefined;\n\n const region = loadSetting({\n settingValue: options.region,\n settingName: 'region',\n environmentVariableName: 'AWS_REGION',\n description: 'AWS region',\n });\n\n // Use API key authentication if available, otherwise fall back to SigV4\n let fetchFunction: FetchFunction;\n if (apiKey) {\n fetchFunction = options.fetch ?? globalThis.fetch;\n } else if (options.credentialProvider) {\n fetchFunction = createMantleSigV4FetchFunction(async () => {\n return {\n ...(await options.credentialProvider!()),\n region,\n };\n }, options.fetch);\n } else {\n fetchFunction = createMantleSigV4FetchFunction(async () => {\n return {\n region,\n accessKeyId: loadSetting({\n settingValue: options.accessKeyId,\n settingName: 'accessKeyId',\n environmentVariableName: 'AWS_ACCESS_KEY_ID',\n description: 'AWS access key ID',\n }),\n secretAccessKey: loadSetting({\n settingValue: options.secretAccessKey,\n settingName: 'secretAccessKey',\n environmentVariableName: 'AWS_SECRET_ACCESS_KEY',\n description: 'AWS secret access key',\n }),\n sessionToken: loadOptionalSetting({\n settingValue: options.sessionToken,\n environmentVariableName: 'AWS_SESSION_TOKEN',\n }),\n };\n }, options.fetch);\n }\n\n const baseURL =\n withoutTrailingSlash(\n options.baseURL ?? `https://bedrock-mantle.${region}.api.aws/v1`,\n ) ?? `https://bedrock-mantle.us-east-1.api.aws/v1`;\n\n // Create the OpenAI-compatible provider\n const mantleProvider: OpenAICompatibleProvider<\n string,\n string,\n string,\n string\n > = createOpenAICompatible({\n baseURL,\n name: 'amazon-bedrock-mantle',\n apiKey: apiKey ?? 'dummy-key-for-sigv4',\n fetch: fetchFunction,\n headers: options.headers,\n includeUsage: true,\n });\n\n const provider = function (modelId: BedrockMantleChatModelId) {\n if (new.target) {\n throw new Error(\n 'The Amazon Bedrock Mantle model function cannot be called with the new keyword.',\n );\n }\n return mantleProvider.languageModel(modelId);\n };\n\n provider.specificationVersion = 'v3' as const;\n provider.languageModel = mantleProvider.languageModel;\n provider.chatModel = mantleProvider.languageModel;\n provider.embeddingModel = mantleProvider.embeddingModel;\n provider.imageModel = mantleProvider.imageModel;\n\n return provider as AmazonBedrockMantleProvider;\n}\n\n/**\n * Default Bedrock Mantle provider instance.\n */\nexport const bedrockMantle = createAmazonBedrockMantle();\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/bedrock-mantle-provider.ts","../src/version.ts"],"sourcesContent":["import {\n EmbeddingModelV3,\n ImageModelV3,\n LanguageModelV3,\n ProviderV3,\n} from '@ai-sdk/provider';\nimport {\n FetchFunction,\n loadOptionalSetting,\n withoutTrailingSlash,\n} from '@ai-sdk/provider-utils';\nimport {\n createOpenAICompatible,\n OpenAICompatibleProvider,\n} from '@ai-sdk/openai-compatible';\nimport { AwsV4Signer } from 'aws4fetch';\nimport { readFileSync, existsSync } from 'fs';\nimport { resolve } from 'path';\nimport { homedir } from 'os';\n\nfunction loadCredentialsFromProfile(profile: string): {\n accessKeyId: string;\n secretAccessKey: string;\n sessionToken?: string;\n} {\n const credentialsPath = resolve(homedir(), '.aws', 'credentials');\n\n if (!existsSync(credentialsPath)) {\n throw new Error(`AWS credentials file not found at ${credentialsPath}`);\n }\n\n const credentialsContent = readFileSync(credentialsPath, 'utf-8');\n const lines = credentialsContent.split('\\n');\n\n let currentProfile = '';\n let accessKeyId = '';\n let secretAccessKey = '';\n let sessionToken: string | undefined;\n\n for (const line of lines) {\n const trimmedLine = line.trim();\n\n if (trimmedLine.startsWith('[') && trimmedLine.endsWith(']')) {\n currentProfile = trimmedLine.slice(1, -1);\n } else if (currentProfile === profile) {\n if (trimmedLine.startsWith('aws_access_key_id')) {\n accessKeyId = trimmedLine.split('=')[1]?.trim() || '';\n } else if (trimmedLine.startsWith('aws_secret_access_key')) {\n secretAccessKey = trimmedLine.split('=')[1]?.trim() || '';\n } else if (trimmedLine.startsWith('aws_session_token')) {\n sessionToken = trimmedLine.split('=')[1]?.trim();\n }\n }\n }\n\n if (!accessKeyId || !secretAccessKey) {\n throw new Error(\n `AWS profile '${profile}' not found in credentials file or missing access key/secret`,\n );\n }\n\n return { accessKeyId, secretAccessKey, sessionToken };\n}\n\nexport interface AmazonBedrockMantleProviderSettings {\n /**\n * The AWS region to use for the Bedrock Mantle provider. Defaults to 'us-east-1'.\n */\n region?: string;\n\n /**\n * API key for authenticating requests using Bearer token authentication.\n * When provided, this will be used instead of AWS SigV4 authentication.\n * Defaults to the value of the `AWS_BEARER_TOKEN_BEDROCK` environment variable.\n *\n * Note: When `apiKey` is provided, it takes precedence over AWS SigV4 authentication.\n * If neither `apiKey` nor `AWS_BEARER_TOKEN_BEDROCK` environment variable is set,\n * the provider will fall back to AWS SigV4 authentication using AWS credentials.\n */\n apiKey?: string;\n\n /**\n * The AWS access key ID to use for the Bedrock Mantle provider. Defaults to the value of the\n * `AWS_ACCESS_KEY_ID` environment variable.\n */\n accessKeyId?: string;\n\n /**\n * The AWS secret access key to use for the Bedrock Mantle provider. Defaults to the value of the\n * `AWS_SECRET_ACCESS_KEY` environment variable.\n */\n secretAccessKey?: string;\n\n /**\n * The AWS session token to use for the Bedrock Mantle provider. Defaults to the value of the\n * `AWS_SESSION_TOKEN` environment variable.\n */\n sessionToken?: string;\n\n /**\n * The AWS profile to use for loading credentials from the AWS CLI configuration.\n * When specified, credentials will be loaded from ~/.aws/credentials for the given profile.\n * This takes precedence over static credentials but is overridden by `apiKey`.\n */\n profile?: string;\n\n /**\n * Base URL for the Bedrock Mantle API calls. Defaults to the bedrock-mantle endpoint.\n */\n baseURL?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n\n /**\n * The AWS credential provider to use for the Bedrock Mantle provider to get dynamic\n * credentials similar to the AWS SDK. Setting a provider here will cause its\n * credential values to be used instead of the `accessKeyId`, `secretAccessKey`,\n * and `sessionToken` settings.\n */\n credentialProvider?: () => PromiseLike<{\n accessKeyId: string;\n secretAccessKey: string;\n sessionToken?: string;\n }>;\n}\n\nexport type BedrockMantleChatModelId = string;\nexport type BedrockMantleEmbeddingModelId = string;\nexport type BedrockMantleImageModelId = string;\n\nexport interface AmazonBedrockMantleProvider extends ProviderV3 {\n (modelId: BedrockMantleChatModelId): LanguageModelV3;\n\n languageModel(modelId: BedrockMantleChatModelId): LanguageModelV3;\n\n chatModel(modelId: BedrockMantleChatModelId): LanguageModelV3;\n\n embeddingModel(modelId: BedrockMantleEmbeddingModelId): EmbeddingModelV3;\n\n imageModel(modelId: BedrockMantleImageModelId): ImageModelV3;\n}\n\ninterface BedrockCredentials {\n region: string;\n accessKeyId: string;\n secretAccessKey: string;\n sessionToken?: string;\n}\n\n/**\n * Creates a fetch function that applies AWS Signature Version 4 signing for bedrock-mantle service.\n *\n * @param getCredentials - Function that returns the AWS credentials to use when signing.\n * @param fetchImpl - Optional original fetch implementation to wrap. Defaults to global fetch.\n * @returns A FetchFunction that signs requests before passing them to the underlying fetch.\n */\nfunction createMantleSigV4FetchFunction(\n getCredentials: () => BedrockCredentials | PromiseLike<BedrockCredentials>,\n fetchImpl: FetchFunction = globalThis.fetch,\n): FetchFunction {\n return async (\n input: RequestInfo | URL,\n init?: RequestInit,\n ): Promise<Response> => {\n const url =\n typeof input === 'string'\n ? input\n : input instanceof URL\n ? input.href\n : input.url;\n\n const body =\n typeof init?.body === 'string'\n ? init.body\n : init?.body\n ? JSON.stringify(init.body)\n : undefined;\n\n const headers = init?.headers ?? {};\n const headerEntries =\n headers instanceof Headers\n ? Array.from(headers.entries())\n : Array.isArray(headers)\n ? headers\n : Object.entries(headers);\n\n const credentials = await getCredentials();\n const signer = new AwsV4Signer({\n url,\n method: init?.method ?? 'POST',\n headers: headerEntries,\n body,\n region: credentials.region,\n accessKeyId: credentials.accessKeyId,\n secretAccessKey: credentials.secretAccessKey,\n sessionToken: credentials.sessionToken,\n service: 'bedrock-mantle',\n });\n\n const signed = await signer.sign();\n return fetchImpl(input, {\n ...init,\n body,\n headers: Object.fromEntries(signed.headers.entries()),\n });\n };\n}\n\n/**\n * Create an Amazon Bedrock Mantle provider instance.\n * Bedrock Mantle is AWS Bedrock's OpenAI-compatible endpoint that routes all requests\n * through bedrock-mantle.<region>.api.aws/v1 using OpenAI API format.\n */\nexport function createAmazonBedrockMantle(\n options: AmazonBedrockMantleProviderSettings = {},\n): AmazonBedrockMantleProvider {\n // Get region - use option first, then environment variable, then default to us-east-1\n const region =\n options.region ??\n loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: 'AWS_REGION',\n }) ??\n 'us-east-1';\n\n // Check for API key authentication\n const rawApiKey = loadOptionalSetting({\n settingValue: options.apiKey,\n environmentVariableName: 'AWS_BEARER_TOKEN_BEDROCK',\n });\n\n // Only use API key if it's a non-empty, non-whitespace string\n const apiKey =\n rawApiKey && rawApiKey.trim().length > 0 ? rawApiKey.trim() : undefined;\n\n // Use API key authentication if available, otherwise fall back to SigV4\n let fetchFunction: FetchFunction;\n if (apiKey) {\n fetchFunction = options.fetch ?? globalThis.fetch;\n } else if (options.profile) {\n // Load credentials from AWS profile\n const profileCredentials = loadCredentialsFromProfile(options.profile);\n fetchFunction = createMantleSigV4FetchFunction(async () => {\n return {\n ...profileCredentials,\n region,\n };\n }, options.fetch);\n } else if (options.credentialProvider) {\n fetchFunction = createMantleSigV4FetchFunction(async () => {\n return {\n ...(await options.credentialProvider!()),\n region,\n };\n }, options.fetch);\n } else {\n // For static credentials, load from options or environment variables\n const accessKeyId =\n options.accessKeyId ??\n loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: 'AWS_ACCESS_KEY_ID',\n });\n\n const secretAccessKey =\n options.secretAccessKey ??\n loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: 'AWS_SECRET_ACCESS_KEY',\n });\n\n const sessionToken =\n options.sessionToken ??\n loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: 'AWS_SESSION_TOKEN',\n });\n\n if (!accessKeyId || !secretAccessKey) {\n throw new Error(\n 'AWS credentials are required. Please provide either:\\n' +\n '1. Set AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY environment variables\\n' +\n '2. Provide accessKeyId and secretAccessKey in options\\n' +\n '3. Use a credentialProvider function\\n' +\n '4. Use API key authentication with AWS_BEARER_TOKEN_BEDROCK or apiKey option',\n );\n }\n\n fetchFunction = createMantleSigV4FetchFunction(async () => {\n return {\n region,\n accessKeyId: accessKeyId!,\n secretAccessKey: secretAccessKey!,\n sessionToken,\n };\n }, options.fetch);\n }\n\n const baseURL =\n withoutTrailingSlash(\n options.baseURL ?? `https://bedrock-mantle.${region}.api.aws/v1`,\n ) ?? `https://bedrock-mantle.us-east-1.api.aws/v1`;\n\n // Create the OpenAI-compatible provider\n const mantleProvider: OpenAICompatibleProvider<\n string,\n string,\n string,\n string\n > = createOpenAICompatible({\n baseURL,\n name: 'amazon-bedrock-mantle',\n apiKey: apiKey ?? 'dummy-key-for-sigv4',\n fetch: fetchFunction,\n headers: options.headers,\n includeUsage: true,\n });\n\n const provider = function (modelId: BedrockMantleChatModelId) {\n if (new.target) {\n throw new Error(\n 'The Amazon Bedrock Mantle model function cannot be called with the new keyword.',\n );\n }\n return mantleProvider.languageModel(modelId);\n };\n\n provider.specificationVersion = 'v3' as const;\n provider.languageModel = mantleProvider.languageModel;\n provider.chatModel = mantleProvider.languageModel;\n provider.embeddingModel = mantleProvider.embeddingModel;\n provider.imageModel = mantleProvider.imageModel;\n\n return provider as AmazonBedrockMantleProvider;\n}\n\n/**\n * Default Bedrock Mantle provider instance.\n */\nexport const bedrockMantle = createAmazonBedrockMantle();\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@matthewdunbar/amazon-bedrock-mantle",
3
- "version": "0.0.2",
3
+ "version": "0.0.4",
4
4
  "license": "Apache-2.0",
5
5
  "sideEffects": false,
6
6
  "main": "./dist/index.js",