1559975518
SharedKernel: Autonomy dial enum; IModelClient (ModelRequest/ModelCompletion);
IApiConfigResolver (+ ApiConfigSummary/ResolvedApiConfig) — server-side, decrypted.
Integrations module:
- ApiConfig entity (org-scoped) + IntegrationsDbContext (schema "integrations") +
InitialIntegrations migration; the key is AES-256-GCM encrypted at rest (key derived from
Encryption:MasterKey) and never returned to a client.
- Model adapters: StubModelClient (no-network, provider "stub"/"echo"), an OpenAI-compatible
HTTP adapter, and a ModelClientRouter; ApiConfigResolver decrypts server-side only.
- Endpoints: POST/GET/DELETE /api/integrations/api-configs and POST .../{id}/test. Create/
test/delete require ManageApiKeys (owner); listing requires ConfigureAgents (assign-only,
no key). Dev master key in appsettings; override Encryption__MasterKey in prod.
Verified: build green; ArchitectureTests 8/8 (Integrations references only SharedKernel);
IntegrationTests 26/26 incl. a BYOK flow — key never appears in any response, the connection
test succeeds (stub), and a Member is 403'd from create + list.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
35 lines
813 B
JSON
35 lines
813 B
JSON
{
|
|
"ConnectionStrings": {
|
|
"Postgres": "Host=localhost;Port=5432;Database=teamup;Username=teamup;Password=teamup"
|
|
},
|
|
"Database": {
|
|
"ApplyMigrationsOnStartup": false
|
|
},
|
|
"Jwt": {
|
|
"Secret": "dev-only-teamup-jwt-signing-secret-change-in-production-0123456789",
|
|
"Issuer": "teamup",
|
|
"Audience": "teamup",
|
|
"ExpiryMinutes": 480
|
|
},
|
|
"Encryption": {
|
|
"MasterKey": "dev-only-teamup-master-secret-change-in-production"
|
|
},
|
|
"OpenTelemetry": {
|
|
"OtlpEndpoint": ""
|
|
},
|
|
"Serilog": {
|
|
"MinimumLevel": {
|
|
"Default": "Information",
|
|
"Override": {
|
|
"Microsoft.AspNetCore": "Warning",
|
|
"Microsoft.EntityFrameworkCore": "Warning"
|
|
}
|
|
},
|
|
"Enrich": [ "FromLogContext" ],
|
|
"WriteTo": [
|
|
{ "Name": "Console" }
|
|
]
|
|
},
|
|
"AllowedHosts": "*"
|
|
}
|