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.
Files changed (418) hide show
  1. package/LICENSE +26 -0
  2. package/README.md +77 -0
  3. package/apps/desktop-electron/main.js +428 -0
  4. package/bin/auramaxx.js +1063 -0
  5. package/docs/ADAPTERS.md +466 -0
  6. package/docs/AGENT_SETUP.md +159 -0
  7. package/docs/API.md +127 -0
  8. package/docs/APPS.md +199 -0
  9. package/docs/ARCHITECTURE.md +235 -0
  10. package/docs/AUTH.md +318 -0
  11. package/docs/BEST-PRACTICES.md +82 -0
  12. package/docs/CLI.md +141 -0
  13. package/docs/DESKTOP_ELECTRON.md +26 -0
  14. package/docs/DEVELOPING-APPS.md +453 -0
  15. package/docs/MCP.md +122 -0
  16. package/docs/PACKAGING_POLICY.md +19 -0
  17. package/docs/PERMISSION.md +137 -0
  18. package/docs/PROTOCOL.md +142 -0
  19. package/docs/README.md +50 -0
  20. package/docs/SKILLS.md +132 -0
  21. package/docs/TROUBLESHOOTING.md +376 -0
  22. package/docs/WORKSPACE.md +673 -0
  23. package/docs/agent-auth.md +14 -0
  24. package/docs/api/authentication.md +79 -0
  25. package/docs/api/secrets/api-keys.md +28 -0
  26. package/docs/api/secrets/credentials.md +80 -0
  27. package/docs/api/secrets/sharing.md +48 -0
  28. package/docs/api/system.md +41 -0
  29. package/docs/api/wallets/apps-strategies.md +66 -0
  30. package/docs/api/wallets/core.md +46 -0
  31. package/docs/api/wallets/data-portfolio.md +42 -0
  32. package/docs/aura-file.md +48 -0
  33. package/docs/core-concepts/FEATURES.md +114 -0
  34. package/docs/credentials.md +120 -0
  35. package/docs/external/HOW_TO_AURAMAXX/GETTING_SECRETS.md +33 -0
  36. package/docs/external/HOW_TO_AURAMAXX/README.md +45 -0
  37. package/docs/external/getting-started.md +10 -0
  38. package/docs/external/overview.md +19 -0
  39. package/docs/external/persona-paths.md +7 -0
  40. package/docs/external/share-secret.md +76 -0
  41. package/docs/external/why-aura.md +7 -0
  42. package/docs/security.md +227 -0
  43. package/docs/templates/RELEASE_NOTES_TEMPLATE.md +22 -0
  44. package/docs/wallet/AI.md +508 -0
  45. package/docs/wallet/DEVELOPING-STRATEGIES.md +713 -0
  46. package/docs/wallet/README.md +47 -0
  47. package/docs/wallet/STRATEGY.md +89 -0
  48. package/next.config.ts +28 -0
  49. package/package.json +167 -0
  50. package/postcss.config.mjs +8 -0
  51. package/prisma/migrations/20260214170000_baseline/migration.sql +511 -0
  52. package/prisma/migrations/20260216214537_add_passkey_model/migration.sql +18 -0
  53. package/prisma/migrations/20260217150500_add_credential_access_audit/migration.sql +31 -0
  54. package/prisma/migrations/20260222090000_update_admin_ttl_default/migration.sql +10 -0
  55. package/prisma/migrations/migration_lock.toml +3 -0
  56. package/prisma/schema.prisma +447 -0
  57. package/public/logo.webp +0 -0
  58. package/scripts/add-app.js +245 -0
  59. package/server/abi/SwapHelper.json +438 -0
  60. package/server/cli/approval.ts +447 -0
  61. package/server/cli/commands/actions.ts +474 -0
  62. package/server/cli/commands/api.ts +220 -0
  63. package/server/cli/commands/apikey.ts +277 -0
  64. package/server/cli/commands/app.ts +204 -0
  65. package/server/cli/commands/auth.ts +464 -0
  66. package/server/cli/commands/cron.ts +24 -0
  67. package/server/cli/commands/diary.ts +274 -0
  68. package/server/cli/commands/doctor.ts +1247 -0
  69. package/server/cli/commands/env.ts +476 -0
  70. package/server/cli/commands/experimental.ts +69 -0
  71. package/server/cli/commands/init.ts +798 -0
  72. package/server/cli/commands/lock.ts +157 -0
  73. package/server/cli/commands/mcp.ts +285 -0
  74. package/server/cli/commands/quickhack.ts +86 -0
  75. package/server/cli/commands/release-check.ts +231 -0
  76. package/server/cli/commands/restore.ts +314 -0
  77. package/server/cli/commands/service.ts +320 -0
  78. package/server/cli/commands/shell-hook.ts +512 -0
  79. package/server/cli/commands/skill.ts +216 -0
  80. package/server/cli/commands/start.ts +139 -0
  81. package/server/cli/commands/status.ts +59 -0
  82. package/server/cli/commands/stop.ts +36 -0
  83. package/server/cli/commands/token.ts +180 -0
  84. package/server/cli/commands/unlock.ts +50 -0
  85. package/server/cli/commands/vault.ts +1323 -0
  86. package/server/cli/commands/wallet.ts +209 -0
  87. package/server/cli/index.ts +280 -0
  88. package/server/cli/lib/approval-poll.ts +94 -0
  89. package/server/cli/lib/aura-parser.ts +64 -0
  90. package/server/cli/lib/credential-create.ts +74 -0
  91. package/server/cli/lib/credential-resolve.ts +280 -0
  92. package/server/cli/lib/dotenv-migrate.ts +116 -0
  93. package/server/cli/lib/dotenv-parser.ts +146 -0
  94. package/server/cli/lib/escalation.ts +57 -0
  95. package/server/cli/lib/http.ts +91 -0
  96. package/server/cli/lib/init-steps.ts +76 -0
  97. package/server/cli/lib/local-agent-trust.ts +45 -0
  98. package/server/cli/lib/lock-unlock-helper.ts +71 -0
  99. package/server/cli/lib/process.ts +162 -0
  100. package/server/cli/lib/prompt.ts +294 -0
  101. package/server/cli/lib/theme.ts +240 -0
  102. package/server/cli/socket.ts +579 -0
  103. package/server/cli/transport-client.ts +50 -0
  104. package/server/cron/index.ts +137 -0
  105. package/server/cron/job.ts +31 -0
  106. package/server/cron/jobs/balance-sync.ts +436 -0
  107. package/server/cron/jobs/incoming-scan.ts +506 -0
  108. package/server/cron/jobs/native-price.ts +70 -0
  109. package/server/cron/jobs/orphan-cleanup.ts +40 -0
  110. package/server/cron/jobs/strategy-runner.ts +175 -0
  111. package/server/cron/scheduler.ts +125 -0
  112. package/server/index.ts +420 -0
  113. package/server/lib/adapters/factory.ts +119 -0
  114. package/server/lib/adapters/index.ts +19 -0
  115. package/server/lib/adapters/router.ts +297 -0
  116. package/server/lib/adapters/telegram.ts +645 -0
  117. package/server/lib/adapters/types.ts +89 -0
  118. package/server/lib/adapters/webhook.ts +95 -0
  119. package/server/lib/address.ts +49 -0
  120. package/server/lib/agent-auth/contracts.ts +1194 -0
  121. package/server/lib/agent-profiles.ts +419 -0
  122. package/server/lib/ai.ts +285 -0
  123. package/server/lib/api-registry/contracts.ts +86 -0
  124. package/server/lib/api-registry/validation.ts +172 -0
  125. package/server/lib/apikey-migration.ts +258 -0
  126. package/server/lib/app-installer.ts +505 -0
  127. package/server/lib/app-tokens.ts +247 -0
  128. package/server/lib/approval-link.ts +27 -0
  129. package/server/lib/auth.ts +314 -0
  130. package/server/lib/auto-execute.ts +160 -0
  131. package/server/lib/batch.ts +242 -0
  132. package/server/lib/cold.ts +1048 -0
  133. package/server/lib/config.ts +408 -0
  134. package/server/lib/credential-access-audit.ts +85 -0
  135. package/server/lib/credential-access-policy.ts +111 -0
  136. package/server/lib/credential-health.ts +343 -0
  137. package/server/lib/credential-import.ts +608 -0
  138. package/server/lib/credential-scope.ts +102 -0
  139. package/server/lib/credential-shares.ts +190 -0
  140. package/server/lib/credential-transport.ts +533 -0
  141. package/server/lib/credential-vault.ts +77 -0
  142. package/server/lib/credentials.ts +422 -0
  143. package/server/lib/crypto.ts +8 -0
  144. package/server/lib/db.ts +58 -0
  145. package/server/lib/defaults.ts +386 -0
  146. package/server/lib/dex/index.ts +80 -0
  147. package/server/lib/dex/relay.ts +235 -0
  148. package/server/lib/dex/types.ts +59 -0
  149. package/server/lib/dex/uniswap.ts +370 -0
  150. package/server/lib/diary.ts +34 -0
  151. package/server/lib/dont-ask-again-policy.ts +41 -0
  152. package/server/lib/e2e-agent/artifacts.ts +36 -0
  153. package/server/lib/e2e-agent/contracts.ts +112 -0
  154. package/server/lib/e2e-agent/validation.ts +135 -0
  155. package/server/lib/encrypt.ts +114 -0
  156. package/server/lib/error.ts +20 -0
  157. package/server/lib/events.ts +217 -0
  158. package/server/lib/feature-flags.ts +93 -0
  159. package/server/lib/hot.ts +357 -0
  160. package/server/lib/human-action-summary.ts +80 -0
  161. package/server/lib/key-fingerprint.ts +28 -0
  162. package/server/lib/logger.ts +340 -0
  163. package/server/lib/network.ts +137 -0
  164. package/server/lib/notifications.ts +230 -0
  165. package/server/lib/oauth2-refresh.ts +241 -0
  166. package/server/lib/oursecret.ts +71 -0
  167. package/server/lib/passkey-credential.ts +360 -0
  168. package/server/lib/passkey.ts +68 -0
  169. package/server/lib/permissions.ts +299 -0
  170. package/server/lib/pino.ts +24 -0
  171. package/server/lib/policy-preview.ts +138 -0
  172. package/server/lib/price.ts +338 -0
  173. package/server/lib/prices.ts +34 -0
  174. package/server/lib/project-scope.ts +297 -0
  175. package/server/lib/resolve-action.ts +328 -0
  176. package/server/lib/resolve.ts +36 -0
  177. package/server/lib/secret-gist-share.ts +296 -0
  178. package/server/lib/sessions.ts +634 -0
  179. package/server/lib/socket-path.ts +56 -0
  180. package/server/lib/solana/connection.ts +26 -0
  181. package/server/lib/solana/jupiter.ts +128 -0
  182. package/server/lib/solana/transfer.ts +108 -0
  183. package/server/lib/solana/wallet.ts +136 -0
  184. package/server/lib/strategy/emits.ts +21 -0
  185. package/server/lib/strategy/engine.ts +1305 -0
  186. package/server/lib/strategy/executor.ts +115 -0
  187. package/server/lib/strategy/hook-context.ts +159 -0
  188. package/server/lib/strategy/hooks.ts +990 -0
  189. package/server/lib/strategy/index.ts +28 -0
  190. package/server/lib/strategy/installer.ts +305 -0
  191. package/server/lib/strategy/loader.ts +256 -0
  192. package/server/lib/strategy/message.ts +237 -0
  193. package/server/lib/strategy/repository.ts +218 -0
  194. package/server/lib/strategy/session-logger.ts +693 -0
  195. package/server/lib/strategy/sources.ts +288 -0
  196. package/server/lib/strategy/state.ts +189 -0
  197. package/server/lib/strategy/templates.ts +403 -0
  198. package/server/lib/strategy/tick.ts +404 -0
  199. package/server/lib/strategy/types.ts +230 -0
  200. package/server/lib/swap.ts +3 -0
  201. package/server/lib/temp.ts +86 -0
  202. package/server/lib/token-metadata.ts +86 -0
  203. package/server/lib/token-safety.ts +200 -0
  204. package/server/lib/token-search.ts +444 -0
  205. package/server/lib/totp.ts +194 -0
  206. package/server/lib/transactions.ts +123 -0
  207. package/server/lib/transport.ts +84 -0
  208. package/server/lib/txhistory/decoder.ts +262 -0
  209. package/server/lib/txhistory/enricher.ts +652 -0
  210. package/server/lib/txhistory/index.ts +391 -0
  211. package/server/lib/txhistory/signatures.ts +59 -0
  212. package/server/lib/update-check.ts +35 -0
  213. package/server/lib/verified-summary.ts +414 -0
  214. package/server/lib/view-registry.ts +80 -0
  215. package/server/mcp/profile-policy.ts +30 -0
  216. package/server/mcp/server.ts +1589 -0
  217. package/server/mcp/tools.ts +276 -0
  218. package/server/middleware/auth.ts +119 -0
  219. package/server/middleware/requestLogger.ts +84 -0
  220. package/server/routes/actions.ts +539 -0
  221. package/server/routes/adapters.ts +711 -0
  222. package/server/routes/addressbook.ts +113 -0
  223. package/server/routes/ai.ts +34 -0
  224. package/server/routes/apikeys.ts +343 -0
  225. package/server/routes/apps.ts +601 -0
  226. package/server/routes/auth.ts +406 -0
  227. package/server/routes/backup.ts +404 -0
  228. package/server/routes/batch.ts +270 -0
  229. package/server/routes/bookmarks.ts +162 -0
  230. package/server/routes/credential-shares.ts +380 -0
  231. package/server/routes/credential-vaults.ts +159 -0
  232. package/server/routes/credentials.ts +1782 -0
  233. package/server/routes/dashboard.ts +97 -0
  234. package/server/routes/defaults.ts +124 -0
  235. package/server/routes/flags.ts +11 -0
  236. package/server/routes/fund.ts +225 -0
  237. package/server/routes/heartbeat.ts +375 -0
  238. package/server/routes/import.ts +364 -0
  239. package/server/routes/launch.ts +665 -0
  240. package/server/routes/lock.ts +54 -0
  241. package/server/routes/logs.ts +68 -0
  242. package/server/routes/nuke.ts +111 -0
  243. package/server/routes/passkey-credentials.ts +99 -0
  244. package/server/routes/passkey.ts +366 -0
  245. package/server/routes/portfolio.ts +217 -0
  246. package/server/routes/price.ts +63 -0
  247. package/server/routes/resolve.ts +31 -0
  248. package/server/routes/security.ts +45 -0
  249. package/server/routes/send-evm.ts +241 -0
  250. package/server/routes/send-solana.ts +281 -0
  251. package/server/routes/send.ts +178 -0
  252. package/server/routes/setup.ts +210 -0
  253. package/server/routes/strategy.ts +894 -0
  254. package/server/routes/swap-evm.ts +352 -0
  255. package/server/routes/swap-solana.ts +176 -0
  256. package/server/routes/swap.ts +356 -0
  257. package/server/routes/token.ts +247 -0
  258. package/server/routes/unlock.ts +467 -0
  259. package/server/routes/views.ts +41 -0
  260. package/server/routes/wallet-assets.ts +361 -0
  261. package/server/routes/wallet-transactions.ts +515 -0
  262. package/server/routes/wallet.ts +709 -0
  263. package/server/types.ts +146 -0
  264. package/shared/credential-field-schema.ts +248 -0
  265. package/skills/auramaxx/HEARTBEAT.md +78 -0
  266. package/skills/auramaxx/SKILL.md +745 -0
  267. package/skills/auramaxx/docs/AGENT_SETUP.md +155 -0
  268. package/skills/auramaxx/docs/API.md +127 -0
  269. package/skills/auramaxx/docs/AUTH.md +318 -0
  270. package/skills/auramaxx/docs/CLI.md +130 -0
  271. package/skills/auramaxx/docs/MCP.md +122 -0
  272. package/skills/auramaxx/docs/TROUBLESHOOTING.md +357 -0
  273. package/skills/auramaxx/docs/WORKSPACE.md +673 -0
  274. package/skills/auramaxx/docs/security.md +227 -0
  275. package/skills/task-lifecycle/SKILL.md +378 -0
  276. package/src/app/api/[...doc]/page.tsx +36 -0
  277. package/src/app/api/agent-requests/route.ts +30 -0
  278. package/src/app/api/apps/install/route.ts +132 -0
  279. package/src/app/api/apps/manifests/route.ts +16 -0
  280. package/src/app/api/apps/static/[...path]/route.ts +57 -0
  281. package/src/app/api/docs/plain/route.ts +74 -0
  282. package/src/app/api/events/route.ts +92 -0
  283. package/src/app/api/page.tsx +290 -0
  284. package/src/app/api/workspace/[id]/apps/[wid]/route.ts +119 -0
  285. package/src/app/api/workspace/[id]/apps/route.ts +81 -0
  286. package/src/app/api/workspace/[id]/export/route.ts +67 -0
  287. package/src/app/api/workspace/[id]/route.ts +168 -0
  288. package/src/app/api/workspace/auth.ts +40 -0
  289. package/src/app/api/workspace/config/route.ts +121 -0
  290. package/src/app/api/workspace/import/route.ts +127 -0
  291. package/src/app/api/workspace/route.ts +116 -0
  292. package/src/app/app-legacy-do-not-use/page.tsx +2245 -0
  293. package/src/app/apple-icon.png +0 -0
  294. package/src/app/approve/[actionId]/page.tsx +409 -0
  295. package/src/app/docs/DocsPageContent.tsx +269 -0
  296. package/src/app/docs/[...doc]/page.tsx +41 -0
  297. package/src/app/docs/page.tsx +38 -0
  298. package/src/app/favicon.ico +0 -0
  299. package/src/app/globals.css +819 -0
  300. package/src/app/health/page.tsx +5 -0
  301. package/src/app/hello/page.tsx +102 -0
  302. package/src/app/icon.png +0 -0
  303. package/src/app/layout.tsx +39 -0
  304. package/src/app/page.tsx +1964 -0
  305. package/src/app/privacy/page.tsx +63 -0
  306. package/src/app/providers.tsx +87 -0
  307. package/src/app/share/[token]/page.tsx +295 -0
  308. package/src/app/terms/page.tsx +80 -0
  309. package/src/components/ChainSelector.tsx +44 -0
  310. package/src/components/HumanActionBar.tsx +697 -0
  311. package/src/components/NotificationDrawer.tsx +387 -0
  312. package/src/components/PasskeyEnrollmentPrompt.tsx +235 -0
  313. package/src/components/apps/AgentKeysApp.tsx +490 -0
  314. package/src/components/apps/App.tsx +153 -0
  315. package/src/components/apps/AppGrid.tsx +15 -0
  316. package/src/components/apps/DetailedAddressDrawer.tsx +325 -0
  317. package/src/components/apps/DraggableApp.tsx +562 -0
  318. package/src/components/apps/IFrameApp.tsx +73 -0
  319. package/src/components/apps/LogsApp.tsx +360 -0
  320. package/src/components/apps/SendApp.tsx +394 -0
  321. package/src/components/apps/SetupWizardApp.tsx +1004 -0
  322. package/src/components/apps/SystemDefaultsApp.tsx +845 -0
  323. package/src/components/apps/ThirdPartyApp.tsx +428 -0
  324. package/src/components/apps/TokenApp.tsx +319 -0
  325. package/src/components/apps/TransactionsApp.tsx +438 -0
  326. package/src/components/apps/WalletDetailApp.tsx +1505 -0
  327. package/src/components/apps/index.ts +13 -0
  328. package/src/components/design-system/Button.tsx +88 -0
  329. package/src/components/design-system/ChainIndicator.tsx +65 -0
  330. package/src/components/design-system/ChainSelector.tsx +147 -0
  331. package/src/components/design-system/ConfirmationModal.tsx +107 -0
  332. package/src/components/design-system/ConfirmationPopover.tsx +81 -0
  333. package/src/components/design-system/DownloadButton.tsx +149 -0
  334. package/src/components/design-system/Drawer.tsx +133 -0
  335. package/src/components/design-system/FilterDropdown.tsx +183 -0
  336. package/src/components/design-system/ItemPicker.tsx +157 -0
  337. package/src/components/design-system/Modal.tsx +296 -0
  338. package/src/components/design-system/Popover.tsx +142 -0
  339. package/src/components/design-system/TextInput.tsx +85 -0
  340. package/src/components/design-system/Toggle.tsx +65 -0
  341. package/src/components/design-system/TyvekCollapsibleSection.tsx +55 -0
  342. package/src/components/design-system/index.ts +14 -0
  343. package/src/components/docs/ClientSideMarkdown.tsx +51 -0
  344. package/src/components/docs/DocsSearchBar.tsx +118 -0
  345. package/src/components/docs/DocsThemeToggle.tsx +38 -0
  346. package/src/components/docs/PersistentDocGroup.tsx +91 -0
  347. package/src/components/docs/ShareUrlButton.tsx +33 -0
  348. package/src/components/docs/SidebarScrollMemory.tsx +56 -0
  349. package/src/components/health/CredentialHealthDashboard.tsx +214 -0
  350. package/src/components/icons/ChainIcons.tsx +72 -0
  351. package/src/components/layout/AppStoreDrawer.tsx +369 -0
  352. package/src/components/layout/ContentArea.tsx +21 -0
  353. package/src/components/layout/CreateViewModal.tsx +88 -0
  354. package/src/components/layout/LeftRail.tsx +114 -0
  355. package/src/components/layout/TabBar.tsx +284 -0
  356. package/src/components/layout/WalletSidebar.tsx +1030 -0
  357. package/src/components/layout/index.ts +6 -0
  358. package/src/components/marketing/AuraMaxxSpecOverlay.tsx +653 -0
  359. package/src/components/marketing/DeviceMorphExperience.tsx +216 -0
  360. package/src/components/vault/ApiKeysConsole.tsx +1272 -0
  361. package/src/components/vault/AuditConsole.tsx +600 -0
  362. package/src/components/vault/CredentialDetail.tsx +625 -0
  363. package/src/components/vault/CredentialEmpty.tsx +55 -0
  364. package/src/components/vault/CredentialField.tsx +583 -0
  365. package/src/components/vault/CredentialForm.tsx +1484 -0
  366. package/src/components/vault/CredentialList.tsx +265 -0
  367. package/src/components/vault/CredentialRow.tsx +130 -0
  368. package/src/components/vault/CredentialShareModal.tsx +273 -0
  369. package/src/components/vault/CredentialVault.tsx +1662 -0
  370. package/src/components/vault/CredentialWalletWidget.tsx +103 -0
  371. package/src/components/vault/DocsConsole.tsx +113 -0
  372. package/src/components/vault/ImportCredentialsModal.tsx +578 -0
  373. package/src/components/vault/LargeTypeModal.tsx +88 -0
  374. package/src/components/vault/PasswordGenerator.tsx +232 -0
  375. package/src/components/vault/TOTPDisplay.tsx +108 -0
  376. package/src/components/vault/TotpSetupPanel.tsx +198 -0
  377. package/src/components/vault/VaultSidebar.tsx +881 -0
  378. package/src/components/vault/credentialFormName.ts +91 -0
  379. package/src/components/vault/hooks/useVaultKeyboardShortcuts.ts +69 -0
  380. package/src/components/vault/types.ts +56 -0
  381. package/src/context/AuthContext.tsx +365 -0
  382. package/src/context/PriceContext.tsx +113 -0
  383. package/src/context/ThemeContext.tsx +164 -0
  384. package/src/context/WebSocketContext.tsx +269 -0
  385. package/src/context/WorkspaceContext.tsx +668 -0
  386. package/src/hooks/index.ts +4 -0
  387. package/src/hooks/useAgentActions.ts +552 -0
  388. package/src/hooks/useBalance.ts +103 -0
  389. package/src/hooks/useBalances.ts +129 -0
  390. package/src/hooks/useTheme.ts +156 -0
  391. package/src/instrumentation.ts +12 -0
  392. package/src/lib/api-docs.ts +154 -0
  393. package/src/lib/api.ts +474 -0
  394. package/src/lib/app-loader.ts +148 -0
  395. package/src/lib/app-registry.ts +178 -0
  396. package/src/lib/app-sdk.ts +157 -0
  397. package/src/lib/audit-console-adapter.ts +151 -0
  398. package/src/lib/auth-client.ts +75 -0
  399. package/src/lib/config.ts +74 -0
  400. package/src/lib/credential-field-schema.ts +11 -0
  401. package/src/lib/crypto.ts +112 -0
  402. package/src/lib/db.ts +21 -0
  403. package/src/lib/docs.ts +544 -0
  404. package/src/lib/events.ts +363 -0
  405. package/src/lib/pino.ts +24 -0
  406. package/src/lib/theme-handlers.ts +168 -0
  407. package/src/lib/theme.ts +351 -0
  408. package/src/lib/tokenData.ts +378 -0
  409. package/src/lib/totp-import.ts +57 -0
  410. package/src/lib/vault-crypto.ts +129 -0
  411. package/src/lib/view-registry.ts +57 -0
  412. package/src/lib/websocket-server.ts +302 -0
  413. package/src/lib/websocket-setup.ts +79 -0
  414. package/src/lib/wordlist.ts +2050 -0
  415. package/src/lib/workspace-handlers.ts +285 -0
  416. package/start.sh +170 -0
  417. package/tailwind.config.ts +99 -0
  418. package/tsconfig.json +42 -0
