{"_id":"@a0n/aeon-preferences","_rev":"3-57a07747f50874b29bcfb7e46e5d7f69","name":"@a0n/aeon-preferences","dist-tags":{"latest":"5.0.0"},"versions":{"5.0.0":{"name":"@a0n/aeon-preferences","version":"5.0.0","_id":"@a0n/aeon-preferences@5.0.0","maintainers":[{"name":"buley","email":"buley@outlook.com"}],"dist":{"shasum":"989d43a6371bfd17d94216a5d5f76d5340fdea56","tarball":"https://registry.npmjs.org/@a0n/aeon-preferences/-/aeon-preferences-5.0.0.tgz","fileCount":26,"integrity":"sha512-++gCf7jT2i6R7h5zJJNT5xS/htntCzqoR23i80A7IPsc5BQkYS4Cie6gfSKeyS6bQWVIleAOPBJrTy20QJJZyA==","signatures":[{"sig":"MEUCIQCcYvYveS78Cg8L2HKjkS+hDYudZ9yacnh1+JBNBaKKeQIgHPKQX+OT+OMrnujRqPlhqPndWp2a4DVXMEFLYNI7+kM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":172675},"main":"./dist/index.js","type":"module","_from":"file:a0n-aeon-preferences-5.0.0.tgz","types":"./dist/index.d.ts","scripts":{"test":"bun test","build":"bun build ./src/index.ts --outdir ./dist --external react --external react-dom"},"_npmUser":{"name":"buley","email":"buley@outlook.com"},"_resolved":"/private/var/folders/kf/tkq8cmd54fl9c1wh414dj3240000gn/T/5ee1bd7be3f47de6e03bf5cf4e4dce12/a0n-aeon-preferences-5.0.0.tgz","_integrity":"sha512-++gCf7jT2i6R7h5zJJNT5xS/htntCzqoR23i80A7IPsc5BQkYS4Cie6gfSKeyS6bQWVIleAOPBJrTy20QJJZyA==","deprecated":"This package is deprecated and no longer supported. Do not use.","_npmVersion":"11.11.0","description":"Federated user preferences via Dash DB for the Aeon ecosystem.","directories":{},"_nodeVersion":"25.8.0","dependencies":{"zod":"^3.22.4"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/react":"^18.0.0"},"peerDependencies":{"react":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/aeon-preferences_5.0.0_1773802068769_0.07587742639219108","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2026-03-18T02:47:48.678Z","modified":"2026-03-27T20:48:55.027Z","5.0.0":"2026-03-18T02:47:48.926Z"},"description":"Federated user preferences via Dash DB for the Aeon ecosystem.","maintainers":[{"name":"buley","email":"buley@outlook.com"}],"readme":"# @a0n/aeon-preferences\n\n`@a0n/aeon-preferences` is a synced preferences store for Aeon apps, sites, tools, and agents.\n\nThe fair brag is that it goes beyond \"theme and locale.\" The package already covers namespaced preferences, flag overrides, a protected vault area for sensitive values, React bindings, MCP tools, and a store model designed for multi-device sync.\n\n## Why People May Like It\n\n- preferences can be shared across devices instead of staying trapped in one browser tab,\n- namespaced storage keeps one app from stepping on another app's settings,\n- the vault area gives sensitive values a separate place and a separate capability story,\n- `aeon-flags` overrides can live alongside normal preferences,\n- and React and MCP entry points are included instead of left as follow-up work.\n\n## Install\n\n```bash\nnpm install @a0n/aeon-preferences\n```\n\n## Schema Shape\n\nAt a high level, the store includes:\n\n- global preferences such as theme, locale, and security settings\n- `flags` for user-level feature overrides\n- `namespaces` for app-, site-, and tool-specific data\n- `vault` for sensitive values that need stronger handling\n\nThe schema is validated with Zod.\n\n## React Example\n\n```tsx\nimport { PreferencesProvider, useAeonPreferences } from '@a0n/aeon-preferences';\n\nfunction App() {\n  return (\n    <PreferencesProvider store={myDashStore}>\n      <Dashboard />\n    </PreferencesProvider>\n  );\n}\n\nfunction Dashboard() {\n  const { preferences, updatePreferences } = useAeonPreferences();\n\n  return (\n    <div className={preferences.theme.mode === 'dark' ? 'bg-black' : 'bg-white'}>\n      <button onClick={() => updatePreferences({ theme: { mode: 'dark' } })}>\n        Enable Dark Mode\n      </button>\n    </div>\n  );\n}\n```\n\n## Store Example\n\n```ts\nimport { DashPreferencesStore } from '@a0n/aeon-preferences';\n\nconst store = new DashPreferencesStore({\n  relayClient: dashRelayClient,\n  ucan: { token: 'eyJhbG...' },\n  zkKeys: { publicKey: '...', privateKey: '...' },\n  graphPath: 'user/preferences',\n});\n```\n\n## MCP Example\n\n```ts\nimport { createPreferencesMcpTools } from '@a0n/aeon-preferences';\n\nconst tools = createPreferencesMcpTools(store);\n```\n\n## Security And Scoping\n\n- global preferences use broader capabilities such as `preferences/write`\n- namespaced settings can be scoped to a specific app or tool\n- vault access is intended to stay behind separate read and write capabilities\n\n## Why This README Is Grounded\n\nAeon Preferences does not need sweeping claims. The strongest fair brag is that it already gives you a fairly complete preferences package with sync, scoping, React bindings, and automation hooks.\n","readmeFilename":"README.md"}