auramaxx 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +26 -0
- package/README.md +77 -0
- package/apps/desktop-electron/main.js +428 -0
- package/bin/auramaxx.js +1063 -0
- package/docs/ADAPTERS.md +466 -0
- package/docs/AGENT_SETUP.md +159 -0
- package/docs/API.md +127 -0
- package/docs/APPS.md +199 -0
- package/docs/ARCHITECTURE.md +235 -0
- package/docs/AUTH.md +318 -0
- package/docs/BEST-PRACTICES.md +82 -0
- package/docs/CLI.md +141 -0
- package/docs/DESKTOP_ELECTRON.md +26 -0
- package/docs/DEVELOPING-APPS.md +453 -0
- package/docs/MCP.md +122 -0
- package/docs/PACKAGING_POLICY.md +19 -0
- package/docs/PERMISSION.md +137 -0
- package/docs/PROTOCOL.md +142 -0
- package/docs/README.md +50 -0
- package/docs/SKILLS.md +132 -0
- package/docs/TROUBLESHOOTING.md +376 -0
- package/docs/WORKSPACE.md +673 -0
- package/docs/agent-auth.md +14 -0
- package/docs/api/authentication.md +79 -0
- package/docs/api/secrets/api-keys.md +28 -0
- package/docs/api/secrets/credentials.md +80 -0
- package/docs/api/secrets/sharing.md +48 -0
- package/docs/api/system.md +41 -0
- package/docs/api/wallets/apps-strategies.md +66 -0
- package/docs/api/wallets/core.md +46 -0
- package/docs/api/wallets/data-portfolio.md +42 -0
- package/docs/aura-file.md +48 -0
- package/docs/core-concepts/FEATURES.md +114 -0
- package/docs/credentials.md +120 -0
- package/docs/external/HOW_TO_AURAMAXX/GETTING_SECRETS.md +33 -0
- package/docs/external/HOW_TO_AURAMAXX/README.md +45 -0
- package/docs/external/getting-started.md +10 -0
- package/docs/external/overview.md +19 -0
- package/docs/external/persona-paths.md +7 -0
- package/docs/external/share-secret.md +76 -0
- package/docs/external/why-aura.md +7 -0
- package/docs/security.md +227 -0
- package/docs/templates/RELEASE_NOTES_TEMPLATE.md +22 -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 +28 -0
- package/package.json +167 -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/20260222090000_update_admin_ttl_default/migration.sql +10 -0
- package/prisma/migrations/migration_lock.toml +3 -0
- package/prisma/schema.prisma +447 -0
- package/public/logo.webp +0 -0
- package/scripts/add-app.js +245 -0
- package/server/abi/SwapHelper.json +438 -0
- package/server/cli/approval.ts +447 -0
- package/server/cli/commands/actions.ts +474 -0
- package/server/cli/commands/api.ts +220 -0
- package/server/cli/commands/apikey.ts +277 -0
- package/server/cli/commands/app.ts +204 -0
- package/server/cli/commands/auth.ts +464 -0
- package/server/cli/commands/cron.ts +24 -0
- package/server/cli/commands/diary.ts +274 -0
- package/server/cli/commands/doctor.ts +1247 -0
- package/server/cli/commands/env.ts +476 -0
- package/server/cli/commands/experimental.ts +69 -0
- package/server/cli/commands/init.ts +798 -0
- package/server/cli/commands/lock.ts +157 -0
- package/server/cli/commands/mcp.ts +285 -0
- package/server/cli/commands/quickhack.ts +86 -0
- package/server/cli/commands/release-check.ts +231 -0
- package/server/cli/commands/restore.ts +314 -0
- package/server/cli/commands/service.ts +320 -0
- package/server/cli/commands/shell-hook.ts +512 -0
- package/server/cli/commands/skill.ts +216 -0
- package/server/cli/commands/start.ts +139 -0
- package/server/cli/commands/status.ts +59 -0
- package/server/cli/commands/stop.ts +36 -0
- package/server/cli/commands/token.ts +180 -0
- package/server/cli/commands/unlock.ts +50 -0
- package/server/cli/commands/vault.ts +1323 -0
- package/server/cli/commands/wallet.ts +209 -0
- package/server/cli/index.ts +280 -0
- package/server/cli/lib/approval-poll.ts +94 -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 +280 -0
- package/server/cli/lib/dotenv-migrate.ts +116 -0
- package/server/cli/lib/dotenv-parser.ts +146 -0
- package/server/cli/lib/escalation.ts +57 -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/lock-unlock-helper.ts +71 -0
- package/server/cli/lib/process.ts +162 -0
- package/server/cli/lib/prompt.ts +294 -0
- package/server/cli/lib/theme.ts +240 -0
- package/server/cli/socket.ts +579 -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 +420 -0
- package/server/lib/adapters/factory.ts +119 -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 +419 -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 +258 -0
- package/server/lib/app-installer.ts +505 -0
- package/server/lib/app-tokens.ts +247 -0
- package/server/lib/approval-link.ts +27 -0
- package/server/lib/auth.ts +314 -0
- package/server/lib/auto-execute.ts +160 -0
- package/server/lib/batch.ts +242 -0
- package/server/lib/cold.ts +1048 -0
- package/server/lib/config.ts +408 -0
- package/server/lib/credential-access-audit.ts +85 -0
- package/server/lib/credential-access-policy.ts +111 -0
- package/server/lib/credential-health.ts +343 -0
- package/server/lib/credential-import.ts +608 -0
- package/server/lib/credential-scope.ts +102 -0
- package/server/lib/credential-shares.ts +190 -0
- package/server/lib/credential-transport.ts +533 -0
- package/server/lib/credential-vault.ts +77 -0
- package/server/lib/credentials.ts +422 -0
- package/server/lib/crypto.ts +8 -0
- package/server/lib/db.ts +58 -0
- package/server/lib/defaults.ts +386 -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/diary.ts +34 -0
- package/server/lib/dont-ask-again-policy.ts +41 -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 +114 -0
- package/server/lib/error.ts +20 -0
- package/server/lib/events.ts +217 -0
- package/server/lib/feature-flags.ts +93 -0
- package/server/lib/hot.ts +357 -0
- package/server/lib/human-action-summary.ts +80 -0
- package/server/lib/key-fingerprint.ts +28 -0
- package/server/lib/logger.ts +340 -0
- package/server/lib/network.ts +137 -0
- package/server/lib/notifications.ts +230 -0
- package/server/lib/oauth2-refresh.ts +241 -0
- package/server/lib/oursecret.ts +71 -0
- package/server/lib/passkey-credential.ts +360 -0
- package/server/lib/passkey.ts +68 -0
- package/server/lib/permissions.ts +299 -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 +297 -0
- package/server/lib/resolve-action.ts +328 -0
- package/server/lib/resolve.ts +36 -0
- package/server/lib/secret-gist-share.ts +296 -0
- package/server/lib/sessions.ts +634 -0
- package/server/lib/socket-path.ts +56 -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 +159 -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 +237 -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 +84 -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/update-check.ts +35 -0
- package/server/lib/verified-summary.ts +414 -0
- package/server/lib/view-registry.ts +80 -0
- package/server/mcp/profile-policy.ts +30 -0
- package/server/mcp/server.ts +1589 -0
- package/server/mcp/tools.ts +276 -0
- package/server/middleware/auth.ts +119 -0
- package/server/middleware/requestLogger.ts +84 -0
- package/server/routes/actions.ts +539 -0
- package/server/routes/adapters.ts +711 -0
- package/server/routes/addressbook.ts +113 -0
- package/server/routes/ai.ts +34 -0
- package/server/routes/apikeys.ts +343 -0
- package/server/routes/apps.ts +601 -0
- package/server/routes/auth.ts +406 -0
- package/server/routes/backup.ts +404 -0
- package/server/routes/batch.ts +270 -0
- package/server/routes/bookmarks.ts +162 -0
- package/server/routes/credential-shares.ts +380 -0
- package/server/routes/credential-vaults.ts +159 -0
- package/server/routes/credentials.ts +1782 -0
- package/server/routes/dashboard.ts +97 -0
- package/server/routes/defaults.ts +124 -0
- package/server/routes/flags.ts +11 -0
- package/server/routes/fund.ts +225 -0
- package/server/routes/heartbeat.ts +375 -0
- package/server/routes/import.ts +364 -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 +366 -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 +352 -0
- package/server/routes/swap-solana.ts +176 -0
- package/server/routes/swap.ts +356 -0
- package/server/routes/token.ts +247 -0
- package/server/routes/unlock.ts +467 -0
- package/server/routes/views.ts +41 -0
- package/server/routes/wallet-assets.ts +361 -0
- package/server/routes/wallet-transactions.ts +515 -0
- package/server/routes/wallet.ts +709 -0
- package/server/types.ts +146 -0
- package/shared/credential-field-schema.ts +248 -0
- package/skills/auramaxx/HEARTBEAT.md +78 -0
- package/skills/auramaxx/SKILL.md +745 -0
- package/skills/auramaxx/docs/AGENT_SETUP.md +155 -0
- package/skills/auramaxx/docs/API.md +127 -0
- package/skills/auramaxx/docs/AUTH.md +318 -0
- package/skills/auramaxx/docs/CLI.md +130 -0
- package/skills/auramaxx/docs/MCP.md +122 -0
- package/skills/auramaxx/docs/TROUBLESHOOTING.md +357 -0
- package/skills/auramaxx/docs/WORKSPACE.md +673 -0
- package/skills/auramaxx/docs/security.md +227 -0
- package/skills/task-lifecycle/SKILL.md +378 -0
- package/src/app/api/[...doc]/page.tsx +36 -0
- package/src/app/api/agent-requests/route.ts +30 -0
- package/src/app/api/apps/install/route.ts +132 -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/docs/plain/route.ts +74 -0
- package/src/app/api/events/route.ts +92 -0
- package/src/app/api/page.tsx +290 -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 +40 -0
- package/src/app/api/workspace/config/route.ts +121 -0
- package/src/app/api/workspace/import/route.ts +127 -0
- package/src/app/api/workspace/route.ts +116 -0
- package/src/app/app-legacy-do-not-use/page.tsx +2245 -0
- package/src/app/apple-icon.png +0 -0
- package/src/app/approve/[actionId]/page.tsx +409 -0
- package/src/app/docs/DocsPageContent.tsx +269 -0
- package/src/app/docs/[...doc]/page.tsx +41 -0
- package/src/app/docs/page.tsx +38 -0
- package/src/app/favicon.ico +0 -0
- package/src/app/globals.css +819 -0
- package/src/app/health/page.tsx +5 -0
- package/src/app/hello/page.tsx +102 -0
- package/src/app/icon.png +0 -0
- package/src/app/layout.tsx +39 -0
- package/src/app/page.tsx +1964 -0
- package/src/app/privacy/page.tsx +63 -0
- package/src/app/providers.tsx +87 -0
- package/src/app/share/[token]/page.tsx +295 -0
- package/src/app/terms/page.tsx +80 -0
- package/src/components/ChainSelector.tsx +44 -0
- package/src/components/HumanActionBar.tsx +697 -0
- package/src/components/NotificationDrawer.tsx +387 -0
- package/src/components/PasskeyEnrollmentPrompt.tsx +235 -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 +88 -0
- package/src/components/design-system/ChainIndicator.tsx +65 -0
- package/src/components/design-system/ChainSelector.tsx +147 -0
- package/src/components/design-system/ConfirmationModal.tsx +107 -0
- package/src/components/design-system/ConfirmationPopover.tsx +81 -0
- package/src/components/design-system/DownloadButton.tsx +149 -0
- package/src/components/design-system/Drawer.tsx +133 -0
- package/src/components/design-system/FilterDropdown.tsx +183 -0
- package/src/components/design-system/ItemPicker.tsx +157 -0
- package/src/components/design-system/Modal.tsx +296 -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 +65 -0
- package/src/components/design-system/TyvekCollapsibleSection.tsx +55 -0
- package/src/components/design-system/index.ts +14 -0
- package/src/components/docs/ClientSideMarkdown.tsx +51 -0
- package/src/components/docs/DocsSearchBar.tsx +118 -0
- package/src/components/docs/DocsThemeToggle.tsx +38 -0
- package/src/components/docs/PersistentDocGroup.tsx +91 -0
- package/src/components/docs/ShareUrlButton.tsx +33 -0
- package/src/components/docs/SidebarScrollMemory.tsx +56 -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/CreateViewModal.tsx +88 -0
- package/src/components/layout/LeftRail.tsx +114 -0
- package/src/components/layout/TabBar.tsx +284 -0
- package/src/components/layout/WalletSidebar.tsx +1030 -0
- package/src/components/layout/index.ts +6 -0
- package/src/components/marketing/AuraMaxxSpecOverlay.tsx +653 -0
- package/src/components/marketing/DeviceMorphExperience.tsx +216 -0
- package/src/components/vault/ApiKeysConsole.tsx +1272 -0
- package/src/components/vault/AuditConsole.tsx +600 -0
- package/src/components/vault/CredentialDetail.tsx +625 -0
- package/src/components/vault/CredentialEmpty.tsx +55 -0
- package/src/components/vault/CredentialField.tsx +583 -0
- package/src/components/vault/CredentialForm.tsx +1484 -0
- package/src/components/vault/CredentialList.tsx +265 -0
- package/src/components/vault/CredentialRow.tsx +130 -0
- package/src/components/vault/CredentialShareModal.tsx +273 -0
- package/src/components/vault/CredentialVault.tsx +1662 -0
- package/src/components/vault/CredentialWalletWidget.tsx +103 -0
- package/src/components/vault/DocsConsole.tsx +113 -0
- package/src/components/vault/ImportCredentialsModal.tsx +578 -0
- package/src/components/vault/LargeTypeModal.tsx +88 -0
- package/src/components/vault/PasswordGenerator.tsx +232 -0
- package/src/components/vault/TOTPDisplay.tsx +108 -0
- package/src/components/vault/TotpSetupPanel.tsx +198 -0
- package/src/components/vault/VaultSidebar.tsx +881 -0
- package/src/components/vault/credentialFormName.ts +91 -0
- package/src/components/vault/hooks/useVaultKeyboardShortcuts.ts +69 -0
- package/src/components/vault/types.ts +56 -0
- package/src/context/AuthContext.tsx +365 -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 +4 -0
- package/src/hooks/useAgentActions.ts +552 -0
- package/src/hooks/useBalance.ts +103 -0
- package/src/hooks/useBalances.ts +129 -0
- package/src/hooks/useTheme.ts +156 -0
- package/src/instrumentation.ts +12 -0
- package/src/lib/api-docs.ts +154 -0
- package/src/lib/api.ts +474 -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/credential-field-schema.ts +11 -0
- package/src/lib/crypto.ts +112 -0
- package/src/lib/db.ts +21 -0
- package/src/lib/docs.ts +544 -0
- package/src/lib/events.ts +363 -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/totp-import.ts +57 -0
- package/src/lib/vault-crypto.ts +129 -0
- package/src/lib/view-registry.ts +57 -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 +170 -0
- package/tailwind.config.ts +99 -0
- package/tsconfig.json +42 -0
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
import Link from 'next/link';
|
|
2
|
+
import { headers } from 'next/headers';
|
|
3
|
+
import PersistentDocGroup from '@/components/docs/PersistentDocGroup';
|
|
4
|
+
import DocsThemeToggle from '@/components/docs/DocsThemeToggle';
|
|
5
|
+
import ShareUrlButton from '@/components/docs/ShareUrlButton';
|
|
6
|
+
import ClientSideMarkdown from '@/components/docs/ClientSideMarkdown';
|
|
7
|
+
import SidebarScrollMemory from '@/components/docs/SidebarScrollMemory';
|
|
8
|
+
import DocsSearchBar from '@/components/docs/DocsSearchBar';
|
|
9
|
+
|
|
10
|
+
import {
|
|
11
|
+
README_DOC_FILENAME,
|
|
12
|
+
getDocsHref,
|
|
13
|
+
listDocFiles,
|
|
14
|
+
listDocGroups,
|
|
15
|
+
normalizeRequestedDocFilename,
|
|
16
|
+
readDocFile,
|
|
17
|
+
renderMarkdown,
|
|
18
|
+
} from '@/lib/docs';
|
|
19
|
+
|
|
20
|
+
interface DocsPageContentProps {
|
|
21
|
+
selectedFilename?: string | null;
|
|
22
|
+
searchQuery?: string;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const appendSearchQuery = (href: string, searchQuery: string) => {
|
|
26
|
+
const normalized = searchQuery.trim();
|
|
27
|
+
if (!normalized) return href;
|
|
28
|
+
const params = new URLSearchParams({ query: normalized });
|
|
29
|
+
return `${href}?${params.toString()}`;
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
const docMatchesSearch = (
|
|
33
|
+
doc: { filename: string; title: string; summary: string },
|
|
34
|
+
normalizedQuery: string,
|
|
35
|
+
) => {
|
|
36
|
+
if (!normalizedQuery) return true;
|
|
37
|
+
const haystack = `${doc.filename} ${doc.title} ${doc.summary}`.toLowerCase();
|
|
38
|
+
return haystack.includes(normalizedQuery);
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
const getDocNavLabel = (filename: string, title: string) => {
|
|
42
|
+
if (filename === 'README.md') return 'QUICKSTART';
|
|
43
|
+
const base = filename.split('/').pop() ?? filename;
|
|
44
|
+
if (base.toLowerCase() === 'readme.md') {
|
|
45
|
+
const parent = filename.split('/').slice(-2, -1)[0];
|
|
46
|
+
return parent ? `${parent}` : 'README';
|
|
47
|
+
}
|
|
48
|
+
return base.replace(/\.md$/i, '');
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
const getGroupStorageKey = (label: string) =>
|
|
52
|
+
`docs:sidebar:${label.toLowerCase().replace(/[^a-z0-9]+/g, '-')}`;
|
|
53
|
+
|
|
54
|
+
const shouldHideHomeLink = async () => {
|
|
55
|
+
const requestHeaders = await headers();
|
|
56
|
+
const host = requestHeaders.get('x-forwarded-host') ?? requestHeaders.get('host') ?? '';
|
|
57
|
+
const firstHost = host.split(',')[0]?.trim() ?? '';
|
|
58
|
+
const hostname = firstHost.split(':')[0].toLowerCase();
|
|
59
|
+
return hostname === 'auramaxx.sh';
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
export default async function DocsPageContent({ selectedFilename, searchQuery = '' }: DocsPageContentProps) {
|
|
63
|
+
const hideHomeLink = await shouldHideHomeLink();
|
|
64
|
+
const docs = await listDocFiles();
|
|
65
|
+
const groups = await listDocGroups();
|
|
66
|
+
const normalizedSearch = searchQuery.trim().toLowerCase();
|
|
67
|
+
const normalizedSelected = selectedFilename ? normalizeRequestedDocFilename(selectedFilename) : null;
|
|
68
|
+
const selectedDoc = docs.find((doc) => doc.filename === normalizedSelected) ?? docs[0];
|
|
69
|
+
const filteredGroups = normalizedSearch
|
|
70
|
+
? groups
|
|
71
|
+
.map((group) => ({
|
|
72
|
+
...group,
|
|
73
|
+
docs: group.docs.filter((doc) => docMatchesSearch(doc, normalizedSearch)),
|
|
74
|
+
}))
|
|
75
|
+
.filter((group) => group.docs.length > 0)
|
|
76
|
+
: groups;
|
|
77
|
+
const autoOpenSections = normalizedSearch.length > 0;
|
|
78
|
+
const visibleDocCount = filteredGroups.reduce((count, group) => count + group.docs.length, 0);
|
|
79
|
+
const getDocLinkHref = (filename: string) => appendSearchQuery(getDocsHref(filename), searchQuery);
|
|
80
|
+
const shareUrl = `https://auramaxx.sh${getDocLinkHref(selectedDoc?.filename ?? README_DOC_FILENAME)}`;
|
|
81
|
+
const rawContent = selectedDoc ? await readDocFile(selectedDoc.filename) : '# No docs found';
|
|
82
|
+
const html = renderMarkdown(rawContent, { currentDocFilename: selectedDoc?.filename });
|
|
83
|
+
|
|
84
|
+
return (
|
|
85
|
+
<div className="min-h-screen bg-[var(--color-background,#f4f4f5)] relative p-4 py-8">
|
|
86
|
+
{/* Background matching Sterile Field */}
|
|
87
|
+
<div className="fixed inset-0 pointer-events-none z-0 overflow-hidden">
|
|
88
|
+
{/* Sterile Grid */}
|
|
89
|
+
<div className="absolute inset-0 bg-grid-adaptive bg-[size:4rem_4rem] opacity-30" />
|
|
90
|
+
|
|
91
|
+
{/* Tyvek Texture Overlay */}
|
|
92
|
+
<div className="absolute inset-0 tyvek-texture opacity-40 mix-blend-multiply" />
|
|
93
|
+
|
|
94
|
+
{/* Giant Background Typography */}
|
|
95
|
+
<div className="absolute top-[5%] left-[5%] opacity-5 select-none">
|
|
96
|
+
<h1 className="text-[15vw] font-bold leading-none text-[var(--color-text,#0a0a0a)] font-mono tracking-tighter">
|
|
97
|
+
AURA
|
|
98
|
+
</h1>
|
|
99
|
+
</div>
|
|
100
|
+
<div className="absolute bottom-[5%] right-[5%] opacity-5 select-none">
|
|
101
|
+
<h1 className="text-[15vw] font-bold leading-none text-[var(--color-text,#0a0a0a)] font-mono tracking-tighter text-right">
|
|
102
|
+
MAXXING
|
|
103
|
+
</h1>
|
|
104
|
+
</div>
|
|
105
|
+
|
|
106
|
+
{/* Lab Markings - Corner Finder Patterns */}
|
|
107
|
+
<div className="absolute top-10 left-10 w-32 h-32 border-l-4 border-t-4 border-[var(--color-text,#0a0a0a)] opacity-10">
|
|
108
|
+
<div className="absolute top-2 left-2 w-4 h-4 bg-[var(--color-text,#0a0a0a)]" />
|
|
109
|
+
</div>
|
|
110
|
+
<div className="absolute bottom-10 right-10 w-32 h-32 border-r-4 border-b-4 border-[var(--color-text,#0a0a0a)] opacity-10 flex items-end justify-end">
|
|
111
|
+
<div className="absolute bottom-2 right-2 w-4 h-4 bg-[var(--color-text,#0a0a0a)]" />
|
|
112
|
+
</div>
|
|
113
|
+
</div>
|
|
114
|
+
|
|
115
|
+
{/* Logo header */}
|
|
116
|
+
<Link
|
|
117
|
+
href="/"
|
|
118
|
+
className="fixed top-4 left-4 sm:top-6 sm:left-6 z-30 flex items-center gap-2 sm:gap-3 hover:opacity-80 transition-opacity"
|
|
119
|
+
>
|
|
120
|
+
<div className="w-8 h-8 sm:w-10 sm:h-10">
|
|
121
|
+
<img src="/logo.webp" alt="AuraMaxx" className="w-full h-full object-contain" />
|
|
122
|
+
</div>
|
|
123
|
+
<div className="hidden sm:block font-black text-xl tracking-tighter text-[var(--color-text,#0a0a0a)]">AURAMAXX</div>
|
|
124
|
+
</Link>
|
|
125
|
+
|
|
126
|
+
{/* Nav */}
|
|
127
|
+
<div className="fixed top-5 right-4 sm:top-7 sm:right-6 z-30 flex items-center gap-2 sm:gap-3 font-mono text-[9px] sm:text-[10px] tracking-widest">
|
|
128
|
+
<Link href="/api" className="text-[var(--color-text-muted,#6b7280)] hover:text-[var(--color-text,#0a0a0a)] transition-colors">API</Link>
|
|
129
|
+
{!hideHomeLink && (
|
|
130
|
+
<Link href="/" className="text-[var(--color-text-muted,#6b7280)] hover:text-[var(--color-text,#0a0a0a)] transition-colors">HOME</Link>
|
|
131
|
+
)}
|
|
132
|
+
<a href="https://github.com/Aura-Industry/auramaxx" target="_blank" rel="noopener noreferrer" className="text-[var(--color-text-muted,#6b7280)] hover:text-[var(--color-text,#0a0a0a)] transition-colors">GITHUB</a>
|
|
133
|
+
<a href="https://x.com/npxauramaxx" target="_blank" rel="noopener noreferrer" className="text-[var(--color-text-muted,#6b7280)] hover:text-[var(--color-text,#0a0a0a)] transition-colors">X</a>
|
|
134
|
+
<a href="https://x.com/hi_im_nico" target="_blank" rel="noopener noreferrer" className="text-[var(--color-text-muted,#6b7280)] hover:text-[var(--color-text,#0a0a0a)] transition-colors">HELP</a>
|
|
135
|
+
<DocsThemeToggle />
|
|
136
|
+
</div>
|
|
137
|
+
|
|
138
|
+
<div className="relative z-[5] max-w-[1400px] mx-auto pt-16">
|
|
139
|
+
<div className="grid gap-4 md:grid-cols-[240px_minmax(0,1fr)]">
|
|
140
|
+
{/* Sidebar (sticky) */}
|
|
141
|
+
<aside className="font-mono">
|
|
142
|
+
<div id="docs-sidebar-scroll-container" className="md:sticky md:top-20 md:max-h-[calc(100vh-6rem)] md:overflow-y-auto">
|
|
143
|
+
<SidebarScrollMemory containerId="docs-sidebar-scroll-container" storageKey="docs:sidebar:scroll" />
|
|
144
|
+
<details open className="group sidebar-always-open bg-[var(--color-surface,#f4f4f2)] border border-[var(--color-border,#d4d4d8)] shadow-lg overflow-hidden font-mono">
|
|
145
|
+
<summary className="px-4 py-3 border-b border-[var(--color-border,#d4d4d8)] bg-[var(--color-surface-alt,#fafafa)] flex items-center justify-between cursor-pointer md:cursor-default list-none [&::-webkit-details-marker]:hidden">
|
|
146
|
+
<Link href="/docs" className="font-sans font-bold text-sm text-[var(--color-text,#0a0a0a)] uppercase tracking-tight hover:opacity-70 transition-opacity">Index</Link>
|
|
147
|
+
<span className="flex items-center gap-2">
|
|
148
|
+
<span className="text-[9px] text-[var(--color-text-faint,#9ca3af)] font-bold">QTY: {visibleDocCount.toString().padStart(3, '0')}</span>
|
|
149
|
+
<svg className="w-3 h-3 text-[var(--color-text-muted,#6b7280)] transition-transform group-open:rotate-180 md:hidden" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2"><path d="M6 9l6 6 6-6" /></svg>
|
|
150
|
+
</span>
|
|
151
|
+
</summary>
|
|
152
|
+
<div className="p-3 space-y-4">
|
|
153
|
+
{filteredGroups.map((group) => (
|
|
154
|
+
group.docs.some((doc) => doc.filename === README_DOC_FILENAME) ? (
|
|
155
|
+
<div key={group.label}>
|
|
156
|
+
<div className="text-[8px] text-[var(--color-text-faint,#9ca3af)] tracking-widest mb-1 px-1 uppercase">{group.label}</div>
|
|
157
|
+
<div className="space-y-0.5">
|
|
158
|
+
{group.docs.map((doc) => {
|
|
159
|
+
const isActive = selectedDoc?.filename === doc.filename;
|
|
160
|
+
return (
|
|
161
|
+
<Link
|
|
162
|
+
key={doc.filename}
|
|
163
|
+
href={getDocLinkHref(doc.filename)}
|
|
164
|
+
className={`block px-3 py-1.5 text-[11px] uppercase transition-colors border ${
|
|
165
|
+
isActive
|
|
166
|
+
? 'border-[var(--color-border,#d4d4d8)] bg-[var(--color-text,#0a0a0a)] text-[var(--color-surface,#ffffff)]'
|
|
167
|
+
: 'border-transparent hover:border-[var(--color-border-muted,#e5e5e5)] hover:bg-[var(--color-surface-alt,#fafafa)] text-[var(--color-text-muted,#6b7280)]'
|
|
168
|
+
}`}
|
|
169
|
+
>
|
|
170
|
+
{getDocNavLabel(doc.filename, doc.title)}
|
|
171
|
+
</Link>
|
|
172
|
+
);
|
|
173
|
+
})}
|
|
174
|
+
</div>
|
|
175
|
+
</div>
|
|
176
|
+
) : (
|
|
177
|
+
<PersistentDocGroup
|
|
178
|
+
key={group.label}
|
|
179
|
+
storageKey={getGroupStorageKey(group.label)}
|
|
180
|
+
label={group.label}
|
|
181
|
+
forceOpen={autoOpenSections}
|
|
182
|
+
>
|
|
183
|
+
{group.docs.map((doc) => {
|
|
184
|
+
const isActive = selectedDoc?.filename === doc.filename;
|
|
185
|
+
return (
|
|
186
|
+
<Link
|
|
187
|
+
key={doc.filename}
|
|
188
|
+
href={getDocLinkHref(doc.filename)}
|
|
189
|
+
className={`block px-3 py-1.5 text-[11px] uppercase transition-colors border ${
|
|
190
|
+
isActive
|
|
191
|
+
? 'border-[var(--color-border,#d4d4d8)] bg-[var(--color-text,#0a0a0a)] text-[var(--color-surface,#ffffff)]'
|
|
192
|
+
: 'border-transparent hover:border-[var(--color-border-muted,#e5e5e5)] hover:bg-[var(--color-surface-alt,#fafafa)] text-[var(--color-text-muted,#6b7280)]'
|
|
193
|
+
}`}
|
|
194
|
+
>
|
|
195
|
+
{getDocNavLabel(doc.filename, doc.title)}
|
|
196
|
+
</Link>
|
|
197
|
+
);
|
|
198
|
+
})}
|
|
199
|
+
</PersistentDocGroup>
|
|
200
|
+
)
|
|
201
|
+
))}
|
|
202
|
+
|
|
203
|
+
{filteredGroups.length === 0 && (
|
|
204
|
+
<div className="px-1 py-2 text-[9px] text-[var(--color-text-muted,#6b7280)]">
|
|
205
|
+
No docs found for "{searchQuery}".
|
|
206
|
+
</div>
|
|
207
|
+
)}
|
|
208
|
+
|
|
209
|
+
{/* REFERENCE — links to dedicated /api page */}
|
|
210
|
+
<div>
|
|
211
|
+
<div className="text-[8px] text-[var(--color-text-faint,#9ca3af)] tracking-widest mb-1 px-1">REFERENCE</div>
|
|
212
|
+
<Link
|
|
213
|
+
href="/api"
|
|
214
|
+
className="flex items-center gap-2 px-3 py-1.5 text-[11px] border border-transparent hover:border-[var(--color-border-muted,#e5e5e5)] hover:bg-[var(--color-surface-alt,#fafafa)] text-[var(--color-text-muted,#6b7280)] transition-colors"
|
|
215
|
+
>
|
|
216
|
+
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" /><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" /></svg>
|
|
217
|
+
API ENDPOINTS
|
|
218
|
+
</Link>
|
|
219
|
+
</div>
|
|
220
|
+
</div>
|
|
221
|
+
{/* Barcode + Stripe */}
|
|
222
|
+
<div className="flex items-center gap-3 px-4 py-2 border-t border-[var(--color-border,#d4d4d8)]">
|
|
223
|
+
<div className="h-4 flex-1 bg-[repeating-linear-gradient(90deg,var(--color-text,#000),var(--color-text,#000)_1px,transparent_1px,transparent_3px)] opacity-30" />
|
|
224
|
+
</div>
|
|
225
|
+
<div className="h-2 w-full" style={{
|
|
226
|
+
backgroundImage: 'repeating-linear-gradient(45deg, var(--color-text, #000), var(--color-text, #000) 5px, transparent 5px, transparent 10px)',
|
|
227
|
+
opacity: 0.1,
|
|
228
|
+
}} />
|
|
229
|
+
</details>
|
|
230
|
+
</div>
|
|
231
|
+
</aside>
|
|
232
|
+
|
|
233
|
+
{/* Content */}
|
|
234
|
+
<div className="bg-[var(--color-surface,#f4f4f2)] border border-[var(--color-border,#d4d4d8)] shadow-lg overflow-hidden font-mono">
|
|
235
|
+
<div className="px-4 py-3 border-b border-[var(--color-border,#d4d4d8)] bg-[var(--color-surface-alt,#fafafa)] flex items-center justify-between">
|
|
236
|
+
<span className="font-sans font-bold text-sm text-[var(--color-text,#0a0a0a)] uppercase tracking-tight">
|
|
237
|
+
{selectedDoc?.title ?? 'Documentation'}
|
|
238
|
+
</span>
|
|
239
|
+
<div className="flex items-center gap-2">
|
|
240
|
+
<span className="text-[9px] text-[var(--color-text-muted,#6b7280)]">{selectedDoc?.filename}</span>
|
|
241
|
+
<ShareUrlButton url={shareUrl} />
|
|
242
|
+
</div>
|
|
243
|
+
</div>
|
|
244
|
+
|
|
245
|
+
<ClientSideMarkdown className="p-5 prose-mono" html={html} />
|
|
246
|
+
|
|
247
|
+
{/* Footer */}
|
|
248
|
+
<div className="px-4 py-2 border-t border-[var(--color-border,#d4d4d8)] bg-[var(--color-surface-alt,#fafafa)]">
|
|
249
|
+
<div className="text-[8px] text-[var(--color-text-faint,#9ca3af)] uppercase tracking-wider mb-1">DOCUMENT REFERENCE</div>
|
|
250
|
+
<div className="text-[9px] text-[var(--color-text,#0a0a0a)] font-bold">{selectedDoc?.filename}</div>
|
|
251
|
+
</div>
|
|
252
|
+
|
|
253
|
+
{/* Barcode + Stripe */}
|
|
254
|
+
<div className="flex items-center gap-3 px-4 py-2 border-t border-[var(--color-border,#d4d4d8)]">
|
|
255
|
+
<div className="h-4 flex-1 bg-[repeating-linear-gradient(90deg,var(--color-text,#000),var(--color-text,#000)_1px,transparent_1px,transparent_3px)] opacity-30" />
|
|
256
|
+
<span className="text-[8px] text-[var(--color-text-faint,#9ca3af)] tracking-wider">AURAMAXX</span>
|
|
257
|
+
</div>
|
|
258
|
+
<div className="h-2 w-full" style={{
|
|
259
|
+
backgroundImage: 'repeating-linear-gradient(45deg, var(--color-text, #000), var(--color-text, #000) 5px, transparent 5px, transparent 10px)',
|
|
260
|
+
opacity: 0.1,
|
|
261
|
+
}} />
|
|
262
|
+
</div>
|
|
263
|
+
</div>
|
|
264
|
+
</div>
|
|
265
|
+
|
|
266
|
+
<DocsSearchBar initialQuery={searchQuery} />
|
|
267
|
+
</div>
|
|
268
|
+
);
|
|
269
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { redirect } from 'next/navigation';
|
|
2
|
+
import DocsPageContent from '../DocsPageContent';
|
|
3
|
+
import { getDocsHref, parseDocFilenameFromRouteSegments } from '@/lib/docs';
|
|
4
|
+
|
|
5
|
+
interface DocsByPathPageProps {
|
|
6
|
+
params: Promise<{
|
|
7
|
+
doc: string[];
|
|
8
|
+
}>;
|
|
9
|
+
searchParams?: Promise<{
|
|
10
|
+
query?: string | string[];
|
|
11
|
+
q?: string | string[];
|
|
12
|
+
}>;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const resolveQueryParam = (value?: string | string[]) => {
|
|
16
|
+
if (!value) return '';
|
|
17
|
+
const resolved = Array.isArray(value) ? value[0] : value;
|
|
18
|
+
return resolved.trim();
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const appendSearchQuery = (href: string, searchQuery: string) => {
|
|
22
|
+
const normalized = searchQuery.trim();
|
|
23
|
+
if (!normalized) return href;
|
|
24
|
+
const params = new URLSearchParams({ query: normalized });
|
|
25
|
+
return `${href}?${params.toString()}`;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export default async function DocsByPathPage({ params, searchParams }: DocsByPathPageProps) {
|
|
29
|
+
const resolvedParams = await params;
|
|
30
|
+
const resolvedSearchParams = searchParams ? await searchParams : undefined;
|
|
31
|
+
const searchQuery = resolveQueryParam(resolvedSearchParams?.query) || resolveQueryParam(resolvedSearchParams?.q);
|
|
32
|
+
const selectedFilename = parseDocFilenameFromRouteSegments(resolvedParams.doc ?? []);
|
|
33
|
+
const canonicalHref = getDocsHref(selectedFilename);
|
|
34
|
+
const currentHref = `/docs/${(resolvedParams.doc ?? []).map((segment) => encodeURIComponent(segment)).join('/')}`;
|
|
35
|
+
|
|
36
|
+
if (canonicalHref !== currentHref) {
|
|
37
|
+
redirect(appendSearchQuery(canonicalHref, searchQuery));
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
return <DocsPageContent selectedFilename={selectedFilename} searchQuery={searchQuery} />;
|
|
41
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { redirect } from 'next/navigation';
|
|
2
|
+
import DocsPageContent from './DocsPageContent';
|
|
3
|
+
import { getDocsHref, normalizeRequestedDocFilename } from '@/lib/docs';
|
|
4
|
+
|
|
5
|
+
interface DocsPageProps {
|
|
6
|
+
searchParams?: Promise<{
|
|
7
|
+
doc?: string | string[];
|
|
8
|
+
query?: string | string[];
|
|
9
|
+
q?: string | string[];
|
|
10
|
+
}>;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const resolveDocParam = (value?: string | string[]) => {
|
|
14
|
+
if (!value) return null;
|
|
15
|
+
return Array.isArray(value) ? value[0] : value;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
const resolveSearchQuery = (value?: string | string[]) => {
|
|
19
|
+
const resolved = resolveDocParam(value);
|
|
20
|
+
return resolved ? resolved.trim() : '';
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
const appendSearchQuery = (href: string, searchQuery: string) => {
|
|
24
|
+
const normalized = searchQuery.trim();
|
|
25
|
+
if (!normalized) return href;
|
|
26
|
+
const params = new URLSearchParams({ query: normalized });
|
|
27
|
+
return `${href}?${params.toString()}`;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export default async function DocsPage({ searchParams }: DocsPageProps) {
|
|
31
|
+
const resolvedSearchParams = searchParams ? await searchParams : undefined;
|
|
32
|
+
const selected = resolveDocParam(resolvedSearchParams?.doc);
|
|
33
|
+
const searchQuery = resolveSearchQuery(resolvedSearchParams?.query) || resolveSearchQuery(resolvedSearchParams?.q);
|
|
34
|
+
if (selected) {
|
|
35
|
+
redirect(appendSearchQuery(getDocsHref(normalizeRequestedDocFilename(selected)), searchQuery));
|
|
36
|
+
}
|
|
37
|
+
return <DocsPageContent searchQuery={searchQuery} />;
|
|
38
|
+
}
|
|
Binary file
|