@wickdninja/sweny-providers 0.1.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/LICENSE +21 -0
- package/README.md +259 -0
- package/dist/access/allow-all.d.ts +3 -0
- package/dist/access/allow-all.d.ts.map +1 -0
- package/dist/access/allow-all.js +19 -0
- package/dist/access/allow-all.js.map +1 -0
- package/dist/access/index.d.ts +5 -0
- package/dist/access/index.d.ts.map +1 -0
- package/dist/access/index.js +4 -0
- package/dist/access/index.js.map +1 -0
- package/dist/access/role-based.d.ts +8 -0
- package/dist/access/role-based.d.ts.map +1 -0
- package/dist/access/role-based.js +42 -0
- package/dist/access/role-based.js.map +1 -0
- package/dist/access/types.d.ts +41 -0
- package/dist/access/types.d.ts.map +1 -0
- package/dist/access/types.js +20 -0
- package/dist/access/types.js.map +1 -0
- package/dist/agent-tool/factory.d.ts +4 -0
- package/dist/agent-tool/factory.d.ts.map +1 -0
- package/dist/agent-tool/factory.js +4 -0
- package/dist/agent-tool/factory.js.map +1 -0
- package/dist/agent-tool/index.d.ts +3 -0
- package/dist/agent-tool/index.d.ts.map +1 -0
- package/dist/agent-tool/index.js +2 -0
- package/dist/agent-tool/index.js.map +1 -0
- package/dist/agent-tool/types.d.ts +15 -0
- package/dist/agent-tool/types.d.ts.map +1 -0
- package/dist/agent-tool/types.js +2 -0
- package/dist/agent-tool/types.js.map +1 -0
- package/dist/auth/api-key.d.ts +6 -0
- package/dist/auth/api-key.d.ts.map +1 -0
- package/dist/auth/api-key.js +36 -0
- package/dist/auth/api-key.js.map +1 -0
- package/dist/auth/index.d.ts +4 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +3 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/no-auth.d.ts +3 -0
- package/dist/auth/no-auth.d.ts.map +1 -0
- package/dist/auth/no-auth.js +21 -0
- package/dist/auth/no-auth.js.map +1 -0
- package/dist/auth/types.d.ts +58 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +2 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/coding-agent/claude-code.d.ts +8 -0
- package/dist/coding-agent/claude-code.d.ts.map +1 -0
- package/dist/coding-agent/claude-code.js +37 -0
- package/dist/coding-agent/claude-code.js.map +1 -0
- package/dist/coding-agent/index.d.ts +4 -0
- package/dist/coding-agent/index.d.ts.map +1 -0
- package/dist/coding-agent/index.js +2 -0
- package/dist/coding-agent/index.js.map +1 -0
- package/dist/coding-agent/types.d.ts +10 -0
- package/dist/coding-agent/types.d.ts.map +1 -0
- package/dist/coding-agent/types.js +2 -0
- package/dist/coding-agent/types.js.map +1 -0
- package/dist/credential-vault/aws-secrets-manager.d.ts +19 -0
- package/dist/credential-vault/aws-secrets-manager.d.ts.map +1 -0
- package/dist/credential-vault/aws-secrets-manager.js +96 -0
- package/dist/credential-vault/aws-secrets-manager.js.map +1 -0
- package/dist/credential-vault/env-vault.d.ts +15 -0
- package/dist/credential-vault/env-vault.d.ts.map +1 -0
- package/dist/credential-vault/env-vault.js +25 -0
- package/dist/credential-vault/env-vault.js.map +1 -0
- package/dist/credential-vault/index.d.ts +6 -0
- package/dist/credential-vault/index.d.ts.map +1 -0
- package/dist/credential-vault/index.js +3 -0
- package/dist/credential-vault/index.js.map +1 -0
- package/dist/credential-vault/types.d.ts +30 -0
- package/dist/credential-vault/types.d.ts.map +1 -0
- package/dist/credential-vault/types.js +2 -0
- package/dist/credential-vault/types.js.map +1 -0
- package/dist/errors.d.ts +18 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +35 -0
- package/dist/errors.js.map +1 -0
- package/dist/incident/index.d.ts +4 -0
- package/dist/incident/index.d.ts.map +1 -0
- package/dist/incident/index.js +3 -0
- package/dist/incident/index.js.map +1 -0
- package/dist/incident/opsgenie.d.ts +19 -0
- package/dist/incident/opsgenie.d.ts.map +1 -0
- package/dist/incident/opsgenie.js +102 -0
- package/dist/incident/opsgenie.js.map +1 -0
- package/dist/incident/pagerduty.d.ts +19 -0
- package/dist/incident/pagerduty.d.ts.map +1 -0
- package/dist/incident/pagerduty.js +112 -0
- package/dist/incident/pagerduty.js.map +1 -0
- package/dist/incident/types.d.ts +67 -0
- package/dist/incident/types.d.ts.map +1 -0
- package/dist/incident/types.js +2 -0
- package/dist/incident/types.js.map +1 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/issue-tracking/github-issues.d.ts +22 -0
- package/dist/issue-tracking/github-issues.d.ts.map +1 -0
- package/dist/issue-tracking/github-issues.js +134 -0
- package/dist/issue-tracking/github-issues.js.map +1 -0
- package/dist/issue-tracking/index.d.ts +6 -0
- package/dist/issue-tracking/index.d.ts.map +1 -0
- package/dist/issue-tracking/index.js +5 -0
- package/dist/issue-tracking/index.js.map +1 -0
- package/dist/issue-tracking/jira.d.ts +22 -0
- package/dist/issue-tracking/jira.d.ts.map +1 -0
- package/dist/issue-tracking/jira.js +224 -0
- package/dist/issue-tracking/jira.js.map +1 -0
- package/dist/issue-tracking/linear.d.ts +16 -0
- package/dist/issue-tracking/linear.d.ts.map +1 -0
- package/dist/issue-tracking/linear.js +309 -0
- package/dist/issue-tracking/linear.js.map +1 -0
- package/dist/issue-tracking/types.d.ts +163 -0
- package/dist/issue-tracking/types.d.ts.map +1 -0
- package/dist/issue-tracking/types.js +28 -0
- package/dist/issue-tracking/types.js.map +1 -0
- package/dist/logger.d.ts +8 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +7 -0
- package/dist/logger.js.map +1 -0
- package/dist/messaging/index.d.ts +6 -0
- package/dist/messaging/index.d.ts.map +1 -0
- package/dist/messaging/index.js +3 -0
- package/dist/messaging/index.js.map +1 -0
- package/dist/messaging/slack.d.ts +8 -0
- package/dist/messaging/slack.d.ts.map +1 -0
- package/dist/messaging/slack.js +35 -0
- package/dist/messaging/slack.js.map +1 -0
- package/dist/messaging/teams.d.ts +22 -0
- package/dist/messaging/teams.d.ts.map +1 -0
- package/dist/messaging/teams.js +124 -0
- package/dist/messaging/teams.js.map +1 -0
- package/dist/messaging/types.d.ts +30 -0
- package/dist/messaging/types.d.ts.map +1 -0
- package/dist/messaging/types.js +2 -0
- package/dist/messaging/types.js.map +1 -0
- package/dist/notification/discord-webhook.d.ts +16 -0
- package/dist/notification/discord-webhook.d.ts.map +1 -0
- package/dist/notification/discord-webhook.js +33 -0
- package/dist/notification/discord-webhook.js.map +1 -0
- package/dist/notification/email.d.ts +22 -0
- package/dist/notification/email.d.ts.map +1 -0
- package/dist/notification/email.js +54 -0
- package/dist/notification/email.js.map +1 -0
- package/dist/notification/github-summary.d.ts +13 -0
- package/dist/notification/github-summary.d.ts.map +1 -0
- package/dist/notification/github-summary.js +25 -0
- package/dist/notification/github-summary.js.map +1 -0
- package/dist/notification/index.d.ts +8 -0
- package/dist/notification/index.d.ts.map +1 -0
- package/dist/notification/index.js +7 -0
- package/dist/notification/index.js.map +1 -0
- package/dist/notification/slack-webhook.d.ts +16 -0
- package/dist/notification/slack-webhook.d.ts.map +1 -0
- package/dist/notification/slack-webhook.js +31 -0
- package/dist/notification/slack-webhook.js.map +1 -0
- package/dist/notification/teams-webhook.d.ts +16 -0
- package/dist/notification/teams-webhook.d.ts.map +1 -0
- package/dist/notification/teams-webhook.js +60 -0
- package/dist/notification/teams-webhook.js.map +1 -0
- package/dist/notification/types.d.ts +18 -0
- package/dist/notification/types.d.ts.map +1 -0
- package/dist/notification/types.js +2 -0
- package/dist/notification/types.js.map +1 -0
- package/dist/notification/webhook.d.ts +28 -0
- package/dist/notification/webhook.d.ts.map +1 -0
- package/dist/notification/webhook.js +59 -0
- package/dist/notification/webhook.js.map +1 -0
- package/dist/observability/cloudwatch.d.ts +19 -0
- package/dist/observability/cloudwatch.d.ts.map +1 -0
- package/dist/observability/cloudwatch.js +181 -0
- package/dist/observability/cloudwatch.js.map +1 -0
- package/dist/observability/datadog.d.ts +22 -0
- package/dist/observability/datadog.d.ts.map +1 -0
- package/dist/observability/datadog.js +137 -0
- package/dist/observability/datadog.js.map +1 -0
- package/dist/observability/elastic.d.ts +42 -0
- package/dist/observability/elastic.d.ts.map +1 -0
- package/dist/observability/elastic.js +239 -0
- package/dist/observability/elastic.js.map +1 -0
- package/dist/observability/index.d.ts +9 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +8 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/loki.d.ts +22 -0
- package/dist/observability/loki.d.ts.map +1 -0
- package/dist/observability/loki.js +203 -0
- package/dist/observability/loki.js.map +1 -0
- package/dist/observability/newrelic.d.ts +22 -0
- package/dist/observability/newrelic.d.ts.map +1 -0
- package/dist/observability/newrelic.js +145 -0
- package/dist/observability/newrelic.js.map +1 -0
- package/dist/observability/sentry.d.ts +25 -0
- package/dist/observability/sentry.d.ts.map +1 -0
- package/dist/observability/sentry.js +149 -0
- package/dist/observability/sentry.js.map +1 -0
- package/dist/observability/splunk.d.ts +22 -0
- package/dist/observability/splunk.d.ts.map +1 -0
- package/dist/observability/splunk.js +176 -0
- package/dist/observability/splunk.js.map +1 -0
- package/dist/observability/types.d.ts +54 -0
- package/dist/observability/types.d.ts.map +1 -0
- package/dist/observability/types.js +2 -0
- package/dist/observability/types.js.map +1 -0
- package/dist/source-control/github.d.ts +11 -0
- package/dist/source-control/github.d.ts.map +1 -0
- package/dist/source-control/github.js +161 -0
- package/dist/source-control/github.js.map +1 -0
- package/dist/source-control/gitlab.d.ts +25 -0
- package/dist/source-control/gitlab.d.ts.map +1 -0
- package/dist/source-control/gitlab.js +223 -0
- package/dist/source-control/gitlab.js.map +1 -0
- package/dist/source-control/index.d.ts +6 -0
- package/dist/source-control/index.d.ts.map +1 -0
- package/dist/source-control/index.js +3 -0
- package/dist/source-control/index.js.map +1 -0
- package/dist/source-control/types.d.ts +115 -0
- package/dist/source-control/types.d.ts.map +1 -0
- package/dist/source-control/types.js +2 -0
- package/dist/source-control/types.js.map +1 -0
- package/dist/storage/csi.d.ts +36 -0
- package/dist/storage/csi.d.ts.map +1 -0
- package/dist/storage/csi.js +39 -0
- package/dist/storage/csi.js.map +1 -0
- package/dist/storage/fs.d.ts +5 -0
- package/dist/storage/fs.d.ts.map +1 -0
- package/dist/storage/fs.js +11 -0
- package/dist/storage/fs.js.map +1 -0
- package/dist/storage/index.d.ts +13 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +14 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/memory/fs.d.ts +15 -0
- package/dist/storage/memory/fs.d.ts.map +1 -0
- package/dist/storage/memory/fs.js +65 -0
- package/dist/storage/memory/fs.js.map +1 -0
- package/dist/storage/memory/s3.d.ts +17 -0
- package/dist/storage/memory/s3.d.ts.map +1 -0
- package/dist/storage/memory/s3.js +77 -0
- package/dist/storage/memory/s3.js.map +1 -0
- package/dist/storage/s3.d.ts +7 -0
- package/dist/storage/s3.d.ts.map +1 -0
- package/dist/storage/s3.js +12 -0
- package/dist/storage/s3.js.map +1 -0
- package/dist/storage/session/fs.d.ts +16 -0
- package/dist/storage/session/fs.d.ts.map +1 -0
- package/dist/storage/session/fs.js +81 -0
- package/dist/storage/session/fs.js.map +1 -0
- package/dist/storage/session/s3.d.ts +18 -0
- package/dist/storage/session/s3.d.ts.map +1 -0
- package/dist/storage/session/s3.js +121 -0
- package/dist/storage/session/s3.js.map +1 -0
- package/dist/storage/types.d.ts +206 -0
- package/dist/storage/types.d.ts.map +1 -0
- package/dist/storage/types.js +10 -0
- package/dist/storage/types.js.map +1 -0
- package/dist/storage/workspace/fs.d.ts +18 -0
- package/dist/storage/workspace/fs.d.ts.map +1 -0
- package/dist/storage/workspace/fs.js +153 -0
- package/dist/storage/workspace/fs.js.map +1 -0
- package/dist/storage/workspace/s3.d.ts +20 -0
- package/dist/storage/workspace/s3.d.ts.map +1 -0
- package/dist/storage/workspace/s3.js +180 -0
- package/dist/storage/workspace/s3.js.map +1 -0
- package/package.json +134 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 SWEny
|
|
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 all
|
|
13
|
+
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 THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
# @swenyai/providers
|
|
2
|
+
|
|
3
|
+
Shared provider interfaces and implementations for [SWEny](https://sweny.ai) — pluggable integrations for the `@swenyai/engine` workflow runner.
|
|
4
|
+
|
|
5
|
+
Providers map to the three workflow phases:
|
|
6
|
+
|
|
7
|
+
- **Learn** — Observability providers query logs and metrics from your production systems
|
|
8
|
+
- **Act** — Issue tracking, source control, incident management, and coding agent providers take action based on AI analysis
|
|
9
|
+
- **Report** — Notification and messaging providers deliver results through your team's channels
|
|
10
|
+
|
|
11
|
+
## Install
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npm install @swenyai/providers
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Providers
|
|
18
|
+
|
|
19
|
+
### Observability (7 providers)
|
|
20
|
+
|
|
21
|
+
| Provider | Factory | Config |
|
|
22
|
+
|----------|---------|--------|
|
|
23
|
+
| Datadog | `datadog()` | `apiKey`, `appKey`, `site` |
|
|
24
|
+
| Sentry | `sentry()` | `authToken`, `organization`, `project` |
|
|
25
|
+
| CloudWatch | `cloudwatch()` | `region`, `logGroupPrefix` |
|
|
26
|
+
| Splunk | `splunk()` | `baseUrl`, `token`, `index` |
|
|
27
|
+
| Elasticsearch | `elastic()` | `baseUrl`, `apiKey` or `username`/`password`, `index` |
|
|
28
|
+
| Grafana Loki | `loki()` | `baseUrl`, `apiKey`, `orgId` |
|
|
29
|
+
| New Relic | `newrelic()` | `apiKey`, `accountId`, `region` |
|
|
30
|
+
|
|
31
|
+
```typescript
|
|
32
|
+
import { datadog, splunk, loki } from "@swenyai/providers/observability";
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Issue Tracking (3 providers)
|
|
36
|
+
|
|
37
|
+
| Provider | Factory | Config |
|
|
38
|
+
|----------|---------|--------|
|
|
39
|
+
| Linear | `linear()` | `apiKey` |
|
|
40
|
+
| GitHub Issues | `githubIssues()` | `token`, `owner`, `repo` |
|
|
41
|
+
| Jira | `jira()` | `baseUrl`, `email`, `apiToken` |
|
|
42
|
+
|
|
43
|
+
```typescript
|
|
44
|
+
import { linear, githubIssues, jira } from "@swenyai/providers/issue-tracking";
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Source Control (2 providers)
|
|
48
|
+
|
|
49
|
+
| Provider | Factory | Config |
|
|
50
|
+
|----------|---------|--------|
|
|
51
|
+
| GitHub | `github()` | `token`, `owner`, `repo` |
|
|
52
|
+
| GitLab | `gitlab()` | `token`, `projectId`, `baseUrl` |
|
|
53
|
+
|
|
54
|
+
```typescript
|
|
55
|
+
import { github, gitlab } from "@swenyai/providers/source-control";
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Incident Management (2 providers)
|
|
59
|
+
|
|
60
|
+
| Provider | Factory | Config |
|
|
61
|
+
|----------|---------|--------|
|
|
62
|
+
| PagerDuty | `pagerduty()` | `apiToken`, `routingKey` |
|
|
63
|
+
| OpsGenie | `opsgenie()` | `apiKey`, `region` |
|
|
64
|
+
|
|
65
|
+
```typescript
|
|
66
|
+
import { pagerduty, opsgenie } from "@swenyai/providers/incident";
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Messaging (2 providers)
|
|
70
|
+
|
|
71
|
+
| Provider | Factory | Config |
|
|
72
|
+
|----------|---------|--------|
|
|
73
|
+
| Slack | `slack()` | `token` |
|
|
74
|
+
| Microsoft Teams | `teams()` | `tenantId`, `clientId`, `clientSecret` |
|
|
75
|
+
|
|
76
|
+
```typescript
|
|
77
|
+
import { slack, teams } from "@swenyai/providers/messaging";
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Notification (6 providers)
|
|
81
|
+
|
|
82
|
+
| Provider | Factory | Config |
|
|
83
|
+
|----------|---------|--------|
|
|
84
|
+
| GitHub Summary | `githubSummary()` | — |
|
|
85
|
+
| Slack Webhook | `slackWebhook()` | `webhookUrl` |
|
|
86
|
+
| Teams Webhook | `teamsWebhook()` | `webhookUrl` |
|
|
87
|
+
| Discord Webhook | `discordWebhook()` | `webhookUrl` |
|
|
88
|
+
| Email (SendGrid) | `email()` | `apiKey`, `from`, `to` |
|
|
89
|
+
| Generic Webhook | `webhook()` | `url`, `headers`, `method`, `signingSecret` |
|
|
90
|
+
|
|
91
|
+
```typescript
|
|
92
|
+
import { githubSummary, slackWebhook, teamsWebhook, discordWebhook, email, webhook } from "@swenyai/providers/notification";
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Storage (3 backends)
|
|
96
|
+
|
|
97
|
+
| Provider | Factory | Config |
|
|
98
|
+
|----------|---------|--------|
|
|
99
|
+
| Filesystem | `fsStorage()` | `baseDir` |
|
|
100
|
+
| AWS S3 | `s3Storage()` | `bucket`, `prefix`, `region` |
|
|
101
|
+
| CSI / Kubernetes PVC | `csiStorage()` | `mountPath`, `volumeName`, `namespace` |
|
|
102
|
+
|
|
103
|
+
```typescript
|
|
104
|
+
import { fsStorage, s3Storage, csiStorage } from "@swenyai/providers/storage";
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Credential Vault (2 backends)
|
|
108
|
+
|
|
109
|
+
| Provider | Factory | Config |
|
|
110
|
+
|----------|---------|--------|
|
|
111
|
+
| Environment Variables | `envVault()` | `prefix` |
|
|
112
|
+
| AWS Secrets Manager | `awsSecretsManager()` | `region`, `prefix` |
|
|
113
|
+
|
|
114
|
+
```typescript
|
|
115
|
+
import { envVault, awsSecretsManager } from "@swenyai/providers/credential-vault";
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### Auth (2 providers)
|
|
119
|
+
|
|
120
|
+
| Provider | Factory |
|
|
121
|
+
|----------|---------|
|
|
122
|
+
| No Auth | `noAuth()` |
|
|
123
|
+
| API Key Auth | `apiKeyAuth()` |
|
|
124
|
+
|
|
125
|
+
```typescript
|
|
126
|
+
import { noAuth, apiKeyAuth } from "@swenyai/providers/auth";
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### Access (2 guards)
|
|
130
|
+
|
|
131
|
+
| Provider | Factory |
|
|
132
|
+
|----------|---------|
|
|
133
|
+
| Allow All | `allowAllGuard()` |
|
|
134
|
+
| Role-Based | `roleBasedGuard()` |
|
|
135
|
+
|
|
136
|
+
```typescript
|
|
137
|
+
import { allowAllGuard, roleBasedGuard } from "@swenyai/providers/access";
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Coding Agent
|
|
141
|
+
|
|
142
|
+
| Provider | Factory |
|
|
143
|
+
|----------|---------|
|
|
144
|
+
| Claude Code | `claudeCode()` |
|
|
145
|
+
|
|
146
|
+
```typescript
|
|
147
|
+
import { claudeCode } from "@swenyai/providers/coding-agent";
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### Agent Tool
|
|
151
|
+
|
|
152
|
+
| Provider | Factory |
|
|
153
|
+
|----------|---------|
|
|
154
|
+
| Agent Tool | `agentTool()` |
|
|
155
|
+
|
|
156
|
+
```typescript
|
|
157
|
+
import { agentTool } from "@swenyai/providers/agent-tool";
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
## Usage
|
|
161
|
+
|
|
162
|
+
Every provider follows the factory function pattern with Zod-validated config:
|
|
163
|
+
|
|
164
|
+
```typescript
|
|
165
|
+
import { datadog } from "@swenyai/providers/observability";
|
|
166
|
+
import { jira } from "@swenyai/providers/issue-tracking";
|
|
167
|
+
import { github } from "@swenyai/providers/source-control";
|
|
168
|
+
import { pagerduty } from "@swenyai/providers/incident";
|
|
169
|
+
|
|
170
|
+
const obs = datadog({
|
|
171
|
+
apiKey: process.env.DD_API_KEY!,
|
|
172
|
+
appKey: process.env.DD_APP_KEY!,
|
|
173
|
+
site: "datadoghq.com",
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
const issues = jira({
|
|
177
|
+
baseUrl: "https://your-org.atlassian.net",
|
|
178
|
+
email: process.env.JIRA_EMAIL!,
|
|
179
|
+
apiToken: process.env.JIRA_API_TOKEN!,
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
const sc = github({
|
|
183
|
+
token: process.env.GITHUB_TOKEN!,
|
|
184
|
+
owner: "your-org",
|
|
185
|
+
repo: "your-repo",
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
const incidents = pagerduty({
|
|
189
|
+
apiToken: process.env.PD_API_TOKEN!,
|
|
190
|
+
routingKey: process.env.PD_ROUTING_KEY!,
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
// All providers expose verifyAccess() for health checks
|
|
194
|
+
await obs.verifyAccess();
|
|
195
|
+
await issues.verifyAccess();
|
|
196
|
+
await sc.verifyAccess();
|
|
197
|
+
await incidents.verifyAccess();
|
|
198
|
+
|
|
199
|
+
// Query observability logs
|
|
200
|
+
const logs = await obs.queryLogs({
|
|
201
|
+
timeRange: "24h",
|
|
202
|
+
serviceFilter: "*",
|
|
203
|
+
severity: "error",
|
|
204
|
+
});
|
|
205
|
+
|
|
206
|
+
// Create an issue
|
|
207
|
+
const issue = await issues.createIssue({
|
|
208
|
+
title: "Fix authentication timeout",
|
|
209
|
+
description: "Users are experiencing 504s on login",
|
|
210
|
+
projectId: "team-id",
|
|
211
|
+
});
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
## Optional dependencies
|
|
215
|
+
|
|
216
|
+
Heavy SDKs are optional peer dependencies. Only install what you use:
|
|
217
|
+
|
|
218
|
+
```bash
|
|
219
|
+
# For S3 storage
|
|
220
|
+
npm install @aws-sdk/client-s3 @aws-sdk/s3-request-presigner
|
|
221
|
+
|
|
222
|
+
# For CSI / Kubernetes PVC storage
|
|
223
|
+
npm install @kubernetes/client-node
|
|
224
|
+
|
|
225
|
+
# For CloudWatch observability
|
|
226
|
+
npm install @aws-sdk/client-cloudwatch-logs
|
|
227
|
+
|
|
228
|
+
# For AWS Secrets Manager credential vault
|
|
229
|
+
npm install @aws-sdk/client-secrets-manager
|
|
230
|
+
|
|
231
|
+
# For Slack messaging
|
|
232
|
+
npm install @slack/web-api
|
|
233
|
+
|
|
234
|
+
# For GitHub Actions notification
|
|
235
|
+
npm install @actions/core
|
|
236
|
+
|
|
237
|
+
# For Microsoft Teams messaging
|
|
238
|
+
npm install @azure/identity @microsoft/microsoft-graph-client
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
## Implementing a custom provider
|
|
242
|
+
|
|
243
|
+
Each provider category defines a TypeScript interface. Implement the interface and pass your instance wherever a provider is expected:
|
|
244
|
+
|
|
245
|
+
```typescript
|
|
246
|
+
import type { ObservabilityProvider } from "@swenyai/providers/observability";
|
|
247
|
+
|
|
248
|
+
export function myCustomProvider(config: MyConfig): ObservabilityProvider {
|
|
249
|
+
return {
|
|
250
|
+
async verifyAccess() { /* ... */ },
|
|
251
|
+
async queryLogs(opts) { /* ... */ },
|
|
252
|
+
async aggregate(opts) { /* ... */ },
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
## License
|
|
258
|
+
|
|
259
|
+
[MIT](../../LICENSE)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"allow-all.d.ts","sourceRoot":"","sources":["../../src/access/allow-all.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAqB9C,wBAAgB,aAAa,IAAI,WAAW,CAE3C"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { AccessLevel } from "./types.js";
|
|
2
|
+
class AllowAllGuard {
|
|
3
|
+
resolveAccessLevel(_user) {
|
|
4
|
+
return AccessLevel.READ_WRITE;
|
|
5
|
+
}
|
|
6
|
+
assertNotForbidden(_user) {
|
|
7
|
+
// all users are allowed
|
|
8
|
+
}
|
|
9
|
+
assertCanQuery(_user) {
|
|
10
|
+
// all users can query
|
|
11
|
+
}
|
|
12
|
+
assertCanMutate(_user) {
|
|
13
|
+
// all users can mutate
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export function allowAllGuard() {
|
|
17
|
+
return new AllowAllGuard();
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=allow-all.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"allow-all.js","sourceRoot":"","sources":["../../src/access/allow-all.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,aAAa;IACjB,kBAAkB,CAAC,KAAmB;QACpC,OAAO,WAAW,CAAC,UAAU,CAAC;IAChC,CAAC;IAED,kBAAkB,CAAC,KAAmB;QACpC,wBAAwB;IAC1B,CAAC;IAED,cAAc,CAAC,KAAmB;QAChC,sBAAsB;IACxB,CAAC;IAED,eAAe,CAAC,KAAmB;QACjC,uBAAuB;IACzB,CAAC;CACF;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,IAAI,aAAa,EAAE,CAAC;AAC7B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/access/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/access/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAoB,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { AccessGuard } from "./types.js";
|
|
2
|
+
export interface RoleMapping {
|
|
3
|
+
admin?: string[];
|
|
4
|
+
readWrite?: string[];
|
|
5
|
+
readOnly?: string[];
|
|
6
|
+
}
|
|
7
|
+
export declare function roleBasedGuard(mapping: RoleMapping): AccessGuard;
|
|
8
|
+
//# sourceMappingURL=role-based.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role-based.d.ts","sourceRoot":"","sources":["../../src/access/role-based.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG9C,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAiDD,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,GAAG,WAAW,CAEhE"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { AccessLevel, AccessDeniedError } from "./types.js";
|
|
2
|
+
class RoleBasedGuard {
|
|
3
|
+
mapping;
|
|
4
|
+
constructor(mapping) {
|
|
5
|
+
this.mapping = mapping;
|
|
6
|
+
}
|
|
7
|
+
resolveAccessLevel(user) {
|
|
8
|
+
const userRoles = new Set(user.roles);
|
|
9
|
+
if (this.mapping.admin?.some((r) => userRoles.has(r))) {
|
|
10
|
+
return AccessLevel.ADMIN;
|
|
11
|
+
}
|
|
12
|
+
if (this.mapping.readWrite?.some((r) => userRoles.has(r))) {
|
|
13
|
+
return AccessLevel.READ_WRITE;
|
|
14
|
+
}
|
|
15
|
+
if (this.mapping.readOnly?.some((r) => userRoles.has(r))) {
|
|
16
|
+
return AccessLevel.READ_ONLY;
|
|
17
|
+
}
|
|
18
|
+
return AccessLevel.FORBIDDEN;
|
|
19
|
+
}
|
|
20
|
+
assertNotForbidden(user) {
|
|
21
|
+
const level = this.resolveAccessLevel(user);
|
|
22
|
+
if (level === AccessLevel.FORBIDDEN) {
|
|
23
|
+
throw new AccessDeniedError(`User "${user.userId}" does not have any permitted role`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
assertCanQuery(user) {
|
|
27
|
+
const level = this.resolveAccessLevel(user);
|
|
28
|
+
if (level === AccessLevel.FORBIDDEN) {
|
|
29
|
+
throw new AccessDeniedError(`User "${user.userId}" does not have read access`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
assertCanMutate(user) {
|
|
33
|
+
const level = this.resolveAccessLevel(user);
|
|
34
|
+
if (level === AccessLevel.FORBIDDEN || level === AccessLevel.READ_ONLY) {
|
|
35
|
+
throw new AccessDeniedError(`User "${user.userId}" does not have write access`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export function roleBasedGuard(mapping) {
|
|
40
|
+
return new RoleBasedGuard(mapping);
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=role-based.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role-based.js","sourceRoot":"","sources":["../../src/access/role-based.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAQ5D,MAAM,cAAc;IACD,OAAO,CAAc;IAEtC,YAAY,OAAoB;QAC9B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,kBAAkB,CAAC,IAAkB;QACnC,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEtC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACtD,OAAO,WAAW,CAAC,KAAK,CAAC;QAC3B,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1D,OAAO,WAAW,CAAC,UAAU,CAAC;QAChC,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACzD,OAAO,WAAW,CAAC,SAAS,CAAC;QAC/B,CAAC;QAED,OAAO,WAAW,CAAC,SAAS,CAAC;IAC/B,CAAC;IAED,kBAAkB,CAAC,IAAkB;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,KAAK,KAAK,WAAW,CAAC,SAAS,EAAE,CAAC;YACpC,MAAM,IAAI,iBAAiB,CAAC,SAAS,IAAI,CAAC,MAAM,oCAAoC,CAAC,CAAC;QACxF,CAAC;IACH,CAAC;IAED,cAAc,CAAC,IAAkB;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,KAAK,KAAK,WAAW,CAAC,SAAS,EAAE,CAAC;YACpC,MAAM,IAAI,iBAAiB,CAAC,SAAS,IAAI,CAAC,MAAM,6BAA6B,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IAED,eAAe,CAAC,IAAkB;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,KAAK,KAAK,WAAW,CAAC,SAAS,IAAI,KAAK,KAAK,WAAW,CAAC,SAAS,EAAE,CAAC;YACvE,MAAM,IAAI,iBAAiB,CAAC,SAAS,IAAI,CAAC,MAAM,8BAA8B,CAAC,CAAC;QAClF,CAAC;IACH,CAAC;CACF;AAED,MAAM,UAAU,cAAc,CAAC,OAAoB;IACjD,OAAO,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { UserIdentity } from "../auth/types.js";
|
|
2
|
+
/** Permission levels ordered from least to most privileged. */
|
|
3
|
+
export declare enum AccessLevel {
|
|
4
|
+
/** User is not allowed any access. */
|
|
5
|
+
FORBIDDEN = "forbidden",
|
|
6
|
+
/** User may only read / query data. */
|
|
7
|
+
READ_ONLY = "read_only",
|
|
8
|
+
/** User may read and write / mutate data. */
|
|
9
|
+
READ_WRITE = "read_write",
|
|
10
|
+
/** User has full administrative access. */
|
|
11
|
+
ADMIN = "admin"
|
|
12
|
+
}
|
|
13
|
+
/** Guard that resolves and enforces access levels for authenticated users. */
|
|
14
|
+
export interface AccessGuard {
|
|
15
|
+
/**
|
|
16
|
+
* Determine the access level for a user.
|
|
17
|
+
* @param user - The authenticated user identity.
|
|
18
|
+
* @returns The resolved access level.
|
|
19
|
+
*/
|
|
20
|
+
resolveAccessLevel(user: UserIdentity): AccessLevel;
|
|
21
|
+
/**
|
|
22
|
+
* Assert that the user is not forbidden. Throws AccessDeniedError if forbidden.
|
|
23
|
+
* @param user - The authenticated user identity.
|
|
24
|
+
*/
|
|
25
|
+
assertNotForbidden(user: UserIdentity): void;
|
|
26
|
+
/**
|
|
27
|
+
* Assert that the user has at least read-only access. Throws AccessDeniedError otherwise.
|
|
28
|
+
* @param user - The authenticated user identity.
|
|
29
|
+
*/
|
|
30
|
+
assertCanQuery(user: UserIdentity): void;
|
|
31
|
+
/**
|
|
32
|
+
* Assert that the user has read-write or admin access. Throws AccessDeniedError otherwise.
|
|
33
|
+
* @param user - The authenticated user identity.
|
|
34
|
+
*/
|
|
35
|
+
assertCanMutate(user: UserIdentity): void;
|
|
36
|
+
}
|
|
37
|
+
/** Error thrown when a user's access level is insufficient for an operation. */
|
|
38
|
+
export declare class AccessDeniedError extends Error {
|
|
39
|
+
constructor(message: string);
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/access/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,+DAA+D;AAC/D,oBAAY,WAAW;IACrB,sCAAsC;IACtC,SAAS,cAAc;IACvB,uCAAuC;IACvC,SAAS,cAAc;IACvB,6CAA6C;IAC7C,UAAU,eAAe;IACzB,2CAA2C;IAC3C,KAAK,UAAU;CAChB;AAED,8EAA8E;AAC9E,MAAM,WAAW,WAAW;IAC1B;;;;OAIG;IACH,kBAAkB,CAAC,IAAI,EAAE,YAAY,GAAG,WAAW,CAAC;IAEpD;;;OAGG;IACH,kBAAkB,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;IAE7C;;;OAGG;IACH,cAAc,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;IAEzC;;;OAGG;IACH,eAAe,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;CAC3C;AAED,gFAAgF;AAChF,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,OAAO,EAAE,MAAM;CAI5B"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/** Permission levels ordered from least to most privileged. */
|
|
2
|
+
export var AccessLevel;
|
|
3
|
+
(function (AccessLevel) {
|
|
4
|
+
/** User is not allowed any access. */
|
|
5
|
+
AccessLevel["FORBIDDEN"] = "forbidden";
|
|
6
|
+
/** User may only read / query data. */
|
|
7
|
+
AccessLevel["READ_ONLY"] = "read_only";
|
|
8
|
+
/** User may read and write / mutate data. */
|
|
9
|
+
AccessLevel["READ_WRITE"] = "read_write";
|
|
10
|
+
/** User has full administrative access. */
|
|
11
|
+
AccessLevel["ADMIN"] = "admin";
|
|
12
|
+
})(AccessLevel || (AccessLevel = {}));
|
|
13
|
+
/** Error thrown when a user's access level is insufficient for an operation. */
|
|
14
|
+
export class AccessDeniedError extends Error {
|
|
15
|
+
constructor(message) {
|
|
16
|
+
super(message);
|
|
17
|
+
this.name = "AccessDeniedError";
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/access/types.ts"],"names":[],"mappings":"AAEA,+DAA+D;AAC/D,MAAM,CAAN,IAAY,WASX;AATD,WAAY,WAAW;IACrB,sCAAsC;IACtC,sCAAuB,CAAA;IACvB,uCAAuC;IACvC,sCAAuB,CAAA;IACvB,6CAA6C;IAC7C,wCAAyB,CAAA;IACzB,2CAA2C;IAC3C,8BAAe,CAAA;AACjB,CAAC,EATW,WAAW,KAAX,WAAW,QAStB;AA8BD,gFAAgF;AAChF,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC1C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ZodRawShape } from "zod";
|
|
2
|
+
import type { AgentTool, ToolResult } from "./types.js";
|
|
3
|
+
export declare function agentTool<T extends ZodRawShape>(name: string, description: string, schema: T, execute: (args: Record<string, unknown>) => Promise<ToolResult>): AgentTool<T>;
|
|
4
|
+
//# sourceMappingURL=factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/agent-tool/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,KAAK,CAAC;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExD,wBAAgB,SAAS,CAAC,CAAC,SAAS,WAAW,EAC7C,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,CAAC,EACT,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,UAAU,CAAC,GAC9D,SAAS,CAAC,CAAC,CAAC,CAEd"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/agent-tool/factory.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,SAAS,CACvB,IAAY,EACZ,WAAmB,EACnB,MAAS,EACT,OAA+D;IAE/D,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agent-tool/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agent-tool/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ZodRawShape } from "zod";
|
|
2
|
+
export interface ToolResult {
|
|
3
|
+
content: {
|
|
4
|
+
type: "text";
|
|
5
|
+
text: string;
|
|
6
|
+
}[];
|
|
7
|
+
isError?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface AgentTool<T extends ZodRawShape = ZodRawShape> {
|
|
10
|
+
name: string;
|
|
11
|
+
description: string;
|
|
12
|
+
schema: T;
|
|
13
|
+
execute(args: Record<string, unknown>): Promise<ToolResult>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/agent-tool/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,KAAK,CAAC;AAEvC,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC1C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,SAAS,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,CAAC,CAAC;IACV,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CAC7D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/agent-tool/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { AuthProvider, UserIdentity } from "./types.js";
|
|
2
|
+
export interface ApiKeyAuthOpts {
|
|
3
|
+
validate: (apiKey: string) => Promise<UserIdentity | null>;
|
|
4
|
+
}
|
|
5
|
+
export declare function apiKeyAuth(opts: ApiKeyAuthOpts): AuthProvider;
|
|
6
|
+
//# sourceMappingURL=api-key.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-key.d.ts","sourceRoot":"","sources":["../../src/auth/api-key.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAc,YAAY,EAAE,MAAM,YAAY,CAAC;AAEzE,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;CAC5D;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,cAAc,GAAG,YAAY,CA0C7D"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export function apiKeyAuth(opts) {
|
|
2
|
+
const sessions = new Map();
|
|
3
|
+
return {
|
|
4
|
+
displayName: "API Key",
|
|
5
|
+
loginFields: [
|
|
6
|
+
{
|
|
7
|
+
key: "apiKey",
|
|
8
|
+
label: "API Key",
|
|
9
|
+
type: "password",
|
|
10
|
+
placeholder: "Enter your API key",
|
|
11
|
+
},
|
|
12
|
+
],
|
|
13
|
+
async authenticate(userId) {
|
|
14
|
+
return sessions.get(userId) ?? null;
|
|
15
|
+
},
|
|
16
|
+
async login(_userId, credentials) {
|
|
17
|
+
const apiKey = credentials["apiKey"];
|
|
18
|
+
if (!apiKey) {
|
|
19
|
+
throw new Error("API key is required");
|
|
20
|
+
}
|
|
21
|
+
const identity = await opts.validate(apiKey);
|
|
22
|
+
if (!identity) {
|
|
23
|
+
throw new Error("Invalid API key");
|
|
24
|
+
}
|
|
25
|
+
sessions.set(identity.userId, identity);
|
|
26
|
+
return identity;
|
|
27
|
+
},
|
|
28
|
+
async hasValidSession(userId) {
|
|
29
|
+
return sessions.has(userId);
|
|
30
|
+
},
|
|
31
|
+
async clearSession(userId) {
|
|
32
|
+
sessions.delete(userId);
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=api-key.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-key.js","sourceRoot":"","sources":["../../src/auth/api-key.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,UAAU,CAAC,IAAoB;IAC7C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAwB,CAAC;IAEjD,OAAO;QACL,WAAW,EAAE,SAAS;QAEtB,WAAW,EAAE;YACX;gBACE,GAAG,EAAE,QAAQ;gBACb,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE,UAAgC;gBACtC,WAAW,EAAE,oBAAoB;aAClC;SACF;QAED,KAAK,CAAC,YAAY,CAAC,MAAc;YAC/B,OAAO,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;QACtC,CAAC;QAED,KAAK,CAAC,KAAK,CAAC,OAAe,EAAE,WAAmC;YAC9D,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;YACrC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;YACzC,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC7C,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACrC,CAAC;YAED,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YACxC,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,KAAK,CAAC,eAAe,CAAC,MAAc;YAClC,OAAO,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC;QAED,KAAK,CAAC,YAAY,CAAC,MAAc;YAC/B,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEzE,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,UAAU,EAAuB,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-auth.d.ts","sourceRoot":"","sources":["../../src/auth/no-auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAgB,MAAM,YAAY,CAAC;AAS7D,wBAAgB,MAAM,IAAI,YAAY,CAgBrC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
const LOCAL_USER = {
|
|
2
|
+
userId: "local",
|
|
3
|
+
displayName: "Local User",
|
|
4
|
+
roles: ["admin"],
|
|
5
|
+
metadata: {},
|
|
6
|
+
};
|
|
7
|
+
export function noAuth() {
|
|
8
|
+
return {
|
|
9
|
+
displayName: "No Auth",
|
|
10
|
+
async authenticate(_userId) {
|
|
11
|
+
return LOCAL_USER;
|
|
12
|
+
},
|
|
13
|
+
async hasValidSession(_userId) {
|
|
14
|
+
return true;
|
|
15
|
+
},
|
|
16
|
+
async clearSession(_userId) {
|
|
17
|
+
// nothing to clear
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=no-auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-auth.js","sourceRoot":"","sources":["../../src/auth/no-auth.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,GAAiB;IAC/B,MAAM,EAAE,OAAO;IACf,WAAW,EAAE,YAAY;IACzB,KAAK,EAAE,CAAC,OAAO,CAAC;IAChB,QAAQ,EAAE,EAAE;CACb,CAAC;AAEF,MAAM,UAAU,MAAM;IACpB,OAAO;QACL,WAAW,EAAE,SAAS;QAEtB,KAAK,CAAC,YAAY,CAAC,OAAe;YAChC,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,KAAK,CAAC,eAAe,CAAC,OAAe;YACnC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,KAAK,CAAC,YAAY,CAAC,OAAe;YAChC,mBAAmB;QACrB,CAAC;KACF,CAAC;AACJ,CAAC"}
|