@velum-labs/routekit-daemon 1.3.2 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/account-enroll-service.d.ts +1 -3
- package/dist/account-enroll-service.js +262 -262
- package/dist/account-mutation-service.d.ts +1 -3
- package/dist/account-mutation-service.js +302 -283
- package/dist/account-query-service.d.ts +1 -3
- package/dist/account-query-service.js +88 -86
- package/dist/call-attribution-store.js +544 -1
- package/dist/control-dispatch.js +9 -15
- package/dist/daemon-bootstrap-preflight.js +1 -1
- package/dist/daemon-control-handlers.d.ts +1 -1
- package/dist/daemon-control-handlers.js +24 -27
- package/dist/daemon-generations.d.ts +14 -28
- package/dist/daemon-generations.js +114 -53
- package/dist/daemon-lifecycle-service.d.ts +1 -3
- package/dist/daemon-lifecycle-service.js +88 -94
- package/dist/daemon-maintenance.d.ts +27 -49
- package/dist/daemon-maintenance.js +5 -1
- package/dist/daemon-options.d.ts +3 -2
- package/dist/daemon-policy-context.d.ts +1 -0
- package/dist/daemon-policy-context.js +1 -0
- package/dist/daemon-runtime-state.d.ts +1 -1
- package/dist/daemon-runtime-state.js +2 -3
- package/dist/daemon-state-context.d.ts +1 -1
- package/dist/daemon-state-context.js +1 -38
- package/dist/doctor-service.d.ts +1 -3
- package/dist/doctor-service.js +87 -91
- package/dist/effect/daemon-live.d.ts +7 -6
- package/dist/effect/daemon-live.js +57 -135
- package/dist/eval-routing-service.d.ts +1 -3
- package/dist/eval-routing-service.js +45 -69
- package/dist/eval-session-execution-store.d.ts +24 -0
- package/dist/eval-session-execution-store.js +253 -0
- package/dist/host-protocol.d.ts +1 -0
- package/dist/host.js +3 -0
- package/dist/internal-providers/provider-anthropic/index.d.ts +23 -0
- package/dist/internal-providers/provider-anthropic/index.js +42 -0
- package/dist/internal-providers/provider-anthropic/test/provider.test.js +33 -0
- package/dist/internal-providers/provider-azure/index.d.ts +25 -0
- package/dist/internal-providers/provider-azure/index.js +101 -0
- package/dist/internal-providers/provider-azure/test/provider.test.js +83 -0
- package/dist/internal-providers/provider-bedrock/codec.d.ts +11 -0
- package/dist/internal-providers/provider-bedrock/codec.js +484 -0
- package/dist/internal-providers/provider-bedrock/connection-settings.d.ts +6 -0
- package/dist/internal-providers/provider-bedrock/connection-settings.js +41 -0
- package/dist/internal-providers/provider-bedrock/connection.d.ts +17 -0
- package/dist/internal-providers/provider-bedrock/connection.js +143 -0
- package/dist/internal-providers/provider-bedrock/index.d.ts +27 -0
- package/dist/internal-providers/provider-bedrock/index.js +47 -0
- package/dist/internal-providers/provider-bedrock/source.d.ts +39 -0
- package/dist/internal-providers/provider-bedrock/source.js +454 -0
- package/dist/internal-providers/provider-bedrock/test/bedrock-source.test.d.ts +1 -0
- package/dist/internal-providers/provider-bedrock/test/bedrock-source.test.js +786 -0
- package/dist/internal-providers/provider-bedrock/test/connection.test.d.ts +1 -0
- package/dist/internal-providers/provider-bedrock/test/connection.test.js +249 -0
- package/dist/internal-providers/provider-bedrock/test/workload-credentials.test.d.ts +1 -0
- package/dist/internal-providers/provider-bedrock/test/workload-credentials.test.js +29 -0
- package/dist/internal-providers/provider-bedrock/workload-credentials.d.ts +5 -0
- package/dist/internal-providers/provider-bedrock/workload-credentials.js +14 -0
- package/dist/internal-providers/provider-claude-code/index.d.ts +6 -0
- package/dist/internal-providers/provider-claude-code/index.js +4 -0
- package/dist/internal-providers/provider-claude-code/module-api.d.ts +25 -0
- package/dist/internal-providers/provider-claude-code/module-api.js +31 -0
- package/dist/internal-providers/provider-claude-code/relay.d.ts +20 -0
- package/dist/internal-providers/provider-claude-code/relay.js +115 -0
- package/dist/internal-providers/provider-claude-code/subscription.d.ts +2 -0
- package/dist/internal-providers/provider-claude-code/subscription.js +194 -0
- package/dist/internal-providers/provider-claude-code/test/http-submission.test.d.ts +1 -0
- package/dist/internal-providers/provider-claude-code/test/http-submission.test.js +140 -0
- package/dist/internal-providers/provider-claude-code/test/relay.test.d.ts +1 -0
- package/dist/internal-providers/provider-claude-code/test/relay.test.js +379 -0
- package/dist/internal-providers/provider-claude-code/test/subscription.test.d.ts +1 -0
- package/dist/internal-providers/provider-claude-code/test/subscription.test.js +256 -0
- package/dist/internal-providers/provider-cliproxy/index.d.ts +9 -0
- package/dist/internal-providers/provider-cliproxy/index.js +15 -0
- package/dist/internal-providers/provider-codex/index.d.ts +6 -0
- package/dist/internal-providers/provider-codex/index.js +7 -0
- package/dist/internal-providers/provider-codex/module-api.d.ts +25 -0
- package/dist/internal-providers/provider-codex/module-api.js +31 -0
- package/dist/internal-providers/provider-codex/relay.d.ts +123 -0
- package/dist/internal-providers/provider-codex/relay.js +261 -0
- package/dist/internal-providers/provider-codex/subscription.d.ts +2 -0
- package/dist/internal-providers/provider-codex/subscription.js +555 -0
- package/dist/internal-providers/provider-codex/test/http-submission.test.d.ts +1 -0
- package/dist/internal-providers/provider-codex/test/http-submission.test.js +142 -0
- package/dist/internal-providers/provider-codex/test/relay.test.d.ts +1 -0
- package/dist/internal-providers/provider-codex/test/relay.test.js +600 -0
- package/dist/internal-providers/provider-codex/test/subscription.test.d.ts +1 -0
- package/dist/internal-providers/provider-codex/test/subscription.test.js +70 -0
- package/dist/internal-providers/provider-codex/test/translated-content.test.d.ts +1 -0
- package/dist/internal-providers/provider-codex/test/translated-content.test.js +91 -0
- package/dist/internal-providers/provider-custom/index.d.ts +9 -0
- package/dist/internal-providers/provider-custom/index.js +15 -0
- package/dist/internal-providers/provider-google/index.d.ts +23 -0
- package/dist/internal-providers/provider-google/index.js +43 -0
- package/dist/internal-providers/provider-google/test/provider.test.d.ts +1 -0
- package/dist/internal-providers/provider-google/test/provider.test.js +34 -0
- package/dist/internal-providers/provider-google-vertex/index.d.ts +28 -0
- package/dist/internal-providers/provider-google-vertex/index.js +137 -0
- package/dist/internal-providers/provider-google-vertex/test/provider.test.d.ts +1 -0
- package/dist/internal-providers/provider-google-vertex/test/provider.test.js +85 -0
- package/dist/internal-providers/provider-openai/documented-reasoning.d.ts +9 -0
- package/dist/internal-providers/provider-openai/documented-reasoning.js +26 -0
- package/dist/internal-providers/provider-openai/index.d.ts +23 -0
- package/dist/internal-providers/provider-openai/index.js +74 -0
- package/dist/internal-providers/provider-openai/test/provider.test.d.ts +1 -0
- package/dist/internal-providers/provider-openai/test/provider.test.js +268 -0
- package/dist/internal-providers/provider-openai-compatible/index.d.ts +9 -0
- package/dist/internal-providers/provider-openai-compatible/index.js +15 -0
- package/dist/internal-providers/provider-openai-compatible/test/provider.test.d.ts +1 -0
- package/dist/internal-providers/provider-openai-compatible/test/provider.test.js +40 -0
- package/dist/internal-providers/provider-openrouter/connection.d.ts +5 -0
- package/dist/internal-providers/provider-openrouter/connection.js +143 -0
- package/dist/internal-providers/provider-openrouter/index.d.ts +28 -0
- package/dist/internal-providers/provider-openrouter/index.js +42 -0
- package/dist/internal-providers/provider-openrouter/pricing.d.ts +4 -0
- package/dist/internal-providers/provider-openrouter/pricing.js +108 -0
- package/dist/internal-providers/provider-openrouter/test/connection.test.d.ts +1 -0
- package/dist/internal-providers/provider-openrouter/test/connection.test.js +71 -0
- package/dist/internal-providers/provider-openrouter/test/pricing.test.d.ts +1 -0
- package/dist/internal-providers/provider-openrouter/test/pricing.test.js +45 -0
- package/dist/internal-providers/provider-openrouter/test/provider.test.d.ts +1 -0
- package/dist/internal-providers/provider-openrouter/test/provider.test.js +141 -0
- package/dist/internal-providers/provider-openrouter/test/validation.test.d.ts +1 -0
- package/dist/internal-providers/provider-openrouter/test/validation.test.js +225 -0
- package/dist/launcher-service.d.ts +3 -7
- package/dist/launcher-service.js +144 -133
- package/dist/provider-modules.d.ts +6 -0
- package/dist/provider-modules.js +55 -0
- package/dist/provider-query-service.d.ts +1 -3
- package/dist/provider-query-service.js +140 -143
- package/dist/router-generation-service.d.ts +1 -3
- package/dist/router-generation-service.js +83 -78
- package/dist/services/eval-session/service.d.ts +20 -8
- package/dist/services/eval-session/service.js +410 -40
- package/dist/services/gateway-generation/service.d.ts +7 -3
- package/dist/services/gateway-generation/service.js +126 -63
- package/dist/services/generations/service.d.ts +3 -3
- package/dist/services/generations/service.js +5 -1
- package/dist/telemetry-application-service.d.ts +1 -3
- package/dist/telemetry-application-service.js +41 -45
- package/dist/test/call-attribution-store.test.js +186 -0
- package/dist/test/daemon-accounts.test.js +2 -2
- package/dist/test/daemon-data-plane.test.js +24 -45
- package/dist/test/daemon-fixtures.js +1 -1
- package/dist/test/daemon-generation-transaction.test.js +66 -2
- package/dist/test/daemon-runtime-state.test.js +28 -1
- package/dist/test/effect-daemon.test.js +38 -0
- package/dist/test/eval-routing-application-service.test.js +6 -6
- package/dist/test/eval-session-execution.test.d.ts +1 -0
- package/dist/test/eval-session-execution.test.js +356 -0
- package/dist/test/eval-session-service.test.js +70 -1
- package/dist/test/host-worker-session.test.js +1 -0
- package/dist/test/launcher-session.test.d.ts +1 -0
- package/dist/test/launcher-session.test.js +87 -0
- package/dist/test/leaderboard.test.js +25 -1
- package/dist/test/provider-modules.test.d.ts +1 -0
- package/dist/test/provider-modules.test.js +65 -0
- package/dist/test/routekit-upstream-sources.test.d.ts +1 -0
- package/dist/test/routekit-upstream-sources.test.js +40 -0
- package/dist/test/runtime-composition-types.test.js +11 -0
- package/dist/token-application-service.d.ts +1 -3
- package/dist/token-application-service.js +38 -44
- package/dist/worker.js +5 -3
- package/package.json +35 -11
- package/dist/application-services.d.ts +0 -10
- package/dist/application-services.js +0 -22
- package/dist/daemon-lifecycle.d.ts +0 -54
- package/dist/daemon-lifecycle.js +0 -177
- package/dist/test/application-services.test.js +0 -135
- package/dist/test/daemon-lifecycle.test.js +0 -182
- /package/dist/{test/application-services.test.d.ts → internal-providers/provider-anthropic/test/provider.test.d.ts} +0 -0
- /package/dist/{test/daemon-lifecycle.test.d.ts → internal-providers/provider-azure/test/provider.test.d.ts} +0 -0
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { fromNodeProviderChain, fromTemporaryCredentials } from "@aws-sdk/credential-providers";
|
|
2
|
+
import { createHash } from "node:crypto";
|
|
3
|
+
import { Effect } from "effect";
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
import { ProviderEnrollmentError, connectionString, preparedProviderConnection } from "@velum-labs/routekit-provider-core";
|
|
6
|
+
import { isBedrockRoleTemplateUrl } from "./connection-settings.js";
|
|
7
|
+
import { bedrockMasterCredentialsFromResources } from "./workload-credentials.js";
|
|
8
|
+
const regionSchema = z.string().max(64).regex(/^[a-z]{2}(?:-[a-z]+)+-\d$/);
|
|
9
|
+
const roleSchema = z
|
|
10
|
+
.string()
|
|
11
|
+
.max(2048)
|
|
12
|
+
.regex(/^arn:aws:iam::\d{12}:role\/[A-Za-z0-9+=,.@_-](?:[A-Za-z0-9+=,.@_/-]*[A-Za-z0-9+=,.@_-])?$/);
|
|
13
|
+
const customerRoleSchema = z
|
|
14
|
+
.string()
|
|
15
|
+
.max(2048)
|
|
16
|
+
.regex(/^arn:aws:iam::\d{12}:role\/routekit-cloud\/[A-Za-z0-9+=,.@_-](?:[A-Za-z0-9+=,.@_/-]*[A-Za-z0-9+=,.@_-])?$/);
|
|
17
|
+
const enrollmentExternalIdSchema = z.string().regex(/^[A-Za-z0-9_-]{43}$/);
|
|
18
|
+
const roleBindingSchema = z.object({
|
|
19
|
+
roleArn: roleSchema, externalId: z.string().min(32).max(1224), region: regionSchema
|
|
20
|
+
}).strict();
|
|
21
|
+
const setupStateSchema = z.object({
|
|
22
|
+
region: regionSchema,
|
|
23
|
+
externalId: enrollmentExternalIdSchema
|
|
24
|
+
}).strict();
|
|
25
|
+
function enrollmentStackName(enrollmentId) {
|
|
26
|
+
const readable = enrollmentId
|
|
27
|
+
.replaceAll(/[^A-Za-z0-9-]/gu, "-")
|
|
28
|
+
.replaceAll(/-+/gu, "-")
|
|
29
|
+
.replaceAll(/^-|-$/gu, "")
|
|
30
|
+
.slice(0, 80) || "connection";
|
|
31
|
+
const digest = createHash("sha256").update(enrollmentId).digest("hex").slice(0, 24);
|
|
32
|
+
return `RouteKit-${readable}-${digest}`;
|
|
33
|
+
}
|
|
34
|
+
function setupSettings(settings) {
|
|
35
|
+
const principal = roleSchema.parse(settings.rolePrincipalArn);
|
|
36
|
+
const templateUrl = z.string().max(2048).url().parse(settings.roleTemplateUrl);
|
|
37
|
+
if (!isBedrockRoleTemplateUrl(templateUrl)) {
|
|
38
|
+
throw new Error("The role template must be hosted in Amazon S3.");
|
|
39
|
+
}
|
|
40
|
+
const template = new URL(templateUrl);
|
|
41
|
+
return { principal, template };
|
|
42
|
+
}
|
|
43
|
+
export const bedrockRoleEnrollment = {
|
|
44
|
+
available: (settings) => {
|
|
45
|
+
try {
|
|
46
|
+
setupSettings(settings);
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
start: (context, values) => Effect.try({
|
|
54
|
+
try: () => {
|
|
55
|
+
const region = regionSchema.parse(connectionString(values, "region"));
|
|
56
|
+
const externalId = enrollmentExternalIdSchema.parse(context.nonce);
|
|
57
|
+
const { principal, template } = setupSettings(context.settings);
|
|
58
|
+
const url = new URL(`https://${region}.console.aws.amazon.com/cloudformation/home`);
|
|
59
|
+
url.searchParams.set("region", region);
|
|
60
|
+
const parameters = new URLSearchParams({
|
|
61
|
+
templateURL: template.href,
|
|
62
|
+
stackName: enrollmentStackName(context.enrollmentId),
|
|
63
|
+
param_RouteKitPrincipalArn: principal,
|
|
64
|
+
param_ExternalId: externalId
|
|
65
|
+
});
|
|
66
|
+
url.hash = "/stacks/create/review?" + parameters.toString();
|
|
67
|
+
return {
|
|
68
|
+
kind: "action",
|
|
69
|
+
action: {
|
|
70
|
+
kind: "external", stepId: "setup", title: "Create the AWS connection role",
|
|
71
|
+
url: url.href, completion: "continue",
|
|
72
|
+
instructions: "Create the stack in your AWS account. Then copy RoleArn from the stack Outputs and continue."
|
|
73
|
+
},
|
|
74
|
+
state: { version: 1, data: { region, externalId } }
|
|
75
|
+
};
|
|
76
|
+
},
|
|
77
|
+
catch: () => new ProviderEnrollmentError("setup_incomplete", "Choose a valid AWS region. The Cloud administrator must configure AWS role onboarding.")
|
|
78
|
+
}),
|
|
79
|
+
resume: (_context, state, event) => Effect.try({
|
|
80
|
+
try: () => {
|
|
81
|
+
if (state.version !== 1 || event.kind !== "submit")
|
|
82
|
+
throw new Error("Invalid enrollment event.");
|
|
83
|
+
const setup = setupStateSchema.parse(state.data);
|
|
84
|
+
if (event.stepId === "setup")
|
|
85
|
+
return {
|
|
86
|
+
kind: "action",
|
|
87
|
+
action: { kind: "form", stepId: "role", title: "Connect the created AWS role", fields: [
|
|
88
|
+
{ id: "role-arn", label: "Role ARN", control: "text", required: true, placeholder: "arn:aws:iam::123456789012:role/routekit-cloud/…" }
|
|
89
|
+
] },
|
|
90
|
+
state
|
|
91
|
+
};
|
|
92
|
+
if (event.stepId !== "role")
|
|
93
|
+
throw new Error("Invalid enrollment step.");
|
|
94
|
+
const roleArn = customerRoleSchema.parse(connectionString(event.values, "role-arn"));
|
|
95
|
+
return {
|
|
96
|
+
kind: "complete",
|
|
97
|
+
connection: preparedProviderConnection({
|
|
98
|
+
config: { use: "bedrock", auth: { kind: "aws-sdk" } }, environment: {},
|
|
99
|
+
credential: { version: 1, kind: "assume-role", payload: { ...setup, roleArn } }
|
|
100
|
+
})
|
|
101
|
+
};
|
|
102
|
+
},
|
|
103
|
+
catch: () => new ProviderEnrollmentError("setup_incomplete", "Enter the RoleArn from the completed CloudFormation stack.")
|
|
104
|
+
})
|
|
105
|
+
};
|
|
106
|
+
const defaultCredentialDependencies = {
|
|
107
|
+
nodeProviderChain: fromNodeProviderChain,
|
|
108
|
+
temporaryCredentials: fromTemporaryCredentials
|
|
109
|
+
};
|
|
110
|
+
export function makeBedrockRoleCredentials(dependencies = defaultCredentialDependencies) {
|
|
111
|
+
return {
|
|
112
|
+
resolve: (binding, context) => Effect.try({
|
|
113
|
+
try: () => {
|
|
114
|
+
if (binding.version !== 1 || binding.kind !== "assume-role") {
|
|
115
|
+
throw new Error("Unsupported AWS credential.");
|
|
116
|
+
}
|
|
117
|
+
const role = roleBindingSchema.parse(binding.payload);
|
|
118
|
+
const injected = bedrockMasterCredentialsFromResources(context.resources, context.sourceId);
|
|
119
|
+
// The host workload identity is ONLY the STS caller. Every customer
|
|
120
|
+
// client receives its explicitly selected assumed role, never the
|
|
121
|
+
// platform or Node default chain directly.
|
|
122
|
+
const credentials = dependencies.temporaryCredentials({
|
|
123
|
+
masterCredentials: injected ?? dependencies.nodeProviderChain(),
|
|
124
|
+
clientConfig: { region: role.region, maxAttempts: 2 },
|
|
125
|
+
params: {
|
|
126
|
+
RoleArn: role.roleArn,
|
|
127
|
+
ExternalId: role.externalId,
|
|
128
|
+
RoleSessionName: "routekit-cloud"
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
return {
|
|
132
|
+
environment: {
|
|
133
|
+
AWS_REGION: role.region,
|
|
134
|
+
AWS_DEFAULT_REGION: role.region
|
|
135
|
+
},
|
|
136
|
+
resources: { bedrockCredentials: credentials }
|
|
137
|
+
};
|
|
138
|
+
},
|
|
139
|
+
catch: () => new ProviderEnrollmentError("invalid_state", "The stored AWS role connection is invalid.")
|
|
140
|
+
})
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
export const bedrockRoleCredentials = makeBedrockRoleCredentials();
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { BedrockProviderSource } from "./source.js";
|
|
2
|
+
import { Effect } from "effect";
|
|
3
|
+
export declare const bedrock: {
|
|
4
|
+
readonly id: "bedrock";
|
|
5
|
+
readonly protocol: "bedrock";
|
|
6
|
+
readonly accountClass: "api-key";
|
|
7
|
+
readonly billingMode: "metered-api";
|
|
8
|
+
readonly connection: Readonly<{
|
|
9
|
+
validate?: (context: Readonly<{
|
|
10
|
+
sourceId: string;
|
|
11
|
+
config: import("@velum-labs/routekit-config-core").SourceConfig;
|
|
12
|
+
env: Readonly<Record<string, string | undefined>>;
|
|
13
|
+
resources?: Readonly<Record<string, unknown>>;
|
|
14
|
+
}>) => Effect.Effect<void, Error, import("@velum-labs/routekit-runtime/effect").RouteKitPlatform>;
|
|
15
|
+
credentialValidation?: "registry-key-probe" | "registry-key-probe-if-configured-models";
|
|
16
|
+
manifest: import("@velum-labs/routekit-provider-core").ProviderConnectionManifest;
|
|
17
|
+
prepare?: (input: import("@velum-labs/routekit-provider-core").PrepareProviderConnectionInput) => import("@velum-labs/routekit-provider-core").PreparedProviderConnection;
|
|
18
|
+
enrollment?: Readonly<Record<string, import("@velum-labs/routekit-provider-core").ProviderEnrollmentAdapter>>;
|
|
19
|
+
credentials?: import("@velum-labs/routekit-provider-core").ProviderCredentialAdapter;
|
|
20
|
+
subscriptionMode?: import("@velum-labs/routekit-registry").SubscriptionMode;
|
|
21
|
+
}>;
|
|
22
|
+
readonly createSource: (context: import("@velum-labs/routekit-provider-core").ProviderModuleContext) => Effect.Effect<BedrockProviderSource, never, never>;
|
|
23
|
+
};
|
|
24
|
+
export type { BedrockControlClient, BedrockMantleBackend, BedrockProviderSourceOptions, BedrockRuntime } from "./source.js";
|
|
25
|
+
export { BEDROCK_OPENAI_ALLOWLIST, BedrockProviderSource, fromBedrockConverseOutput, isBedrockOpenAiModel, sanitizeBedrockMantleRequestBody, toBedrockConverseInput } from "./source.js";
|
|
26
|
+
export { BEDROCK_MASTER_CREDENTIALS_DISABLED, BEDROCK_MASTER_CREDENTIALS_RESOURCE, bedrockMasterCredentialsFromResources, type BedrockMasterCredentialsProvider } from "./workload-credentials.js";
|
|
27
|
+
export { isBedrockRoleTemplateUrl } from "./connection-settings.js";
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { BedrockProviderSource } from "./source.js";
|
|
2
|
+
import { connectionString, defineProviderConnection, defineProvider, optionalConnectionString, optionalProviderModuleResource, preparedProviderConnection } from "@velum-labs/routekit-provider-core";
|
|
3
|
+
import { Effect } from "effect";
|
|
4
|
+
import { bedrockRoleCredentials, bedrockRoleEnrollment } from "./connection.js";
|
|
5
|
+
export const bedrock = defineProvider({
|
|
6
|
+
id: "bedrock",
|
|
7
|
+
protocol: "bedrock",
|
|
8
|
+
accountClass: "api-key",
|
|
9
|
+
billingMode: "metered-api",
|
|
10
|
+
connection: defineProviderConnection({
|
|
11
|
+
enrollment: { "assume-role": bedrockRoleEnrollment },
|
|
12
|
+
credentials: bedrockRoleCredentials,
|
|
13
|
+
manifest: {
|
|
14
|
+
version: 1, id: "bedrock", displayName: "Amazon Bedrock", category: "cloud",
|
|
15
|
+
description: "Connect an AWS role or access keys for Bedrock.",
|
|
16
|
+
methods: [{ id: "access-key", kind: "form", label: "AWS access keys", schemaRevision: 1, fields: [
|
|
17
|
+
{ id: "access-key-id", label: "Access key ID", control: "secret", required: true },
|
|
18
|
+
{ id: "secret-access-key", label: "Secret access key", control: "secret", required: true },
|
|
19
|
+
{ id: "session-token", label: "Session token", control: "secret", required: false, advanced: true },
|
|
20
|
+
{ id: "region", label: "AWS region", control: "text", required: true, placeholder: "us-east-1" }
|
|
21
|
+
] }, { id: "assume-role", kind: "flow", label: "Connect AWS account", schemaRevision: 1, fields: [
|
|
22
|
+
{ id: "region", label: "AWS region", control: "text", required: true, defaultValue: "us-east-1" }
|
|
23
|
+
] }]
|
|
24
|
+
},
|
|
25
|
+
prepare: ({ values }) => {
|
|
26
|
+
const region = connectionString(values, "region");
|
|
27
|
+
const sessionToken = optionalConnectionString(values, "session-token");
|
|
28
|
+
return preparedProviderConnection({
|
|
29
|
+
config: { use: "bedrock", auth: { kind: "aws-sdk" } },
|
|
30
|
+
environment: {
|
|
31
|
+
AWS_ACCESS_KEY_ID: connectionString(values, "access-key-id"),
|
|
32
|
+
AWS_SECRET_ACCESS_KEY: connectionString(values, "secret-access-key"),
|
|
33
|
+
...(sessionToken === undefined ? {} : { AWS_SESSION_TOKEN: sessionToken }),
|
|
34
|
+
AWS_REGION: region,
|
|
35
|
+
AWS_DEFAULT_REGION: region
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
}),
|
|
40
|
+
createSource: (context) => Effect.sync(() => new BedrockProviderSource({
|
|
41
|
+
sourceId: context.sourceId, env: context.env,
|
|
42
|
+
credentials: optionalProviderModuleResource(context, "bedrockCredentials", (value) => typeof value === "function")
|
|
43
|
+
}))
|
|
44
|
+
});
|
|
45
|
+
export { BEDROCK_OPENAI_ALLOWLIST, BedrockProviderSource, fromBedrockConverseOutput, isBedrockOpenAiModel, sanitizeBedrockMantleRequestBody, toBedrockConverseInput } from "./source.js";
|
|
46
|
+
export { BEDROCK_MASTER_CREDENTIALS_DISABLED, BEDROCK_MASTER_CREDENTIALS_RESOURCE, bedrockMasterCredentialsFromResources } from "./workload-credentials.js";
|
|
47
|
+
export { isBedrockRoleTemplateUrl } from "./connection-settings.js";
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Amazon Bedrock provider source. Anthropic models use Bedrock Converse;
|
|
3
|
+
* allowlisted OpenAI frontier models use the regional bedrock-mantle
|
|
4
|
+
* OpenAI-compatible API.
|
|
5
|
+
*/
|
|
6
|
+
import { BedrockClient, type BedrockClientConfig } from "@aws-sdk/client-bedrock";
|
|
7
|
+
import { BedrockRuntimeClient } from "@aws-sdk/client-bedrock-runtime";
|
|
8
|
+
import { fromBedrockConverseOutput, toBedrockConverseInput } from "./codec.js";
|
|
9
|
+
import { OpenAiBackend } from "@velum-labs/routekit-provider-core";
|
|
10
|
+
import type { ProviderSource } from "@velum-labs/routekit-provider-core";
|
|
11
|
+
export type BedrockControlClient = Pick<BedrockClient, "send">;
|
|
12
|
+
export type BedrockRuntime = Pick<BedrockRuntimeClient, "send">;
|
|
13
|
+
export type BedrockMantleBackend = Pick<OpenAiBackend, "chat" | "responses">;
|
|
14
|
+
export type BedrockProviderSourceOptions = {
|
|
15
|
+
sourceId?: string;
|
|
16
|
+
controlClient?: BedrockControlClient;
|
|
17
|
+
runtimeClient?: BedrockRuntime;
|
|
18
|
+
env?: Readonly<Record<string, string | undefined>>;
|
|
19
|
+
mantleBackend?: BedrockMantleBackend;
|
|
20
|
+
credentials?: BedrockClientConfig["credentials"];
|
|
21
|
+
};
|
|
22
|
+
export { fromBedrockConverseOutput, toBedrockConverseInput };
|
|
23
|
+
export declare const BEDROCK_OPENAI_ALLOWLIST: readonly ["openai.gpt-5.6-sol", "openai.gpt-5.6-terra", "openai.gpt-5.6-luna"];
|
|
24
|
+
export declare function isBedrockOpenAiModel(modelId: string): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Remove OpenAI/Codex protocol fields that bedrock-mantle rejects while
|
|
27
|
+
* leaving native OpenAI egress unchanged.
|
|
28
|
+
*/
|
|
29
|
+
export declare function sanitizeBedrockMantleRequestBody(body: unknown): unknown;
|
|
30
|
+
export declare class BedrockProviderSource implements ProviderSource {
|
|
31
|
+
#private;
|
|
32
|
+
readonly sourceId: string;
|
|
33
|
+
readonly discovery: ProviderSource["discovery"];
|
|
34
|
+
readonly requests: ProviderSource["requests"];
|
|
35
|
+
readonly responses: ProviderSource["responses"];
|
|
36
|
+
readonly capabilities: ProviderSource["capabilities"];
|
|
37
|
+
readonly resource: ProviderSource["resource"];
|
|
38
|
+
constructor(options?: BedrockProviderSourceOptions);
|
|
39
|
+
}
|