feat(phase-4): WS2 + WS3 — Developer Portal (Next.js 14) and CLI tool (sentryagent)
WS2: Developer Portal (portal/) - Standalone Next.js 14 + Tailwind CSS app — independent deployment - Home page: hero, feature grid, CTA to /get-started - /pricing: free tier limits table (10 agents, 1k calls/day) + paid tier CTA - /sdks: all 4 SDKs (Node.js, Python, Go, Java) with install + code examples - /api-explorer: Swagger UI from NEXT_PUBLIC_API_URL/openapi.json, persistAuthorization - /get-started: 4-step wizard (setup → register agent → credentials → SDK snippet) - Shared Nav component with active-link highlighting - Build: 8/8 static pages, zero TypeScript errors WS3: CLI Tool (cli/ — npm package: sentryagent) - configure, register-agent, list-agents, issue-token, rotate-credentials, tail-audit-log - Auto OAuth2 token fetch + 30s-buffer cache via client_credentials flow - chalk-formatted table output, confirmation prompts, bounded audit log dedup - bash + zsh shell completion scripts - README with installation, all commands, and completion setup - Build: tsc clean, node dist/index.js --help verified Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
348
cli/README.md
Normal file
348
cli/README.md
Normal file
@@ -0,0 +1,348 @@
|
||||
# sentryagent CLI
|
||||
|
||||
The official command-line interface for [SentryAgent.ai](https://sentryagent.ai) — manage agents, issue OAuth2 tokens, rotate credentials, and stream audit logs from your terminal.
|
||||
|
||||
---
|
||||
|
||||
## Installation
|
||||
|
||||
### From npm (once published)
|
||||
|
||||
```bash
|
||||
npm install -g sentryagent
|
||||
```
|
||||
|
||||
### From source
|
||||
|
||||
```bash
|
||||
cd cli/
|
||||
npm install
|
||||
npm run build
|
||||
npm install -g .
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Configuration
|
||||
|
||||
Before using any command, configure the CLI with your API endpoint and credentials:
|
||||
|
||||
```bash
|
||||
sentryagent configure
|
||||
```
|
||||
|
||||
You will be prompted for:
|
||||
|
||||
| Field | Description |
|
||||
|---------------|--------------------------------------------------|
|
||||
| API URL | The SentryAgent.ai API base URL (e.g. `https://api.sentryagent.ai`) |
|
||||
| Client ID | Your tenant client ID |
|
||||
| Client Secret | Your tenant client secret |
|
||||
|
||||
Configuration is stored at `~/.sentryagent/config.json` with permissions `0600`.
|
||||
|
||||
If any command is run before `sentryagent configure` has been called, the CLI exits with:
|
||||
|
||||
```
|
||||
Not configured. Run `sentryagent configure` first.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Commands
|
||||
|
||||
### `sentryagent --version` / `-v`
|
||||
|
||||
Output the installed CLI version.
|
||||
|
||||
```bash
|
||||
sentryagent --version
|
||||
# 1.0.0
|
||||
```
|
||||
|
||||
### `sentryagent --help` / `-h`
|
||||
|
||||
Show all available commands and global options.
|
||||
|
||||
```bash
|
||||
sentryagent --help
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### `sentryagent configure`
|
||||
|
||||
Interactively configure the CLI.
|
||||
|
||||
```bash
|
||||
sentryagent configure
|
||||
```
|
||||
|
||||
**Prompts:**
|
||||
|
||||
```
|
||||
SentryAgent CLI Configuration
|
||||
────────────────────────────────────────
|
||||
API URL (e.g. https://api.sentryagent.ai): https://api.sentryagent.ai
|
||||
Client ID: tenant_01ABC...
|
||||
Client Secret: ****
|
||||
|
||||
✓ Configuration saved to ~/.sentryagent/config.json
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### `sentryagent register-agent`
|
||||
|
||||
Register a new agent with the identity provider.
|
||||
|
||||
```bash
|
||||
sentryagent register-agent --name <name> [--description <desc>]
|
||||
```
|
||||
|
||||
**Options:**
|
||||
|
||||
| Flag | Required | Description |
|
||||
|-------------------|----------|---------------------|
|
||||
| `--name <name>` | Yes | Agent display name |
|
||||
| `--description` | No | Agent description |
|
||||
|
||||
**Example:**
|
||||
|
||||
```bash
|
||||
sentryagent register-agent --name "billing-agent" --description "Handles billing workflows"
|
||||
```
|
||||
|
||||
**Output:**
|
||||
|
||||
```
|
||||
✓ Agent registered successfully
|
||||
|
||||
Agent ID: 01ARZ3NDEKTSV4RRFFQ69G5FAV
|
||||
Name: billing-agent
|
||||
Description: Handles billing workflows
|
||||
Status: active
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### `sentryagent list-agents`
|
||||
|
||||
List all agents registered for your tenant, displayed as a formatted table.
|
||||
|
||||
```bash
|
||||
sentryagent list-agents
|
||||
```
|
||||
|
||||
**Output:**
|
||||
|
||||
```
|
||||
AGENT ID NAME STATUS CREATED AT
|
||||
────────────────────────────────────────────────────────────────────────────
|
||||
01ARZ3NDEKTSV4RRFFQ69G5FAV billing-agent active 4/2/2026, 9:00:00 AM
|
||||
01ARZ3NDEKTSV4RRFFQ69G5FAX auth-agent active 4/1/2026, 3:00:00 PM
|
||||
────────────────────────────────────────────────────────────────────────────
|
||||
Total: 2
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### `sentryagent issue-token`
|
||||
|
||||
Issue an OAuth2 `client_credentials` access token for a specific agent.
|
||||
|
||||
```bash
|
||||
sentryagent issue-token --agent-id <id>
|
||||
```
|
||||
|
||||
**Options:**
|
||||
|
||||
| Flag | Required | Description |
|
||||
|--------------------|----------|-------------------------|
|
||||
| `--agent-id <id>` | Yes | Target agent ID |
|
||||
|
||||
**Example:**
|
||||
|
||||
```bash
|
||||
sentryagent issue-token --agent-id 01ARZ3NDEKTSV4RRFFQ69G5FAV
|
||||
```
|
||||
|
||||
**Output:**
|
||||
|
||||
```
|
||||
✓ Token issued successfully
|
||||
|
||||
Access Token:
|
||||
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...
|
||||
|
||||
Token Type: Bearer
|
||||
Expires In: 3600s
|
||||
Expires At: 2026-04-02T10:00:00.000Z
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### `sentryagent rotate-credentials`
|
||||
|
||||
Rotate the client secret for an agent. Prompts for confirmation before proceeding.
|
||||
|
||||
```bash
|
||||
sentryagent rotate-credentials --agent-id <id>
|
||||
```
|
||||
|
||||
**Options:**
|
||||
|
||||
| Flag | Required | Description |
|
||||
|--------------------|----------|-------------------------|
|
||||
| `--agent-id <id>` | Yes | Target agent ID |
|
||||
|
||||
**Example:**
|
||||
|
||||
```bash
|
||||
sentryagent rotate-credentials --agent-id 01ARZ3NDEKTSV4RRFFQ69G5FAV
|
||||
```
|
||||
|
||||
**Output:**
|
||||
|
||||
```
|
||||
⚠ This will invalidate the current secret for agent 01ARZ3NDEKTSV4RRFFQ69G5FAV
|
||||
This will invalidate the current secret. Continue? [y/N] y
|
||||
|
||||
✓ Credentials rotated successfully
|
||||
|
||||
Client ID: 01ARZ3NDEKTSV4RRFFQ69G5FAV
|
||||
Client Secret: cs_new_secret_value_here
|
||||
|
||||
Store the new client secret securely — it will not be shown again.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### `sentryagent tail-audit-log`
|
||||
|
||||
Poll the audit log API every 5 seconds and stream new events to stdout. Press **Ctrl+C** to stop.
|
||||
|
||||
```bash
|
||||
sentryagent tail-audit-log [--agent-id <id>]
|
||||
```
|
||||
|
||||
**Options:**
|
||||
|
||||
| Flag | Required | Description |
|
||||
|--------------------|----------|------------------------------------|
|
||||
| `--agent-id <id>` | No | Filter events for a specific agent |
|
||||
|
||||
**Example (all events):**
|
||||
|
||||
```bash
|
||||
sentryagent tail-audit-log
|
||||
```
|
||||
|
||||
**Example (filtered by agent):**
|
||||
|
||||
```bash
|
||||
sentryagent tail-audit-log --agent-id 01ARZ3NDEKTSV4RRFFQ69G5FAV
|
||||
```
|
||||
|
||||
**Output:**
|
||||
|
||||
```
|
||||
Tailing audit log — press Ctrl+C to stop
|
||||
────────────────────────────────────────────────────────────
|
||||
4/2/2026, 9:05:00 AM agent.token.issued outcome=success agent=01ARZ3NDEKTSV... id=evt_01...
|
||||
4/2/2026, 9:10:03 AM agent.registered outcome=success id=evt_02...
|
||||
^C
|
||||
|
||||
Stopped.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### `sentryagent completion`
|
||||
|
||||
Output shell completion scripts.
|
||||
|
||||
#### Bash
|
||||
|
||||
```bash
|
||||
sentryagent completion bash
|
||||
```
|
||||
|
||||
To enable permanently, add to `~/.bashrc` or `~/.bash_profile`:
|
||||
|
||||
```bash
|
||||
source <(sentryagent completion bash)
|
||||
```
|
||||
|
||||
Or write to a file:
|
||||
|
||||
```bash
|
||||
sentryagent completion bash > ~/.bash_completion.d/sentryagent
|
||||
```
|
||||
|
||||
#### Zsh
|
||||
|
||||
```bash
|
||||
sentryagent completion zsh
|
||||
```
|
||||
|
||||
To enable permanently, add to `~/.zshrc`:
|
||||
|
||||
```bash
|
||||
source <(sentryagent completion zsh)
|
||||
```
|
||||
|
||||
Or write to a file in your `$fpath`:
|
||||
|
||||
```bash
|
||||
sentryagent completion zsh > ~/.zsh/completions/_sentryagent
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Shell Completion Setup
|
||||
|
||||
### Bash (one-time setup)
|
||||
|
||||
```bash
|
||||
mkdir -p ~/.bash_completion.d
|
||||
sentryagent completion bash > ~/.bash_completion.d/sentryagent
|
||||
echo 'source ~/.bash_completion.d/sentryagent' >> ~/.bashrc
|
||||
source ~/.bashrc
|
||||
```
|
||||
|
||||
### Zsh (one-time setup)
|
||||
|
||||
```bash
|
||||
mkdir -p ~/.zsh/completions
|
||||
sentryagent completion zsh > ~/.zsh/completions/_sentryagent
|
||||
echo 'fpath=(~/.zsh/completions $fpath)' >> ~/.zshrc
|
||||
echo 'autoload -Uz compinit && compinit' >> ~/.zshrc
|
||||
source ~/.zshrc
|
||||
```
|
||||
|
||||
After setup, pressing **Tab** after `sentryagent` will autocomplete commands and flags.
|
||||
|
||||
---
|
||||
|
||||
## Configuration File
|
||||
|
||||
The config file is stored at `~/.sentryagent/config.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"apiUrl": "https://api.sentryagent.ai",
|
||||
"clientId": "tenant_01ABC...",
|
||||
"clientSecret": "cs_secret_value"
|
||||
}
|
||||
```
|
||||
|
||||
The directory is created with mode `0700` and the file with mode `0600` to prevent other users from reading your credentials.
|
||||
|
||||
---
|
||||
|
||||
## Environment
|
||||
|
||||
- Node.js >= 18.0.0 is required (uses the built-in `fetch` API)
|
||||
- All HTTP requests use OAuth2 `client_credentials` tokens fetched automatically from your configuration
|
||||
- Tokens are cached in memory for the duration of the CLI session (refreshed 30 seconds before expiry)
|
||||
267
cli/package-lock.json
generated
Normal file
267
cli/package-lock.json
generated
Normal file
@@ -0,0 +1,267 @@
|
||||
{
|
||||
"name": "sentryagent",
|
||||
"version": "1.0.0",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "sentryagent",
|
||||
"version": "1.0.0",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"chalk": "^5.3.0",
|
||||
"commander": "^12.1.0"
|
||||
},
|
||||
"bin": {
|
||||
"sentryagent": "dist/index.js"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^20.12.7",
|
||||
"ts-node": "^10.9.2",
|
||||
"typescript": "^5.4.5"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@cspotcode/source-map-support": {
|
||||
"version": "0.8.1",
|
||||
"resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
|
||||
"integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@jridgewell/trace-mapping": "0.3.9"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/@jridgewell/resolve-uri": {
|
||||
"version": "3.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
|
||||
"integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@jridgewell/sourcemap-codec": {
|
||||
"version": "1.5.5",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
|
||||
"integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@jridgewell/trace-mapping": {
|
||||
"version": "0.3.9",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
|
||||
"integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@jridgewell/resolve-uri": "^3.0.3",
|
||||
"@jridgewell/sourcemap-codec": "^1.4.10"
|
||||
}
|
||||
},
|
||||
"node_modules/@tsconfig/node10": {
|
||||
"version": "1.0.12",
|
||||
"resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz",
|
||||
"integrity": "sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@tsconfig/node12": {
|
||||
"version": "1.0.11",
|
||||
"resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
|
||||
"integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@tsconfig/node14": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
|
||||
"integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@tsconfig/node16": {
|
||||
"version": "1.0.4",
|
||||
"resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz",
|
||||
"integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "20.19.37",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.37.tgz",
|
||||
"integrity": "sha512-8kzdPJ3FsNsVIurqBs7oodNnCEVbni9yUEkaHbgptDACOPW04jimGagZ51E6+lXUwJjgnBw+hyko/lkFWCldqw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"undici-types": "~6.21.0"
|
||||
}
|
||||
},
|
||||
"node_modules/acorn": {
|
||||
"version": "8.16.0",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz",
|
||||
"integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"bin": {
|
||||
"acorn": "bin/acorn"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/acorn-walk": {
|
||||
"version": "8.3.5",
|
||||
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.5.tgz",
|
||||
"integrity": "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"acorn": "^8.11.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/arg": {
|
||||
"version": "4.1.3",
|
||||
"resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
|
||||
"integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/chalk": {
|
||||
"version": "5.6.2",
|
||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz",
|
||||
"integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": "^12.17.0 || ^14.13 || >=16.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/chalk/chalk?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/commander": {
|
||||
"version": "12.1.0",
|
||||
"resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz",
|
||||
"integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/create-require": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
|
||||
"integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/diff": {
|
||||
"version": "4.0.4",
|
||||
"resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz",
|
||||
"integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==",
|
||||
"dev": true,
|
||||
"license": "BSD-3-Clause",
|
||||
"engines": {
|
||||
"node": ">=0.3.1"
|
||||
}
|
||||
},
|
||||
"node_modules/make-error": {
|
||||
"version": "1.3.6",
|
||||
"resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
|
||||
"integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
|
||||
"dev": true,
|
||||
"license": "ISC"
|
||||
},
|
||||
"node_modules/ts-node": {
|
||||
"version": "10.9.2",
|
||||
"resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz",
|
||||
"integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@cspotcode/source-map-support": "^0.8.0",
|
||||
"@tsconfig/node10": "^1.0.7",
|
||||
"@tsconfig/node12": "^1.0.7",
|
||||
"@tsconfig/node14": "^1.0.0",
|
||||
"@tsconfig/node16": "^1.0.2",
|
||||
"acorn": "^8.4.1",
|
||||
"acorn-walk": "^8.1.1",
|
||||
"arg": "^4.1.0",
|
||||
"create-require": "^1.1.0",
|
||||
"diff": "^4.0.1",
|
||||
"make-error": "^1.1.1",
|
||||
"v8-compile-cache-lib": "^3.0.1",
|
||||
"yn": "3.1.1"
|
||||
},
|
||||
"bin": {
|
||||
"ts-node": "dist/bin.js",
|
||||
"ts-node-cwd": "dist/bin-cwd.js",
|
||||
"ts-node-esm": "dist/bin-esm.js",
|
||||
"ts-node-script": "dist/bin-script.js",
|
||||
"ts-node-transpile-only": "dist/bin-transpile.js",
|
||||
"ts-script": "dist/bin-script-deprecated.js"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@swc/core": ">=1.2.50",
|
||||
"@swc/wasm": ">=1.2.50",
|
||||
"@types/node": "*",
|
||||
"typescript": ">=2.7"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@swc/core": {
|
||||
"optional": true
|
||||
},
|
||||
"@swc/wasm": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/typescript": {
|
||||
"version": "5.9.3",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
|
||||
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"bin": {
|
||||
"tsc": "bin/tsc",
|
||||
"tsserver": "bin/tsserver"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14.17"
|
||||
}
|
||||
},
|
||||
"node_modules/undici-types": {
|
||||
"version": "6.21.0",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
|
||||
"integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/v8-compile-cache-lib": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
|
||||
"integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/yn": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
|
||||
"integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
34
cli/package.json
Normal file
34
cli/package.json
Normal file
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"name": "sentryagent",
|
||||
"version": "1.0.0",
|
||||
"description": "SentryAgent.ai CLI — manage agents, tokens, and audit logs",
|
||||
"main": "dist/index.js",
|
||||
"bin": {
|
||||
"sentryagent": "./dist/index.js"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "tsc",
|
||||
"dev": "ts-node src/index.ts",
|
||||
"clean": "rm -rf dist"
|
||||
},
|
||||
"dependencies": {
|
||||
"chalk": "^5.3.0",
|
||||
"commander": "^12.1.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^20.12.7",
|
||||
"typescript": "^5.4.5",
|
||||
"ts-node": "^10.9.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18.0.0"
|
||||
},
|
||||
"keywords": [
|
||||
"sentryagent",
|
||||
"agentidp",
|
||||
"cli",
|
||||
"agents",
|
||||
"identity"
|
||||
],
|
||||
"license": "MIT"
|
||||
}
|
||||
95
cli/src/api.ts
Normal file
95
cli/src/api.ts
Normal file
@@ -0,0 +1,95 @@
|
||||
import { Config } from './config';
|
||||
|
||||
interface TokenCache {
|
||||
accessToken: string;
|
||||
expiresAt: number;
|
||||
}
|
||||
|
||||
let tokenCache: TokenCache | null = null;
|
||||
|
||||
interface TokenResponse {
|
||||
access_token: string;
|
||||
expires_in: number;
|
||||
token_type: string;
|
||||
}
|
||||
|
||||
async function fetchToken(config: Config): Promise<string> {
|
||||
const now = Date.now();
|
||||
if (tokenCache !== null && tokenCache.expiresAt > now + 30_000) {
|
||||
return tokenCache.accessToken;
|
||||
}
|
||||
|
||||
const body = new URLSearchParams({
|
||||
grant_type: 'client_credentials',
|
||||
client_id: config.clientId,
|
||||
client_secret: config.clientSecret,
|
||||
});
|
||||
|
||||
const res = await fetch(`${config.apiUrl}/oauth2/token`, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
||||
body: body.toString(),
|
||||
});
|
||||
|
||||
if (!res.ok) {
|
||||
const text = await res.text();
|
||||
throw new Error(`Authentication failed (${res.status}): ${text}`);
|
||||
}
|
||||
|
||||
const data = (await res.json()) as TokenResponse;
|
||||
tokenCache = {
|
||||
accessToken: data.access_token,
|
||||
expiresAt: now + data.expires_in * 1000,
|
||||
};
|
||||
return tokenCache.accessToken;
|
||||
}
|
||||
|
||||
export function clearTokenCache(): void {
|
||||
tokenCache = null;
|
||||
}
|
||||
|
||||
type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
|
||||
|
||||
interface ApiRequestOptions {
|
||||
method?: HttpMethod;
|
||||
body?: unknown;
|
||||
params?: Record<string, string>;
|
||||
}
|
||||
|
||||
export async function apiRequest<T>(
|
||||
config: Config,
|
||||
endpoint: string,
|
||||
options: ApiRequestOptions = {},
|
||||
): Promise<T> {
|
||||
const token = await fetchToken(config);
|
||||
const { method = 'GET', body, params } = options;
|
||||
|
||||
let url = `${config.apiUrl}${endpoint}`;
|
||||
if (params !== undefined && Object.keys(params).length > 0) {
|
||||
const qs = new URLSearchParams(params);
|
||||
url = `${url}?${qs.toString()}`;
|
||||
}
|
||||
|
||||
const headers: Record<string, string> = {
|
||||
Authorization: `Bearer ${token}`,
|
||||
'Content-Type': 'application/json',
|
||||
};
|
||||
|
||||
const fetchOptions: RequestInit = { method, headers };
|
||||
if (body !== undefined) {
|
||||
fetchOptions.body = JSON.stringify(body);
|
||||
}
|
||||
|
||||
const res = await fetch(url, fetchOptions);
|
||||
|
||||
if (!res.ok) {
|
||||
const text = await res.text();
|
||||
throw new Error(`API error (${res.status}): ${text}`);
|
||||
}
|
||||
|
||||
if (res.status === 204) {
|
||||
return undefined as unknown as T;
|
||||
}
|
||||
|
||||
return (await res.json()) as T;
|
||||
}
|
||||
155
cli/src/commands/completion.ts
Normal file
155
cli/src/commands/completion.ts
Normal file
@@ -0,0 +1,155 @@
|
||||
import { Command } from 'commander';
|
||||
|
||||
const BASH_COMPLETION = `
|
||||
# sentryagent bash completion
|
||||
# Add to ~/.bashrc or ~/.bash_profile:
|
||||
# source <(sentryagent completion bash)
|
||||
|
||||
_sentryagent_completion() {
|
||||
local cur prev words cword
|
||||
_init_completion || return
|
||||
|
||||
local commands="configure register-agent list-agents issue-token rotate-credentials tail-audit-log completion"
|
||||
local global_opts="--help --version"
|
||||
|
||||
case "\${prev}" in
|
||||
sentryagent)
|
||||
COMPREPLY=( \$(compgen -W "\${commands} \${global_opts}" -- "\${cur}") )
|
||||
return 0
|
||||
;;
|
||||
configure)
|
||||
COMPREPLY=( \$(compgen -W "--help" -- "\${cur}") )
|
||||
return 0
|
||||
;;
|
||||
register-agent)
|
||||
COMPREPLY=( \$(compgen -W "--name --description --help" -- "\${cur}") )
|
||||
return 0
|
||||
;;
|
||||
list-agents)
|
||||
COMPREPLY=( \$(compgen -W "--help" -- "\${cur}") )
|
||||
return 0
|
||||
;;
|
||||
issue-token)
|
||||
COMPREPLY=( \$(compgen -W "--agent-id --help" -- "\${cur}") )
|
||||
return 0
|
||||
;;
|
||||
rotate-credentials)
|
||||
COMPREPLY=( \$(compgen -W "--agent-id --help" -- "\${cur}") )
|
||||
return 0
|
||||
;;
|
||||
tail-audit-log)
|
||||
COMPREPLY=( \$(compgen -W "--agent-id --help" -- "\${cur}") )
|
||||
return 0
|
||||
;;
|
||||
completion)
|
||||
COMPREPLY=( \$(compgen -W "bash zsh --help" -- "\${cur}") )
|
||||
return 0
|
||||
;;
|
||||
*)
|
||||
COMPREPLY=()
|
||||
return 0
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
complete -F _sentryagent_completion sentryagent
|
||||
`.trim();
|
||||
|
||||
const ZSH_COMPLETION = `
|
||||
#compdef sentryagent
|
||||
|
||||
# sentryagent zsh completion
|
||||
# Add to ~/.zshrc:
|
||||
# source <(sentryagent completion zsh)
|
||||
# Or generate a file and place it in your $fpath:
|
||||
# sentryagent completion zsh > ~/.zsh/completions/_sentryagent
|
||||
|
||||
_sentryagent() {
|
||||
local state
|
||||
|
||||
_arguments \\
|
||||
'(-v --version)'{-v,--version}'[Show version]' \\
|
||||
'(-h --help)'{-h,--help}'[Show help]' \\
|
||||
'1: :->command' \\
|
||||
'*: :->args'
|
||||
|
||||
case \$state in
|
||||
command)
|
||||
local commands=(
|
||||
'configure:Configure CLI with API URL and credentials'
|
||||
'register-agent:Register a new agent'
|
||||
'list-agents:List all registered agents'
|
||||
'issue-token:Issue an OAuth2 access token for an agent'
|
||||
'rotate-credentials:Rotate credentials for an agent'
|
||||
'tail-audit-log:Poll and stream audit log events'
|
||||
'completion:Output shell completion script'
|
||||
)
|
||||
_describe 'command' commands
|
||||
;;
|
||||
args)
|
||||
case \${words[2]} in
|
||||
configure)
|
||||
_arguments \\
|
||||
'(-h --help)'{-h,--help}'[Show help]'
|
||||
;;
|
||||
register-agent)
|
||||
_arguments \\
|
||||
'--name[Agent name]:name' \\
|
||||
'--description[Agent description]:description' \\
|
||||
'(-h --help)'{-h,--help}'[Show help]'
|
||||
;;
|
||||
list-agents)
|
||||
_arguments \\
|
||||
'(-h --help)'{-h,--help}'[Show help]'
|
||||
;;
|
||||
issue-token)
|
||||
_arguments \\
|
||||
'--agent-id[Agent ID]:agent-id' \\
|
||||
'(-h --help)'{-h,--help}'[Show help]'
|
||||
;;
|
||||
rotate-credentials)
|
||||
_arguments \\
|
||||
'--agent-id[Agent ID]:agent-id' \\
|
||||
'(-h --help)'{-h,--help}'[Show help]'
|
||||
;;
|
||||
tail-audit-log)
|
||||
_arguments \\
|
||||
'--agent-id[Filter by agent ID]:agent-id' \\
|
||||
'(-h --help)'{-h,--help}'[Show help]'
|
||||
;;
|
||||
completion)
|
||||
local shells=('bash:Generate bash completion script' 'zsh:Generate zsh completion script')
|
||||
_describe 'shell' shells
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
_sentryagent "\$@"
|
||||
`.trim();
|
||||
|
||||
export function registerCompletion(program: Command): void {
|
||||
const completion = program
|
||||
.command('completion')
|
||||
.description('Output shell completion scripts');
|
||||
|
||||
completion
|
||||
.command('bash')
|
||||
.description('Output bash completion script')
|
||||
.action(() => {
|
||||
console.log(BASH_COMPLETION);
|
||||
});
|
||||
|
||||
completion
|
||||
.command('zsh')
|
||||
.description('Output zsh completion script')
|
||||
.action(() => {
|
||||
console.log(ZSH_COMPLETION);
|
||||
});
|
||||
|
||||
completion.addHelpText(
|
||||
'after',
|
||||
'\nSupported shells: bash, zsh',
|
||||
);
|
||||
}
|
||||
63
cli/src/commands/configure.ts
Normal file
63
cli/src/commands/configure.ts
Normal file
@@ -0,0 +1,63 @@
|
||||
import * as readline from 'readline';
|
||||
import { Command } from 'commander';
|
||||
import chalk from 'chalk';
|
||||
import { writeConfig } from '../config';
|
||||
|
||||
function prompt(rl: readline.Interface, question: string): Promise<string> {
|
||||
return new Promise((resolve) => {
|
||||
rl.question(question, (answer) => {
|
||||
resolve(answer.trim());
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
export function registerConfigure(program: Command): void {
|
||||
program
|
||||
.command('configure')
|
||||
.description('Configure the CLI with API URL and credentials')
|
||||
.action(async () => {
|
||||
const rl = readline.createInterface({
|
||||
input: process.stdin,
|
||||
output: process.stdout,
|
||||
});
|
||||
|
||||
try {
|
||||
console.log(chalk.bold('SentryAgent CLI Configuration'));
|
||||
console.log(chalk.dim('─'.repeat(40)));
|
||||
|
||||
const apiUrl = await prompt(
|
||||
rl,
|
||||
chalk.cyan('API URL') + ' (e.g. https://api.sentryagent.ai): ',
|
||||
);
|
||||
if (apiUrl === '') {
|
||||
console.error(chalk.red('API URL cannot be empty.'));
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const clientId = await prompt(rl, chalk.cyan('Client ID') + ': ');
|
||||
if (clientId === '') {
|
||||
console.error(chalk.red('Client ID cannot be empty.'));
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const clientSecret = await prompt(
|
||||
rl,
|
||||
chalk.cyan('Client Secret') + ': ',
|
||||
);
|
||||
if (clientSecret === '') {
|
||||
console.error(chalk.red('Client Secret cannot be empty.'));
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
writeConfig({ apiUrl, clientId, clientSecret });
|
||||
|
||||
console.log();
|
||||
console.log(
|
||||
chalk.green('✓') +
|
||||
' Configuration saved to ~/.sentryagent/config.json',
|
||||
);
|
||||
} finally {
|
||||
rl.close();
|
||||
}
|
||||
});
|
||||
}
|
||||
70
cli/src/commands/issue-token.ts
Normal file
70
cli/src/commands/issue-token.ts
Normal file
@@ -0,0 +1,70 @@
|
||||
import { Command } from 'commander';
|
||||
import chalk from 'chalk';
|
||||
import { requireConfig } from '../config';
|
||||
|
||||
interface TokenResponse {
|
||||
access_token: string;
|
||||
expires_in: number;
|
||||
token_type: string;
|
||||
scope?: string;
|
||||
}
|
||||
|
||||
export function registerIssueToken(program: Command): void {
|
||||
program
|
||||
.command('issue-token')
|
||||
.description('Issue an OAuth2 access token for an agent')
|
||||
.requiredOption('--agent-id <id>', 'Agent ID to issue a token for')
|
||||
.action(async (options: { agentId: string }) => {
|
||||
const config = requireConfig();
|
||||
|
||||
try {
|
||||
const body = new URLSearchParams({
|
||||
grant_type: 'client_credentials',
|
||||
client_id: config.clientId,
|
||||
client_secret: config.clientSecret,
|
||||
agent_id: options.agentId,
|
||||
});
|
||||
|
||||
const res = await fetch(`${config.apiUrl}/oauth2/token`, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
||||
body: body.toString(),
|
||||
});
|
||||
|
||||
if (!res.ok) {
|
||||
const text = await res.text();
|
||||
throw new Error(`Token issuance failed (${res.status}): ${text}`);
|
||||
}
|
||||
|
||||
const data = (await res.json()) as TokenResponse;
|
||||
const expiresAt = new Date(
|
||||
Date.now() + data.expires_in * 1000,
|
||||
).toISOString();
|
||||
|
||||
console.log(chalk.green('✓') + ' Token issued successfully');
|
||||
console.log();
|
||||
console.log(chalk.bold('Access Token:'));
|
||||
console.log(chalk.cyan(data.access_token));
|
||||
console.log();
|
||||
console.log(
|
||||
chalk.bold('Token Type: ') + data.token_type,
|
||||
);
|
||||
console.log(
|
||||
chalk.bold('Expires In: ') + `${data.expires_in}s`,
|
||||
);
|
||||
console.log(
|
||||
chalk.bold('Expires At: ') + chalk.dim(expiresAt),
|
||||
);
|
||||
if (data.scope !== undefined) {
|
||||
console.log(chalk.bold('Scope: ') + data.scope);
|
||||
}
|
||||
|
||||
} catch (err) {
|
||||
console.error(
|
||||
chalk.red('Error:'),
|
||||
err instanceof Error ? err.message : String(err),
|
||||
);
|
||||
process.exit(1);
|
||||
}
|
||||
});
|
||||
}
|
||||
105
cli/src/commands/list-agents.ts
Normal file
105
cli/src/commands/list-agents.ts
Normal file
@@ -0,0 +1,105 @@
|
||||
import { Command } from 'commander';
|
||||
import chalk from 'chalk';
|
||||
import { requireConfig } from '../config';
|
||||
import { apiRequest } from '../api';
|
||||
|
||||
interface Agent {
|
||||
id: string;
|
||||
name: string;
|
||||
status: string;
|
||||
createdAt: string;
|
||||
description?: string;
|
||||
}
|
||||
|
||||
interface AgentsResponse {
|
||||
agents: Agent[];
|
||||
total?: number;
|
||||
}
|
||||
|
||||
function truncate(str: string, maxLen: number): string {
|
||||
if (str.length <= maxLen) return str;
|
||||
return str.slice(0, maxLen - 1) + '…';
|
||||
}
|
||||
|
||||
function padEnd(str: string, len: number): string {
|
||||
return str.padEnd(len, ' ');
|
||||
}
|
||||
|
||||
export function registerListAgents(program: Command): void {
|
||||
program
|
||||
.command('list-agents')
|
||||
.description('List all registered agents')
|
||||
.action(async () => {
|
||||
const config = requireConfig();
|
||||
|
||||
try {
|
||||
const data = await apiRequest<AgentsResponse | Agent[]>(
|
||||
config,
|
||||
'/agents',
|
||||
);
|
||||
|
||||
const agents: Agent[] = Array.isArray(data)
|
||||
? data
|
||||
: (data as AgentsResponse).agents ?? [];
|
||||
|
||||
if (agents.length === 0) {
|
||||
console.log(chalk.yellow('No agents found.'));
|
||||
return;
|
||||
}
|
||||
|
||||
const ID_W = 26;
|
||||
const NAME_W = 24;
|
||||
const STATUS_W = 10;
|
||||
const DATE_W = 20;
|
||||
|
||||
const header =
|
||||
chalk.bold(padEnd('AGENT ID', ID_W)) +
|
||||
' ' +
|
||||
chalk.bold(padEnd('NAME', NAME_W)) +
|
||||
' ' +
|
||||
chalk.bold(padEnd('STATUS', STATUS_W)) +
|
||||
' ' +
|
||||
chalk.bold('CREATED AT');
|
||||
|
||||
const divider = chalk.dim(
|
||||
'─'.repeat(ID_W + NAME_W + STATUS_W + DATE_W + 6),
|
||||
);
|
||||
|
||||
console.log(header);
|
||||
console.log(divider);
|
||||
|
||||
for (const agent of agents) {
|
||||
const statusColor =
|
||||
agent.status === 'active'
|
||||
? chalk.green
|
||||
: agent.status === 'inactive'
|
||||
? chalk.yellow
|
||||
: chalk.red;
|
||||
|
||||
const createdAt = new Date(agent.createdAt).toLocaleString();
|
||||
|
||||
console.log(
|
||||
chalk.cyan(padEnd(truncate(agent.id, ID_W), ID_W)) +
|
||||
' ' +
|
||||
padEnd(truncate(agent.name, NAME_W), NAME_W) +
|
||||
' ' +
|
||||
statusColor(padEnd(truncate(agent.status, STATUS_W), STATUS_W)) +
|
||||
' ' +
|
||||
chalk.dim(truncate(createdAt, DATE_W)),
|
||||
);
|
||||
}
|
||||
|
||||
console.log(divider);
|
||||
const total = Array.isArray(data)
|
||||
? agents.length
|
||||
: ((data as AgentsResponse).total ?? agents.length);
|
||||
console.log(chalk.dim(`Total: ${total}`));
|
||||
} catch (err) {
|
||||
console.error(
|
||||
chalk.red('Error:'),
|
||||
err instanceof Error ? err.message : String(err),
|
||||
);
|
||||
process.exit(1);
|
||||
}
|
||||
});
|
||||
}
|
||||
54
cli/src/commands/register-agent.ts
Normal file
54
cli/src/commands/register-agent.ts
Normal file
@@ -0,0 +1,54 @@
|
||||
import { Command } from 'commander';
|
||||
import chalk from 'chalk';
|
||||
import { requireConfig } from '../config';
|
||||
import { apiRequest } from '../api';
|
||||
|
||||
interface AgentResponse {
|
||||
id: string;
|
||||
name: string;
|
||||
description?: string;
|
||||
status: string;
|
||||
createdAt: string;
|
||||
}
|
||||
|
||||
export function registerRegisterAgent(program: Command): void {
|
||||
program
|
||||
.command('register-agent')
|
||||
.description('Register a new agent')
|
||||
.requiredOption('--name <name>', 'Agent name')
|
||||
.option('--description <desc>', 'Agent description')
|
||||
.action(async (options: { name: string; description?: string }) => {
|
||||
const config = requireConfig();
|
||||
|
||||
try {
|
||||
const body: { name: string; description?: string } = {
|
||||
name: options.name,
|
||||
};
|
||||
if (options.description !== undefined) {
|
||||
body.description = options.description;
|
||||
}
|
||||
|
||||
const agent = await apiRequest<AgentResponse>(config, '/agents', {
|
||||
method: 'POST',
|
||||
body,
|
||||
});
|
||||
|
||||
console.log(chalk.green('✓') + ' Agent registered successfully');
|
||||
console.log();
|
||||
console.log(
|
||||
chalk.bold('Agent ID: ') + chalk.cyan(agent.id),
|
||||
);
|
||||
console.log(chalk.bold('Name: ') + agent.name);
|
||||
if (agent.description !== undefined) {
|
||||
console.log(chalk.bold('Description:') + ' ' + agent.description);
|
||||
}
|
||||
console.log(chalk.bold('Status: ') + agent.status);
|
||||
} catch (err) {
|
||||
console.error(
|
||||
chalk.red('Error:'),
|
||||
err instanceof Error ? err.message : String(err),
|
||||
);
|
||||
process.exit(1);
|
||||
}
|
||||
});
|
||||
}
|
||||
85
cli/src/commands/rotate-credentials.ts
Normal file
85
cli/src/commands/rotate-credentials.ts
Normal file
@@ -0,0 +1,85 @@
|
||||
import * as readline from 'readline';
|
||||
import { Command } from 'commander';
|
||||
import chalk from 'chalk';
|
||||
import { requireConfig } from '../config';
|
||||
import { apiRequest } from '../api';
|
||||
|
||||
interface RotateResponse {
|
||||
clientId: string;
|
||||
clientSecret: string;
|
||||
rotatedAt?: string;
|
||||
}
|
||||
|
||||
function prompt(rl: readline.Interface, question: string): Promise<string> {
|
||||
return new Promise((resolve) => {
|
||||
rl.question(question, (answer) => {
|
||||
resolve(answer.trim());
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
export function registerRotateCredentials(program: Command): void {
|
||||
program
|
||||
.command('rotate-credentials')
|
||||
.description('Rotate credentials for an agent (invalidates current secret)')
|
||||
.requiredOption('--agent-id <id>', 'Agent ID whose credentials to rotate')
|
||||
.action(async (options: { agentId: string }) => {
|
||||
const config = requireConfig();
|
||||
|
||||
const rl = readline.createInterface({
|
||||
input: process.stdin,
|
||||
output: process.stdout,
|
||||
});
|
||||
|
||||
try {
|
||||
console.log(
|
||||
chalk.yellow('⚠') +
|
||||
' This will invalidate the current secret for agent ' +
|
||||
chalk.cyan(options.agentId),
|
||||
);
|
||||
|
||||
const answer = await prompt(
|
||||
rl,
|
||||
chalk.bold('This will invalidate the current secret. Continue? [y/N] '),
|
||||
);
|
||||
|
||||
if (answer.toLowerCase() !== 'y' && answer.toLowerCase() !== 'yes') {
|
||||
console.log(chalk.dim('Aborted.'));
|
||||
return;
|
||||
}
|
||||
|
||||
const data = await apiRequest<RotateResponse>(
|
||||
config,
|
||||
`/agents/${options.agentId}/credentials/rotate`,
|
||||
{ method: 'POST' },
|
||||
);
|
||||
|
||||
console.log();
|
||||
console.log(chalk.green('✓') + ' Credentials rotated successfully');
|
||||
console.log();
|
||||
console.log(chalk.bold('Client ID: ') + chalk.cyan(data.clientId));
|
||||
console.log(
|
||||
chalk.bold('Client Secret: ') + chalk.yellow(data.clientSecret),
|
||||
);
|
||||
console.log();
|
||||
console.log(
|
||||
chalk.dim(
|
||||
'Store the new client secret securely — it will not be shown again.',
|
||||
),
|
||||
);
|
||||
if (data.rotatedAt !== undefined) {
|
||||
console.log(
|
||||
chalk.dim('Rotated at: ') + chalk.dim(data.rotatedAt),
|
||||
);
|
||||
}
|
||||
} catch (err) {
|
||||
console.error(
|
||||
chalk.red('Error:'),
|
||||
err instanceof Error ? err.message : String(err),
|
||||
);
|
||||
process.exit(1);
|
||||
} finally {
|
||||
rl.close();
|
||||
}
|
||||
});
|
||||
}
|
||||
122
cli/src/commands/tail-audit-log.ts
Normal file
122
cli/src/commands/tail-audit-log.ts
Normal file
@@ -0,0 +1,122 @@
|
||||
import { Command } from 'commander';
|
||||
import chalk from 'chalk';
|
||||
import { requireConfig } from '../config';
|
||||
import { apiRequest } from '../api';
|
||||
|
||||
interface AuditEvent {
|
||||
id: string;
|
||||
timestamp: string;
|
||||
action: string;
|
||||
agentId?: string;
|
||||
tenantId?: string;
|
||||
outcome: string;
|
||||
details?: Record<string, unknown>;
|
||||
}
|
||||
|
||||
interface AuditLogsResponse {
|
||||
events: AuditEvent[];
|
||||
nextCursor?: string;
|
||||
}
|
||||
|
||||
function formatEvent(event: AuditEvent): string {
|
||||
const ts = chalk.dim(new Date(event.timestamp).toLocaleString());
|
||||
const outcome =
|
||||
event.outcome === 'success'
|
||||
? chalk.green(event.outcome)
|
||||
: chalk.red(event.outcome);
|
||||
const action = chalk.cyan(event.action);
|
||||
const agentPart =
|
||||
event.agentId !== undefined
|
||||
? ' ' + chalk.dim('agent=' + event.agentId)
|
||||
: '';
|
||||
|
||||
return `${ts} ${action} outcome=${outcome}${agentPart} id=${chalk.dim(event.id)}`;
|
||||
}
|
||||
|
||||
export function registerTailAuditLog(program: Command): void {
|
||||
program
|
||||
.command('tail-audit-log')
|
||||
.description(
|
||||
'Poll and stream audit log events every 5 seconds (Ctrl+C to stop)',
|
||||
)
|
||||
.option('--agent-id <id>', 'Filter events for a specific agent ID')
|
||||
.action(async (options: { agentId?: string }) => {
|
||||
const config = requireConfig();
|
||||
|
||||
console.log(
|
||||
chalk.bold('Tailing audit log') +
|
||||
(options.agentId !== undefined
|
||||
? chalk.dim(` (agent: ${options.agentId})`)
|
||||
: '') +
|
||||
chalk.dim(' — press Ctrl+C to stop'),
|
||||
);
|
||||
console.log(chalk.dim('─'.repeat(60)));
|
||||
|
||||
const seenIds = new Set<string>();
|
||||
let cursor: string | undefined;
|
||||
let running = true;
|
||||
|
||||
process.on('SIGINT', () => {
|
||||
running = false;
|
||||
console.log();
|
||||
console.log(chalk.dim('Stopped.'));
|
||||
process.exit(0);
|
||||
});
|
||||
|
||||
while (running) {
|
||||
try {
|
||||
const params: Record<string, string> = {};
|
||||
if (options.agentId !== undefined) {
|
||||
params['agentId'] = options.agentId;
|
||||
}
|
||||
if (cursor !== undefined) {
|
||||
params['cursor'] = cursor;
|
||||
}
|
||||
// Request events from the last poll window
|
||||
params['limit'] = '50';
|
||||
|
||||
const data = await apiRequest<AuditLogsResponse | AuditEvent[]>(
|
||||
config,
|
||||
'/audit/logs',
|
||||
{ params },
|
||||
);
|
||||
|
||||
const events: AuditEvent[] = Array.isArray(data)
|
||||
? data
|
||||
: (data as AuditLogsResponse).events ?? [];
|
||||
|
||||
if (!Array.isArray(data) && (data as AuditLogsResponse).nextCursor !== undefined) {
|
||||
cursor = (data as AuditLogsResponse).nextCursor;
|
||||
}
|
||||
|
||||
for (const event of events) {
|
||||
if (!seenIds.has(event.id)) {
|
||||
seenIds.add(event.id);
|
||||
console.log(formatEvent(event));
|
||||
}
|
||||
}
|
||||
|
||||
// Keep the seenIds set bounded to avoid unbounded memory growth
|
||||
if (seenIds.size > 10_000) {
|
||||
const arr = Array.from(seenIds);
|
||||
const keep = arr.slice(arr.length - 5_000);
|
||||
seenIds.clear();
|
||||
for (const id of keep) seenIds.add(id);
|
||||
}
|
||||
} catch (err) {
|
||||
console.error(
|
||||
chalk.yellow('⚠') +
|
||||
' Poll error: ' +
|
||||
(err instanceof Error ? err.message : String(err)),
|
||||
);
|
||||
}
|
||||
|
||||
// Wait 5 seconds between polls
|
||||
await new Promise<void>((resolve) => {
|
||||
const timer = setTimeout(resolve, 5000);
|
||||
// Allow the timer to be garbage-collected if process exits
|
||||
if (typeof timer.unref === 'function') timer.unref();
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
61
cli/src/config.ts
Normal file
61
cli/src/config.ts
Normal file
@@ -0,0 +1,61 @@
|
||||
import * as fs from 'fs';
|
||||
import * as os from 'os';
|
||||
import * as path from 'path';
|
||||
|
||||
export interface Config {
|
||||
apiUrl: string;
|
||||
clientId: string;
|
||||
clientSecret: string;
|
||||
}
|
||||
|
||||
const CONFIG_DIR = path.join(os.homedir(), '.sentryagent');
|
||||
const CONFIG_FILE = path.join(CONFIG_DIR, 'config.json');
|
||||
|
||||
export function readConfig(): Config | null {
|
||||
if (!fs.existsSync(CONFIG_FILE)) {
|
||||
return null;
|
||||
}
|
||||
try {
|
||||
const raw = fs.readFileSync(CONFIG_FILE, 'utf-8');
|
||||
const parsed: unknown = JSON.parse(raw);
|
||||
if (
|
||||
parsed !== null &&
|
||||
typeof parsed === 'object' &&
|
||||
'apiUrl' in parsed &&
|
||||
'clientId' in parsed &&
|
||||
'clientSecret' in parsed &&
|
||||
typeof (parsed as Record<string, unknown>)['apiUrl'] === 'string' &&
|
||||
typeof (parsed as Record<string, unknown>)['clientId'] === 'string' &&
|
||||
typeof (parsed as Record<string, unknown>)['clientSecret'] === 'string'
|
||||
) {
|
||||
const p = parsed as Record<string, unknown>;
|
||||
return {
|
||||
apiUrl: p['apiUrl'] as string,
|
||||
clientId: p['clientId'] as string,
|
||||
clientSecret: p['clientSecret'] as string,
|
||||
};
|
||||
}
|
||||
return null;
|
||||
} catch {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
export function writeConfig(config: Config): void {
|
||||
if (!fs.existsSync(CONFIG_DIR)) {
|
||||
fs.mkdirSync(CONFIG_DIR, { recursive: true, mode: 0o700 });
|
||||
}
|
||||
fs.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2), {
|
||||
encoding: 'utf-8',
|
||||
mode: 0o600,
|
||||
});
|
||||
}
|
||||
|
||||
export function requireConfig(): Config {
|
||||
const config = readConfig();
|
||||
if (config === null) {
|
||||
console.error('Not configured. Run `sentryagent configure` first.');
|
||||
process.exit(1);
|
||||
}
|
||||
return config;
|
||||
}
|
||||
31
cli/src/index.ts
Normal file
31
cli/src/index.ts
Normal file
@@ -0,0 +1,31 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
import { Command } from 'commander';
|
||||
import packageJson from '../package.json';
|
||||
|
||||
import { registerConfigure } from './commands/configure';
|
||||
import { registerRegisterAgent } from './commands/register-agent';
|
||||
import { registerListAgents } from './commands/list-agents';
|
||||
import { registerIssueToken } from './commands/issue-token';
|
||||
import { registerRotateCredentials } from './commands/rotate-credentials';
|
||||
import { registerTailAuditLog } from './commands/tail-audit-log';
|
||||
import { registerCompletion } from './commands/completion';
|
||||
|
||||
const program = new Command();
|
||||
|
||||
program
|
||||
.name('sentryagent')
|
||||
.description('SentryAgent.ai CLI — manage agents, tokens, and audit logs')
|
||||
.version(packageJson.version, '-v, --version', 'Output the current version');
|
||||
|
||||
// Register all commands
|
||||
registerConfigure(program);
|
||||
registerRegisterAgent(program);
|
||||
registerListAgents(program);
|
||||
registerIssueToken(program);
|
||||
registerRotateCredentials(program);
|
||||
registerTailAuditLog(program);
|
||||
registerCompletion(program);
|
||||
|
||||
// Parse args — commander will display help automatically on --help
|
||||
program.parse(process.argv);
|
||||
29
cli/tsconfig.json
Normal file
29
cli/tsconfig.json
Normal file
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "ES2020",
|
||||
"module": "commonjs",
|
||||
"lib": ["ES2020"],
|
||||
"outDir": "./dist",
|
||||
"rootDir": "./src",
|
||||
"strict": true,
|
||||
"noImplicitAny": true,
|
||||
"strictNullChecks": true,
|
||||
"strictFunctionTypes": true,
|
||||
"strictBindCallApply": true,
|
||||
"strictPropertyInitialization": true,
|
||||
"noImplicitThis": true,
|
||||
"alwaysStrict": true,
|
||||
"noUnusedLocals": true,
|
||||
"noUnusedParameters": true,
|
||||
"noImplicitReturns": true,
|
||||
"noFallthroughCasesInSwitch": true,
|
||||
"esModuleInterop": true,
|
||||
"skipLibCheck": true,
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"resolveJsonModule": true,
|
||||
"declaration": true,
|
||||
"sourceMap": true
|
||||
},
|
||||
"include": ["src/**/*"],
|
||||
"exclude": ["node_modules", "dist"]
|
||||
}
|
||||
@@ -28,44 +28,44 @@
|
||||
|
||||
## 4. WS2: Developer Portal — Setup & Core Pages
|
||||
|
||||
- [ ] 4.1 Scaffold `portal/` as a standalone Next.js 14 app with Tailwind CSS — `npx create-next-app@latest portal --typescript --tailwind`
|
||||
- [ ] 4.2 Add `NEXT_PUBLIC_API_URL` env var support — create `portal/.env.example`
|
||||
- [ ] 4.3 Create portal home page (`portal/app/page.tsx`) — hero, product description, CTA to `/get-started`
|
||||
- [ ] 4.4 Create `/pricing` page with free tier limits table (10 agents, 1,000 calls/day) and paid tier CTA
|
||||
- [ ] 4.5 Create `/sdks` page listing all 4 SDKs with installation commands and minimal code examples
|
||||
- [ ] 4.6 Create shared nav component with links to: Home, API Explorer, Get Started, SDKs, Pricing
|
||||
- [x] 4.1 Scaffold `portal/` as a standalone Next.js 14 app with Tailwind CSS — `npx create-next-app@latest portal --typescript --tailwind`
|
||||
- [x] 4.2 Add `NEXT_PUBLIC_API_URL` env var support — create `portal/.env.example`
|
||||
- [x] 4.3 Create portal home page (`portal/app/page.tsx`) — hero, product description, CTA to `/get-started`
|
||||
- [x] 4.4 Create `/pricing` page with free tier limits table (10 agents, 1,000 calls/day) and paid tier CTA
|
||||
- [x] 4.5 Create `/sdks` page listing all 4 SDKs with installation commands and minimal code examples
|
||||
- [x] 4.6 Create shared nav component with links to: Home, API Explorer, Get Started, SDKs, Pricing
|
||||
|
||||
## 5. WS2: Developer Portal — API Explorer & Onboarding Wizard
|
||||
|
||||
- [ ] 5.1 Install `swagger-ui-react` in `portal/` — add to portal package.json
|
||||
- [ ] 5.2 Create `/api-explorer` page embedding Swagger UI loaded from `NEXT_PUBLIC_API_URL/openapi.json`
|
||||
- [ ] 5.3 Configure Swagger UI with `persistAuthorization: true` and Bearer token auth scheme
|
||||
- [ ] 5.4 Create `/get-started` wizard — Step 1: account setup instructions
|
||||
- [ ] 5.5 Create wizard Step 2: agent name input → calls `POST /agents` via API → displays agent ID
|
||||
- [ ] 5.6 Create wizard Step 3: generate credentials → calls credentials endpoint → displays client ID/secret with copy buttons
|
||||
- [ ] 5.7 Create wizard Step 4: SDK selection → displays ready-to-run code snippet for chosen SDK (Node.js / Python / Go / Java)
|
||||
- [ ] 5.8 Wizard state management using React `useState` — no external state library needed
|
||||
- [ ] 5.9 Build `portal/` — `npm run build` passes without errors or TypeScript errors
|
||||
- [x] 5.1 Install `swagger-ui-react` in `portal/` — add to portal package.json
|
||||
- [x] 5.2 Create `/api-explorer` page embedding Swagger UI loaded from `NEXT_PUBLIC_API_URL/openapi.json`
|
||||
- [x] 5.3 Configure Swagger UI with `persistAuthorization: true` and Bearer token auth scheme
|
||||
- [x] 5.4 Create `/get-started` wizard — Step 1: account setup instructions
|
||||
- [x] 5.5 Create wizard Step 2: agent name input → calls `POST /agents` via API → displays agent ID
|
||||
- [x] 5.6 Create wizard Step 3: generate credentials → calls credentials endpoint → displays client ID/secret with copy buttons
|
||||
- [x] 5.7 Create wizard Step 4: SDK selection → displays ready-to-run code snippet for chosen SDK (Node.js / Python / Go / Java)
|
||||
- [x] 5.8 Wizard state management using React `useState` — no external state library needed
|
||||
- [x] 5.9 Build `portal/` — `npm run build` passes without errors or TypeScript errors
|
||||
|
||||
## 6. WS3: CLI Tool — Setup & Configuration
|
||||
|
||||
- [ ] 6.1 Scaffold `cli/` directory with `package.json` (name: `sentryagent`, bin: `sentryagent`) — TypeScript with `commander` and `chalk`
|
||||
- [ ] 6.2 Create `cli/src/config.ts` — read/write `~/.sentryagent/config.json` with `apiUrl`, `clientId`, `clientSecret`
|
||||
- [ ] 6.3 Implement `sentryagent configure` command — prompts for API URL, client ID, client secret using `readline` — writes to config file
|
||||
- [ ] 6.4 Implement config validation helper — fail with "Not configured. Run `sentryagent configure` first." if config missing
|
||||
- [ ] 6.5 Implement `sentryagent --version` outputting version from package.json
|
||||
- [ ] 6.6 Implement `sentryagent --help` showing all available commands
|
||||
- [x] 6.1 Scaffold `cli/` directory with `package.json` (name: `sentryagent`, bin: `sentryagent`) — TypeScript with `commander` and `chalk`
|
||||
- [x] 6.2 Create `cli/src/config.ts` — read/write `~/.sentryagent/config.json` with `apiUrl`, `clientId`, `clientSecret`
|
||||
- [x] 6.3 Implement `sentryagent configure` command — prompts for API URL, client ID, client secret using `readline` — writes to config file
|
||||
- [x] 6.4 Implement config validation helper — fail with "Not configured. Run `sentryagent configure` first." if config missing
|
||||
- [x] 6.5 Implement `sentryagent --version` outputting version from package.json
|
||||
- [x] 6.6 Implement `sentryagent --help` showing all available commands
|
||||
|
||||
## 7. WS3: CLI Tool — Agent Commands
|
||||
|
||||
- [ ] 7.1 Implement `sentryagent register-agent --name <name> [--description <desc>]` — calls `POST /agents`, outputs agent ID
|
||||
- [ ] 7.2 Implement `sentryagent list-agents` — calls `GET /agents`, outputs formatted table with chalk
|
||||
- [ ] 7.3 Implement `sentryagent issue-token --agent-id <id>` — calls `POST /oauth2/token`, outputs access token and expiry
|
||||
- [ ] 7.4 Implement `sentryagent rotate-credentials --agent-id <id>` — prompts for confirmation, calls rotate endpoint, outputs new secret
|
||||
- [ ] 7.5 Implement `sentryagent tail-audit-log [--agent-id <id>]` — polls `GET /audit/logs` every 5s, streams new events to stdout, runs until Ctrl+C
|
||||
- [ ] 7.6 Implement `sentryagent completion bash` and `sentryagent completion zsh` — output shell completion scripts
|
||||
- [ ] 7.7 Write `cli/README.md` — installation, configuration, all commands with examples, shell completion setup
|
||||
- [ ] 7.8 Build CLI — `npm run build` in `cli/` passes; `node dist/index.js --help` works
|
||||
- [x] 7.1 Implement `sentryagent register-agent --name <name> [--description <desc>]` — calls `POST /agents`, outputs agent ID
|
||||
- [x] 7.2 Implement `sentryagent list-agents` — calls `GET /agents`, outputs formatted table with chalk
|
||||
- [x] 7.3 Implement `sentryagent issue-token --agent-id <id>` — calls `POST /oauth2/token`, outputs access token and expiry
|
||||
- [x] 7.4 Implement `sentryagent rotate-credentials --agent-id <id>` — prompts for confirmation, calls rotate endpoint, outputs new secret
|
||||
- [x] 7.5 Implement `sentryagent tail-audit-log [--agent-id <id>]` — polls `GET /audit/logs` every 5s, streams new events to stdout, runs until Ctrl+C
|
||||
- [x] 7.6 Implement `sentryagent completion bash` and `sentryagent completion zsh` — output shell completion scripts
|
||||
- [x] 7.7 Write `cli/README.md` — installation, configuration, all commands with examples, shell completion setup
|
||||
- [x] 7.8 Build CLI — `npm run build` in `cli/` passes; `node dist/index.js --help` works
|
||||
|
||||
## 8. WS4: Agent Marketplace
|
||||
|
||||
|
||||
1
portal/.next/BUILD_ID
Normal file
1
portal/.next/BUILD_ID
Normal file
@@ -0,0 +1 @@
|
||||
h5w-rj60Vif8vQbejZCYz
|
||||
58
portal/.next/app-build-manifest.json
Normal file
58
portal/.next/app-build-manifest.json
Normal file
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"pages": {
|
||||
"/_not-found/page": [
|
||||
"static/chunks/webpack-75820735529c9609.js",
|
||||
"static/chunks/fd9d1056-0ffa74f19011bd1c.js",
|
||||
"static/chunks/23-eed73080eee64cfd.js",
|
||||
"static/chunks/main-app-ce894e58853e9441.js",
|
||||
"static/chunks/app/_not-found/page-0c1a014a63577378.js"
|
||||
],
|
||||
"/layout": [
|
||||
"static/chunks/webpack-75820735529c9609.js",
|
||||
"static/chunks/fd9d1056-0ffa74f19011bd1c.js",
|
||||
"static/chunks/23-eed73080eee64cfd.js",
|
||||
"static/chunks/main-app-ce894e58853e9441.js",
|
||||
"static/css/0d1e1814871c1ae4.css",
|
||||
"static/chunks/231-711da40718c2508c.js",
|
||||
"static/chunks/app/layout-db75ca053106eec0.js"
|
||||
],
|
||||
"/pricing/page": [
|
||||
"static/chunks/webpack-75820735529c9609.js",
|
||||
"static/chunks/fd9d1056-0ffa74f19011bd1c.js",
|
||||
"static/chunks/23-eed73080eee64cfd.js",
|
||||
"static/chunks/main-app-ce894e58853e9441.js",
|
||||
"static/chunks/231-711da40718c2508c.js",
|
||||
"static/chunks/app/pricing/page-9b42634a6f0d2af7.js"
|
||||
],
|
||||
"/page": [
|
||||
"static/chunks/webpack-75820735529c9609.js",
|
||||
"static/chunks/fd9d1056-0ffa74f19011bd1c.js",
|
||||
"static/chunks/23-eed73080eee64cfd.js",
|
||||
"static/chunks/main-app-ce894e58853e9441.js",
|
||||
"static/chunks/231-711da40718c2508c.js",
|
||||
"static/chunks/app/page-d3d46720ba5b5546.js"
|
||||
],
|
||||
"/sdks/page": [
|
||||
"static/chunks/webpack-75820735529c9609.js",
|
||||
"static/chunks/fd9d1056-0ffa74f19011bd1c.js",
|
||||
"static/chunks/23-eed73080eee64cfd.js",
|
||||
"static/chunks/main-app-ce894e58853e9441.js",
|
||||
"static/chunks/app/sdks/page-7526ae5674dbbace.js"
|
||||
],
|
||||
"/api-explorer/page": [
|
||||
"static/chunks/webpack-75820735529c9609.js",
|
||||
"static/chunks/fd9d1056-0ffa74f19011bd1c.js",
|
||||
"static/chunks/23-eed73080eee64cfd.js",
|
||||
"static/chunks/main-app-ce894e58853e9441.js",
|
||||
"static/css/a4c02a9871b5dc42.css",
|
||||
"static/chunks/app/api-explorer/page-7cae2529092c7dfa.js"
|
||||
],
|
||||
"/get-started/page": [
|
||||
"static/chunks/webpack-75820735529c9609.js",
|
||||
"static/chunks/fd9d1056-0ffa74f19011bd1c.js",
|
||||
"static/chunks/23-eed73080eee64cfd.js",
|
||||
"static/chunks/main-app-ce894e58853e9441.js",
|
||||
"static/chunks/app/get-started/page-31e1ee0acda82a62.js"
|
||||
]
|
||||
}
|
||||
}
|
||||
1
portal/.next/app-path-routes-manifest.json
Normal file
1
portal/.next/app-path-routes-manifest.json
Normal file
@@ -0,0 +1 @@
|
||||
{"/_not-found/page":"/_not-found","/pricing/page":"/pricing","/page":"/","/sdks/page":"/sdks","/api-explorer/page":"/api-explorer","/get-started/page":"/get-started"}
|
||||
32
portal/.next/build-manifest.json
Normal file
32
portal/.next/build-manifest.json
Normal file
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"polyfillFiles": [
|
||||
"static/chunks/polyfills-78c92fac7aa8fdd8.js"
|
||||
],
|
||||
"devFiles": [],
|
||||
"ampDevFiles": [],
|
||||
"lowPriorityFiles": [
|
||||
"static/h5w-rj60Vif8vQbejZCYz/_buildManifest.js",
|
||||
"static/h5w-rj60Vif8vQbejZCYz/_ssgManifest.js"
|
||||
],
|
||||
"rootMainFiles": [
|
||||
"static/chunks/webpack-75820735529c9609.js",
|
||||
"static/chunks/fd9d1056-0ffa74f19011bd1c.js",
|
||||
"static/chunks/23-eed73080eee64cfd.js",
|
||||
"static/chunks/main-app-ce894e58853e9441.js"
|
||||
],
|
||||
"pages": {
|
||||
"/_app": [
|
||||
"static/chunks/webpack-75820735529c9609.js",
|
||||
"static/chunks/framework-00a8ba1a63cfdc9e.js",
|
||||
"static/chunks/main-6e8e822f884ef93a.js",
|
||||
"static/chunks/pages/_app-037b5d058bd9a820.js"
|
||||
],
|
||||
"/_error": [
|
||||
"static/chunks/webpack-75820735529c9609.js",
|
||||
"static/chunks/framework-00a8ba1a63cfdc9e.js",
|
||||
"static/chunks/main-6e8e822f884ef93a.js",
|
||||
"static/chunks/pages/_error-6ae619510b1539d6.js"
|
||||
]
|
||||
},
|
||||
"ampFirstPages": []
|
||||
}
|
||||
1
portal/.next/cache/.tsbuildinfo
vendored
Normal file
1
portal/.next/cache/.tsbuildinfo
vendored
Normal file
File diff suppressed because one or more lines are too long
BIN
portal/.next/cache/webpack/client-production/0.pack
vendored
Normal file
BIN
portal/.next/cache/webpack/client-production/0.pack
vendored
Normal file
Binary file not shown.
BIN
portal/.next/cache/webpack/client-production/index.pack
vendored
Normal file
BIN
portal/.next/cache/webpack/client-production/index.pack
vendored
Normal file
Binary file not shown.
BIN
portal/.next/cache/webpack/client-production/index.pack.old
vendored
Normal file
BIN
portal/.next/cache/webpack/client-production/index.pack.old
vendored
Normal file
Binary file not shown.
BIN
portal/.next/cache/webpack/edge-server-production/0.pack
vendored
Normal file
BIN
portal/.next/cache/webpack/edge-server-production/0.pack
vendored
Normal file
Binary file not shown.
BIN
portal/.next/cache/webpack/edge-server-production/index.pack
vendored
Normal file
BIN
portal/.next/cache/webpack/edge-server-production/index.pack
vendored
Normal file
Binary file not shown.
BIN
portal/.next/cache/webpack/edge-server-production/index.pack.old
vendored
Normal file
BIN
portal/.next/cache/webpack/edge-server-production/index.pack.old
vendored
Normal file
Binary file not shown.
BIN
portal/.next/cache/webpack/server-production/0.pack
vendored
Normal file
BIN
portal/.next/cache/webpack/server-production/0.pack
vendored
Normal file
Binary file not shown.
BIN
portal/.next/cache/webpack/server-production/index.pack
vendored
Normal file
BIN
portal/.next/cache/webpack/server-production/index.pack
vendored
Normal file
Binary file not shown.
BIN
portal/.next/cache/webpack/server-production/index.pack.old
vendored
Normal file
BIN
portal/.next/cache/webpack/server-production/index.pack.old
vendored
Normal file
Binary file not shown.
1
portal/.next/export-marker.json
Normal file
1
portal/.next/export-marker.json
Normal file
@@ -0,0 +1 @@
|
||||
{"version":1,"hasExportPathMap":false,"exportTrailingSlash":false,"isNextImageImported":false}
|
||||
1
portal/.next/images-manifest.json
Normal file
1
portal/.next/images-manifest.json
Normal file
@@ -0,0 +1 @@
|
||||
{"version":1,"images":{"deviceSizes":[640,750,828,1080,1200,1920,2048,3840],"imageSizes":[16,32,48,64,96,128,256,384],"path":"/_next/image","loader":"default","loaderFile":"","domains":[],"disableStaticImages":false,"minimumCacheTTL":60,"formats":["image/webp"],"dangerouslyAllowSVG":false,"contentSecurityPolicy":"script-src 'none'; frame-src 'none'; sandbox;","contentDispositionType":"inline","remotePatterns":[],"unoptimized":false,"sizes":[640,750,828,1080,1200,1920,2048,3840,16,32,48,64,96,128,256,384]}}
|
||||
1
portal/.next/next-minimal-server.js.nft.json
Normal file
1
portal/.next/next-minimal-server.js.nft.json
Normal file
@@ -0,0 +1 @@
|
||||
{"version":1,"files":["../node_modules/styled-jsx/index.js","../node_modules/styled-jsx/package.json","../node_modules/styled-jsx/dist/index/index.js","../node_modules/react/package.json","../node_modules/react/index.js","../node_modules/client-only/package.json","../node_modules/react/cjs/react.production.min.js","../node_modules/client-only/index.js","../node_modules/styled-jsx/style.js","../node_modules/next/dist/compiled/next-server/server.runtime.prod.js","../node_modules/next/package.json","../node_modules/next/dist/server/body-streams.js","../node_modules/next/dist/lib/picocolors.js","../node_modules/next/dist/shared/lib/constants.js","../node_modules/next/dist/server/web/utils.js","../node_modules/next/dist/client/components/app-router-headers.js","../node_modules/next/dist/server/lib/trace/tracer.js","../node_modules/next/dist/server/lib/trace/constants.js","../node_modules/next/dist/client/components/static-generation-async-storage.external.js","../node_modules/next/dist/shared/lib/modern-browserslist-target.js","../node_modules/next/dist/client/components/static-generation-async-storage-instance.js","../node_modules/next/dist/shared/lib/runtime-config.external.js","../node_modules/next/dist/compiled/ws/package.json","../node_modules/next/dist/compiled/lru-cache/package.json","../node_modules/next/dist/compiled/node-html-parser/package.json","../node_modules/@swc/helpers/_/_interop_require_default/package.json","../node_modules/next/dist/client/components/async-local-storage.js","../node_modules/next/dist/compiled/ws/index.js","../node_modules/next/dist/compiled/lru-cache/index.js","../node_modules/next/dist/compiled/node-html-parser/index.js","../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../node_modules/@swc/helpers/package.json","../node_modules/next/dist/compiled/jsonwebtoken/package.json","../node_modules/next/dist/shared/lib/error-source.js","../node_modules/@swc/helpers/cjs/_interop_require_default.cjs","../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../node_modules/next/dist/compiled/jsonwebtoken/index.js","../node_modules/next/dist/compiled/debug/package.json","../node_modules/next/dist/lib/semver-noop.js","../node_modules/next/dist/compiled/debug/index.js","../node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/amp-context.js","../node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/app-router-context.js","../node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/entrypoints.js","../node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/head-manager-context.js","../node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/hooks-client-context.js","../node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/html-context.js","../node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/image-config-context.js","../node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/loadable-context.js","../node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/loadable.js","../node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/router-context.js","../node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/server-inserted-html.js","../node_modules/next/dist/server/future/route-modules/app-page/module.compiled.js","../node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/amp-context.js","../node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/app-router-context.js","../node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/entrypoints.js","../node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/head-manager-context.js","../node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/hooks-client-context.js","../node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/html-context.js","../node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/image-config-context.js","../node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/loadable-context.js","../node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/loadable.js","../node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/router-context.js","../node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/server-inserted-html.js","../node_modules/next/dist/server/future/route-modules/pages/module.compiled.js"]}
|
||||
1
portal/.next/next-server.js.nft.json
Normal file
1
portal/.next/next-server.js.nft.json
Normal file
File diff suppressed because one or more lines are too long
1
portal/.next/package.json
Normal file
1
portal/.next/package.json
Normal file
@@ -0,0 +1 @@
|
||||
{"type": "commonjs"}
|
||||
1
portal/.next/prerender-manifest.js
Normal file
1
portal/.next/prerender-manifest.js
Normal file
@@ -0,0 +1 @@
|
||||
self.__PRERENDER_MANIFEST="{\"version\":4,\"routes\":{\"/\":{\"experimentalBypassFor\":[{\"type\":\"header\",\"key\":\"Next-Action\"},{\"type\":\"header\",\"key\":\"content-type\",\"value\":\"multipart/form-data;.*\"}],\"initialRevalidateSeconds\":false,\"srcRoute\":\"/\",\"dataRoute\":\"/index.rsc\"},\"/sdks\":{\"experimentalBypassFor\":[{\"type\":\"header\",\"key\":\"Next-Action\"},{\"type\":\"header\",\"key\":\"content-type\",\"value\":\"multipart/form-data;.*\"}],\"initialRevalidateSeconds\":false,\"srcRoute\":\"/sdks\",\"dataRoute\":\"/sdks.rsc\"},\"/api-explorer\":{\"experimentalBypassFor\":[{\"type\":\"header\",\"key\":\"Next-Action\"},{\"type\":\"header\",\"key\":\"content-type\",\"value\":\"multipart/form-data;.*\"}],\"initialRevalidateSeconds\":false,\"srcRoute\":\"/api-explorer\",\"dataRoute\":\"/api-explorer.rsc\"},\"/get-started\":{\"experimentalBypassFor\":[{\"type\":\"header\",\"key\":\"Next-Action\"},{\"type\":\"header\",\"key\":\"content-type\",\"value\":\"multipart/form-data;.*\"}],\"initialRevalidateSeconds\":false,\"srcRoute\":\"/get-started\",\"dataRoute\":\"/get-started.rsc\"},\"/pricing\":{\"experimentalBypassFor\":[{\"type\":\"header\",\"key\":\"Next-Action\"},{\"type\":\"header\",\"key\":\"content-type\",\"value\":\"multipart/form-data;.*\"}],\"initialRevalidateSeconds\":false,\"srcRoute\":\"/pricing\",\"dataRoute\":\"/pricing.rsc\"}},\"dynamicRoutes\":{},\"notFoundRoutes\":[],\"preview\":{\"previewModeId\":\"process.env.__NEXT_PREVIEW_MODE_ID\",\"previewModeSigningKey\":\"process.env.__NEXT_PREVIEW_MODE_SIGNING_KEY\",\"previewModeEncryptionKey\":\"process.env.__NEXT_PREVIEW_MODE_ENCRYPTION_KEY\"}}"
|
||||
1
portal/.next/prerender-manifest.json
Normal file
1
portal/.next/prerender-manifest.json
Normal file
@@ -0,0 +1 @@
|
||||
{"version":4,"routes":{"/":{"experimentalBypassFor":[{"type":"header","key":"Next-Action"},{"type":"header","key":"content-type","value":"multipart/form-data;.*"}],"initialRevalidateSeconds":false,"srcRoute":"/","dataRoute":"/index.rsc"},"/sdks":{"experimentalBypassFor":[{"type":"header","key":"Next-Action"},{"type":"header","key":"content-type","value":"multipart/form-data;.*"}],"initialRevalidateSeconds":false,"srcRoute":"/sdks","dataRoute":"/sdks.rsc"},"/api-explorer":{"experimentalBypassFor":[{"type":"header","key":"Next-Action"},{"type":"header","key":"content-type","value":"multipart/form-data;.*"}],"initialRevalidateSeconds":false,"srcRoute":"/api-explorer","dataRoute":"/api-explorer.rsc"},"/get-started":{"experimentalBypassFor":[{"type":"header","key":"Next-Action"},{"type":"header","key":"content-type","value":"multipart/form-data;.*"}],"initialRevalidateSeconds":false,"srcRoute":"/get-started","dataRoute":"/get-started.rsc"},"/pricing":{"experimentalBypassFor":[{"type":"header","key":"Next-Action"},{"type":"header","key":"content-type","value":"multipart/form-data;.*"}],"initialRevalidateSeconds":false,"srcRoute":"/pricing","dataRoute":"/pricing.rsc"}},"dynamicRoutes":{},"notFoundRoutes":[],"preview":{"previewModeId":"bf1f7e55e9abb6ddc805dee481525142","previewModeSigningKey":"1eadf3acd3e65ce2fef19e56205990675c30a55e98535cb8b011a860427c69ec","previewModeEncryptionKey":"cf3e5da15b904036d4e7e334ad47ed2e0d87d3055df23c2dde9c9a3b1ff1c78a"}}
|
||||
9
portal/.next/react-loadable-manifest.json
Normal file
9
portal/.next/react-loadable-manifest.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"components/SwaggerExplorer.tsx -> swagger-ui-react": {
|
||||
"id": 3844,
|
||||
"files": [
|
||||
"static/chunks/949fd6f9.1aa1c52add26354d.js",
|
||||
"static/chunks/361.1a4fa10338580a17.js"
|
||||
]
|
||||
}
|
||||
}
|
||||
1
portal/.next/required-server-files.json
Normal file
1
portal/.next/required-server-files.json
Normal file
@@ -0,0 +1 @@
|
||||
{"version":1,"config":{"env":{},"webpack":null,"eslint":{"ignoreDuringBuilds":false},"typescript":{"ignoreBuildErrors":false,"tsconfigPath":"tsconfig.json"},"distDir":".next","cleanDistDir":true,"assetPrefix":"","cacheMaxMemorySize":52428800,"configOrigin":"next.config.js","useFileSystemPublicRoutes":true,"generateEtags":true,"pageExtensions":["tsx","ts","jsx","js"],"poweredByHeader":true,"compress":true,"analyticsId":"","images":{"deviceSizes":[640,750,828,1080,1200,1920,2048,3840],"imageSizes":[16,32,48,64,96,128,256,384],"path":"/_next/image","loader":"default","loaderFile":"","domains":[],"disableStaticImages":false,"minimumCacheTTL":60,"formats":["image/webp"],"dangerouslyAllowSVG":false,"contentSecurityPolicy":"script-src 'none'; frame-src 'none'; sandbox;","contentDispositionType":"inline","remotePatterns":[],"unoptimized":false},"devIndicators":{"buildActivity":true,"buildActivityPosition":"bottom-right"},"onDemandEntries":{"maxInactiveAge":60000,"pagesBufferLength":5},"amp":{"canonicalBase":""},"basePath":"","sassOptions":{},"trailingSlash":false,"i18n":null,"productionBrowserSourceMaps":false,"optimizeFonts":true,"excludeDefaultMomentLocales":true,"serverRuntimeConfig":{},"publicRuntimeConfig":{},"reactProductionProfiling":false,"reactStrictMode":true,"httpAgentOptions":{"keepAlive":true},"outputFileTracing":true,"staticPageGenerationTimeout":60,"swcMinify":true,"modularizeImports":{"@mui/icons-material":{"transform":"@mui/icons-material/{{member}}"},"lodash":{"transform":"lodash/{{member}}"}},"experimental":{"prerenderEarlyExit":false,"serverMinification":true,"serverSourceMaps":false,"linkNoTouchStart":false,"caseSensitiveRoutes":false,"clientRouterFilter":true,"clientRouterFilterRedirects":false,"fetchCacheKeyPrefix":"","middlewarePrefetch":"flexible","optimisticClientCache":true,"manualClientBasePath":false,"cpus":3,"memoryBasedWorkersCount":false,"isrFlushToDisk":true,"workerThreads":false,"optimizeCss":false,"nextScriptWorkers":false,"scrollRestoration":false,"externalDir":false,"disableOptimizedLoading":false,"gzipSize":true,"craCompat":false,"esmExternals":true,"fullySpecified":false,"outputFileTracingRoot":"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal","swcTraceProfiling":false,"forceSwcTransforms":false,"largePageDataBytes":128000,"adjustFontFallbacks":false,"adjustFontFallbacksWithSizeAdjust":false,"typedRoutes":false,"instrumentationHook":false,"bundlePagesExternals":false,"parallelServerCompiles":false,"parallelServerBuildTraces":false,"ppr":false,"missingSuspenseWithCSRBailout":true,"optimizeServerReact":true,"useEarlyImport":false,"staleTimes":{"dynamic":30,"static":300},"optimizePackageImports":["lucide-react","date-fns","lodash-es","ramda","antd","react-bootstrap","ahooks","@ant-design/icons","@headlessui/react","@headlessui-float/react","@heroicons/react/20/solid","@heroicons/react/24/solid","@heroicons/react/24/outline","@visx/visx","@tremor/react","rxjs","@mui/material","@mui/icons-material","recharts","react-use","@material-ui/core","@material-ui/icons","@tabler/icons-react","mui-core","react-icons/ai","react-icons/bi","react-icons/bs","react-icons/cg","react-icons/ci","react-icons/di","react-icons/fa","react-icons/fa6","react-icons/fc","react-icons/fi","react-icons/gi","react-icons/go","react-icons/gr","react-icons/hi","react-icons/hi2","react-icons/im","react-icons/io","react-icons/io5","react-icons/lia","react-icons/lib","react-icons/lu","react-icons/md","react-icons/pi","react-icons/ri","react-icons/rx","react-icons/si","react-icons/sl","react-icons/tb","react-icons/tfi","react-icons/ti","react-icons/vsc","react-icons/wi"],"trustHostHeader":false,"isExperimentalCompile":false},"configFileName":"next.config.js"},"appDir":"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal","relativeAppDir":"","files":[".next/routes-manifest.json",".next/server/pages-manifest.json",".next/build-manifest.json",".next/prerender-manifest.json",".next/prerender-manifest.js",".next/server/middleware-manifest.json",".next/server/middleware-build-manifest.js",".next/server/middleware-react-loadable-manifest.js",".next/server/app-paths-manifest.json",".next/app-path-routes-manifest.json",".next/app-build-manifest.json",".next/server/server-reference-manifest.js",".next/server/server-reference-manifest.json",".next/react-loadable-manifest.json",".next/server/font-manifest.json",".next/BUILD_ID",".next/server/next-font-manifest.js",".next/server/next-font-manifest.json"],"ignore":["node_modules/next/dist/compiled/@ampproject/toolbox-optimizer/**/*"]}
|
||||
1
portal/.next/routes-manifest.json
Normal file
1
portal/.next/routes-manifest.json
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"pages404":true,"caseSensitive":false,"basePath":"","redirects":[{"source":"/:path+/","destination":"/:path+","internal":true,"statusCode":308,"regex":"^(?:/((?:[^/]+?)(?:/(?:[^/]+?))*))/$"}],"headers":[],"dynamicRoutes":[],"staticRoutes":[{"page":"/","regex":"^/(?:/)?$","routeKeys":{},"namedRegex":"^/(?:/)?$"},{"page":"/_not-found","regex":"^/_not\\-found(?:/)?$","routeKeys":{},"namedRegex":"^/_not\\-found(?:/)?$"},{"page":"/api-explorer","regex":"^/api\\-explorer(?:/)?$","routeKeys":{},"namedRegex":"^/api\\-explorer(?:/)?$"},{"page":"/get-started","regex":"^/get\\-started(?:/)?$","routeKeys":{},"namedRegex":"^/get\\-started(?:/)?$"},{"page":"/pricing","regex":"^/pricing(?:/)?$","routeKeys":{},"namedRegex":"^/pricing(?:/)?$"},{"page":"/sdks","regex":"^/sdks(?:/)?$","routeKeys":{},"namedRegex":"^/sdks(?:/)?$"}],"dataRoutes":[],"rsc":{"header":"RSC","varyHeader":"RSC, Next-Router-State-Tree, Next-Router-Prefetch","prefetchHeader":"Next-Router-Prefetch","didPostponeHeader":"x-nextjs-postponed","contentTypeHeader":"text/x-component","suffix":".rsc","prefetchSuffix":".prefetch.rsc"},"rewrites":[]}
|
||||
8
portal/.next/server/app-paths-manifest.json
Normal file
8
portal/.next/server/app-paths-manifest.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"/_not-found/page": "app/_not-found/page.js",
|
||||
"/pricing/page": "app/pricing/page.js",
|
||||
"/page": "app/page.js",
|
||||
"/sdks/page": "app/sdks/page.js",
|
||||
"/api-explorer/page": "app/api-explorer/page.js",
|
||||
"/get-started/page": "app/get-started/page.js"
|
||||
}
|
||||
1
portal/.next/server/app/_not-found.html
Normal file
1
portal/.next/server/app/_not-found.html
Normal file
File diff suppressed because one or more lines are too long
6
portal/.next/server/app/_not-found.meta
Normal file
6
portal/.next/server/app/_not-found.meta
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"status": 404,
|
||||
"headers": {
|
||||
"x-next-cache-tags": "_N_T_/layout,_N_T_/_not-found/layout,_N_T_/_not-found/page,_N_T_/_not-found"
|
||||
}
|
||||
}
|
||||
10
portal/.next/server/app/_not-found.rsc
Normal file
10
portal/.next/server/app/_not-found.rsc
Normal file
@@ -0,0 +1,10 @@
|
||||
2:I[39275,[],""]
|
||||
3:I[61343,[],""]
|
||||
4:I[56390,["231","static/chunks/231-711da40718c2508c.js","185","static/chunks/app/layout-db75ca053106eec0.js"],"Nav"]
|
||||
5:{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"}
|
||||
6:{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"}
|
||||
7:{"display":"inline-block"}
|
||||
8:{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0}
|
||||
0:["h5w-rj60Vif8vQbejZCYz",[[["",{"children":["/_not-found",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",{"children":["/_not-found",{"children":["__PAGE__",{},[["$L1",[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]]],null],null]},["$","$L2",null,{"parallelRouterKey":"children","segmentPath":["children","/_not-found","children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined","styles":null}],null]},[["$","html",null,{"lang":"en","children":["$","body",null,{"className":"min-h-screen bg-slate-50 text-slate-900 antialiased","children":[["$","$L4",null,{}],["$","main",null,{"children":["$","$L2",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$5","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$6","children":"404"}],["$","div",null,{"style":"$7","children":["$","h2",null,{"style":"$8","children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[],"styles":null}]}],["$","footer",null,{"className":"border-t border-slate-200 py-8 text-center text-sm text-slate-500","children":["$","p",null,{"children":["© ",2026," SentryAgent.ai — All rights reserved."]}]}]]}]}],null],null],[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/0d1e1814871c1ae4.css","precedence":"next","crossOrigin":"$undefined"}]],[["$","meta",null,{"name":"robots","content":"noindex"}],"$L9"]]]]]
|
||||
9:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"SentryAgent.ai Developer Portal"}],["$","meta","3",{"name":"description","content":"Identity and access management for AI agents. Register, authenticate, and secure your agents with SentryAgent AgentIdP."}]]
|
||||
1:null
|
||||
1
portal/.next/server/app/_not-found/page.js
Normal file
1
portal/.next/server/app/_not-found/page.js
Normal file
File diff suppressed because one or more lines are too long
1
portal/.next/server/app/_not-found/page.js.nft.json
Normal file
1
portal/.next/server/app/_not-found/page.js.nft.json
Normal file
@@ -0,0 +1 @@
|
||||
{"version":1,"files":["../../../../node_modules/next/dist/client/components/action-async-storage-instance.js","../../../../node_modules/next/dist/client/components/action-async-storage.external.js","../../../../node_modules/next/dist/client/components/async-local-storage.js","../../../../node_modules/next/dist/client/components/request-async-storage-instance.js","../../../../node_modules/next/dist/client/components/request-async-storage.external.js","../../../../node_modules/next/dist/client/components/static-generation-async-storage-instance.js","../../../../node_modules/next/dist/client/components/static-generation-async-storage.external.js","../../../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../../node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js","../../../../node_modules/next/dist/server/lib/trace/constants.js","../../../../node_modules/next/dist/server/lib/trace/tracer.js","../../../../node_modules/next/package.json","../../../package.json","../../chunks/24.js","../../webpack-runtime.js","page_client-reference-manifest.js"]}
|
||||
@@ -0,0 +1 @@
|
||||
globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/_not-found/page"]={"moduleLoading":{"prefix":"/_next/","crossOrigin":null},"ssrModuleMapping":{"231":{"*":{"id":"9404","name":"*","chunks":[],"async":false}},"16585":{"*":{"id":"1868","name":"*","chunks":[],"async":false}},"39275":{"*":{"id":"9671","name":"*","chunks":[],"async":false}},"49947":{"*":{"id":"3512","name":"*","chunks":[],"async":false}},"56390":{"*":{"id":"4174","name":"*","chunks":[],"async":false}},"61343":{"*":{"id":"4759","name":"*","chunks":[],"async":false}},"63933":{"*":{"id":"6435","name":"*","chunks":[],"async":false}},"66513":{"*":{"id":"6114","name":"*","chunks":[],"async":false}},"76130":{"*":{"id":"9727","name":"*","chunks":[],"async":false}},"95751":{"*":{"id":"2994","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/app-router.js":{"id":95751,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/app-router.js":{"id":95751,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/client-page.js":{"id":66513,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/client-page.js":{"id":66513,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/error-boundary.js":{"id":76130,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/error-boundary.js":{"id":76130,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/layout-router.js":{"id":39275,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/layout-router.js":{"id":39275,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/not-found-boundary.js":{"id":16585,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/not-found-boundary.js":{"id":16585,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/render-from-template-context.js":{"id":61343,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":61343,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/globals.css":{"id":58877,"name":"*","chunks":["231","static/chunks/231-711da40718c2508c.js","185","static/chunks/app/layout-db75ca053106eec0.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/components/Nav.tsx":{"id":56390,"name":"*","chunks":["231","static/chunks/231-711da40718c2508c.js","185","static/chunks/app/layout-db75ca053106eec0.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/link.js":{"id":231,"name":"*","chunks":["231","static/chunks/231-711da40718c2508c.js","931","static/chunks/app/page-d3d46720ba5b5546.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/link.js":{"id":231,"name":"*","chunks":["231","static/chunks/231-711da40718c2508c.js","931","static/chunks/app/page-d3d46720ba5b5546.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/components/SwaggerExplorer.tsx":{"id":49947,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/components/GetStartedWizard.tsx":{"id":63933,"name":"*","chunks":[],"async":false}},"entryCSSFiles":{"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/":[],"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/layout":["static/css/0d1e1814871c1ae4.css"],"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/page":[],"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/_not-found/page":[]}}
|
||||
1
portal/.next/server/app/api-explorer.html
Normal file
1
portal/.next/server/app/api-explorer.html
Normal file
File diff suppressed because one or more lines are too long
5
portal/.next/server/app/api-explorer.meta
Normal file
5
portal/.next/server/app/api-explorer.meta
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"headers": {
|
||||
"x-next-cache-tags": "_N_T_/layout,_N_T_/api-explorer/layout,_N_T_/api-explorer/page,_N_T_/api-explorer"
|
||||
}
|
||||
}
|
||||
7
portal/.next/server/app/api-explorer.rsc
Normal file
7
portal/.next/server/app/api-explorer.rsc
Normal file
@@ -0,0 +1,7 @@
|
||||
2:I[49947,["734","static/chunks/app/api-explorer/page-7cae2529092c7dfa.js"],"SwaggerExplorer"]
|
||||
3:I[39275,[],""]
|
||||
4:I[61343,[],""]
|
||||
5:I[56390,["231","static/chunks/231-711da40718c2508c.js","185","static/chunks/app/layout-db75ca053106eec0.js"],"Nav"]
|
||||
0:["h5w-rj60Vif8vQbejZCYz",[[["",{"children":["api-explorer",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",{"children":["api-explorer",{"children":["__PAGE__",{},[["$L1",["$","div",null,{"className":"px-4 py-8","children":["$","div",null,{"className":"mx-auto max-w-7xl","children":[["$","div",null,{"className":"mb-8","children":[["$","h1",null,{"className":"text-3xl font-extrabold text-slate-900","children":"API Explorer"}],["$","p",null,{"className":"mt-2 text-slate-600","children":"Explore, authenticate, and test every AgentIdP endpoint directly from your browser. Use the Authorize button to set your Bearer token."}],["$","p",null,{"className":"mt-1 text-sm text-slate-400","children":["Spec loaded from:"," ",["$","code",null,{"className":"rounded bg-slate-100 px-1.5 py-0.5 text-xs","children":["http://localhost:3000","/openapi.json"]}]]}]]}],["$","$L2",null,{"apiUrl":"http://localhost:3000"}]]}]}]],null],null]},["$","$L3",null,{"parallelRouterKey":"children","segmentPath":["children","api-explorer","children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined","styles":[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/a4c02a9871b5dc42.css","precedence":"next","crossOrigin":"$undefined"}]]}],null]},[["$","html",null,{"lang":"en","children":["$","body",null,{"className":"min-h-screen bg-slate-50 text-slate-900 antialiased","children":[["$","$L5",null,{}],["$","main",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[],"styles":null}]}],["$","footer",null,{"className":"border-t border-slate-200 py-8 text-center text-sm text-slate-500","children":["$","p",null,{"children":["© ",2026," SentryAgent.ai — All rights reserved."]}]}]]}]}],null],null],[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/0d1e1814871c1ae4.css","precedence":"next","crossOrigin":"$undefined"}]],[null,"$L6"]]]]]
|
||||
6:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"API Explorer — SentryAgent AgentIdP"}],["$","meta","3",{"name":"description","content":"Interactively explore and test the SentryAgent AgentIdP REST API."}]]
|
||||
1:null
|
||||
1
portal/.next/server/app/api-explorer/page.js
Normal file
1
portal/.next/server/app/api-explorer/page.js
Normal file
File diff suppressed because one or more lines are too long
1
portal/.next/server/app/api-explorer/page.js.nft.json
Normal file
1
portal/.next/server/app/api-explorer/page.js.nft.json
Normal file
@@ -0,0 +1 @@
|
||||
{"version":1,"files":["../../../../node_modules/next/dist/client/components/action-async-storage-instance.js","../../../../node_modules/next/dist/client/components/action-async-storage.external.js","../../../../node_modules/next/dist/client/components/async-local-storage.js","../../../../node_modules/next/dist/client/components/request-async-storage-instance.js","../../../../node_modules/next/dist/client/components/request-async-storage.external.js","../../../../node_modules/next/dist/client/components/static-generation-async-storage-instance.js","../../../../node_modules/next/dist/client/components/static-generation-async-storage.external.js","../../../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../../node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js","../../../../node_modules/next/dist/server/lib/trace/constants.js","../../../../node_modules/next/dist/server/lib/trace/tracer.js","../../../../node_modules/next/package.json","../../../../package.json","../../../package.json","../../chunks/24.js","../../webpack-runtime.js","page_client-reference-manifest.js"]}
|
||||
@@ -0,0 +1 @@
|
||||
globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/api-explorer/page"]={"moduleLoading":{"prefix":"/_next/","crossOrigin":null},"ssrModuleMapping":{"231":{"*":{"id":"9404","name":"*","chunks":[],"async":false}},"16585":{"*":{"id":"1868","name":"*","chunks":[],"async":false}},"39275":{"*":{"id":"9671","name":"*","chunks":[],"async":false}},"49947":{"*":{"id":"3512","name":"*","chunks":[],"async":false}},"56390":{"*":{"id":"4174","name":"*","chunks":[],"async":false}},"61343":{"*":{"id":"4759","name":"*","chunks":[],"async":false}},"63933":{"*":{"id":"6435","name":"*","chunks":[],"async":false}},"66513":{"*":{"id":"6114","name":"*","chunks":[],"async":false}},"76130":{"*":{"id":"9727","name":"*","chunks":[],"async":false}},"95751":{"*":{"id":"2994","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/app-router.js":{"id":95751,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/app-router.js":{"id":95751,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/client-page.js":{"id":66513,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/client-page.js":{"id":66513,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/error-boundary.js":{"id":76130,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/error-boundary.js":{"id":76130,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/layout-router.js":{"id":39275,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/layout-router.js":{"id":39275,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/not-found-boundary.js":{"id":16585,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/not-found-boundary.js":{"id":16585,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/render-from-template-context.js":{"id":61343,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":61343,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/globals.css":{"id":58877,"name":"*","chunks":["231","static/chunks/231-711da40718c2508c.js","185","static/chunks/app/layout-db75ca053106eec0.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/components/Nav.tsx":{"id":56390,"name":"*","chunks":["231","static/chunks/231-711da40718c2508c.js","185","static/chunks/app/layout-db75ca053106eec0.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/link.js":{"id":231,"name":"*","chunks":["231","static/chunks/231-711da40718c2508c.js","931","static/chunks/app/page-d3d46720ba5b5546.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/link.js":{"id":231,"name":"*","chunks":["231","static/chunks/231-711da40718c2508c.js","931","static/chunks/app/page-d3d46720ba5b5546.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/components/SwaggerExplorer.tsx":{"id":49947,"name":"*","chunks":["734","static/chunks/app/api-explorer/page-7cae2529092c7dfa.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/components/GetStartedWizard.tsx":{"id":63933,"name":"*","chunks":[],"async":false}},"entryCSSFiles":{"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/":[],"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/layout":["static/css/0d1e1814871c1ae4.css"],"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/page":[],"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/api-explorer/page":["static/css/a4c02a9871b5dc42.css"]}}
|
||||
1
portal/.next/server/app/get-started.html
Normal file
1
portal/.next/server/app/get-started.html
Normal file
File diff suppressed because one or more lines are too long
5
portal/.next/server/app/get-started.meta
Normal file
5
portal/.next/server/app/get-started.meta
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"headers": {
|
||||
"x-next-cache-tags": "_N_T_/layout,_N_T_/get-started/layout,_N_T_/get-started/page,_N_T_/get-started"
|
||||
}
|
||||
}
|
||||
7
portal/.next/server/app/get-started.rsc
Normal file
7
portal/.next/server/app/get-started.rsc
Normal file
@@ -0,0 +1,7 @@
|
||||
2:I[63933,["719","static/chunks/app/get-started/page-31e1ee0acda82a62.js"],"GetStartedWizard"]
|
||||
3:I[39275,[],""]
|
||||
4:I[61343,[],""]
|
||||
5:I[56390,["231","static/chunks/231-711da40718c2508c.js","185","static/chunks/app/layout-db75ca053106eec0.js"],"Nav"]
|
||||
0:["h5w-rj60Vif8vQbejZCYz",[[["",{"children":["get-started",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",{"children":["get-started",{"children":["__PAGE__",{},[["$L1",["$","div",null,{"className":"px-6 py-16","children":[["$","div",null,{"className":"mb-12 text-center","children":[["$","h1",null,{"className":"mb-4 text-4xl font-extrabold text-slate-900","children":"Get Started"}],["$","p",null,{"className":"text-xl text-slate-600","children":"Register your first agent and get production-ready credentials in minutes."}]]}],["$","$L2",null,{"apiUrl":"http://localhost:3000"}]]}]],null],null]},["$","$L3",null,{"parallelRouterKey":"children","segmentPath":["children","get-started","children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined","styles":null}],null]},[["$","html",null,{"lang":"en","children":["$","body",null,{"className":"min-h-screen bg-slate-50 text-slate-900 antialiased","children":[["$","$L5",null,{}],["$","main",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[],"styles":null}]}],["$","footer",null,{"className":"border-t border-slate-200 py-8 text-center text-sm text-slate-500","children":["$","p",null,{"children":["© ",2026," SentryAgent.ai — All rights reserved."]}]}]]}]}],null],null],[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/0d1e1814871c1ae4.css","precedence":"next","crossOrigin":"$undefined"}]],[null,"$L6"]]]]]
|
||||
6:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Get Started — SentryAgent AgentIdP"}],["$","meta","3",{"name":"description","content":"Set up your first AI agent with SentryAgent AgentIdP in four steps."}]]
|
||||
1:null
|
||||
38
portal/.next/server/app/get-started/page.js
Normal file
38
portal/.next/server/app/get-started/page.js
Normal file
File diff suppressed because one or more lines are too long
1
portal/.next/server/app/get-started/page.js.nft.json
Normal file
1
portal/.next/server/app/get-started/page.js.nft.json
Normal file
@@ -0,0 +1 @@
|
||||
{"version":1,"files":["../../../../node_modules/next/dist/client/components/action-async-storage-instance.js","../../../../node_modules/next/dist/client/components/action-async-storage.external.js","../../../../node_modules/next/dist/client/components/async-local-storage.js","../../../../node_modules/next/dist/client/components/request-async-storage-instance.js","../../../../node_modules/next/dist/client/components/request-async-storage.external.js","../../../../node_modules/next/dist/client/components/static-generation-async-storage-instance.js","../../../../node_modules/next/dist/client/components/static-generation-async-storage.external.js","../../../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../../node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js","../../../../node_modules/next/dist/server/lib/trace/constants.js","../../../../node_modules/next/dist/server/lib/trace/tracer.js","../../../../node_modules/next/package.json","../../../../package.json","../../../package.json","../../chunks/24.js","../../webpack-runtime.js","page_client-reference-manifest.js"]}
|
||||
@@ -0,0 +1 @@
|
||||
globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/get-started/page"]={"moduleLoading":{"prefix":"/_next/","crossOrigin":null},"ssrModuleMapping":{"231":{"*":{"id":"9404","name":"*","chunks":[],"async":false}},"16585":{"*":{"id":"1868","name":"*","chunks":[],"async":false}},"39275":{"*":{"id":"9671","name":"*","chunks":[],"async":false}},"49947":{"*":{"id":"3512","name":"*","chunks":[],"async":false}},"56390":{"*":{"id":"4174","name":"*","chunks":[],"async":false}},"61343":{"*":{"id":"4759","name":"*","chunks":[],"async":false}},"63933":{"*":{"id":"6435","name":"*","chunks":[],"async":false}},"66513":{"*":{"id":"6114","name":"*","chunks":[],"async":false}},"76130":{"*":{"id":"9727","name":"*","chunks":[],"async":false}},"95751":{"*":{"id":"2994","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/app-router.js":{"id":95751,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/app-router.js":{"id":95751,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/client-page.js":{"id":66513,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/client-page.js":{"id":66513,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/error-boundary.js":{"id":76130,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/error-boundary.js":{"id":76130,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/layout-router.js":{"id":39275,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/layout-router.js":{"id":39275,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/not-found-boundary.js":{"id":16585,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/not-found-boundary.js":{"id":16585,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/render-from-template-context.js":{"id":61343,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":61343,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/globals.css":{"id":58877,"name":"*","chunks":["231","static/chunks/231-711da40718c2508c.js","185","static/chunks/app/layout-db75ca053106eec0.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/components/Nav.tsx":{"id":56390,"name":"*","chunks":["231","static/chunks/231-711da40718c2508c.js","185","static/chunks/app/layout-db75ca053106eec0.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/link.js":{"id":231,"name":"*","chunks":["231","static/chunks/231-711da40718c2508c.js","931","static/chunks/app/page-d3d46720ba5b5546.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/link.js":{"id":231,"name":"*","chunks":["231","static/chunks/231-711da40718c2508c.js","931","static/chunks/app/page-d3d46720ba5b5546.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/components/SwaggerExplorer.tsx":{"id":49947,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/components/GetStartedWizard.tsx":{"id":63933,"name":"*","chunks":["719","static/chunks/app/get-started/page-31e1ee0acda82a62.js"],"async":false}},"entryCSSFiles":{"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/":[],"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/layout":["static/css/0d1e1814871c1ae4.css"],"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/page":[],"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/get-started/page":[]}}
|
||||
1
portal/.next/server/app/index.html
Normal file
1
portal/.next/server/app/index.html
Normal file
File diff suppressed because one or more lines are too long
5
portal/.next/server/app/index.meta
Normal file
5
portal/.next/server/app/index.meta
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"headers": {
|
||||
"x-next-cache-tags": "_N_T_/layout,_N_T_/page,_N_T_/"
|
||||
}
|
||||
}
|
||||
7
portal/.next/server/app/index.rsc
Normal file
7
portal/.next/server/app/index.rsc
Normal file
File diff suppressed because one or more lines are too long
1
portal/.next/server/app/page.js
Normal file
1
portal/.next/server/app/page.js
Normal file
File diff suppressed because one or more lines are too long
1
portal/.next/server/app/page.js.nft.json
Normal file
1
portal/.next/server/app/page.js.nft.json
Normal file
@@ -0,0 +1 @@
|
||||
{"version":1,"files":["../../../node_modules/next/dist/client/components/action-async-storage-instance.js","../../../node_modules/next/dist/client/components/action-async-storage.external.js","../../../node_modules/next/dist/client/components/async-local-storage.js","../../../node_modules/next/dist/client/components/request-async-storage-instance.js","../../../node_modules/next/dist/client/components/request-async-storage.external.js","../../../node_modules/next/dist/client/components/static-generation-async-storage-instance.js","../../../node_modules/next/dist/client/components/static-generation-async-storage.external.js","../../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js","../../../node_modules/next/dist/server/lib/trace/constants.js","../../../node_modules/next/dist/server/lib/trace/tracer.js","../../../node_modules/next/package.json","../../../package.json","../../package.json","../chunks/24.js","../webpack-runtime.js","page_client-reference-manifest.js"]}
|
||||
@@ -0,0 +1 @@
|
||||
globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/page"]={"moduleLoading":{"prefix":"/_next/","crossOrigin":null},"ssrModuleMapping":{"231":{"*":{"id":"9404","name":"*","chunks":[],"async":false}},"16585":{"*":{"id":"1868","name":"*","chunks":[],"async":false}},"39275":{"*":{"id":"9671","name":"*","chunks":[],"async":false}},"49947":{"*":{"id":"3512","name":"*","chunks":[],"async":false}},"56390":{"*":{"id":"4174","name":"*","chunks":[],"async":false}},"61343":{"*":{"id":"4759","name":"*","chunks":[],"async":false}},"63933":{"*":{"id":"6435","name":"*","chunks":[],"async":false}},"66513":{"*":{"id":"6114","name":"*","chunks":[],"async":false}},"76130":{"*":{"id":"9727","name":"*","chunks":[],"async":false}},"95751":{"*":{"id":"2994","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/app-router.js":{"id":95751,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/app-router.js":{"id":95751,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/client-page.js":{"id":66513,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/client-page.js":{"id":66513,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/error-boundary.js":{"id":76130,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/error-boundary.js":{"id":76130,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/layout-router.js":{"id":39275,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/layout-router.js":{"id":39275,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/not-found-boundary.js":{"id":16585,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/not-found-boundary.js":{"id":16585,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/render-from-template-context.js":{"id":61343,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":61343,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/globals.css":{"id":58877,"name":"*","chunks":["231","static/chunks/231-711da40718c2508c.js","185","static/chunks/app/layout-db75ca053106eec0.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/components/Nav.tsx":{"id":56390,"name":"*","chunks":["231","static/chunks/231-711da40718c2508c.js","185","static/chunks/app/layout-db75ca053106eec0.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/link.js":{"id":231,"name":"*","chunks":["231","static/chunks/231-711da40718c2508c.js","931","static/chunks/app/page-d3d46720ba5b5546.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/link.js":{"id":231,"name":"*","chunks":["231","static/chunks/231-711da40718c2508c.js","931","static/chunks/app/page-d3d46720ba5b5546.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/components/SwaggerExplorer.tsx":{"id":49947,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/components/GetStartedWizard.tsx":{"id":63933,"name":"*","chunks":[],"async":false}},"entryCSSFiles":{"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/":[],"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/layout":["static/css/0d1e1814871c1ae4.css"],"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/page":[]}}
|
||||
1
portal/.next/server/app/pricing.html
Normal file
1
portal/.next/server/app/pricing.html
Normal file
File diff suppressed because one or more lines are too long
5
portal/.next/server/app/pricing.meta
Normal file
5
portal/.next/server/app/pricing.meta
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"headers": {
|
||||
"x-next-cache-tags": "_N_T_/layout,_N_T_/pricing/layout,_N_T_/pricing/page,_N_T_/pricing"
|
||||
}
|
||||
}
|
||||
7
portal/.next/server/app/pricing.rsc
Normal file
7
portal/.next/server/app/pricing.rsc
Normal file
File diff suppressed because one or more lines are too long
1
portal/.next/server/app/pricing/page.js
Normal file
1
portal/.next/server/app/pricing/page.js
Normal file
File diff suppressed because one or more lines are too long
1
portal/.next/server/app/pricing/page.js.nft.json
Normal file
1
portal/.next/server/app/pricing/page.js.nft.json
Normal file
@@ -0,0 +1 @@
|
||||
{"version":1,"files":["../../../../node_modules/next/dist/client/components/action-async-storage-instance.js","../../../../node_modules/next/dist/client/components/action-async-storage.external.js","../../../../node_modules/next/dist/client/components/async-local-storage.js","../../../../node_modules/next/dist/client/components/request-async-storage-instance.js","../../../../node_modules/next/dist/client/components/request-async-storage.external.js","../../../../node_modules/next/dist/client/components/static-generation-async-storage-instance.js","../../../../node_modules/next/dist/client/components/static-generation-async-storage.external.js","../../../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../../node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js","../../../../node_modules/next/dist/server/lib/trace/constants.js","../../../../node_modules/next/dist/server/lib/trace/tracer.js","../../../../node_modules/next/package.json","../../../../package.json","../../../package.json","../../chunks/24.js","../../webpack-runtime.js","page_client-reference-manifest.js"]}
|
||||
@@ -0,0 +1 @@
|
||||
globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/pricing/page"]={"moduleLoading":{"prefix":"/_next/","crossOrigin":null},"ssrModuleMapping":{"231":{"*":{"id":"9404","name":"*","chunks":[],"async":false}},"16585":{"*":{"id":"1868","name":"*","chunks":[],"async":false}},"39275":{"*":{"id":"9671","name":"*","chunks":[],"async":false}},"49947":{"*":{"id":"3512","name":"*","chunks":[],"async":false}},"56390":{"*":{"id":"4174","name":"*","chunks":[],"async":false}},"61343":{"*":{"id":"4759","name":"*","chunks":[],"async":false}},"63933":{"*":{"id":"6435","name":"*","chunks":[],"async":false}},"66513":{"*":{"id":"6114","name":"*","chunks":[],"async":false}},"76130":{"*":{"id":"9727","name":"*","chunks":[],"async":false}},"95751":{"*":{"id":"2994","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/app-router.js":{"id":95751,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/app-router.js":{"id":95751,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/client-page.js":{"id":66513,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/client-page.js":{"id":66513,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/error-boundary.js":{"id":76130,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/error-boundary.js":{"id":76130,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/layout-router.js":{"id":39275,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/layout-router.js":{"id":39275,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/not-found-boundary.js":{"id":16585,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/not-found-boundary.js":{"id":16585,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/render-from-template-context.js":{"id":61343,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":61343,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/globals.css":{"id":58877,"name":"*","chunks":["231","static/chunks/231-711da40718c2508c.js","185","static/chunks/app/layout-db75ca053106eec0.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/components/Nav.tsx":{"id":56390,"name":"*","chunks":["231","static/chunks/231-711da40718c2508c.js","185","static/chunks/app/layout-db75ca053106eec0.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/link.js":{"id":231,"name":"*","chunks":["231","static/chunks/231-711da40718c2508c.js","979","static/chunks/app/pricing/page-9b42634a6f0d2af7.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/link.js":{"id":231,"name":"*","chunks":["231","static/chunks/231-711da40718c2508c.js","979","static/chunks/app/pricing/page-9b42634a6f0d2af7.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/components/SwaggerExplorer.tsx":{"id":49947,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/components/GetStartedWizard.tsx":{"id":63933,"name":"*","chunks":[],"async":false}},"entryCSSFiles":{"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/":[],"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/layout":["static/css/0d1e1814871c1ae4.css"],"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/page":[],"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/pricing/page":[]}}
|
||||
86
portal/.next/server/app/sdks.html
Normal file
86
portal/.next/server/app/sdks.html
Normal file
File diff suppressed because one or more lines are too long
5
portal/.next/server/app/sdks.meta
Normal file
5
portal/.next/server/app/sdks.meta
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"headers": {
|
||||
"x-next-cache-tags": "_N_T_/layout,_N_T_/sdks/layout,_N_T_/sdks/page,_N_T_/sdks"
|
||||
}
|
||||
}
|
||||
6
portal/.next/server/app/sdks.rsc
Normal file
6
portal/.next/server/app/sdks.rsc
Normal file
File diff suppressed because one or more lines are too long
86
portal/.next/server/app/sdks/page.js
Normal file
86
portal/.next/server/app/sdks/page.js
Normal file
@@ -0,0 +1,86 @@
|
||||
(()=>{var e={};e.id=146,e.ids=[146],e.modules={7849:e=>{"use strict";e.exports=require("next/dist/client/components/action-async-storage.external")},2934:e=>{"use strict";e.exports=require("next/dist/client/components/action-async-storage.external.js")},5403:e=>{"use strict";e.exports=require("next/dist/client/components/request-async-storage.external")},4580:e=>{"use strict";e.exports=require("next/dist/client/components/request-async-storage.external.js")},4749:e=>{"use strict";e.exports=require("next/dist/client/components/static-generation-async-storage.external")},5869:e=>{"use strict";e.exports=require("next/dist/client/components/static-generation-async-storage.external.js")},399:e=>{"use strict";e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},2250:(e,t,n)=>{"use strict";n.r(t),n.d(t,{GlobalError:()=>i.a,__next_app__:()=>p,originalPathname:()=>g,pages:()=>c,routeModule:()=>m,tree:()=>d}),n(9495),n(7341),n(5866);var s=n(3191),a=n(8716),r=n(7922),i=n.n(r),o=n(5231),l={};for(let e in o)0>["default","tree","pages","GlobalError","originalPathname","__next_app__","routeModule"].indexOf(e)&&(l[e]=()=>o[e]);n.d(t,l);let d=["",{children:["sdks",{children:["__PAGE__",{},{page:[()=>Promise.resolve().then(n.bind(n,9495)),"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/sdks/page.tsx"]}]},{}]},{layout:[()=>Promise.resolve().then(n.bind(n,7341)),"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/layout.tsx"],"not-found":[()=>Promise.resolve().then(n.t.bind(n,5866,23)),"next/dist/client/components/not-found-error"]}],c=["/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/sdks/page.tsx"],g="/sdks/page",p={require:n,loadChunk:()=>Promise.resolve()},m=new s.AppPageRouteModule({definition:{kind:a.x.APP_PAGE,page:"/sdks/page",pathname:"/sdks",bundlePath:"",filename:"",appPaths:[]},userland:{loaderTree:d}})},5642:(e,t,n)=>{Promise.resolve().then(n.bind(n,4174))},6643:(e,t,n)=>{Promise.resolve().then(n.t.bind(n,2994,23)),Promise.resolve().then(n.t.bind(n,6114,23)),Promise.resolve().then(n.t.bind(n,9727,23)),Promise.resolve().then(n.t.bind(n,9671,23)),Promise.resolve().then(n.t.bind(n,1868,23)),Promise.resolve().then(n.t.bind(n,4759,23))},5303:()=>{},4174:(e,t,n)=>{"use strict";n.d(t,{Nav:()=>o});var s=n(326);n(7577);var a=n(434),r=n(5047);let i=[{href:"/",label:"Home"},{href:"/api-explorer",label:"API Explorer"},{href:"/get-started",label:"Get Started"},{href:"/sdks",label:"SDKs"},{href:"/pricing",label:"Pricing"}];function o(){let e=(0,r.usePathname)();return s.jsx("header",{className:"sticky top-0 z-50 border-b border-slate-200 bg-white/90 backdrop-blur",children:(0,s.jsxs)("nav",{className:"mx-auto flex max-w-7xl items-center justify-between px-6 py-4",children:[(0,s.jsxs)(a.default,{href:"/",className:"flex items-center gap-2",children:[s.jsx("span",{className:"text-xl font-bold text-brand-600",children:"SentryAgent"}),s.jsx("span",{className:"rounded bg-brand-100 px-1.5 py-0.5 text-xs font-semibold text-brand-700",children:"AgentIdP"})]}),s.jsx("ul",{className:"flex items-center gap-1",children:i.map(({href:t,label:n})=>{let r="/"===t?"/"===e:e.startsWith(t);return s.jsx("li",{children:s.jsx(a.default,{href:t,className:["rounded-md px-3 py-2 text-sm font-medium transition-colors",r?"bg-brand-100 text-brand-700":"text-slate-600 hover:bg-slate-100 hover:text-slate-900"].join(" "),children:n})},t)})}),s.jsx(a.default,{href:"/get-started",className:"rounded-lg bg-brand-600 px-4 py-2 text-sm font-semibold text-white shadow-sm transition-colors hover:bg-brand-700",children:"Get Started Free"})]})})}},7341:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>c,metadata:()=>d});var s=n(9510);n(7272);var a=n(8570);let r=(0,a.createProxy)(String.raw`/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/components/Nav.tsx`),{__esModule:i,$$typeof:o}=r;r.default;let l=(0,a.createProxy)(String.raw`/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/components/Nav.tsx#Nav`),d={title:"SentryAgent.ai Developer Portal",description:"Identity and access management for AI agents. Register, authenticate, and secure your agents with SentryAgent AgentIdP."};function c({children:e}){return s.jsx("html",{lang:"en",children:(0,s.jsxs)("body",{className:"min-h-screen bg-slate-50 text-slate-900 antialiased",children:[s.jsx(l,{}),s.jsx("main",{children:e}),s.jsx("footer",{className:"border-t border-slate-200 py-8 text-center text-sm text-slate-500",children:(0,s.jsxs)("p",{children:["\xa9 ",new Date().getFullYear()," SentryAgent.ai — All rights reserved."]})})]})})}},9495:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var s=n(9510);let a=[{name:"Node.js SDK",language:"typescript",badge:"TypeScript",installCmd:"npm install @sentryagent/idp-sdk",codeExample:`import { AgentIdPClient } from '@sentryagent/idp-sdk';
|
||||
|
||||
const client = new AgentIdPClient({
|
||||
apiUrl: process.env.AGENTIDP_URL!,
|
||||
clientId: process.env.AGENTIDP_CLIENT_ID!,
|
||||
clientSecret: process.env.AGENTIDP_CLIENT_SECRET!,
|
||||
});
|
||||
|
||||
// Register a new agent
|
||||
const agent = await client.agents.register({
|
||||
name: 'my-ai-agent',
|
||||
description: 'Production summarisation agent',
|
||||
});
|
||||
|
||||
console.log('Agent ID:', agent.agentId);
|
||||
|
||||
// Issue an access token
|
||||
const { accessToken } = await client.tokens.issue(agent.agentId);
|
||||
console.log('Token:', accessToken);`,repoUrl:"https://github.com/sentryagent/sdk-node"},{name:"Python SDK",language:"python",badge:"Python",installCmd:"pip install sentryagent-idp",codeExample:`from sentryagent_idp import AgentIdPClient
|
||||
|
||||
client = AgentIdPClient(
|
||||
api_url=os.environ["AGENTIDP_URL"],
|
||||
client_id=os.environ["AGENTIDP_CLIENT_ID"],
|
||||
client_secret=os.environ["AGENTIDP_CLIENT_SECRET"],
|
||||
)
|
||||
|
||||
# Register a new agent
|
||||
agent = client.agents.register(
|
||||
name="my-ai-agent",
|
||||
description="Production summarisation agent",
|
||||
)
|
||||
|
||||
print("Agent ID:", agent.agent_id)
|
||||
|
||||
# Issue an access token
|
||||
token_response = client.tokens.issue(agent.agent_id)
|
||||
print("Token:", token_response.access_token)`,repoUrl:"https://github.com/sentryagent/sdk-python"},{name:"Go SDK",language:"go",badge:"Go",installCmd:"go get github.com/sentryagent/idp-sdk-go",codeExample:`import (
|
||||
"fmt"
|
||||
"os"
|
||||
idp "github.com/sentryagent/idp-sdk-go"
|
||||
)
|
||||
|
||||
client := idp.NewClient(idp.Config{
|
||||
APIURL: os.Getenv("AGENTIDP_URL"),
|
||||
ClientID: os.Getenv("AGENTIDP_CLIENT_ID"),
|
||||
ClientSecret: os.Getenv("AGENTIDP_CLIENT_SECRET"),
|
||||
})
|
||||
|
||||
// Register a new agent
|
||||
agent, err := client.Agents.Register(ctx, &idp.RegisterAgentInput{
|
||||
Name: "my-ai-agent",
|
||||
Description: "Production summarisation agent",
|
||||
})
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
fmt.Println("Agent ID:", agent.AgentID)
|
||||
|
||||
// Issue an access token
|
||||
token, err := client.Tokens.Issue(ctx, agent.AgentID)
|
||||
fmt.Println("Token:", token.AccessToken)`,repoUrl:"https://github.com/sentryagent/sdk-go"},{name:"Java SDK",language:"java",badge:"Java",installCmd:`<dependency>
|
||||
<groupId>ai.sentryagent</groupId>
|
||||
<artifactId>idp-sdk</artifactId>
|
||||
<version>1.0.0</version>
|
||||
</dependency>`,codeExample:`import ai.sentryagent.idp.AgentIdPClient;
|
||||
import ai.sentryagent.idp.model.Agent;
|
||||
import ai.sentryagent.idp.model.TokenResponse;
|
||||
|
||||
AgentIdPClient client = AgentIdPClient.builder()
|
||||
.apiUrl(System.getenv("AGENTIDP_URL"))
|
||||
.clientId(System.getenv("AGENTIDP_CLIENT_ID"))
|
||||
.clientSecret(System.getenv("AGENTIDP_CLIENT_SECRET"))
|
||||
.build();
|
||||
|
||||
// Register a new agent
|
||||
Agent agent = client.agents().register(
|
||||
RegisterAgentRequest.builder()
|
||||
.name("my-ai-agent")
|
||||
.description("Production summarisation agent")
|
||||
.build()
|
||||
);
|
||||
System.out.println("Agent ID: " + agent.getAgentId());
|
||||
|
||||
// Issue an access token
|
||||
TokenResponse token = client.tokens().issue(agent.getAgentId());
|
||||
System.out.println("Token: " + token.getAccessToken());`,repoUrl:"https://github.com/sentryagent/sdk-java"}];function r(){return s.jsx("div",{className:"px-6 py-20",children:(0,s.jsxs)("div",{className:"mx-auto max-w-5xl",children:[(0,s.jsxs)("div",{className:"mb-12 text-center",children:[s.jsx("h1",{className:"mb-4 text-4xl font-extrabold text-slate-900",children:"Official SDKs"}),s.jsx("p",{className:"text-xl text-slate-600",children:"Native libraries for your language of choice. Every SDK is type-safe, fully tested, and maintained by the SentryAgent team."})]}),s.jsx("div",{className:"space-y-10",children:a.map(e=>(0,s.jsxs)("div",{className:"rounded-2xl border border-slate-200 bg-white p-8 shadow-sm",children:[(0,s.jsxs)("div",{className:"mb-6 flex items-center justify-between",children:[(0,s.jsxs)("div",{className:"flex items-center gap-3",children:[s.jsx("h2",{className:"text-2xl font-bold text-slate-900",children:e.name}),s.jsx("span",{className:"rounded-full bg-brand-100 px-3 py-0.5 text-sm font-semibold text-brand-700",children:e.badge})]}),s.jsx("a",{href:e.repoUrl,target:"_blank",rel:"noopener noreferrer",className:"text-sm font-medium text-brand-600 hover:underline",children:"View on GitHub →"})]}),(0,s.jsxs)("div",{className:"mb-6",children:[s.jsx("p",{className:"mb-2 text-sm font-semibold uppercase tracking-wider text-slate-500",children:"Installation"}),s.jsx("pre",{className:"overflow-x-auto rounded-lg bg-slate-900 px-4 py-3 text-sm text-slate-100",children:s.jsx("code",{children:e.installCmd})})]}),(0,s.jsxs)("div",{children:[s.jsx("p",{className:"mb-2 text-sm font-semibold uppercase tracking-wider text-slate-500",children:"Quick Start"}),s.jsx("pre",{className:"overflow-x-auto rounded-lg bg-slate-900 px-4 py-4 text-sm leading-relaxed text-slate-100",children:s.jsx("code",{children:e.codeExample})})]})]},e.name))})]})})}},7272:()=>{}};var t=require("../../webpack-runtime.js");t.C(e);var n=e=>t(t.s=e),s=t.X(0,[24],()=>n(2250));module.exports=s})();
|
||||
1
portal/.next/server/app/sdks/page.js.nft.json
Normal file
1
portal/.next/server/app/sdks/page.js.nft.json
Normal file
@@ -0,0 +1 @@
|
||||
{"version":1,"files":["../../../../node_modules/next/dist/client/components/action-async-storage-instance.js","../../../../node_modules/next/dist/client/components/action-async-storage.external.js","../../../../node_modules/next/dist/client/components/async-local-storage.js","../../../../node_modules/next/dist/client/components/request-async-storage-instance.js","../../../../node_modules/next/dist/client/components/request-async-storage.external.js","../../../../node_modules/next/dist/client/components/static-generation-async-storage-instance.js","../../../../node_modules/next/dist/client/components/static-generation-async-storage.external.js","../../../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../../node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js","../../../../node_modules/next/dist/server/lib/trace/constants.js","../../../../node_modules/next/dist/server/lib/trace/tracer.js","../../../../node_modules/next/package.json","../../../../package.json","../../../package.json","../../chunks/24.js","../../webpack-runtime.js","page_client-reference-manifest.js"]}
|
||||
@@ -0,0 +1 @@
|
||||
globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/sdks/page"]={"moduleLoading":{"prefix":"/_next/","crossOrigin":null},"ssrModuleMapping":{"231":{"*":{"id":"9404","name":"*","chunks":[],"async":false}},"16585":{"*":{"id":"1868","name":"*","chunks":[],"async":false}},"39275":{"*":{"id":"9671","name":"*","chunks":[],"async":false}},"49947":{"*":{"id":"3512","name":"*","chunks":[],"async":false}},"56390":{"*":{"id":"4174","name":"*","chunks":[],"async":false}},"61343":{"*":{"id":"4759","name":"*","chunks":[],"async":false}},"63933":{"*":{"id":"6435","name":"*","chunks":[],"async":false}},"66513":{"*":{"id":"6114","name":"*","chunks":[],"async":false}},"76130":{"*":{"id":"9727","name":"*","chunks":[],"async":false}},"95751":{"*":{"id":"2994","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/app-router.js":{"id":95751,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/app-router.js":{"id":95751,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/client-page.js":{"id":66513,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/client-page.js":{"id":66513,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/error-boundary.js":{"id":76130,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/error-boundary.js":{"id":76130,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/layout-router.js":{"id":39275,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/layout-router.js":{"id":39275,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/not-found-boundary.js":{"id":16585,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/not-found-boundary.js":{"id":16585,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/render-from-template-context.js":{"id":61343,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":61343,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/globals.css":{"id":58877,"name":"*","chunks":["231","static/chunks/231-711da40718c2508c.js","185","static/chunks/app/layout-db75ca053106eec0.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/components/Nav.tsx":{"id":56390,"name":"*","chunks":["231","static/chunks/231-711da40718c2508c.js","185","static/chunks/app/layout-db75ca053106eec0.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/link.js":{"id":231,"name":"*","chunks":["231","static/chunks/231-711da40718c2508c.js","931","static/chunks/app/page-d3d46720ba5b5546.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/link.js":{"id":231,"name":"*","chunks":["231","static/chunks/231-711da40718c2508c.js","931","static/chunks/app/page-d3d46720ba5b5546.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/components/SwaggerExplorer.tsx":{"id":49947,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/components/GetStartedWizard.tsx":{"id":63933,"name":"*","chunks":[],"async":false}},"entryCSSFiles":{"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/":[],"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/layout":["static/css/0d1e1814871c1ae4.css"],"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/page":[],"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/sdks/page":[]}}
|
||||
3
portal/.next/server/chunks/24.js
Normal file
3
portal/.next/server/chunks/24.js
Normal file
File diff suppressed because one or more lines are too long
6
portal/.next/server/chunks/682.js
Normal file
6
portal/.next/server/chunks/682.js
Normal file
File diff suppressed because one or more lines are too long
1
portal/.next/server/chunks/font-manifest.json
Normal file
1
portal/.next/server/chunks/font-manifest.json
Normal file
@@ -0,0 +1 @@
|
||||
[]
|
||||
1
portal/.next/server/font-manifest.json
Normal file
1
portal/.next/server/font-manifest.json
Normal file
@@ -0,0 +1 @@
|
||||
[]
|
||||
1
portal/.next/server/functions-config-manifest.json
Normal file
1
portal/.next/server/functions-config-manifest.json
Normal file
@@ -0,0 +1 @@
|
||||
{"version":1,"functions":{"/api-explorer":{},"/get-started":{}}}
|
||||
@@ -0,0 +1 @@
|
||||
self.__INTERCEPTION_ROUTE_REWRITE_MANIFEST="[]";
|
||||
1
portal/.next/server/middleware-build-manifest.js
Normal file
1
portal/.next/server/middleware-build-manifest.js
Normal file
@@ -0,0 +1 @@
|
||||
self.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-78c92fac7aa8fdd8.js"],devFiles:[],ampDevFiles:[],lowPriorityFiles:["static/h5w-rj60Vif8vQbejZCYz/_buildManifest.js","static/h5w-rj60Vif8vQbejZCYz/_ssgManifest.js"],rootMainFiles:["static/chunks/webpack-75820735529c9609.js","static/chunks/fd9d1056-0ffa74f19011bd1c.js","static/chunks/23-eed73080eee64cfd.js","static/chunks/main-app-ce894e58853e9441.js"],pages:{"/_app":["static/chunks/webpack-75820735529c9609.js","static/chunks/framework-00a8ba1a63cfdc9e.js","static/chunks/main-6e8e822f884ef93a.js","static/chunks/pages/_app-037b5d058bd9a820.js"],"/_error":["static/chunks/webpack-75820735529c9609.js","static/chunks/framework-00a8ba1a63cfdc9e.js","static/chunks/main-6e8e822f884ef93a.js","static/chunks/pages/_error-6ae619510b1539d6.js"]},ampFirstPages:[]};
|
||||
6
portal/.next/server/middleware-manifest.json
Normal file
6
portal/.next/server/middleware-manifest.json
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"version": 3,
|
||||
"middleware": {},
|
||||
"functions": {},
|
||||
"sortedMiddleware": []
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
self.__REACT_LOADABLE_MANIFEST='{"components/SwaggerExplorer.tsx -> swagger-ui-react":{"id":3844,"files":["static/chunks/949fd6f9.1aa1c52add26354d.js","static/chunks/361.1a4fa10338580a17.js"]}}';
|
||||
1
portal/.next/server/next-font-manifest.js
Normal file
1
portal/.next/server/next-font-manifest.js
Normal file
@@ -0,0 +1 @@
|
||||
self.__NEXT_FONT_MANIFEST='{"pages":{},"app":{},"appUsingSizeAdjust":false,"pagesUsingSizeAdjust":false}';
|
||||
1
portal/.next/server/next-font-manifest.json
Normal file
1
portal/.next/server/next-font-manifest.json
Normal file
@@ -0,0 +1 @@
|
||||
{"pages":{},"app":{},"appUsingSizeAdjust":false,"pagesUsingSizeAdjust":false}
|
||||
1
portal/.next/server/pages-manifest.json
Normal file
1
portal/.next/server/pages-manifest.json
Normal file
@@ -0,0 +1 @@
|
||||
{"/_app":"pages/_app.js","/_error":"pages/_error.js","/_document":"pages/_document.js","/404":"pages/404.html"}
|
||||
1
portal/.next/server/pages/404.html
Normal file
1
portal/.next/server/pages/404.html
Normal file
File diff suppressed because one or more lines are too long
1
portal/.next/server/pages/500.html
Normal file
1
portal/.next/server/pages/500.html
Normal file
@@ -0,0 +1 @@
|
||||
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><title>500: Internal Server Error</title><meta name="next-head-count" content="3"/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/_next/static/chunks/webpack-75820735529c9609.js" defer=""></script><script src="/_next/static/chunks/framework-00a8ba1a63cfdc9e.js" defer=""></script><script src="/_next/static/chunks/main-6e8e822f884ef93a.js" defer=""></script><script src="/_next/static/chunks/pages/_app-037b5d058bd9a820.js" defer=""></script><script src="/_next/static/chunks/pages/_error-6ae619510b1539d6.js" defer=""></script><script src="/_next/static/h5w-rj60Vif8vQbejZCYz/_buildManifest.js" defer=""></script><script src="/_next/static/h5w-rj60Vif8vQbejZCYz/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":500}},"page":"/_error","query":{},"buildId":"h5w-rj60Vif8vQbejZCYz","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
|
||||
1
portal/.next/server/pages/_app.js
Normal file
1
portal/.next/server/pages/_app.js
Normal file
@@ -0,0 +1 @@
|
||||
"use strict";(()=>{var e={};e.id=888,e.ids=[888],e.modules={8141:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return a}});let n=r(167),o=r(997),i=n._(r(6689)),u=r(5782);async function s(e){let{Component:t,ctx:r}=e;return{pageProps:await (0,u.loadGetInitialProps)(t,r)}}class a extends i.default.Component{render(){let{Component:e,pageProps:t}=this.props;return(0,o.jsx)(e,{...t})}}a.origGetInitialProps=s,a.getInitialProps=s,("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},5782:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{DecodeError:function(){return g},MiddlewareNotFoundError:function(){return E},MissingStaticPage:function(){return y},NormalizeError:function(){return m},PageNotFoundError:function(){return P},SP:function(){return d},ST:function(){return p},WEB_VITALS:function(){return r},execOnce:function(){return n},getDisplayName:function(){return a},getLocationOrigin:function(){return u},getURL:function(){return s},isAbsoluteUrl:function(){return i},isResSent:function(){return c},loadGetInitialProps:function(){return f},normalizeRepeatedSlashes:function(){return l},stringifyError:function(){return x}});let r=["CLS","FCP","FID","INP","LCP","TTFB"];function n(e){let t,r=!1;return function(){for(var n=arguments.length,o=Array(n),i=0;i<n;i++)o[i]=arguments[i];return r||(r=!0,t=e(...o)),t}}let o=/^[a-zA-Z][a-zA-Z\d+\-.]*?:/,i=e=>o.test(e);function u(){let{protocol:e,hostname:t,port:r}=window.location;return e+"//"+t+(r?":"+r:"")}function s(){let{href:e}=window.location,t=u();return e.substring(t.length)}function a(e){return"string"==typeof e?e:e.displayName||e.name||"Unknown"}function c(e){return e.finished||e.headersSent}function l(e){let t=e.split("?");return t[0].replace(/\\/g,"/").replace(/\/\/+/g,"/")+(t[1]?"?"+t.slice(1).join("?"):"")}async function f(e,t){let r=t.res||t.ctx&&t.ctx.res;if(!e.getInitialProps)return t.ctx&&t.Component?{pageProps:await f(t.Component,t.ctx)}:{};let n=await e.getInitialProps(t);if(r&&c(r))return n;if(!n)throw Error('"'+a(e)+'.getInitialProps()" should resolve to an object. But found "'+n+'" instead.');return n}let d="undefined"!=typeof performance,p=d&&["mark","measure","getEntriesByName"].every(e=>"function"==typeof performance[e]);class g extends Error{}class m extends Error{}class P extends Error{constructor(e){super(),this.code="ENOENT",this.name="PageNotFoundError",this.message="Cannot find module for page: "+e}}class y extends Error{constructor(e,t){super(),this.message="Failed to load static file for page: "+e+" "+t}}class E extends Error{constructor(){super(),this.code="ENOENT",this.message="Cannot find the middleware module"}}function x(e){return JSON.stringify({message:e.message,stack:e.stack})}},6689:e=>{e.exports=require("react")},997:e=>{e.exports=require("react/jsx-runtime")},167:(e,t)=>{t._=t._interop_require_default=function(e){return e&&e.__esModule?e:{default:e}}}};var t=require("../webpack-runtime.js");t.C(e);var r=t(t.s=8141);module.exports=r})();
|
||||
1
portal/.next/server/pages/_app.js.nft.json
Normal file
1
portal/.next/server/pages/_app.js.nft.json
Normal file
@@ -0,0 +1 @@
|
||||
{"version":1,"files":["../../../node_modules/next/dist/pages/_app.js","../../../node_modules/react/cjs/react-jsx-runtime.development.js","../../../node_modules/react/cjs/react-jsx-runtime.production.min.js","../../../node_modules/react/cjs/react.development.js","../../../node_modules/react/cjs/react.production.min.js","../../../node_modules/react/index.js","../../../node_modules/react/jsx-runtime.js","../../../node_modules/react/package.json","../../../package.json","../../package.json","../webpack-runtime.js"]}
|
||||
1
portal/.next/server/pages/_document.js
Normal file
1
portal/.next/server/pages/_document.js
Normal file
@@ -0,0 +1 @@
|
||||
"use strict";(()=>{var e={};e.id=660,e.ids=[660],e.modules={2785:e=>{e.exports=require("next/dist/compiled/next-server/pages.runtime.prod.js")},6689:e=>{e.exports=require("react")},997:e=>{e.exports=require("react/jsx-runtime")},1017:e=>{e.exports=require("path")}};var r=require("../webpack-runtime.js");r.C(e);var s=e=>r(r.s=e),t=r.X(0,[682],()=>s(1682));module.exports=t})();
|
||||
1
portal/.next/server/pages/_document.js.nft.json
Normal file
1
portal/.next/server/pages/_document.js.nft.json
Normal file
@@ -0,0 +1 @@
|
||||
{"version":1,"files":["../../../node_modules/client-only/index.js","../../../node_modules/client-only/package.json","../../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../node_modules/next/dist/compiled/jsonwebtoken/index.js","../../../node_modules/next/dist/compiled/jsonwebtoken/package.json","../../../node_modules/next/dist/compiled/next-server/pages.runtime.prod.js","../../../node_modules/next/dist/compiled/node-html-parser/index.js","../../../node_modules/next/dist/compiled/node-html-parser/package.json","../../../node_modules/next/dist/lib/semver-noop.js","../../../node_modules/next/dist/pages/_document.js","../../../node_modules/next/dist/server/lib/trace/constants.js","../../../node_modules/next/dist/server/lib/trace/tracer.js","../../../node_modules/next/package.json","../../../node_modules/react-dom/cjs/react-dom-server-legacy.browser.development.js","../../../node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.min.js","../../../node_modules/react-dom/cjs/react-dom-server.browser.development.js","../../../node_modules/react-dom/cjs/react-dom-server.browser.production.min.js","../../../node_modules/react-dom/package.json","../../../node_modules/react-dom/server.browser.js","../../../node_modules/react/cjs/react-jsx-runtime.development.js","../../../node_modules/react/cjs/react-jsx-runtime.production.min.js","../../../node_modules/react/cjs/react.development.js","../../../node_modules/react/cjs/react.production.min.js","../../../node_modules/react/index.js","../../../node_modules/react/jsx-runtime.js","../../../node_modules/react/package.json","../../../node_modules/styled-jsx/dist/index/index.js","../../../node_modules/styled-jsx/index.js","../../../node_modules/styled-jsx/package.json","../../../package.json","../../package.json","../chunks/682.js","../webpack-runtime.js"]}
|
||||
1
portal/.next/server/pages/_error.js
Normal file
1
portal/.next/server/pages/_error.js
Normal file
File diff suppressed because one or more lines are too long
1
portal/.next/server/pages/_error.js.nft.json
Normal file
1
portal/.next/server/pages/_error.js.nft.json
Normal file
@@ -0,0 +1 @@
|
||||
{"version":1,"files":["../../../node_modules/client-only/index.js","../../../node_modules/client-only/package.json","../../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../node_modules/next/dist/compiled/jsonwebtoken/index.js","../../../node_modules/next/dist/compiled/jsonwebtoken/package.json","../../../node_modules/next/dist/compiled/next-server/pages.runtime.prod.js","../../../node_modules/next/dist/compiled/node-html-parser/index.js","../../../node_modules/next/dist/compiled/node-html-parser/package.json","../../../node_modules/next/dist/lib/semver-noop.js","../../../node_modules/next/dist/server/lib/trace/constants.js","../../../node_modules/next/dist/server/lib/trace/tracer.js","../../../node_modules/next/package.json","../../../node_modules/react-dom/cjs/react-dom-server-legacy.browser.development.js","../../../node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.min.js","../../../node_modules/react-dom/cjs/react-dom-server.browser.development.js","../../../node_modules/react-dom/cjs/react-dom-server.browser.production.min.js","../../../node_modules/react-dom/package.json","../../../node_modules/react-dom/server.browser.js","../../../node_modules/react/cjs/react-jsx-runtime.development.js","../../../node_modules/react/cjs/react-jsx-runtime.production.min.js","../../../node_modules/react/cjs/react.development.js","../../../node_modules/react/cjs/react.production.min.js","../../../node_modules/react/index.js","../../../node_modules/react/jsx-runtime.js","../../../node_modules/react/package.json","../../../node_modules/styled-jsx/dist/index/index.js","../../../node_modules/styled-jsx/index.js","../../../node_modules/styled-jsx/package.json","../../package.json","../chunks/682.js","../webpack-runtime.js"]}
|
||||
1
portal/.next/server/server-reference-manifest.js
Normal file
1
portal/.next/server/server-reference-manifest.js
Normal file
@@ -0,0 +1 @@
|
||||
self.__RSC_SERVER_MANIFEST="{\"node\":{},\"edge\":{},\"encryptionKey\":\"LSwgQkowlIo5zfSE4J41ucGAcTWUk6bhQyOtjLkQcXs=\"}"
|
||||
1
portal/.next/server/server-reference-manifest.json
Normal file
1
portal/.next/server/server-reference-manifest.json
Normal file
@@ -0,0 +1 @@
|
||||
{"node":{},"edge":{},"encryptionKey":"LSwgQkowlIo5zfSE4J41ucGAcTWUk6bhQyOtjLkQcXs="}
|
||||
1
portal/.next/server/webpack-runtime.js
Normal file
1
portal/.next/server/webpack-runtime.js
Normal file
@@ -0,0 +1 @@
|
||||
(()=>{"use strict";var e={},r={};function t(o){var n=r[o];if(void 0!==n)return n.exports;var a=r[o]={exports:{}},u=!0;try{e[o](a,a.exports,t),u=!1}finally{u&&delete r[o]}return a.exports}t.m=e,t.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return t.d(r,{a:r}),r},(()=>{var e,r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__;t.t=function(o,n){if(1&n&&(o=this(o)),8&n||"object"==typeof o&&o&&(4&n&&o.__esModule||16&n&&"function"==typeof o.then))return o;var a=Object.create(null);t.r(a);var u={};e=e||[null,r({}),r([]),r(r)];for(var f=2&n&&o;"object"==typeof f&&!~e.indexOf(f);f=r(f))Object.getOwnPropertyNames(f).forEach(e=>u[e]=()=>o[e]);return u.default=()=>o,t.d(a,u),a}})(),t.d=(e,r)=>{for(var o in r)t.o(r,o)&&!t.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:r[o]})},t.f={},t.e=e=>Promise.all(Object.keys(t.f).reduce((r,o)=>(t.f[o](e,r),r),[])),t.u=e=>""+e+".js",t.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),t.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.X=(e,r,o)=>{var n=r;o||(r=e,o=()=>t(t.s=n)),r.map(t.e,t);var a=o();return void 0===a?e:a},(()=>{var e={658:1},r=r=>{var o=r.modules,n=r.ids,a=r.runtime;for(var u in o)t.o(o,u)&&(t.m[u]=o[u]);a&&a(t);for(var f=0;f<n.length;f++)e[n[f]]=1};t.f.require=(o,n)=>{e[o]||(658!=o?r(require("./chunks/"+t.u(o))):e[o]=1)},module.exports=t,t.C=r})()})();
|
||||
2
portal/.next/static/chunks/23-eed73080eee64cfd.js
Normal file
2
portal/.next/static/chunks/23-eed73080eee64cfd.js
Normal file
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user