auramaxx 1.0.0-alpha.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +26 -0
- package/README.md +112 -0
- package/bin/aurawallet.js +121 -0
- package/docs/ADAPTERS.md +467 -0
- package/docs/API.md +2679 -0
- package/docs/APPS.md +198 -0
- package/docs/ARCHITECTURE.md +350 -0
- package/docs/AUTH.md +698 -0
- package/docs/BEST-PRACTICES.md +121 -0
- package/docs/CLI.md +61 -0
- package/docs/DEVELOPING-APPS.md +452 -0
- package/docs/EXTENSION.md +97 -0
- package/docs/JOBS.md +33 -0
- package/docs/MCP.md +76 -0
- package/docs/PROTOCOL.md +142 -0
- package/docs/SETUP.md +219 -0
- package/docs/WORKSPACE.md +672 -0
- package/docs/agent-auth.md +63 -0
- package/docs/aura-file.md +48 -0
- package/docs/credentials.md +53 -0
- package/docs/external/getting-started.md +65 -0
- package/docs/external/overview.md +45 -0
- package/docs/external/use-cases.md +48 -0
- package/docs/external/why-aura.md +35 -0
- package/docs/jobs/connect-agent.md +77 -0
- package/docs/jobs/migrate-from-dotenv.md +79 -0
- package/docs/jobs/recover-from-lockout.md +72 -0
- package/docs/jobs/secure-ci.md +63 -0
- package/docs/oauth2.md +42 -0
- package/docs/passkeys.md +60 -0
- package/docs/security.md +540 -0
- package/docs/specs/aura-open-protocol.md +61 -0
- package/docs/specs/aura-provider-plugin.md +24 -0
- package/docs/specs/aura-registry-model.md +31 -0
- package/docs/specs/fixtures/invalid-bad-key.aura +1 -0
- package/docs/specs/fixtures/invalid-bad-unicode-escape.aura +1 -0
- package/docs/specs/fixtures/invalid-duplicate-key.aura +2 -0
- package/docs/specs/fixtures/valid-basic.aura +4 -0
- package/docs/specs/fixtures/valid-provider-ref.aura +1 -0
- package/docs/specs/fixtures/valid-quoted-escapes.aura +2 -0
- package/docs/templates/RELEASE_NOTES_TEMPLATE.md +22 -0
- package/docs/totp.md +40 -0
- package/docs/wallet/AI.md +508 -0
- package/docs/wallet/DEVELOPING-STRATEGIES.md +713 -0
- package/docs/wallet/README.md +47 -0
- package/docs/wallet/STRATEGY.md +89 -0
- package/next.config.ts +21 -0
- package/package.json +151 -0
- package/postcss.config.mjs +8 -0
- package/prisma/migrations/20260214170000_baseline/migration.sql +511 -0
- package/prisma/migrations/20260216214537_add_passkey_model/migration.sql +18 -0
- package/prisma/migrations/20260217150500_add_credential_access_audit/migration.sql +31 -0
- package/prisma/migrations/migration_lock.toml +3 -0
- package/prisma/schema.prisma +447 -0
- package/public/logo-chevron.svg +31 -0
- package/public/logo-concentric.svg +31 -0
- package/public/logo-crosshatch.svg +39 -0
- package/public/logo-dashed.svg +39 -0
- package/public/logo-horizontal.svg +31 -0
- package/public/logo-m56.svg +64 -0
- package/public/logo.webp +0 -0
- package/scripts/add-app.js +245 -0
- package/scripts/init.sh +57 -0
- package/scripts/migrate-apikeys-to-credentials.ts +35 -0
- package/scripts/sandbox-agent-flow.sh +235 -0
- package/scripts/sandbox.sh +175 -0
- package/scripts/validate-job-docs.mjs +125 -0
- package/server/abi/SwapHelper.json +438 -0
- package/server/cli/approval.ts +447 -0
- package/server/cli/commands/app.ts +204 -0
- package/server/cli/commands/cron.ts +24 -0
- package/server/cli/commands/doctor.ts +1007 -0
- package/server/cli/commands/env.ts +456 -0
- package/server/cli/commands/init.ts +752 -0
- package/server/cli/commands/mcp.ts +125 -0
- package/server/cli/commands/restore.ts +314 -0
- package/server/cli/commands/shell-hook.ts +468 -0
- package/server/cli/commands/start.ts +62 -0
- package/server/cli/commands/status.ts +59 -0
- package/server/cli/commands/stop.ts +14 -0
- package/server/cli/commands/token.ts +180 -0
- package/server/cli/commands/unlock.ts +49 -0
- package/server/cli/commands/vault.ts +417 -0
- package/server/cli/index.ts +328 -0
- package/server/cli/lib/aura-parser.ts +64 -0
- package/server/cli/lib/credential-create.ts +74 -0
- package/server/cli/lib/credential-resolve.ts +254 -0
- package/server/cli/lib/dotenv-migrate.ts +116 -0
- package/server/cli/lib/dotenv-parser.ts +146 -0
- package/server/cli/lib/http.ts +91 -0
- package/server/cli/lib/init-steps.ts +76 -0
- package/server/cli/lib/local-agent-trust.ts +45 -0
- package/server/cli/lib/process.ts +136 -0
- package/server/cli/lib/prompt.ts +85 -0
- package/server/cli/lib/theme.ts +240 -0
- package/server/cli/socket.ts +570 -0
- package/server/cli/transport-client.ts +50 -0
- package/server/cron/index.ts +137 -0
- package/server/cron/job.ts +31 -0
- package/server/cron/jobs/balance-sync.ts +436 -0
- package/server/cron/jobs/incoming-scan.ts +506 -0
- package/server/cron/jobs/native-price.ts +70 -0
- package/server/cron/jobs/orphan-cleanup.ts +40 -0
- package/server/cron/jobs/strategy-runner.ts +175 -0
- package/server/cron/scheduler.ts +125 -0
- package/server/index.ts +406 -0
- package/server/lib/adapters/factory.ts +110 -0
- package/server/lib/adapters/index.ts +19 -0
- package/server/lib/adapters/router.ts +297 -0
- package/server/lib/adapters/telegram.ts +645 -0
- package/server/lib/adapters/types.ts +89 -0
- package/server/lib/adapters/webhook.ts +95 -0
- package/server/lib/address.ts +49 -0
- package/server/lib/agent-auth/contracts.ts +1194 -0
- package/server/lib/agent-profiles.ts +328 -0
- package/server/lib/ai.ts +285 -0
- package/server/lib/api-registry/contracts.ts +86 -0
- package/server/lib/api-registry/validation.ts +172 -0
- package/server/lib/apikey-migration.ts +189 -0
- package/server/lib/app-installer.ts +505 -0
- package/server/lib/app-tokens.ts +247 -0
- package/server/lib/auth.ts +314 -0
- package/server/lib/batch.ts +242 -0
- package/server/lib/cold.ts +874 -0
- package/server/lib/config.ts +381 -0
- package/server/lib/credential-access-audit.ts +85 -0
- package/server/lib/credential-access-policy.ts +110 -0
- package/server/lib/credential-health.ts +343 -0
- package/server/lib/credential-import.ts +487 -0
- package/server/lib/credential-scope.ts +87 -0
- package/server/lib/credential-shares.ts +190 -0
- package/server/lib/credential-transport.ts +342 -0
- package/server/lib/credential-vault.ts +77 -0
- package/server/lib/credentials.ts +333 -0
- package/server/lib/crypto.ts +8 -0
- package/server/lib/db.ts +15 -0
- package/server/lib/defaults.ts +366 -0
- package/server/lib/dex/index.ts +80 -0
- package/server/lib/dex/relay.ts +235 -0
- package/server/lib/dex/types.ts +59 -0
- package/server/lib/dex/uniswap.ts +370 -0
- package/server/lib/e2e-agent/artifacts.ts +36 -0
- package/server/lib/e2e-agent/contracts.ts +112 -0
- package/server/lib/e2e-agent/validation.ts +135 -0
- package/server/lib/encrypt.ts +128 -0
- package/server/lib/error.ts +20 -0
- package/server/lib/events.ts +205 -0
- package/server/lib/hot.ts +357 -0
- package/server/lib/key-fingerprint.ts +28 -0
- package/server/lib/logger.ts +331 -0
- package/server/lib/network.ts +137 -0
- package/server/lib/notifications.ts +219 -0
- package/server/lib/oauth2-refresh.ts +241 -0
- package/server/lib/oursecret.ts +54 -0
- package/server/lib/passkey-credential.ts +360 -0
- package/server/lib/passkey.ts +68 -0
- package/server/lib/permissions.ts +248 -0
- package/server/lib/pino.ts +24 -0
- package/server/lib/policy-preview.ts +138 -0
- package/server/lib/price.ts +338 -0
- package/server/lib/prices.ts +34 -0
- package/server/lib/project-scope.ts +239 -0
- package/server/lib/resolve-action.ts +427 -0
- package/server/lib/resolve.ts +36 -0
- package/server/lib/sessions.ts +632 -0
- package/server/lib/solana/connection.ts +26 -0
- package/server/lib/solana/jupiter.ts +128 -0
- package/server/lib/solana/transfer.ts +108 -0
- package/server/lib/solana/wallet.ts +136 -0
- package/server/lib/strategy/emits.ts +21 -0
- package/server/lib/strategy/engine.ts +1305 -0
- package/server/lib/strategy/executor.ts +115 -0
- package/server/lib/strategy/hook-context.ts +158 -0
- package/server/lib/strategy/hooks.ts +990 -0
- package/server/lib/strategy/index.ts +28 -0
- package/server/lib/strategy/installer.ts +305 -0
- package/server/lib/strategy/loader.ts +256 -0
- package/server/lib/strategy/message.ts +235 -0
- package/server/lib/strategy/repository.ts +218 -0
- package/server/lib/strategy/session-logger.ts +693 -0
- package/server/lib/strategy/sources.ts +288 -0
- package/server/lib/strategy/state.ts +189 -0
- package/server/lib/strategy/templates.ts +403 -0
- package/server/lib/strategy/tick.ts +404 -0
- package/server/lib/strategy/types.ts +230 -0
- package/server/lib/swap.ts +3 -0
- package/server/lib/temp.ts +86 -0
- package/server/lib/token-metadata.ts +86 -0
- package/server/lib/token-safety.ts +200 -0
- package/server/lib/token-search.ts +444 -0
- package/server/lib/totp.ts +194 -0
- package/server/lib/transactions.ts +123 -0
- package/server/lib/transport.ts +75 -0
- package/server/lib/txhistory/decoder.ts +262 -0
- package/server/lib/txhistory/enricher.ts +652 -0
- package/server/lib/txhistory/index.ts +391 -0
- package/server/lib/txhistory/signatures.ts +59 -0
- package/server/lib/verified-summary.ts +421 -0
- package/server/mcp/profile-policy.ts +30 -0
- package/server/mcp/server.ts +619 -0
- package/server/mcp/tools.ts +523 -0
- package/server/middleware/auth.ts +119 -0
- package/server/middleware/requestLogger.ts +84 -0
- package/server/routes/actions.ts +459 -0
- package/server/routes/adapters.ts +703 -0
- package/server/routes/addressbook.ts +113 -0
- package/server/routes/ai.ts +34 -0
- package/server/routes/apikeys.ts +295 -0
- package/server/routes/apps.ts +601 -0
- package/server/routes/auth.ts +457 -0
- package/server/routes/backup.ts +340 -0
- package/server/routes/batch.ts +270 -0
- package/server/routes/bookmarks.ts +162 -0
- package/server/routes/credential-shares.ts +198 -0
- package/server/routes/credential-vaults.ts +154 -0
- package/server/routes/credentials.ts +1290 -0
- package/server/routes/dashboard.ts +71 -0
- package/server/routes/defaults.ts +124 -0
- package/server/routes/fund.ts +229 -0
- package/server/routes/import.ts +352 -0
- package/server/routes/launch.ts +665 -0
- package/server/routes/lock.ts +54 -0
- package/server/routes/logs.ts +68 -0
- package/server/routes/nuke.ts +111 -0
- package/server/routes/passkey-credentials.ts +99 -0
- package/server/routes/passkey.ts +346 -0
- package/server/routes/portfolio.ts +217 -0
- package/server/routes/price.ts +63 -0
- package/server/routes/resolve.ts +31 -0
- package/server/routes/security.ts +45 -0
- package/server/routes/send-evm.ts +241 -0
- package/server/routes/send-solana.ts +281 -0
- package/server/routes/send.ts +178 -0
- package/server/routes/setup.ts +210 -0
- package/server/routes/strategy.ts +894 -0
- package/server/routes/swap-evm.ts +353 -0
- package/server/routes/swap-solana.ts +177 -0
- package/server/routes/swap.ts +356 -0
- package/server/routes/token.ts +247 -0
- package/server/routes/unlock.ts +403 -0
- package/server/routes/wallet-assets.ts +361 -0
- package/server/routes/wallet-transactions.ts +515 -0
- package/server/routes/wallet.ts +710 -0
- package/server/types.ts +146 -0
- package/skills/aurawallet/SKILL.md +739 -0
- package/skills/aurawallet-setup/SKILL.md +74 -0
- package/skills/security-review/SKILL.md +148 -0
- package/src/app/api/agent-requests/route.ts +30 -0
- package/src/app/api/apps/install/route.ts +126 -0
- package/src/app/api/apps/manifests/route.ts +16 -0
- package/src/app/api/apps/static/[...path]/route.ts +57 -0
- package/src/app/api/events/route.ts +92 -0
- package/src/app/api/page.tsx +212 -0
- package/src/app/api/workspace/[id]/apps/[wid]/route.ts +119 -0
- package/src/app/api/workspace/[id]/apps/route.ts +81 -0
- package/src/app/api/workspace/[id]/export/route.ts +67 -0
- package/src/app/api/workspace/[id]/route.ts +168 -0
- package/src/app/api/workspace/auth.ts +34 -0
- package/src/app/api/workspace/config/route.ts +106 -0
- package/src/app/api/workspace/import/route.ts +127 -0
- package/src/app/api/workspace/route.ts +116 -0
- package/src/app/app/page.tsx +2122 -0
- package/src/app/apple-icon.png +0 -0
- package/src/app/docs/page.tsx +178 -0
- package/src/app/favicon.ico +0 -0
- package/src/app/globals.css +572 -0
- package/src/app/health/page.tsx +5 -0
- package/src/app/hello/page.tsx +15 -0
- package/src/app/icon.png +0 -0
- package/src/app/layout.tsx +34 -0
- package/src/app/page.tsx +986 -0
- package/src/app/providers.tsx +90 -0
- package/src/app/share/[token]/page.tsx +295 -0
- package/src/components/ChainSelector.tsx +144 -0
- package/src/components/HumanActionBar.tsx +695 -0
- package/src/components/NotificationDrawer.tsx +129 -0
- package/src/components/apps/AgentKeysApp.tsx +490 -0
- package/src/components/apps/App.tsx +153 -0
- package/src/components/apps/AppGrid.tsx +15 -0
- package/src/components/apps/DetailedAddressDrawer.tsx +325 -0
- package/src/components/apps/DraggableApp.tsx +562 -0
- package/src/components/apps/IFrameApp.tsx +73 -0
- package/src/components/apps/LogsApp.tsx +360 -0
- package/src/components/apps/SendApp.tsx +394 -0
- package/src/components/apps/SetupWizardApp.tsx +1004 -0
- package/src/components/apps/SystemDefaultsApp.tsx +845 -0
- package/src/components/apps/ThirdPartyApp.tsx +428 -0
- package/src/components/apps/TokenApp.tsx +319 -0
- package/src/components/apps/TransactionsApp.tsx +438 -0
- package/src/components/apps/WalletDetailApp.tsx +1505 -0
- package/src/components/apps/index.ts +13 -0
- package/src/components/design-system/Button.tsx +53 -0
- package/src/components/design-system/ChainIndicator.tsx +65 -0
- package/src/components/design-system/ChainSelector.tsx +137 -0
- package/src/components/design-system/ConfirmationModal.tsx +106 -0
- package/src/components/design-system/ConfirmationPopover.tsx +81 -0
- package/src/components/design-system/Drawer.tsx +123 -0
- package/src/components/design-system/FilterDropdown.tsx +72 -0
- package/src/components/design-system/Modal.tsx +206 -0
- package/src/components/design-system/Popover.tsx +142 -0
- package/src/components/design-system/TextInput.tsx +85 -0
- package/src/components/design-system/Toggle.tsx +58 -0
- package/src/components/design-system/index.ts +11 -0
- package/src/components/docs/DocsThemeToggle.tsx +49 -0
- package/src/components/health/CredentialHealthDashboard.tsx +214 -0
- package/src/components/icons/ChainIcons.tsx +72 -0
- package/src/components/layout/AppStoreDrawer.tsx +369 -0
- package/src/components/layout/ContentArea.tsx +21 -0
- package/src/components/layout/TabBar.tsx +278 -0
- package/src/components/layout/WalletSidebar.tsx +1033 -0
- package/src/components/layout/index.ts +4 -0
- package/src/components/marketing/AuraWalletSpecOverlay.tsx +635 -0
- package/src/components/marketing/DeviceMorphExperience.tsx +216 -0
- package/src/components/vault/ApiKeysConsole.tsx +1080 -0
- package/src/components/vault/AuditConsole.tsx +584 -0
- package/src/components/vault/CredentialDetail.tsx +455 -0
- package/src/components/vault/CredentialEmpty.tsx +55 -0
- package/src/components/vault/CredentialField.tsx +361 -0
- package/src/components/vault/CredentialForm.tsx +1212 -0
- package/src/components/vault/CredentialList.tsx +165 -0
- package/src/components/vault/CredentialRow.tsx +97 -0
- package/src/components/vault/CredentialShareModal.tsx +178 -0
- package/src/components/vault/CredentialVault.tsx +754 -0
- package/src/components/vault/CredentialWalletWidget.tsx +103 -0
- package/src/components/vault/ImportCredentialsModal.tsx +515 -0
- package/src/components/vault/LargeTypeModal.tsx +64 -0
- package/src/components/vault/PasswordGenerator.tsx +224 -0
- package/src/components/vault/TOTPDisplay.tsx +123 -0
- package/src/components/vault/VaultSidebar.tsx +413 -0
- package/src/components/vault/types.ts +54 -0
- package/src/context/AuthContext.tsx +337 -0
- package/src/context/PriceContext.tsx +113 -0
- package/src/context/ThemeContext.tsx +164 -0
- package/src/context/WebSocketContext.tsx +269 -0
- package/src/context/WorkspaceContext.tsx +668 -0
- package/src/hooks/index.ts +3 -0
- package/src/hooks/useAgentActions.ts +368 -0
- package/src/hooks/useBalance.ts +103 -0
- package/src/hooks/useBalances.ts +129 -0
- package/src/instrumentation.ts +12 -0
- package/src/lib/api.ts +449 -0
- package/src/lib/app-loader.ts +148 -0
- package/src/lib/app-registry.ts +178 -0
- package/src/lib/app-sdk.ts +157 -0
- package/src/lib/audit-console-adapter.ts +151 -0
- package/src/lib/auth-client.ts +75 -0
- package/src/lib/config.ts +74 -0
- package/src/lib/crypto.ts +112 -0
- package/src/lib/db.ts +21 -0
- package/src/lib/docs.ts +390 -0
- package/src/lib/events.ts +361 -0
- package/src/lib/pino.ts +24 -0
- package/src/lib/theme-handlers.ts +168 -0
- package/src/lib/theme.ts +351 -0
- package/src/lib/tokenData.ts +378 -0
- package/src/lib/vault-crypto.ts +129 -0
- package/src/lib/websocket-server.ts +302 -0
- package/src/lib/websocket-setup.ts +79 -0
- package/src/lib/wordlist.ts +2050 -0
- package/src/lib/workspace-handlers.ts +285 -0
- package/start.sh +80 -0
- package/tailwind.config.ts +99 -0
- package/tsconfig.json +42 -0
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Agent Auth Model
|
|
2
|
+
|
|
3
|
+
Aura auth is approval-based and pubkey-bound.
|
|
4
|
+
|
|
5
|
+
## Token bootstrap
|
|
6
|
+
|
|
7
|
+
1. Agent calls `POST /auth` with `agentId`, permissions, limits, and `pubkey`
|
|
8
|
+
2. Human approves request
|
|
9
|
+
3. Agent polls `GET /auth/:requestId?secret=...`
|
|
10
|
+
4. Server returns `encryptedToken` (read-once)
|
|
11
|
+
|
|
12
|
+
All token mint flows require a valid RSA `pubkey`.
|
|
13
|
+
|
|
14
|
+
## Why pubkey-bound
|
|
15
|
+
|
|
16
|
+
- Token transport is encrypted to caller public key
|
|
17
|
+
- Credential reads (`/credentials/:id/read`) require `agentPubkey` on token
|
|
18
|
+
- Plaintext credential payloads are not returned to non-admin agents
|
|
19
|
+
|
|
20
|
+
## Local IPC path
|
|
21
|
+
|
|
22
|
+
CLI helpers can bootstrap via Unix socket:
|
|
23
|
+
|
|
24
|
+
- socket: `/tmp/aura-cli-{uid}.sock`
|
|
25
|
+
- owner-only permissions (0600)
|
|
26
|
+
- useful for local subagents without storing raw token in env
|
|
27
|
+
|
|
28
|
+
## Least-privilege templates
|
|
29
|
+
|
|
30
|
+
Read-only credentials for one vault:
|
|
31
|
+
|
|
32
|
+
```json
|
|
33
|
+
{
|
|
34
|
+
"permissions": ["secret:read", "totp:read"],
|
|
35
|
+
"credentialAccess": {
|
|
36
|
+
"read": ["vault:primary/*"],
|
|
37
|
+
"excludeFields": ["refresh_token", "client_secret"]
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Write-only credential automation:
|
|
43
|
+
|
|
44
|
+
```json
|
|
45
|
+
{
|
|
46
|
+
"permissions": ["secret:write"],
|
|
47
|
+
"credentialAccess": { "write": ["tag:generated/*"] }
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Do / Don't
|
|
52
|
+
|
|
53
|
+
Do:
|
|
54
|
+
|
|
55
|
+
- request the narrowest scope you can
|
|
56
|
+
- rotate/re-approve when task changes
|
|
57
|
+
- use temporary tokens for elevated actions
|
|
58
|
+
|
|
59
|
+
Don't:
|
|
60
|
+
|
|
61
|
+
- store long-lived admin tokens in plaintext files
|
|
62
|
+
- request `admin:*` for routine secret reads
|
|
63
|
+
- grant wildcard scopes to untrusted subagents
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# `.aura` File Format
|
|
2
|
+
|
|
3
|
+
`.aura` maps environment variable names to vault credential fields.
|
|
4
|
+
|
|
5
|
+
## Syntax
|
|
6
|
+
|
|
7
|
+
```ini
|
|
8
|
+
# comment
|
|
9
|
+
ENV_NAME=credentialName/field
|
|
10
|
+
OTHER_ENV=@vaultName/credentialName/field
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Rules:
|
|
14
|
+
|
|
15
|
+
- one mapping per line
|
|
16
|
+
- comments start with `#`
|
|
17
|
+
- env var names are validated (must be shell-safe)
|
|
18
|
+
- `@vault/...` form selects a specific vault mapping
|
|
19
|
+
|
|
20
|
+
## Examples
|
|
21
|
+
|
|
22
|
+
```ini
|
|
23
|
+
DATABASE_URL=postgres-prod/url
|
|
24
|
+
OPENAI_API_KEY=openai-prod/api_key
|
|
25
|
+
GITHUB_TOKEN=@agent/github/token
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Usage
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
npx aurawallet env check
|
|
32
|
+
npx aurawallet env -- npm run dev
|
|
33
|
+
npx aurawallet env inject
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Migration helper:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
npx aurawallet env init --from .env
|
|
40
|
+
# or during setup
|
|
41
|
+
npx aurawallet init --from-dotenv
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Security notes
|
|
45
|
+
|
|
46
|
+
- `env inject` writes `.env` with mode `0600`
|
|
47
|
+
- `shell-hook` requires explicit allowlist per project
|
|
48
|
+
- avoid committing generated `.env`
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Credentials
|
|
2
|
+
|
|
3
|
+
Aura stores credentials as local encrypted files, scoped by vault.
|
|
4
|
+
|
|
5
|
+
## Data model
|
|
6
|
+
|
|
7
|
+
Each credential has:
|
|
8
|
+
|
|
9
|
+
- `id`
|
|
10
|
+
- `vaultId`
|
|
11
|
+
- `type` (`login`, `card`, `note`, `api`, `apikey`, `custom`, `passkey`, `oauth2`)
|
|
12
|
+
- `name`
|
|
13
|
+
- `meta` (search/filter fields, tags, type-specific metadata)
|
|
14
|
+
- encrypted sensitive fields
|
|
15
|
+
|
|
16
|
+
Sensitive fields are encrypted with the vault credential key. Metadata stays plaintext for listing and search.
|
|
17
|
+
|
|
18
|
+
## Field model
|
|
19
|
+
|
|
20
|
+
Field shape:
|
|
21
|
+
|
|
22
|
+
- `key` (string)
|
|
23
|
+
- `value` (string)
|
|
24
|
+
- `type` (`text`, `secret`, `url`, `email`, `number`)
|
|
25
|
+
- `sensitive` (boolean)
|
|
26
|
+
|
|
27
|
+
Non-sensitive fields can be mirrored into `meta` for searchability.
|
|
28
|
+
|
|
29
|
+
## Access model
|
|
30
|
+
|
|
31
|
+
- `secret:read` to list/read
|
|
32
|
+
- `secret:write` to create/update/delete
|
|
33
|
+
- optional credential scopes (`credentialAccess.read` / `.write`)
|
|
34
|
+
- optional excluded fields (`excludeFields`)
|
|
35
|
+
|
|
36
|
+
Credential read endpoint returns data encrypted to the caller's `agentPubkey`.
|
|
37
|
+
|
|
38
|
+
## Endpoints
|
|
39
|
+
|
|
40
|
+
- `POST /credentials`
|
|
41
|
+
- `GET /credentials`
|
|
42
|
+
- `GET /credentials/:id`
|
|
43
|
+
- `PUT /credentials/:id`
|
|
44
|
+
- `DELETE /credentials/:id`
|
|
45
|
+
- `POST /credentials/:id/read` (encrypted response)
|
|
46
|
+
- `POST /credentials/:id/totp`
|
|
47
|
+
- `GET /credentials/:id/secrets` (admin-only plaintext)
|
|
48
|
+
|
|
49
|
+
## Notes
|
|
50
|
+
|
|
51
|
+
- `oauth2` credentials are restricted to the primary vault.
|
|
52
|
+
- TOTP capability is auto-detected when `totp`/`otp` field exists.
|
|
53
|
+
- Credential files are stored under Aura data directory `credentials/`.
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Getting Started (First Value Fast)
|
|
2
|
+
|
|
3
|
+
This guide is optimized for first success in under 10 minutes.
|
|
4
|
+
|
|
5
|
+
## 1) Install + initialize
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npx aurawallet init
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## 2) Start Aura
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npx aurawallet start
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Open the dashboard at `http://localhost:4747/app` and create/unlock your vault.
|
|
18
|
+
|
|
19
|
+
## 3) Add one credential
|
|
20
|
+
|
|
21
|
+
In UI: add an API key credential (example: `openai-prod`).
|
|
22
|
+
|
|
23
|
+
Or via API:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
curl -X POST http://localhost:4242/credentials \
|
|
27
|
+
-H "Authorization: Bearer $AURA_TOKEN" \
|
|
28
|
+
-H "Content-Type: application/json" \
|
|
29
|
+
-d '{
|
|
30
|
+
"vaultId": "primary",
|
|
31
|
+
"type": "apikey",
|
|
32
|
+
"name": "openai-prod",
|
|
33
|
+
"fields": [{"key":"api_key","value":"sk-...","type":"secret","sensitive":true}]
|
|
34
|
+
}'
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## 4) Read it back from CLI
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
npx aurawallet vault get openai-prod --field api_key
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
If this returns your value, Aura is working end-to-end.
|
|
44
|
+
|
|
45
|
+
## 5) Replace one `.env` workflow
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
npx aurawallet env init --from .env
|
|
49
|
+
npx aurawallet env -- npm run dev
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Now your app can load secrets from vault mappings instead of raw `.env` files.
|
|
53
|
+
|
|
54
|
+
## Troubleshooting quick checks
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
npx aurawallet status
|
|
58
|
+
npx aurawallet doctor
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Next steps
|
|
62
|
+
|
|
63
|
+
- [Use cases](./use-cases.md)
|
|
64
|
+
- [Why Aura](./why-aura.md)
|
|
65
|
+
- Operational runbooks: [Docs by job](../JOBS.md)
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Aura Overview
|
|
2
|
+
|
|
3
|
+
Aura is a local-first password manager and credential vault designed for both humans and AI agents.
|
|
4
|
+
|
|
5
|
+
## Who Aura is for
|
|
6
|
+
|
|
7
|
+
- Developers managing API keys, passwords, OAuth2 tokens, and TOTP in one place
|
|
8
|
+
- Agent operators who need **scoped, auditable** secret access
|
|
9
|
+
- Teams moving away from `.env` sprawl and ad-hoc token sharing
|
|
10
|
+
|
|
11
|
+
## What you get
|
|
12
|
+
|
|
13
|
+
- **One credential system** for CLI + app + agents
|
|
14
|
+
- **Scoped access controls** so agents can read only what they should
|
|
15
|
+
- **Project boundaries via `.aura`** to prevent cross-project secret bleed
|
|
16
|
+
- **Local-first runtime** (run on your own machine/infrastructure)
|
|
17
|
+
|
|
18
|
+
## Why users switch
|
|
19
|
+
|
|
20
|
+
Without Aura:
|
|
21
|
+
- Secrets spread across `.env` files, notes, and CI variables
|
|
22
|
+
- Hard to rotate safely
|
|
23
|
+
- Hard to prove who accessed what
|
|
24
|
+
|
|
25
|
+
With Aura:
|
|
26
|
+
- Secrets are centralized and typed
|
|
27
|
+
- Agent access is explicit and bounded
|
|
28
|
+
- Access can be traced and reviewed
|
|
29
|
+
|
|
30
|
+
## Fast proof (2 minutes)
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
npx aurawallet init
|
|
34
|
+
npx aurawallet start
|
|
35
|
+
npx aurawallet status
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Then open `http://localhost:4747/app` and create your vault.
|
|
39
|
+
|
|
40
|
+
## Where to go next
|
|
41
|
+
|
|
42
|
+
- [Getting started](./getting-started.md)
|
|
43
|
+
- [Use cases](./use-cases.md)
|
|
44
|
+
- [Why Aura (trust model)](./why-aura.md)
|
|
45
|
+
- Deep technical docs: [Docs by job](../JOBS.md)
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Aura Use Cases
|
|
2
|
+
|
|
3
|
+
## 1) Developer workflow (replace scattered `.env` files)
|
|
4
|
+
|
|
5
|
+
Outcome: run projects with vault-backed secrets instead of manually copying credentials.
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npx aurawallet env init --from .env
|
|
9
|
+
npx aurawallet env -- npm run dev
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
Best when you want local speed with less secret sprawl.
|
|
13
|
+
|
|
14
|
+
## 2) Agent operator workflow (scoped access)
|
|
15
|
+
|
|
16
|
+
Outcome: let agents read only approved secrets, not your entire vault.
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npx aurawallet mcp
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Use profile/scoped token issuance so agent permissions match task risk.
|
|
23
|
+
|
|
24
|
+
More: [Agent auth model](../agent-auth.md), [MCP guide](../MCP.md)
|
|
25
|
+
|
|
26
|
+
## 3) CI/security workflow (controlled non-human access)
|
|
27
|
+
|
|
28
|
+
Outcome: deterministic runtime checks and remediation before deploy.
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
npx aurawallet doctor
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Use doctor output in CI to fail early when Aura runtime/auth assumptions are broken.
|
|
35
|
+
|
|
36
|
+
More: [Secure CI runbook](../jobs/secure-ci.md)
|
|
37
|
+
|
|
38
|
+
## 4) Incident recovery workflow
|
|
39
|
+
|
|
40
|
+
Outcome: recover safely from lockout/misconfiguration.
|
|
41
|
+
|
|
42
|
+
Start with: [Recover from lockout](../jobs/recover-from-lockout.md)
|
|
43
|
+
|
|
44
|
+
## Picking your first path
|
|
45
|
+
|
|
46
|
+
- Solo developer: start with `.env` migration
|
|
47
|
+
- Agent-heavy workflow: start with MCP + scoped issuance
|
|
48
|
+
- Team/ops context: start with CI checks + recovery runbook
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Why Aura
|
|
2
|
+
|
|
3
|
+
Aura is built around one idea: **process identity is not enough; secret access must be explicitly authorized and scoped.**
|
|
4
|
+
|
|
5
|
+
## Trust model in plain language
|
|
6
|
+
|
|
7
|
+
- Local auth bootstrap proves a process can talk to Aura
|
|
8
|
+
- Authorization policy decides what that process can read/write
|
|
9
|
+
- `.aura` mappings enforce project-level boundaries
|
|
10
|
+
- Token/profile policy enforces least privilege
|
|
11
|
+
- Audit trails explain who accessed what and when
|
|
12
|
+
|
|
13
|
+
## How Aura differs
|
|
14
|
+
|
|
15
|
+
- Not just a password vault UI: it is also an agent-safe credential runtime
|
|
16
|
+
- Not just static secret storage: supports typed credentials (TOTP, OAuth2 refresh, passkeys, SSH/GPG)
|
|
17
|
+
- Not just convenience: designed for deny-by-default and forensic traceability
|
|
18
|
+
|
|
19
|
+
## Security posture highlights
|
|
20
|
+
|
|
21
|
+
- Local-first deployment (you control host/runtime)
|
|
22
|
+
- Scoped token profiles and permission boundaries
|
|
23
|
+
- Explicit project scoping and policy contracts
|
|
24
|
+
- Deterministic diagnostics via `aura doctor`
|
|
25
|
+
|
|
26
|
+
## Reality check
|
|
27
|
+
|
|
28
|
+
Aura does **not** replace host security hygiene. Protect the machine, backups, and operator tokens.
|
|
29
|
+
|
|
30
|
+
## Read deeper
|
|
31
|
+
|
|
32
|
+
- [Agent auth model](../agent-auth.md)
|
|
33
|
+
- [`.aura` format](../aura-file.md)
|
|
34
|
+
- [CLI guide](../CLI.md)
|
|
35
|
+
- [Job-based runbooks](../JOBS.md)
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# Job: Connect an Agent (Least Privilege)
|
|
2
|
+
|
|
3
|
+
Connect an agent to Aura using local bootstrap and scoped secret access.
|
|
4
|
+
|
|
5
|
+
## Preflight
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npx aurawallet status
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Expected: Aura server is healthy.
|
|
12
|
+
|
|
13
|
+
## Runbook
|
|
14
|
+
|
|
15
|
+
1) Verify local socket/bootstrap path is available.
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npx aurawallet vault list
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Expected: credentials can be listed without manually exporting long-lived admin tokens.
|
|
22
|
+
|
|
23
|
+
2) Validate project-scoped mapping if this is a repo flow.
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
npx aurawallet env check
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
3) Start MCP server for agent tooling.
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
npx aurawallet mcp
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Optional helper install for supported clients:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
npx aurawallet mcp --install
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Success check
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
npx aurawallet vault get openai-prod --field api_key
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Expected:
|
|
48
|
+
- command returns the requested field value (or structured denial for insufficient scope)
|
|
49
|
+
- no plaintext long-lived admin token committed to files
|
|
50
|
+
|
|
51
|
+
## Failure signatures + fixes
|
|
52
|
+
|
|
53
|
+
- **"Access denied" / insufficient credential scope**
|
|
54
|
+
- Fix: request/approve a profile with required scope, then retry command.
|
|
55
|
+
|
|
56
|
+
- **"Socket unavailable" / local auth bootstrap failed**
|
|
57
|
+
- Fix: ensure Aura runtime is running and retry.
|
|
58
|
+
- Command:
|
|
59
|
+
```bash
|
|
60
|
+
npx aurawallet start
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
- **MCP tool not connecting**
|
|
64
|
+
- Fix: restart MCP process and verify client config install.
|
|
65
|
+
- Commands:
|
|
66
|
+
```bash
|
|
67
|
+
npx aurawallet mcp --install
|
|
68
|
+
npx aurawallet mcp
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Final verification (`aura doctor`)
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
npx aurawallet doctor
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Doctor should report auth/bootstrap checks as pass or actionable warnings.
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Job: Migrate from `.env` to Aura
|
|
2
|
+
|
|
3
|
+
Move existing `.env` secrets into Aura and run your app without plaintext env files.
|
|
4
|
+
|
|
5
|
+
## Preflight
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npx aurawallet status
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Expected: server and dashboard are reachable (or actionable status output).
|
|
12
|
+
|
|
13
|
+
If Aura is not initialized yet:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npx aurawallet init
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Runbook
|
|
20
|
+
|
|
21
|
+
1) Generate `.aura` mapping from your existing `.env` file.
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
npx aurawallet env init --from .env
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
2) Validate mapping + server/vault readiness.
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
npx aurawallet env check
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
3) Run app with vault-injected env.
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
npx aurawallet env -- npm run dev
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Success check
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
npx aurawallet env list
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Expected:
|
|
46
|
+
- command returns mapped variables from `.aura`
|
|
47
|
+
- app starts using injected values
|
|
48
|
+
- no need to source `.env` manually
|
|
49
|
+
|
|
50
|
+
## Failure signatures + fixes
|
|
51
|
+
|
|
52
|
+
- **"No active vault" / unlock-related errors**
|
|
53
|
+
- Fix: unlock vault, then rerun checks.
|
|
54
|
+
- Command:
|
|
55
|
+
```bash
|
|
56
|
+
npx aurawallet unlock
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
- **"No .aura mapping" / parse errors**
|
|
60
|
+
- Fix: regenerate from `.env`, then rerun `env check`.
|
|
61
|
+
- Command:
|
|
62
|
+
```bash
|
|
63
|
+
npx aurawallet env init --from .env
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
- **Server unreachable**
|
|
67
|
+
- Fix: start Aura runtime.
|
|
68
|
+
- Command:
|
|
69
|
+
```bash
|
|
70
|
+
npx aurawallet start
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Final verification (`aura doctor`)
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
npx aurawallet doctor
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
If doctor reports warnings/failures, follow remediation output and rerun doctor until stable.
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Job: Recover from Lockout
|
|
2
|
+
|
|
3
|
+
Safely recover access when vault unlock/auth paths are broken.
|
|
4
|
+
|
|
5
|
+
## Preflight
|
|
6
|
+
|
|
7
|
+
1) Check runtime health.
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npx aurawallet status
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
2) If server is down, start it.
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npx aurawallet start
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Runbook
|
|
20
|
+
|
|
21
|
+
1) Attempt normal unlock path.
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
npx aurawallet unlock
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
2) If unlock fails and backups exist, inspect restore options.
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
npx aurawallet restore --list
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
3) Dry-run latest restore to validate migration compatibility.
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
npx aurawallet restore --dry-run --latest
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
4) If dry-run is clean, execute restore.
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
npx aurawallet restore --latest
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Success check
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
npx aurawallet vault list
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Expected:
|
|
52
|
+
- vault/credentials are readable after unlock or restore
|
|
53
|
+
- no schema mismatch errors after restore
|
|
54
|
+
|
|
55
|
+
## Failure signatures + fixes
|
|
56
|
+
|
|
57
|
+
- **"vault_locked" persists after unlock**
|
|
58
|
+
- Fix: re-run unlock, verify password, then confirm server state with `status`.
|
|
59
|
+
|
|
60
|
+
- **Restore migration errors**
|
|
61
|
+
- Fix: keep backup untouched, upgrade Aura version, retry `--dry-run` first.
|
|
62
|
+
|
|
63
|
+
- **No backups listed**
|
|
64
|
+
- Fix: recover from external/system backups and re-run restore flow.
|
|
65
|
+
|
|
66
|
+
## Final verification (`aura doctor`)
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
npx aurawallet doctor --strict
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Only close incident after doctor returns pass (or explicitly accepted warnings).
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Job: Secure CI with Scoped Aura Access
|
|
2
|
+
|
|
3
|
+
Run CI jobs with minimal Aura permissions and deterministic health checks.
|
|
4
|
+
|
|
5
|
+
## Preflight
|
|
6
|
+
|
|
7
|
+
- Ensure CI has a scoped Aura token in secret storage (for example `AURA_TOKEN`).
|
|
8
|
+
- Never commit tokens to repo files.
|
|
9
|
+
|
|
10
|
+
Quick connectivity check in CI shell:
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
npx aurawallet status
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Runbook
|
|
17
|
+
|
|
18
|
+
1) Validate env mapping and readiness in CI workspace.
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
npx aurawallet env check
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
2) Fetch only required secret fields (example).
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
npx aurawallet vault get ci-npm-token --field token
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
3) Run build/test command with vault-injected env.
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
npx aurawallet env -- npm run build
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Success check
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
npx aurawallet vault list
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Expected:
|
|
43
|
+
- only scoped credentials are accessible
|
|
44
|
+
- CI job completes without raw `.env` files in repository
|
|
45
|
+
|
|
46
|
+
## Failure signatures + fixes
|
|
47
|
+
|
|
48
|
+
- **HTTP 401 / unauthorized**
|
|
49
|
+
- Fix: rotate or reissue CI token with required scopes and TTL.
|
|
50
|
+
|
|
51
|
+
- **Credential not found in scope**
|
|
52
|
+
- Fix: update CI token/profile scope or `.aura` mapping to include required key.
|
|
53
|
+
|
|
54
|
+
- **Rate-limit / policy deny**
|
|
55
|
+
- Fix: inspect token policy and adjust per-credential budget for CI workload.
|
|
56
|
+
|
|
57
|
+
## Final verification (`aura doctor`)
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
npx aurawallet doctor --json
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Store doctor JSON artifact in CI for auditability; remediate any fail state before release.
|
package/docs/oauth2.md
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# OAuth2 Credential Type
|
|
2
|
+
|
|
3
|
+
Aura supports `oauth2` credentials with transparent access-token refresh.
|
|
4
|
+
|
|
5
|
+
## Required metadata
|
|
6
|
+
|
|
7
|
+
- `meta.token_endpoint` (string)
|
|
8
|
+
- `meta.expires_at` (unix seconds)
|
|
9
|
+
|
|
10
|
+
`oauth2` credentials must be in the primary vault.
|
|
11
|
+
|
|
12
|
+
## Expected sensitive fields
|
|
13
|
+
|
|
14
|
+
- `access_token`
|
|
15
|
+
- `refresh_token`
|
|
16
|
+
- `client_id`
|
|
17
|
+
- `client_secret`
|
|
18
|
+
|
|
19
|
+
Optional meta:
|
|
20
|
+
|
|
21
|
+
- `auth_method` (`client_secret_post` default, or `client_secret_basic`)
|
|
22
|
+
|
|
23
|
+
## Refresh behavior
|
|
24
|
+
|
|
25
|
+
On `POST /credentials/:id/read`:
|
|
26
|
+
|
|
27
|
+
1. if access token expired/near expiry, Aura calls token endpoint
|
|
28
|
+
2. updates stored access token (and refresh token if returned)
|
|
29
|
+
3. updates `expires_at` + `last_refreshed`
|
|
30
|
+
4. returns filtered fields encrypted to `agentPubkey`
|
|
31
|
+
|
|
32
|
+
Default excluded fields for oauth2 agent reads:
|
|
33
|
+
|
|
34
|
+
- `refresh_token`
|
|
35
|
+
- `client_secret`
|
|
36
|
+
- `client_id`
|
|
37
|
+
- `token_endpoint`
|
|
38
|
+
|
|
39
|
+
## Re-auth status
|
|
40
|
+
|
|
41
|
+
`POST /credentials/:id/reauth` exists but full authorization-code redirect flow is not implemented yet.
|
|
42
|
+
Aura marks credentials `needs_reauth` on revoked refresh token detection.
|