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,447 @@
|
|
|
1
|
+
// This is your Prisma schema file,
|
|
2
|
+
// learn more about it in the docs: https://pris.ly/d/prisma-schema
|
|
3
|
+
|
|
4
|
+
generator client {
|
|
5
|
+
provider = "prisma-client-js"
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
datasource db {
|
|
9
|
+
provider = "sqlite"
|
|
10
|
+
url = env("DATABASE_URL")
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
model Log {
|
|
14
|
+
id String @id @default(cuid())
|
|
15
|
+
walletAddress String
|
|
16
|
+
title String
|
|
17
|
+
description String?
|
|
18
|
+
txHash String?
|
|
19
|
+
createdAt DateTime @default(now())
|
|
20
|
+
|
|
21
|
+
@@index([walletAddress])
|
|
22
|
+
@@index([createdAt])
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
model HotWallet {
|
|
26
|
+
id String @id @default(cuid())
|
|
27
|
+
address String @unique
|
|
28
|
+
encryptedPrivateKey String // Encrypted with in-memory seed
|
|
29
|
+
tokenHash String // Which auth token owns this wallet
|
|
30
|
+
coldWalletId String? // Vault ID (null = primary vault)
|
|
31
|
+
|
|
32
|
+
// Decorative fields
|
|
33
|
+
name String?
|
|
34
|
+
color String? // Hex color e.g. "#FF5733"
|
|
35
|
+
description String?
|
|
36
|
+
emoji String? // e.g. "🔥"
|
|
37
|
+
hidden Boolean @default(false)
|
|
38
|
+
|
|
39
|
+
chain String @default("base")
|
|
40
|
+
createdAt DateTime @default(now())
|
|
41
|
+
|
|
42
|
+
@@index([address])
|
|
43
|
+
@@index([tokenHash])
|
|
44
|
+
@@index([hidden])
|
|
45
|
+
@@index([coldWalletId])
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
model HumanAction {
|
|
49
|
+
id String @id @default(cuid())
|
|
50
|
+
type String // 'fund' | 'send' | 'agent_access' | 'action' | 'app:approve'
|
|
51
|
+
fromTier String // 'cold' | 'hot' | 'temp' | 'system'
|
|
52
|
+
toAddress String?
|
|
53
|
+
amount String?
|
|
54
|
+
chain String
|
|
55
|
+
status String @default("pending") // 'pending' | 'approved' | 'rejected'
|
|
56
|
+
createdAt DateTime @default(now())
|
|
57
|
+
resolvedAt DateTime?
|
|
58
|
+
metadata String? // JSON string for flexible metadata
|
|
59
|
+
notification Notification?
|
|
60
|
+
|
|
61
|
+
@@index([status])
|
|
62
|
+
@@index([createdAt])
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
model Notification {
|
|
66
|
+
id String @id @default(cuid())
|
|
67
|
+
type String // 'pending_approval' | 'info' | 'warning' | 'success' | 'error' | 'system'
|
|
68
|
+
category String? // 'transaction' | 'security' | 'token' | 'wallet' | 'general'
|
|
69
|
+
title String
|
|
70
|
+
message String
|
|
71
|
+
read Boolean @default(false)
|
|
72
|
+
dismissed Boolean @default(false)
|
|
73
|
+
actions String? // JSON: [{ id, label, type, action, endpoint, href }]
|
|
74
|
+
metadata String? // JSON for flexible data
|
|
75
|
+
humanActionId String? @unique
|
|
76
|
+
humanAction HumanAction? @relation(fields: [humanActionId], references: [id])
|
|
77
|
+
expiresAt DateTime?
|
|
78
|
+
createdAt DateTime @default(now())
|
|
79
|
+
updatedAt DateTime @updatedAt
|
|
80
|
+
source String @default("system") // 'system' | 'agent' | 'user'
|
|
81
|
+
agentId String?
|
|
82
|
+
|
|
83
|
+
@@index([read, dismissed])
|
|
84
|
+
@@index([type])
|
|
85
|
+
@@index([createdAt])
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// Stores all WebSocket events for debugging and audit trail
|
|
89
|
+
model Event {
|
|
90
|
+
id String @id @default(cuid())
|
|
91
|
+
type String // e.g., 'request:created', 'token:revoked'
|
|
92
|
+
source String // 'express' | 'nextjs'
|
|
93
|
+
data String // JSON payload
|
|
94
|
+
timestamp DateTime @default(now())
|
|
95
|
+
createdAt DateTime @default(now())
|
|
96
|
+
|
|
97
|
+
@@index([type])
|
|
98
|
+
@@index([timestamp])
|
|
99
|
+
@@index([source])
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// Stores token metadata for UI/logs - actual signing stays in memory
|
|
103
|
+
model AgentToken {
|
|
104
|
+
id String @id @default(cuid())
|
|
105
|
+
tokenHash String @unique // Hash of token for identification (not the token itself)
|
|
106
|
+
agentId String
|
|
107
|
+
limit Float // Max spending limit in ETH
|
|
108
|
+
spent Float @default(0)
|
|
109
|
+
permissions String // JSON array of permissions
|
|
110
|
+
expiresAt DateTime
|
|
111
|
+
isRevoked Boolean @default(false)
|
|
112
|
+
revokedAt DateTime?
|
|
113
|
+
createdAt DateTime @default(now())
|
|
114
|
+
lastUsedAt DateTime?
|
|
115
|
+
|
|
116
|
+
@@index([agentId])
|
|
117
|
+
@@index([isRevoked])
|
|
118
|
+
@@index([expiresAt])
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
model CredentialAccessAudit {
|
|
122
|
+
id String @id @default(cuid())
|
|
123
|
+
timestamp DateTime @default(now())
|
|
124
|
+
credentialId String
|
|
125
|
+
vaultId String
|
|
126
|
+
action String
|
|
127
|
+
allowed Boolean
|
|
128
|
+
result String
|
|
129
|
+
reasonCode String
|
|
130
|
+
httpStatus Int
|
|
131
|
+
tokenHash String?
|
|
132
|
+
agentId String?
|
|
133
|
+
requestId String?
|
|
134
|
+
actorType String
|
|
135
|
+
projectScope String?
|
|
136
|
+
sensitiveRead Boolean @default(true)
|
|
137
|
+
metadata String?
|
|
138
|
+
|
|
139
|
+
@@index([credentialId, timestamp(sort: Desc)])
|
|
140
|
+
@@index([tokenHash, timestamp(sort: Desc)])
|
|
141
|
+
@@index([allowed, timestamp(sort: Desc)])
|
|
142
|
+
@@index([reasonCode, timestamp(sort: Desc)])
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// Workspace system for programmatic dashboard control
|
|
146
|
+
model Workspace {
|
|
147
|
+
id String @id @default(cuid())
|
|
148
|
+
name String
|
|
149
|
+
slug String @unique
|
|
150
|
+
icon String? // Lucide icon name
|
|
151
|
+
emoji String? // Emoji character e.g. "🚀"
|
|
152
|
+
color String? // Hex color code e.g. "#ff4d00"
|
|
153
|
+
order Int @default(0)
|
|
154
|
+
isDefault Boolean @default(false)
|
|
155
|
+
isCloseable Boolean @default(true)
|
|
156
|
+
createdAt DateTime @default(now())
|
|
157
|
+
updatedAt DateTime @updatedAt
|
|
158
|
+
apps WorkspaceApp[]
|
|
159
|
+
theme WorkspaceTheme?
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
model WorkspaceApp {
|
|
163
|
+
id String @id @default(cuid())
|
|
164
|
+
workspaceId String
|
|
165
|
+
workspace Workspace @relation(fields: [workspaceId], references: [id], onDelete: Cascade)
|
|
166
|
+
|
|
167
|
+
appType String // 'wallets' | 'logs' | 'iframe' | 'installed:app-id'
|
|
168
|
+
x Int @default(20)
|
|
169
|
+
y Int @default(20)
|
|
170
|
+
width Int @default(320)
|
|
171
|
+
height Int @default(280)
|
|
172
|
+
zIndex Int @default(10)
|
|
173
|
+
isVisible Boolean @default(true)
|
|
174
|
+
isLocked Boolean @default(false)
|
|
175
|
+
config String? // JSON for iframe url, installed app props, etc.
|
|
176
|
+
|
|
177
|
+
createdAt DateTime @default(now())
|
|
178
|
+
updatedAt DateTime @updatedAt
|
|
179
|
+
|
|
180
|
+
@@index([workspaceId])
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// Global theme configuration
|
|
184
|
+
model ThemeConfig {
|
|
185
|
+
id String @id @default("global")
|
|
186
|
+
activeThemeId String @default("light")
|
|
187
|
+
accentColor String @default("#ccff00")
|
|
188
|
+
customThemes String? // JSON array of custom themes
|
|
189
|
+
createdAt DateTime @default(now())
|
|
190
|
+
updatedAt DateTime @updatedAt
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// Per-workspace theme overrides
|
|
194
|
+
model WorkspaceTheme {
|
|
195
|
+
id String @id @default(cuid())
|
|
196
|
+
workspaceId String @unique
|
|
197
|
+
workspace Workspace @relation(fields: [workspaceId], references: [id], onDelete: Cascade)
|
|
198
|
+
mode String? // 'light' | 'dark' - null means inherit from global
|
|
199
|
+
accent String? // Hex color - null means inherit from global
|
|
200
|
+
overrides String? // JSON for app palette overrides
|
|
201
|
+
createdAt DateTime @default(now())
|
|
202
|
+
updatedAt DateTime @updatedAt
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
// API Keys for external services (Alchemy, etc.)
|
|
206
|
+
model ApiKey {
|
|
207
|
+
id String @id @default(cuid())
|
|
208
|
+
service String // 'alchemy' | 'infura' | 'etherscan' | etc.
|
|
209
|
+
name String // Display name e.g. "My Alchemy Key"
|
|
210
|
+
key String // The actual API key (stored encrypted in production)
|
|
211
|
+
metadata String? // JSON for service-specific config (e.g., allowed chains)
|
|
212
|
+
isActive Boolean @default(true)
|
|
213
|
+
createdAt DateTime @default(now())
|
|
214
|
+
updatedAt DateTime @updatedAt
|
|
215
|
+
|
|
216
|
+
@@unique([service, name])
|
|
217
|
+
@@index([service])
|
|
218
|
+
@@index([isActive])
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
// Transaction history for wallets
|
|
222
|
+
model Transaction {
|
|
223
|
+
id String @id @default(cuid())
|
|
224
|
+
walletAddress String
|
|
225
|
+
txHash String?
|
|
226
|
+
type String // 'send' | 'receive' | 'swap' | 'contract' | 'manual'
|
|
227
|
+
status String @default("confirmed")
|
|
228
|
+
amount String? // ETH amount
|
|
229
|
+
tokenAddress String? // Token contract address if applicable
|
|
230
|
+
tokenAmount String? // Token amount if applicable
|
|
231
|
+
from String?
|
|
232
|
+
to String?
|
|
233
|
+
description String?
|
|
234
|
+
blockNumber Int?
|
|
235
|
+
chain String @default("base")
|
|
236
|
+
createdAt DateTime @default(now())
|
|
237
|
+
updatedAt DateTime @updatedAt
|
|
238
|
+
executedAt DateTime?
|
|
239
|
+
|
|
240
|
+
@@unique([txHash, chain])
|
|
241
|
+
@@index([walletAddress])
|
|
242
|
+
@@index([walletAddress, createdAt])
|
|
243
|
+
@@index([type])
|
|
244
|
+
@@index([tokenAddress])
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
// Tracked assets (tokens) for wallets
|
|
248
|
+
model TrackedAsset {
|
|
249
|
+
id String @id @default(cuid())
|
|
250
|
+
walletAddress String?
|
|
251
|
+
tokenAddress String
|
|
252
|
+
symbol String?
|
|
253
|
+
name String?
|
|
254
|
+
decimals Int @default(18)
|
|
255
|
+
lastBalance String?
|
|
256
|
+
lastBalanceAt DateTime?
|
|
257
|
+
isHidden Boolean @default(false)
|
|
258
|
+
chain String @default("base")
|
|
259
|
+
poolAddress String? // Cached pool address for price lookup
|
|
260
|
+
poolVersion String? // "v2" | "v3" | "v4"
|
|
261
|
+
icon String? // Token icon URL
|
|
262
|
+
createdAt DateTime @default(now())
|
|
263
|
+
updatedAt DateTime @updatedAt
|
|
264
|
+
|
|
265
|
+
@@unique([walletAddress, tokenAddress, chain])
|
|
266
|
+
@@index([walletAddress])
|
|
267
|
+
@@index([walletAddress, updatedAt])
|
|
268
|
+
@@index([tokenAddress])
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
// Cached native balances (ETH/SOL) per wallet per chain
|
|
272
|
+
model NativeBalance {
|
|
273
|
+
id String @id @default(cuid())
|
|
274
|
+
walletAddress String
|
|
275
|
+
chain String
|
|
276
|
+
balance String
|
|
277
|
+
updatedAt DateTime @updatedAt
|
|
278
|
+
|
|
279
|
+
@@unique([walletAddress, chain])
|
|
280
|
+
@@index([walletAddress])
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
// Cached native currency prices (ETH, SOL → USD)
|
|
284
|
+
model NativePrice {
|
|
285
|
+
currency String @id // "ETH" | "SOL"
|
|
286
|
+
priceUsd String
|
|
287
|
+
updatedAt DateTime @updatedAt
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
// Balance sync state per chain
|
|
291
|
+
model SyncState {
|
|
292
|
+
id String @id @default(cuid())
|
|
293
|
+
chain String @unique
|
|
294
|
+
lastSyncAt DateTime?
|
|
295
|
+
lastSyncStatus String @default("idle")
|
|
296
|
+
lastError String?
|
|
297
|
+
syncCount Int @default(0)
|
|
298
|
+
lastBlock String? // Block cursor for event scanning jobs (stringified bigint)
|
|
299
|
+
updatedAt DateTime @updatedAt
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
// First-class strategy resources (template/headless + app-linked compatibility)
|
|
303
|
+
model Strategy {
|
|
304
|
+
id String @id @default(cuid())
|
|
305
|
+
name String
|
|
306
|
+
templateId String?
|
|
307
|
+
mode String @default("headless") // 'headless' | 'app-linked'
|
|
308
|
+
manifest String // JSON-encoded strategy manifest snapshot
|
|
309
|
+
config String? // JSON-encoded user config
|
|
310
|
+
state String? // JSON-encoded strategy state
|
|
311
|
+
schedule String? // JSON-encoded schedule metadata (tier/cron/interval)
|
|
312
|
+
permissions String @default("[]") // JSON-encoded permission list
|
|
313
|
+
limits String? // JSON-encoded limits object
|
|
314
|
+
enabled Boolean @default(false)
|
|
315
|
+
status String @default("draft")
|
|
316
|
+
createdBy String @default("human")
|
|
317
|
+
provenance String? // JSON-encoded source/provenance metadata
|
|
318
|
+
appId String? // legacy linkage when imported from a app
|
|
319
|
+
lastTickAt DateTime?
|
|
320
|
+
lastError String?
|
|
321
|
+
errorCount Int @default(0)
|
|
322
|
+
createdAt DateTime @default(now())
|
|
323
|
+
updatedAt DateTime @updatedAt
|
|
324
|
+
runs StrategyRun[]
|
|
325
|
+
|
|
326
|
+
@@index([enabled, status])
|
|
327
|
+
@@index([templateId])
|
|
328
|
+
@@index([appId])
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
// Optional strategy run audit trail for cron/runtime debugging
|
|
332
|
+
model StrategyRun {
|
|
333
|
+
id String @id @default(cuid())
|
|
334
|
+
strategyId String
|
|
335
|
+
strategy Strategy @relation(fields: [strategyId], references: [id], onDelete: Cascade)
|
|
336
|
+
startedAt DateTime @default(now())
|
|
337
|
+
endedAt DateTime?
|
|
338
|
+
status String
|
|
339
|
+
error String?
|
|
340
|
+
metadata String? // JSON-encoded run metadata
|
|
341
|
+
|
|
342
|
+
@@index([strategyId, startedAt])
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
// Per-app persistent storage for third-party apps
|
|
346
|
+
model AppStorage {
|
|
347
|
+
id String @id @default(cuid())
|
|
348
|
+
appId String
|
|
349
|
+
key String
|
|
350
|
+
value String // JSON stringified
|
|
351
|
+
updatedAt DateTime @updatedAt
|
|
352
|
+
|
|
353
|
+
@@unique([appId, key])
|
|
354
|
+
@@index([appId])
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
// Cached token metadata for enriching on-chain events
|
|
358
|
+
model TokenMetadata {
|
|
359
|
+
id String @id @default(cuid())
|
|
360
|
+
tokenAddress String
|
|
361
|
+
chain String
|
|
362
|
+
symbol String?
|
|
363
|
+
name String?
|
|
364
|
+
decimals Int @default(18)
|
|
365
|
+
icon String?
|
|
366
|
+
description String?
|
|
367
|
+
priceUsd String? // Last known USD price (string for decimal precision)
|
|
368
|
+
marketCap Float?
|
|
369
|
+
fdv Float?
|
|
370
|
+
liquidity Float? // DEX liquidity USD
|
|
371
|
+
volume24h Float?
|
|
372
|
+
dexId String? // Source DEX (e.g. "uniswap", "raydium")
|
|
373
|
+
pairAddress String?
|
|
374
|
+
websites String? // JSON-encoded string array
|
|
375
|
+
socials String? // JSON-encoded [{type,url}] array
|
|
376
|
+
lastAccessedAt DateTime @default(now())
|
|
377
|
+
lastVerifiedAt DateTime?
|
|
378
|
+
updatedAt DateTime @updatedAt
|
|
379
|
+
|
|
380
|
+
@@unique([tokenAddress, chain])
|
|
381
|
+
@@index([tokenAddress])
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
// Cached DEX pool metadata for enriching swap events
|
|
385
|
+
model PoolMetadata {
|
|
386
|
+
id String @id @default(cuid())
|
|
387
|
+
poolAddress String
|
|
388
|
+
chain String
|
|
389
|
+
token0 String?
|
|
390
|
+
token1 String?
|
|
391
|
+
fee Int?
|
|
392
|
+
dex String? // "uniswap_v2" | "uniswap_v3" | "uniswap_v4"
|
|
393
|
+
|
|
394
|
+
@@unique([poolAddress, chain])
|
|
395
|
+
@@index([poolAddress])
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
// Address book for labeling external addresses
|
|
399
|
+
model AddressLabel {
|
|
400
|
+
id String @id @default(cuid())
|
|
401
|
+
address String @unique
|
|
402
|
+
label String
|
|
403
|
+
emoji String?
|
|
404
|
+
color String?
|
|
405
|
+
notes String?
|
|
406
|
+
createdBy String @default("human")
|
|
407
|
+
createdAt DateTime @default(now())
|
|
408
|
+
updatedAt DateTime @updatedAt
|
|
409
|
+
|
|
410
|
+
@@index([label])
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
// Centralized system defaults (key-value store for configurable limits, permissions, TTLs, etc.)
|
|
414
|
+
model SystemDefault {
|
|
415
|
+
key String @id // e.g. "limits.fund", "permissions.default"
|
|
416
|
+
value String // JSON-encoded value
|
|
417
|
+
type String // Category: "permissions" | "financial" | "ttl" | "rate_limit" | "ai_safety" | "launch" | "app" | "swap"
|
|
418
|
+
label String // Human-readable label for dashboard
|
|
419
|
+
description String? // Optional description
|
|
420
|
+
updatedAt DateTime @updatedAt
|
|
421
|
+
|
|
422
|
+
@@index([type])
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
// WebAuthn passkey credentials for biometric vault unlock
|
|
426
|
+
model Passkey {
|
|
427
|
+
id String @id @default(cuid())
|
|
428
|
+
credentialId String @unique // base64url WebAuthn credential ID
|
|
429
|
+
publicKey Bytes // COSE public key (base64url ↔ Uint8Array conversion needed)
|
|
430
|
+
counter Int @default(0) // signature counter (replay/clone detection)
|
|
431
|
+
transports String @default("[]") // JSON array of transport hints
|
|
432
|
+
rpId String // relying party ID (e.g. "localhost")
|
|
433
|
+
aaguid String @default("") // authenticator AAGUID
|
|
434
|
+
createdAt DateTime @default(now())
|
|
435
|
+
lastUsedAt DateTime?
|
|
436
|
+
|
|
437
|
+
@@index([rpId])
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
// Global app configuration (singleton)
|
|
441
|
+
model AppConfig {
|
|
442
|
+
id String @id @default("global")
|
|
443
|
+
chainConfig String? // JSON: { base: { rpc: "...", chainId: 8453 }, ... }
|
|
444
|
+
adapterConfig String? // JSON: { enabled: true, adapters: [{ type, enabled, config }] }
|
|
445
|
+
createdAt DateTime @default(now())
|
|
446
|
+
updatedAt DateTime @updatedAt
|
|
447
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
<svg width="56" height="56" viewBox="0 0 56 56" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<defs>
|
|
3
|
+
<clipPath id="clip-chev">
|
|
4
|
+
<rect width="56" height="56"/>
|
|
5
|
+
</clipPath>
|
|
6
|
+
<pattern id="dots-chev" x="0" y="0" width="3" height="3" patternUnits="userSpaceOnUse">
|
|
7
|
+
<circle cx="1.5" cy="1.5" r="0.5" fill="#000000" fill-opacity="0.03"/>
|
|
8
|
+
</pattern>
|
|
9
|
+
</defs>
|
|
10
|
+
|
|
11
|
+
<!-- Background -->
|
|
12
|
+
<rect width="56" height="56" fill="#ffffff"/>
|
|
13
|
+
<rect width="56" height="56" fill="url(#dots-chev)"/>
|
|
14
|
+
|
|
15
|
+
<!-- Chevron Stripes — V-shaped like hazard tape folded -->
|
|
16
|
+
<g clip-path="url(#clip-chev)" opacity="0.9">
|
|
17
|
+
<!-- Chevron 1 (outer) -->
|
|
18
|
+
<polygon points="0,0 28,16 56,0 56,8 28,24 0,8" fill="#0a0a0a"/>
|
|
19
|
+
<!-- Chevron 2 (middle) -->
|
|
20
|
+
<polygon points="0,20 28,36 56,20 56,28 28,44 0,28" fill="#0a0a0a"/>
|
|
21
|
+
<!-- Chevron 3 (bottom) -->
|
|
22
|
+
<polygon points="0,40 28,56 56,40 56,48 28,64 0,48" fill="#0a0a0a"/>
|
|
23
|
+
</g>
|
|
24
|
+
|
|
25
|
+
<!-- Main Border -->
|
|
26
|
+
<rect x="0.5" y="0.5" width="55" height="55" stroke="#d1d5db" stroke-width="1" fill="none"/>
|
|
27
|
+
|
|
28
|
+
<!-- Corner Marks -->
|
|
29
|
+
<path d="M 8 4.5 L 4.5 4.5 L 4.5 8" stroke="#9ca3af" stroke-width="1" fill="none" stroke-linecap="square"/>
|
|
30
|
+
<path d="M 48 51.5 L 51.5 51.5 L 51.5 48" stroke="#9ca3af" stroke-width="1" fill="none" stroke-linecap="square"/>
|
|
31
|
+
</svg>
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
<svg width="56" height="56" viewBox="0 0 56 56" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<defs>
|
|
3
|
+
<clipPath id="clip-con">
|
|
4
|
+
<rect width="56" height="56"/>
|
|
5
|
+
</clipPath>
|
|
6
|
+
<pattern id="dots-con" x="0" y="0" width="3" height="3" patternUnits="userSpaceOnUse">
|
|
7
|
+
<circle cx="1.5" cy="1.5" r="0.5" fill="#000000" fill-opacity="0.03"/>
|
|
8
|
+
</pattern>
|
|
9
|
+
</defs>
|
|
10
|
+
|
|
11
|
+
<!-- Background -->
|
|
12
|
+
<rect width="56" height="56" fill="#ffffff"/>
|
|
13
|
+
<rect width="56" height="56" fill="url(#dots-con)"/>
|
|
14
|
+
|
|
15
|
+
<!-- Concentric square rings — like a target / vault door -->
|
|
16
|
+
<g clip-path="url(#clip-con)" opacity="0.9">
|
|
17
|
+
<!-- Outermost ring -->
|
|
18
|
+
<rect x="2" y="2" width="52" height="52" stroke="#0a0a0a" stroke-width="7" fill="none"/>
|
|
19
|
+
<!-- Middle ring -->
|
|
20
|
+
<rect x="14" y="14" width="28" height="28" stroke="#0a0a0a" stroke-width="6" fill="none"/>
|
|
21
|
+
<!-- Inner dot -->
|
|
22
|
+
<rect x="24" y="24" width="8" height="8" fill="#0a0a0a"/>
|
|
23
|
+
</g>
|
|
24
|
+
|
|
25
|
+
<!-- Main Border -->
|
|
26
|
+
<rect x="0.5" y="0.5" width="55" height="55" stroke="#d1d5db" stroke-width="1" fill="none"/>
|
|
27
|
+
|
|
28
|
+
<!-- Corner Marks -->
|
|
29
|
+
<path d="M 8 4.5 L 4.5 4.5 L 4.5 8" stroke="#9ca3af" stroke-width="1" fill="none" stroke-linecap="square"/>
|
|
30
|
+
<path d="M 48 51.5 L 51.5 51.5 L 51.5 48" stroke="#9ca3af" stroke-width="1" fill="none" stroke-linecap="square"/>
|
|
31
|
+
</svg>
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<svg width="56" height="56" viewBox="0 0 56 56" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<defs>
|
|
3
|
+
<clipPath id="clip-xh">
|
|
4
|
+
<rect width="56" height="56"/>
|
|
5
|
+
</clipPath>
|
|
6
|
+
<pattern id="dots-xh" x="0" y="0" width="3" height="3" patternUnits="userSpaceOnUse">
|
|
7
|
+
<circle cx="1.5" cy="1.5" r="0.5" fill="#000000" fill-opacity="0.03"/>
|
|
8
|
+
</pattern>
|
|
9
|
+
</defs>
|
|
10
|
+
|
|
11
|
+
<!-- Background -->
|
|
12
|
+
<rect width="56" height="56" fill="#ffffff"/>
|
|
13
|
+
<rect width="56" height="56" fill="url(#dots-xh)"/>
|
|
14
|
+
|
|
15
|
+
<!-- Cross-hatch: diagonal stripes both directions, thinner -->
|
|
16
|
+
<g clip-path="url(#clip-xh)" opacity="0.85">
|
|
17
|
+
<!-- Forward diagonals (top-left to bottom-right) -->
|
|
18
|
+
<g transform="translate(28, 28) scale(1.6) rotate(45) translate(-28, -28)">
|
|
19
|
+
<rect x="0" y="4" width="56" height="6" fill="#0a0a0a"/>
|
|
20
|
+
<rect x="0" y="18" width="56" height="6" fill="#0a0a0a"/>
|
|
21
|
+
<rect x="0" y="32" width="56" height="6" fill="#0a0a0a"/>
|
|
22
|
+
<rect x="0" y="46" width="56" height="6" fill="#0a0a0a"/>
|
|
23
|
+
</g>
|
|
24
|
+
<!-- Back diagonals (top-right to bottom-left) -->
|
|
25
|
+
<g transform="translate(28, 28) scale(1.6) rotate(-45) translate(-28, -28)" opacity="0.5">
|
|
26
|
+
<rect x="0" y="4" width="56" height="6" fill="#0a0a0a"/>
|
|
27
|
+
<rect x="0" y="18" width="56" height="6" fill="#0a0a0a"/>
|
|
28
|
+
<rect x="0" y="32" width="56" height="6" fill="#0a0a0a"/>
|
|
29
|
+
<rect x="0" y="46" width="56" height="6" fill="#0a0a0a"/>
|
|
30
|
+
</g>
|
|
31
|
+
</g>
|
|
32
|
+
|
|
33
|
+
<!-- Main Border -->
|
|
34
|
+
<rect x="0.5" y="0.5" width="55" height="55" stroke="#d1d5db" stroke-width="1" fill="none"/>
|
|
35
|
+
|
|
36
|
+
<!-- Corner Marks -->
|
|
37
|
+
<path d="M 8 4.5 L 4.5 4.5 L 4.5 8" stroke="#9ca3af" stroke-width="1" fill="none" stroke-linecap="square"/>
|
|
38
|
+
<path d="M 48 51.5 L 51.5 51.5 L 51.5 48" stroke="#9ca3af" stroke-width="1" fill="none" stroke-linecap="square"/>
|
|
39
|
+
</svg>
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<svg width="56" height="56" viewBox="0 0 56 56" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<defs>
|
|
3
|
+
<clipPath id="clip-dash">
|
|
4
|
+
<rect width="56" height="56"/>
|
|
5
|
+
</clipPath>
|
|
6
|
+
<pattern id="dots-dash" x="0" y="0" width="3" height="3" patternUnits="userSpaceOnUse">
|
|
7
|
+
<circle cx="1.5" cy="1.5" r="0.5" fill="#000000" fill-opacity="0.03"/>
|
|
8
|
+
</pattern>
|
|
9
|
+
</defs>
|
|
10
|
+
|
|
11
|
+
<!-- Background -->
|
|
12
|
+
<rect width="56" height="56" fill="#ffffff"/>
|
|
13
|
+
<rect width="56" height="56" fill="url(#dots-dash)"/>
|
|
14
|
+
|
|
15
|
+
<!-- Dashed diagonal stripes — same 45° angle as parent but broken into segments -->
|
|
16
|
+
<g clip-path="url(#clip-dash)" opacity="0.9">
|
|
17
|
+
<g transform="translate(28, 28) scale(1.8) rotate(45) translate(-28, -28)">
|
|
18
|
+
<!-- Stripe 1 — dashed -->
|
|
19
|
+
<rect x="0" y="5" width="14" height="10" fill="#0a0a0a"/>
|
|
20
|
+
<rect x="21" y="5" width="14" height="10" fill="#0a0a0a"/>
|
|
21
|
+
<rect x="42" y="5" width="14" height="10" fill="#0a0a0a"/>
|
|
22
|
+
<!-- Stripe 2 — dashed, offset -->
|
|
23
|
+
<rect x="7" y="23" width="14" height="10" fill="#0a0a0a"/>
|
|
24
|
+
<rect x="28" y="23" width="14" height="10" fill="#0a0a0a"/>
|
|
25
|
+
<rect x="49" y="23" width="14" height="10" fill="#0a0a0a"/>
|
|
26
|
+
<!-- Stripe 3 — dashed -->
|
|
27
|
+
<rect x="0" y="41" width="14" height="10" fill="#0a0a0a"/>
|
|
28
|
+
<rect x="21" y="41" width="14" height="10" fill="#0a0a0a"/>
|
|
29
|
+
<rect x="42" y="41" width="14" height="10" fill="#0a0a0a"/>
|
|
30
|
+
</g>
|
|
31
|
+
</g>
|
|
32
|
+
|
|
33
|
+
<!-- Main Border -->
|
|
34
|
+
<rect x="0.5" y="0.5" width="55" height="55" stroke="#d1d5db" stroke-width="1" fill="none"/>
|
|
35
|
+
|
|
36
|
+
<!-- Corner Marks -->
|
|
37
|
+
<path d="M 8 4.5 L 4.5 4.5 L 4.5 8" stroke="#9ca3af" stroke-width="1" fill="none" stroke-linecap="square"/>
|
|
38
|
+
<path d="M 48 51.5 L 51.5 51.5 L 51.5 48" stroke="#9ca3af" stroke-width="1" fill="none" stroke-linecap="square"/>
|
|
39
|
+
</svg>
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
<svg width="56" height="56" viewBox="0 0 56 56" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<defs>
|
|
3
|
+
<clipPath id="clip-hz">
|
|
4
|
+
<rect width="56" height="56"/>
|
|
5
|
+
</clipPath>
|
|
6
|
+
<pattern id="dots-hz" x="0" y="0" width="3" height="3" patternUnits="userSpaceOnUse">
|
|
7
|
+
<circle cx="1.5" cy="1.5" r="0.5" fill="#000000" fill-opacity="0.03"/>
|
|
8
|
+
</pattern>
|
|
9
|
+
</defs>
|
|
10
|
+
|
|
11
|
+
<!-- Background -->
|
|
12
|
+
<rect width="56" height="56" fill="#ffffff"/>
|
|
13
|
+
<rect width="56" height="56" fill="url(#dots-hz)"/>
|
|
14
|
+
|
|
15
|
+
<!-- Horizontal stripes — barcode / scan-line feel -->
|
|
16
|
+
<g clip-path="url(#clip-hz)" opacity="0.9">
|
|
17
|
+
<rect x="0" y="3" width="56" height="8" fill="#0a0a0a"/>
|
|
18
|
+
<rect x="0" y="15" width="56" height="3" fill="#0a0a0a"/>
|
|
19
|
+
<rect x="0" y="22" width="56" height="8" fill="#0a0a0a"/>
|
|
20
|
+
<rect x="0" y="34" width="56" height="3" fill="#0a0a0a"/>
|
|
21
|
+
<rect x="0" y="41" width="56" height="8" fill="#0a0a0a"/>
|
|
22
|
+
<rect x="0" y="53" width="56" height="3" fill="#0a0a0a"/>
|
|
23
|
+
</g>
|
|
24
|
+
|
|
25
|
+
<!-- Main Border -->
|
|
26
|
+
<rect x="0.5" y="0.5" width="55" height="55" stroke="#d1d5db" stroke-width="1" fill="none"/>
|
|
27
|
+
|
|
28
|
+
<!-- Corner Marks -->
|
|
29
|
+
<path d="M 8 4.5 L 4.5 4.5 L 4.5 8" stroke="#9ca3af" stroke-width="1" fill="none" stroke-linecap="square"/>
|
|
30
|
+
<path d="M 48 51.5 L 51.5 51.5 L 51.5 48" stroke="#9ca3af" stroke-width="1" fill="none" stroke-linecap="square"/>
|
|
31
|
+
</svg>
|