@inkeep/agents-core 0.41.2 → 0.43.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/api-client/base-client.d.ts +87 -8
- package/dist/api-client/base-client.js +174 -1
- package/dist/api-client/eval-api-client.d.ts +47 -0
- package/dist/api-client/eval-api-client.js +65 -0
- package/dist/api-client/index.d.ts +4 -0
- package/dist/api-client/index.js +5 -0
- package/dist/api-client/manage-api-client.d.ts +34 -0
- package/dist/api-client/manage-api-client.js +104 -0
- package/dist/auth/auth.d.ts +86 -20
- package/dist/auth/auth.js +60 -2
- package/dist/auth/authz/client.d.ts +87 -0
- package/dist/auth/authz/client.js +196 -0
- package/dist/auth/authz/config.d.ts +103 -0
- package/dist/auth/authz/config.js +93 -0
- package/dist/auth/authz/index.d.ts +5 -0
- package/dist/auth/authz/index.js +6 -0
- package/dist/auth/authz/permissions.d.ts +53 -0
- package/dist/auth/authz/permissions.js +83 -0
- package/dist/auth/authz/sync.d.ts +106 -0
- package/dist/auth/authz/sync.js +321 -0
- package/dist/auth/permissions.d.ts +13 -13
- package/dist/auth/permissions.js +2 -181
- package/dist/client-exports.d.ts +9 -3
- package/dist/client-exports.js +4 -2
- package/dist/constants/context-breakdown.d.ts +61 -0
- package/dist/constants/context-breakdown.js +124 -0
- package/dist/constants/execution-limits-shared/defaults.d.ts +1 -1
- package/dist/constants/execution-limits-shared/defaults.js +1 -1
- package/dist/constants/execution-limits-shared/index.d.ts +1 -1
- package/dist/constants/otel-attributes.d.ts +4 -0
- package/dist/constants/otel-attributes.js +4 -0
- package/dist/context/ContextConfig.d.ts +2 -2
- package/dist/context/ContextConfig.js +3 -3
- package/dist/context/TemplateEngine.d.ts +0 -6
- package/dist/context/TemplateEngine.js +4 -19
- package/dist/context/index.d.ts +1 -5
- package/dist/context/index.js +1 -5
- package/dist/credential-stores/keychain-store.d.ts +20 -8
- package/dist/credential-stores/keychain-store.js +107 -43
- package/dist/credential-stuffer/CredentialStuffer.d.ts +1 -1
- package/dist/data-access/index.d.ts +34 -26
- package/dist/data-access/index.js +34 -26
- package/dist/data-access/manage/agentFull.d.ts +36 -0
- package/dist/data-access/{agentFull.js → manage/agentFull.js} +209 -7
- package/dist/data-access/{agents.d.ts → manage/agents.d.ts} +64 -63
- package/dist/data-access/{agents.js → manage/agents.js} +80 -27
- package/dist/data-access/{artifactComponents.d.ts → manage/artifactComponents.d.ts} +33 -33
- package/dist/data-access/{artifactComponents.js → manage/artifactComponents.js} +5 -5
- package/dist/data-access/{contextConfigs.d.ts → manage/contextConfigs.d.ts} +26 -26
- package/dist/data-access/{contextConfigs.js → manage/contextConfigs.js} +3 -3
- package/dist/data-access/{credentialReferences.d.ts → manage/credentialReferences.d.ts} +17 -17
- package/dist/data-access/{credentialReferences.js → manage/credentialReferences.js} +2 -2
- package/dist/data-access/{dataComponents.d.ts → manage/dataComponents.d.ts} +26 -26
- package/dist/data-access/{dataComponents.js → manage/dataComponents.js} +7 -7
- package/dist/data-access/manage/evalConfig.d.ts +221 -0
- package/dist/data-access/manage/evalConfig.js +275 -0
- package/dist/data-access/{externalAgents.d.ts → manage/externalAgents.d.ts} +16 -16
- package/dist/data-access/{externalAgents.js → manage/externalAgents.js} +2 -2
- package/dist/data-access/manage/functionTools.d.ts +242 -0
- package/dist/data-access/{functionTools.js → manage/functionTools.js} +124 -30
- package/dist/data-access/{functions.d.ts → manage/functions.d.ts} +9 -9
- package/dist/data-access/{functions.js → manage/functions.js} +3 -3
- package/dist/data-access/manage/projectFull.d.ts +38 -0
- package/dist/data-access/{projectFull.js → manage/projectFull.js} +64 -65
- package/dist/data-access/manage/projectLifecycle.d.ts +119 -0
- package/dist/data-access/manage/projectLifecycle.js +234 -0
- package/dist/data-access/manage/projects.d.ts +75 -0
- package/dist/data-access/{projects.js → manage/projects.js} +15 -16
- package/dist/data-access/{subAgentExternalAgentRelations.d.ts → manage/subAgentExternalAgentRelations.d.ts} +43 -43
- package/dist/data-access/{subAgentExternalAgentRelations.js → manage/subAgentExternalAgentRelations.js} +2 -2
- package/dist/data-access/{subAgentRelations.d.ts → manage/subAgentRelations.d.ts} +65 -65
- package/dist/data-access/{subAgentRelations.js → manage/subAgentRelations.js} +3 -3
- package/dist/data-access/{subAgentTeamAgentRelations.d.ts → manage/subAgentTeamAgentRelations.d.ts} +43 -43
- package/dist/data-access/{subAgentTeamAgentRelations.js → manage/subAgentTeamAgentRelations.js} +2 -2
- package/dist/data-access/{subAgents.d.ts → manage/subAgents.d.ts} +28 -28
- package/dist/data-access/{subAgents.js → manage/subAgents.js} +4 -4
- package/dist/data-access/{tools.d.ts → manage/tools.d.ts} +65 -52
- package/dist/data-access/{tools.js → manage/tools.js} +109 -64
- package/dist/data-access/manage/triggers.d.ts +106 -0
- package/dist/data-access/manage/triggers.js +81 -0
- package/dist/data-access/{apiKeys.d.ts → runtime/apiKeys.d.ts} +37 -37
- package/dist/data-access/{apiKeys.js → runtime/apiKeys.js} +3 -3
- package/dist/data-access/runtime/cascade-delete.d.ts +77 -0
- package/dist/data-access/runtime/cascade-delete.js +111 -0
- package/dist/data-access/{contextCache.d.ts → runtime/contextCache.d.ts} +13 -13
- package/dist/data-access/{contextCache.js → runtime/contextCache.js} +5 -5
- package/dist/data-access/{conversations.d.ts → runtime/conversations.d.ts} +80 -31
- package/dist/data-access/{conversations.js → runtime/conversations.js} +13 -7
- package/dist/data-access/runtime/evalRuns.d.ts +120 -0
- package/dist/data-access/runtime/evalRuns.js +168 -0
- package/dist/data-access/{ledgerArtifacts.d.ts → runtime/ledgerArtifacts.d.ts} +13 -13
- package/dist/data-access/{ledgerArtifacts.js → runtime/ledgerArtifacts.js} +3 -3
- package/dist/data-access/{messages.d.ts → runtime/messages.d.ts} +24 -24
- package/dist/data-access/{messages.js → runtime/messages.js} +2 -2
- package/dist/data-access/{organizations.d.ts → runtime/organizations.d.ts} +16 -7
- package/dist/data-access/{organizations.js → runtime/organizations.js} +16 -4
- package/dist/data-access/runtime/projects.d.ts +62 -0
- package/dist/data-access/runtime/projects.js +90 -0
- package/dist/data-access/runtime/tasks.d.ts +55 -0
- package/dist/data-access/{tasks.js → runtime/tasks.js} +2 -2
- package/dist/data-access/runtime/triggerInvocations.d.ts +62 -0
- package/dist/data-access/runtime/triggerInvocations.js +54 -0
- package/dist/data-access/runtime/users.d.ts +19 -0
- package/dist/data-access/{users.js → runtime/users.js} +2 -2
- package/dist/data-access/validation.d.ts +4 -4
- package/dist/data-access/validation.js +1 -1
- package/dist/db/clean.d.ts +8 -4
- package/dist/db/clean.js +14 -105
- package/dist/db/delete.d.ts +1 -1
- package/dist/db/delete.js +7 -10
- package/dist/db/manage/dolt-cleanup.d.ts +51 -0
- package/dist/db/manage/dolt-cleanup.js +132 -0
- package/dist/db/manage/manage-client.d.ts +26 -0
- package/dist/db/manage/manage-client.js +68 -0
- package/dist/db/{schema.d.ts → manage/manage-schema.d.ts} +1257 -969
- package/dist/db/{schema.js → manage/manage-schema.js} +436 -334
- package/dist/db/manage/test-manage-client.d.ts +27 -0
- package/dist/db/manage/test-manage-client.js +68 -0
- package/dist/db/runtime/runtime-client.d.ts +20 -0
- package/dist/db/runtime/runtime-client.js +30 -0
- package/dist/db/runtime/runtime-schema.d.ts +2834 -0
- package/dist/db/runtime/runtime-schema.js +483 -0
- package/dist/db/runtime/test-runtime-client.d.ts +27 -0
- package/dist/db/{test-client.js → runtime/test-runtime-client.js} +11 -25
- package/dist/db/utils.d.ts +6 -0
- package/dist/db/utils.js +42 -0
- package/dist/dolt/branch.d.ts +62 -0
- package/dist/dolt/branch.js +82 -0
- package/dist/dolt/branches-api.d.ts +108 -0
- package/dist/dolt/branches-api.js +162 -0
- package/dist/dolt/commit.d.ts +94 -0
- package/dist/dolt/commit.js +103 -0
- package/dist/dolt/diff.d.ts +27 -0
- package/dist/dolt/diff.js +21 -0
- package/dist/dolt/index.d.ts +10 -0
- package/dist/dolt/index.js +11 -0
- package/dist/dolt/merge.d.ts +63 -0
- package/dist/dolt/merge.js +81 -0
- package/dist/dolt/migrate-all-branches.d.ts +4 -0
- package/dist/dolt/migrate-all-branches.js +83 -0
- package/dist/dolt/migrate-dolt.d.ts +1 -0
- package/dist/dolt/migrate-dolt.js +25 -0
- package/dist/dolt/ref-helpers.d.ts +19 -0
- package/dist/dolt/ref-helpers.js +65 -0
- package/dist/dolt/ref-middleware.d.ts +82 -0
- package/dist/dolt/ref-middleware.js +217 -0
- package/dist/dolt/ref-scope.d.ts +101 -0
- package/dist/dolt/ref-scope.js +231 -0
- package/dist/dolt/schema-sync.d.ts +135 -0
- package/dist/dolt/schema-sync.js +255 -0
- package/dist/env.d.ts +6 -4
- package/dist/env.js +3 -2
- package/dist/index.d.ts +73 -46
- package/dist/index.js +76 -49
- package/dist/types/@napi-rs__keyring/index.d.ts +14 -0
- package/dist/types/entities.d.ts +81 -2
- package/dist/types/index.d.ts +3 -3
- package/dist/types/utility.d.ts +46 -5
- package/dist/types/utility.js +2 -1
- package/dist/utils/JsonTransformer.d.ts +42 -0
- package/dist/utils/JsonTransformer.js +103 -0
- package/dist/utils/apiKeys.d.ts +5 -1
- package/dist/utils/apiKeys.js +11 -1
- package/dist/utils/colors.d.ts +34 -0
- package/dist/utils/colors.js +49 -0
- package/dist/utils/credential-store-utils.d.ts +1 -1
- package/dist/utils/format-messages.d.ts +1 -1
- package/dist/utils/index.d.ts +8 -4
- package/dist/utils/index.js +8 -4
- package/dist/utils/internal-service-auth.d.ts +79 -0
- package/dist/utils/internal-service-auth.js +140 -0
- package/dist/utils/jmespath-utils.d.ts +152 -0
- package/dist/utils/jmespath-utils.js +213 -0
- package/dist/utils/jwt-helpers.d.ts +56 -0
- package/dist/utils/jwt-helpers.js +90 -0
- package/dist/utils/mcp-client.d.ts +1 -1
- package/dist/utils/mcp-client.js +1 -1
- package/dist/utils/service-token-auth.d.ts +9 -27
- package/dist/utils/service-token-auth.js +48 -96
- package/dist/utils/signature-validation.d.ts +2 -0
- package/dist/utils/signature-validation.js +3 -0
- package/dist/utils/template-interpolation.d.ts +22 -0
- package/dist/utils/template-interpolation.js +62 -0
- package/dist/utils/third-party-mcp-servers/composio-client.d.ts +13 -1
- package/dist/utils/third-party-mcp-servers/composio-client.js +47 -29
- package/dist/utils/third-party-mcp-servers/index.d.ts +2 -2
- package/dist/utils/third-party-mcp-servers/index.js +2 -2
- package/dist/utils/trigger-auth.d.ts +85 -0
- package/dist/utils/trigger-auth.js +233 -0
- package/dist/validation/agentFull.js +2 -4
- package/dist/validation/dolt-schemas.d.ts +49 -0
- package/dist/validation/dolt-schemas.js +44 -0
- package/dist/validation/drizzle-schema-helpers.d.ts +4 -26
- package/dist/validation/drizzle-schema-helpers.js +5 -151
- package/dist/validation/index.d.ts +5 -4
- package/dist/validation/index.js +4 -3
- package/dist/validation/render-validation.js +19 -0
- package/dist/validation/schemas.d.ts +18223 -5148
- package/dist/validation/schemas.js +559 -12
- package/dist/validation/stream-event-schemas.d.ts +96 -1
- package/dist/validation/stream-event-schemas.js +67 -2
- package/drizzle/manage/0000_tearful_rhodey.sql +414 -0
- package/drizzle/manage/0001_broken_wendell_vaughn.sql +19 -0
- package/drizzle/manage/0002_bent_sunfire.sql +1 -0
- package/drizzle/manage/0003_tiny_captain_universe.sql +8 -0
- package/drizzle/manage/0004_curious_phil_sheldon.sql +2 -0
- package/drizzle/manage/0005_silent_shatterstar.sql +53 -0
- package/drizzle/manage/meta/0000_snapshot.json +2987 -0
- package/drizzle/manage/meta/0001_snapshot.json +3115 -0
- package/drizzle/manage/meta/0002_snapshot.json +3115 -0
- package/drizzle/manage/meta/0003_snapshot.json +3134 -0
- package/drizzle/manage/meta/0004_snapshot.json +3141 -0
- package/drizzle/manage/meta/0005_snapshot.json +3141 -0
- package/drizzle/manage/meta/_journal.json +48 -0
- package/drizzle/runtime/0008_silly_preak.sql +127 -0
- package/drizzle/runtime/0009_freezing_leo.sql +17 -0
- package/drizzle/runtime/meta/0008_snapshot.json +2263 -0
- package/drizzle/runtime/meta/0009_snapshot.json +2397 -0
- package/drizzle/{meta → runtime/meta}/_journal.json +14 -0
- package/package.json +56 -18
- package/spicedb/schema.zed +114 -0
- package/dist/context/ContextFetcher.d.ts +0 -73
- package/dist/context/ContextFetcher.js +0 -291
- package/dist/context/ContextResolver.d.ts +0 -60
- package/dist/context/ContextResolver.js +0 -278
- package/dist/context/context.d.ts +0 -27
- package/dist/context/context.js +0 -128
- package/dist/context/contextCache.d.ts +0 -58
- package/dist/context/contextCache.js +0 -177
- package/dist/data-access/agentFull.d.ts +0 -33
- package/dist/data-access/functionTools.d.ts +0 -169
- package/dist/data-access/projectFull.d.ts +0 -32
- package/dist/data-access/projects.d.ts +0 -71
- package/dist/data-access/tasks.d.ts +0 -45
- package/dist/data-access/users.d.ts +0 -19
- package/dist/db/client.d.ts +0 -20
- package/dist/db/client.js +0 -28
- package/dist/db/test-client.d.ts +0 -31
- package/dist/middleware/contextValidation.d.ts +0 -46
- package/dist/middleware/contextValidation.js +0 -280
- package/dist/middleware/index.d.ts +0 -2
- package/dist/middleware/index.js +0 -3
- package/dist/utils/execution.d.ts +0 -22
- package/dist/utils/execution.js +0 -25
- /package/drizzle/{0000_exotic_mysterio.sql → runtime/0000_exotic_mysterio.sql} +0 -0
- /package/drizzle/{0001_calm_sheva_callister.sql → runtime/0001_calm_sheva_callister.sql} +0 -0
- /package/drizzle/{0002_puzzling_goblin_queen.sql → runtime/0002_puzzling_goblin_queen.sql} +0 -0
- /package/drizzle/{0003_sweet_human_robot.sql → runtime/0003_sweet_human_robot.sql} +0 -0
- /package/drizzle/{0004_cuddly_shooting_star.sql → runtime/0004_cuddly_shooting_star.sql} +0 -0
- /package/drizzle/{0005_reflective_starfox.sql → runtime/0005_reflective_starfox.sql} +0 -0
- /package/drizzle/{0006_stale_thaddeus_ross.sql → runtime/0006_stale_thaddeus_ross.sql} +0 -0
- /package/drizzle/{0007_slim_karma.sql → runtime/0007_slim_karma.sql} +0 -0
- /package/drizzle/{meta → runtime/meta}/0000_snapshot.json +0 -0
- /package/drizzle/{meta → runtime/meta}/0001_snapshot.json +0 -0
- /package/drizzle/{meta → runtime/meta}/0003_snapshot.json +0 -0
- /package/drizzle/{meta → runtime/meta}/0005_snapshot.json +0 -0
- /package/drizzle/{meta → runtime/meta}/0006_snapshot.json +0 -0
- /package/drizzle/{meta → runtime/meta}/0007_snapshot.json +0 -0
|
@@ -57,6 +57,20 @@
|
|
|
57
57
|
"when": 1767651466654,
|
|
58
58
|
"tag": "0007_slim_karma",
|
|
59
59
|
"breakpoints": true
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"idx": 8,
|
|
63
|
+
"version": "7",
|
|
64
|
+
"when": 1768240742352,
|
|
65
|
+
"tag": "0008_silly_preak",
|
|
66
|
+
"breakpoints": true
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"idx": 9,
|
|
70
|
+
"version": "7",
|
|
71
|
+
"when": 1768646273355,
|
|
72
|
+
"tag": "0009_freezing_leo",
|
|
73
|
+
"breakpoints": true
|
|
60
74
|
}
|
|
61
75
|
]
|
|
62
76
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@inkeep/agents-core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.43.0",
|
|
4
4
|
"description": "Agents Core contains the database schema, types, and validation schemas for Inkeep Agent Framework, along with core components.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "SEE LICENSE IN LICENSE.md",
|
|
@@ -10,13 +10,29 @@
|
|
|
10
10
|
"types": "./dist/index.d.ts",
|
|
11
11
|
"default": "./dist/index.js"
|
|
12
12
|
},
|
|
13
|
-
"./schema": {
|
|
14
|
-
"types": "./dist/db/schema.d.ts",
|
|
15
|
-
"import": "./dist/db/schema.js"
|
|
13
|
+
"./db/manage-schema": {
|
|
14
|
+
"types": "./dist/db/manage/manage-schema.d.ts",
|
|
15
|
+
"import": "./dist/db/manage/manage-schema.js"
|
|
16
16
|
},
|
|
17
|
-
"./db/schema": {
|
|
18
|
-
"types": "./dist/db/schema.d.ts",
|
|
19
|
-
"import": "./dist/db/schema.js"
|
|
17
|
+
"./db/run-schema": {
|
|
18
|
+
"types": "./dist/db/runtime/runtime-schema.d.ts",
|
|
19
|
+
"import": "./dist/db/runtime/runtime-schema.js"
|
|
20
|
+
},
|
|
21
|
+
"./db/manage-client": {
|
|
22
|
+
"types": "./dist/db/manage/manage-client.d.ts",
|
|
23
|
+
"import": "./dist/db/manage/manage-client.js"
|
|
24
|
+
},
|
|
25
|
+
"./db/test-manage-client": {
|
|
26
|
+
"types": "./dist/db/manage/test-manage-client.d.ts",
|
|
27
|
+
"import": "./dist/db/manage/test-manage-client.js"
|
|
28
|
+
},
|
|
29
|
+
"./db/test-runtime-client": {
|
|
30
|
+
"types": "./dist/db/runtime/test-runtime-client.d.ts",
|
|
31
|
+
"import": "./dist/db/runtime/test-runtime-client.js"
|
|
32
|
+
},
|
|
33
|
+
"./db/run-client": {
|
|
34
|
+
"types": "./dist/db/runtime/runtime-client.d.ts",
|
|
35
|
+
"import": "./dist/db/runtime/runtime-client.js"
|
|
20
36
|
},
|
|
21
37
|
"./types": {
|
|
22
38
|
"types": "./dist/types/index.d.ts",
|
|
@@ -50,6 +66,10 @@
|
|
|
50
66
|
"types": "./dist/utils/schema-conversion.d.ts",
|
|
51
67
|
"import": "./dist/utils/schema-conversion.js"
|
|
52
68
|
},
|
|
69
|
+
"./utils/signature-validation": {
|
|
70
|
+
"types": "./dist/utils/signature-validation.d.ts",
|
|
71
|
+
"import": "./dist/utils/signature-validation.js"
|
|
72
|
+
},
|
|
53
73
|
"./auth": {
|
|
54
74
|
"types": "./dist/auth/auth.d.ts",
|
|
55
75
|
"import": "./dist/auth/auth.js"
|
|
@@ -66,16 +86,21 @@
|
|
|
66
86
|
"types": "./dist/auth/permissions.d.ts",
|
|
67
87
|
"import": "./dist/auth/permissions.js"
|
|
68
88
|
},
|
|
89
|
+
"./auth/authz": {
|
|
90
|
+
"types": "./dist/auth/authz/index.d.ts",
|
|
91
|
+
"import": "./dist/auth/authz/index.js"
|
|
92
|
+
},
|
|
69
93
|
"./drizzle": "./drizzle/",
|
|
70
94
|
"./package.json": "./package.json"
|
|
71
95
|
},
|
|
72
96
|
"dependencies": {
|
|
73
|
-
"@ai-sdk/azure": "^3.0.4",
|
|
74
97
|
"@ai-sdk/anthropic": "3.0.7",
|
|
98
|
+
"@ai-sdk/azure": "^3.0.4",
|
|
75
99
|
"@ai-sdk/gateway": "3.0.9",
|
|
76
100
|
"@ai-sdk/google": "3.0.4",
|
|
77
101
|
"@ai-sdk/openai": "3.0.7",
|
|
78
102
|
"@ai-sdk/openai-compatible": "2.0.4",
|
|
103
|
+
"@authzed/authzed-node": "^1.6.1",
|
|
79
104
|
"@better-auth/sso": "~1.4.10",
|
|
80
105
|
"@composio/core": "^0.2.4",
|
|
81
106
|
"@electric-sql/pglite": "^0.3.13",
|
|
@@ -95,14 +120,17 @@
|
|
|
95
120
|
"exit-hook": "^4.0.0",
|
|
96
121
|
"find-up": "^7.0.0",
|
|
97
122
|
"hono": "^4.10.4",
|
|
123
|
+
"iwanthue": "^2.0.0",
|
|
98
124
|
"jmespath": "^0.16.0",
|
|
99
125
|
"jose": "^6.1.0",
|
|
100
126
|
"nanoid": "^5.0.9",
|
|
101
127
|
"pg": "^8.16.3",
|
|
102
128
|
"pino": "^9.11.0",
|
|
103
129
|
"pino-pretty": "^13.1.1",
|
|
130
|
+
"postgres": "^3.4.8",
|
|
104
131
|
"traverse": "^0.6.10",
|
|
105
|
-
"ts-pattern": "^5.7.1"
|
|
132
|
+
"ts-pattern": "^5.7.1",
|
|
133
|
+
"@napi-rs/keyring": "^1.2.0"
|
|
106
134
|
},
|
|
107
135
|
"peerDependencies": {
|
|
108
136
|
"@hono/zod-openapi": "^1.1.5",
|
|
@@ -116,8 +144,7 @@
|
|
|
116
144
|
"@opentelemetry/sdk-metrics": "^2.0.1",
|
|
117
145
|
"@opentelemetry/sdk-node": "^0.203.0",
|
|
118
146
|
"@opentelemetry/sdk-trace-node": "^2.0.1",
|
|
119
|
-
"@opentelemetry/semantic-conventions": "^1.34.0"
|
|
120
|
-
"keytar": "^7.9.0"
|
|
147
|
+
"@opentelemetry/semantic-conventions": "^1.34.0"
|
|
121
148
|
},
|
|
122
149
|
"devDependencies": {
|
|
123
150
|
"@types/jmespath": "^0.15.2",
|
|
@@ -140,6 +167,7 @@
|
|
|
140
167
|
"files": [
|
|
141
168
|
"dist",
|
|
142
169
|
"drizzle",
|
|
170
|
+
"spicedb",
|
|
143
171
|
"README.md",
|
|
144
172
|
"LICENSE.md",
|
|
145
173
|
"SUPPLEMENTAL_TERMS.md"
|
|
@@ -154,8 +182,7 @@
|
|
|
154
182
|
"build": "tsdown",
|
|
155
183
|
"dev": "pnpm build --watch",
|
|
156
184
|
"test": "vitest --run",
|
|
157
|
-
"test:
|
|
158
|
-
"test:integration": "vitest --run src/__tests__/integration/",
|
|
185
|
+
"test:integration": "vitest --run --config vitest.integration.config.ts src/__tests__/integration/",
|
|
159
186
|
"test:coverage": "vitest --run --coverage",
|
|
160
187
|
"test:watch": "vitest --watch",
|
|
161
188
|
"lint": "biome lint --error-on-warnings",
|
|
@@ -164,13 +191,24 @@
|
|
|
164
191
|
"format:check": "biome format src",
|
|
165
192
|
"typecheck": "tsc --noEmit",
|
|
166
193
|
"typecheck:watch": "tsc --noEmit --watch",
|
|
167
|
-
"db:generate": "
|
|
168
|
-
"db:migrate": "
|
|
169
|
-
"db:drop": "
|
|
194
|
+
"db:generate": "pnpm db:manage:generate && pnpm db:run:generate",
|
|
195
|
+
"db:migrate": "pnpm db:manage:migrate && pnpm db:run:migrate",
|
|
196
|
+
"db:drop": "pnpm db:manage:drop && pnpm db:run:drop",
|
|
170
197
|
"db:clean": "tsx src/db/clean.ts",
|
|
171
198
|
"db:delete": "tsx src/db/delete.ts",
|
|
172
199
|
"db:reset": "pnpm db:delete && pnpm db:migrate",
|
|
173
|
-
"db:studio": "
|
|
174
|
-
"db:check": "
|
|
200
|
+
"db:studio": "echo 'Use db:manage:studio or db:run:studio'",
|
|
201
|
+
"db:check": "pnpm db:manage:check && pnpm db:run:check",
|
|
202
|
+
"db:manage:generate": "drizzle-kit generate --config=drizzle.manage.config.ts",
|
|
203
|
+
"db:manage:migrate": "tsx src/dolt/migrate-dolt.ts",
|
|
204
|
+
"db:manage:sync-all-branches": "tsx src/dolt/migrate-all-branches.ts",
|
|
205
|
+
"db:manage:drop": "drizzle-kit drop --config=drizzle.manage.config.ts",
|
|
206
|
+
"db:manage:studio": "drizzle-kit studio --config=drizzle.manage.config.ts",
|
|
207
|
+
"db:manage:check": "drizzle-kit check --config=drizzle.manage.config.ts",
|
|
208
|
+
"db:run:generate": "drizzle-kit generate --config=drizzle.run.config.ts",
|
|
209
|
+
"db:run:migrate": "drizzle-kit migrate --config=drizzle.run.config.ts",
|
|
210
|
+
"db:run:drop": "drizzle-kit drop --config=drizzle.run.config.ts",
|
|
211
|
+
"db:run:studio": "drizzle-kit studio --config=drizzle.run.config.ts",
|
|
212
|
+
"db:run:check": "drizzle-kit check --config=drizzle.run.config.ts"
|
|
175
213
|
}
|
|
176
214
|
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SpiceDB Schema for Project-Level Access Control
|
|
3
|
+
*
|
|
4
|
+
* This schema defines the authorization model for the Inkeep Agent Framework.
|
|
5
|
+
* All projects are private by default and require explicit grants.
|
|
6
|
+
*
|
|
7
|
+
* Naming Conventions (per SpiceDB best practices):
|
|
8
|
+
* - Relations: nouns (roles) - e.g., owner, admin, member
|
|
9
|
+
* - Permissions: verbs (actions) - e.g., view, edit, delete, manage
|
|
10
|
+
*
|
|
11
|
+
* Future Extensibility:
|
|
12
|
+
* - Groups: Add `| group#member` to relation types
|
|
13
|
+
* - Service Accounts: Add `| service_account` to relation types
|
|
14
|
+
* - Custom Roles: Define a `role` definition and bind it via `relation custom_role: role`
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* user represents a human user in the system
|
|
19
|
+
*/
|
|
20
|
+
definition user {}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* organization represents a tenant/org boundary
|
|
24
|
+
* All authorization is scoped within an organization
|
|
25
|
+
*/
|
|
26
|
+
definition organization {
|
|
27
|
+
/**
|
|
28
|
+
* owner has full control over the organization
|
|
29
|
+
*/
|
|
30
|
+
relation owner: user
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* admin can manage org settings and all projects
|
|
34
|
+
*/
|
|
35
|
+
relation admin: user
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* member is a basic org member with no implicit project access
|
|
39
|
+
*/
|
|
40
|
+
relation member: user
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Can view organization details
|
|
44
|
+
* "Can user VIEW organization?"
|
|
45
|
+
*/
|
|
46
|
+
permission view = owner + admin + member
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Can manage organization settings and all projects
|
|
50
|
+
* "Can user MANAGE organization?"
|
|
51
|
+
*/
|
|
52
|
+
permission manage = owner + admin
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* project is a container for agents, workflows, and other resources
|
|
57
|
+
* All projects are private by default - require explicit grants
|
|
58
|
+
*
|
|
59
|
+
* Role Hierarchy:
|
|
60
|
+
* - project_admin: Full access (view + use + edit + manage members)
|
|
61
|
+
* - project_member: Operator access (view + use: invoke agents, create API keys)
|
|
62
|
+
* - project_viewer: Read-only access (view only)
|
|
63
|
+
*/
|
|
64
|
+
definition project {
|
|
65
|
+
/**
|
|
66
|
+
* The organization this project belongs to
|
|
67
|
+
*/
|
|
68
|
+
relation organization: organization
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* project_admin can manage project membership, settings, and configurations
|
|
72
|
+
* Includes all permissions: view, use, edit, delete
|
|
73
|
+
*/
|
|
74
|
+
relation project_admin: user
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* project_member can use the project (invoke agents, create API keys)
|
|
78
|
+
* but cannot edit configurations or manage members
|
|
79
|
+
* Includes: view, use
|
|
80
|
+
*/
|
|
81
|
+
relation project_member: user
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* project_viewer can only view the project and its resources (read-only)
|
|
85
|
+
* Cannot invoke agents, create API keys, or edit anything
|
|
86
|
+
* Includes: view only
|
|
87
|
+
*/
|
|
88
|
+
relation project_viewer: user
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Can view the project and its resources (read-only)
|
|
92
|
+
* "Can user VIEW project?"
|
|
93
|
+
* - Org managers can always view
|
|
94
|
+
* - All project roles can view
|
|
95
|
+
*/
|
|
96
|
+
permission view = organization->manage + project_admin + project_member + project_viewer
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Can use the project (invoke agents, create API keys, view traces)
|
|
100
|
+
* "Can user USE project?"
|
|
101
|
+
* - Org managers can always use
|
|
102
|
+
* - project_admin and project_member can use
|
|
103
|
+
* - project_viewer CANNOT use (read-only)
|
|
104
|
+
*/
|
|
105
|
+
permission use = organization->manage + project_admin + project_member
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Can edit project configurations and manage members
|
|
109
|
+
* "Can user EDIT project?"
|
|
110
|
+
* - Org managers can always edit
|
|
111
|
+
* - Only project_admin can edit
|
|
112
|
+
*/
|
|
113
|
+
permission edit = organization->manage + project_admin
|
|
114
|
+
}
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import { CredentialStoreRegistry } from "../credential-stores/CredentialStoreRegistry.js";
|
|
2
|
-
import { TemplateContext } from "./TemplateEngine.js";
|
|
3
|
-
import { ContextFetchDefinition } from "../types/utility.js";
|
|
4
|
-
import { DatabaseClient } from "../db/client.js";
|
|
5
|
-
|
|
6
|
-
//#region src/context/ContextFetcher.d.ts
|
|
7
|
-
declare class MissingRequiredVariableError extends Error {
|
|
8
|
-
constructor(variable: string);
|
|
9
|
-
}
|
|
10
|
-
interface FetchResult {
|
|
11
|
-
data: unknown;
|
|
12
|
-
source: string;
|
|
13
|
-
durationMs: number;
|
|
14
|
-
}
|
|
15
|
-
declare class ContextFetcher {
|
|
16
|
-
private tenantId;
|
|
17
|
-
private projectId;
|
|
18
|
-
private defaultTimeout;
|
|
19
|
-
private credentialStuffer?;
|
|
20
|
-
private dbClient;
|
|
21
|
-
constructor(tenantId: string, projectId: string, dbClient: DatabaseClient, credentialStoreRegistry?: CredentialStoreRegistry, defaultTimeout?: number);
|
|
22
|
-
/**
|
|
23
|
-
* Fetch data according to a fetch definition
|
|
24
|
-
*/
|
|
25
|
-
fetch(definition: ContextFetchDefinition, context: TemplateContext): Promise<{
|
|
26
|
-
data: unknown;
|
|
27
|
-
resolvedUrl: string;
|
|
28
|
-
}>;
|
|
29
|
-
private getCredential;
|
|
30
|
-
/**
|
|
31
|
-
* Resolve template variables in fetch configuration and inject credential headers
|
|
32
|
-
*/
|
|
33
|
-
private resolveTemplateVariables;
|
|
34
|
-
/**
|
|
35
|
-
* Interpolate template variables in a string using TemplateEngine
|
|
36
|
-
*/
|
|
37
|
-
private interpolateTemplate;
|
|
38
|
-
/**
|
|
39
|
-
* Interpolate template variables in an object recursively using TemplateEngine
|
|
40
|
-
*/
|
|
41
|
-
private interpolateObjectTemplates;
|
|
42
|
-
/**
|
|
43
|
-
* Perform HTTP request
|
|
44
|
-
*/
|
|
45
|
-
private performRequest;
|
|
46
|
-
/**
|
|
47
|
-
* Transform response data using JMESPath
|
|
48
|
-
*/
|
|
49
|
-
private transformResponse;
|
|
50
|
-
/**
|
|
51
|
-
* Validate response against JSON Schema
|
|
52
|
-
*/
|
|
53
|
-
private validateResponseWithJsonSchema;
|
|
54
|
-
/**
|
|
55
|
-
* Test a fetch definition without caching
|
|
56
|
-
*/
|
|
57
|
-
test(definition: ContextFetchDefinition, context: TemplateContext): Promise<{
|
|
58
|
-
success: boolean;
|
|
59
|
-
data?: unknown;
|
|
60
|
-
resolvedUrl?: string;
|
|
61
|
-
error?: string;
|
|
62
|
-
durationMs: number;
|
|
63
|
-
}>;
|
|
64
|
-
/**
|
|
65
|
-
* Get fetcher statistics
|
|
66
|
-
*/
|
|
67
|
-
getStats(): {
|
|
68
|
-
tenantId: string;
|
|
69
|
-
defaultTimeout: number;
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
//#endregion
|
|
73
|
-
export { ContextFetcher, FetchResult, MissingRequiredVariableError };
|
|
@@ -1,291 +0,0 @@
|
|
|
1
|
-
import { getLogger } from "../utils/logger.js";
|
|
2
|
-
import { TemplateEngine } from "./TemplateEngine.js";
|
|
3
|
-
import { CredentialStuffer } from "../credential-stuffer/CredentialStuffer.js";
|
|
4
|
-
import { getCredentialReference } from "../data-access/credentialReferences.js";
|
|
5
|
-
import "../data-access/index.js";
|
|
6
|
-
import { validateAgainstJsonSchema } from "../middleware/contextValidation.js";
|
|
7
|
-
import "../middleware/index.js";
|
|
8
|
-
import jmespath from "jmespath";
|
|
9
|
-
|
|
10
|
-
//#region src/context/ContextFetcher.ts
|
|
11
|
-
const logger = getLogger("context-fetcher");
|
|
12
|
-
var MissingRequiredVariableError = class extends Error {
|
|
13
|
-
constructor(variable) {
|
|
14
|
-
super(`Missing required variable: ${variable}`);
|
|
15
|
-
this.name = "MissingRequiredVariableError";
|
|
16
|
-
}
|
|
17
|
-
};
|
|
18
|
-
/**
|
|
19
|
-
* GraphQL error checker - validates response for GraphQL errors and throws if found
|
|
20
|
-
*/
|
|
21
|
-
const checkGraphQLErrors = (data) => {
|
|
22
|
-
if (data && typeof data === "object" && "errors" in data) {
|
|
23
|
-
const errorObj = data;
|
|
24
|
-
if (Array.isArray(errorObj.errors) && errorObj.errors.length > 0) {
|
|
25
|
-
const agentqlErrors = errorObj.errors;
|
|
26
|
-
const errorMessage = `GraphQL request failed with ${agentqlErrors.length} errors: ${agentqlErrors.map((e) => e.message || "Unknown error").join(", ")}`;
|
|
27
|
-
throw new Error(errorMessage);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
};
|
|
31
|
-
const responseErrorCheckers = [checkGraphQLErrors];
|
|
32
|
-
var ContextFetcher = class {
|
|
33
|
-
tenantId;
|
|
34
|
-
projectId;
|
|
35
|
-
defaultTimeout;
|
|
36
|
-
credentialStuffer;
|
|
37
|
-
dbClient;
|
|
38
|
-
constructor(tenantId, projectId, dbClient, credentialStoreRegistry, defaultTimeout = 1e4) {
|
|
39
|
-
this.tenantId = tenantId;
|
|
40
|
-
this.projectId = projectId;
|
|
41
|
-
this.defaultTimeout = defaultTimeout;
|
|
42
|
-
if (credentialStoreRegistry) this.credentialStuffer = new CredentialStuffer(credentialStoreRegistry);
|
|
43
|
-
this.dbClient = dbClient;
|
|
44
|
-
logger.info({
|
|
45
|
-
tenantId: this.tenantId,
|
|
46
|
-
defaultTimeout: this.defaultTimeout,
|
|
47
|
-
hasCredentialSupport: !!this.credentialStuffer
|
|
48
|
-
}, "ContextFetcher initialized");
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Fetch data according to a fetch definition
|
|
52
|
-
*/
|
|
53
|
-
async fetch(definition, context) {
|
|
54
|
-
const startTime = Date.now();
|
|
55
|
-
logger.info({
|
|
56
|
-
definitionId: definition.id,
|
|
57
|
-
url: definition.fetchConfig.url
|
|
58
|
-
}, "Starting context fetch");
|
|
59
|
-
try {
|
|
60
|
-
const resolvedConfig = await this.resolveTemplateVariables(definition.fetchConfig, context, definition.credentialReferenceId);
|
|
61
|
-
const response = await this.performRequest(resolvedConfig);
|
|
62
|
-
let transformedData = response.data;
|
|
63
|
-
if (definition.fetchConfig.transform) transformedData = this.transformResponse(response.data, definition.fetchConfig.transform);
|
|
64
|
-
if (definition.responseSchema) this.validateResponseWithJsonSchema(transformedData, definition.responseSchema, definition.id);
|
|
65
|
-
const durationMs = Date.now() - startTime;
|
|
66
|
-
logger.info({
|
|
67
|
-
definitionId: definition.id,
|
|
68
|
-
source: response.source,
|
|
69
|
-
durationMs
|
|
70
|
-
}, "Context fetch completed successfully");
|
|
71
|
-
return {
|
|
72
|
-
data: transformedData,
|
|
73
|
-
resolvedUrl: resolvedConfig.url
|
|
74
|
-
};
|
|
75
|
-
} catch (error) {
|
|
76
|
-
const durationMs = Date.now() - startTime;
|
|
77
|
-
const errorMessage = error instanceof Error ? error.message : "Unknown error";
|
|
78
|
-
if (error instanceof MissingRequiredVariableError) logger.error({
|
|
79
|
-
definitionId: definition.id,
|
|
80
|
-
error: errorMessage,
|
|
81
|
-
durationMs
|
|
82
|
-
}, "Context fetch skipped due to missing required variable");
|
|
83
|
-
logger.error({
|
|
84
|
-
definitionId: definition.id,
|
|
85
|
-
error: errorMessage,
|
|
86
|
-
durationMs
|
|
87
|
-
}, "Context fetch failed");
|
|
88
|
-
throw error;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
async getCredential(credentialReferenceId) {
|
|
92
|
-
try {
|
|
93
|
-
const credentialReference = await getCredentialReference(this.dbClient)({
|
|
94
|
-
scopes: {
|
|
95
|
-
tenantId: this.tenantId,
|
|
96
|
-
projectId: this.projectId
|
|
97
|
-
},
|
|
98
|
-
id: credentialReferenceId
|
|
99
|
-
});
|
|
100
|
-
logger.info({ credentialReference }, "Credential reference");
|
|
101
|
-
if (!credentialReference || !this.credentialStuffer) throw new Error(`Credential store not found for reference ID: ${credentialReferenceId}`);
|
|
102
|
-
const credentialContext = {
|
|
103
|
-
tenantId: this.tenantId,
|
|
104
|
-
projectId: this.projectId
|
|
105
|
-
};
|
|
106
|
-
const storeReference = {
|
|
107
|
-
credentialStoreId: credentialReference.credentialStoreId,
|
|
108
|
-
retrievalParams: credentialReference.retrievalParams || {}
|
|
109
|
-
};
|
|
110
|
-
return await this.credentialStuffer.getCredentials(credentialContext, storeReference);
|
|
111
|
-
} catch (error) {
|
|
112
|
-
logger.error({
|
|
113
|
-
credentialReferenceId,
|
|
114
|
-
error: error instanceof Error ? error.message : "Unknown error"
|
|
115
|
-
}, "Failed to resolve credentials for fetch request");
|
|
116
|
-
throw error;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Resolve template variables in fetch configuration and inject credential headers
|
|
121
|
-
*/
|
|
122
|
-
async resolveTemplateVariables(fetchConfig, context, credentialReferenceId) {
|
|
123
|
-
const resolved = { ...fetchConfig };
|
|
124
|
-
const filteredRequiredToFetch = fetchConfig.requiredToFetch?.filter((variable) => variable.startsWith("{{") && variable.endsWith("}}"));
|
|
125
|
-
if (filteredRequiredToFetch) for (const variable of filteredRequiredToFetch) {
|
|
126
|
-
let resolvedVariable;
|
|
127
|
-
try {
|
|
128
|
-
resolvedVariable = this.interpolateTemplate(variable, context);
|
|
129
|
-
} catch {
|
|
130
|
-
throw new MissingRequiredVariableError(variable);
|
|
131
|
-
}
|
|
132
|
-
if (resolvedVariable === "" || resolvedVariable === variable) throw new MissingRequiredVariableError(variable);
|
|
133
|
-
}
|
|
134
|
-
resolved.url = this.interpolateTemplate(fetchConfig.url, context);
|
|
135
|
-
logger.info({ resolvedUrl: resolved.url }, "Resolved URL");
|
|
136
|
-
if (fetchConfig.headers) {
|
|
137
|
-
resolved.headers = {};
|
|
138
|
-
for (const [key, value] of Object.entries(fetchConfig.headers)) resolved.headers[key] = this.interpolateTemplate(value, context);
|
|
139
|
-
}
|
|
140
|
-
if (fetchConfig.body) resolved.body = this.interpolateObjectTemplates(fetchConfig.body, context);
|
|
141
|
-
if (credentialReferenceId && this.credentialStuffer) try {
|
|
142
|
-
const credentialHeaders = (await this.getCredential(credentialReferenceId))?.headers;
|
|
143
|
-
if (credentialHeaders) {
|
|
144
|
-
resolved.headers = {
|
|
145
|
-
...resolved.headers,
|
|
146
|
-
...credentialHeaders
|
|
147
|
-
};
|
|
148
|
-
logger.info({ credentialReferenceId }, "Added credential headers to fetch request");
|
|
149
|
-
}
|
|
150
|
-
} catch (error) {
|
|
151
|
-
logger.error({
|
|
152
|
-
credentialReferenceId,
|
|
153
|
-
error: error instanceof Error ? error.message : "Unknown error"
|
|
154
|
-
}, "Failed to resolve credentials for fetch request");
|
|
155
|
-
throw error;
|
|
156
|
-
}
|
|
157
|
-
return resolved;
|
|
158
|
-
}
|
|
159
|
-
/**
|
|
160
|
-
* Interpolate template variables in a string using TemplateEngine
|
|
161
|
-
*/
|
|
162
|
-
interpolateTemplate(template, context) {
|
|
163
|
-
try {
|
|
164
|
-
return TemplateEngine.render(template, context, {
|
|
165
|
-
strict: false,
|
|
166
|
-
preserveUnresolved: true
|
|
167
|
-
});
|
|
168
|
-
} catch (error) {
|
|
169
|
-
logger.error({
|
|
170
|
-
template,
|
|
171
|
-
error: error instanceof Error ? error.message : "Unknown error"
|
|
172
|
-
}, "Failed to interpolate template variable");
|
|
173
|
-
return template;
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
/**
|
|
177
|
-
* Interpolate template variables in an object recursively using TemplateEngine
|
|
178
|
-
*/
|
|
179
|
-
interpolateObjectTemplates(obj, context) {
|
|
180
|
-
const result = {};
|
|
181
|
-
for (const [key, value] of Object.entries(obj)) if (typeof value === "string") result[key] = this.interpolateTemplate(value, context);
|
|
182
|
-
else if (value && typeof value === "object" && !Array.isArray(value)) result[key] = this.interpolateObjectTemplates(value, context);
|
|
183
|
-
else result[key] = value;
|
|
184
|
-
return result;
|
|
185
|
-
}
|
|
186
|
-
/**
|
|
187
|
-
* Perform HTTP request
|
|
188
|
-
*/
|
|
189
|
-
async performRequest(config) {
|
|
190
|
-
const startTime = Date.now();
|
|
191
|
-
try {
|
|
192
|
-
logger.debug({
|
|
193
|
-
url: config.url,
|
|
194
|
-
method: config.method
|
|
195
|
-
}, "Performing HTTP request");
|
|
196
|
-
const response = await fetch(config.url, {
|
|
197
|
-
method: config.method,
|
|
198
|
-
headers: config.headers,
|
|
199
|
-
body: config.body ? JSON.stringify(config.body) : void 0,
|
|
200
|
-
signal: AbortSignal.timeout(config.timeout || this.defaultTimeout)
|
|
201
|
-
});
|
|
202
|
-
if (!response.ok) {
|
|
203
|
-
const errorText = await response.text();
|
|
204
|
-
throw /* @__PURE__ */ new Error(`HTTP ${response.status}: ${response.statusText} - ${errorText}`);
|
|
205
|
-
}
|
|
206
|
-
const contentType = response.headers.get("content-type") || "";
|
|
207
|
-
let data;
|
|
208
|
-
if (contentType.includes("application/json")) data = await response.json();
|
|
209
|
-
else data = await response.text();
|
|
210
|
-
const durationMs = Date.now() - startTime;
|
|
211
|
-
for (const checker of responseErrorCheckers) checker(data);
|
|
212
|
-
return {
|
|
213
|
-
data,
|
|
214
|
-
source: config.url,
|
|
215
|
-
durationMs
|
|
216
|
-
};
|
|
217
|
-
} catch (error) {
|
|
218
|
-
const durationMs = Date.now() - startTime;
|
|
219
|
-
const requestError = error instanceof Error ? error : /* @__PURE__ */ new Error("Unknown error");
|
|
220
|
-
logger.warn({
|
|
221
|
-
url: config.url,
|
|
222
|
-
error: requestError.message,
|
|
223
|
-
durationMs
|
|
224
|
-
}, "HTTP request failed");
|
|
225
|
-
throw requestError;
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
/**
|
|
229
|
-
* Transform response data using JMESPath
|
|
230
|
-
*/
|
|
231
|
-
transformResponse(data, transform) {
|
|
232
|
-
try {
|
|
233
|
-
return jmespath.search(data, transform);
|
|
234
|
-
} catch (error) {
|
|
235
|
-
logger.error({
|
|
236
|
-
transform,
|
|
237
|
-
error: error instanceof Error ? error.message : "Unknown error"
|
|
238
|
-
}, "Failed to transform response data");
|
|
239
|
-
return data;
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
/**
|
|
243
|
-
* Validate response against JSON Schema
|
|
244
|
-
*/
|
|
245
|
-
validateResponseWithJsonSchema(data, jsonSchema, definitionId) {
|
|
246
|
-
try {
|
|
247
|
-
if (!validateAgainstJsonSchema(jsonSchema, data)) throw new Error("Data does not match JSON Schema");
|
|
248
|
-
} catch (error) {
|
|
249
|
-
const errorMessage = error instanceof Error ? error.message : "Unknown validation error";
|
|
250
|
-
logger.error({
|
|
251
|
-
definitionId,
|
|
252
|
-
jsonSchema,
|
|
253
|
-
error: errorMessage
|
|
254
|
-
}, "JSON Schema response validation failed");
|
|
255
|
-
throw new Error(`Response validation failed: ${errorMessage}`);
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
/**
|
|
259
|
-
* Test a fetch definition without caching
|
|
260
|
-
*/
|
|
261
|
-
async test(definition, context) {
|
|
262
|
-
const startTime = Date.now();
|
|
263
|
-
try {
|
|
264
|
-
const result = await this.fetch(definition, context);
|
|
265
|
-
return {
|
|
266
|
-
success: true,
|
|
267
|
-
data: result.data,
|
|
268
|
-
resolvedUrl: result.resolvedUrl,
|
|
269
|
-
durationMs: Date.now() - startTime
|
|
270
|
-
};
|
|
271
|
-
} catch (error) {
|
|
272
|
-
return {
|
|
273
|
-
success: false,
|
|
274
|
-
error: error instanceof Error ? error.message : "Unknown error",
|
|
275
|
-
durationMs: Date.now() - startTime
|
|
276
|
-
};
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
/**
|
|
280
|
-
* Get fetcher statistics
|
|
281
|
-
*/
|
|
282
|
-
getStats() {
|
|
283
|
-
return {
|
|
284
|
-
tenantId: this.tenantId,
|
|
285
|
-
defaultTimeout: this.defaultTimeout
|
|
286
|
-
};
|
|
287
|
-
}
|
|
288
|
-
};
|
|
289
|
-
|
|
290
|
-
//#endregion
|
|
291
|
-
export { ContextFetcher, MissingRequiredVariableError };
|