narai-primitives 2.0.0-rc.1
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/LICENSE +21 -0
- package/README.md +64 -0
- package/dist/config/bootstrap.d.ts +28 -0
- package/dist/config/bootstrap.d.ts.map +1 -0
- package/dist/config/bootstrap.js +80 -0
- package/dist/config/bootstrap.js.map +1 -0
- package/dist/config/index.d.ts +13 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +12 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/load.d.ts +37 -0
- package/dist/config/load.d.ts.map +1 -0
- package/dist/config/load.js +99 -0
- package/dist/config/load.js.map +1 -0
- package/dist/config/resolve.d.ts +23 -0
- package/dist/config/resolve.d.ts.map +1 -0
- package/dist/config/resolve.js +198 -0
- package/dist/config/resolve.js.map +1 -0
- package/dist/config/secrets.d.ts +20 -0
- package/dist/config/secrets.d.ts.map +1 -0
- package/dist/config/secrets.js +43 -0
- package/dist/config/secrets.js.map +1 -0
- package/dist/config/types.d.ts +104 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +11 -0
- package/dist/config/types.js.map +1 -0
- package/dist/connectors/aws/cli.d.ts +3 -0
- package/dist/connectors/aws/cli.d.ts.map +1 -0
- package/dist/connectors/aws/cli.js +27 -0
- package/dist/connectors/aws/cli.js.map +1 -0
- package/dist/connectors/aws/index.d.ts +27 -0
- package/dist/connectors/aws/index.d.ts.map +1 -0
- package/dist/connectors/aws/index.js +281 -0
- package/dist/connectors/aws/index.js.map +1 -0
- package/dist/connectors/aws/lib/aws_client.d.ts +140 -0
- package/dist/connectors/aws/lib/aws_client.d.ts.map +1 -0
- package/dist/connectors/aws/lib/aws_client.js +196 -0
- package/dist/connectors/aws/lib/aws_client.js.map +1 -0
- package/dist/connectors/aws/lib/aws_error.d.ts +10 -0
- package/dist/connectors/aws/lib/aws_error.d.ts.map +1 -0
- package/dist/connectors/aws/lib/aws_error.js +15 -0
- package/dist/connectors/aws/lib/aws_error.js.map +1 -0
- package/dist/connectors/confluence/cli.d.ts +3 -0
- package/dist/connectors/confluence/cli.d.ts.map +1 -0
- package/dist/connectors/confluence/cli.js +24 -0
- package/dist/connectors/confluence/cli.js.map +1 -0
- package/dist/connectors/confluence/index.d.ts +15 -0
- package/dist/connectors/confluence/index.d.ts.map +1 -0
- package/dist/connectors/confluence/index.js +295 -0
- package/dist/connectors/confluence/index.js.map +1 -0
- package/dist/connectors/confluence/lib/confluence_client.d.ts +135 -0
- package/dist/connectors/confluence/lib/confluence_client.d.ts.map +1 -0
- package/dist/connectors/confluence/lib/confluence_client.js +329 -0
- package/dist/connectors/confluence/lib/confluence_client.js.map +1 -0
- package/dist/connectors/confluence/lib/confluence_error.d.ts +13 -0
- package/dist/connectors/confluence/lib/confluence_error.d.ts.map +1 -0
- package/dist/connectors/confluence/lib/confluence_error.js +19 -0
- package/dist/connectors/confluence/lib/confluence_error.js.map +1 -0
- package/dist/connectors/db/cli.d.ts +5 -0
- package/dist/connectors/db/cli.d.ts.map +1 -0
- package/dist/connectors/db/cli.js +34 -0
- package/dist/connectors/db/cli.js.map +1 -0
- package/dist/connectors/db/config.d.ts +18 -0
- package/dist/connectors/db/config.d.ts.map +1 -0
- package/dist/connectors/db/config.js +142 -0
- package/dist/connectors/db/config.js.map +1 -0
- package/dist/connectors/db/connector.d.ts +31 -0
- package/dist/connectors/db/connector.d.ts.map +1 -0
- package/dist/connectors/db/connector.js +175 -0
- package/dist/connectors/db/connector.js.map +1 -0
- package/dist/connectors/db/dispatcher.d.ts +36 -0
- package/dist/connectors/db/dispatcher.d.ts.map +1 -0
- package/dist/connectors/db/dispatcher.js +597 -0
- package/dist/connectors/db/dispatcher.js.map +1 -0
- package/dist/connectors/db/index.d.ts +22 -0
- package/dist/connectors/db/index.d.ts.map +1 -0
- package/dist/connectors/db/index.js +26 -0
- package/dist/connectors/db/index.js.map +1 -0
- package/dist/connectors/db/lib/audit.d.ts +32 -0
- package/dist/connectors/db/lib/audit.d.ts.map +1 -0
- package/dist/connectors/db/lib/audit.js +130 -0
- package/dist/connectors/db/lib/audit.js.map +1 -0
- package/dist/connectors/db/lib/connection.d.ts +61 -0
- package/dist/connectors/db/lib/connection.d.ts.map +1 -0
- package/dist/connectors/db/lib/connection.js +326 -0
- package/dist/connectors/db/lib/connection.js.map +1 -0
- package/dist/connectors/db/lib/credentials.d.ts +60 -0
- package/dist/connectors/db/lib/credentials.d.ts.map +1 -0
- package/dist/connectors/db/lib/credentials.js +117 -0
- package/dist/connectors/db/lib/credentials.js.map +1 -0
- package/dist/connectors/db/lib/drivers/base.d.ts +83 -0
- package/dist/connectors/db/lib/drivers/base.d.ts.map +1 -0
- package/dist/connectors/db/lib/drivers/base.js +46 -0
- package/dist/connectors/db/lib/drivers/base.js.map +1 -0
- package/dist/connectors/db/lib/drivers/dynamodb.d.ts +108 -0
- package/dist/connectors/db/lib/drivers/dynamodb.d.ts.map +1 -0
- package/dist/connectors/db/lib/drivers/dynamodb.js +468 -0
- package/dist/connectors/db/lib/drivers/dynamodb.js.map +1 -0
- package/dist/connectors/db/lib/drivers/mongodb.d.ts +60 -0
- package/dist/connectors/db/lib/drivers/mongodb.d.ts.map +1 -0
- package/dist/connectors/db/lib/drivers/mongodb.js +371 -0
- package/dist/connectors/db/lib/drivers/mongodb.js.map +1 -0
- package/dist/connectors/db/lib/drivers/mysql.d.ts +45 -0
- package/dist/connectors/db/lib/drivers/mysql.d.ts.map +1 -0
- package/dist/connectors/db/lib/drivers/mysql.js +265 -0
- package/dist/connectors/db/lib/drivers/mysql.js.map +1 -0
- package/dist/connectors/db/lib/drivers/oracle.d.ts +53 -0
- package/dist/connectors/db/lib/drivers/oracle.d.ts.map +1 -0
- package/dist/connectors/db/lib/drivers/oracle.js +350 -0
- package/dist/connectors/db/lib/drivers/oracle.js.map +1 -0
- package/dist/connectors/db/lib/drivers/postgresql.d.ts +65 -0
- package/dist/connectors/db/lib/drivers/postgresql.d.ts.map +1 -0
- package/dist/connectors/db/lib/drivers/postgresql.js +294 -0
- package/dist/connectors/db/lib/drivers/postgresql.js.map +1 -0
- package/dist/connectors/db/lib/drivers/register.d.ts +16 -0
- package/dist/connectors/db/lib/drivers/register.d.ts.map +1 -0
- package/dist/connectors/db/lib/drivers/register.js +111 -0
- package/dist/connectors/db/lib/drivers/register.js.map +1 -0
- package/dist/connectors/db/lib/drivers/sqlite.d.ts +11 -0
- package/dist/connectors/db/lib/drivers/sqlite.d.ts.map +1 -0
- package/dist/connectors/db/lib/drivers/sqlite.js +147 -0
- package/dist/connectors/db/lib/drivers/sqlite.js.map +1 -0
- package/dist/connectors/db/lib/drivers/sqlserver.d.ts +58 -0
- package/dist/connectors/db/lib/drivers/sqlserver.d.ts.map +1 -0
- package/dist/connectors/db/lib/drivers/sqlserver.js +274 -0
- package/dist/connectors/db/lib/drivers/sqlserver.js.map +1 -0
- package/dist/connectors/db/lib/environments.d.ts +68 -0
- package/dist/connectors/db/lib/environments.d.ts.map +1 -0
- package/dist/connectors/db/lib/environments.js +53 -0
- package/dist/connectors/db/lib/environments.js.map +1 -0
- package/dist/connectors/db/lib/index.d.ts +28 -0
- package/dist/connectors/db/lib/index.d.ts.map +1 -0
- package/dist/connectors/db/lib/index.js +30 -0
- package/dist/connectors/db/lib/index.js.map +1 -0
- package/dist/connectors/db/lib/plugin_config.d.ts +64 -0
- package/dist/connectors/db/lib/plugin_config.d.ts.map +1 -0
- package/dist/connectors/db/lib/plugin_config.js +287 -0
- package/dist/connectors/db/lib/plugin_config.js.map +1 -0
- package/dist/connectors/db/lib/policy.d.ts +162 -0
- package/dist/connectors/db/lib/policy.d.ts.map +1 -0
- package/dist/connectors/db/lib/policy.js +581 -0
- package/dist/connectors/db/lib/policy.js.map +1 -0
- package/dist/connectors/db/lib/query.d.ts +22 -0
- package/dist/connectors/db/lib/query.d.ts.map +1 -0
- package/dist/connectors/db/lib/query.js +93 -0
- package/dist/connectors/db/lib/query.js.map +1 -0
- package/dist/connectors/db/lib/schema.d.ts +13 -0
- package/dist/connectors/db/lib/schema.d.ts.map +1 -0
- package/dist/connectors/db/lib/schema.js +80 -0
- package/dist/connectors/db/lib/schema.js.map +1 -0
- package/dist/connectors/gcp/cli.d.ts +3 -0
- package/dist/connectors/gcp/cli.d.ts.map +1 -0
- package/dist/connectors/gcp/cli.js +24 -0
- package/dist/connectors/gcp/cli.js.map +1 -0
- package/dist/connectors/gcp/index.d.ts +24 -0
- package/dist/connectors/gcp/index.d.ts.map +1 -0
- package/dist/connectors/gcp/index.js +205 -0
- package/dist/connectors/gcp/index.js.map +1 -0
- package/dist/connectors/gcp/lib/gcp_client.d.ts +88 -0
- package/dist/connectors/gcp/lib/gcp_client.d.ts.map +1 -0
- package/dist/connectors/gcp/lib/gcp_client.js +434 -0
- package/dist/connectors/gcp/lib/gcp_client.js.map +1 -0
- package/dist/connectors/gcp/lib/gcp_error.d.ts +10 -0
- package/dist/connectors/gcp/lib/gcp_error.d.ts.map +1 -0
- package/dist/connectors/gcp/lib/gcp_error.js +15 -0
- package/dist/connectors/gcp/lib/gcp_error.js.map +1 -0
- package/dist/connectors/github/cli.d.ts +3 -0
- package/dist/connectors/github/cli.d.ts.map +1 -0
- package/dist/connectors/github/cli.js +23 -0
- package/dist/connectors/github/cli.js.map +1 -0
- package/dist/connectors/github/index.d.ts +23 -0
- package/dist/connectors/github/index.d.ts.map +1 -0
- package/dist/connectors/github/index.js +462 -0
- package/dist/connectors/github/index.js.map +1 -0
- package/dist/connectors/github/lib/github_client.d.ts +181 -0
- package/dist/connectors/github/lib/github_client.d.ts.map +1 -0
- package/dist/connectors/github/lib/github_client.js +383 -0
- package/dist/connectors/github/lib/github_client.js.map +1 -0
- package/dist/connectors/github/lib/github_error.d.ts +11 -0
- package/dist/connectors/github/lib/github_error.d.ts.map +1 -0
- package/dist/connectors/github/lib/github_error.js +17 -0
- package/dist/connectors/github/lib/github_error.js.map +1 -0
- package/dist/connectors/jira/cli.d.ts +3 -0
- package/dist/connectors/jira/cli.d.ts.map +1 -0
- package/dist/connectors/jira/cli.js +24 -0
- package/dist/connectors/jira/cli.js.map +1 -0
- package/dist/connectors/jira/index.d.ts +13 -0
- package/dist/connectors/jira/index.d.ts.map +1 -0
- package/dist/connectors/jira/index.js +287 -0
- package/dist/connectors/jira/index.js.map +1 -0
- package/dist/connectors/jira/lib/adf.d.ts +25 -0
- package/dist/connectors/jira/lib/adf.d.ts.map +1 -0
- package/dist/connectors/jira/lib/adf.js +105 -0
- package/dist/connectors/jira/lib/adf.js.map +1 -0
- package/dist/connectors/jira/lib/jira_client.d.ts +143 -0
- package/dist/connectors/jira/lib/jira_client.d.ts.map +1 -0
- package/dist/connectors/jira/lib/jira_client.js +355 -0
- package/dist/connectors/jira/lib/jira_client.js.map +1 -0
- package/dist/connectors/jira/lib/jira_error.d.ts +11 -0
- package/dist/connectors/jira/lib/jira_error.d.ts.map +1 -0
- package/dist/connectors/jira/lib/jira_error.js +17 -0
- package/dist/connectors/jira/lib/jira_error.js.map +1 -0
- package/dist/connectors/notion/cli.d.ts +3 -0
- package/dist/connectors/notion/cli.d.ts.map +1 -0
- package/dist/connectors/notion/cli.js +22 -0
- package/dist/connectors/notion/cli.js.map +1 -0
- package/dist/connectors/notion/index.d.ts +20 -0
- package/dist/connectors/notion/index.d.ts.map +1 -0
- package/dist/connectors/notion/index.js +317 -0
- package/dist/connectors/notion/index.js.map +1 -0
- package/dist/connectors/notion/lib/notion_client.d.ts +117 -0
- package/dist/connectors/notion/lib/notion_client.d.ts.map +1 -0
- package/dist/connectors/notion/lib/notion_client.js +377 -0
- package/dist/connectors/notion/lib/notion_client.js.map +1 -0
- package/dist/connectors/notion/lib/notion_error.d.ts +12 -0
- package/dist/connectors/notion/lib/notion_error.d.ts.map +1 -0
- package/dist/connectors/notion/lib/notion_error.js +18 -0
- package/dist/connectors/notion/lib/notion_error.js.map +1 -0
- package/dist/hub/cli.d.ts +4 -0
- package/dist/hub/cli.d.ts.map +1 -0
- package/dist/hub/cli.js +93 -0
- package/dist/hub/cli.js.map +1 -0
- package/dist/hub/dispatch.d.ts +33 -0
- package/dist/hub/dispatch.d.ts.map +1 -0
- package/dist/hub/dispatch.js +297 -0
- package/dist/hub/dispatch.js.map +1 -0
- package/dist/hub/index.d.ts +9 -0
- package/dist/hub/index.d.ts.map +1 -0
- package/dist/hub/index.js +215 -0
- package/dist/hub/index.js.map +1 -0
- package/dist/hub/plan.d.ts +24 -0
- package/dist/hub/plan.d.ts.map +1 -0
- package/dist/hub/plan.js +103 -0
- package/dist/hub/plan.js.map +1 -0
- package/dist/hub/types.d.ts +65 -0
- package/dist/hub/types.d.ts.map +1 -0
- package/dist/hub/types.js +3 -0
- package/dist/hub/types.js.map +1 -0
- package/dist/toolkit/_optional.d.ts +14 -0
- package/dist/toolkit/_optional.d.ts.map +1 -0
- package/dist/toolkit/_optional.js +96 -0
- package/dist/toolkit/_optional.js.map +1 -0
- package/dist/toolkit/agent_cli.d.ts +33 -0
- package/dist/toolkit/agent_cli.d.ts.map +1 -0
- package/dist/toolkit/agent_cli.js +62 -0
- package/dist/toolkit/agent_cli.js.map +1 -0
- package/dist/toolkit/agent_resolver.d.ts +46 -0
- package/dist/toolkit/agent_resolver.d.ts.map +1 -0
- package/dist/toolkit/agent_resolver.js +78 -0
- package/dist/toolkit/agent_resolver.js.map +1 -0
- package/dist/toolkit/audit/events.d.ts +45 -0
- package/dist/toolkit/audit/events.d.ts.map +1 -0
- package/dist/toolkit/audit/events.js +8 -0
- package/dist/toolkit/audit/events.js.map +1 -0
- package/dist/toolkit/audit/writer.d.ts +16 -0
- package/dist/toolkit/audit/writer.d.ts.map +1 -0
- package/dist/toolkit/audit/writer.js +73 -0
- package/dist/toolkit/audit/writer.js.map +1 -0
- package/dist/toolkit/cli/usage-report.d.ts +3 -0
- package/dist/toolkit/cli/usage-report.d.ts.map +1 -0
- package/dist/toolkit/cli/usage-report.js +76 -0
- package/dist/toolkit/cli/usage-report.js.map +1 -0
- package/dist/toolkit/connector.d.ts +142 -0
- package/dist/toolkit/connector.d.ts.map +1 -0
- package/dist/toolkit/connector.js +593 -0
- package/dist/toolkit/connector.js.map +1 -0
- package/dist/toolkit/extract_binary.d.ts +45 -0
- package/dist/toolkit/extract_binary.d.ts.map +1 -0
- package/dist/toolkit/extract_binary.js +342 -0
- package/dist/toolkit/extract_binary.js.map +1 -0
- package/dist/toolkit/extract_multimodal.d.ts +22 -0
- package/dist/toolkit/extract_multimodal.d.ts.map +1 -0
- package/dist/toolkit/extract_multimodal.js +209 -0
- package/dist/toolkit/extract_multimodal.js.map +1 -0
- package/dist/toolkit/fetch_attachment.d.ts +21 -0
- package/dist/toolkit/fetch_attachment.d.ts.map +1 -0
- package/dist/toolkit/fetch_attachment.js +169 -0
- package/dist/toolkit/fetch_attachment.js.map +1 -0
- package/dist/toolkit/fetch_helper.d.ts +47 -0
- package/dist/toolkit/fetch_helper.d.ts.map +1 -0
- package/dist/toolkit/fetch_helper.js +124 -0
- package/dist/toolkit/fetch_helper.js.map +1 -0
- package/dist/toolkit/guardrail.d.ts +63 -0
- package/dist/toolkit/guardrail.d.ts.map +1 -0
- package/dist/toolkit/guardrail.js +166 -0
- package/dist/toolkit/guardrail.js.map +1 -0
- package/dist/toolkit/hardship/curate.d.ts +47 -0
- package/dist/toolkit/hardship/curate.d.ts.map +1 -0
- package/dist/toolkit/hardship/curate.js +113 -0
- package/dist/toolkit/hardship/curate.js.map +1 -0
- package/dist/toolkit/hardship/patterns.d.ts +32 -0
- package/dist/toolkit/hardship/patterns.d.ts.map +1 -0
- package/dist/toolkit/hardship/patterns.js +98 -0
- package/dist/toolkit/hardship/patterns.js.map +1 -0
- package/dist/toolkit/hardship/preamble.d.ts +13 -0
- package/dist/toolkit/hardship/preamble.d.ts.map +1 -0
- package/dist/toolkit/hardship/preamble.js +47 -0
- package/dist/toolkit/hardship/preamble.js.map +1 -0
- package/dist/toolkit/hardship/read.d.ts +34 -0
- package/dist/toolkit/hardship/read.d.ts.map +1 -0
- package/dist/toolkit/hardship/read.js +116 -0
- package/dist/toolkit/hardship/read.js.map +1 -0
- package/dist/toolkit/hardship/record.d.ts +43 -0
- package/dist/toolkit/hardship/record.d.ts.map +1 -0
- package/dist/toolkit/hardship/record.js +74 -0
- package/dist/toolkit/hardship/record.js.map +1 -0
- package/dist/toolkit/hardship/scope.d.ts +20 -0
- package/dist/toolkit/hardship/scope.d.ts.map +1 -0
- package/dist/toolkit/hardship/scope.js +56 -0
- package/dist/toolkit/hardship/scope.js.map +1 -0
- package/dist/toolkit/index.d.ts +42 -0
- package/dist/toolkit/index.d.ts.map +1 -0
- package/dist/toolkit/index.js +51 -0
- package/dist/toolkit/index.js.map +1 -0
- package/dist/toolkit/plugin/curate-cmd.d.ts +22 -0
- package/dist/toolkit/plugin/curate-cmd.d.ts.map +1 -0
- package/dist/toolkit/plugin/curate-cmd.js +72 -0
- package/dist/toolkit/plugin/curate-cmd.js.map +1 -0
- package/dist/toolkit/plugin/prefs.d.ts +15 -0
- package/dist/toolkit/plugin/prefs.d.ts.map +1 -0
- package/dist/toolkit/plugin/prefs.js +78 -0
- package/dist/toolkit/plugin/prefs.js.map +1 -0
- package/dist/toolkit/plugin/reminder.d.ts +28 -0
- package/dist/toolkit/plugin/reminder.d.ts.map +1 -0
- package/dist/toolkit/plugin/reminder.js +103 -0
- package/dist/toolkit/plugin/reminder.js.map +1 -0
- package/dist/toolkit/policy/approval.d.ts +24 -0
- package/dist/toolkit/policy/approval.d.ts.map +1 -0
- package/dist/toolkit/policy/approval.js +56 -0
- package/dist/toolkit/policy/approval.js.map +1 -0
- package/dist/toolkit/policy/config.d.ts +38 -0
- package/dist/toolkit/policy/config.d.ts.map +1 -0
- package/dist/toolkit/policy/config.js +172 -0
- package/dist/toolkit/policy/config.js.map +1 -0
- package/dist/toolkit/policy/gate.d.ts +28 -0
- package/dist/toolkit/policy/gate.d.ts.map +1 -0
- package/dist/toolkit/policy/gate.js +126 -0
- package/dist/toolkit/policy/gate.js.map +1 -0
- package/dist/toolkit/policy/types.d.ts +106 -0
- package/dist/toolkit/policy/types.d.ts.map +1 -0
- package/dist/toolkit/policy/types.js +22 -0
- package/dist/toolkit/policy/types.js.map +1 -0
- package/dist/toolkit/security_check.d.ts +15 -0
- package/dist/toolkit/security_check.d.ts.map +1 -0
- package/dist/toolkit/security_check.js +109 -0
- package/dist/toolkit/security_check.js.map +1 -0
- package/dist/toolkit/usage/aggregate-cross-session.d.ts +36 -0
- package/dist/toolkit/usage/aggregate-cross-session.d.ts.map +1 -0
- package/dist/toolkit/usage/aggregate-cross-session.js +142 -0
- package/dist/toolkit/usage/aggregate-cross-session.js.map +1 -0
- package/dist/toolkit/usage/aggregate.d.ts +4 -0
- package/dist/toolkit/usage/aggregate.d.ts.map +1 -0
- package/dist/toolkit/usage/aggregate.js +105 -0
- package/dist/toolkit/usage/aggregate.js.map +1 -0
- package/dist/toolkit/usage/index.d.ts +11 -0
- package/dist/toolkit/usage/index.d.ts.map +1 -0
- package/dist/toolkit/usage/index.js +7 -0
- package/dist/toolkit/usage/index.js.map +1 -0
- package/dist/toolkit/usage/parse.d.ts +5 -0
- package/dist/toolkit/usage/parse.d.ts.map +1 -0
- package/dist/toolkit/usage/parse.js +19 -0
- package/dist/toolkit/usage/parse.js.map +1 -0
- package/dist/toolkit/usage/record.d.ts +8 -0
- package/dist/toolkit/usage/record.d.ts.map +1 -0
- package/dist/toolkit/usage/record.js +18 -0
- package/dist/toolkit/usage/record.js.map +1 -0
- package/dist/toolkit/usage/retention.d.ts +6 -0
- package/dist/toolkit/usage/retention.d.ts.map +1 -0
- package/dist/toolkit/usage/retention.js +71 -0
- package/dist/toolkit/usage/retention.js.map +1 -0
- package/dist/toolkit/usage/tokenize.d.ts +11 -0
- package/dist/toolkit/usage/tokenize.d.ts.map +1 -0
- package/dist/toolkit/usage/tokenize.js +24 -0
- package/dist/toolkit/usage/tokenize.js.map +1 -0
- package/dist/toolkit/usage/types.d.ts +34 -0
- package/dist/toolkit/usage/types.d.ts.map +1 -0
- package/dist/toolkit/usage/types.js +2 -0
- package/dist/toolkit/usage/types.js.map +1 -0
- package/package.json +124 -0
- package/plugin-hooks/session-summary.mjs +138 -0
- package/plugin-hooks/stale-summarize.mjs +70 -0
- package/plugin-hooks/usage-record.mjs +112 -0
- package/plugins/aws-agent/.claude-plugin/plugin.json +6 -0
- package/plugins/aws-agent/README.md +46 -0
- package/plugins/aws-agent/bin/aws-agent +22 -0
- package/plugins/aws-agent/commands/aws-agent.md +6 -0
- package/plugins/aws-agent/hooks/hooks.json +49 -0
- package/plugins/aws-agent/hooks/reminder.mjs +16 -0
- package/plugins/aws-agent/package.json +9 -0
- package/plugins/aws-agent/skills/aws-agent/SKILL.md +70 -0
- package/plugins/confluence-agent/.claude-plugin/plugin.json +6 -0
- package/plugins/confluence-agent/README.md +15 -0
- package/plugins/confluence-agent/bin/confluence-agent +17 -0
- package/plugins/confluence-agent/commands/confluence-agent.md +6 -0
- package/plugins/confluence-agent/hooks/hooks.json +49 -0
- package/plugins/confluence-agent/hooks/reminder.mjs +25 -0
- package/plugins/confluence-agent/package.json +8 -0
- package/plugins/confluence-agent/skills/confluence-agent/SKILL.md +40 -0
- package/plugins/db-agent/.claude-plugin/plugin.json +20 -0
- package/plugins/db-agent/README.md +13 -0
- package/plugins/db-agent/bin/db-agent +17 -0
- package/plugins/db-agent/commands/db-agent.md +6 -0
- package/plugins/db-agent/hooks/db-guard.mjs +110 -0
- package/plugins/db-agent/hooks/guardrails.json +26 -0
- package/plugins/db-agent/hooks/hooks.json +61 -0
- package/plugins/db-agent/hooks/reminder.mjs +16 -0
- package/plugins/db-agent/package.json +8 -0
- package/plugins/db-agent/skills/db-agent/SKILL.md +50 -0
- package/plugins/gcp-agent/.claude-plugin/plugin.json +6 -0
- package/plugins/gcp-agent/README.md +31 -0
- package/plugins/gcp-agent/bin/gcp-agent +18 -0
- package/plugins/gcp-agent/commands/gcp-agent.md +6 -0
- package/plugins/gcp-agent/hooks/hooks.json +49 -0
- package/plugins/gcp-agent/hooks/reminder.mjs +16 -0
- package/plugins/gcp-agent/package.json +9 -0
- package/plugins/gcp-agent/skills/gcp-agent/SKILL.md +54 -0
- package/plugins/github-agent/.claude-plugin/plugin.json +6 -0
- package/plugins/github-agent/README.md +13 -0
- package/plugins/github-agent/bin/github-agent +17 -0
- package/plugins/github-agent/commands/github-agent.md +6 -0
- package/plugins/github-agent/hooks/hooks.json +49 -0
- package/plugins/github-agent/hooks/reminder.mjs +16 -0
- package/plugins/github-agent/package.json +8 -0
- package/plugins/github-agent/skills/github-agent/SKILL.md +41 -0
- package/plugins/jira-agent/.claude-plugin/plugin.json +6 -0
- package/plugins/jira-agent/README.md +15 -0
- package/plugins/jira-agent/bin/jira-agent +17 -0
- package/plugins/jira-agent/commands/jira-agent.md +6 -0
- package/plugins/jira-agent/hooks/hooks.json +49 -0
- package/plugins/jira-agent/hooks/reminder.mjs +16 -0
- package/plugins/jira-agent/package.json +8 -0
- package/plugins/jira-agent/skills/jira-agent/SKILL.md +37 -0
- package/plugins/notion-agent/.claude-plugin/plugin.json +6 -0
- package/plugins/notion-agent/README.md +23 -0
- package/plugins/notion-agent/bin/notion-agent +17 -0
- package/plugins/notion-agent/commands/notion-agent.md +6 -0
- package/plugins/notion-agent/hooks/hooks.json +49 -0
- package/plugins/notion-agent/hooks/reminder.mjs +17 -0
- package/plugins/notion-agent/package.json +8 -0
- package/plugins/notion-agent/skills/notion-agent/SKILL.md +48 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 NarAI Labs
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
|
13
|
+
all copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
21
|
+
THE SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# narai-primitives
|
|
2
|
+
|
|
3
|
+
Read-only connectors + planning hub + connector framework, in one package.
|
|
4
|
+
|
|
5
|
+
Bundles what used to ship as eight separate `@narai/*` packages:
|
|
6
|
+
|
|
7
|
+
- `@narai/connector-toolkit` → `narai-primitives/toolkit`
|
|
8
|
+
- `@narai/connector-config` → `narai-primitives/config`
|
|
9
|
+
- `@narai/connector-hub` → `narai-primitives` (default) or `narai-primitives/hub`
|
|
10
|
+
- `@narai/aws-agent-connector` → `narai-primitives/aws`
|
|
11
|
+
- `@narai/confluence-agent-connector` → `narai-primitives/confluence`
|
|
12
|
+
- `@narai/db-agent-connector` → `narai-primitives/db`
|
|
13
|
+
- `@narai/gcp-agent-connector` → `narai-primitives/gcp`
|
|
14
|
+
- `@narai/github-agent-connector` → `narai-primitives/github`
|
|
15
|
+
- `@narai/jira-agent-connector` → `narai-primitives/jira`
|
|
16
|
+
- `@narai/notion-agent-connector` → `narai-primitives/notion`
|
|
17
|
+
|
|
18
|
+
`@narai/credential-providers` stays as a separate package.
|
|
19
|
+
|
|
20
|
+
## Install
|
|
21
|
+
|
|
22
|
+
```sh
|
|
23
|
+
npm install narai-primitives
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Library use
|
|
27
|
+
|
|
28
|
+
```ts
|
|
29
|
+
import { gather } from "narai-primitives";
|
|
30
|
+
|
|
31
|
+
const out = await gather({
|
|
32
|
+
prompt: "What was the last commit on main in narailabs/foo?",
|
|
33
|
+
consumer: "doc-wiki",
|
|
34
|
+
});
|
|
35
|
+
console.log(out.plan);
|
|
36
|
+
console.log(out.results);
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## CLI
|
|
40
|
+
|
|
41
|
+
Each connector ships its own CLI binary, plus the umbrella `narai` dispatcher:
|
|
42
|
+
|
|
43
|
+
```sh
|
|
44
|
+
# umbrella
|
|
45
|
+
npx narai jira list_issues --project AUTH
|
|
46
|
+
|
|
47
|
+
# individual (back-compat aliases)
|
|
48
|
+
npx jira-agent-connector --action list_issues --params '{"project":"AUTH"}'
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Migration from the old `@narai/*` packages
|
|
52
|
+
|
|
53
|
+
Update imports:
|
|
54
|
+
|
|
55
|
+
```diff
|
|
56
|
+
-import { gather } from "@narai/connector-hub";
|
|
57
|
+
-import { createConnector } from "@narai/connector-toolkit";
|
|
58
|
+
-import { loadResolvedConfig } from "@narai/connector-config";
|
|
59
|
+
+import { gather } from "narai-primitives";
|
|
60
|
+
+import { createConnector } from "narai-primitives/toolkit";
|
|
61
|
+
+import { loadResolvedConfig } from "narai-primitives/config";
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
The eight old packages are deprecated on npm and will receive no new releases.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* bootstrap — single-shot helper for connectors that runs at CLI startup.
|
|
3
|
+
*
|
|
4
|
+
* The hub injects `NARAI_CONFIG_BLOB` (a JSON-serialized `ResolvedConnector`)
|
|
5
|
+
* when it spawns a connector subprocess. Standalone invocations have no blob
|
|
6
|
+
* and fall back to reading `~/.connectors/config.yaml` directly.
|
|
7
|
+
*
|
|
8
|
+
* Either way, this helper hands the connector its resolved slice and applies
|
|
9
|
+
* a per-connector mapping from YAML option keys to process.env entries, so
|
|
10
|
+
* existing connector code that reads from env vars (e.g. `JIRA_API_TOKEN`,
|
|
11
|
+
* `GCP_PROJECT_ID`) continues to work unchanged.
|
|
12
|
+
*/
|
|
13
|
+
import type { LoadOptions, ResolvedConnector } from "./types.js";
|
|
14
|
+
export interface LoadConnectorEnvironmentOptions extends LoadOptions {
|
|
15
|
+
/**
|
|
16
|
+
* Map of YAML option key → environment variable name. For each entry, if
|
|
17
|
+
* the slice's `options[key]` resolves to a string value, set
|
|
18
|
+
* `process.env[envName]` to it.
|
|
19
|
+
*/
|
|
20
|
+
envMapping: Record<string, string>;
|
|
21
|
+
/**
|
|
22
|
+
* If true, overwrite existing `process.env` entries. Default: only set
|
|
23
|
+
* when the env var is currently undefined, so manual exports always win.
|
|
24
|
+
*/
|
|
25
|
+
overwrite?: boolean;
|
|
26
|
+
}
|
|
27
|
+
export declare function loadConnectorEnvironment(connectorName: string, opts: LoadConnectorEnvironmentOptions): Promise<ResolvedConnector | null>;
|
|
28
|
+
//# sourceMappingURL=bootstrap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/config/bootstrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAIjE,MAAM,WAAW,+BAAgC,SAAQ,WAAW;IAClE;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAsB,wBAAwB,CAC5C,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,+BAA+B,GACpC,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAKnC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* bootstrap — single-shot helper for connectors that runs at CLI startup.
|
|
3
|
+
*
|
|
4
|
+
* The hub injects `NARAI_CONFIG_BLOB` (a JSON-serialized `ResolvedConnector`)
|
|
5
|
+
* when it spawns a connector subprocess. Standalone invocations have no blob
|
|
6
|
+
* and fall back to reading `~/.connectors/config.yaml` directly.
|
|
7
|
+
*
|
|
8
|
+
* Either way, this helper hands the connector its resolved slice and applies
|
|
9
|
+
* a per-connector mapping from YAML option keys to process.env entries, so
|
|
10
|
+
* existing connector code that reads from env vars (e.g. `JIRA_API_TOKEN`,
|
|
11
|
+
* `GCP_PROJECT_ID`) continues to work unchanged.
|
|
12
|
+
*/
|
|
13
|
+
import { loadResolvedConfig } from "./load.js";
|
|
14
|
+
const ENV_PREFIX = "env:";
|
|
15
|
+
export async function loadConnectorEnvironment(connectorName, opts) {
|
|
16
|
+
const slice = await loadOwnSlice(connectorName, opts);
|
|
17
|
+
if (slice === null)
|
|
18
|
+
return null;
|
|
19
|
+
applyEnvMapping(slice, opts.envMapping, opts.overwrite ?? false);
|
|
20
|
+
return slice;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Load this connector's resolved slice — `NARAI_CONFIG_BLOB` first, else
|
|
24
|
+
* the on-disk config files via `loadResolvedConfig`. Returns null when the
|
|
25
|
+
* blob is malformed or the file doesn't list this connector.
|
|
26
|
+
*/
|
|
27
|
+
async function loadOwnSlice(connectorName, opts) {
|
|
28
|
+
const blob = process.env["NARAI_CONFIG_BLOB"];
|
|
29
|
+
if (typeof blob === "string" && blob !== "") {
|
|
30
|
+
try {
|
|
31
|
+
const parsed = JSON.parse(blob);
|
|
32
|
+
if (parsed !== null && typeof parsed === "object" && !Array.isArray(parsed)) {
|
|
33
|
+
return parsed;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
// bad blob — fall through to file load
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
try {
|
|
41
|
+
const loadOpts = {};
|
|
42
|
+
if (opts.consumer !== undefined)
|
|
43
|
+
loadOpts.consumer = opts.consumer;
|
|
44
|
+
if (opts.environment !== undefined)
|
|
45
|
+
loadOpts.environment = opts.environment;
|
|
46
|
+
if (opts.cwd !== undefined)
|
|
47
|
+
loadOpts.cwd = opts.cwd;
|
|
48
|
+
const resolved = await loadResolvedConfig(loadOpts);
|
|
49
|
+
return resolved.connectors[connectorName] ?? null;
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
function applyEnvMapping(slice, mapping, overwrite) {
|
|
56
|
+
for (const [optKey, envKey] of Object.entries(mapping)) {
|
|
57
|
+
if (!overwrite && process.env[envKey] !== undefined)
|
|
58
|
+
continue;
|
|
59
|
+
const raw = slice.options[optKey];
|
|
60
|
+
const value = resolveStringRef(raw);
|
|
61
|
+
if (value !== undefined) {
|
|
62
|
+
process.env[envKey] = value;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Translate a config value into a concrete string — `env:NAME` becomes
|
|
68
|
+
* `process.env.NAME`, plain strings pass through. Anything non-string or
|
|
69
|
+
* a missing env var returns undefined.
|
|
70
|
+
*/
|
|
71
|
+
function resolveStringRef(value) {
|
|
72
|
+
if (typeof value !== "string")
|
|
73
|
+
return undefined;
|
|
74
|
+
if (value.startsWith(ENV_PREFIX)) {
|
|
75
|
+
const name = value.slice(ENV_PREFIX.length);
|
|
76
|
+
return process.env[name];
|
|
77
|
+
}
|
|
78
|
+
return value;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=bootstrap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/config/bootstrap.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public API for `@narai/connector-config`.
|
|
3
|
+
*
|
|
4
|
+
* Consumers (the hub, every standalone connector) typically need just
|
|
5
|
+
* `loadResolvedConfig`. The lower-level `resolveConfig` + file loaders are
|
|
6
|
+
* exported for tests and advanced use.
|
|
7
|
+
*/
|
|
8
|
+
export { loadResolvedConfig, loadBaseConfig, loadFile, deepMerge, userConfigPath, repoConfigPath, } from "./load.js";
|
|
9
|
+
export { resolveConfig, resolveConnector } from "./resolve.js";
|
|
10
|
+
export { assertValidSecretSyntax, validateSecretsInTree, } from "./secrets.js";
|
|
11
|
+
export { loadConnectorEnvironment, type LoadConnectorEnvironmentOptions, } from "./bootstrap.js";
|
|
12
|
+
export type { PolicyAction, PolicyDecision, PolicyMap, RawConfigInput, LoadOptions, ResolveOptions, ResolvedConfig, ResolvedConnector, } from "./types.js";
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,QAAQ,EACR,SAAS,EACT,cAAc,EACd,cAAc,GACf,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAE/D,OAAO,EACL,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,wBAAwB,EACxB,KAAK,+BAA+B,GACrC,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACV,YAAY,EACZ,cAAc,EACd,SAAS,EACT,cAAc,EACd,WAAW,EACX,cAAc,EACd,cAAc,EACd,iBAAiB,GAClB,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public API for `@narai/connector-config`.
|
|
3
|
+
*
|
|
4
|
+
* Consumers (the hub, every standalone connector) typically need just
|
|
5
|
+
* `loadResolvedConfig`. The lower-level `resolveConfig` + file loaders are
|
|
6
|
+
* exported for tests and advanced use.
|
|
7
|
+
*/
|
|
8
|
+
export { loadResolvedConfig, loadBaseConfig, loadFile, deepMerge, userConfigPath, repoConfigPath, } from "./load.js";
|
|
9
|
+
export { resolveConfig, resolveConnector } from "./resolve.js";
|
|
10
|
+
export { assertValidSecretSyntax, validateSecretsInTree, } from "./secrets.js";
|
|
11
|
+
export { loadConnectorEnvironment, } from "./bootstrap.js";
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,QAAQ,EACR,SAAS,EACT,cAAc,EACd,cAAc,GACf,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAE/D,OAAO,EACL,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,wBAAwB,GAEzB,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File discovery, YAML parsing, and base-level deep merge for
|
|
3
|
+
* ~/.connectors/config.yaml + ./.connectors/config.yaml.
|
|
4
|
+
*
|
|
5
|
+
* The repo-level file wins on conflict. The environment + consumer
|
|
6
|
+
* overrides are applied in resolve.ts on top of this base.
|
|
7
|
+
*/
|
|
8
|
+
import type { LoadOptions, ResolvedConfig } from "./types.js";
|
|
9
|
+
/** Absolute path to the user-level config: `~/.connectors/config.yaml`. */
|
|
10
|
+
export declare function userConfigPath(): string;
|
|
11
|
+
/** Absolute path to the repo-level config under `cwd`. */
|
|
12
|
+
export declare function repoConfigPath(cwd?: string): string;
|
|
13
|
+
/**
|
|
14
|
+
* Read a single YAML file and return its parsed mapping.
|
|
15
|
+
*
|
|
16
|
+
* - Returns `{}` if the file does not exist or contains nothing.
|
|
17
|
+
* - Throws on parse error or if the top-level value is not a mapping.
|
|
18
|
+
*/
|
|
19
|
+
export declare function loadFile(p: string): Record<string, unknown>;
|
|
20
|
+
/**
|
|
21
|
+
* Deep merge of two values. Plain objects merge recursively; arrays and
|
|
22
|
+
* scalars are replaced wholesale by the overlay. Undefined overlay leaves
|
|
23
|
+
* the base unchanged.
|
|
24
|
+
*/
|
|
25
|
+
export declare function deepMerge(base: unknown, overlay: unknown): unknown;
|
|
26
|
+
/**
|
|
27
|
+
* Read user + repo files and deep-merge with repo precedence. Either or
|
|
28
|
+
* both may be missing.
|
|
29
|
+
*/
|
|
30
|
+
export declare function loadBaseConfig(cwd?: string): Record<string, unknown>;
|
|
31
|
+
/**
|
|
32
|
+
* The main public entry point: load + validate secret syntax + apply
|
|
33
|
+
* environment + consumer overrides. Returns a `ResolvedConfig` ready to
|
|
34
|
+
* iterate by the hub or sliced by a standalone connector.
|
|
35
|
+
*/
|
|
36
|
+
export declare function loadResolvedConfig(opts?: LoadOptions): Promise<ResolvedConfig>;
|
|
37
|
+
//# sourceMappingURL=load.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../../src/config/load.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAI9D,2EAA2E;AAC3E,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,0DAA0D;AAC1D,wBAAgB,cAAc,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM,CAElE;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAc3D;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAiBlE;AAMD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAKnF;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,cAAc,CAAC,CAOxF"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File discovery, YAML parsing, and base-level deep merge for
|
|
3
|
+
* ~/.connectors/config.yaml + ./.connectors/config.yaml.
|
|
4
|
+
*
|
|
5
|
+
* The repo-level file wins on conflict. The environment + consumer
|
|
6
|
+
* overrides are applied in resolve.ts on top of this base.
|
|
7
|
+
*/
|
|
8
|
+
import * as fs from "node:fs";
|
|
9
|
+
import * as os from "node:os";
|
|
10
|
+
import * as path from "node:path";
|
|
11
|
+
import yaml from "js-yaml";
|
|
12
|
+
import { resolveConfig } from "./resolve.js";
|
|
13
|
+
import { validateSecretsInTree } from "./secrets.js";
|
|
14
|
+
/** Absolute path to the user-level config: `~/.connectors/config.yaml`. */
|
|
15
|
+
export function userConfigPath() {
|
|
16
|
+
return path.join(os.homedir(), ".connectors", "config.yaml");
|
|
17
|
+
}
|
|
18
|
+
/** Absolute path to the repo-level config under `cwd`. */
|
|
19
|
+
export function repoConfigPath(cwd = process.cwd()) {
|
|
20
|
+
return path.join(cwd, ".connectors", "config.yaml");
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Read a single YAML file and return its parsed mapping.
|
|
24
|
+
*
|
|
25
|
+
* - Returns `{}` if the file does not exist or contains nothing.
|
|
26
|
+
* - Throws on parse error or if the top-level value is not a mapping.
|
|
27
|
+
*/
|
|
28
|
+
export function loadFile(p) {
|
|
29
|
+
if (!fs.existsSync(p))
|
|
30
|
+
return {};
|
|
31
|
+
const raw = fs.readFileSync(p, "utf-8");
|
|
32
|
+
let parsed;
|
|
33
|
+
try {
|
|
34
|
+
parsed = yaml.load(raw);
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
throw new Error(`Failed to parse YAML at ${p}: ${err.message}`);
|
|
38
|
+
}
|
|
39
|
+
if (parsed === null || parsed === undefined)
|
|
40
|
+
return {};
|
|
41
|
+
if (typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
42
|
+
throw new Error(`Expected YAML mapping at ${p}, got ${Array.isArray(parsed) ? "array" : typeof parsed}.`);
|
|
43
|
+
}
|
|
44
|
+
return parsed;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Deep merge of two values. Plain objects merge recursively; arrays and
|
|
48
|
+
* scalars are replaced wholesale by the overlay. Undefined overlay leaves
|
|
49
|
+
* the base unchanged.
|
|
50
|
+
*/
|
|
51
|
+
export function deepMerge(base, overlay) {
|
|
52
|
+
if (overlay === undefined)
|
|
53
|
+
return base;
|
|
54
|
+
if (base === undefined)
|
|
55
|
+
return overlay;
|
|
56
|
+
if (isPlainObject(base) && isPlainObject(overlay)) {
|
|
57
|
+
const baseObj = base;
|
|
58
|
+
const overlayObj = overlay;
|
|
59
|
+
const result = {};
|
|
60
|
+
const keys = new Set([
|
|
61
|
+
...Object.keys(baseObj),
|
|
62
|
+
...Object.keys(overlayObj),
|
|
63
|
+
]);
|
|
64
|
+
for (const k of keys) {
|
|
65
|
+
result[k] = deepMerge(baseObj[k], overlayObj[k]);
|
|
66
|
+
}
|
|
67
|
+
return result;
|
|
68
|
+
}
|
|
69
|
+
return overlay;
|
|
70
|
+
}
|
|
71
|
+
function isPlainObject(value) {
|
|
72
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Read user + repo files and deep-merge with repo precedence. Either or
|
|
76
|
+
* both may be missing.
|
|
77
|
+
*/
|
|
78
|
+
export function loadBaseConfig(cwd = process.cwd()) {
|
|
79
|
+
const user = loadFile(userConfigPath());
|
|
80
|
+
const repo = loadFile(repoConfigPath(cwd));
|
|
81
|
+
const merged = deepMerge(user, repo);
|
|
82
|
+
return (merged ?? {});
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* The main public entry point: load + validate secret syntax + apply
|
|
86
|
+
* environment + consumer overrides. Returns a `ResolvedConfig` ready to
|
|
87
|
+
* iterate by the hub or sliced by a standalone connector.
|
|
88
|
+
*/
|
|
89
|
+
export async function loadResolvedConfig(opts = {}) {
|
|
90
|
+
const raw = loadBaseConfig(opts.cwd);
|
|
91
|
+
validateSecretsInTree(raw);
|
|
92
|
+
const resolveOpts = {};
|
|
93
|
+
if (opts.consumer !== undefined)
|
|
94
|
+
resolveOpts.consumer = opts.consumer;
|
|
95
|
+
if (opts.environment !== undefined)
|
|
96
|
+
resolveOpts.environment = opts.environment;
|
|
97
|
+
return resolveConfig(raw, resolveOpts);
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=load.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load.js","sourceRoot":"","sources":["../../src/config/load.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Apply environment + consumer overrides on top of a base config and
|
|
3
|
+
* materialize a strongly-typed `ResolvedConfig`.
|
|
4
|
+
*
|
|
5
|
+
* Merge order (latest wins):
|
|
6
|
+
* 1. base (user file ⊕ repo file)
|
|
7
|
+
* 2. environments.<envName>
|
|
8
|
+
* 3. consumers.<consumerName>
|
|
9
|
+
*
|
|
10
|
+
* Environment and consumer blocks may override top-level fields
|
|
11
|
+
* (`model`, `policy`, `enforce_hooks`, `hub`) AND per-connector blocks
|
|
12
|
+
* (any non-reserved key is treated as a connector name). A consumer
|
|
13
|
+
* additionally accepts `enabled: [...]` to filter which connectors are
|
|
14
|
+
* active for that consumer.
|
|
15
|
+
*/
|
|
16
|
+
import type { RawConfigInput, ResolveOptions, ResolvedConfig, ResolvedConnector } from "./types.js";
|
|
17
|
+
export declare function resolveConfig(raw: RawConfigInput, opts?: ResolveOptions): ResolvedConfig;
|
|
18
|
+
/**
|
|
19
|
+
* Convenience: pull a single connector's resolved view by name. Throws if
|
|
20
|
+
* the name is missing from the resolved config.
|
|
21
|
+
*/
|
|
22
|
+
export declare function resolveConnector(name: string, resolved: ResolvedConfig): ResolvedConnector;
|
|
23
|
+
//# sourceMappingURL=resolve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/config/resolve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAEV,cAAc,EACd,cAAc,EACd,cAAc,EACd,iBAAiB,EAClB,MAAM,YAAY,CAAC;AA4BpB,wBAAgB,aAAa,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,GAAE,cAAmB,GAAG,cAAc,CAiD5F;AAsHD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,iBAAiB,CAM1F"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Apply environment + consumer overrides on top of a base config and
|
|
3
|
+
* materialize a strongly-typed `ResolvedConfig`.
|
|
4
|
+
*
|
|
5
|
+
* Merge order (latest wins):
|
|
6
|
+
* 1. base (user file ⊕ repo file)
|
|
7
|
+
* 2. environments.<envName>
|
|
8
|
+
* 3. consumers.<consumerName>
|
|
9
|
+
*
|
|
10
|
+
* Environment and consumer blocks may override top-level fields
|
|
11
|
+
* (`model`, `policy`, `enforce_hooks`, `hub`) AND per-connector blocks
|
|
12
|
+
* (any non-reserved key is treated as a connector name). A consumer
|
|
13
|
+
* additionally accepts `enabled: [...]` to filter which connectors are
|
|
14
|
+
* active for that consumer.
|
|
15
|
+
*/
|
|
16
|
+
import { deepMerge } from "./load.js";
|
|
17
|
+
/** Reserved keys at the top of a consumer block (everything else is a connector override). */
|
|
18
|
+
const RESERVED_CONSUMER_KEYS = new Set([
|
|
19
|
+
"enabled",
|
|
20
|
+
"policy",
|
|
21
|
+
"model",
|
|
22
|
+
"enforce_hooks",
|
|
23
|
+
"hub",
|
|
24
|
+
]);
|
|
25
|
+
/** Reserved keys at the top of an environment block. */
|
|
26
|
+
const RESERVED_ENVIRONMENT_KEYS = new Set([
|
|
27
|
+
"policy",
|
|
28
|
+
"model",
|
|
29
|
+
"enforce_hooks",
|
|
30
|
+
"hub",
|
|
31
|
+
]);
|
|
32
|
+
/** Reserved per-connector fields the lib understands directly; everything else flows into `options`. */
|
|
33
|
+
const RESERVED_CONNECTOR_FIELDS = new Set([
|
|
34
|
+
"skill",
|
|
35
|
+
"model",
|
|
36
|
+
"enforce_hooks",
|
|
37
|
+
"policy",
|
|
38
|
+
"disable",
|
|
39
|
+
]);
|
|
40
|
+
export function resolveConfig(raw, opts = {}) {
|
|
41
|
+
// 1. Determine the active environment (explicit override > environments.default > none).
|
|
42
|
+
const environments = raw["environments"] ?? {};
|
|
43
|
+
const defaultEnvName = typeof environments["default"] === "string" ? environments["default"] : undefined;
|
|
44
|
+
const envName = opts.environment ?? defaultEnvName ?? null;
|
|
45
|
+
// 2. Apply environment overrides on top of the base.
|
|
46
|
+
let merged = { ...raw };
|
|
47
|
+
if (envName !== null) {
|
|
48
|
+
const envBlock = environments[envName];
|
|
49
|
+
if (envBlock === undefined) {
|
|
50
|
+
throw new Error(`Environment '${envName}' not found in config.`);
|
|
51
|
+
}
|
|
52
|
+
if (!isPlainObject(envBlock)) {
|
|
53
|
+
throw new Error(`Environment '${envName}' must be a mapping.`);
|
|
54
|
+
}
|
|
55
|
+
merged = applyOverlay(merged, envBlock, RESERVED_ENVIRONMENT_KEYS);
|
|
56
|
+
}
|
|
57
|
+
// 3. Apply consumer overrides.
|
|
58
|
+
//
|
|
59
|
+
// The consumers block is *optional*. A consumer requested via opts.consumer
|
|
60
|
+
// that has no entry in `consumers.<name>` is treated as "no overrides" —
|
|
61
|
+
// the base config (with environment overlay already applied) is used as-is.
|
|
62
|
+
// This lets every consumer share the default connector setup and only opt
|
|
63
|
+
// in to overrides when they actually need them, instead of forcing every
|
|
64
|
+
// user to declare a stub block.
|
|
65
|
+
//
|
|
66
|
+
// A non-mapping consumer block is still an error (it's almost certainly a
|
|
67
|
+
// typo in YAML).
|
|
68
|
+
const consumerName = opts.consumer ?? null;
|
|
69
|
+
let enabledList = null;
|
|
70
|
+
if (consumerName !== null) {
|
|
71
|
+
const consumers = raw["consumers"] ?? {};
|
|
72
|
+
const consumerBlock = consumers[consumerName];
|
|
73
|
+
if (consumerBlock !== undefined) {
|
|
74
|
+
if (!isPlainObject(consumerBlock)) {
|
|
75
|
+
throw new Error(`Consumer '${consumerName}' must be a mapping.`);
|
|
76
|
+
}
|
|
77
|
+
const block = consumerBlock;
|
|
78
|
+
merged = applyOverlay(merged, block, RESERVED_CONSUMER_KEYS);
|
|
79
|
+
const enabled = block["enabled"];
|
|
80
|
+
if (Array.isArray(enabled)) {
|
|
81
|
+
enabledList = new Set(enabled.filter((x) => typeof x === "string"));
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return materialize(merged, envName, consumerName, enabledList);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Apply an overlay block to `merged`. Reserved keys (top-level
|
|
89
|
+
* settings) deep-merge into top-level fields; non-reserved keys are
|
|
90
|
+
* treated as connector names and deep-merge into `connectors[name]`.
|
|
91
|
+
*/
|
|
92
|
+
function applyOverlay(merged, overlay, reservedKeys) {
|
|
93
|
+
const next = { ...merged };
|
|
94
|
+
// Top-level field overrides
|
|
95
|
+
for (const k of reservedKeys) {
|
|
96
|
+
if (k === "enabled")
|
|
97
|
+
continue; // consumer-only, handled by caller
|
|
98
|
+
if (overlay[k] !== undefined) {
|
|
99
|
+
next[k] = deepMerge(next[k], overlay[k]);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// Per-connector overrides (any non-reserved key)
|
|
103
|
+
const baseConnectors = isPlainObject(next["connectors"])
|
|
104
|
+
? { ...next["connectors"] }
|
|
105
|
+
: {};
|
|
106
|
+
for (const [k, v] of Object.entries(overlay)) {
|
|
107
|
+
if (reservedKeys.has(k))
|
|
108
|
+
continue;
|
|
109
|
+
if (v === undefined)
|
|
110
|
+
continue;
|
|
111
|
+
baseConnectors[k] = deepMerge(baseConnectors[k], v);
|
|
112
|
+
}
|
|
113
|
+
next["connectors"] = baseConnectors;
|
|
114
|
+
return next;
|
|
115
|
+
}
|
|
116
|
+
function materialize(merged, envName, consumerName, enabledList) {
|
|
117
|
+
const connectorsRaw = isPlainObject(merged["connectors"])
|
|
118
|
+
? merged["connectors"]
|
|
119
|
+
: {};
|
|
120
|
+
const topPolicy = isPlainObject(merged["policy"])
|
|
121
|
+
? merged["policy"]
|
|
122
|
+
: {};
|
|
123
|
+
const topEnforceHooks = typeof merged["enforce_hooks"] === "boolean"
|
|
124
|
+
? merged["enforce_hooks"]
|
|
125
|
+
: true;
|
|
126
|
+
const topModel = typeof merged["model"] === "string"
|
|
127
|
+
? merged["model"]
|
|
128
|
+
: null;
|
|
129
|
+
const resolvedConnectors = {};
|
|
130
|
+
for (const [name, blockRaw] of Object.entries(connectorsRaw)) {
|
|
131
|
+
if (!isPlainObject(blockRaw)) {
|
|
132
|
+
throw new Error(`Connector '${name}' must be a mapping.`);
|
|
133
|
+
}
|
|
134
|
+
const block = blockRaw;
|
|
135
|
+
const disabled = block["disable"] === true;
|
|
136
|
+
const inEnabledList = enabledList === null || enabledList.has(name);
|
|
137
|
+
const enabled = inEnabledList && !disabled;
|
|
138
|
+
const skill = typeof block["skill"] === "string" ? block["skill"] : "";
|
|
139
|
+
if (skill === "" && enabled) {
|
|
140
|
+
throw new Error(`Connector '${name}' is enabled but has no 'skill' set.`);
|
|
141
|
+
}
|
|
142
|
+
const model = typeof block["model"] === "string"
|
|
143
|
+
? block["model"]
|
|
144
|
+
: null;
|
|
145
|
+
const enforceHooks = typeof block["enforce_hooks"] === "boolean"
|
|
146
|
+
? block["enforce_hooks"]
|
|
147
|
+
: topEnforceHooks;
|
|
148
|
+
const blockPolicy = isPlainObject(block["policy"])
|
|
149
|
+
? block["policy"]
|
|
150
|
+
: {};
|
|
151
|
+
const policy = { ...topPolicy, ...blockPolicy };
|
|
152
|
+
const options = {};
|
|
153
|
+
for (const [k, v] of Object.entries(block)) {
|
|
154
|
+
if (!RESERVED_CONNECTOR_FIELDS.has(k)) {
|
|
155
|
+
options[k] = v;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
resolvedConnectors[name] = {
|
|
159
|
+
name,
|
|
160
|
+
enabled,
|
|
161
|
+
skill,
|
|
162
|
+
model,
|
|
163
|
+
enforce_hooks: enforceHooks,
|
|
164
|
+
policy,
|
|
165
|
+
options,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
const hubRaw = isPlainObject(merged["hub"])
|
|
169
|
+
? merged["hub"]
|
|
170
|
+
: {};
|
|
171
|
+
return {
|
|
172
|
+
hub: {
|
|
173
|
+
model: typeof hubRaw["model"] === "string" ? hubRaw["model"] : null,
|
|
174
|
+
max_tokens: typeof hubRaw["max_tokens"] === "number" ? hubRaw["max_tokens"] : null,
|
|
175
|
+
},
|
|
176
|
+
policy: { ...topPolicy },
|
|
177
|
+
enforce_hooks: topEnforceHooks,
|
|
178
|
+
model: topModel,
|
|
179
|
+
environment: envName,
|
|
180
|
+
consumer: consumerName,
|
|
181
|
+
connectors: resolvedConnectors,
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Convenience: pull a single connector's resolved view by name. Throws if
|
|
186
|
+
* the name is missing from the resolved config.
|
|
187
|
+
*/
|
|
188
|
+
export function resolveConnector(name, resolved) {
|
|
189
|
+
const slice = resolved.connectors[name];
|
|
190
|
+
if (slice === undefined) {
|
|
191
|
+
throw new Error(`Connector '${name}' not found in resolved config.`);
|
|
192
|
+
}
|
|
193
|
+
return slice;
|
|
194
|
+
}
|
|
195
|
+
function isPlainObject(value) {
|
|
196
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=resolve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/config/resolve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAStC,8FAA8F;AAC9F,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC;IACrC,SAAS;IACT,QAAQ;IACR,OAAO;IACP,eAAe;IACf,KAAK;CACN,CAAC,CAAC;AAEH,wDAAwD;AACxD,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAC;IACxC,QAAQ;IACR,OAAO;IACP,eAAe;IACf,KAAK;CACN,CAAC,CAAC;AAEH,wGAAwG;AACxG,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAC;IACxC,OAAO;IACP,OAAO;IACP,eAAe;IACf,QAAQ;IACR,SAAS;CACV,CAAC,CAAC;AAEH,MAAM,UAAU,aAAa,CAAC,GAAmB,EAAE,OAAuB,EAAE;IAC1E,yFAAyF;IACzF,MAAM,YAAY,GAAI,GAAG,CAAC,cAAc,CAAyC,IAAI,EAAE,CAAC;IACxF,MAAM,cAAc,GAAG,OAAO,YAAY,CAAC,SAAS,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACzG,MAAM,OAAO,GAAkB,IAAI,CAAC,WAAW,IAAI,cAAc,IAAI,IAAI,CAAC;IAE1E,qDAAqD;IACrD,IAAI,MAAM,GAA4B,EAAE,GAAG,GAAG,EAAE,CAAC;IACjD,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QACvC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,gBAAgB,OAAO,wBAAwB,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,gBAAgB,OAAO,sBAAsB,CAAC,CAAC;QACjE,CAAC;QACD,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,QAAmC,EAAE,yBAAyB,CAAC,CAAC;IAChG,CAAC;IAED,+BAA+B;IAC/B,EAAE;IACF,4EAA4E;IAC5E,yEAAyE;IACzE,4EAA4E;IAC5E,0EAA0E;IAC1E,yEAAyE;IACzE,gCAAgC;IAChC,EAAE;IACF,0EAA0E;IAC1E,iBAAiB;IACjB,MAAM,YAAY,GAAkB,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC;IAC1D,IAAI,WAAW,GAAuB,IAAI,CAAC;IAC3C,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;QAC1B,MAAM,SAAS,GAAI,GAAG,CAAC,WAAW,CAAyC,IAAI,EAAE,CAAC;QAClF,MAAM,aAAa,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;QAC9C,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;YAChC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE,CAAC;gBAClC,MAAM,IAAI,KAAK,CAAC,aAAa,YAAY,sBAAsB,CAAC,CAAC;YACnE,CAAC;YACD,MAAM,KAAK,GAAG,aAAwC,CAAC;YACvD,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,sBAAsB,CAAC,CAAC;YAC7D,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;YACjC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3B,WAAW,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC;YACnF,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;AACjE,CAAC;AAED;;;;GAIG;AACH,SAAS,YAAY,CACnB,MAA+B,EAC/B,OAAgC,EAChC,YAAiC;IAEjC,MAAM,IAAI,GAA4B,EAAE,GAAG,MAAM,EAAE,CAAC;IACpD,4BAA4B;IAC5B,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;QAC7B,IAAI,CAAC,KAAK,SAAS;YAAE,SAAS,CAAC,mCAAmC;QAClE,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;YAC7B,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IACD,iDAAiD;IACjD,MAAM,cAAc,GAAG,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACtD,CAAC,CAAC,EAAE,GAAI,IAAI,CAAC,YAAY,CAA6B,EAAE;QACxD,CAAC,CAAC,EAAE,CAAC;IACP,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7C,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,SAAS;QAClC,IAAI,CAAC,KAAK,SAAS;YAAE,SAAS;QAC9B,cAAc,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACtD,CAAC;IACD,IAAI,CAAC,YAAY,CAAC,GAAG,cAAc,CAAC;IACpC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,WAAW,CAClB,MAA+B,EAC/B,OAAsB,EACtB,YAA2B,EAC3B,WAA+B;IAE/B,MAAM,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACvD,CAAC,CAAE,MAAM,CAAC,YAAY,CAA6B;QACnD,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,SAAS,GAAc,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1D,CAAC,CAAE,MAAM,CAAC,QAAQ,CAAe;QACjC,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,eAAe,GAAY,OAAO,MAAM,CAAC,eAAe,CAAC,KAAK,SAAS;QAC3E,CAAC,CAAE,MAAM,CAAC,eAAe,CAAa;QACtC,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,QAAQ,GAAkB,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,QAAQ;QACjE,CAAC,CAAE,MAAM,CAAC,OAAO,CAAY;QAC7B,CAAC,CAAC,IAAI,CAAC;IAET,MAAM,kBAAkB,GAAsC,EAAE,CAAC;IACjE,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;QAC7D,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,cAAc,IAAI,sBAAsB,CAAC,CAAC;QAC5D,CAAC;QACD,MAAM,KAAK,GAAG,QAAmC,CAAC;QAElD,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC;QAC3C,MAAM,aAAa,GAAG,WAAW,KAAK,IAAI,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpE,MAAM,OAAO,GAAG,aAAa,IAAI,CAAC,QAAQ,CAAC;QAE3C,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,KAAK,CAAC,OAAO,CAAY,CAAC,CAAC,CAAC,EAAE,CAAC;QACnF,IAAI,KAAK,KAAK,EAAE,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,cAAc,IAAI,sCAAsC,CAAC,CAAC;QAC5E,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,QAAQ;YAC9C,CAAC,CAAE,KAAK,CAAC,OAAO,CAAY;YAC5B,CAAC,CAAC,IAAI,CAAC;QAET,MAAM,YAAY,GAAG,OAAO,KAAK,CAAC,eAAe,CAAC,KAAK,SAAS;YAC9D,CAAC,CAAE,KAAK,CAAC,eAAe,CAAa;YACrC,CAAC,CAAC,eAAe,CAAC;QAEpB,MAAM,WAAW,GAAc,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC3D,CAAC,CAAE,KAAK,CAAC,QAAQ,CAAe;YAChC,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,MAAM,GAAc,EAAE,GAAG,SAAS,EAAE,GAAG,WAAW,EAAE,CAAC;QAE3D,MAAM,OAAO,GAA4B,EAAE,CAAC;QAC5C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3C,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACjB,CAAC;QACH,CAAC;QAED,kBAAkB,CAAC,IAAI,CAAC,GAAG;YACzB,IAAI;YACJ,OAAO;YACP,KAAK;YACL,KAAK;YACL,aAAa,EAAE,YAAY;YAC3B,MAAM;YACN,OAAO;SACR,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC,CAAE,MAAM,CAAC,KAAK,CAA6B;QAC5C,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO;QACL,GAAG,EAAE;YACH,KAAK,EAAE,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,MAAM,CAAC,OAAO,CAAY,CAAC,CAAC,CAAC,IAAI;YAC/E,UAAU,EAAE,OAAO,MAAM,CAAC,YAAY,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,MAAM,CAAC,YAAY,CAAY,CAAC,CAAC,CAAC,IAAI;SAC/F;QACD,MAAM,EAAE,EAAE,GAAG,SAAS,EAAE;QACxB,aAAa,EAAE,eAAe;QAC9B,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,OAAO;QACpB,QAAQ,EAAE,YAAY;QACtB,UAAU,EAAE,kBAAkB;KAC/B,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,QAAwB;IACrE,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,cAAc,IAAI,iCAAiC,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Secret-reference syntax validation.
|
|
3
|
+
*
|
|
4
|
+
* V1 only validates syntax — it does not eagerly resolve secrets. Strings
|
|
5
|
+
* starting with `env:NAME` pass through unchanged so each connector can
|
|
6
|
+
* resolve them lazily via its own credential-providers chain at the moment
|
|
7
|
+
* of use. The wrong form `env.NAME` (with a dot) is rejected with a clear
|
|
8
|
+
* error so it doesn't silently flow through as a literal.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Throws if the string uses the wrong form. Other content (including
|
|
12
|
+
* `env:NAME`, `keychain:NAME`, plain literals) is accepted unchanged.
|
|
13
|
+
*/
|
|
14
|
+
export declare function assertValidSecretSyntax(value: string, location?: string): void;
|
|
15
|
+
/**
|
|
16
|
+
* Recursively validates every string in a value tree. Throws on the first
|
|
17
|
+
* malformed reference, with a dotted path indicating where the bad value lives.
|
|
18
|
+
*/
|
|
19
|
+
export declare function validateSecretsInTree(node: unknown, path?: string): void;
|
|
20
|
+
//# sourceMappingURL=secrets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../../src/config/secrets.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAO9E;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,SAAK,GAAG,IAAI,CAiBpE"}
|