@shipfox/api-agent 5.0.0 → 6.0.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/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +30 -0
- package/dist/core/custom-model-provider-config-service.d.ts +4 -0
- package/dist/core/custom-model-provider-config-service.d.ts.map +1 -1
- package/dist/core/custom-model-provider-config-service.js +19 -16
- package/dist/core/custom-model-provider-config-service.js.map +1 -1
- package/dist/core/model-provider-config-service.d.ts +4 -0
- package/dist/core/model-provider-config-service.d.ts.map +1 -1
- package/dist/core/model-provider-config-service.js +10 -8
- package/dist/core/model-provider-config-service.js.map +1 -1
- package/dist/core/resolve-runtime-credentials.d.ts +6 -2
- package/dist/core/resolve-runtime-credentials.d.ts.map +1 -1
- package/dist/core/resolve-runtime-credentials.js +10 -5
- package/dist/core/resolve-runtime-credentials.js.map +1 -1
- package/dist/core/secrets-client.d.ts +4 -0
- package/dist/core/secrets-client.d.ts.map +1 -0
- package/dist/core/secrets-client.js +6 -0
- package/dist/core/secrets-client.js.map +1 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -13
- package/dist/index.js.map +1 -1
- package/dist/presentation/e2eRoutes/create-model-provider.d.ts +2 -1
- package/dist/presentation/e2eRoutes/create-model-provider.d.ts.map +1 -1
- package/dist/presentation/e2eRoutes/create-model-provider.js +46 -45
- package/dist/presentation/e2eRoutes/create-model-provider.js.map +1 -1
- package/dist/presentation/e2eRoutes/index.d.ts +2 -0
- package/dist/presentation/e2eRoutes/index.d.ts.map +1 -1
- package/dist/presentation/e2eRoutes/index.js +9 -6
- package/dist/presentation/e2eRoutes/index.js.map +1 -1
- package/dist/presentation/index.d.ts +1 -1
- package/dist/presentation/index.d.ts.map +1 -1
- package/dist/presentation/index.js +1 -1
- package/dist/presentation/index.js.map +1 -1
- package/dist/presentation/inter-module.d.ts +7 -0
- package/dist/presentation/inter-module.d.ts.map +1 -0
- package/dist/presentation/inter-module.js +45 -0
- package/dist/presentation/inter-module.js.map +1 -0
- package/dist/presentation/routes/create-custom-model-provider.d.ts +2 -1
- package/dist/presentation/routes/create-custom-model-provider.d.ts.map +1 -1
- package/dist/presentation/routes/create-custom-model-provider.js +39 -35
- package/dist/presentation/routes/create-custom-model-provider.js.map +1 -1
- package/dist/presentation/routes/delete-model-provider-config.d.ts +2 -1
- package/dist/presentation/routes/delete-model-provider-config.d.ts.map +1 -1
- package/dist/presentation/routes/delete-model-provider-config.js +33 -29
- package/dist/presentation/routes/delete-model-provider-config.js.map +1 -1
- package/dist/presentation/routes/discover-custom-model-provider-models-by-slug.d.ts +2 -1
- package/dist/presentation/routes/discover-custom-model-provider-models-by-slug.d.ts.map +1 -1
- package/dist/presentation/routes/discover-custom-model-provider-models-by-slug.js +32 -28
- package/dist/presentation/routes/discover-custom-model-provider-models-by-slug.js.map +1 -1
- package/dist/presentation/routes/errors.d.ts.map +1 -1
- package/dist/presentation/routes/errors.js +13 -12
- package/dist/presentation/routes/errors.js.map +1 -1
- package/dist/presentation/routes/index.d.ts +2 -0
- package/dist/presentation/routes/index.d.ts.map +1 -1
- package/dist/presentation/routes/index.js +32 -29
- package/dist/presentation/routes/index.js.map +1 -1
- package/dist/presentation/routes/update-custom-model-provider.d.ts +2 -1
- package/dist/presentation/routes/update-custom-model-provider.d.ts.map +1 -1
- package/dist/presentation/routes/update-custom-model-provider.js +41 -37
- package/dist/presentation/routes/update-custom-model-provider.js.map +1 -1
- package/dist/presentation/routes/upsert-model-provider-config.d.ts +2 -1
- package/dist/presentation/routes/upsert-model-provider-config.d.ts.map +1 -1
- package/dist/presentation/routes/upsert-model-provider-config.js +46 -42
- package/dist/presentation/routes/upsert-model-provider-config.js.map +1 -1
- package/dist/tsconfig.test.tsbuildinfo +1 -1
- package/package.json +11 -8
- package/src/core/custom-model-provider-config-service.ts +50 -34
- package/src/core/model-provider-config-service.test.ts +1 -3
- package/src/core/model-provider-config-service.ts +18 -15
- package/src/core/resolve-runtime-credentials.test.ts +3 -3
- package/src/core/resolve-runtime-credentials.ts +22 -8
- package/src/core/secrets-client.ts +13 -0
- package/src/index.ts +13 -8
- package/src/presentation/e2eRoutes/create-model-provider.ts +41 -39
- package/src/presentation/e2eRoutes/index.ts +6 -4
- package/src/presentation/index.ts +1 -1
- package/src/presentation/inter-module.ts +78 -0
- package/src/presentation/routes/create-custom-model-provider.ts +36 -30
- package/src/presentation/routes/delete-model-provider-config.ts +25 -22
- package/src/presentation/routes/discover-custom-model-provider-models-by-slug.ts +31 -25
- package/src/presentation/routes/errors.ts +11 -11
- package/src/presentation/routes/index.ts +32 -27
- package/src/presentation/routes/model-provider-config.test.ts +1 -1
- package/src/presentation/routes/update-custom-model-provider.ts +40 -34
- package/src/presentation/routes/upsert-model-provider-config.ts +43 -37
- package/test/fixtures/secrets-client.ts +80 -0
- package/test/globalSetup.ts +0 -9
- package/test/setup.ts +8 -0
- package/tsconfig.build.tsbuildinfo +1 -1
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import {secretsInterModuleContract} from '@shipfox/api-secrets-dto/inter-module';
|
|
2
|
+
import {createInterModuleKnownError} from '@shipfox/inter-module';
|
|
3
|
+
import type {AgentSecretsClient} from '#core/secrets-client.js';
|
|
4
|
+
|
|
5
|
+
const values = new Map<string, string>();
|
|
6
|
+
|
|
7
|
+
function scopeId(params: {
|
|
8
|
+
workspaceId: string;
|
|
9
|
+
projectId?: string | null | undefined;
|
|
10
|
+
namespace?: string | undefined;
|
|
11
|
+
}) {
|
|
12
|
+
return `${params.workspaceId}\0${params.projectId ?? ''}\0${params.namespace ?? ''}`;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function keyId(
|
|
16
|
+
params: {
|
|
17
|
+
workspaceId: string;
|
|
18
|
+
projectId?: string | null | undefined;
|
|
19
|
+
namespace?: string | undefined;
|
|
20
|
+
},
|
|
21
|
+
key: string,
|
|
22
|
+
) {
|
|
23
|
+
return `${scopeId(params)}\0${key}`;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export const agentTestSecretsClient: AgentSecretsClient = {
|
|
27
|
+
deleteSecrets: async (params) => {
|
|
28
|
+
const keys = params.keys ?? (await getSecretsByNamespace(params));
|
|
29
|
+
let deleted = 0;
|
|
30
|
+
for (const key of Array.isArray(keys) ? keys : Object.keys(keys)) {
|
|
31
|
+
if (values.delete(keyId(params, key))) deleted += 1;
|
|
32
|
+
}
|
|
33
|
+
return {deleted};
|
|
34
|
+
},
|
|
35
|
+
getSecretsByNamespace: async (params) => ({values: await getSecretsByNamespace(params)}),
|
|
36
|
+
setSecrets: async (params) => {
|
|
37
|
+
await Promise.resolve();
|
|
38
|
+
for (const value of Object.values(params.values)) {
|
|
39
|
+
if (Buffer.byteLength(value, 'utf8') > 64 * 1024) {
|
|
40
|
+
throw createInterModuleKnownError(
|
|
41
|
+
secretsInterModuleContract.methods.setSecrets,
|
|
42
|
+
'value-too-large',
|
|
43
|
+
{maxBytes: 64 * 1024},
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
for (const [key, value] of Object.entries(params.values)) values.set(keyId(params, key), value);
|
|
48
|
+
return {};
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
export async function getSecretsByNamespace(params: {
|
|
53
|
+
workspaceId: string;
|
|
54
|
+
projectId?: string | null | undefined;
|
|
55
|
+
namespace?: string | undefined;
|
|
56
|
+
}): Promise<Record<string, string>> {
|
|
57
|
+
await Promise.resolve();
|
|
58
|
+
const selected = new Map<string, string>();
|
|
59
|
+
const workspaceScope = `${scopeId({...params, projectId: null})}\0`;
|
|
60
|
+
const projectScope = `${scopeId(params)}\0`;
|
|
61
|
+
for (const [id, value] of values) {
|
|
62
|
+
if (id.startsWith(workspaceScope)) selected.set(id.slice(workspaceScope.length), value);
|
|
63
|
+
if (params.projectId && id.startsWith(projectScope))
|
|
64
|
+
selected.set(id.slice(projectScope.length), value);
|
|
65
|
+
}
|
|
66
|
+
return Object.fromEntries(selected);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export async function setSecrets(params: {
|
|
70
|
+
workspaceId: string;
|
|
71
|
+
projectId?: string | null | undefined;
|
|
72
|
+
namespace?: string | undefined;
|
|
73
|
+
values: Record<string, string>;
|
|
74
|
+
}): Promise<void> {
|
|
75
|
+
await agentTestSecretsClient.setSecrets(params);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export function resetAgentTestSecrets(): void {
|
|
79
|
+
values.clear();
|
|
80
|
+
}
|
package/test/globalSetup.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import './env.js';
|
|
2
|
-
import {secretsModule} from '@shipfox/api-secrets';
|
|
3
2
|
import {runMigrations} from '@shipfox/node-drizzle';
|
|
4
3
|
import {closePostgresClient, createPostgresClient} from '@shipfox/node-postgres';
|
|
5
4
|
import {sql} from 'drizzle-orm';
|
|
@@ -9,14 +8,6 @@ export async function setup() {
|
|
|
9
8
|
createPostgresClient();
|
|
10
9
|
|
|
11
10
|
await runMigrations(db(), migrationsPath, '__drizzle_migrations_agent');
|
|
12
|
-
if (!secretsModule.database || Array.isArray(secretsModule.database)) {
|
|
13
|
-
throw new Error('Secrets module database is not configured');
|
|
14
|
-
}
|
|
15
|
-
await runMigrations(
|
|
16
|
-
secretsModule.database.db(),
|
|
17
|
-
secretsModule.database.migrationsPath,
|
|
18
|
-
'__drizzle_migrations_secrets',
|
|
19
|
-
);
|
|
20
11
|
await db().execute(sql`TRUNCATE model_provider_configs CASCADE`);
|
|
21
12
|
await db().execute(sql`TRUNCATE agent_workspace_settings CASCADE`);
|
|
22
13
|
|
package/test/setup.ts
CHANGED
|
@@ -2,6 +2,13 @@ import './env.js';
|
|
|
2
2
|
import {closePostgresClient, createPostgresClient} from '@shipfox/node-postgres';
|
|
3
3
|
import {afterAll, afterEach, beforeAll, vi} from '@shipfox/vitest/vi';
|
|
4
4
|
import {closeDb} from '#db/index.js';
|
|
5
|
+
import {agentTestSecretsClient, resetAgentTestSecrets} from '#test/fixtures/secrets-client.js';
|
|
6
|
+
|
|
7
|
+
vi.doMock('#core/secrets-client.js', () => {
|
|
8
|
+
return {
|
|
9
|
+
requireAgentSecretsClient: (client: unknown) => client ?? agentTestSecretsClient,
|
|
10
|
+
};
|
|
11
|
+
});
|
|
5
12
|
|
|
6
13
|
beforeAll(() => {
|
|
7
14
|
createPostgresClient();
|
|
@@ -9,6 +16,7 @@ beforeAll(() => {
|
|
|
9
16
|
|
|
10
17
|
afterEach(() => {
|
|
11
18
|
vi.restoreAllMocks();
|
|
19
|
+
resetAgentTestSecrets();
|
|
12
20
|
});
|
|
13
21
|
|
|
14
22
|
afterAll(async () => {
|