@@ -0,0 +1,285 @@
1
+ import { prisma } from './db';
2
+ import {
3
+ WORKSPACE_EVENTS,
4
+ WorkspaceEvent,
5
+ WorkspaceData,
6
+ AppData,
7
+ AppUpdateData,
8
+ WorkspaceStateRequestData,
9
+ WorkspaceStateResponseData,
10
+ WorkspaceImportData,
11
+ createWorkspaceEvent,
12
+ } from './events';
13
+
14
+ /**
15
+ * Handle incoming workspace WebSocket messages
16
+ * Returns a response event if one should be sent back to the sender
17
+ */
18
+ export async function handleWorkspaceMessage(
19
+ msg: WorkspaceEvent
20
+ ): Promise<WorkspaceEvent | null> {
21
+ console.log(`[WS] Handling workspace message: ${msg.type}`);
22
+
23
+ switch (msg.type) {
24
+ case WORKSPACE_EVENTS.STATE_REQUEST:
25
+ return handleStateRequest(msg.data as WorkspaceStateRequestData);
26
+
27
+ case WORKSPACE_EVENTS.WORKSPACE_CREATED:
28
+ await handleWorkspaceCreated(msg.data as WorkspaceData);
29
+ return null;
30
+
31
+ case WORKSPACE_EVENTS.WORKSPACE_DELETED:
32
+ await handleWorkspaceDeleted(msg.data as { workspaceId: string });
33
+ return null;
34
+
35
+ case WORKSPACE_EVENTS.WORKSPACE_UPDATED:
36
+ await handleWorkspaceUpdated(msg.data as WorkspaceData);
37
+ return null;
38
+
39
+ case WORKSPACE_EVENTS.APP_ADDED:
40
+ await handleAppAdded(msg.data as AppData);
41
+ return null;
42
+
43
+ case WORKSPACE_EVENTS.APP_REMOVED:
44
+ await handleAppRemoved(msg.data as { appId: string });
45
+ return null;
46
+
47
+ case WORKSPACE_EVENTS.APP_UPDATED:
48
+ await handleAppUpdated(msg.data as AppUpdateData);
49
+ return null;
50
+
51
+ case WORKSPACE_EVENTS.WORKSPACE_SAVE:
52
+ await handleWorkspaceSave(msg.data as { workspaceId: string });
53
+ return null;
54
+
55
+ case WORKSPACE_EVENTS.WORKSPACE_IMPORT:
56
+ await handleWorkspaceImport(msg.data as WorkspaceImportData);
57
+ return null;
58
+
59
+ default:
60
+ console.warn(`[WS] Unknown workspace event type: ${msg.type}`);
61
+ return null;
62
+ }
63
+ }
64
+
65
+ async function handleStateRequest(
66
+ data: WorkspaceStateRequestData
67
+ ): Promise<WorkspaceEvent<WorkspaceStateResponseData>> {
68
+ // Get all workspaces
69
+ const workspaces = await prisma.workspace.findMany({
70
+ orderBy: { order: 'asc' },
71
+ });
72
+
73
+ // Find the default or first workspace
74
+ let activeWorkspaceId: string = data.workspaceId ?? '';
75
+ if (!activeWorkspaceId) {
76
+ const defaultWorkspace = workspaces.find((w: any) => w.isDefault) || workspaces[0];
77
+ activeWorkspaceId = defaultWorkspace?.id || '';
78
+ }
79
+
80
+ // Get apps for the active workspace
81
+ const apps = activeWorkspaceId
82
+ ? await prisma.workspaceApp.findMany({
83
+ where: { workspaceId: activeWorkspaceId },
84
+ })
85
+ : [];
86
+
87
+ const response: WorkspaceStateResponseData = {
88
+ requestId: data.requestId,
89
+ workspaces: workspaces.map((w: any) => ({
90
+ id: w.id,
91
+ name: w.name,
92
+ slug: w.slug,
93
+ icon: w.icon || undefined,
94
+ emoji: w.emoji || undefined,
95
+ color: w.color || undefined,
96
+ order: w.order,
97
+ isDefault: w.isDefault,
98
+ isCloseable: w.isCloseable,
99
+ })),
100
+ activeWorkspaceId,
101
+ apps: apps.map((w: any) => ({
102
+ id: w.id,
103
+ workspaceId: w.workspaceId,
104
+ appType: w.appType,
105
+ x: w.x,
106
+ y: w.y,
107
+ width: w.width,
108
+ height: w.height,
109
+ zIndex: w.zIndex,
110
+ isVisible: w.isVisible,
111
+ isLocked: w.isLocked,
112
+ config: w.config ? JSON.parse(w.config) : undefined,
113
+ })),
114
+ };
115
+
116
+ return createWorkspaceEvent(WORKSPACE_EVENTS.STATE_RESPONSE, response, 'server');
117
+ }
118
+
119
+ async function handleWorkspaceCreated(data: WorkspaceData): Promise<void> {
120
+ // Generate a unique slug from the name
121
+ const baseSlug = data.slug || data.name.toLowerCase().replace(/[^a-z0-9]+/g, '-');
122
+ let slug = baseSlug;
123
+ let counter = 1;
124
+
125
+ // Ensure slug is unique
126
+ while (await prisma.workspace.findUnique({ where: { slug } })) {
127
+ slug = `${baseSlug}-${counter}`;
128
+ counter++;
129
+ }
130
+
131
+ // Get the next order value
132
+ const maxOrder = await prisma.workspace.aggregate({
133
+ _max: { order: true },
134
+ });
135
+ const order = data.order ?? (maxOrder._max.order ?? -1) + 1;
136
+
137
+ await prisma.workspace.create({
138
+ data: {
139
+ id: data.id,
140
+ name: data.name,
141
+ slug,
142
+ icon: data.icon,
143
+ emoji: data.emoji,
144
+ color: data.color,
145
+ order,
146
+ isDefault: data.isDefault ?? false,
147
+ isCloseable: data.isCloseable ?? true,
148
+ },
149
+ });
150
+
151
+ console.log(`[WS] Created workspace: ${data.name} (${slug})`);
152
+ }
153
+
154
+ async function handleWorkspaceDeleted(data: { workspaceId: string }): Promise<void> {
155
+ // Cascade delete will remove associated apps
156
+ await prisma.workspace.delete({
157
+ where: { id: data.workspaceId },
158
+ });
159
+
160
+ console.log(`[WS] Deleted workspace: ${data.workspaceId}`);
161
+ }
162
+
163
+ async function handleWorkspaceUpdated(data: WorkspaceData): Promise<void> {
164
+ // Only include fields that are explicitly provided (not undefined)
165
+ const updateData: Record<string, unknown> = {};
166
+ if (data.name !== undefined) updateData.name = data.name;
167
+ if (data.icon !== undefined) updateData.icon = data.icon;
168
+ if (data.emoji !== undefined) updateData.emoji = data.emoji || null;
169
+ if (data.color !== undefined) updateData.color = data.color || null;
170
+ if (data.order !== undefined) updateData.order = data.order;
171
+ if (data.isDefault !== undefined) updateData.isDefault = data.isDefault;
172
+ if (data.isCloseable !== undefined) updateData.isCloseable = data.isCloseable;
173
+
174
+ await prisma.workspace.update({
175
+ where: { id: data.id },
176
+ data: updateData,
177
+ });
178
+
179
+ console.log(`[WS] Updated workspace: ${data.id}`);
180
+ }
181
+
182
+ async function handleAppAdded(data: AppData): Promise<void> {
183
+ // Get the next zIndex for this workspace
184
+ const maxZ = await prisma.workspaceApp.aggregate({
185
+ where: { workspaceId: data.workspaceId },
186
+ _max: { zIndex: true },
187
+ });
188
+ const zIndex = data.zIndex ?? (maxZ._max.zIndex ?? 9) + 1;
189
+
190
+ await prisma.workspaceApp.create({
191
+ data: {
192
+ id: data.id,
193
+ workspaceId: data.workspaceId,
194
+ appType: data.appType,
195
+ x: data.x ?? 20,
196
+ y: data.y ?? 20,
197
+ width: data.width ?? 320,
198
+ height: data.height ?? 280,
199
+ zIndex,
200
+ isVisible: data.isVisible ?? true,
201
+ isLocked: data.isLocked ?? false,
202
+ config: data.config ? JSON.stringify(data.config) : null,
203
+ },
204
+ });
205
+
206
+ console.log(`[WS] Added app: ${data.appType} to workspace ${data.workspaceId}`);
207
+ }
208
+
209
+ async function handleAppRemoved(data: { appId: string }): Promise<void> {
210
+ await prisma.workspaceApp.delete({
211
+ where: { id: data.appId },
212
+ });
213
+
214
+ console.log(`[WS] Removed app: ${data.appId}`);
215
+ }
216
+
217
+ async function handleAppUpdated(data: AppUpdateData): Promise<void> {
218
+ const updateData: Record<string, unknown> = {};
219
+
220
+ if (data.x !== undefined) updateData.x = data.x;
221
+ if (data.y !== undefined) updateData.y = data.y;
222
+ if (data.width !== undefined) updateData.width = data.width;
223
+ if (data.height !== undefined) updateData.height = data.height;
224
+ if (data.zIndex !== undefined) updateData.zIndex = data.zIndex;
225
+ if (data.isVisible !== undefined) updateData.isVisible = data.isVisible;
226
+ if (data.isLocked !== undefined) updateData.isLocked = data.isLocked;
227
+ if (data.config !== undefined) updateData.config = JSON.stringify(data.config);
228
+
229
+ await prisma.workspaceApp.update({
230
+ where: { id: data.appId },
231
+ data: updateData,
232
+ });
233
+
234
+ console.log(`[WS] Updated app: ${data.appId}`);
235
+ }
236
+
237
+ async function handleWorkspaceSave(data: { workspaceId: string }): Promise<void> {
238
+ // Touch the updatedAt timestamp to indicate a save
239
+ await prisma.workspace.update({
240
+ where: { id: data.workspaceId },
241
+ data: { updatedAt: new Date() },
242
+ });
243
+
244
+ console.log(`[WS] Saved workspace: ${data.workspaceId}`);
245
+ }
246
+
247
+ async function handleWorkspaceImport(data: WorkspaceImportData): Promise<void> {
248
+ const { workspace, apps } = data;
249
+
250
+ // Create the workspace
251
+ await handleWorkspaceCreated(workspace);
252
+
253
+ // Create all apps
254
+ for (const app of apps) {
255
+ await handleAppAdded({
256
+ ...app,
257
+ workspaceId: workspace.id,
258
+ });
259
+ }
260
+
261
+ console.log(`[WS] Imported workspace: ${workspace.name} with ${apps.length} apps`);
262
+ }
263
+
264
+ /**
265
+ * Ensure a default "HOME" workspace exists
266
+ */
267
+ export async function ensureDefaultWorkspace(): Promise<void> {
268
+ const existing = await prisma.workspace.findFirst({
269
+ where: { isDefault: true },
270
+ });
271
+
272
+ if (!existing) {
273
+ await prisma.workspace.create({
274
+ data: {
275
+ name: 'HOME',
276
+ slug: 'home',
277
+ icon: 'Home',
278
+ order: 0,
279
+ isDefault: true,
280
+ isCloseable: false,
281
+ },
282
+ });
283
+ console.log('[WS] Created default HOME workspace');
284
+ }
285
+ }
package/start.sh ADDED
@@ -0,0 +1,170 @@
1
+ #!/bin/bash
2
+
3
+ # Start Aura Wallet - both server and UI
4
+
5
+ MODE="${1:-dev}" # Default to dev mode if no argument provided
6
+
7
+ echo "Starting Aura Wallet in ${MODE} mode..."
8
+
9
+ # Derive all service ports from a single dashboard port to avoid mismatches.
10
+ # UI client derives wallet/ws ports from dashboard port at runtime.
11
+ DASHBOARD_PORT="${DASHBOARD_PORT:-4747}"
12
+ WALLET_PORT="$((DASHBOARD_PORT - 505))"
13
+ WS_PORT_DERIVED="$((DASHBOARD_PORT + 1))"
14
+
15
+ export DASHBOARD_PORT
16
+ export WALLET_SERVER_PORT="$WALLET_PORT"
17
+ export WS_PORT="$WS_PORT_DERIVED"
18
+
19
+ # Track child processes for cleanup on failure/shutdown
20
+ SERVER_PID=""
21
+ CRON_PID=""
22
+ UI_PID=""
23
+
24
+ stop_processes() {
25
+ kill "$SERVER_PID" "$CRON_PID" "$UI_PID" 2>/dev/null
26
+ }
27
+
28
+ wait_for_health() {
29
+ local name="$1"
30
+ local url="$2"
31
+ local pid="$3"
32
+ local retries="${4:-40}" # 40 * 0.5s = 20s default timeout
33
+
34
+ local i
35
+ for ((i=1; i<=retries; i++)); do
36
+ if curl -fsS "$url" >/dev/null 2>&1; then
37
+ return 0
38
+ fi
39
+
40
+ # If process died, fail immediately instead of waiting for timeout
41
+ if [ -n "$pid" ] && ! kill -0 "$pid" 2>/dev/null; then
42
+ echo "✗ ${name} exited before becoming healthy"
43
+ return 1
44
+ fi
45
+
46
+ sleep 0.5
47
+ done
48
+
49
+ echo "✗ ${name} did not become healthy at ${url}"
50
+ return 1
51
+ }
52
+
53
+ # Kill any existing processes
54
+ pkill -f "tsx server/index.ts" 2>/dev/null
55
+ pkill -f "tsx watch server/index.ts" 2>/dev/null
56
+ pkill -f "tsx server/cron/index.ts" 2>/dev/null
57
+ pkill -f "next dev" 2>/dev/null
58
+ pkill -f "next start" 2>/dev/null
59
+
60
+ if [ "$MODE" = "prod" ] || [ "$MODE" = "production" ]; then
61
+ # Production mode
62
+ echo "Building Next.js..."
63
+ npm run build
64
+
65
+ echo "Starting vault server on :4242..."
66
+ npm run server &
67
+ SERVER_PID=$!
68
+
69
+ if ! wait_for_health "Vault server" "http://127.0.0.1:${WALLET_PORT}/health" "$SERVER_PID" 80; then
70
+ echo "Vault server failed to start. Exiting."
71
+ stop_processes
72
+ exit 1
73
+ fi
74
+
75
+ echo "Starting cron server (balance sync, price sync)..."
76
+ npx tsx server/cron/index.ts &
77
+ CRON_PID=$!
78
+
79
+ echo "Starting Next.js production server on :${DASHBOARD_PORT}..."
80
+ npx next start -p "$DASHBOARD_PORT" &
81
+ UI_PID=$!
82
+
83
+ MODE_LABEL="PRODUCTION (API + dashboard)"
84
+ else
85
+ # Development mode (default)
86
+ export BYPASS_RATE_LIMIT=true
87
+ # Keep internal docs visible in local dev unless explicitly overridden.
88
+ if [ -z "${NEXT_PUBLIC_SHOW_INTERNAL_DOCS}" ]; then
89
+ export NEXT_PUBLIC_SHOW_INTERNAL_DOCS=true
90
+ fi
91
+ echo "Internal docs visibility: NEXT_PUBLIC_SHOW_INTERNAL_DOCS=${NEXT_PUBLIC_SHOW_INTERNAL_DOCS}"
92
+
93
+ echo "Starting vault server (dev) on :${WALLET_PORT}..."
94
+ npm run server:dev &
95
+ SERVER_PID=$!
96
+
97
+ if ! wait_for_health "Vault server" "http://127.0.0.1:${WALLET_PORT}/health" "$SERVER_PID" 40; then
98
+ echo "server:dev failed, retrying vault server without watch mode..."
99
+ kill "$SERVER_PID" 2>/dev/null
100
+ BYPASS_RATE_LIMIT=true node --import tsx server/index.ts &
101
+ SERVER_PID=$!
102
+
103
+ if ! wait_for_health "Vault server" "http://127.0.0.1:${WALLET_PORT}/health" "$SERVER_PID" 40; then
104
+ echo "Vault server failed to start on :${WALLET_PORT}. Exiting."
105
+ stop_processes
106
+ exit 1
107
+ fi
108
+ fi
109
+
110
+ echo "Starting cron server (balance sync, price sync)..."
111
+ npx tsx server/cron/index.ts &
112
+ CRON_PID=$!
113
+
114
+ echo "Starting Next.js dev server on :${DASHBOARD_PORT}..."
115
+ npx next dev -p "$DASHBOARD_PORT" &
116
+ UI_PID=$!
117
+
118
+ MODE_LABEL="DEVELOPMENT (API + dashboard)"
119
+ fi
120
+
121
+ # Check if UI process exits immediately (most common startup failure mode)
122
+ sleep 2
123
+ if ! kill -0 "$UI_PID" 2>/dev/null; then
124
+ echo "✗ Next.js UI failed to start on :${DASHBOARD_PORT}"
125
+ stop_processes
126
+ exit 1
127
+ fi
128
+
129
+ # WebSocket sidecar is started by Next instrumentation. Warn if unavailable.
130
+ if ! wait_for_health "WebSocket sidecar" "http://127.0.0.1:${WS_PORT_DERIVED}/health" "$UI_PID" 20; then
131
+ echo "⚠ WebSocket sidecar is not healthy on :${WS_PORT_DERIVED} yet; UI may show [WS] reconnect errors."
132
+ fi
133
+
134
+ # ── Startup summary ────────────────────────────────────────────
135
+ if [ -t 1 ] && [ -z "$NO_COLOR" ] && [ "$CI" != "true" ] && [ "$TERM" != "dumb" ]; then
136
+ RST=$'\033[0m'; BOLD=$'\033[1m'; DIM=$'\033[2m'; GRAY=$'\033[90m'; CYAN=$'\033[38;5;154m'
137
+ else
138
+ RST=''; BOLD=''; DIM=''; GRAY=''; CYAN=''
139
+ fi
140
+
141
+ PIPE="${GRAY}|${RST}"
142
+ TL="${GRAY}.-${RST}"; TR="${GRAY}-.${RST}"
143
+ BL="${GRAY}'-${RST}"; BR="${GRAY}-'${RST}"
144
+ LP="${GRAY}|${RST}"
145
+ LT="${GRAY}.${RST}${DIM}----------${RST}${GRAY}.${RST}"
146
+ LB="${GRAY}'${RST}${DIM}----------${RST}${GRAY}'${RST}"
147
+ PAD58=$(printf '%58s' '')
148
+ PAD43=$(printf '%43s' '')
149
+ PAD28=$(printf '%28s' '')
150
+
151
+ echo ""
152
+ echo " ${TL}${DIM}${PAD58}${RST}${TR}"
153
+ echo " ${PIPE} ${LT}${PAD43}${PIPE}"
154
+ echo " ${PIPE} ${LP}${BOLD}\\\\${RST} ${BOLD}\\\\${RST} ${BOLD}\\\\${RST}${LP} ${BOLD}A U R A${RST}${PAD28}${PIPE}"
155
+ echo " ${PIPE} ${LP}${BOLD}\\\\${RST} ${BOLD}\\\\${RST} ${BOLD}\\\\${RST}${LP} ${DIM}M A X X . S H${RST} ${PIPE}"
156
+ echo " ${PIPE} ${LP}${BOLD}\\\\${RST} ${BOLD}\\\\${RST} ${BOLD}\\\\${RST}${LP} ${CYAN}STARTING${RST} ${PIPE}"
157
+ echo " ${PIPE} ${LB}${PAD43}${PIPE}"
158
+ echo " ${BL}${DIM}${PAD58}${RST}${BR}"
159
+
160
+ echo ""
161
+ echo " ${DIM}Mode ${RST}${MODE_LABEL}"
162
+ echo " ${DIM}API (server) ${RST}http://localhost:${WALLET_PORT}"
163
+ echo " ${DIM}Dashboard ${RST}http://localhost:${DASHBOARD_PORT}"
164
+ echo ""
165
+
166
+ # Handle Ctrl+C - kill both processes
167
+ trap "echo 'Shutting down...'; stop_processes; exit" SIGINT SIGTERM
168
+
169
+ # Wait for either process to exit
170
+ wait
@@ -0,0 +1,99 @@
1
+ import type { Config } from "tailwindcss";
2
+
3
+ const config: Config = {
4
+ content: [
5
+ "./src/pages/**/*.{js,ts,jsx,tsx,mdx}",
6
+ "./src/components/**/*.{js,ts,jsx,tsx,mdx}",
7
+ "./src/app/**/*.{js,ts,jsx,tsx,mdx}",
8
+ ],
9
+ darkMode: ['selector', '[data-theme="dark"]'],
10
+ theme: {
11
+ extend: {
12
+ colors: {
13
+ // Legacy colors (preserved for backward compatibility)
14
+ voltage: '#ccff00',
15
+ void: '#0a0a0a',
16
+ tyvek: '#ffffff',
17
+ concrete: '#d4d4d8',
18
+ surgical: '#00f0ff',
19
+ alert: '#ff4d00',
20
+ 'clinical-blue': '#0047ff',
21
+ 'warning-orange': '#FF4D00',
22
+ 'tyvek-dim': '#F0F0F0',
23
+ ink: '#050505',
24
+ signal: '#00FF41',
25
+
26
+ // Theme-aware colors using CSS variables
27
+ theme: {
28
+ accent: 'var(--color-accent, #ccff00)',
29
+ 'accent-foreground': 'var(--color-accent-foreground, #0a0a0a)',
30
+ warning: 'var(--color-warning, #ff4d00)',
31
+ 'warning-foreground': 'var(--color-warning-foreground, #ffffff)',
32
+ danger: 'var(--color-danger, #ef4444)',
33
+ 'danger-foreground': 'var(--color-danger-foreground, #ffffff)',
34
+ success: 'var(--color-success, #00c853)',
35
+ 'success-foreground': 'var(--color-success-foreground, #ffffff)',
36
+ info: 'var(--color-info, #0047ff)',
37
+ 'info-foreground': 'var(--color-info-foreground, #ffffff)',
38
+ background: 'var(--color-background, #f5f5f5)',
39
+ 'background-alt': 'var(--color-background-alt, #e8e8e6)',
40
+ surface: 'var(--color-surface, #ffffff)',
41
+ 'surface-alt': 'var(--color-surface-alt, #fafafa)',
42
+ text: 'var(--color-text, #0a0a0a)',
43
+ 'text-muted': 'var(--color-text-muted, #6b7280)',
44
+ 'text-faint': 'var(--color-text-faint, #9ca3af)',
45
+ border: 'var(--color-border, #d4d4d8)',
46
+ 'border-muted': 'var(--color-border-muted, #e5e5e5)',
47
+ 'border-focus': 'var(--color-border-focus, #0a0a0a)',
48
+ },
49
+ },
50
+ fontFamily: {
51
+ sans: ['Inter', 'system-ui', 'sans-serif'],
52
+ mono: ['JetBrains Mono', 'Menlo', 'monospace'],
53
+ },
54
+ backgroundImage: {
55
+ 'noise': "url('data:image/svg+xml,%3Csvg viewBox=\"0 0 200 200\" xmlns=\"http://www.w3.org/2000/svg\"%3E%3Cfilter id=\"noiseFilter\"%3E%3CfeTurbulence type=\"fractalNoise\" baseFrequency=\"0.9\" numOctaves=\"3\" stitchTiles=\"stitch\"/%3E%3C/filter%3E%3Crect width=\"100%25\" height=\"100%25\" filter=\"url(%23noiseFilter)\" opacity=\"0.05\"/%3E%3C/svg%3E')",
56
+ 'grid-pattern': "linear-gradient(to right, #e5e5e5 1px, transparent 1px), linear-gradient(to bottom, #e5e5e5 1px, transparent 1px)",
57
+ 'grid-pattern-dark': "linear-gradient(to right, rgba(255,255,255,0.06) 1px, transparent 1px), linear-gradient(to bottom, rgba(255,255,255,0.06) 1px, transparent 1px)",
58
+ 'hazard-stripes': "repeating-linear-gradient(135deg, transparent, transparent 10px, rgba(204,255,0,0.06) 10px, rgba(204,255,0,0.06) 20px)",
59
+ },
60
+ animation: {
61
+ 'slam': 'slam 0.4s cubic-bezier(0.19, 1, 0.22, 1) forwards',
62
+ 'flash': 'flash 2s infinite',
63
+ 'ticker': 'ticker 30s linear infinite',
64
+ 'pulse-fast': 'pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite',
65
+ 'spin-slow': 'spin 3s linear infinite',
66
+ 'scan-vertical': 'scan-vertical 3s linear infinite',
67
+ 'app-focus': 'app-focus 0.25s cubic-bezier(0.34, 1.56, 0.64, 1)',
68
+ },
69
+ keyframes: {
70
+ slam: {
71
+ '0%': { transform: 'scale(1.05) translateY(20px)', opacity: '0' },
72
+ '100%': { transform: 'scale(1) translateY(0)', opacity: '1' },
73
+ },
74
+ ticker: {
75
+ '0%': { transform: 'translateX(0)' },
76
+ '100%': { transform: 'translateX(-100%)' },
77
+ },
78
+ flash: {
79
+ '0%, 100%': { opacity: '1' },
80
+ '50%': { opacity: '0.3' },
81
+ },
82
+ 'scan-vertical': {
83
+ '0%': { top: '0', opacity: '0' },
84
+ '10%': { opacity: '1' },
85
+ '90%': { opacity: '1' },
86
+ '100%': { top: '100%', opacity: '0' },
87
+ },
88
+ 'app-focus': {
89
+ '0%': { transform: 'scale(1)' },
90
+ '40%': { transform: 'scale(1.03)' },
91
+ '100%': { transform: 'scale(1)' },
92
+ }
93
+ }
94
+ },
95
+ },
96
+ plugins: [],
97
+ };
98
+
99
+ export default config;
package/tsconfig.json ADDED
@@ -0,0 +1,42 @@
1
+ {
2
+ "compilerOptions": {
3
+ "lib": [
4
+ "dom",
5
+ "dom.iterable",
6
+ "esnext"
7
+ ],
8
+ "allowJs": true,
9
+ "skipLibCheck": true,
10
+ "strict": true,
11
+ "noEmit": true,
12
+ "esModuleInterop": true,
13
+ "module": "esnext",
14
+ "moduleResolution": "bundler",
15
+ "resolveJsonModule": true,
16
+ "isolatedModules": true,
17
+ "jsx": "preserve",
18
+ "incremental": true,
19
+ "plugins": [
20
+ {
21
+ "name": "next"
22
+ }
23
+ ],
24
+ "paths": {
25
+ "@/*": [
26
+ "./src/*"
27
+ ]
28
+ },
29
+ "target": "ES2017"
30
+ },
31
+ "include": [
32
+ "next-env.d.ts",
33
+ "**/*.ts",
34
+ "**/*.tsx",
35
+ ".next/types/**/*.ts"
36
+ ],
37
+ "exclude": [
38
+ "node_modules",
39
+ "server",
40
+ "extension"
41
+ ]
42
+ }