From a4f479113130f67642c03c8271a753a7ad2ea666 Mon Sep 17 00:00:00 2001 From: Blockchain-Oracle Date: Wed, 3 Jun 2026 08:36:51 +0100 Subject: [PATCH 01/23] chore(site): wire fumadocs-core + fumadocs-mdx content infra MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds the content-layer pipeline that will drive the docs migration: - source.config.ts with frontmatter schema (importLine, breadcrumb, prev, next) - lib/source.ts loader exposing baseUrl=/docs - next.config.ts wraps with createMDX() - declaration:false override so the inferred zod type from frontmatterSchema.extend() doesn't bleed into d.ts emit (TS2742) No design changes. No fumadocs-ui — content infra only. Co-Authored-By: Claude Opus 4.7 (1M context) --- apps/site/.gitignore | 1 + apps/site/content/docs/index.mdx | 6 + apps/site/lib/source.ts | 7 + apps/site/next.config.ts | 4 +- apps/site/package.json | 5 +- apps/site/source.config.ts | 17 + apps/site/tsconfig.json | 3 +- pnpm-lock.yaml | 1684 ++++++++++++++++++++++++++++-- 8 files changed, 1656 insertions(+), 71 deletions(-) create mode 100644 apps/site/content/docs/index.mdx create mode 100644 apps/site/lib/source.ts create mode 100644 apps/site/source.config.ts diff --git a/apps/site/.gitignore b/apps/site/.gitignore index 5047651..22aef67 100644 --- a/apps/site/.gitignore +++ b/apps/site/.gitignore @@ -18,3 +18,4 @@ yarn-debug.log* .DS_Store .env.local .env*.local +.source diff --git a/apps/site/content/docs/index.mdx b/apps/site/content/docs/index.mdx new file mode 100644 index 0000000..696b0ea --- /dev/null +++ b/apps/site/content/docs/index.mdx @@ -0,0 +1,6 @@ +--- +title: Introduction +description: Developer toolkit for Story Protocol's Confidential Data Rails. Gate encrypted data behind a real on-chain payment or license check in under a minute. +--- + +cdr-kit is the developer toolkit for Story Protocol's Confidential Data Rails. diff --git a/apps/site/lib/source.ts b/apps/site/lib/source.ts new file mode 100644 index 0000000..f580653 --- /dev/null +++ b/apps/site/lib/source.ts @@ -0,0 +1,7 @@ +import { loader } from "fumadocs-core/source"; +import { docs } from "@/.source/server"; + +export const source = loader({ + source: docs.toFumadocsSource(), + baseUrl: "/docs", +}); diff --git a/apps/site/next.config.ts b/apps/site/next.config.ts index 3cefa3f..78236ab 100644 --- a/apps/site/next.config.ts +++ b/apps/site/next.config.ts @@ -1,7 +1,9 @@ import type { NextConfig } from "next"; +import { createMDX } from "fumadocs-mdx/next"; const config: NextConfig = { reactStrictMode: true, }; -export default config; +const withMDX = createMDX(); +export default withMDX(config); diff --git a/apps/site/package.json b/apps/site/package.json index 9902fc8..ee4a919 100644 --- a/apps/site/package.json +++ b/apps/site/package.json @@ -16,11 +16,14 @@ "@cdr-kit/react-ui": "npm:@cdr-kit/react-ui@^0.5.0", "@radix-ui/react-popover": "^1.1.15", "@tanstack/react-query": "^5.62.0", + "fumadocs-core": "^16.9.3", + "fumadocs-mdx": "^15.0.10", "next": "16.2.6", "react": "19.2.4", "react-dom": "19.2.4", "viem": "^2.51.3", - "wagmi": "^2.14.0" + "wagmi": "^2.14.0", + "zod": "^3.25.76" }, "devDependencies": { "@types/node": "^20", diff --git a/apps/site/source.config.ts b/apps/site/source.config.ts new file mode 100644 index 0000000..c805c0f --- /dev/null +++ b/apps/site/source.config.ts @@ -0,0 +1,17 @@ +// fumadocs config — consumed by the fumadocs-mdx CLI generator +import { defineDocs, defineConfig, frontmatterSchema } from "fumadocs-mdx/config"; +import { z } from "zod"; + +export const docs = defineDocs({ + dir: "content/docs", + docs: { + schema: frontmatterSchema.extend({ + importLine: z.string().optional(), + breadcrumb: z.array(z.string()).optional(), + prev: z.object({ href: z.string(), label: z.string() }).optional(), + next: z.object({ href: z.string(), label: z.string() }).optional(), + }), + }, +}); + +export default defineConfig(); diff --git a/apps/site/tsconfig.json b/apps/site/tsconfig.json index 67976be..80654c4 100644 --- a/apps/site/tsconfig.json +++ b/apps/site/tsconfig.json @@ -5,6 +5,7 @@ "lib": ["dom", "dom.iterable", "es2022"], "allowJs": false, "noEmit": true, + "declaration": false, "incremental": true, "module": "esnext", "moduleResolution": "bundler", @@ -21,5 +22,5 @@ "**/*.tsx", ".next/types/**/*.ts" ], - "exclude": ["node_modules"] + "exclude": ["node_modules", "./source.config.ts", "./.source/**/*"] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b3ca906..b3c7879 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -43,22 +43,28 @@ importers: dependencies: '@cdr-kit/contracts': specifier: npm:@cdr-kit/contracts@^0.5.0 - version: 0.5.0(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.4.3)) + version: 0.5.0(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) '@cdr-kit/core': specifier: npm:@cdr-kit/core@^0.5.0 - version: 0.5.0(@helia/unixfs@5.1.0(encoding@0.1.13))(helia@5.5.1(bufferutil@4.1.0)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.4.3)) + version: 0.5.0(@helia/unixfs@5.1.0(encoding@0.1.13))(helia@5.5.1(bufferutil@4.1.0)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) '@cdr-kit/react': specifier: npm:@cdr-kit/react@^0.5.0 - version: 0.5.0(fe6219abba1ce2fd38b5b8d62dc518fa) + version: 0.5.0(78f83cda882c8eaeee56bebfc104fe07) '@cdr-kit/react-ui': specifier: npm:@cdr-kit/react-ui@^0.5.0 - version: 0.5.0(@cdr-kit/core@0.5.0(@helia/unixfs@5.1.0(encoding@0.1.13))(helia@5.5.1(bufferutil@4.1.0)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.4.3)))(@cdr-kit/react@0.5.0(fe6219abba1ce2fd38b5b8d62dc518fa))(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 0.5.0(@cdr-kit/core@0.5.0(@helia/unixfs@5.1.0(encoding@0.1.13))(helia@5.5.1(bufferutil@4.1.0)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)))(@cdr-kit/react@0.5.0(78f83cda882c8eaeee56bebfc104fe07))(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-popover': specifier: ^1.1.15 version: 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@tanstack/react-query': specifier: ^5.62.0 version: 5.100.14(react@19.2.4) + fumadocs-core: + specifier: ^16.9.3 + version: 16.9.3(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.15)(next@16.2.6(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@3.25.76) + fumadocs-mdx: + specifier: ^15.0.10 + version: 15.0.10(@types/mdast@4.0.4)(@types/mdx@2.0.13)(@types/react@19.2.15)(fumadocs-core@16.9.3(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.15)(next@16.2.6(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@3.25.76))(next@16.2.6(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4)(rolldown@1.0.3)(vite@5.4.21(@types/node@25.9.1)(lightningcss@1.32.0)(terser@5.48.0)) next: specifier: 16.2.6 version: 16.2.6(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -70,10 +76,13 @@ importers: version: 19.2.4(react@19.2.4) viem: specifier: ^2.51.3 - version: 2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.4.3) + version: 2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) wagmi: specifier: ^2.14.0 - version: 2.19.5(@tanstack/query-core@5.100.14)(@tanstack/react-query@5.100.14(react@19.2.4))(@types/react@19.2.15)(bufferutil@4.1.0)(encoding@0.1.13)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.4.3))(zod@4.4.3) + version: 2.19.5(@tanstack/query-core@5.100.14)(@tanstack/react-query@5.100.14(react@19.2.4))(@types/react@19.2.15)(bufferutil@4.1.0)(encoding@0.1.13)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) + zod: + specifier: ^3.25.76 + version: 3.25.76 devDependencies: '@types/node': specifier: ^20 @@ -95,7 +104,7 @@ importers: version: 2.0.80(zod@4.4.3) '@cdr-kit/agent': specifier: npm:@cdr-kit/agent@^0.5.0 - version: 0.5.0(@cdr-kit/story@0.5.0(@story-protocol/core-sdk@1.4.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3)))(@helia/unixfs@5.1.0(encoding@0.1.13))(helia@5.5.1(bufferutil@4.1.0)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(utf-8-validate@6.0.6))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3)) + version: 0.5.0(@cdr-kit/story@0.6.0(@story-protocol/core-sdk@1.4.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3)))(@helia/unixfs@5.1.0(encoding@0.1.13))(helia@5.5.1(bufferutil@4.1.0)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(utf-8-validate@6.0.6))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3)) '@cdr-kit/contracts': specifier: npm:@cdr-kit/contracts@^0.5.0 version: 0.5.0(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3)) @@ -104,7 +113,7 @@ importers: version: 0.5.0(@helia/unixfs@5.1.0(encoding@0.1.13))(helia@5.5.1(bufferutil@4.1.0)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(utf-8-validate@6.0.6))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3)) '@cdr-kit/vercel-ai': specifier: npm:@cdr-kit/vercel-ai@^0.5.0 - version: 0.5.0(@cdr-kit/story@0.5.0(@story-protocol/core-sdk@1.4.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3)))(@helia/unixfs@5.1.0(encoding@0.1.13))(ai@6.0.191(zod@4.4.3))(helia@5.5.1(bufferutil@4.1.0)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(utf-8-validate@6.0.6))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3)) + version: 0.5.0(@cdr-kit/story@0.6.0(@story-protocol/core-sdk@1.4.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3)))(@helia/unixfs@5.1.0(encoding@0.1.13))(ai@6.0.191(zod@4.4.3))(helia@5.5.1(bufferutil@4.1.0)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(utf-8-validate@6.0.6))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3)) ai: specifier: ^6.0.191 version: 6.0.191(zod@4.4.3) @@ -429,13 +438,13 @@ importers: version: 5.9.3 viem: specifier: ^2.51.3 - version: 2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + version: 2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.4.3) vitest: specifier: ^2.1.8 version: 2.1.9(@types/node@25.9.1)(happy-dom@15.11.7)(lightningcss@1.32.0)(msw@2.14.6(@types/node@25.9.1)(typescript@5.9.3))(terser@5.48.0) wagmi: specifier: ^2.14.0 - version: 2.19.5(@tanstack/query-core@5.100.14)(@tanstack/react-query@5.100.14(react@19.2.4))(@types/react@19.2.15)(bufferutil@4.1.0)(encoding@0.1.13)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) + version: 2.19.5(@tanstack/query-core@5.100.14)(@tanstack/react-query@5.100.14(react@19.2.4))(@types/react@19.2.15)(bufferutil@4.1.0)(encoding@0.1.13)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.4.3))(zod@4.4.3) packages/react-ui: devDependencies: @@ -843,6 +852,16 @@ packages: '@cdr-kit/story': optional: true + '@cdr-kit/agent@0.6.0': + resolution: {integrity: sha512-5tLRO+Uf166MF8F7SZDvrLJJS/vaI15oSjNjZKWWS//7rMMStYuJN1/3q2oy3WLnbjMEX3uQzTQSCJVOO5zqrw==} + engines: {node: '>=20'} + peerDependencies: + '@cdr-kit/story': '>=0.4.0' + viem: ^2 + peerDependenciesMeta: + '@cdr-kit/story': + optional: true + '@cdr-kit/contracts@0.5.0': resolution: {integrity: sha512-T5h4kAKb1zkEKNd4H2lGEmNXU/ebYKwjGth/HRClEBAS1xRCfvrJXPUE9GBX5IgmMLibYCgdzqybX+qX/Zu5Qg==} engines: {node: '>=20'} @@ -868,6 +887,25 @@ packages: helia: optional: true + '@cdr-kit/core@0.6.0': + resolution: {integrity: sha512-g7heobVSAIst7WNZV2bgjZ2Fm6f1mwOlOptIPuDtBXi8HjCSeFXDDDABH67j+9s3kV/lS9GjUVb6WVjD5hmR2w==} + engines: {node: '>=20'} + peerDependencies: + '@aws-sdk/client-s3': '*' + '@helia/unixfs': '*' + '@storacha/client': '*' + helia: '*' + viem: ^2 + peerDependenciesMeta: + '@aws-sdk/client-s3': + optional: true + '@helia/unixfs': + optional: true + '@storacha/client': + optional: true + helia: + optional: true + '@cdr-kit/react-ui@0.5.0': resolution: {integrity: sha512-dqXVAqLAwGDo1gYh93UscXbOL0ySLO3xghQk5uYwIVqGuNEQ3d9OLdJlnIWpmN6WAPDkd25tW7yd1OwkeBw7Bw==} engines: {node: '>=20'} @@ -894,8 +932,8 @@ packages: '@cdr-kit/story': optional: true - '@cdr-kit/story@0.5.0': - resolution: {integrity: sha512-6v2qxKeyOKZIuuw8Yk24wZMr5ENBXy27P+LN6gH90RbaW9znZUSFYvA/yxAHaOeCQ8y62mLDB7LvTfzSx5uNzw==} + '@cdr-kit/story@0.6.0': + resolution: {integrity: sha512-UI4ozQuTYevfiitOTD6mBBzfKA39VMiCzL0tpxGDnPCVQjLB+LEXrBKNqVJJE8aLUlWJsXQqSQ5ul0+JR/sVGQ==} engines: {node: '>=20'} peerDependencies: '@story-protocol/core-sdk': ^1.4 @@ -2072,6 +2110,9 @@ packages: '@manypkg/get-packages@1.1.3': resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} + '@mdx-js/mdx@3.1.1': + resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==} + '@metamask/abi-utils@2.0.4': resolution: {integrity: sha512-StnIgUB75x7a7AgUhiaUZDpCsqGp7VkNnZh2XivXkJ6mPkE83U8ARGQj5MbRis7VJY8BC5V1AbB1fjdh0hupPQ==} engines: {node: '>=16.0.0'} @@ -2379,6 +2420,10 @@ packages: '@openzeppelin/merkle-tree@1.0.8': resolution: {integrity: sha512-E2c9/Y3vjZXwVvPZKqCKUn7upnvam1P1ZhowJyZVQSkzZm5WhumtaRr+wkUXrZVfkIc7Gfrl7xzabElqDL09ow==} + '@orama/orama@3.1.18': + resolution: {integrity: sha512-a61ljmRVVyG5MC/698C8/FfFDw5a8LOIvyOLW5fztgUXqUpc1jOfQzOitSCbge657OgXXThmY3Tk8fpiDb4UcA==} + engines: {node: '>= 20.0.0'} + '@oxc-project/types@0.133.0': resolution: {integrity: sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA==} @@ -3061,6 +3106,37 @@ packages: '@scure/bip39@1.6.0': resolution: {integrity: sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A==} + '@shikijs/core@4.2.0': + resolution: {integrity: sha512-Hc87Ab1Ld/vEbZRCbwx344I5v+4RU8CVToUTRkqXL1+TjbuOp9U5Xa0M23V4GEWHxVn+yO5otb+HkQVm3ptWQQ==} + engines: {node: '>=20'} + + '@shikijs/engine-javascript@4.2.0': + resolution: {integrity: sha512-fjETeq1k5ffyXqRgS6+3hpvqseLalp1kjNfRbXpUgWR8FpZ1CmQfiNHovc5lncYjt/Vg5JK/WJEmLahjwMa0og==} + engines: {node: '>=20'} + + '@shikijs/engine-oniguruma@4.2.0': + resolution: {integrity: sha512-hTorK1dffPkpbMUk6Z+828PgRo7d07HbnizoP0hNPFjhxMHctj0Px/qoHeGMYafc6ju+u9iMldN4JbVzNQM++g==} + engines: {node: '>=20'} + + '@shikijs/langs@4.2.0': + resolution: {integrity: sha512-bwrVRlJ0wUhZxAbVdvBbv2TTC9yLsh4C/IO5Ofz0T8MQntgDvyVnkbjw9vi50r1kx7RCIJdnJnjZAwmAsXFLZQ==} + engines: {node: '>=20'} + + '@shikijs/primitive@4.2.0': + resolution: {integrity: sha512-NOq+DtUkVBJtZMVXL5A0vI0Xk8nvDYaXetFHSJFlOqjDZIVhIPRYFdGkSoElDqNuegikcc3A76SNUa8dTqtAYA==} + engines: {node: '>=20'} + + '@shikijs/themes@4.2.0': + resolution: {integrity: sha512-RX8IHYeLv8Cu2W6ruc3RxUqWn0IYCqSrMBzi/uRGAmfyDNOnNO5BF/Px7o97n4XTpmFTo5GbRaazuOWj+2ak2w==} + engines: {node: '>=20'} + + '@shikijs/types@4.2.0': + resolution: {integrity: sha512-VT/MKtlpOhEPZloSH3Pb9WCZEBDoQVMa9jedp5UAwmJOar1DVc9DRODAxmYPW9M93IK4ryuqRejFfmlvlVDemw==} + engines: {node: '>=20'} + + '@shikijs/vscode-textmate@10.0.2': + resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} + '@simplewebauthn/browser@8.3.7': resolution: {integrity: sha512-ZtRf+pUEgOCvjrYsbMsJfiHOdKcrSZt2zrAnIIpfmA06r0FxBovFYq0rJ171soZbe13KmWzAoLKjSxVW7KxCdQ==} @@ -3893,12 +3969,18 @@ packages: '@types/dns-packet@5.6.5': resolution: {integrity: sha512-qXOC7XLOEe43ehtWJCMnQXvgcIpv6rPmQ1jXT98Ad8A3TB1Ue50jsCbSSSyuazScEuZ/Q026vHbrOTVkmwA+7Q==} + '@types/estree-jsx@1.0.5': + resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} + '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} '@types/estree@1.0.9': resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + '@types/hast@3.0.4': + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + '@types/istanbul-lib-coverage@2.0.6': resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} @@ -3917,6 +3999,12 @@ packages: '@types/lodash@4.17.24': resolution: {integrity: sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==} + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + + '@types/mdx@2.0.13': + resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} + '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} @@ -3964,6 +4052,12 @@ packages: '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + '@types/unist@2.0.11': + resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} + + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + '@types/uuid@10.0.0': resolution: {integrity: sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==} @@ -4038,6 +4132,9 @@ packages: resolution: {integrity: sha512-9WI52t8ZGLVGrPMBet25yAftqY/n95+zmoUUtJBBQTKDSKUu7OsPTroT2op7U9JatkoRccL0YkWDNMFfC4Sjxg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@ungap/structured-clone@1.3.1': + resolution: {integrity: sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ==} + '@uniswap/token-lists@1.0.0-beta.33': resolution: {integrity: sha512-JQkXcpRI3jFG8y3/CGC4TS8NkDgcxXaOQuYW8Qdvd6DcDiIyg2vVYCG9igFEzF0G6UvxgHkBKC7cWCgzZNYvQg==} engines: {node: '>=10'} @@ -4458,6 +4555,10 @@ packages: resolution: {integrity: sha512-trmleAnZ2PxN/loHWVhhx1qeOHSRXq4TDsBBxq3GqeJitfk3+jTQ+v/C1km/KYq9M7wKqCewMh+/NAvVH7m+bw==} engines: {node: '>=20.19.0'} + astring@1.9.0: + resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} + hasBin: true + async-mutex@0.2.6: resolution: {integrity: sha512-Hs4R+4SPgamu6rSGW8C7cV9gaWUKEHykfzCCvIRuaVv636Ju10ZdeUbvb4TBEW0INuq2DHZqXbK4Nd3yG4RaRw==} @@ -4488,6 +4589,9 @@ packages: babel-plugin-syntax-hermes-parser@0.33.3: resolution: {integrity: sha512-/Z9xYdaJ1lC0pT9do6TqCqhOSLfZ5Ot8D5za1p+feEfWYupCOfGbhhEXN9r2ZgJtDNUNRw/Z+T2CvAGKBqtqWA==} + bail@2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -4687,6 +4791,9 @@ packages: resolution: {integrity: sha512-BDbSRIp6XrQXkTc7g+DN0RB9RrDPTUfals2ecWUlt3juPLjbAvy/V72mJcXY0Ehu0Dq/3WpNCOCT68HUTbW+lw==} hasBin: true + ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + chai@5.3.3: resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} engines: {node: '>=18'} @@ -4702,6 +4809,18 @@ packages: change-case@5.4.4: resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==} + character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + + character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + + character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + + character-reference-invalid@2.0.1: + resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + chardet@2.1.1: resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==} @@ -4786,6 +4905,9 @@ packages: resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} engines: {node: '>=6'} + collapse-white-space@2.1.0: + resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} + color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} @@ -4797,6 +4919,9 @@ packages: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} + comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + commander@12.1.0: resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} engines: {node: '>=18'} @@ -4812,6 +4937,9 @@ packages: commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + compute-scroll-into-view@3.1.1: + resolution: {integrity: sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==} + concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} @@ -4940,6 +5068,9 @@ packages: decimal.js@10.6.0: resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} + decode-named-character-reference@1.3.0: + resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==} + decode-uri-component@0.2.2: resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} engines: {node: '>=0.10'} @@ -5030,6 +5161,9 @@ packages: detect-node-es@1.1.0: resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + dijkstrajs@1.0.3: resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==} @@ -5161,6 +5295,12 @@ packages: es6-promisify@5.0.0: resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} + esast-util-from-estree@2.0.0: + resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==} + + esast-util-from-js@2.0.1: + resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==} + esbuild@0.21.5: resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} engines: {node: '>=12'} @@ -5191,6 +5331,10 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + eslint-scope@8.4.0: resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -5238,6 +5382,27 @@ packages: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} + estree-util-attach-comments@3.0.0: + resolution: {integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==} + + estree-util-build-jsx@3.0.1: + resolution: {integrity: sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==} + + estree-util-is-identifier-name@3.0.0: + resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} + + estree-util-scope@1.0.0: + resolution: {integrity: sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==} + + estree-util-to-js@2.0.0: + resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==} + + estree-util-value-to-estree@3.5.0: + resolution: {integrity: sha512-aMV56R27Gv3QmfmF1MY12GWkGzzeAezAX+UplqHVASfjc9wNzI/X6hC0S9oxq61WT4aQesLGslWP9tKk6ghRZQ==} + + estree-util-visit@2.0.0: + resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} + estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} @@ -5340,6 +5505,9 @@ packages: resolution: {integrity: sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==} engines: {node: '>= 18'} + extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + extendable-error@0.1.7: resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} @@ -5513,6 +5681,96 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] + fumadocs-core@16.9.3: + resolution: {integrity: sha512-8RVzKnzBJR5o+tJCccY28ntekfMQYBoYiz7alnYb/d9YJc+XpnsINzTl63lQ1eBMZ9gdhm2MqRtgUjh/8rUrbw==} + peerDependencies: + '@mdx-js/mdx': '*' + '@mixedbread/sdk': 0.x.x + '@orama/core': 1.x.x + '@oramacloud/client': 2.x.x + '@tanstack/react-router': 1.x.x + '@types/estree-jsx': '*' + '@types/hast': '*' + '@types/mdast': '*' + '@types/react': '*' + algoliasearch: 5.x.x + flexsearch: '*' + lucide-react: '*' + next: 16.x.x + react: ^19.2.0 + react-dom: ^19.2.0 + react-router: 7.x.x + waku: '*' + zod: 4.x.x + peerDependenciesMeta: + '@mdx-js/mdx': + optional: true + '@mixedbread/sdk': + optional: true + '@orama/core': + optional: true + '@oramacloud/client': + optional: true + '@tanstack/react-router': + optional: true + '@types/estree-jsx': + optional: true + '@types/hast': + optional: true + '@types/mdast': + optional: true + '@types/react': + optional: true + algoliasearch: + optional: true + flexsearch: + optional: true + lucide-react: + optional: true + next: + optional: true + react: + optional: true + react-dom: + optional: true + react-router: + optional: true + waku: + optional: true + zod: + optional: true + + fumadocs-mdx@15.0.10: + resolution: {integrity: sha512-kH3S7ESS9yXTAaCkA8dDugsCK/MbnpgyZ5qBEL7cWoavV0O/T4+4YTYFkvNknz7cw+T/r+OG0p2BvlVhkk4fww==} + hasBin: true + peerDependencies: + '@types/mdast': '*' + '@types/mdx': '*' + '@types/react': '*' + fumadocs-core: ^16.7.0 + mdast-util-directive: '*' + next: ^15.3.0 || ^16.0.0 + react: ^19.2.0 + rolldown: '*' + vite: 7.x.x || 8.x.x + peerDependenciesMeta: + '@types/mdast': + optional: true + '@types/mdx': + optional: true + '@types/react': + optional: true + mdast-util-directive: + optional: true + next: + optional: true + react: + optional: true + rolldown: + optional: true + vite: + optional: true + function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} @@ -5558,6 +5816,9 @@ packages: github-from-package@0.0.0: resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} + github-slugger@2.0.0: + resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} + glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -5629,6 +5890,18 @@ packages: resolution: {integrity: sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==} engines: {node: '>= 0.4'} + hast-util-to-estree@3.1.3: + resolution: {integrity: sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==} + + hast-util-to-html@9.0.5: + resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} + + hast-util-to-jsx-runtime@2.3.6: + resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==} + + hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + headers-polyfill@5.0.1: resolution: {integrity: sha512-1TJ6Fih/b8h5TIcv+1+Hw0PDQWJTKDKzFZzcKOiW1wJza3XoAQlkCuXLbymPYB8+ZQyw8mHvdw560e8zVFIWyA==} @@ -5660,6 +5933,9 @@ packages: hookable@6.1.1: resolution: {integrity: sha512-U9LYDy1CwhMCnprUfeAZWZGByVbhd54hwepegYTK7Pi5NvqEj63ifz5z+xukznehT7i6NIZRu89Ay1AZmRsLEQ==} + html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + http-cookie-agent@6.0.8: resolution: {integrity: sha512-qnYh3yLSr2jBsTYkw11elq+T361uKAJaZ2dR4cfYZChw1dt9uL5t3zSUwehoqqVb4oldk1BpkXKm2oat8zV+oA==} engines: {node: '>=18.0.0'} @@ -5733,6 +6009,9 @@ packages: ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + inline-style-parser@0.2.7: + resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==} + inquirer@8.2.7: resolution: {integrity: sha512-UjOaSel/iddGZJ5xP/Eixh6dY1XghiBw4XK13rCCIJcJfyhhoul/7KhLLUGtebEj6GDYM6Vnx/mVsjx2L/mFIA==} engines: {node: '>=12.0.0'} @@ -5782,6 +6061,12 @@ packages: iron-webcrypto@1.2.1: resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==} + is-alphabetical@2.0.1: + resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} + + is-alphanumerical@2.0.1: + resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + is-arguments@1.2.0: resolution: {integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==} engines: {node: '>= 0.4'} @@ -5797,6 +6082,9 @@ packages: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} + is-decimal@2.0.1: + resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + is-docker@2.2.1: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} @@ -5830,6 +6118,9 @@ packages: resolution: {integrity: sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==} engines: {node: '>=6.5.0', npm: '>=3'} + is-hexadecimal@2.0.1: + resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + is-inside-container@1.0.0: resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} engines: {node: '>=14.16'} @@ -6276,6 +6567,9 @@ packages: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} engines: {node: '>=10'} + longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true @@ -6303,6 +6597,13 @@ packages: makeerror@1.0.12: resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + markdown-extensions@2.0.0: + resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} + engines: {node: '>=16'} + + markdown-table@3.0.4: + resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} + marky@1.3.0: resolution: {integrity: sha512-ocnPZQLNpvbedwTy9kNrQEsknEfgvcLMvOtz3sFeWApDq1MXH1TqkCIx58xlpESsfwQOnuBO9beyQuNGzVvuhQ==} @@ -6316,6 +6617,54 @@ packages: md5@2.3.0: resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==} + mdast-util-find-and-replace@3.0.2: + resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} + + mdast-util-from-markdown@2.0.3: + resolution: {integrity: sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==} + + mdast-util-gfm-autolink-literal@2.0.1: + resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} + + mdast-util-gfm-footnote@2.1.0: + resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==} + + mdast-util-gfm-strikethrough@2.0.0: + resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} + + mdast-util-gfm-table@2.0.0: + resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} + + mdast-util-gfm-task-list-item@2.0.0: + resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} + + mdast-util-gfm@3.1.0: + resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==} + + mdast-util-mdx-expression@2.0.1: + resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==} + + mdast-util-mdx-jsx@3.2.0: + resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==} + + mdast-util-mdx@3.0.0: + resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==} + + mdast-util-mdxjs-esm@2.0.1: + resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==} + + mdast-util-phrasing@4.1.0: + resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} + + mdast-util-to-hast@13.2.1: + resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==} + + mdast-util-to-markdown@2.1.2: + resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} + + mdast-util-to-string@4.0.0: + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + media-typer@1.1.0: resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} engines: {node: '>= 0.8'} @@ -6407,6 +6756,111 @@ packages: micro-ftch@0.3.1: resolution: {integrity: sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==} + micromark-core-commonmark@2.0.3: + resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} + + micromark-extension-gfm-autolink-literal@2.1.0: + resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} + + micromark-extension-gfm-footnote@2.1.0: + resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} + + micromark-extension-gfm-strikethrough@2.1.0: + resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} + + micromark-extension-gfm-table@2.1.1: + resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==} + + micromark-extension-gfm-tagfilter@2.0.0: + resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} + + micromark-extension-gfm-task-list-item@2.1.0: + resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==} + + micromark-extension-gfm@3.0.0: + resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} + + micromark-extension-mdx-expression@3.0.1: + resolution: {integrity: sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==} + + micromark-extension-mdx-jsx@3.0.2: + resolution: {integrity: sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==} + + micromark-extension-mdx-md@2.0.0: + resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==} + + micromark-extension-mdxjs-esm@3.0.0: + resolution: {integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==} + + micromark-extension-mdxjs@3.0.0: + resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==} + + micromark-factory-destination@2.0.1: + resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} + + micromark-factory-label@2.0.1: + resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} + + micromark-factory-mdx-expression@2.0.3: + resolution: {integrity: sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==} + + micromark-factory-space@2.0.1: + resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} + + micromark-factory-title@2.0.1: + resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} + + micromark-factory-whitespace@2.0.1: + resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} + + micromark-util-character@2.1.1: + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} + + micromark-util-chunked@2.0.1: + resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} + + micromark-util-classify-character@2.0.1: + resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} + + micromark-util-combine-extensions@2.0.1: + resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} + + micromark-util-decode-numeric-character-reference@2.0.2: + resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} + + micromark-util-decode-string@2.0.1: + resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} + + micromark-util-encode@2.0.1: + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} + + micromark-util-events-to-acorn@2.0.3: + resolution: {integrity: sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==} + + micromark-util-html-tag-name@2.0.1: + resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} + + micromark-util-normalize-identifier@2.0.1: + resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} + + micromark-util-resolve-all@2.0.1: + resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} + + micromark-util-sanitize-uri@2.0.1: + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} + + micromark-util-subtokenize@2.1.0: + resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} + + micromark-util-symbol@2.0.1: + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} + + micromark-util-types@2.0.2: + resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} + + micromark@4.0.2: + resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} + micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} @@ -6668,6 +7122,12 @@ packages: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} + oniguruma-parser@0.12.2: + resolution: {integrity: sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==} + + oniguruma-to-es@4.3.6: + resolution: {integrity: sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==} + open@10.2.0: resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} engines: {node: '>=18'} @@ -6823,6 +7283,9 @@ packages: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} + parse-entities@4.0.2: + resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} + parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} @@ -7011,6 +7474,9 @@ packages: promise@8.3.0: resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} + property-information@7.2.0: + resolution: {integrity: sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==} + protons-runtime@5.6.0: resolution: {integrity: sha512-/Kde+sB9DsMFrddJT/UZWe6XqvL7SL5dbag/DBCElFKhkwDj7XKt53S+mzLyaDP5OqS0wXjV5SA572uWDaT0Hg==} @@ -7208,6 +7674,20 @@ packages: resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} engines: {node: '>= 12.13.0'} + recma-build-jsx@1.0.0: + resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==} + + recma-jsx@1.0.1: + resolution: {integrity: sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + recma-parse@1.0.0: + resolution: {integrity: sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==} + + recma-stringify@1.0.0: + resolution: {integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==} + redaxios@0.5.1: resolution: {integrity: sha512-FSD2AmfdbkYwl7KDExYQlVvIrFz6Yd83pGfaGjBzM9F6rpq8g652Q4Yq5QD4c+nf4g2AgeElv1y+8ajUPiOYMg==} @@ -7217,6 +7697,36 @@ packages: regenerator-runtime@0.13.11: resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + regex-recursion@6.0.2: + resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} + + regex-utilities@2.3.0: + resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} + + regex@6.1.0: + resolution: {integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==} + + rehype-recma@1.0.0: + resolution: {integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==} + + remark-gfm@4.0.1: + resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==} + + remark-mdx@3.1.1: + resolution: {integrity: sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==} + + remark-parse@11.0.0: + resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} + + remark-rehype@11.1.2: + resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==} + + remark-stringify@11.0.0: + resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + + remark@15.0.1: + resolution: {integrity: sha512-Eht5w30ruCXgFmxVUSlNWQ9iiimq07URKeFS3hNc8cUWy1llX4KDWfyEDZRycMc+znsN9Ux5/tJ/BFdgdOwA3A==} + require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -7342,6 +7852,9 @@ packages: scheduler@0.27.0: resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} + scroll-into-view-if-needed@3.1.0: + resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==} + scrypt-js@3.0.1: resolution: {integrity: sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==} @@ -7415,6 +7928,10 @@ packages: resolution: {integrity: sha512-VsC6n6vz1ihYYyZZwX7YZSF5l5x36ca17OC+a69h94YqB7X6XLwf+5MOgynYir2SLFUbl8gIYvBo8K8RoNQ6bQ==} engines: {node: '>= 0.4'} + shiki@4.2.0: + resolution: {integrity: sha512-hjNax6o/ylDy9lefQEaSDtzaT3iVNtZ3WmpQnbuQNoG4xvnSKf2kSKbihZVO4JRG1TTMejs7CmNRYlWgAL66pQ==} + engines: {node: '>=20'} + side-channel-list@1.0.1: resolution: {integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==} engines: {node: '>= 0.4'} @@ -7480,6 +7997,13 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} + source-map@0.7.6: + resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} + engines: {node: '>= 12'} + + space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + sparse-array@1.3.2: resolution: {integrity: sha512-ZT711fePGn3+kQyLuv1fpd3rNSkNF8vd5Kv2D+qnOANeyKs3fx6bUMGWRPvgTTcYV64QMqZKZwcuaQSP3AZ0tg==} @@ -7550,6 +8074,9 @@ packages: string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -7573,6 +8100,12 @@ packages: strnum@2.3.0: resolution: {integrity: sha512-ums3KNd42PGyx5xaoVTO1mjU1bH3NpY4vsrVlnv9PNGqQj8wd7rJ6nEypLrJ7z5vxK5RP0yMLo6J/Gsm62DI5Q==} + style-to-js@1.1.21: + resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==} + + style-to-object@1.0.14: + resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==} + styled-jsx@5.1.6: resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} engines: {node: '>= 12.0.0'} @@ -7753,6 +8286,12 @@ packages: resolution: {integrity: sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==} engines: {node: '>=0.6'} + trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + + trough@2.2.0: + resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} + truncate-utf8-bytes@1.0.2: resolution: {integrity: sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==} @@ -7919,6 +8458,30 @@ packages: resolution: {integrity: sha512-4yqz8a3n5HmGTlsbADNtr/dJlhkh/55Rq798G6ibiULcXbDtaLpTl1pvdqcbFfeoj3iSi52lePFM7h9H21cw/A==} engines: {node: '>=18.17'} + unified@11.0.5: + resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} + + unist-util-is@6.0.1: + resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} + + unist-util-position-from-estree@2.0.0: + resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==} + + unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + + unist-util-remove-position@5.0.0: + resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} + + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + + unist-util-visit-parents@6.0.2: + resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} + + unist-util-visit@5.1.0: + resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==} + universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} @@ -8093,6 +8656,12 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} + vfile-message@4.0.3: + resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} + + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + viem@2.23.2: resolution: {integrity: sha512-NVmW/E0c5crMOtbEAqMF0e3NmvQykFXhLOc/CkLIXOlzHSA6KXVz3CYVmaKqBF8/xtjsjHAGjdJN3Ru1kFJLaA==} peerDependencies: @@ -8463,6 +9032,9 @@ packages: use-sync-external-store: optional: true + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + snapshots: '@achingbrain/http-parser-js@0.5.9': @@ -9022,52 +9594,52 @@ snapshots: - utf-8-validate - zod - '@cdr-kit/agent@0.5.0(@cdr-kit/story@0.5.0(@story-protocol/core-sdk@1.4.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.4.3))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.4.3)))(@helia/unixfs@5.1.0(encoding@0.1.13))(helia@5.5.1(bufferutil@4.1.0)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.4.3))': + '@cdr-kit/agent@0.5.0(@cdr-kit/story@0.6.0(@story-protocol/core-sdk@1.4.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3)))(@helia/unixfs@5.1.0(encoding@0.1.13))(helia@5.5.1(bufferutil@4.1.0)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(utf-8-validate@6.0.6))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3))': dependencies: - '@cdr-kit/contracts': 0.5.0(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.4.3)) - '@cdr-kit/core': 0.5.0(@helia/unixfs@5.1.0(encoding@0.1.13))(helia@5.5.1(bufferutil@4.1.0)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.4.3)) + '@cdr-kit/contracts': 0.5.0(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3)) + '@cdr-kit/core': 0.5.0(@helia/unixfs@5.1.0(encoding@0.1.13))(helia@5.5.1(bufferutil@4.1.0)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(utf-8-validate@6.0.6))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3)) pino: 9.14.0 - viem: 2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.4.3) + viem: 2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3) optionalDependencies: - '@cdr-kit/story': 0.5.0(@story-protocol/core-sdk@1.4.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.4.3))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.4.3)) + '@cdr-kit/story': 0.6.0(@story-protocol/core-sdk@1.4.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3)) transitivePeerDependencies: - '@aws-sdk/client-s3' - '@filoz/synapse-sdk' - '@helia/unixfs' - '@storacha/client' - helia - optional: true - '@cdr-kit/agent@0.5.0(@cdr-kit/story@0.5.0(@story-protocol/core-sdk@1.4.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3)))(@helia/unixfs@5.1.0(encoding@0.1.13))(helia@5.5.1(bufferutil@4.1.0)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(utf-8-validate@6.0.6))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3))': + '@cdr-kit/agent@0.6.0(@cdr-kit/story@0.6.0(@story-protocol/core-sdk@1.4.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)))(@helia/unixfs@5.1.0(encoding@0.1.13))(helia@5.5.1(bufferutil@4.1.0)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))': dependencies: - '@cdr-kit/contracts': 0.5.0(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3)) - '@cdr-kit/core': 0.5.0(@helia/unixfs@5.1.0(encoding@0.1.13))(helia@5.5.1(bufferutil@4.1.0)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(utf-8-validate@6.0.6))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3)) + '@cdr-kit/contracts': 0.5.0(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) + '@cdr-kit/core': 0.6.0(@helia/unixfs@5.1.0(encoding@0.1.13))(helia@5.5.1(bufferutil@4.1.0)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) pino: 9.14.0 - viem: 2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3) + viem: 2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) optionalDependencies: - '@cdr-kit/story': 0.5.0(@story-protocol/core-sdk@1.4.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3)) + '@cdr-kit/story': 0.6.0(@story-protocol/core-sdk@1.4.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) transitivePeerDependencies: - '@aws-sdk/client-s3' - '@filoz/synapse-sdk' - '@helia/unixfs' - '@storacha/client' - helia + optional: true - '@cdr-kit/contracts@0.5.0(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.4.3))': + '@cdr-kit/contracts@0.5.0(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))': dependencies: - viem: 2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.4.3) + viem: 2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) '@cdr-kit/contracts@0.5.0(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3))': dependencies: viem: 2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3) - '@cdr-kit/core@0.5.0(@helia/unixfs@5.1.0(encoding@0.1.13))(helia@5.5.1(bufferutil@4.1.0)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.4.3))': + '@cdr-kit/core@0.5.0(@helia/unixfs@5.1.0(encoding@0.1.13))(helia@5.5.1(bufferutil@4.1.0)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))': dependencies: - '@cdr-kit/contracts': 0.5.0(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.4.3)) + '@cdr-kit/contracts': 0.5.0(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) '@piplabs/cdr-crypto': 0.2.1 - '@piplabs/cdr-sdk': 0.2.1(@helia/unixfs@5.1.0(encoding@0.1.13))(helia@5.5.1(bufferutil@4.1.0)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(multiformats@13.4.2)(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.4.3)) + '@piplabs/cdr-sdk': 0.2.1(@helia/unixfs@5.1.0(encoding@0.1.13))(helia@5.5.1(bufferutil@4.1.0)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(multiformats@13.4.2)(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) multiformats: 13.4.2 - viem: 2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.4.3) + viem: 2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) zod: 3.25.76 optionalDependencies: '@helia/unixfs': 5.1.0(encoding@0.1.13) @@ -9089,25 +9661,40 @@ snapshots: transitivePeerDependencies: - '@filoz/synapse-sdk' - '@cdr-kit/react-ui@0.5.0(@cdr-kit/core@0.5.0(@helia/unixfs@5.1.0(encoding@0.1.13))(helia@5.5.1(bufferutil@4.1.0)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.4.3)))(@cdr-kit/react@0.5.0(fe6219abba1ce2fd38b5b8d62dc518fa))(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@cdr-kit/core': 0.5.0(@helia/unixfs@5.1.0(encoding@0.1.13))(helia@5.5.1(bufferutil@4.1.0)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.4.3)) - '@cdr-kit/react': 0.5.0(fe6219abba1ce2fd38b5b8d62dc518fa) - '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@cdr-kit/react@0.5.0(fe6219abba1ce2fd38b5b8d62dc518fa)': + '@cdr-kit/core@0.6.0(@helia/unixfs@5.1.0(encoding@0.1.13))(helia@5.5.1(bufferutil@4.1.0)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))': dependencies: - '@cdr-kit/contracts': 0.5.0(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.4.3)) - '@cdr-kit/core': 0.5.0(@helia/unixfs@5.1.0(encoding@0.1.13))(helia@5.5.1(bufferutil@4.1.0)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.4.3)) - '@tanstack/react-query': 5.100.14(react@19.2.4) + '@cdr-kit/contracts': 0.5.0(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) + '@piplabs/cdr-crypto': 0.2.1 + '@piplabs/cdr-sdk': 0.2.1(@helia/unixfs@5.1.0(encoding@0.1.13))(helia@5.5.1(bufferutil@4.1.0)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(multiformats@13.4.2)(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) + multiformats: 13.4.2 + viem: 2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + zod: 3.25.76 + optionalDependencies: + '@helia/unixfs': 5.1.0(encoding@0.1.13) + helia: 5.5.1(bufferutil@4.1.0)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) + transitivePeerDependencies: + - '@filoz/synapse-sdk' + optional: true + + '@cdr-kit/react-ui@0.5.0(@cdr-kit/core@0.5.0(@helia/unixfs@5.1.0(encoding@0.1.13))(helia@5.5.1(bufferutil@4.1.0)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)))(@cdr-kit/react@0.5.0(78f83cda882c8eaeee56bebfc104fe07))(@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@cdr-kit/core': 0.5.0(@helia/unixfs@5.1.0(encoding@0.1.13))(helia@5.5.1(bufferutil@4.1.0)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) + '@cdr-kit/react': 0.5.0(78f83cda882c8eaeee56bebfc104fe07) + '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: 19.2.4 - viem: 2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.4.3) - wagmi: 2.19.5(@tanstack/query-core@5.100.14)(@tanstack/react-query@5.100.14(react@19.2.4))(@types/react@19.2.15)(bufferutil@4.1.0)(encoding@0.1.13)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.4.3))(zod@4.4.3) + react-dom: 19.2.4(react@19.2.4) + + '@cdr-kit/react@0.5.0(78f83cda882c8eaeee56bebfc104fe07)': + dependencies: + '@cdr-kit/contracts': 0.5.0(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) + '@cdr-kit/core': 0.5.0(@helia/unixfs@5.1.0(encoding@0.1.13))(helia@5.5.1(bufferutil@4.1.0)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) + '@tanstack/react-query': 5.100.14(react@19.2.4) + react: 19.2.4 + viem: 2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + wagmi: 2.19.5(@tanstack/query-core@5.100.14)(@tanstack/react-query@5.100.14(react@19.2.4))(@types/react@19.2.15)(bufferutil@4.1.0)(encoding@0.1.13)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) optionalDependencies: - '@cdr-kit/agent': 0.5.0(@cdr-kit/story@0.5.0(@story-protocol/core-sdk@1.4.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.4.3))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.4.3)))(@helia/unixfs@5.1.0(encoding@0.1.13))(helia@5.5.1(bufferutil@4.1.0)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.4.3)) - '@cdr-kit/story': 0.5.0(@story-protocol/core-sdk@1.4.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.4.3))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.4.3)) + '@cdr-kit/agent': 0.6.0(@cdr-kit/story@0.6.0(@story-protocol/core-sdk@1.4.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)))(@helia/unixfs@5.1.0(encoding@0.1.13))(helia@5.5.1(bufferutil@4.1.0)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) + '@cdr-kit/story': 0.6.0(@story-protocol/core-sdk@1.4.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) transitivePeerDependencies: - '@aws-sdk/client-s3' - '@filoz/synapse-sdk' @@ -9115,28 +9702,28 @@ snapshots: - '@storacha/client' - helia - '@cdr-kit/story@0.5.0(@story-protocol/core-sdk@1.4.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.4.3))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.4.3))': + '@cdr-kit/story@0.6.0(@story-protocol/core-sdk@1.4.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))': dependencies: - '@cdr-kit/contracts': 0.5.0(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.4.3)) - '@story-protocol/core-sdk': 1.4.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.4.3) - viem: 2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.4.3) + '@cdr-kit/contracts': 0.5.0(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) + '@story-protocol/core-sdk': 1.4.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) optional: true - '@cdr-kit/story@0.5.0(@story-protocol/core-sdk@1.4.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3))': + '@cdr-kit/story@0.6.0(@story-protocol/core-sdk@1.4.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3))': dependencies: '@cdr-kit/contracts': 0.5.0(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3)) '@story-protocol/core-sdk': 1.4.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3) viem: 2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3) optional: true - '@cdr-kit/tools@0.5.0(@cdr-kit/story@0.5.0(@story-protocol/core-sdk@1.4.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3)))(@helia/unixfs@5.1.0(encoding@0.1.13))(helia@5.5.1(bufferutil@4.1.0)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(utf-8-validate@6.0.6))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3))': + '@cdr-kit/tools@0.5.0(@cdr-kit/story@0.6.0(@story-protocol/core-sdk@1.4.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3)))(@helia/unixfs@5.1.0(encoding@0.1.13))(helia@5.5.1(bufferutil@4.1.0)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(utf-8-validate@6.0.6))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3))': dependencies: - '@cdr-kit/agent': 0.5.0(@cdr-kit/story@0.5.0(@story-protocol/core-sdk@1.4.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3)))(@helia/unixfs@5.1.0(encoding@0.1.13))(helia@5.5.1(bufferutil@4.1.0)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(utf-8-validate@6.0.6))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3)) + '@cdr-kit/agent': 0.5.0(@cdr-kit/story@0.6.0(@story-protocol/core-sdk@1.4.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3)))(@helia/unixfs@5.1.0(encoding@0.1.13))(helia@5.5.1(bufferutil@4.1.0)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(utf-8-validate@6.0.6))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3)) '@cdr-kit/core': 0.5.0(@helia/unixfs@5.1.0(encoding@0.1.13))(helia@5.5.1(bufferutil@4.1.0)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(utf-8-validate@6.0.6))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3)) zod: 3.25.76 zod-to-json-schema: 3.25.2(zod@3.25.76) optionalDependencies: - '@cdr-kit/story': 0.5.0(@story-protocol/core-sdk@1.4.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3)) + '@cdr-kit/story': 0.6.0(@story-protocol/core-sdk@1.4.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3)) transitivePeerDependencies: - '@aws-sdk/client-s3' - '@filoz/synapse-sdk' @@ -9145,10 +9732,10 @@ snapshots: - helia - viem - '@cdr-kit/vercel-ai@0.5.0(@cdr-kit/story@0.5.0(@story-protocol/core-sdk@1.4.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3)))(@helia/unixfs@5.1.0(encoding@0.1.13))(ai@6.0.191(zod@4.4.3))(helia@5.5.1(bufferutil@4.1.0)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(utf-8-validate@6.0.6))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3))': + '@cdr-kit/vercel-ai@0.5.0(@cdr-kit/story@0.6.0(@story-protocol/core-sdk@1.4.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3)))(@helia/unixfs@5.1.0(encoding@0.1.13))(ai@6.0.191(zod@4.4.3))(helia@5.5.1(bufferutil@4.1.0)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(utf-8-validate@6.0.6))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3))': dependencies: - '@cdr-kit/agent': 0.5.0(@cdr-kit/story@0.5.0(@story-protocol/core-sdk@1.4.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3)))(@helia/unixfs@5.1.0(encoding@0.1.13))(helia@5.5.1(bufferutil@4.1.0)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(utf-8-validate@6.0.6))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3)) - '@cdr-kit/tools': 0.5.0(@cdr-kit/story@0.5.0(@story-protocol/core-sdk@1.4.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3)))(@helia/unixfs@5.1.0(encoding@0.1.13))(helia@5.5.1(bufferutil@4.1.0)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(utf-8-validate@6.0.6))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3)) + '@cdr-kit/agent': 0.5.0(@cdr-kit/story@0.6.0(@story-protocol/core-sdk@1.4.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3)))(@helia/unixfs@5.1.0(encoding@0.1.13))(helia@5.5.1(bufferutil@4.1.0)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(utf-8-validate@6.0.6))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3)) + '@cdr-kit/tools': 0.5.0(@cdr-kit/story@0.6.0(@story-protocol/core-sdk@1.4.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3)))(@helia/unixfs@5.1.0(encoding@0.1.13))(helia@5.5.1(bufferutil@4.1.0)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(utf-8-validate@6.0.6))(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3)) ai: 6.0.191(zod@4.4.3) transitivePeerDependencies: - '@aws-sdk/client-s3' @@ -11244,6 +11831,36 @@ snapshots: globby: 11.1.0 read-yaml-file: 1.1.0 + '@mdx-js/mdx@3.1.1': + dependencies: + '@types/estree': 1.0.9 + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdx': 2.0.13 + acorn: 8.16.0 + collapse-white-space: 2.1.0 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + estree-util-scope: 1.0.0 + estree-walker: 3.0.3 + hast-util-to-jsx-runtime: 2.3.6 + markdown-extensions: 2.0.0 + recma-build-jsx: 1.0.0 + recma-jsx: 1.0.1(acorn@8.16.0) + recma-stringify: 1.0.0 + rehype-recma: 1.0.0 + remark-mdx: 3.1.1 + remark-parse: 11.0.0 + remark-rehype: 11.1.2 + source-map: 0.7.6 + unified: 11.0.5 + unist-util-position-from-estree: 2.0.0 + unist-util-stringify-position: 4.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + transitivePeerDependencies: + - supports-color + '@metamask/abi-utils@2.0.4': dependencies: '@metamask/superstruct': 3.2.1 @@ -11704,6 +12321,8 @@ snapshots: transitivePeerDependencies: - supports-color + '@orama/orama@3.1.18': {} + '@oxc-project/types@0.133.0': {} '@paulmillr/qr@0.2.1': {} @@ -11820,10 +12439,6 @@ snapshots: dependencies: viem: 2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@piplabs/cdr-contracts@0.2.1(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.4.3))': - dependencies: - viem: 2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.4.3) - '@piplabs/cdr-contracts@0.2.1(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3))': dependencies: viem: 2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@4.4.3) @@ -11835,11 +12450,11 @@ snapshots: '@noble/curves': 1.6.0 '@noble/hashes': 2.0.1 - '@piplabs/cdr-sdk@0.2.1(@helia/unixfs@5.1.0(encoding@0.1.13))(helia@5.5.1(bufferutil@4.1.0)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(multiformats@13.4.2)(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.4.3))': + '@piplabs/cdr-sdk@0.2.1(@helia/unixfs@5.1.0(encoding@0.1.13))(helia@5.5.1(bufferutil@4.1.0)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(multiformats@13.4.2)(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))': dependencies: - '@piplabs/cdr-contracts': 0.2.1(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.4.3)) + '@piplabs/cdr-contracts': 0.2.1(viem@2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) '@piplabs/cdr-crypto': 0.2.1 - viem: 2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.4.3) + viem: 2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) optionalDependencies: '@helia/unixfs': 5.1.0(encoding@0.1.13) helia: 5.5.1(bufferutil@4.1.0)(react-native@0.85.3(@babel/core@7.29.7)(@types/react@19.2.15)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) @@ -12126,7 +12741,7 @@ snapshots: debug: 4.4.3 invariant: 2.2.4 metro: 0.84.4(bufferutil@4.1.0)(utf-8-validate@6.0.6) - metro-config: 0.84.4(bufferutil@4.1.0)(utf-8-validate@5.0.10) + metro-config: 0.84.4(bufferutil@4.1.0)(utf-8-validate@6.0.6) metro-core: 0.84.4 semver: 7.8.1 transitivePeerDependencies: @@ -13197,6 +13812,46 @@ snapshots: '@noble/hashes': 1.8.0 '@scure/base': 1.2.6 + '@shikijs/core@4.2.0': + dependencies: + '@shikijs/primitive': 4.2.0 + '@shikijs/types': 4.2.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.5 + + '@shikijs/engine-javascript@4.2.0': + dependencies: + '@shikijs/types': 4.2.0 + '@shikijs/vscode-textmate': 10.0.2 + oniguruma-to-es: 4.3.6 + + '@shikijs/engine-oniguruma@4.2.0': + dependencies: + '@shikijs/types': 4.2.0 + '@shikijs/vscode-textmate': 10.0.2 + + '@shikijs/langs@4.2.0': + dependencies: + '@shikijs/types': 4.2.0 + + '@shikijs/primitive@4.2.0': + dependencies: + '@shikijs/types': 4.2.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + + '@shikijs/themes@4.2.0': + dependencies: + '@shikijs/types': 4.2.0 + + '@shikijs/types@4.2.0': + dependencies: + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + + '@shikijs/vscode-textmate@10.0.2': {} + '@simplewebauthn/browser@8.3.7': dependencies: '@simplewebauthn/typescript-types': 8.3.4 @@ -14306,14 +14961,14 @@ snapshots: '@standard-schema/spec@1.1.0': {} - '@story-protocol/core-sdk@1.4.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.4.3)': + '@story-protocol/core-sdk@1.4.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: '@scure/bip32': 1.7.0 - abitype: 0.10.3(typescript@5.9.3)(zod@4.4.3) + abitype: 0.10.3(typescript@5.9.3)(zod@3.25.76) bs58: 6.0.0 dotenv: 16.6.1 multiformats: 9.9.0 - viem: 2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.4.3) + viem: 2.51.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - bufferutil - typescript @@ -14428,10 +15083,18 @@ snapshots: dependencies: '@types/node': 20.19.41 + '@types/estree-jsx@1.0.5': + dependencies: + '@types/estree': 1.0.9 + '@types/estree@1.0.8': {} '@types/estree@1.0.9': {} + '@types/hast@3.0.4': + dependencies: + '@types/unist': 3.0.3 + '@types/istanbul-lib-coverage@2.0.6': {} '@types/istanbul-lib-report@3.0.3': @@ -14448,6 +15111,12 @@ snapshots: '@types/lodash@4.17.24': {} + '@types/mdast@4.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/mdx@2.0.13': {} + '@types/ms@2.1.0': {} '@types/multicast-dns@7.2.4': @@ -14500,6 +15169,10 @@ snapshots: '@types/trusted-types@2.0.7': {} + '@types/unist@2.0.11': {} + + '@types/unist@3.0.3': {} + '@types/uuid@10.0.0': {} '@types/ws@7.4.7': @@ -14607,6 +15280,8 @@ snapshots: '@typescript-eslint/types': 8.60.0 eslint-visitor-keys: 5.0.1 + '@ungap/structured-clone@1.3.1': {} + '@uniswap/token-lists@1.0.0-beta.33': {} '@vaultsfyi/sdk@2.3.5(@tanstack/react-query@5.100.14(react@19.2.6))(@types/react@19.2.15)(bufferutil@4.1.0)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.2.6)(typescript@5.9.3)(utf-8-validate@6.0.6)': @@ -16483,6 +17158,8 @@ snapshots: estree-walker: 3.0.3 pathe: 2.0.3 + astring@1.9.0: {} + async-mutex@0.2.6: dependencies: tslib: 2.8.1 @@ -16518,6 +17195,8 @@ snapshots: dependencies: hermes-parser: 0.33.3 + bail@2.0.2: {} + balanced-match@1.0.2: {} balanced-match@4.0.4: {} @@ -16727,6 +17406,8 @@ snapshots: cborg@5.1.1: {} + ccount@2.0.1: {} + chai@5.3.3: dependencies: assertion-error: 2.0.1 @@ -16744,6 +17425,14 @@ snapshots: change-case@5.4.4: {} + character-entities-html4@2.1.0: {} + + character-entities-legacy@3.0.0: {} + + character-entities@2.0.2: {} + + character-reference-invalid@2.0.1: {} + chardet@2.1.1: {} charenc@0.0.2: {} @@ -16835,6 +17524,8 @@ snapshots: clsx@1.2.1: {} + collapse-white-space@2.1.0: {} + color-convert@2.0.1: dependencies: color-name: 1.1.4 @@ -16845,6 +17536,8 @@ snapshots: dependencies: delayed-stream: 1.0.0 + comma-separated-tokens@2.0.3: {} + commander@12.1.0: {} commander@14.0.2: {} @@ -16853,6 +17546,8 @@ snapshots: commander@2.20.3: {} + compute-scroll-into-view@3.1.1: {} + concat-map@0.0.1: {} connect@3.7.0: @@ -16967,6 +17662,10 @@ snapshots: decimal.js@10.6.0: {} + decode-named-character-reference@1.3.0: + dependencies: + character-entities: 2.0.2 + decode-uri-component@0.2.2: {} decompress-response@6.0.0: @@ -17032,6 +17731,10 @@ snapshots: detect-node-es@1.1.0: {} + devlop@1.1.0: + dependencies: + dequal: 2.0.3 + dijkstrajs@1.0.3: {} dir-glob@3.0.1: @@ -17173,6 +17876,20 @@ snapshots: dependencies: es6-promise: 4.2.8 + esast-util-from-estree@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.5 + devlop: 1.1.0 + estree-util-visit: 2.0.0 + unist-util-position-from-estree: 2.0.0 + + esast-util-from-js@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + acorn: 8.16.0 + esast-util-from-estree: 2.0.0 + vfile-message: 4.0.3 + esbuild@0.21.5: optionalDependencies: '@esbuild/aix-ppc64': 0.21.5 @@ -17265,6 +17982,8 @@ snapshots: escape-string-regexp@4.0.0: {} + escape-string-regexp@5.0.0: {} + eslint-scope@8.4.0: dependencies: esrecurse: 4.3.0 @@ -17335,6 +18054,39 @@ snapshots: estraverse@5.3.0: {} + estree-util-attach-comments@3.0.0: + dependencies: + '@types/estree': 1.0.9 + + estree-util-build-jsx@3.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + estree-walker: 3.0.3 + + estree-util-is-identifier-name@3.0.0: {} + + estree-util-scope@1.0.0: + dependencies: + '@types/estree': 1.0.9 + devlop: 1.1.0 + + estree-util-to-js@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.5 + astring: 1.9.0 + source-map: 0.7.6 + + estree-util-value-to-estree@3.5.0: + dependencies: + '@types/estree': 1.0.9 + + estree-util-visit@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/unist': 3.0.3 + estree-walker@3.0.3: dependencies: '@types/estree': 1.0.9 @@ -17509,6 +18261,8 @@ snapshots: transitivePeerDependencies: - supports-color + extend@3.0.2: {} + extendable-error@0.1.7: {} extension-port-stream@3.0.0: @@ -17686,6 +18440,68 @@ snapshots: fsevents@2.3.3: optional: true + fumadocs-core@16.9.3(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.15)(next@16.2.6(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@3.25.76): + dependencies: + '@orama/orama': 3.1.18 + estree-util-value-to-estree: 3.5.0 + github-slugger: 2.0.0 + hast-util-to-estree: 3.1.3 + hast-util-to-jsx-runtime: 2.3.6 + js-yaml: 4.1.1 + mdast-util-mdx: 3.0.0 + mdast-util-to-markdown: 2.1.2 + remark: 15.0.1 + remark-gfm: 4.0.1 + remark-rehype: 11.1.2 + scroll-into-view-if-needed: 3.1.0 + shiki: 4.2.0 + tinyglobby: 0.2.16 + unified: 11.0.5 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + optionalDependencies: + '@mdx-js/mdx': 3.1.1 + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@types/react': 19.2.15 + next: 16.2.6(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + zod: 3.25.76 + transitivePeerDependencies: + - supports-color + + fumadocs-mdx@15.0.10(@types/mdast@4.0.4)(@types/mdx@2.0.13)(@types/react@19.2.15)(fumadocs-core@16.9.3(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.15)(next@16.2.6(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@3.25.76))(next@16.2.6(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4)(rolldown@1.0.3)(vite@5.4.21(@types/node@25.9.1)(lightningcss@1.32.0)(terser@5.48.0)): + dependencies: + '@mdx-js/mdx': 3.1.1 + '@standard-schema/spec': 1.1.0 + chokidar: 5.0.0 + esbuild: 0.28.0 + estree-util-value-to-estree: 3.5.0 + fumadocs-core: 16.9.3(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.15)(next@16.2.6(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@3.25.76) + js-yaml: 4.1.1 + mdast-util-mdx: 3.0.0 + picocolors: 1.1.1 + picomatch: 4.0.4 + tinyexec: 1.2.2 + tinyglobby: 0.2.16 + unified: 11.0.5 + unist-util-remove-position: 5.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + zod: 4.4.3 + optionalDependencies: + '@types/mdast': 4.0.4 + '@types/mdx': 2.0.13 + '@types/react': 19.2.15 + next: 16.2.6(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + rolldown: 1.0.3 + vite: 5.4.21(@types/node@25.9.1)(lightningcss@1.32.0)(terser@5.48.0) + transitivePeerDependencies: + - supports-color + function-bind@1.1.2: {} function-timeout@0.1.1: {} @@ -17726,6 +18542,8 @@ snapshots: github-from-package@0.0.0: {} + github-slugger@2.0.0: {} + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 @@ -17809,6 +18627,65 @@ snapshots: dependencies: function-bind: 1.1.2 + hast-util-to-estree@3.1.3: + dependencies: + '@types/estree': 1.0.9 + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + estree-util-attach-comments: 3.0.0 + estree-util-is-identifier-name: 3.0.0 + hast-util-whitespace: 3.0.0 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + property-information: 7.2.0 + space-separated-tokens: 2.0.2 + style-to-js: 1.1.21 + unist-util-position: 5.0.0 + zwitch: 2.0.4 + transitivePeerDependencies: + - supports-color + + hast-util-to-html@9.0.5: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.1 + property-information: 7.2.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + + hast-util-to-jsx-runtime@2.3.6: + dependencies: + '@types/estree': 1.0.9 + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + hast-util-whitespace: 3.0.0 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + property-information: 7.2.0 + space-separated-tokens: 2.0.2 + style-to-js: 1.1.21 + unist-util-position: 5.0.0 + vfile-message: 4.0.3 + transitivePeerDependencies: + - supports-color + + hast-util-whitespace@3.0.0: + dependencies: + '@types/hast': 3.0.4 + headers-polyfill@5.0.1: dependencies: '@types/set-cookie-parser': 2.4.10 @@ -17961,6 +18838,8 @@ snapshots: hookable@6.1.1: {} + html-void-elements@3.0.0: {} + http-cookie-agent@6.0.8(tough-cookie@5.1.2)(undici@6.26.0): dependencies: agent-base: 7.1.4 @@ -18025,6 +18904,8 @@ snapshots: ini@1.3.8: {} + inline-style-parser@0.2.7: {} + inquirer@8.2.7(@types/node@25.9.1): dependencies: '@inquirer/external-editor': 1.0.3(@types/node@25.9.1) @@ -18134,6 +19015,13 @@ snapshots: iron-webcrypto@1.2.1: {} + is-alphabetical@2.0.1: {} + + is-alphanumerical@2.0.1: + dependencies: + is-alphabetical: 2.0.1 + is-decimal: 2.0.1 + is-arguments@1.2.0: dependencies: call-bound: 1.0.4 @@ -18145,6 +19033,8 @@ snapshots: is-callable@1.2.7: {} + is-decimal@2.0.1: {} + is-docker@2.2.1: {} is-docker@3.0.0: {} @@ -18169,6 +19059,8 @@ snapshots: is-hex-prefixed@1.0.0: {} + is-hexadecimal@2.0.1: {} + is-inside-container@1.0.0: dependencies: is-docker: 3.0.0 @@ -18657,6 +19549,8 @@ snapshots: chalk: 4.1.2 is-unicode-supported: 0.1.0 + longest-streak@3.1.0: {} + loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 @@ -18681,6 +19575,10 @@ snapshots: dependencies: tmpl: 1.0.5 + markdown-extensions@2.0.0: {} + + markdown-table@3.0.4: {} + marky@1.3.0: {} math-intrinsics@1.1.0: {} @@ -18697,6 +19595,169 @@ snapshots: crypt: 0.0.2 is-buffer: 1.1.6 + mdast-util-find-and-replace@3.0.2: + dependencies: + '@types/mdast': 4.0.4 + escape-string-regexp: 5.0.0 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 + + mdast-util-from-markdown@2.0.3: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + mdast-util-to-string: 4.0.0 + micromark: 4.0.2 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-decode-string: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-stringify-position: 4.0.0 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-autolink-literal@2.0.1: + dependencies: + '@types/mdast': 4.0.4 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-find-and-replace: 3.0.2 + micromark-util-character: 2.1.1 + + mdast-util-gfm-footnote@2.1.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + micromark-util-normalize-identifier: 2.0.1 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-strikethrough@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-table@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + markdown-table: 3.0.4 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-task-list-item@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm@3.1.0: + dependencies: + mdast-util-from-markdown: 2.0.3 + mdast-util-gfm-autolink-literal: 2.0.1 + mdast-util-gfm-footnote: 2.1.0 + mdast-util-gfm-strikethrough: 2.0.0 + mdast-util-gfm-table: 2.0.0 + mdast-util-gfm-task-list-item: 2.0.0 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx-expression@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx-jsx@3.2.0: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + parse-entities: 4.0.2 + stringify-entities: 4.0.4 + unist-util-stringify-position: 4.0.0 + vfile-message: 4.0.3 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx@3.0.0: + dependencies: + mdast-util-from-markdown: 2.0.3 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-mdxjs-esm@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-phrasing@4.1.0: + dependencies: + '@types/mdast': 4.0.4 + unist-util-is: 6.0.1 + + mdast-util-to-hast@13.2.1: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@ungap/structured-clone': 1.3.1 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.1 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + + mdast-util-to-markdown@2.1.2: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + longest-streak: 3.1.0 + mdast-util-phrasing: 4.1.0 + mdast-util-to-string: 4.0.0 + micromark-util-classify-character: 2.0.1 + micromark-util-decode-string: 2.0.1 + unist-util-visit: 5.1.0 + zwitch: 2.0.4 + + mdast-util-to-string@4.0.0: + dependencies: + '@types/mdast': 4.0.4 + media-typer@1.1.0: {} memoize-one@5.2.1: {} @@ -18763,6 +19824,22 @@ snapshots: - supports-color - utf-8-validate + metro-config@0.84.4(bufferutil@4.1.0)(utf-8-validate@6.0.6): + dependencies: + connect: 3.7.0 + flow-enums-runtime: 0.0.6 + jest-validate: 29.7.0 + metro: 0.84.4(bufferutil@4.1.0)(utf-8-validate@6.0.6) + metro-cache: 0.84.4 + metro-core: 0.84.4 + metro-runtime: 0.84.4 + yaml: 2.9.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + optional: true + metro-core@0.84.4: dependencies: flow-enums-runtime: 0.0.6 @@ -18945,7 +20022,7 @@ snapshots: metro-babel-transformer: 0.84.4 metro-cache: 0.84.4 metro-cache-key: 0.84.4 - metro-config: 0.84.4(bufferutil@4.1.0)(utf-8-validate@5.0.10) + metro-config: 0.84.4(bufferutil@4.1.0)(utf-8-validate@6.0.6) metro-core: 0.84.4 metro-file-map: 0.84.4 metro-resolver: 0.84.4 @@ -18969,6 +20046,270 @@ snapshots: micro-ftch@0.3.1: {} + micromark-core-commonmark@2.0.3: + dependencies: + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + micromark-factory-destination: 2.0.1 + micromark-factory-label: 2.0.1 + micromark-factory-space: 2.0.1 + micromark-factory-title: 2.0.1 + micromark-factory-whitespace: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-html-tag-name: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-autolink-literal@2.1.0: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-footnote@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-strikethrough@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-table@2.1.1: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-tagfilter@2.0.0: + dependencies: + micromark-util-types: 2.0.2 + + micromark-extension-gfm-task-list-item@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm@3.0.0: + dependencies: + micromark-extension-gfm-autolink-literal: 2.1.0 + micromark-extension-gfm-footnote: 2.1.0 + micromark-extension-gfm-strikethrough: 2.1.0 + micromark-extension-gfm-table: 2.1.1 + micromark-extension-gfm-tagfilter: 2.0.0 + micromark-extension-gfm-task-list-item: 2.1.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-mdx-expression@3.0.1: + dependencies: + '@types/estree': 1.0.9 + devlop: 1.1.0 + micromark-factory-mdx-expression: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-mdx-jsx@3.0.2: + dependencies: + '@types/estree': 1.0.9 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + micromark-factory-mdx-expression: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + vfile-message: 4.0.3 + + micromark-extension-mdx-md@2.0.0: + dependencies: + micromark-util-types: 2.0.2 + + micromark-extension-mdxjs-esm@3.0.0: + dependencies: + '@types/estree': 1.0.9 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.3 + + micromark-extension-mdxjs@3.0.0: + dependencies: + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) + micromark-extension-mdx-expression: 3.0.1 + micromark-extension-mdx-jsx: 3.0.2 + micromark-extension-mdx-md: 2.0.0 + micromark-extension-mdxjs-esm: 3.0.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-destination@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-label@2.0.1: + dependencies: + devlop: 1.1.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-mdx-expression@2.0.3: + dependencies: + '@types/estree': 1.0.9 + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.3 + + micromark-factory-space@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-types: 2.0.2 + + micromark-factory-title@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-whitespace@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-character@2.1.1: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-chunked@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-classify-character@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-combine-extensions@2.0.1: + dependencies: + micromark-util-chunked: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-decode-numeric-character-reference@2.0.2: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-decode-string@2.0.1: + dependencies: + decode-named-character-reference: 1.3.0 + micromark-util-character: 2.1.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-symbol: 2.0.1 + + micromark-util-encode@2.0.1: {} + + micromark-util-events-to-acorn@2.0.3: + dependencies: + '@types/estree': 1.0.9 + '@types/unist': 3.0.3 + devlop: 1.1.0 + estree-util-visit: 2.0.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + vfile-message: 4.0.3 + + micromark-util-html-tag-name@2.0.1: {} + + micromark-util-normalize-identifier@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-resolve-all@2.0.1: + dependencies: + micromark-util-types: 2.0.2 + + micromark-util-sanitize-uri@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-encode: 2.0.1 + micromark-util-symbol: 2.0.1 + + micromark-util-subtokenize@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-symbol@2.0.1: {} + + micromark-util-types@2.0.2: {} + + micromark@4.0.2: + dependencies: + '@types/debug': 4.1.13 + debug: 4.4.3 + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-combine-extensions: 2.0.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-encode: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + transitivePeerDependencies: + - supports-color + micromatch@4.0.8: dependencies: braces: 3.0.3 @@ -19244,6 +20585,14 @@ snapshots: dependencies: mimic-fn: 2.1.0 + oniguruma-parser@0.12.2: {} + + oniguruma-to-es@4.3.6: + dependencies: + oniguruma-parser: 0.12.2 + regex: 6.1.0 + regex-recursion: 6.0.2 + open@10.2.0: dependencies: default-browser: 5.5.0 @@ -19502,6 +20851,16 @@ snapshots: dependencies: callsites: 3.1.0 + parse-entities@4.0.2: + dependencies: + '@types/unist': 2.0.11 + character-entities-legacy: 3.0.0 + character-reference-invalid: 2.0.1 + decode-named-character-reference: 1.3.0 + is-alphanumerical: 2.0.1 + is-decimal: 2.0.1 + is-hexadecimal: 2.0.1 + parseurl@1.3.3: {} path-exists@4.0.0: {} @@ -19709,6 +21068,8 @@ snapshots: dependencies: asap: 2.0.6 + property-information@7.2.0: {} + protons-runtime@5.6.0: dependencies: uint8-varint: 2.0.5 @@ -20078,12 +21439,109 @@ snapshots: real-require@0.2.0: {} + recma-build-jsx@1.0.0: + dependencies: + '@types/estree': 1.0.9 + estree-util-build-jsx: 3.0.1 + vfile: 6.0.3 + + recma-jsx@1.0.1(acorn@8.16.0): + dependencies: + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) + estree-util-to-js: 2.0.0 + recma-parse: 1.0.0 + recma-stringify: 1.0.0 + unified: 11.0.5 + + recma-parse@1.0.0: + dependencies: + '@types/estree': 1.0.9 + esast-util-from-js: 2.0.1 + unified: 11.0.5 + vfile: 6.0.3 + + recma-stringify@1.0.0: + dependencies: + '@types/estree': 1.0.9 + estree-util-to-js: 2.0.0 + unified: 11.0.5 + vfile: 6.0.3 + redaxios@0.5.1: {} reflect-metadata@0.2.2: {} regenerator-runtime@0.13.11: {} + regex-recursion@6.0.2: + dependencies: + regex-utilities: 2.3.0 + + regex-utilities@2.3.0: {} + + regex@6.1.0: + dependencies: + regex-utilities: 2.3.0 + + rehype-recma@1.0.0: + dependencies: + '@types/estree': 1.0.9 + '@types/hast': 3.0.4 + hast-util-to-estree: 3.1.3 + transitivePeerDependencies: + - supports-color + + remark-gfm@4.0.1: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-gfm: 3.1.0 + micromark-extension-gfm: 3.0.0 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-mdx@3.1.1: + dependencies: + mdast-util-mdx: 3.0.0 + micromark-extension-mdxjs: 3.0.0 + transitivePeerDependencies: + - supports-color + + remark-parse@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.3 + micromark-util-types: 2.0.2 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-rehype@11.1.2: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + mdast-util-to-hast: 13.2.1 + unified: 11.0.5 + vfile: 6.0.3 + + remark-stringify@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-to-markdown: 2.1.2 + unified: 11.0.5 + + remark@15.0.1: + dependencies: + '@types/mdast': 4.0.4 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + require-directory@2.1.1: {} require-from-string@2.0.2: {} @@ -20244,6 +21702,10 @@ snapshots: scheduler@0.27.0: {} + scroll-into-view-if-needed@3.1.0: + dependencies: + compute-scroll-into-view: 3.1.1 + scrypt-js@3.0.1: {} secp256k1@5.0.1: @@ -20374,6 +21836,17 @@ snapshots: shell-quote@1.8.4: {} + shiki@4.2.0: + dependencies: + '@shikijs/core': 4.2.0 + '@shikijs/engine-javascript': 4.2.0 + '@shikijs/engine-oniguruma': 4.2.0 + '@shikijs/langs': 4.2.0 + '@shikijs/themes': 4.2.0 + '@shikijs/types': 4.2.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + side-channel-list@1.0.1: dependencies: es-errors: 1.3.0 @@ -20466,6 +21939,10 @@ snapshots: source-map@0.6.1: {} + source-map@0.7.6: {} + + space-separated-tokens@2.0.2: {} + sparse-array@1.3.2: {} spawndamnit@3.0.1: @@ -20529,6 +22006,11 @@ snapshots: dependencies: safe-buffer: 5.2.1 + stringify-entities@4.0.4: + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -20545,6 +22027,14 @@ snapshots: strnum@2.3.0: {} + style-to-js@1.1.21: + dependencies: + style-to-object: 1.0.14 + + style-to-object@1.0.14: + dependencies: + inline-style-parser: 0.2.7 + styled-jsx@5.1.6(@babel/core@7.29.7)(react@19.2.4): dependencies: client-only: 0.0.1 @@ -20702,6 +22192,10 @@ snapshots: treeify@1.1.0: {} + trim-lines@3.0.1: {} + + trough@2.2.0: {} + truncate-utf8-bytes@1.0.2: dependencies: utf8-byte-length: 1.0.5 @@ -20864,6 +22358,48 @@ snapshots: undici@6.26.0: {} + unified@11.0.5: + dependencies: + '@types/unist': 3.0.3 + bail: 2.0.2 + devlop: 1.1.0 + extend: 3.0.2 + is-plain-obj: 4.1.0 + trough: 2.2.0 + vfile: 6.0.3 + + unist-util-is@6.0.1: + dependencies: + '@types/unist': 3.0.3 + + unist-util-position-from-estree@2.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-remove-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-visit: 5.1.0 + + unist-util-stringify-position@4.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-visit-parents@6.0.2: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + + unist-util-visit@5.1.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 + universalify@0.1.2: {} unpipe@1.0.0: {} @@ -20983,6 +22519,16 @@ snapshots: vary@1.1.2: {} + vfile-message@4.0.3: + dependencies: + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 + + vfile@6.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile-message: 4.0.3 + viem@2.23.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76): dependencies: '@noble/curves': 1.8.1 @@ -21876,3 +23422,5 @@ snapshots: '@types/react': 19.2.15 react: 19.2.6 use-sync-external-store: 1.6.0(react@19.2.6) + + zwitch@2.0.4: {} From e1c72d41e1b502c1e7c40cb3d95cbe67b79f4cef Mon Sep 17 00:00:00 2001 From: Blockchain-Oracle Date: Wed, 3 Jun 2026 08:39:13 +0100 Subject: [PATCH 02/23] chore(site): scaffold 70 placeholder MDX files mirroring URL structure One MDX file per existing /docs page, flat structure to match the hardcoded SIDEBAR URLs (no /styled/ or /headless/ sub-paths). Frontmatter has title + description; body is a placeholder for T1-E. Co-Authored-By: Claude Opus 4.7 (1M context) --- apps/site/content/docs/agent-kit/agentkit.mdx | 6 ++++++ apps/site/content/docs/agent-kit/goat.mdx | 6 ++++++ apps/site/content/docs/agent-kit/index.mdx | 6 ++++++ apps/site/content/docs/agent-kit/langchain.mdx | 6 ++++++ apps/site/content/docs/agent-kit/mcp.mdx | 6 ++++++ apps/site/content/docs/agent-kit/openai.mdx | 6 ++++++ apps/site/content/docs/agent-kit/vercel-ai.mdx | 6 ++++++ apps/site/content/docs/cli.mdx | 6 ++++++ apps/site/content/docs/components/access-stepper.mdx | 6 ++++++ apps/site/content/docs/components/cdr-error.mdx | 6 ++++++ apps/site/content/docs/components/cdr-inspector.mdx | 6 ++++++ apps/site/content/docs/components/cdr-network-chip.mdx | 6 ++++++ apps/site/content/docs/components/cdr-progress.mdx | 6 ++++++ apps/site/content/docs/components/cdr-provider.mdx | 6 ++++++ apps/site/content/docs/components/cdr-skeleton.mdx | 6 ++++++ apps/site/content/docs/components/cdr-spinner.mdx | 6 ++++++ apps/site/content/docs/components/condition-badge.mdx | 6 ++++++ apps/site/content/docs/components/copy-button.mdx | 6 ++++++ apps/site/content/docs/components/empty-vaults.mdx | 6 ++++++ .../content/docs/components/escrow-delivery-confirm.mdx | 6 ++++++ apps/site/content/docs/components/explorer-link.mdx | 6 ++++++ apps/site/content/docs/components/heartbeat-timer.mdx | 6 ++++++ apps/site/content/docs/components/index.mdx | 6 ++++++ apps/site/content/docs/components/ip-price.mdx | 6 ++++++ .../content/docs/components/multi-sig-approval-tracker.mdx | 6 ++++++ apps/site/content/docs/components/multi-sig-signer.mdx | 6 ++++++ apps/site/content/docs/components/short-address.mdx | 6 ++++++ apps/site/content/docs/components/subscribe-button.mdx | 6 ++++++ apps/site/content/docs/components/time-window-badge.mdx | 6 ++++++ apps/site/content/docs/components/unlockable.mdx | 6 ++++++ apps/site/content/docs/components/vault-card.mdx | 6 ++++++ apps/site/content/docs/components/vault-gate.mdx | 6 ++++++ apps/site/content/docs/components/vault.mdx | 6 ++++++ apps/site/content/docs/contracts/cdr-kit-vault.mdx | 6 ++++++ apps/site/content/docs/contracts/composable-condition.mdx | 6 ++++++ .../content/docs/contracts/conditional-escrow-condition.mdx | 6 ++++++ .../site/content/docs/contracts/creator-write-condition.mdx | 6 ++++++ .../content/docs/contracts/dead-man-switch-condition.mdx | 6 ++++++ apps/site/content/docs/contracts/index.mdx | 6 ++++++ apps/site/content/docs/contracts/multi-sig-condition.mdx | 6 ++++++ apps/site/content/docs/contracts/open-condition.mdx | 6 ++++++ apps/site/content/docs/contracts/subscription-condition.mdx | 6 ++++++ apps/site/content/docs/contracts/tier-gate-condition.mdx | 6 ++++++ apps/site/content/docs/contracts/time-window-condition.mdx | 6 ++++++ apps/site/content/docs/forms/index.mdx | 6 ++++++ apps/site/content/docs/hooks/use-access-vault.mdx | 6 ++++++ apps/site/content/docs/hooks/use-attach-license-terms.mdx | 6 ++++++ apps/site/content/docs/hooks/use-cdr-wallet.mdx | 6 ++++++ apps/site/content/docs/hooks/use-create-vault.mdx | 6 ++++++ apps/site/content/docs/hooks/use-creator-vaults.mdx | 6 ++++++ apps/site/content/docs/hooks/use-dead-man-timer.mdx | 6 ++++++ apps/site/content/docs/hooks/use-discover-vaults.mdx | 6 ++++++ apps/site/content/docs/hooks/use-escrow-state.mdx | 6 ++++++ apps/site/content/docs/hooks/use-mint-license-token.mdx | 6 ++++++ apps/site/content/docs/hooks/use-multi-sig-status.mdx | 6 ++++++ apps/site/content/docs/hooks/use-publish.mdx | 6 ++++++ apps/site/content/docs/hooks/use-register-ip.mdx | 6 ++++++ apps/site/content/docs/hooks/use-storage-backend.mdx | 6 ++++++ apps/site/content/docs/hooks/use-story-client.mdx | 6 ++++++ apps/site/content/docs/hooks/use-subscribe-and-access.mdx | 6 ++++++ apps/site/content/docs/hooks/use-time-window-state.mdx | 6 ++++++ apps/site/content/docs/hooks/use-vault-events.mdx | 6 ++++++ apps/site/content/docs/hooks/use-vault.mdx | 6 ++++++ apps/site/content/docs/index.mdx | 4 ++-- apps/site/content/docs/quickstart.mdx | 6 ++++++ apps/site/content/docs/scaffolder.mdx | 6 ++++++ apps/site/content/docs/skill.mdx | 6 ++++++ apps/site/content/docs/storage.mdx | 6 ++++++ apps/site/content/docs/story.mdx | 6 ++++++ apps/site/content/docs/theming.mdx | 6 ++++++ 70 files changed, 416 insertions(+), 2 deletions(-) create mode 100644 apps/site/content/docs/agent-kit/agentkit.mdx create mode 100644 apps/site/content/docs/agent-kit/goat.mdx create mode 100644 apps/site/content/docs/agent-kit/index.mdx create mode 100644 apps/site/content/docs/agent-kit/langchain.mdx create mode 100644 apps/site/content/docs/agent-kit/mcp.mdx create mode 100644 apps/site/content/docs/agent-kit/openai.mdx create mode 100644 apps/site/content/docs/agent-kit/vercel-ai.mdx create mode 100644 apps/site/content/docs/cli.mdx create mode 100644 apps/site/content/docs/components/access-stepper.mdx create mode 100644 apps/site/content/docs/components/cdr-error.mdx create mode 100644 apps/site/content/docs/components/cdr-inspector.mdx create mode 100644 apps/site/content/docs/components/cdr-network-chip.mdx create mode 100644 apps/site/content/docs/components/cdr-progress.mdx create mode 100644 apps/site/content/docs/components/cdr-provider.mdx create mode 100644 apps/site/content/docs/components/cdr-skeleton.mdx create mode 100644 apps/site/content/docs/components/cdr-spinner.mdx create mode 100644 apps/site/content/docs/components/condition-badge.mdx create mode 100644 apps/site/content/docs/components/copy-button.mdx create mode 100644 apps/site/content/docs/components/empty-vaults.mdx create mode 100644 apps/site/content/docs/components/escrow-delivery-confirm.mdx create mode 100644 apps/site/content/docs/components/explorer-link.mdx create mode 100644 apps/site/content/docs/components/heartbeat-timer.mdx create mode 100644 apps/site/content/docs/components/index.mdx create mode 100644 apps/site/content/docs/components/ip-price.mdx create mode 100644 apps/site/content/docs/components/multi-sig-approval-tracker.mdx create mode 100644 apps/site/content/docs/components/multi-sig-signer.mdx create mode 100644 apps/site/content/docs/components/short-address.mdx create mode 100644 apps/site/content/docs/components/subscribe-button.mdx create mode 100644 apps/site/content/docs/components/time-window-badge.mdx create mode 100644 apps/site/content/docs/components/unlockable.mdx create mode 100644 apps/site/content/docs/components/vault-card.mdx create mode 100644 apps/site/content/docs/components/vault-gate.mdx create mode 100644 apps/site/content/docs/components/vault.mdx create mode 100644 apps/site/content/docs/contracts/cdr-kit-vault.mdx create mode 100644 apps/site/content/docs/contracts/composable-condition.mdx create mode 100644 apps/site/content/docs/contracts/conditional-escrow-condition.mdx create mode 100644 apps/site/content/docs/contracts/creator-write-condition.mdx create mode 100644 apps/site/content/docs/contracts/dead-man-switch-condition.mdx create mode 100644 apps/site/content/docs/contracts/index.mdx create mode 100644 apps/site/content/docs/contracts/multi-sig-condition.mdx create mode 100644 apps/site/content/docs/contracts/open-condition.mdx create mode 100644 apps/site/content/docs/contracts/subscription-condition.mdx create mode 100644 apps/site/content/docs/contracts/tier-gate-condition.mdx create mode 100644 apps/site/content/docs/contracts/time-window-condition.mdx create mode 100644 apps/site/content/docs/forms/index.mdx create mode 100644 apps/site/content/docs/hooks/use-access-vault.mdx create mode 100644 apps/site/content/docs/hooks/use-attach-license-terms.mdx create mode 100644 apps/site/content/docs/hooks/use-cdr-wallet.mdx create mode 100644 apps/site/content/docs/hooks/use-create-vault.mdx create mode 100644 apps/site/content/docs/hooks/use-creator-vaults.mdx create mode 100644 apps/site/content/docs/hooks/use-dead-man-timer.mdx create mode 100644 apps/site/content/docs/hooks/use-discover-vaults.mdx create mode 100644 apps/site/content/docs/hooks/use-escrow-state.mdx create mode 100644 apps/site/content/docs/hooks/use-mint-license-token.mdx create mode 100644 apps/site/content/docs/hooks/use-multi-sig-status.mdx create mode 100644 apps/site/content/docs/hooks/use-publish.mdx create mode 100644 apps/site/content/docs/hooks/use-register-ip.mdx create mode 100644 apps/site/content/docs/hooks/use-storage-backend.mdx create mode 100644 apps/site/content/docs/hooks/use-story-client.mdx create mode 100644 apps/site/content/docs/hooks/use-subscribe-and-access.mdx create mode 100644 apps/site/content/docs/hooks/use-time-window-state.mdx create mode 100644 apps/site/content/docs/hooks/use-vault-events.mdx create mode 100644 apps/site/content/docs/hooks/use-vault.mdx create mode 100644 apps/site/content/docs/quickstart.mdx create mode 100644 apps/site/content/docs/scaffolder.mdx create mode 100644 apps/site/content/docs/skill.mdx create mode 100644 apps/site/content/docs/storage.mdx create mode 100644 apps/site/content/docs/story.mdx create mode 100644 apps/site/content/docs/theming.mdx diff --git a/apps/site/content/docs/agent-kit/agentkit.mdx b/apps/site/content/docs/agent-kit/agentkit.mdx new file mode 100644 index 0000000..cf3d5e4 --- /dev/null +++ b/apps/site/content/docs/agent-kit/agentkit.mdx @@ -0,0 +1,6 @@ +--- +title: Coinbase AgentKit adapter +description: getCdrActionProvider for AgentKit. +--- + + diff --git a/apps/site/content/docs/agent-kit/goat.mdx b/apps/site/content/docs/agent-kit/goat.mdx new file mode 100644 index 0000000..0c9493d --- /dev/null +++ b/apps/site/content/docs/agent-kit/goat.mdx @@ -0,0 +1,6 @@ +--- +title: GOAT SDK adapter +description: GOAT plugin wiring. +--- + + diff --git a/apps/site/content/docs/agent-kit/index.mdx b/apps/site/content/docs/agent-kit/index.mdx new file mode 100644 index 0000000..5c975d4 --- /dev/null +++ b/apps/site/content/docs/agent-kit/index.mdx @@ -0,0 +1,6 @@ +--- +title: CdrAgent +description: Autonomous agent surface for CDR operations. +--- + + diff --git a/apps/site/content/docs/agent-kit/langchain.mdx b/apps/site/content/docs/agent-kit/langchain.mdx new file mode 100644 index 0000000..61d51bf --- /dev/null +++ b/apps/site/content/docs/agent-kit/langchain.mdx @@ -0,0 +1,6 @@ +--- +title: LangChain adapter +description: createReactAgent integration. +--- + + diff --git a/apps/site/content/docs/agent-kit/mcp.mdx b/apps/site/content/docs/agent-kit/mcp.mdx new file mode 100644 index 0000000..784b16a --- /dev/null +++ b/apps/site/content/docs/agent-kit/mcp.mdx @@ -0,0 +1,6 @@ +--- +title: MCP server +description: stdio MCP server for Claude Desktop and friends. +--- + + diff --git a/apps/site/content/docs/agent-kit/openai.mdx b/apps/site/content/docs/agent-kit/openai.mdx new file mode 100644 index 0000000..9367c68 --- /dev/null +++ b/apps/site/content/docs/agent-kit/openai.mdx @@ -0,0 +1,6 @@ +--- +title: OpenAI / Anthropic adapter +description: Tool-call loop for OpenAI/Anthropic. +--- + + diff --git a/apps/site/content/docs/agent-kit/vercel-ai.mdx b/apps/site/content/docs/agent-kit/vercel-ai.mdx new file mode 100644 index 0000000..be49f18 --- /dev/null +++ b/apps/site/content/docs/agent-kit/vercel-ai.mdx @@ -0,0 +1,6 @@ +--- +title: Vercel AI SDK adapter +description: getVercelAITools for the AI SDK. +--- + + diff --git a/apps/site/content/docs/cli.mdx b/apps/site/content/docs/cli.mdx new file mode 100644 index 0000000..ebc81cb --- /dev/null +++ b/apps/site/content/docs/cli.mdx @@ -0,0 +1,6 @@ +--- +title: cdr CLI +description: Command-line interface for vault and Story IP operations. +--- + + diff --git a/apps/site/content/docs/components/access-stepper.mdx b/apps/site/content/docs/components/access-stepper.mdx new file mode 100644 index 0000000..37c6565 --- /dev/null +++ b/apps/site/content/docs/components/access-stepper.mdx @@ -0,0 +1,6 @@ +--- +title: AccessStepper +description: pay → collect-partials → decrypt ordered stepper. +--- + + diff --git a/apps/site/content/docs/components/cdr-error.mdx b/apps/site/content/docs/components/cdr-error.mdx new file mode 100644 index 0000000..c61f01a --- /dev/null +++ b/apps/site/content/docs/components/cdr-error.mdx @@ -0,0 +1,6 @@ +--- +title: CdrError +description: Soft-bordered danger alert with optional retry. +--- + + diff --git a/apps/site/content/docs/components/cdr-inspector.mdx b/apps/site/content/docs/components/cdr-inspector.mdx new file mode 100644 index 0000000..7139184 --- /dev/null +++ b/apps/site/content/docs/components/cdr-inspector.mdx @@ -0,0 +1,6 @@ +--- +title: CdrInspector +description: Dev panel showing mock|live mode, WASM and API status. +--- + + diff --git a/apps/site/content/docs/components/cdr-network-chip.mdx b/apps/site/content/docs/components/cdr-network-chip.mdx new file mode 100644 index 0000000..566844e --- /dev/null +++ b/apps/site/content/docs/components/cdr-network-chip.mdx @@ -0,0 +1,6 @@ +--- +title: CdrNetworkChip +description: Pulsing dot showing live or mock network state. +--- + + diff --git a/apps/site/content/docs/components/cdr-progress.mdx b/apps/site/content/docs/components/cdr-progress.mdx new file mode 100644 index 0000000..836443d --- /dev/null +++ b/apps/site/content/docs/components/cdr-progress.mdx @@ -0,0 +1,6 @@ +--- +title: CdrProgress +description: 6px gradient progress bar. +--- + + diff --git a/apps/site/content/docs/components/cdr-provider.mdx b/apps/site/content/docs/components/cdr-provider.mdx new file mode 100644 index 0000000..1a60b66 --- /dev/null +++ b/apps/site/content/docs/components/cdr-provider.mdx @@ -0,0 +1,6 @@ +--- +title: CdrProvider +description: Top-level provider wiring wagmi + react-query + CDR config. +--- + + diff --git a/apps/site/content/docs/components/cdr-skeleton.mdx b/apps/site/content/docs/components/cdr-skeleton.mdx new file mode 100644 index 0000000..3289949 --- /dev/null +++ b/apps/site/content/docs/components/cdr-skeleton.mdx @@ -0,0 +1,6 @@ +--- +title: CdrSkeleton +description: Loading placeholder driven by --cdr-skeleton CSS variable. +--- + + diff --git a/apps/site/content/docs/components/cdr-spinner.mdx b/apps/site/content/docs/components/cdr-spinner.mdx new file mode 100644 index 0000000..66168a9 --- /dev/null +++ b/apps/site/content/docs/components/cdr-spinner.mdx @@ -0,0 +1,6 @@ +--- +title: CdrSpinner +description: 18px rotating border spinner. +--- + + diff --git a/apps/site/content/docs/components/condition-badge.mdx b/apps/site/content/docs/components/condition-badge.mdx new file mode 100644 index 0000000..6a05412 --- /dev/null +++ b/apps/site/content/docs/components/condition-badge.mdx @@ -0,0 +1,6 @@ +--- +title: ConditionBadge +description: Pill for subscription / tiergate / composable / open conditions. +--- + + diff --git a/apps/site/content/docs/components/copy-button.mdx b/apps/site/content/docs/components/copy-button.mdx new file mode 100644 index 0000000..5322c99 --- /dev/null +++ b/apps/site/content/docs/components/copy-button.mdx @@ -0,0 +1,6 @@ +--- +title: CopyButton +description: Minimal copy-to-clipboard button. +--- + + diff --git a/apps/site/content/docs/components/empty-vaults.mdx b/apps/site/content/docs/components/empty-vaults.mdx new file mode 100644 index 0000000..231dfc6 --- /dev/null +++ b/apps/site/content/docs/components/empty-vaults.mdx @@ -0,0 +1,6 @@ +--- +title: EmptyVaults +description: Empty-state hook for vault lists. +--- + + diff --git a/apps/site/content/docs/components/escrow-delivery-confirm.mdx b/apps/site/content/docs/components/escrow-delivery-confirm.mdx new file mode 100644 index 0000000..c2579e6 --- /dev/null +++ b/apps/site/content/docs/components/escrow-delivery-confirm.mdx @@ -0,0 +1,6 @@ +--- +title: EscrowDeliveryConfirm +description: Buyer/seller pay + confirm-delivery flow. +--- + + diff --git a/apps/site/content/docs/components/explorer-link.mdx b/apps/site/content/docs/components/explorer-link.mdx new file mode 100644 index 0000000..381b7a9 --- /dev/null +++ b/apps/site/content/docs/components/explorer-link.mdx @@ -0,0 +1,6 @@ +--- +title: ExplorerLink +description: Mono primary link with external-link icon. +--- + + diff --git a/apps/site/content/docs/components/heartbeat-timer.mdx b/apps/site/content/docs/components/heartbeat-timer.mdx new file mode 100644 index 0000000..834e84b --- /dev/null +++ b/apps/site/content/docs/components/heartbeat-timer.mdx @@ -0,0 +1,6 @@ +--- +title: HeartbeatTimer +description: Dead-man countdown + extend-now poke button. +--- + + diff --git a/apps/site/content/docs/components/index.mdx b/apps/site/content/docs/components/index.mdx new file mode 100644 index 0000000..f95d663 --- /dev/null +++ b/apps/site/content/docs/components/index.mdx @@ -0,0 +1,6 @@ +--- +title: Components +description: Headless + styled component library for CDR. +--- + + diff --git a/apps/site/content/docs/components/ip-price.mdx b/apps/site/content/docs/components/ip-price.mdx new file mode 100644 index 0000000..2a63680 --- /dev/null +++ b/apps/site/content/docs/components/ip-price.mdx @@ -0,0 +1,6 @@ +--- +title: IpPrice +description: Formats wei → IP, renders License-gated for null. +--- + + diff --git a/apps/site/content/docs/components/multi-sig-approval-tracker.mdx b/apps/site/content/docs/components/multi-sig-approval-tracker.mdx new file mode 100644 index 0000000..dc49693 --- /dev/null +++ b/apps/site/content/docs/components/multi-sig-approval-tracker.mdx @@ -0,0 +1,6 @@ +--- +title: MultiSigApprovalTracker +description: Tracks on-chain + off-chain multi-sig approvals. +--- + + diff --git a/apps/site/content/docs/components/multi-sig-signer.mdx b/apps/site/content/docs/components/multi-sig-signer.mdx new file mode 100644 index 0000000..15c2ae7 --- /dev/null +++ b/apps/site/content/docs/components/multi-sig-signer.mdx @@ -0,0 +1,6 @@ +--- +title: MultiSigSigner +description: EIP-712 signer for multi-sig vault approvals. +--- + + diff --git a/apps/site/content/docs/components/short-address.mdx b/apps/site/content/docs/components/short-address.mdx new file mode 100644 index 0000000..0b65f01 --- /dev/null +++ b/apps/site/content/docs/components/short-address.mdx @@ -0,0 +1,6 @@ +--- +title: ShortAddress +description: Truncated mono address chip with copy. +--- + + diff --git a/apps/site/content/docs/components/subscribe-button.mdx b/apps/site/content/docs/components/subscribe-button.mdx new file mode 100644 index 0000000..940ccf8 --- /dev/null +++ b/apps/site/content/docs/components/subscribe-button.mdx @@ -0,0 +1,6 @@ +--- +title: SubscribeButton +description: Batteries-included CTA wrapping useSubscribeAndAccess. +--- + + diff --git a/apps/site/content/docs/components/time-window-badge.mdx b/apps/site/content/docs/components/time-window-badge.mdx new file mode 100644 index 0000000..1d409af --- /dev/null +++ b/apps/site/content/docs/components/time-window-badge.mdx @@ -0,0 +1,6 @@ +--- +title: TimeWindowBadge +description: Open/upcoming/closed indicator for time-window vaults. +--- + + diff --git a/apps/site/content/docs/components/unlockable.mdx b/apps/site/content/docs/components/unlockable.mdx new file mode 100644 index 0000000..1e63b11 --- /dev/null +++ b/apps/site/content/docs/components/unlockable.mdx @@ -0,0 +1,6 @@ +--- +title: UnlockablePill +description: Inline pill paywall with floating popover. +--- + + diff --git a/apps/site/content/docs/components/vault-card.mdx b/apps/site/content/docs/components/vault-card.mdx new file mode 100644 index 0000000..0f3dadf --- /dev/null +++ b/apps/site/content/docs/components/vault-card.mdx @@ -0,0 +1,6 @@ +--- +title: VaultCard +description: Marketplace card with mouse-tracking gradient. +--- + + diff --git a/apps/site/content/docs/components/vault-gate.mdx b/apps/site/content/docs/components/vault-gate.mdx new file mode 100644 index 0000000..99956af --- /dev/null +++ b/apps/site/content/docs/components/vault-gate.mdx @@ -0,0 +1,6 @@ +--- +title: VaultGate +description: Headless gate that renders children when a vault is unlocked. +--- + + diff --git a/apps/site/content/docs/components/vault.mdx b/apps/site/content/docs/components/vault.mdx new file mode 100644 index 0000000..73c19df --- /dev/null +++ b/apps/site/content/docs/components/vault.mdx @@ -0,0 +1,6 @@ +--- +title: Vault +description: Compound component with Unlocked/Locked/Loading slots. +--- + + diff --git a/apps/site/content/docs/contracts/cdr-kit-vault.mdx b/apps/site/content/docs/contracts/cdr-kit-vault.mdx new file mode 100644 index 0000000..07c0653 --- /dev/null +++ b/apps/site/content/docs/contracts/cdr-kit-vault.mdx @@ -0,0 +1,6 @@ +--- +title: CdrKitVault +description: Factory contract that allocates + configures vaults atomically. +--- + + diff --git a/apps/site/content/docs/contracts/composable-condition.mdx b/apps/site/content/docs/contracts/composable-condition.mdx new file mode 100644 index 0000000..82bfc2c --- /dev/null +++ b/apps/site/content/docs/contracts/composable-condition.mdx @@ -0,0 +1,6 @@ +--- +title: ComposableCondition +description: Composable AND/OR combinator. +--- + + diff --git a/apps/site/content/docs/contracts/conditional-escrow-condition.mdx b/apps/site/content/docs/contracts/conditional-escrow-condition.mdx new file mode 100644 index 0000000..6145d6a --- /dev/null +++ b/apps/site/content/docs/contracts/conditional-escrow-condition.mdx @@ -0,0 +1,6 @@ +--- +title: ConditionalEscrowCondition +description: Escrow with delivery confirmation. +--- + + diff --git a/apps/site/content/docs/contracts/creator-write-condition.mdx b/apps/site/content/docs/contracts/creator-write-condition.mdx new file mode 100644 index 0000000..c70c482 --- /dev/null +++ b/apps/site/content/docs/contracts/creator-write-condition.mdx @@ -0,0 +1,6 @@ +--- +title: CreatorWriteCondition +description: Only creator can write. +--- + + diff --git a/apps/site/content/docs/contracts/dead-man-switch-condition.mdx b/apps/site/content/docs/contracts/dead-man-switch-condition.mdx new file mode 100644 index 0000000..a2f2c70 --- /dev/null +++ b/apps/site/content/docs/contracts/dead-man-switch-condition.mdx @@ -0,0 +1,6 @@ +--- +title: DeadManSwitchCondition +description: Dead-man switch with creator poke. +--- + + diff --git a/apps/site/content/docs/contracts/index.mdx b/apps/site/content/docs/contracts/index.mdx new file mode 100644 index 0000000..676469b --- /dev/null +++ b/apps/site/content/docs/contracts/index.mdx @@ -0,0 +1,6 @@ +--- +title: Condition library +description: 9 deployed condition contracts on Aeneid. +--- + + diff --git a/apps/site/content/docs/contracts/multi-sig-condition.mdx b/apps/site/content/docs/contracts/multi-sig-condition.mdx new file mode 100644 index 0000000..342267f --- /dev/null +++ b/apps/site/content/docs/contracts/multi-sig-condition.mdx @@ -0,0 +1,6 @@ +--- +title: MultiSigCondition +description: Multi-sig with on-chain + EIP-712 paths. +--- + + diff --git a/apps/site/content/docs/contracts/open-condition.mdx b/apps/site/content/docs/contracts/open-condition.mdx new file mode 100644 index 0000000..d2160e4 --- /dev/null +++ b/apps/site/content/docs/contracts/open-condition.mdx @@ -0,0 +1,6 @@ +--- +title: OpenCondition +description: Always-allows read condition. +--- + + diff --git a/apps/site/content/docs/contracts/subscription-condition.mdx b/apps/site/content/docs/contracts/subscription-condition.mdx new file mode 100644 index 0000000..288e38d --- /dev/null +++ b/apps/site/content/docs/contracts/subscription-condition.mdx @@ -0,0 +1,6 @@ +--- +title: SubscriptionCondition +description: Pay-per-period access condition. +--- + + diff --git a/apps/site/content/docs/contracts/tier-gate-condition.mdx b/apps/site/content/docs/contracts/tier-gate-condition.mdx new file mode 100644 index 0000000..14dada9 --- /dev/null +++ b/apps/site/content/docs/contracts/tier-gate-condition.mdx @@ -0,0 +1,6 @@ +--- +title: TierGateCondition +description: Tier-gated access condition. +--- + + diff --git a/apps/site/content/docs/contracts/time-window-condition.mdx b/apps/site/content/docs/contracts/time-window-condition.mdx new file mode 100644 index 0000000..6ce0f23 --- /dev/null +++ b/apps/site/content/docs/contracts/time-window-condition.mdx @@ -0,0 +1,6 @@ +--- +title: TimeWindowCondition +description: Time-windowed access condition. +--- + + diff --git a/apps/site/content/docs/forms/index.mdx b/apps/site/content/docs/forms/index.mdx new file mode 100644 index 0000000..d1c92c2 --- /dev/null +++ b/apps/site/content/docs/forms/index.mdx @@ -0,0 +1,6 @@ +--- +title: @cdr-kit/forms +description: Encrypted form submissions with multi-provider storage selection. +--- + + diff --git a/apps/site/content/docs/hooks/use-access-vault.mdx b/apps/site/content/docs/hooks/use-access-vault.mdx new file mode 100644 index 0000000..92aa29d --- /dev/null +++ b/apps/site/content/docs/hooks/use-access-vault.mdx @@ -0,0 +1,6 @@ +--- +title: useAccessVault +description: Read + decrypt a CDR vault. +--- + + diff --git a/apps/site/content/docs/hooks/use-attach-license-terms.mdx b/apps/site/content/docs/hooks/use-attach-license-terms.mdx new file mode 100644 index 0000000..0a2a5a3 --- /dev/null +++ b/apps/site/content/docs/hooks/use-attach-license-terms.mdx @@ -0,0 +1,6 @@ +--- +title: useAttachLicenseTerms +description: Attach PIL terms to an IP asset. +--- + + diff --git a/apps/site/content/docs/hooks/use-cdr-wallet.mdx b/apps/site/content/docs/hooks/use-cdr-wallet.mdx new file mode 100644 index 0000000..e665bea --- /dev/null +++ b/apps/site/content/docs/hooks/use-cdr-wallet.mdx @@ -0,0 +1,6 @@ +--- +title: useCdrWallet +description: Thin wagmi wrapper for connect/disconnect. +--- + + diff --git a/apps/site/content/docs/hooks/use-create-vault.mdx b/apps/site/content/docs/hooks/use-create-vault.mdx new file mode 100644 index 0000000..4fdba79 --- /dev/null +++ b/apps/site/content/docs/hooks/use-create-vault.mdx @@ -0,0 +1,6 @@ +--- +title: useCreateVault +description: Create a new CDR vault via the factory. +--- + + diff --git a/apps/site/content/docs/hooks/use-creator-vaults.mdx b/apps/site/content/docs/hooks/use-creator-vaults.mdx new file mode 100644 index 0000000..158751a --- /dev/null +++ b/apps/site/content/docs/hooks/use-creator-vaults.mdx @@ -0,0 +1,6 @@ +--- +title: useCreatorVaults +description: List vaults created by an address. +--- + + diff --git a/apps/site/content/docs/hooks/use-dead-man-timer.mdx b/apps/site/content/docs/hooks/use-dead-man-timer.mdx new file mode 100644 index 0000000..128580c --- /dev/null +++ b/apps/site/content/docs/hooks/use-dead-man-timer.mdx @@ -0,0 +1,6 @@ +--- +title: useDeadManTimer +description: Countdown + poke for DeadManSwitchCondition. +--- + + diff --git a/apps/site/content/docs/hooks/use-discover-vaults.mdx b/apps/site/content/docs/hooks/use-discover-vaults.mdx new file mode 100644 index 0000000..94c6458 --- /dev/null +++ b/apps/site/content/docs/hooks/use-discover-vaults.mdx @@ -0,0 +1,6 @@ +--- +title: useDiscoverVaults +description: Paginated VaultCreated event scan. +--- + + diff --git a/apps/site/content/docs/hooks/use-escrow-state.mdx b/apps/site/content/docs/hooks/use-escrow-state.mdx new file mode 100644 index 0000000..513963c --- /dev/null +++ b/apps/site/content/docs/hooks/use-escrow-state.mdx @@ -0,0 +1,6 @@ +--- +title: useEscrowState +description: Buyer/seller state for ConditionalEscrowCondition. +--- + + diff --git a/apps/site/content/docs/hooks/use-mint-license-token.mdx b/apps/site/content/docs/hooks/use-mint-license-token.mdx new file mode 100644 index 0000000..2b4b48c --- /dev/null +++ b/apps/site/content/docs/hooks/use-mint-license-token.mdx @@ -0,0 +1,6 @@ +--- +title: useMintLicenseToken +description: Mint Story license tokens. +--- + + diff --git a/apps/site/content/docs/hooks/use-multi-sig-status.mdx b/apps/site/content/docs/hooks/use-multi-sig-status.mdx new file mode 100644 index 0000000..bfa253b --- /dev/null +++ b/apps/site/content/docs/hooks/use-multi-sig-status.mdx @@ -0,0 +1,6 @@ +--- +title: useMultiSigStatus +description: Polling status for MultiSigCondition. +--- + + diff --git a/apps/site/content/docs/hooks/use-publish.mdx b/apps/site/content/docs/hooks/use-publish.mdx new file mode 100644 index 0000000..1d2bb0d --- /dev/null +++ b/apps/site/content/docs/hooks/use-publish.mdx @@ -0,0 +1,6 @@ +--- +title: usePublish +description: One-shot register + attach + vault + write secret. +--- + + diff --git a/apps/site/content/docs/hooks/use-register-ip.mdx b/apps/site/content/docs/hooks/use-register-ip.mdx new file mode 100644 index 0000000..0c9e60d --- /dev/null +++ b/apps/site/content/docs/hooks/use-register-ip.mdx @@ -0,0 +1,6 @@ +--- +title: useRegisterIp +description: Mint + register IP asset via Story SPG. +--- + + diff --git a/apps/site/content/docs/hooks/use-storage-backend.mdx b/apps/site/content/docs/hooks/use-storage-backend.mdx new file mode 100644 index 0000000..5b09038 --- /dev/null +++ b/apps/site/content/docs/hooks/use-storage-backend.mdx @@ -0,0 +1,6 @@ +--- +title: useStorageBackend +description: Factory hook for storage providers. +--- + + diff --git a/apps/site/content/docs/hooks/use-story-client.mdx b/apps/site/content/docs/hooks/use-story-client.mdx new file mode 100644 index 0000000..37e6fd4 --- /dev/null +++ b/apps/site/content/docs/hooks/use-story-client.mdx @@ -0,0 +1,6 @@ +--- +title: useStoryClient +description: Lazy-loaded Story SDK client bound to wagmi wallet. +--- + + diff --git a/apps/site/content/docs/hooks/use-subscribe-and-access.mdx b/apps/site/content/docs/hooks/use-subscribe-and-access.mdx new file mode 100644 index 0000000..90fe200 --- /dev/null +++ b/apps/site/content/docs/hooks/use-subscribe-and-access.mdx @@ -0,0 +1,6 @@ +--- +title: useSubscribeAndAccess +description: Full subscribe → access two-step flow. +--- + + diff --git a/apps/site/content/docs/hooks/use-time-window-state.mdx b/apps/site/content/docs/hooks/use-time-window-state.mdx new file mode 100644 index 0000000..d091c57 --- /dev/null +++ b/apps/site/content/docs/hooks/use-time-window-state.mdx @@ -0,0 +1,6 @@ +--- +title: useTimeWindowState +description: Real-time TimeWindowCondition status. +--- + + diff --git a/apps/site/content/docs/hooks/use-vault-events.mdx b/apps/site/content/docs/hooks/use-vault-events.mdx new file mode 100644 index 0000000..522c924 --- /dev/null +++ b/apps/site/content/docs/hooks/use-vault-events.mdx @@ -0,0 +1,6 @@ +--- +title: useVaultEvents +description: Live VaultCreated event feed. +--- + + diff --git a/apps/site/content/docs/hooks/use-vault.mdx b/apps/site/content/docs/hooks/use-vault.mdx new file mode 100644 index 0000000..70ba760 --- /dev/null +++ b/apps/site/content/docs/hooks/use-vault.mdx @@ -0,0 +1,6 @@ +--- +title: useVault +description: Read vault info from factory by uuid. +--- + + diff --git a/apps/site/content/docs/index.mdx b/apps/site/content/docs/index.mdx index 696b0ea..c04239f 100644 --- a/apps/site/content/docs/index.mdx +++ b/apps/site/content/docs/index.mdx @@ -1,6 +1,6 @@ --- title: Introduction -description: Developer toolkit for Story Protocol's Confidential Data Rails. Gate encrypted data behind a real on-chain payment or license check in under a minute. +description: Developer toolkit for Story Protocol's Confidential Data Rails. --- -cdr-kit is the developer toolkit for Story Protocol's Confidential Data Rails. + diff --git a/apps/site/content/docs/quickstart.mdx b/apps/site/content/docs/quickstart.mdx new file mode 100644 index 0000000..dba0663 --- /dev/null +++ b/apps/site/content/docs/quickstart.mdx @@ -0,0 +1,6 @@ +--- +title: Quickstart +description: Ship private, paid, license-gated data on Story in under 60 seconds. +--- + + diff --git a/apps/site/content/docs/scaffolder.mdx b/apps/site/content/docs/scaffolder.mdx new file mode 100644 index 0000000..a7183a8 --- /dev/null +++ b/apps/site/content/docs/scaffolder.mdx @@ -0,0 +1,6 @@ +--- +title: create-cdr-kit-app +description: Scaffold a working CDR app in one command. +--- + + diff --git a/apps/site/content/docs/skill.mdx b/apps/site/content/docs/skill.mdx new file mode 100644 index 0000000..09a35d8 --- /dev/null +++ b/apps/site/content/docs/skill.mdx @@ -0,0 +1,6 @@ +--- +title: Claude Code plugin +description: Multi-skill Claude Code plugin for cdr-kit operations. +--- + + diff --git a/apps/site/content/docs/storage.mdx b/apps/site/content/docs/storage.mdx new file mode 100644 index 0000000..976835e --- /dev/null +++ b/apps/site/content/docs/storage.mdx @@ -0,0 +1,6 @@ +--- +title: Storage adapters +description: S3, Storacha, Helia, Pinata, Supabase — drop-in storage providers. +--- + + diff --git a/apps/site/content/docs/story.mdx b/apps/site/content/docs/story.mdx new file mode 100644 index 0000000..7f9f83f --- /dev/null +++ b/apps/site/content/docs/story.mdx @@ -0,0 +1,6 @@ +--- +title: Story IP +description: Register, license, and gate IP assets via @cdr-kit/story. +--- + + diff --git a/apps/site/content/docs/theming.mdx b/apps/site/content/docs/theming.mdx new file mode 100644 index 0000000..25651c8 --- /dev/null +++ b/apps/site/content/docs/theming.mdx @@ -0,0 +1,6 @@ +--- +title: Theming +description: Customize cdr-kit's design tokens to match your brand. +--- + + From e63d4698a1ea455f61840d2547501bdfbc2961a2 Mon Sep 17 00:00:00 2001 From: Blockchain-Oracle Date: Wed, 3 Jun 2026 08:45:27 +0100 Subject: [PATCH 03/23] feat(site): catch-all docs route rendering MDX via existing DocPage layout MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The custom DocPage / parts / Toc / Sidebar all stay 100% untouched. What changes is the data source: page content now comes from MDX files in content/docs/ via fumadocs source.getPage(), instead of inline JSX inside per-route page.tsx files. - app/docs/[[...slug]]/page.tsx — single catch-all rendering all docs URLs - lib/mdx-components.tsx — registers every gallery/demo component so MDX files can reference , , etc. without imports - components/docs/doc-page.tsx — adds optional tocItems prop for fumadocs heading-tree driven scrollspy; sections with empty titles skip the H2 render - Old /docs/{components,hooks,contracts,agent-kit,quickstart,...}/page.tsx files moved to apps/site/_docs_old_tsx_backup/ (gitignored) — reference during T1-E content migration, deleted at end HTTP 200 verified on /docs, /docs/quickstart, /docs/components/subscribe-button. Co-Authored-By: Claude Opus 4.7 (1M context) --- apps/site/.gitignore | 3 + apps/site/app/docs/[[...slug]]/page.tsx | 76 +++++++++++++++++++++++++ apps/site/components/docs/doc-page.tsx | 22 +++++-- apps/site/content/docs/forms/index.mdx | 4 +- apps/site/lib/mdx-components.tsx | 56 ++++++++++++++++++ apps/site/package.json | 1 + pnpm-lock.yaml | 3 + 7 files changed, 159 insertions(+), 6 deletions(-) create mode 100644 apps/site/app/docs/[[...slug]]/page.tsx create mode 100644 apps/site/lib/mdx-components.tsx diff --git a/apps/site/.gitignore b/apps/site/.gitignore index 22aef67..79baa44 100644 --- a/apps/site/.gitignore +++ b/apps/site/.gitignore @@ -19,3 +19,6 @@ yarn-debug.log* .env.local .env*.local .source + +# T1 migration temp backup of TSX docs pages +_docs_old_tsx_backup/ diff --git a/apps/site/app/docs/[[...slug]]/page.tsx b/apps/site/app/docs/[[...slug]]/page.tsx new file mode 100644 index 0000000..fad3e8a --- /dev/null +++ b/apps/site/app/docs/[[...slug]]/page.tsx @@ -0,0 +1,76 @@ +import { notFound } from "next/navigation"; +import type { Metadata } from "next"; +import type { ComponentType } from "react"; +import { source } from "@/lib/source"; +import { DocPage } from "@/components/docs/doc-page"; +import { getMDXComponents } from "@/lib/mdx-components"; + +type Props = { params: Promise<{ slug?: string[] }> }; + +// The frontmatter schema (defined in source.config.ts) doesn't flow into source.getPage().data +// as typed fields — fumadocs surfaces them as `unknown` by default. This interface is the +// runtime shape we know exists. +interface DocFrontmatter { + title: string; + description?: string; + importLine?: string; + breadcrumb?: string[]; + prev?: { href: string; label: string }; + next?: { href: string; label: string }; + body: ComponentType<{ components: ReturnType }>; + toc: Array<{ url: string; title: unknown; depth: number }>; +} + +export async function generateMetadata({ params }: Props): Promise { + const { slug } = await params; + const page = source.getPage(slug); + if (!page) return {}; + const data = page.data as unknown as DocFrontmatter; + return { + title: `${data.title} — cdr-kit`, + description: data.description, + }; +} + +export async function generateStaticParams() { + return source.generateParams(); +} + +export default async function Page({ params }: Props) { + const { slug } = await params; + const page = source.getPage(slug); + if (!page) notFound(); + + const data = page.data as unknown as DocFrontmatter; + const MDX = data.body; + + // Map fumadocs TOC ({ url: "#id", title, depth }) → DocTocItem ({ id, label }). + // Only h2/h3 land in the right rail to match the existing scrollspy density. + const tocItems = data.toc + .filter((node) => node.depth <= 3) + .map((node) => ({ + id: node.url.replace(/^#/, ""), + label: typeof node.title === "string" ? node.title : "", + })); + + return ( + , + }, + ], + }} + tocItems={tocItems} + /> + ); +} diff --git a/apps/site/components/docs/doc-page.tsx b/apps/site/components/docs/doc-page.tsx index 13e8ebb..b1e0107 100644 --- a/apps/site/components/docs/doc-page.tsx +++ b/apps/site/components/docs/doc-page.tsx @@ -8,6 +8,12 @@ export interface DocSection { content: ReactNode; } +/** Right-rail TOC item — either derived from `sections` or supplied directly (e.g. from fumadocs MDX heading scan). */ +export interface DocTocItem { + id: string; + label: string; +} + export interface DocPageData { breadcrumb: string[]; title: string; @@ -20,8 +26,16 @@ export interface DocPageData { next?: { href: string; label: string }; } -/** The canonical anatomy: breadcrumb → title row → lede → import badge → optional callout → sections → prev/next. */ -export function DocPage({ data }: { data: DocPageData }) { +/** The canonical anatomy: breadcrumb → title row → lede → import badge → optional callout → sections → prev/next. + * Pass `tocItems` to override the right-rail TOC (e.g. from MDX heading scan); otherwise derived from sections. */ +export function DocPage({ + data, + tocItems, +}: { + data: DocPageData; + tocItems?: DocTocItem[]; +}) { + const items = tocItems ?? data.sections.filter((s) => s.title).map((s) => ({ id: s.id, label: s.title })); return ( <>
@@ -36,13 +50,13 @@ export function DocPage({ data }: { data: DocPageData }) { {data.callout} {data.sections.map((s) => (
-

{s.title}

+ {s.title &&

{s.title}

} {s.content}
))}
- ({ id: s.id, label: s.title }))} /> + ); } diff --git a/apps/site/content/docs/forms/index.mdx b/apps/site/content/docs/forms/index.mdx index d1c92c2..65ee056 100644 --- a/apps/site/content/docs/forms/index.mdx +++ b/apps/site/content/docs/forms/index.mdx @@ -1,6 +1,6 @@ --- -title: @cdr-kit/forms +title: "@cdr-kit/forms" description: Encrypted form submissions with multi-provider storage selection. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/lib/mdx-components.tsx b/apps/site/lib/mdx-components.tsx new file mode 100644 index 0000000..15b1154 --- /dev/null +++ b/apps/site/lib/mdx-components.tsx @@ -0,0 +1,56 @@ +import type { MDXComponents } from "mdx/types"; + +// docs primitives — these stay 100% custom (zero fumadocs-ui) +import { Demo } from "@/components/docs/demo"; +import { PropsTable } from "@/components/docs/doc-page"; +import { CodePanel } from "@/components/docs/code-panel"; +import { Callout } from "@/components/docs/parts"; + +// primitives +import { Badge } from "@/components/primitives/badge"; +import { CopyButton } from "@/components/primitives/copy-button"; +import { CopyLine } from "@/components/primitives/copy-line"; + +// gallery + docs demos — registered so MDX can reference them without imports +import { SubscribeButtonDemo } from "@/components/gallery/subscribe-button-demo"; +import { AccessStepperDemo } from "@/components/gallery/access-stepper-demo"; +import { VaultGateDemo } from "@/components/docs/demos/vault-gate-demo"; +import { UnlockableDemo } from "@/components/docs/demos/unlockable-demo"; +import { HeartbeatTimerDemo } from "@/components/docs/demos/heartbeat-timer-demo"; +import { TimeWindowBadgeDemo } from "@/components/docs/demos/time-window-badge-demo"; +import { MultiSigApprovalTrackerDemo } from "@/components/docs/demos/multi-sig-approval-tracker-demo"; +import { MultiSigSignerDemo } from "@/components/docs/demos/multi-sig-signer-demo"; +import { EscrowDeliveryConfirmDemo } from "@/components/docs/demos/escrow-delivery-confirm-demo"; +import { + CdrInspectorDemo, + CdrSkeletonDemo, + EmptyVaultsDemo, +} from "@/components/docs/demos/headless-demos"; + +/** + * Components available to every MDX page without per-file imports. + * Adding a new demo component? Register it here. + */ +export function getMDXComponents(): MDXComponents { + return { + Demo, + PropsTable, + CodePanel, + Callout, + Badge, + CopyButton, + CopyLine, + SubscribeButtonDemo, + AccessStepperDemo, + VaultGateDemo, + UnlockableDemo, + HeartbeatTimerDemo, + TimeWindowBadgeDemo, + MultiSigApprovalTrackerDemo, + MultiSigSignerDemo, + EscrowDeliveryConfirmDemo, + CdrInspectorDemo, + CdrSkeletonDemo, + EmptyVaultsDemo, + }; +} diff --git a/apps/site/package.json b/apps/site/package.json index ee4a919..87a6c15 100644 --- a/apps/site/package.json +++ b/apps/site/package.json @@ -26,6 +26,7 @@ "zod": "^3.25.76" }, "devDependencies": { + "@types/mdx": "^2.0.13", "@types/node": "^20", "@types/react": "^19", "@types/react-dom": "^19", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b3c7879..97e6a40 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -84,6 +84,9 @@ importers: specifier: ^3.25.76 version: 3.25.76 devDependencies: + '@types/mdx': + specifier: ^2.0.13 + version: 2.0.13 '@types/node': specifier: ^20 version: 20.19.41 From d975c5373de940256a0cfe780cae0996001d15b9 Mon Sep 17 00:00:00 2001 From: Blockchain-Oracle Date: Wed, 3 Jun 2026 08:45:41 +0100 Subject: [PATCH 04/23] chore(site): remove old per-route docs page.tsx files + fix MDX comment syntax MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Deletes the 70+ /docs/*/page.tsx files now superseded by the catch-all. Originals are preserved at _docs_old_tsx_backup/ (gitignored) for T1-E. - Converts placeholder HTML comments to MDX expression comments ({/* */} instead of ) — MDX rejects HTML comments at parse. - Quotes '@cdr-kit/forms' frontmatter title so YAML doesn't read '@' as an alias reference (YAMLException at column 8). Co-Authored-By: Claude Opus 4.7 (1M context) --- .../site/app/docs/agent-kit/agentkit/page.tsx | 27 --- apps/site/app/docs/agent-kit/goat/page.tsx | 26 --- .../app/docs/agent-kit/langchain/page.tsx | 32 --- apps/site/app/docs/agent-kit/mcp/page.tsx | 147 ------------- apps/site/app/docs/agent-kit/openai/page.tsx | 35 ---- apps/site/app/docs/agent-kit/page.tsx | 56 ----- .../app/docs/agent-kit/vercel-ai/page.tsx | 34 --- apps/site/app/docs/cli/page.tsx | 119 ----------- .../docs/components/access-stepper/page.tsx | 46 ----- .../app/docs/components/cdr-error/page.tsx | 60 ------ .../docs/components/cdr-inspector/page.tsx | 39 ---- .../docs/components/cdr-network-chip/page.tsx | 52 ----- .../app/docs/components/cdr-progress/page.tsx | 53 ----- .../app/docs/components/cdr-provider/page.tsx | 41 ---- .../app/docs/components/cdr-skeleton/page.tsx | 27 --- .../app/docs/components/cdr-spinner/page.tsx | 49 ----- apps/site/app/docs/components/components.css | 88 -------- .../docs/components/condition-badge/page.tsx | 56 ----- .../app/docs/components/copy-button/page.tsx | 52 ----- .../app/docs/components/empty-vaults/page.tsx | 31 --- .../escrow-delivery-confirm/page.tsx | 59 ------ .../docs/components/explorer-link/page.tsx | 52 ----- .../docs/components/heartbeat-timer/page.tsx | 58 ------ .../app/docs/components/ip-price/page.tsx | 55 ----- .../multi-sig-approval-tracker/page.tsx | 53 ----- .../docs/components/multi-sig-signer/page.tsx | 143 ------------- apps/site/app/docs/components/page.tsx | 172 --------------- .../docs/components/short-address/page.tsx | 48 ----- .../docs/components/subscribe-button/page.tsx | 53 ----- .../components/time-window-badge/page.tsx | 56 ----- .../app/docs/components/unlockable/page.tsx | 121 ----------- .../app/docs/components/vault-card/page.tsx | 75 ------- .../app/docs/components/vault-gate/page.tsx | 164 --------------- apps/site/app/docs/components/vault/page.tsx | 51 ----- .../app/docs/contracts/cdr-kit-vault/page.tsx | 45 ---- .../contracts/composable-condition/page.tsx | 36 ---- .../conditional-escrow-condition/page.tsx | 52 ----- .../creator-write-condition/page.tsx | 22 -- .../dead-man-switch-condition/page.tsx | 46 ----- .../contracts/multi-sig-condition/page.tsx | 66 ------ .../docs/contracts/open-condition/page.tsx | 20 -- apps/site/app/docs/contracts/page.tsx | 66 ------ .../contracts/subscription-condition/page.tsx | 34 --- .../contracts/tier-gate-condition/page.tsx | 36 ---- .../contracts/time-window-condition/page.tsx | 45 ---- .../app/docs/hooks/use-access-vault/page.tsx | 46 ----- .../hooks/use-attach-license-terms/page.tsx | 84 -------- .../app/docs/hooks/use-cdr-wallet/page.tsx | 27 --- .../app/docs/hooks/use-create-vault/page.tsx | 29 --- .../docs/hooks/use-creator-vaults/page.tsx | 25 --- .../docs/hooks/use-dead-man-timer/page.tsx | 32 --- .../docs/hooks/use-discover-vaults/page.tsx | 27 --- .../app/docs/hooks/use-escrow-state/page.tsx | 34 --- .../hooks/use-mint-license-token/page.tsx | 97 --------- .../docs/hooks/use-multi-sig-status/page.tsx | 27 --- apps/site/app/docs/hooks/use-publish/page.tsx | 132 ------------ .../app/docs/hooks/use-register-ip/page.tsx | 78 ------- .../docs/hooks/use-storage-backend/page.tsx | 32 --- .../app/docs/hooks/use-story-client/page.tsx | 79 ------- .../hooks/use-subscribe-and-access/page.tsx | 36 ---- .../docs/hooks/use-time-window-state/page.tsx | 31 --- .../app/docs/hooks/use-vault-events/page.tsx | 25 --- apps/site/app/docs/hooks/use-vault/page.tsx | 25 --- apps/site/app/docs/page.tsx | 141 ------------- apps/site/app/docs/quickstart/page.tsx | 78 ------- apps/site/app/docs/scaffolder/page.tsx | 79 ------- apps/site/app/docs/skill/page.tsx | 100 --------- apps/site/app/docs/storage/page.tsx | 195 ------------------ apps/site/app/docs/story/page.tsx | 107 ---------- apps/site/app/docs/theming/page.tsx | 64 ------ apps/site/content/docs/agent-kit/agentkit.mdx | 2 +- apps/site/content/docs/agent-kit/goat.mdx | 2 +- apps/site/content/docs/agent-kit/index.mdx | 2 +- .../site/content/docs/agent-kit/langchain.mdx | 2 +- apps/site/content/docs/agent-kit/mcp.mdx | 2 +- apps/site/content/docs/agent-kit/openai.mdx | 2 +- .../site/content/docs/agent-kit/vercel-ai.mdx | 2 +- apps/site/content/docs/cli.mdx | 2 +- .../docs/components/access-stepper.mdx | 2 +- .../content/docs/components/cdr-error.mdx | 2 +- .../content/docs/components/cdr-inspector.mdx | 2 +- .../docs/components/cdr-network-chip.mdx | 2 +- .../content/docs/components/cdr-progress.mdx | 2 +- .../content/docs/components/cdr-provider.mdx | 2 +- .../content/docs/components/cdr-skeleton.mdx | 2 +- .../content/docs/components/cdr-spinner.mdx | 2 +- .../docs/components/condition-badge.mdx | 2 +- .../content/docs/components/copy-button.mdx | 2 +- .../content/docs/components/empty-vaults.mdx | 2 +- .../components/escrow-delivery-confirm.mdx | 2 +- .../content/docs/components/explorer-link.mdx | 2 +- .../docs/components/heartbeat-timer.mdx | 2 +- apps/site/content/docs/components/index.mdx | 2 +- .../site/content/docs/components/ip-price.mdx | 2 +- .../components/multi-sig-approval-tracker.mdx | 2 +- .../docs/components/multi-sig-signer.mdx | 2 +- .../content/docs/components/short-address.mdx | 2 +- .../docs/components/subscribe-button.mdx | 2 +- .../docs/components/time-window-badge.mdx | 2 +- .../content/docs/components/unlockable.mdx | 2 +- .../content/docs/components/vault-card.mdx | 2 +- .../content/docs/components/vault-gate.mdx | 2 +- apps/site/content/docs/components/vault.mdx | 2 +- .../content/docs/contracts/cdr-kit-vault.mdx | 2 +- .../docs/contracts/composable-condition.mdx | 2 +- .../conditional-escrow-condition.mdx | 2 +- .../contracts/creator-write-condition.mdx | 2 +- .../contracts/dead-man-switch-condition.mdx | 2 +- apps/site/content/docs/contracts/index.mdx | 2 +- .../docs/contracts/multi-sig-condition.mdx | 2 +- .../content/docs/contracts/open-condition.mdx | 2 +- .../docs/contracts/subscription-condition.mdx | 2 +- .../docs/contracts/tier-gate-condition.mdx | 2 +- .../docs/contracts/time-window-condition.mdx | 2 +- .../content/docs/hooks/use-access-vault.mdx | 2 +- .../docs/hooks/use-attach-license-terms.mdx | 2 +- .../content/docs/hooks/use-cdr-wallet.mdx | 2 +- .../content/docs/hooks/use-create-vault.mdx | 2 +- .../content/docs/hooks/use-creator-vaults.mdx | 2 +- .../content/docs/hooks/use-dead-man-timer.mdx | 2 +- .../docs/hooks/use-discover-vaults.mdx | 2 +- .../content/docs/hooks/use-escrow-state.mdx | 2 +- .../docs/hooks/use-mint-license-token.mdx | 2 +- .../docs/hooks/use-multi-sig-status.mdx | 2 +- apps/site/content/docs/hooks/use-publish.mdx | 2 +- .../content/docs/hooks/use-register-ip.mdx | 2 +- .../docs/hooks/use-storage-backend.mdx | 2 +- .../content/docs/hooks/use-story-client.mdx | 2 +- .../docs/hooks/use-subscribe-and-access.mdx | 2 +- .../docs/hooks/use-time-window-state.mdx | 2 +- .../content/docs/hooks/use-vault-events.mdx | 2 +- apps/site/content/docs/hooks/use-vault.mdx | 2 +- apps/site/content/docs/index.mdx | 2 +- apps/site/content/docs/quickstart.mdx | 2 +- apps/site/content/docs/scaffolder.mdx | 2 +- apps/site/content/docs/skill.mdx | 2 +- apps/site/content/docs/storage.mdx | 2 +- apps/site/content/docs/story.mdx | 2 +- apps/site/content/docs/theming.mdx | 2 +- 139 files changed, 69 insertions(+), 4397 deletions(-) delete mode 100644 apps/site/app/docs/agent-kit/agentkit/page.tsx delete mode 100644 apps/site/app/docs/agent-kit/goat/page.tsx delete mode 100644 apps/site/app/docs/agent-kit/langchain/page.tsx delete mode 100644 apps/site/app/docs/agent-kit/mcp/page.tsx delete mode 100644 apps/site/app/docs/agent-kit/openai/page.tsx delete mode 100644 apps/site/app/docs/agent-kit/page.tsx delete mode 100644 apps/site/app/docs/agent-kit/vercel-ai/page.tsx delete mode 100644 apps/site/app/docs/cli/page.tsx delete mode 100644 apps/site/app/docs/components/access-stepper/page.tsx delete mode 100644 apps/site/app/docs/components/cdr-error/page.tsx delete mode 100644 apps/site/app/docs/components/cdr-inspector/page.tsx delete mode 100644 apps/site/app/docs/components/cdr-network-chip/page.tsx delete mode 100644 apps/site/app/docs/components/cdr-progress/page.tsx delete mode 100644 apps/site/app/docs/components/cdr-provider/page.tsx delete mode 100644 apps/site/app/docs/components/cdr-skeleton/page.tsx delete mode 100644 apps/site/app/docs/components/cdr-spinner/page.tsx delete mode 100644 apps/site/app/docs/components/components.css delete mode 100644 apps/site/app/docs/components/condition-badge/page.tsx delete mode 100644 apps/site/app/docs/components/copy-button/page.tsx delete mode 100644 apps/site/app/docs/components/empty-vaults/page.tsx delete mode 100644 apps/site/app/docs/components/escrow-delivery-confirm/page.tsx delete mode 100644 apps/site/app/docs/components/explorer-link/page.tsx delete mode 100644 apps/site/app/docs/components/heartbeat-timer/page.tsx delete mode 100644 apps/site/app/docs/components/ip-price/page.tsx delete mode 100644 apps/site/app/docs/components/multi-sig-approval-tracker/page.tsx delete mode 100644 apps/site/app/docs/components/multi-sig-signer/page.tsx delete mode 100644 apps/site/app/docs/components/page.tsx delete mode 100644 apps/site/app/docs/components/short-address/page.tsx delete mode 100644 apps/site/app/docs/components/subscribe-button/page.tsx delete mode 100644 apps/site/app/docs/components/time-window-badge/page.tsx delete mode 100644 apps/site/app/docs/components/unlockable/page.tsx delete mode 100644 apps/site/app/docs/components/vault-card/page.tsx delete mode 100644 apps/site/app/docs/components/vault-gate/page.tsx delete mode 100644 apps/site/app/docs/components/vault/page.tsx delete mode 100644 apps/site/app/docs/contracts/cdr-kit-vault/page.tsx delete mode 100644 apps/site/app/docs/contracts/composable-condition/page.tsx delete mode 100644 apps/site/app/docs/contracts/conditional-escrow-condition/page.tsx delete mode 100644 apps/site/app/docs/contracts/creator-write-condition/page.tsx delete mode 100644 apps/site/app/docs/contracts/dead-man-switch-condition/page.tsx delete mode 100644 apps/site/app/docs/contracts/multi-sig-condition/page.tsx delete mode 100644 apps/site/app/docs/contracts/open-condition/page.tsx delete mode 100644 apps/site/app/docs/contracts/page.tsx delete mode 100644 apps/site/app/docs/contracts/subscription-condition/page.tsx delete mode 100644 apps/site/app/docs/contracts/tier-gate-condition/page.tsx delete mode 100644 apps/site/app/docs/contracts/time-window-condition/page.tsx delete mode 100644 apps/site/app/docs/hooks/use-access-vault/page.tsx delete mode 100644 apps/site/app/docs/hooks/use-attach-license-terms/page.tsx delete mode 100644 apps/site/app/docs/hooks/use-cdr-wallet/page.tsx delete mode 100644 apps/site/app/docs/hooks/use-create-vault/page.tsx delete mode 100644 apps/site/app/docs/hooks/use-creator-vaults/page.tsx delete mode 100644 apps/site/app/docs/hooks/use-dead-man-timer/page.tsx delete mode 100644 apps/site/app/docs/hooks/use-discover-vaults/page.tsx delete mode 100644 apps/site/app/docs/hooks/use-escrow-state/page.tsx delete mode 100644 apps/site/app/docs/hooks/use-mint-license-token/page.tsx delete mode 100644 apps/site/app/docs/hooks/use-multi-sig-status/page.tsx delete mode 100644 apps/site/app/docs/hooks/use-publish/page.tsx delete mode 100644 apps/site/app/docs/hooks/use-register-ip/page.tsx delete mode 100644 apps/site/app/docs/hooks/use-storage-backend/page.tsx delete mode 100644 apps/site/app/docs/hooks/use-story-client/page.tsx delete mode 100644 apps/site/app/docs/hooks/use-subscribe-and-access/page.tsx delete mode 100644 apps/site/app/docs/hooks/use-time-window-state/page.tsx delete mode 100644 apps/site/app/docs/hooks/use-vault-events/page.tsx delete mode 100644 apps/site/app/docs/hooks/use-vault/page.tsx delete mode 100644 apps/site/app/docs/page.tsx delete mode 100644 apps/site/app/docs/quickstart/page.tsx delete mode 100644 apps/site/app/docs/scaffolder/page.tsx delete mode 100644 apps/site/app/docs/skill/page.tsx delete mode 100644 apps/site/app/docs/storage/page.tsx delete mode 100644 apps/site/app/docs/story/page.tsx delete mode 100644 apps/site/app/docs/theming/page.tsx diff --git a/apps/site/app/docs/agent-kit/agentkit/page.tsx b/apps/site/app/docs/agent-kit/agentkit/page.tsx deleted file mode 100644 index 138fb1d..0000000 --- a/apps/site/app/docs/agent-kit/agentkit/page.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { Badge } from "@/components/primitives/badge"; -import { DocPage } from "@/components/docs/doc-page"; -import { CodePanel } from "@/components/docs/code-panel"; - -const CODE = `import { CdrAgent } from "@cdr-kit/agent"; -import { cdrActionProvider } from "@cdr-kit/agentkit"; - -const agent = new CdrAgent({ privateKey, apiUrl }); -// Slot into Coinbase AgentKit's action providers: -const provider = cdrActionProvider(agent);`; - -export default function Page() { - return ( - @cdr-kit/agentkit, - lede: <>Coinbase AgentKit ActionProvider exposing the three CDR tools as on-chain actions., - importLine: 'import { cdrActionProvider } from "@cdr-kit/agentkit"', - sections: [{ id: "usage", title: "Usage", content: }], - prev: { href: "/docs/agent-kit/langchain", label: "LangChain" }, - next: { href: "/docs/agent-kit/goat", label: "GOAT SDK" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/agent-kit/goat/page.tsx b/apps/site/app/docs/agent-kit/goat/page.tsx deleted file mode 100644 index 032321b..0000000 --- a/apps/site/app/docs/agent-kit/goat/page.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import { Badge } from "@/components/primitives/badge"; -import { DocPage } from "@/components/docs/doc-page"; -import { CodePanel } from "@/components/docs/code-panel"; - -const CODE = `import { CdrAgent } from "@cdr-kit/agent"; -import { cdrPlugin } from "@cdr-kit/goat"; - -const agent = new CdrAgent({ privateKey, apiUrl }); -const plugin = cdrPlugin(agent); // pass into GOAT's getOnChainTools`; - -export default function Page() { - return ( - @cdr-kit/goat, - lede: <>GOAT SDK plugin exposing the CDR tools to any GOAT-enabled agent stack., - importLine: 'import { cdrPlugin } from "@cdr-kit/goat"', - sections: [{ id: "usage", title: "Usage", content: }], - prev: { href: "/docs/agent-kit/agentkit", label: "Coinbase AgentKit" }, - next: { href: "/docs/agent-kit/mcp", label: "MCP server" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/agent-kit/langchain/page.tsx b/apps/site/app/docs/agent-kit/langchain/page.tsx deleted file mode 100644 index 20aa123..0000000 --- a/apps/site/app/docs/agent-kit/langchain/page.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import { Badge } from "@/components/primitives/badge"; -import { DocPage } from "@/components/docs/doc-page"; -import { CodePanel } from "@/components/docs/code-panel"; - -const CODE = `import { ChatOpenAI } from "@langchain/openai"; -import { createReactAgent } from "@langchain/langgraph/prebuilt"; -import { CdrAgent } from "@cdr-kit/agent"; -import { getLangChainTools } from "@cdr-kit/langchain"; - -const cdr = new CdrAgent({ privateKey, apiUrl }); -const agent = createReactAgent({ - llm: new ChatOpenAI({ model: "gpt-4o" }), - tools: getLangChainTools(cdr), -}); -const res = await agent.invoke({ messages: [{ role: "user", content: "Read vault 4200." }] });`; - -export default function Page() { - return ( - @cdr-kit/langchain, - lede: <>Returns LangChain StructuredToolInterface[] — drop into createReactAgent or any LangChain agent constructor., - importLine: 'import { getLangChainTools } from "@cdr-kit/langchain"', - sections: [{ id: "usage", title: "Usage", content: }], - prev: { href: "/docs/agent-kit/openai", label: "OpenAI / Anthropic" }, - next: { href: "/docs/agent-kit/agentkit", label: "Coinbase AgentKit" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/agent-kit/mcp/page.tsx b/apps/site/app/docs/agent-kit/mcp/page.tsx deleted file mode 100644 index beb0d2c..0000000 --- a/apps/site/app/docs/agent-kit/mcp/page.tsx +++ /dev/null @@ -1,147 +0,0 @@ -import { Badge } from "@/components/primitives/badge"; -import { DocPage } from "@/components/docs/doc-page"; -import { CodePanel } from "@/components/docs/code-panel"; - -const INSTALL = `# Recommended: get the CLI (gives you cdr + cdr mcp + cdr skill install) -$ npm install -g @cdr-kit/cli - -# Alternative: just the MCP wrapper (used by claude mcp add) -$ npm install -g @cdr-kit/mcp`; - -const ADD = `$ claude mcp add cdr-kit npx @cdr-kit/mcp`; - -const JSON_CONFIG = `{ - "mcpServers": { - "cdr-kit": { - "command": "npx", - "args": ["-y", "@cdr-kit/mcp"], - "env": { - "CDR_PRIVATE_KEY": "0x_your_aeneid_testnet_key_here", - "CDR_NETWORK": "aeneid" - } - } - } -}`; - -const TOOLS_TABLE: { name: string; group: string; description: string }[] = [ - { name: "cdr_discover_vaults", group: "Discover + read", description: "Scan recent VaultCreated events; returns uuid, ipId, creator per vault." }, - { name: "cdr_subscribe_and_access", group: "Discover + read", description: "Pay the subscription, then read + decrypt — one composite call." }, - { name: "cdr_access_vault", group: "Discover + read", description: "Read + decrypt a vault the agent is already entitled to." }, - { name: "cdr_access_license_gated", group: "Discover + read", description: "Read a license-gated vault by presenting a Story license token the agent owns." }, - { name: "cdr_get_vault_info", group: "Introspection", description: "Resolve uuid → tokenId, ipId, creator, licenseTermsId. View-only." }, - { name: "cdr_creator_vaults", group: "Introspection", description: "List every vault a given creator has minted. View-only." }, - { name: "cdr_check_entitlement", group: "Introspection", description: "Is the agent (or any address) currently subscribed? Returns paidUntil + isEntitled. View-only." }, - { name: "cdr_estimate_cost", group: "Introspection", description: "Subscription plan: pricePerPeriod, period, payee, mode. View-only." }, - { name: "cdr_list_subscriptions", group: "Introspection", description: "Every vault the agent is currently subscribed to (active paidUntil)." }, - { name: "cdr_get_fees", group: "Introspection", description: "CDR allocate / write / read fees + operational threshold. View-only, no wallet needed." }, - { name: "cdr_create_vault", group: "Author / publish", description: "Mint NFT + register IP + allocate slot + configure read condition — one tx." }, - { name: "cdr_write_vault_data", group: "Author / publish", description: "Encrypt a small (<1KB) UTF-8 string and write it to a vault." }, - { name: "cdr_upload_file", group: "Author / publish", description: "Encrypt + IPFS-pin + allocate + write — for any >1KB payload." }, - // 0.5 advanced-condition vaults - { name: "cdr_create_time_window_vault", group: "Advanced conditions (0.5)", description: "Create a Story CDR vault gated by an absolute time (or block) window." }, - { name: "cdr_create_dead_man_vault", group: "Advanced conditions (0.5)", description: "Create a dead-man-switch vault — auto-unlocks to heirs if the creator stops poke()-ing." }, - { name: "cdr_create_escrow_vault", group: "Advanced conditions (0.5)", description: "Create a buyer-pays-then-confirms-delivery escrow vault with optional arbiter." }, - { name: "cdr_create_multi_sig_vault", group: "Advanced conditions (0.5)", description: "Create an N-of-M multi-sig vault — both off-chain EIP-712 sigs AND on-chain approve() paths supported. First-of-kind in the CDR ecosystem." }, - { name: "cdr_approve_multi_sig", group: "Advanced conditions (0.5)", description: "Safe-style on-chain approval — agent calls approve(uuid). Dashboards read currentApprovalsCount(uuid)." }, - // 0.5 Story IP integration - { name: "cdr_register_ip", group: "Story IP (0.5)", description: "Register an NFT as a Story IP asset (fresh-mint via SPG)." }, - { name: "cdr_attach_license_terms", group: "Story IP (0.5)", description: "Attach PIL license terms to a Story IP asset (required before minting license tokens)." }, - { name: "cdr_mint_license_token", group: "Story IP (0.5)", description: "Mint Story license tokens against an IP asset's licenseTermsId." }, - { name: "cdr_publish_data", group: "Story IP (0.5)", description: "Agent-as-publisher one-shot: register IP + attach commercial terms + create license-gated CDR vault + write encrypted secret. The highest-DX win for autonomous data sellers." }, -]; - -export default function Page() { - return ( - @cdr-kit/mcp22 tools · v0.5, - lede: <>One stdio binary that plugs into Claude Desktop, Cursor, Windsurf, and any MCP host. Exposes the full CDR surface — discover, subscribe, access, audit, publish, plus 4 advanced-condition vault creators and 4 Story IP wrappers (including the cdr_publish_data one-shot) — as 21 tools backed by the agent's own auto-generated wallet. Shares code with @cdr-kit/cli, so anything the MCP can do, cdr <cmd> can do at the terminal., - sections: [ - { - id: "install", - title: "Install", - content: , - }, - { - id: "add-to-claude", - title: "Add to Claude Desktop (one command)", - content: ( - <> -

- If you have Claude Code installed, the cleanest path is: -

- -

- This registers npx @cdr-kit/mcp as the cdr-kit server. The first run auto-generates a wallet at ~/.config/cdr-kit/wallet.json (chmod 600) and prints the address + faucet URL to stderr. Fund it with cdr fund before calling write/subscribe tools. -

- - ), - }, - { - id: "manual-config", - title: "Manual config (Claude Desktop / Cursor / Windsurf)", - content: ( - <> -

- Paste this into your host's MCP config (Claude Desktop:{" "} - ~/Library/Application Support/Claude/claude_desktop_config.json; Cursor:{" "} - ~/.cursor/mcp.json; Windsurf: ~/.codeium/windsurf/mcp_config.json). -

- -

- CDR_PRIVATE_KEY is optional — if omitted, the wallet is auto-generated and loaded from disk on every run. -

- - ), - }, - { - id: "tools", - title: "Tools (13)", - content: ( - <> -

- All tools come from a single source of truth in @cdr-kit/tools. Adapter packages (Vercel AI / OpenAI / LangChain / AgentKit / GOAT) iterate the same list, so every adapter gets all 13 automatically. -

- - - - - - {TOOLS_TABLE.map((t) => ( - - - - - - ))} - -
ToolGroupDescription
{t.name}{t.group}{t.description}
- - ), - }, - { - id: "env", - title: "Env reference", - content: ( - - - - - - - - - - -
VarDefaultPurpose
CDR_PRIVATE_KEY(auto-generated)Agent's wallet. Overrides the disk file at ~/.config/cdr-kit/wallet.json.
CDR_NETWORKaeneidaeneid (default) or mainnet (throws — not yet deployed).
CDR_RPC_URLnetwork's canonical RPCOverride the JSON-RPC endpoint (use a paid RPC for production).
CDR_API_URLnetwork's canonical Story-API RESTOverride the Story-API base URL.
LOG_LEVELinfopino level: trace, debug, info, warn, error.
PRIVATE_KEY(deprecated)Old name for CDR_PRIVATE_KEY. Still honored in 0.4 with a deprecation warning; removed in 0.5.
- ), - }, - ], - prev: { href: "/docs/agent-kit/goat", label: "GOAT SDK" }, - next: { href: "/docs/cli", label: "CLI: cdr" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/agent-kit/openai/page.tsx b/apps/site/app/docs/agent-kit/openai/page.tsx deleted file mode 100644 index 36059ac..0000000 --- a/apps/site/app/docs/agent-kit/openai/page.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import { Badge } from "@/components/primitives/badge"; -import { DocPage } from "@/components/docs/doc-page"; -import { CodePanel } from "@/components/docs/code-panel"; - -const CODE = `import OpenAI from "openai"; -import { CdrAgent } from "@cdr-kit/agent"; -import { getOpenAITools } from "@cdr-kit/openai"; - -const agent = new CdrAgent({ privateKey, apiUrl }); -const { tools, dispatch } = getOpenAITools(agent); - -const openai = new OpenAI(); -const res = await openai.chat.completions.create({ - model: "gpt-4o", - tools, // JSON-schema tool definitions - messages: [{ role: "user", content: "Find and read vault 4200." }], -}); -// route tool calls back through dispatch(name, args)`; - -export default function Page() { - return ( - @cdr-kit/openai, - lede: <>JSON-Schema tools[] + a dispatch router for OpenAI Chat Completions / Anthropic Messages. Works with either provider., - importLine: 'import { getOpenAITools } from "@cdr-kit/openai"', - sections: [{ id: "usage", title: "Usage", content: }], - prev: { href: "/docs/agent-kit/vercel-ai", label: "Vercel AI SDK" }, - next: { href: "/docs/agent-kit/langchain", label: "LangChain" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/agent-kit/page.tsx b/apps/site/app/docs/agent-kit/page.tsx deleted file mode 100644 index fbeaf54..0000000 --- a/apps/site/app/docs/agent-kit/page.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import Link from "next/link"; -import { Badge } from "@/components/primitives/badge"; -import { DocPage } from "@/components/docs/doc-page"; -import { CodePanel } from "@/components/docs/code-panel"; - -const CODE = `import { CdrAgent } from "@cdr-kit/agent"; - -const agent = new CdrAgent({ - privateKey: process.env.PRIVATE_KEY, - apiUrl: process.env.CDR_API_URL, -}); - -const vaults = await agent.discover(); -const bytes = await agent.subscribeAndAccess({ - uuid: vaults[0].uuid, - periods: 1n, - maxPricePerPeriod: 5n * 10n ** 18n, - value: 5n * 10n ** 18n, -});`; - -export default function AgentKitPage() { - return ( - @cdr-kit/agent, - lede: <>Autonomous agent client: discover vaults on the factory, subscribe from its own wallet, decrypt, and use the data — no human in the loop. The headless object every framework adapter wraps., - importLine: 'import { CdrAgent } from "@cdr-kit/agent"', - sections: [ - { - id: "usage", - title: "Usage", - content: , - }, - { - id: "adapters", - title: "Framework adapters", - content: ( -
    -
  • @cdr-kit/vercel-aigenerateText tools
  • -
  • @cdr-kit/openai — OpenAI / Anthropic JSON-schema tools
  • -
  • @cdr-kit/langchainStructuredTools
  • -
  • @cdr-kit/agentkit — Coinbase AgentKit ActionProvider
  • -
  • @cdr-kit/goat — GOAT SDK plugin
  • -
  • @cdr-kit/mcp — MCP server
  • -
- ), - }, - ], - prev: { href: "/docs/hooks/use-cdr-wallet", label: "useCdrWallet" }, - next: { href: "/docs/agent-kit/vercel-ai", label: "Vercel AI SDK" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/agent-kit/vercel-ai/page.tsx b/apps/site/app/docs/agent-kit/vercel-ai/page.tsx deleted file mode 100644 index 924259a..0000000 --- a/apps/site/app/docs/agent-kit/vercel-ai/page.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import { Badge } from "@/components/primitives/badge"; -import { DocPage } from "@/components/docs/doc-page"; -import { CodePanel } from "@/components/docs/code-panel"; - -const CODE = `import { generateText, stepCountIs } from "ai"; -import { anthropic } from "@ai-sdk/anthropic"; -import { CdrAgent } from "@cdr-kit/agent"; -import { getVercelAITools } from "@cdr-kit/vercel-ai"; - -const agent = new CdrAgent({ privateKey, apiUrl }); - -const { text } = await generateText({ - model: anthropic("claude-sonnet-4-6"), - tools: getVercelAITools(agent), - stopWhen: stepCountIs(8), - prompt: "Find a CDR vault, subscribe if needed, and tell me the signal.", -});`; - -export default function Page() { - return ( - @cdr-kit/vercel-ai, - lede: <>Returns a ToolSet for generateText / streamText. The model autonomously picks the three CDR tools and drives the loop., - importLine: 'import { getVercelAITools } from "@cdr-kit/vercel-ai"', - sections: [{ id: "usage", title: "Usage", content: }], - prev: { href: "/docs/agent-kit", label: "CdrAgent" }, - next: { href: "/docs/agent-kit/openai", label: "OpenAI / Anthropic" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/cli/page.tsx b/apps/site/app/docs/cli/page.tsx deleted file mode 100644 index dc50178..0000000 --- a/apps/site/app/docs/cli/page.tsx +++ /dev/null @@ -1,119 +0,0 @@ -import { Badge } from "@/components/primitives/badge"; -import { DocPage } from "@/components/docs/doc-page"; -import { CodePanel } from "@/components/docs/code-panel"; - -const INSTALL = `$ npm install -g @cdr-kit/cli -$ cdr --help`; - -const FIRST_RUN = `$ cdr wallet -# first run prints a banner with the auto-generated address + faucet URL → stderr -# subsequent runs return the wallet state as JSON / pretty-printed object`; - -const COMMANDS: { name: string; description: string }[] = [ - { name: "cdr mcp", description: "Start the stdio MCP server. Same surface @cdr-kit/mcp exposes." }, - { name: "cdr wallet [--json]", description: "Show address, network, balance, wallet path (doctor command)." }, - { name: "cdr wallet new [--force]", description: "Force-generate a new wallet (refuses to overwrite without --force)." }, - { name: "cdr wallet export --yes", description: "Print the private key (DANGEROUS — requires --yes to confirm)." }, - { name: "cdr fund", description: "Print address + open the Aeneid faucet in your browser (captcha-gated)." }, - { name: "cdr config", description: "Print resolved network / RPC / API URL / wallet path." }, - { name: "cdr fees", description: "Allocate / write / read fees + operational threshold (view-only)." }, - { name: "cdr discover [--from-block N]", description: "Scan factory VaultCreated events." }, - { name: "cdr vault info ", description: "Vault info + plan + your entitlement, in one call." }, - { name: "cdr vault list --creator ", description: "Every vault a creator has minted." }, - { name: "cdr vault create --read --read-config [--license-terms-id N]", description: "Create + configure + allocate — one tx." }, - { name: "cdr subscribe [--periods N] [--max-price wei]", description: "Subscribe to + read a subscription-gated vault." }, - { name: "cdr access [--aux-data hex]", description: "Read a vault you're already entitled to." }, - { name: "cdr access-license --license-token-id N", description: "Read a license-gated vault by presenting a Story license token." }, - { name: "cdr subscriptions", description: "Every vault the agent is currently subscribed to." }, - { name: "cdr tools", description: "Enumerate all 34 MCP tools (introspection)." }, - { name: "cdr skill install", description: "Install the cdr-kit Claude Code plugin into ~/.claude/skills/cdr-kit/." }, - // 0.5 advanced-condition vault creators - { name: "cdr create time-window --start --end [--block-based]", description: "Create a TimeWindowCondition vault — read allowed only during [startTs, endTs]." }, - { name: "cdr create dead-man --duration --heirs [--public-after]", description: "Create a DeadManSwitchCondition vault — auto-unlocks to heirs after the heartbeat lapses." }, - { name: "cdr create escrow --price --timeout [--arbiter ]", description: "Create a ConditionalEscrowCondition vault — buyer pays, confirms, then reads." }, - { name: "cdr create multi-sig --signers --threshold ", description: "Create an N-of-M MultiSigCondition vault (off-chain sigs OR on-chain approve)." }, - // 0.5 condition mutators - { name: "cdr poke ", description: "Reset the dead-man-switch heartbeat for a vault you created." }, - { name: "cdr multi-sig approve ", description: "On-chain Safe-style approval — agent must be a configured signer." }, - { name: "cdr multi-sig sign --caller --deadline ", description: "Produce an off-chain EIP-712 sig for collecting threshold-many off-band." }, - { name: "cdr multi-sig access --deadline --sigs ", description: "Read a multi-sig vault by submitting collected off-chain sigs." }, - { name: "cdr multi-sig rotate --signers --threshold ", description: "Creator-only signer rotation; bumps epoch (invalidates BOTH paths)." }, - { name: "cdr escrow pay --price ", description: "Buyer step 1 — escrow the listing price (excess refunded same tx)." }, - { name: "cdr escrow confirm ", description: "Buyer step 2 — confirm delivery, releases funds + grants read." }, - { name: "cdr escrow claim-timeout --buyer ", description: "Seller — claim funds + grant buyer read after timeoutSecs of silence." }, - { name: "cdr escrow arbiter-refund --buyer ", description: "Arbiter — refund a buyer who paid but disputes delivery." }, - // 0.5 Story IP - { name: "cdr ip register --spg [--metadata ]", description: "Register a freshly-minted SPG NFT as a Story IP asset." }, - { name: "cdr ip attach-terms --ip --terms-id ", description: "Attach existing PIL license terms to an IP." }, - { name: "cdr ip mint-license --licensor --terms-id [--amount N]", description: "Mint Story license tokens against an IP's licenseTermsId." }, - { name: "cdr ip register-derivative --child --parents --terms-ids ", description: "Register a derivative IP — child inherits parents' PIL terms." }, - { name: "cdr ip wrap-ip --amount ", description: "Wrap native IP into WIP (required before paying royalties)." }, - { name: "cdr ip approve-wip --spender --amount ", description: "Approve a spender (typically RoyaltyModule) to pull WIP." }, -]; - -const FLAGS = `--network aeneid|mainnet # default aeneid; mainnet throws (not yet deployed) ---json # machine-readable JSON output for any command`; - -export default function Page() { - return ( - @cdr-kit/cli0.5 · 25 commands, - lede: <>One binary, three surfaces. cdr ships every cdr-kit operation as a human-friendly CLI command (25 commands across wallet / discovery / advanced conditions / Story IP); cdr mcp starts the stdio MCP server (same 34 tools); cdr skill install drops the multi-skill Claude Code plugin into ~/.claude/skills/cdr-kit/. Auto-creates the agent's wallet on first run — no "bring your own private key" friction., - sections: [ - { id: "install", title: "Install", content: }, - { - id: "first-run", - title: "First run", - content: ( - <> - -

- The wallet is generated by viem's generatePrivateKey(), stored at ~/.config/cdr-kit/wallet.json (resolved cross-platform via env-paths), and written with chmod 600. Override anytime with CDR_PRIVATE_KEY=0x.... -

- - ), - }, - { - id: "commands", - title: "Commands", - content: ( - - - - {COMMANDS.map((c) => ( - - - - - ))} - -
CommandDescription
{c.name}{c.description}
- ), - }, - { - id: "flags", - title: "Global flags", - content: , - }, - { - id: "mcp", - title: "Use as MCP server", - content: ( - <> -

- cdr mcp is the same stdio server @cdr-kit/mcp ships. Either binary works for MCP host configs — most prefer npx @cdr-kit/mcp for zero install footprint. -

- - - ), - }, - ], - prev: { href: "/docs/agent-kit/mcp", label: "MCP server" }, - next: { href: "/docs/skill", label: "Claude Code plugin" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/components/access-stepper/page.tsx b/apps/site/app/docs/components/access-stepper/page.tsx deleted file mode 100644 index 0b6003d..0000000 --- a/apps/site/app/docs/components/access-stepper/page.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import { Badge } from "@/components/primitives/badge"; -import { DocPage, PropsTable } from "@/components/docs/doc-page"; -import { Demo } from "@/components/docs/demo"; -import { AccessStepperDemo } from "@/components/gallery/access-stepper-demo"; - -const CODE = `import { AccessStepper } from "@cdr-kit/react-ui"; -import { useAccessVault } from "@cdr-kit/react"; - -function Stepper({ uuid }) { - const { status, progress } = useAccessVault(uuid); - return ; -}`; - -export default function Page() { - return ( - ", - badges: styled, - lede: <>Designed wait-state UI for the 2-step pay→access flow. Derives step state from useAccessVault's status + an optional {`{collected, threshold}`} for the determinate partial-collection bar., - importLine: 'import { AccessStepper } from "@cdr-kit/react-ui"', - sections: [ - { - id: "preview", - title: "Live preview", - content: } code={CODE} badge={phase selector} />, - }, - { - id: "props", - title: "Props", - content: ( - - ), - }, - ], - prev: { href: "/docs/components/condition-badge", label: "ConditionBadge" }, - next: { href: "/docs/components/subscribe-button", label: "SubscribeButton" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/components/cdr-error/page.tsx b/apps/site/app/docs/components/cdr-error/page.tsx deleted file mode 100644 index c8088fb..0000000 --- a/apps/site/app/docs/components/cdr-error/page.tsx +++ /dev/null @@ -1,60 +0,0 @@ -"use client"; - -import { CdrError } from "@cdr-kit/react-ui"; -import { Badge } from "@/components/primitives/badge"; -import { DocPage, PropsTable } from "@/components/docs/doc-page"; -import { Demo } from "@/components/docs/demo"; - -const CODE = `import { CdrError } from "@cdr-kit/react-ui"; - - refetch()} -/>`; - -export default function Page() { - return ( - ", - badges: DX primitive, - lede: <>Soft-bordered danger state with an optional retry CTA. Pair with caught errors from useAccessVault or useSubscribeAndAccess., - importLine: 'import { CdrError } from "@cdr-kit/react-ui"', - sections: [ - { - id: "preview", - title: "Live preview", - content: ( - undefined} - /> - } - code={CODE} - /> - ), - }, - { - id: "props", - title: "Props", - content: ( - void", description: "When set, renders the retry button on the right." }, - { name: "retryLabel", type: "string", defaultValue: '"Retry"', description: "Retry button label." }, - ]} /> - ), - }, - ], - prev: { href: "/docs/components/cdr-progress", label: "CdrProgress" }, - next: { href: "/docs/agent-kit", label: "Agent kit" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/components/cdr-inspector/page.tsx b/apps/site/app/docs/components/cdr-inspector/page.tsx deleted file mode 100644 index 8497471..0000000 --- a/apps/site/app/docs/components/cdr-inspector/page.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import { Badge } from "@/components/primitives/badge"; -import { DocPage } from "@/components/docs/doc-page"; -import { Demo } from "@/components/docs/demo"; -import { CdrInspectorDemo } from "@/components/docs/demos/headless-demos"; - -const CODE = `import { CdrInspector } from "@cdr-kit/react"; - -export function App() { - return ( - - {process.env.NODE_ENV !== "production" && } - {/* …rest of app */} - - ); -}`; - -export default function CdrInspectorPage() { - return ( - ", - badges: dev tool, - lede: ( - <> - Drop-in debug strip showing how the kit is wired (mock vs live, WASM ready, API - URL). Keep it in dev builds; remove or guard for production. - - ), - importLine: 'import { CdrInspector } from "@cdr-kit/react"', - sections: [ - { id: "preview", title: "Live preview", content: } code={CODE} /> }, - ], - prev: { href: "/docs/components/vault", label: "Vault compound" }, - next: { href: "/docs/components/cdr-skeleton", label: "CdrSkeleton" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/components/cdr-network-chip/page.tsx b/apps/site/app/docs/components/cdr-network-chip/page.tsx deleted file mode 100644 index c92272d..0000000 --- a/apps/site/app/docs/components/cdr-network-chip/page.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import { CdrNetworkChip } from "@cdr-kit/react-ui"; -import { Badge } from "@/components/primitives/badge"; -import { DocPage, PropsTable } from "@/components/docs/doc-page"; -import { Demo } from "@/components/docs/demo"; - -const CODE = `import { CdrNetworkChip } from "@cdr-kit/react-ui"; - - -`; - -export default function Page() { - return ( - ", - badges: DX primitive, - lede: <>Pill with a glowing status dot indicating live vs mock mode. Drop into your app chrome so users always know whether they're hitting Aeneid or the in-memory mock., - importLine: 'import { CdrNetworkChip } from "@cdr-kit/react-ui"', - sections: [ - { - id: "preview", - title: "Live preview", - content: ( - - - - - } - code={CODE} - /> - ), - }, - { - id: "props", - title: "Props", - content: ( - - ), - }, - ], - prev: { href: "/docs/components/ip-price", label: "IpPrice" }, - next: { href: "/docs/components/cdr-spinner", label: "CdrSpinner" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/components/cdr-progress/page.tsx b/apps/site/app/docs/components/cdr-progress/page.tsx deleted file mode 100644 index 8e57087..0000000 --- a/apps/site/app/docs/components/cdr-progress/page.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import { CdrProgress } from "@cdr-kit/react-ui"; -import { Badge } from "@/components/primitives/badge"; -import { DocPage, PropsTable } from "@/components/docs/doc-page"; -import { Demo } from "@/components/docs/demo"; - -const CODE = `import { CdrProgress } from "@cdr-kit/react-ui"; - - -`; - -export default function Page() { - return ( - ", - badges: DX primitive, - lede: <>Determinate progress bar with a primary→signal gradient fill. Pass a value 0–100, or pass {`{collected, threshold}`} and the component derives it., - importLine: 'import { CdrProgress } from "@cdr-kit/react-ui"', - sections: [ - { - id: "preview", - title: "Live preview", - content: ( - - - - - } - code={CODE} - /> - ), - }, - { - id: "props", - title: "Props", - content: ( - - ), - }, - ], - prev: { href: "/docs/components/cdr-spinner", label: "CdrSpinner" }, - next: { href: "/docs/components/cdr-error", label: "CdrError" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/components/cdr-provider/page.tsx b/apps/site/app/docs/components/cdr-provider/page.tsx deleted file mode 100644 index 6283c9c..0000000 --- a/apps/site/app/docs/components/cdr-provider/page.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import { Badge } from "@/components/primitives/badge"; -import { DocPage, PropsTable } from "@/components/docs/doc-page"; - -export default function CdrProviderPage() { - return ( - component, - lede: ( - <> - Batteries-included root provider. Wires WagmiProvider, react-query, and initializes the CDR - crypto WASM. Use CdrConfigProvider directly if you already have your own wagmi stack - (Privy / RainbowKit). - - ), - importLine: 'import { CdrProvider } from "@cdr-kit/react"', - sections: [ - { - id: "props", - title: "Props", - content: ( - - ), - }, - ], - prev: { href: "/docs/theming", label: "Theming" }, - next: { href: "/docs/components/vault-gate", label: "VaultGate" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/components/cdr-skeleton/page.tsx b/apps/site/app/docs/components/cdr-skeleton/page.tsx deleted file mode 100644 index 30dec03..0000000 --- a/apps/site/app/docs/components/cdr-skeleton/page.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { DocPage, PropsTable } from "@/components/docs/doc-page"; -import { Demo } from "@/components/docs/demo"; -import { CdrSkeletonDemo } from "@/components/docs/demos/headless-demos"; - -const CODE = `import { CdrSkeleton } from "@cdr-kit/react"; - - -`; - -export default function CdrSkeletonPage() { - return ( - ", - lede: <>Default placeholder rendered by <VaultGate> / <Vault.Loading> when no custom loading slot is supplied. Themeable via --cdr-skeleton., - importLine: 'import { CdrSkeleton } from "@cdr-kit/react"', - sections: [ - { id: "preview", title: "Live preview", content: } code={CODE} /> }, - { id: "props", title: "Props", content: }, - ], - prev: { href: "/docs/components/cdr-inspector", label: "CdrInspector" }, - next: { href: "/docs/components/empty-vaults", label: "EmptyVaults" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/components/cdr-spinner/page.tsx b/apps/site/app/docs/components/cdr-spinner/page.tsx deleted file mode 100644 index d627cdf..0000000 --- a/apps/site/app/docs/components/cdr-spinner/page.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import { CdrSpinner } from "@cdr-kit/react-ui"; -import { Badge } from "@/components/primitives/badge"; -import { DocPage, PropsTable } from "@/components/docs/doc-page"; -import { Demo } from "@/components/docs/demo"; - -const CODE = `import { CdrSpinner } from "@cdr-kit/react-ui"; - - -`; - -export default function Page() { - return ( - ", - badges: DX primitive, - lede: <>Indeterminate CSS spinner. Use when you don't have a determinate progress to show (e.g. wallet confirmation)., - importLine: 'import { CdrSpinner } from "@cdr-kit/react-ui"', - sections: [ - { - id: "preview", - title: "Live preview", - content: ( - - - - - } - code={CODE} - /> - ), - }, - { - id: "props", - title: "Props", - content: ( - - ), - }, - ], - prev: { href: "/docs/components/cdr-network-chip", label: "CdrNetworkChip" }, - next: { href: "/docs/components/cdr-progress", label: "CdrProgress" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/components/components.css b/apps/site/app/docs/components/components.css deleted file mode 100644 index 2c1fe6b..0000000 --- a/apps/site/app/docs/components/components.css +++ /dev/null @@ -1,88 +0,0 @@ -/* Components index — grid of cards + a "live" sampler at the bottom. */ - -.comp-section { margin-top: 44px; } -.comp-section-head { margin-bottom: 18px; } -.comp-section-head h2 { - font-family: var(--display); font-size: 1.3rem; font-weight: 700; letter-spacing: -0.02em; - display: block; margin: 0 0 4px; -} -.comp-section-head h2::after { display: none; } -.comp-section-head p { font-size: 0.92rem; color: var(--ink-2); margin: 0; } - -.comp-subheading { - font-family: var(--mono); font-size: 0.74rem; font-weight: 500; - letter-spacing: 0.1em; text-transform: uppercase; color: var(--ink-3); - margin: 26px 0 12px; -} - -.comp-grid { - display: grid; grid-template-columns: repeat(2, 1fr); gap: 12px; -} -@media (max-width: 720px) { .comp-grid { grid-template-columns: 1fr; } } -.comp-card { - display: flex; flex-direction: column; gap: 6px; - padding: 14px 16px; - border: 1px solid var(--line); border-radius: var(--r-md); - background: var(--card); - transition: border-color .14s, transform .14s, box-shadow .14s; -} -.comp-card:hover { border-color: var(--line-2); transform: translateY(-2px); box-shadow: var(--sh-1); } -.comp-card-head { display: flex; align-items: center; gap: 8px; } -.comp-name { font-family: var(--mono); font-size: 0.84rem; color: var(--primary); font-weight: 500; } -.comp-tag { - font-family: var(--mono); font-size: 0.62rem; color: var(--ink-3); - border: 1px solid var(--line); border-radius: 4px; padding: 1px 5px; letter-spacing: 0.02em; -} -.comp-desc { font-size: 0.86rem; color: var(--ink-2); line-height: 1.5; margin: 0; } - -/* Live sampler bits (subset of the old gallery.css). */ -.spec-row { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; } - -.phasectl { - display: inline-flex; gap: 2px; padding: 3px; border: 1px solid var(--line); - border-radius: var(--r-md); background: var(--paper-2); margin-bottom: 22px; flex-wrap: wrap; -} -.phasectl button { - font-family: var(--mono); font-size: 0.74rem; padding: 6px 11px; border-radius: var(--r-sm); - color: var(--ink-2); transition: all .14s; -} -.phasectl button[aria-pressed="true"] { background: var(--card); color: var(--ink); box-shadow: var(--sh-1); } - -.vgrid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 16px; width: 100%; } -@media (max-width: 620px) { .vgrid { grid-template-columns: 1fr; } } - -.prim-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px; } -@media (max-width: 620px) { .prim-grid { grid-template-columns: 1fr; } } -.prim { border: 1px solid var(--line); border-radius: var(--r-md); background: var(--card); padding: 16px; } -.prim .pn { font-family: var(--mono); font-size: 0.78rem; color: var(--primary); margin-bottom: 10px; } -.prim .pdemo { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; min-height: 36px; } - -/* Unlockable demo prose styling — premium magazine feel without competing with the pill itself. */ -.unl-demo { font-family: var(--sans); color: var(--ink); max-width: 580px; } -.unl-demo-title { font-family: var(--display); font-size: 1.55rem; font-weight: 700; letter-spacing: -0.02em; line-height: 1.15; margin: 0 0 4px; color: var(--ink); } -.unl-demo-byline { font-family: var(--mono); font-size: 0.74rem; color: var(--ink-3); margin: 0 0 22px; letter-spacing: 0.04em; text-transform: uppercase; } -.unl-demo p { font-size: 1rem; line-height: 1.72; color: var(--ink-2); margin: 0 0 16px; } -.unl-demo p:last-child { margin-bottom: 0; } - -/* Docs-page CTA banner that points readers at the showcase. */ -.unl-doc-cta { - display: block; - padding: 18px 22px; - margin: 8px 0 26px; - border-radius: var(--r-md); - border: 1px solid var(--primary-line); - background: linear-gradient(135deg, var(--primary-soft), var(--card)); - text-decoration: none; - color: var(--ink); - transition: transform .14s, border-color .18s, box-shadow .18s; -} -.unl-doc-cta:hover { transform: translateY(-1px); border-color: var(--primary); box-shadow: var(--sh-2); } -.unl-doc-cta-eyebrow { - display: block; font-family: var(--mono); font-size: 0.68rem; - letter-spacing: 0.1em; text-transform: uppercase; color: var(--primary); margin-bottom: 6px; -} -.unl-doc-cta-title { - display: block; font-family: var(--display); font-size: 1.15rem; font-weight: 700; - letter-spacing: -0.01em; color: var(--ink); margin-bottom: 4px; -} -.unl-doc-cta-sub { display: block; font-size: 0.88rem; color: var(--ink-2); line-height: 1.5; } diff --git a/apps/site/app/docs/components/condition-badge/page.tsx b/apps/site/app/docs/components/condition-badge/page.tsx deleted file mode 100644 index cd8606d..0000000 --- a/apps/site/app/docs/components/condition-badge/page.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import { ConditionBadge } from "@cdr-kit/react-ui"; -import { Badge } from "@/components/primitives/badge"; -import { DocPage, PropsTable } from "@/components/docs/doc-page"; -import { Demo } from "@/components/docs/demo"; - -const CODE = `import { ConditionBadge } from "@cdr-kit/react-ui"; - - - - -`; - -export default function Page() { - return ( - ", - badges: styled, - lede: <>Color-mapped pill for a vault's read-condition kind. Pure presentational, zero app logic., - importLine: 'import { ConditionBadge } from "@cdr-kit/react-ui"', - sections: [ - { - id: "preview", - title: "Live preview", - content: ( - - - - - - - } - code={CODE} - /> - ), - }, - { - id: "props", - title: "Props", - content: ( - - ), - }, - ], - prev: { href: "/docs/components/empty-vaults", label: "EmptyVaults" }, - next: { href: "/docs/components/access-stepper", label: "AccessStepper" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/components/copy-button/page.tsx b/apps/site/app/docs/components/copy-button/page.tsx deleted file mode 100644 index bc4973d..0000000 --- a/apps/site/app/docs/components/copy-button/page.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import { CopyButton } from "@cdr-kit/react-ui"; -import { Badge } from "@/components/primitives/badge"; -import { DocPage, PropsTable } from "@/components/docs/doc-page"; -import { Demo } from "@/components/docs/demo"; - -const CODE = `import { CopyButton } from "@cdr-kit/react-ui"; - -`; - -export default function Page() { - return ( - ", - badges: DX primitive, - lede: <>Minimal copy-to-clipboard control. Flashes a check icon for 1.4s on success. Composes inside other primitives (e.g. <ShortAddress>)., - importLine: 'import { CopyButton } from "@cdr-kit/react-ui"', - sections: [ - { - id: "preview", - title: "Live preview", - content: ( - - sample value - - - } - code={CODE} - /> - ), - }, - { - id: "props", - title: "Props", - content: ( - - ), - }, - ], - prev: { href: "/docs/components/vault-card", label: "VaultCard" }, - next: { href: "/docs/components/short-address", label: "ShortAddress" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/components/empty-vaults/page.tsx b/apps/site/app/docs/components/empty-vaults/page.tsx deleted file mode 100644 index 7ba4365..0000000 --- a/apps/site/app/docs/components/empty-vaults/page.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import { DocPage } from "@/components/docs/doc-page"; -import { Demo } from "@/components/docs/demo"; -import { EmptyVaultsDemo } from "@/components/docs/demos/headless-demos"; - -const CODE = `import { EmptyVaults } from "@cdr-kit/react"; - - -No vaults match your filter. - -// typical use: -{vaults.length === 0 - ? No vaults match your filter. - : }`; - -export default function EmptyVaultsPage() { - return ( - ", - lede: <>Semantic empty-state slot — a div[data-cdr-empty] with a default copy fallback. Style at the consumer level., - importLine: 'import { EmptyVaults } from "@cdr-kit/react"', - sections: [ - { id: "preview", title: "Live preview", content: } code={CODE} /> }, - ], - prev: { href: "/docs/components/cdr-skeleton", label: "CdrSkeleton" }, - next: { href: "/docs/components/condition-badge", label: "ConditionBadge" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/components/escrow-delivery-confirm/page.tsx b/apps/site/app/docs/components/escrow-delivery-confirm/page.tsx deleted file mode 100644 index 49bb9c8..0000000 --- a/apps/site/app/docs/components/escrow-delivery-confirm/page.tsx +++ /dev/null @@ -1,59 +0,0 @@ -import { Badge } from "@/components/primitives/badge"; -import { DocPage, PropsTable } from "@/components/docs/doc-page"; -import { Demo } from "@/components/docs/demo"; -import { EscrowDeliveryConfirmDemo } from "@/components/docs/demos/escrow-delivery-confirm-demo"; -import "../components.css"; - -const CODE = `import { EscrowDeliveryConfirm } from "@cdr-kit/react"; - - - -// Render-prop for the dashboard: - - {({ paid, delivered, timeoutInMs, confirmDelivery, pay }) => ( - paid === 0n - ? - : delivered - ? delivered ✓ - : - )} -`; - -export default function Page() { - return ( - ", - badges: <>new in 0.5headless, - lede: <>Buyer-side flow for ConditionalEscrowCondition: pay → confirm delivery → seller paid + buyer reads. Surfaces the timeout countdown after which the seller can claim unilaterally., - importLine: 'import { EscrowDeliveryConfirm } from "@cdr-kit/react"', - sections: [ - { - id: "preview", - title: "Live preview", - content: } code={CODE} badge={mock} />, - }, - { - id: "props", - title: "Props", - content: ( - ReactNode", description: "Render-prop. Receives the full EscrowState including seller, price, timeoutSecs, arbiter, paidAt, delivered, timeoutInMs, plus pay() and confirmDelivery() actions." }, - ]} /> - ), - }, - { - id: "intrinsic", - title: "Intrinsic CDR limitation", - content:

Once a buyer pays + confirms + reads, they hold plaintext forever. The dispute path (arbiter refund) can revoke future access but cannot "un-read." Document this in your buyer UX.

, - }, - ], - prev: { href: "/docs/components/multi-sig-signer", label: "MultiSigSigner" }, - next: { href: "/docs/components/condition-badge", label: "ConditionBadge" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/components/explorer-link/page.tsx b/apps/site/app/docs/components/explorer-link/page.tsx deleted file mode 100644 index 8ecf223..0000000 --- a/apps/site/app/docs/components/explorer-link/page.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import { ExplorerLink } from "@cdr-kit/react-ui"; -import { Badge } from "@/components/primitives/badge"; -import { DocPage, PropsTable } from "@/components/docs/doc-page"; -import { Demo } from "@/components/docs/demo"; - -const CODE = `import { ExplorerLink } from "@cdr-kit/react-ui"; - - - view on Aeneid -`; - -export default function Page() { - return ( - ", - badges: DX primitive, - lede: <>Mono primary-colored link with an external-link icon. Opens in a new tab with rel="noopener noreferrer"., - importLine: 'import { ExplorerLink } from "@cdr-kit/react-ui"', - sections: [ - { - id: "preview", - title: "Live preview", - content: ( - - view on Aeneid - - } - code={CODE} - /> - ), - }, - { - id: "props", - title: "Props", - content: ( - - ), - }, - ], - prev: { href: "/docs/components/short-address", label: "ShortAddress" }, - next: { href: "/docs/components/ip-price", label: "IpPrice" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/components/heartbeat-timer/page.tsx b/apps/site/app/docs/components/heartbeat-timer/page.tsx deleted file mode 100644 index 95d42d8..0000000 --- a/apps/site/app/docs/components/heartbeat-timer/page.tsx +++ /dev/null @@ -1,58 +0,0 @@ -import { Badge } from "@/components/primitives/badge"; -import { DocPage, PropsTable } from "@/components/docs/doc-page"; -import { Demo } from "@/components/docs/demo"; -import { HeartbeatTimerDemo } from "@/components/docs/demos/heartbeat-timer-demo"; -import "../components.css"; - -const CODE = `import { HeartbeatTimer, useDeadManTimer } from "@cdr-kit/react"; - -// Default headless render — countdown + extend button: - - -// Custom render — full control via render-prop: - - {({ remainingMs, isCritical, isUnlocked, poke }) => ( -
- {isUnlocked ? "unlocked" : \`unlocks in \${remainingMs / 1000}s\`} - -
- )} -
`; - -export default function Page() { - return ( - ", - badges: <>new in 0.5headless, - lede: <>Countdown to DeadManSwitchCondition.unlockAt with a creator-side poke() button. Flips into critical mode once < 25% of the window remains, so the UI can prompt the creator before silence becomes irreversible., - importLine: 'import { HeartbeatTimer } from "@cdr-kit/react"', - sections: [ - { - id: "preview", - title: "Live preview", - content: } code={CODE} badge={mock} />, - }, - { - id: "props", - title: "Props", - content: ( - ReactNode", description: "Optional render-prop. Receives { unlocksAt, duration, remainingMs, isUnlocked, isCritical, poke, isLoading }." }, - ]} /> - ), - }, - { - id: "hook", - title: "Hook variant", - content:

Skip the component and consume useDeadManTimer(uuid) directly. Returns the same state object the render-prop receives.

, - }, - ], - prev: { href: "/docs/components/empty-vaults", label: "EmptyVaults" }, - next: { href: "/docs/components/time-window-badge", label: "TimeWindowBadge" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/components/ip-price/page.tsx b/apps/site/app/docs/components/ip-price/page.tsx deleted file mode 100644 index c103b71..0000000 --- a/apps/site/app/docs/components/ip-price/page.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import { IpPrice } from "@cdr-kit/react-ui"; -import { Badge } from "@/components/primitives/badge"; -import { DocPage, PropsTable } from "@/components/docs/doc-page"; -import { Demo } from "@/components/docs/demo"; - -const FIVE_IP = BigInt(5) * BigInt(10) ** BigInt(18); - -const CODE = `import { IpPrice } from "@cdr-kit/react-ui"; - - - {/* "License-gated" */}`; - -export default function Page() { - return ( - ", - badges: DX primitive, - lede: <>Formats wei as n IP with an optional period suffix. Pass null for license-gated vaults — renders the standard alt label., - importLine: 'import { IpPrice } from "@cdr-kit/react-ui"', - sections: [ - { - id: "preview", - title: "Live preview", - content: ( - - - - - } - code={CODE} - /> - ), - }, - { - id: "props", - title: "Props", - content: ( - - ), - }, - ], - prev: { href: "/docs/components/explorer-link", label: "ExplorerLink" }, - next: { href: "/docs/components/cdr-network-chip", label: "CdrNetworkChip" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/components/multi-sig-approval-tracker/page.tsx b/apps/site/app/docs/components/multi-sig-approval-tracker/page.tsx deleted file mode 100644 index 351ae75..0000000 --- a/apps/site/app/docs/components/multi-sig-approval-tracker/page.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import { Badge } from "@/components/primitives/badge"; -import { DocPage, PropsTable } from "@/components/docs/doc-page"; -import { Demo } from "@/components/docs/demo"; -import { MultiSigApprovalTrackerDemo } from "@/components/docs/demos/multi-sig-approval-tracker-demo"; -import "../components.css"; - -const CODE = `import { MultiSigApprovalTracker } from "@cdr-kit/react"; - -// signedBy is the list of signers who have already produced a sig OFF-CHAIN -// (the contract is stateless on approvals — no per-signer tx). -`; - -export default function Page() { - return ( - ", - badges: <>new in 0.5headless, - lede: <>X of Y approved + epoch — the read-side dashboard for MultiSigCondition. Combines the on-chain signer set with the off-chain set of collected sigs to render approval progress., - importLine: 'import { MultiSigApprovalTracker } from "@cdr-kit/react"', - sections: [ - { - id: "preview", - title: "Live preview", - content: } code={CODE} badge={mock} />, - }, - { - id: "props", - title: "Props", - content: ( - ReactNode", description: "Render-prop. Receives { signers, threshold, epoch, signedCount, isReady, isLoading }." }, - ]} /> - ), - }, - { - id: "rotation", - title: "Epoch rotation", - content:

Each call to rotateSigners() bumps epoch. The tracker re-reads on rotation; UI should prompt for a fresh sig collection because in-flight sigs against the previous epoch are invalidated.

, - }, - ], - prev: { href: "/docs/components/time-window-badge", label: "TimeWindowBadge" }, - next: { href: "/docs/components/multi-sig-signer", label: "MultiSigSigner" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/components/multi-sig-signer/page.tsx b/apps/site/app/docs/components/multi-sig-signer/page.tsx deleted file mode 100644 index 5ff05cb..0000000 --- a/apps/site/app/docs/components/multi-sig-signer/page.tsx +++ /dev/null @@ -1,143 +0,0 @@ -import { Badge } from "@/components/primitives/badge"; -import { DocPage, PropsTable } from "@/components/docs/doc-page"; -import { CodePanel } from "@/components/docs/code-panel"; -import { Demo } from "@/components/docs/demo"; -import { MultiSigSignerDemo } from "@/components/docs/demos/multi-sig-signer-demo"; -import "../components.css"; - -const SIGN_CODE = `import { MultiSigSigner } from "@cdr-kit/react"; - -// Default render — button → on click signs EIP-712 → shows the sig + copy button. - - -// With a custom caller (default = connected wallet) and 30-min deadline: - - -// Render-prop for full custom UI: - - {({ sign, signature, isLoading, error, onSign }) => ( - signature - ? Sig: {signature} - : - )} -`; - -const SUBMIT_CODE = `// Buyer side — once threshold-many sigs collected from different signers: -import { CdrAgent } from "@cdr-kit/agent"; - -const bytes = await agent.accessMultiSig({ - uuid: 7331, - deadline, // MUST match every sig's deadline - sigs: [sigFromAlice, sigFromBob], // sorted by signer address ASC -});`; - -export default function Page() { - return ( - ", - badges: ( - <> - new in 0.5 - headless - signer-side - - ), - lede: ( - <> - Producer half of the off-chain dual-path MultiSigCondition flow: a button that - signs an EIP-712 Approval(uuid, caller, epoch, deadline) and surfaces the 65-byte sig - for the signer to share with the buyer. Pair with agent.accessMultiSig({"{ uuid, deadline, sigs[] }"}){" "} - on the buyer side to submit threshold-many sigs as accessAuxData. The complementary{" "} - <MultiSigApprovalTracker> is the buyer-side aggregator. - - ), - importLine: 'import { MultiSigSigner } from "@cdr-kit/react"', - sections: [ - { - id: "preview", - title: "Live preview", - content: } code={SIGN_CODE} badge={mock} />, - }, - { - id: "props", - title: "Props", - content: ( - ReactNode", - description: - "Render-prop. Receives { sign, signature, isLoading, error, onSign }. `onSign` is a bound zero-arg helper that calls `sign(...)` with the component's caller+deadline.", - }, - ]} - /> - ), - }, - { - id: "submit", - title: "Submit threshold-many sigs", - content: ( - <> -

- Once threshold-many signers have produced sigs, the buyer (or any caller) builds the - combined accessAuxData and reads the vault. agent.accessMultiSig handles the - abi-encoding; sigs must be ordered by recovered signer address ascending (the contract enforces a - strict-ascending dedupe). -

- - - ), - }, - { - id: "rotation", - title: "Epoch rotation invalidates in-flight sigs", - content: ( -

- The hook fetches the current epoch from getConfig(uuid) immediately before - signing. If rotateSigners lands between sign and submit, the contract recomputes the - digest with the new epoch — ecrecover returns a different address and the sig is - rejected. The signer can re-sign against the new epoch if they still want to authorize the new set - (use the "re-sign" button in the default render, or call sign() again). -

- ), - }, - { - id: "hook", - title: "Hook variant", - content: ( -

- Skip the component and use useSignMultiSigApproval(uuid) directly — returns{" "} - {`{ sign, signature, isLoading, error }`}. Useful when the sign trigger lives in a - non-button surface (drag-and-drop, gesture, programmatic flow). -

- ), - }, - ], - prev: { href: "/docs/components/multi-sig-approval-tracker", label: "MultiSigApprovalTracker" }, - next: { href: "/docs/components/escrow-delivery-confirm", label: "EscrowDeliveryConfirm" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/components/page.tsx b/apps/site/app/docs/components/page.tsx deleted file mode 100644 index 3387c8a..0000000 --- a/apps/site/app/docs/components/page.tsx +++ /dev/null @@ -1,172 +0,0 @@ -"use client"; - -import "./components.css"; - -import Link from "next/link"; -import { - ConditionBadge, - VaultCard, - ShortAddress, - ExplorerLink, - IpPrice, - CdrNetworkChip, - CdrSpinner, - CdrProgress, - CdrError, -} from "@cdr-kit/react-ui"; - -import { AccessStepperDemo } from "@/components/gallery/access-stepper-demo"; -import { SubscribeButtonDemo } from "@/components/gallery/subscribe-button-demo"; -import { Badge } from "@/components/primitives/badge"; - -const FIVE_IP = BigInt(5) * BigInt(10) ** BigInt(18); -const TWO_MIL_IP = BigInt(18) * BigInt(10) ** BigInt(15); - -const HEADLESS: { name: string; href: string; tag?: string; description: string }[] = [ - { name: "CdrProvider", href: "/docs/components/cdr-provider", description: "Root provider — wires WagmiProvider + react-query + initializes the CDR crypto WASM." }, - { name: "VaultGate", href: "/docs/components/vault-gate", description: "Declarative gate. Wrap encrypted data; renders the decrypted bytes via a render-prop." }, - { name: "Vault", href: "/docs/components/vault", tag: "compound", description: "Compound component — Vault.Locked / Vault.Loading / Vault.Unlocked slots." }, - { name: "CdrInspector", href: "/docs/components/cdr-inspector", description: "Dev panel showing mock / live mode + WASM ready state + API URL." }, - { name: "CdrSkeleton", href: "/docs/components/cdr-skeleton", description: "Default placeholder when no custom loading slot is supplied." }, - { name: "EmptyVaults", href: "/docs/components/empty-vaults", description: "Semantic empty-state slot." }, -]; - -const STYLED_CORE: { name: string; href: string; tag?: string; description: string }[] = [ - { name: "ConditionBadge", href: "/docs/components/condition-badge", description: "Color-mapped pill for the read condition kind." }, - { name: "AccessStepper", href: "/docs/components/access-stepper", description: "Designed wait-state stepper for the 2-step pay→access flow." }, - { name: "SubscribeButton", href: "/docs/components/subscribe-button", description: "Batteries-included CTA wrapping useSubscribeAndAccess + inline stepper + decoded JSON." }, - { name: "VaultCard", href: "/docs/components/vault-card", description: "Marketplace card with CSS pointer-tracking spotlight on hover." }, -]; - -const STYLED_PRIMITIVES: { name: string; href: string; description: string }[] = [ - { name: "CopyButton", href: "/docs/components/copy-button", description: "Minimal copy-to-clipboard control with check-mark feedback." }, - { name: "ShortAddress", href: "/docs/components/short-address", description: "Truncated mono address chip with inline copy." }, - { name: "ExplorerLink", href: "/docs/components/explorer-link", description: "Mono link with external-link icon — opens in new tab." }, - { name: "IpPrice", href: "/docs/components/ip-price", description: "Formats wei as IP with an optional period suffix." }, - { name: "CdrNetworkChip", href: "/docs/components/cdr-network-chip", description: "Pill with a glowing dot showing live vs mock mode." }, - { name: "CdrSpinner", href: "/docs/components/cdr-spinner", description: "Indeterminate CSS spinner." }, - { name: "CdrProgress", href: "/docs/components/cdr-progress", description: "Determinate progress bar with gradient fill." }, - { name: "CdrError", href: "/docs/components/cdr-error", description: "Soft-bordered danger state with optional retry CTA." }, -]; - -export default function ComponentsIndex() { - return ( -
-
- Components -
-
-

Components

- 18 components -
-

- Every component the kit ships, in one place. Headless render-prop slots from{" "} - @cdr-kit/react on top — drop in your own visuals, theme freely. Styled, batteries-included - variants from @cdr-kit/react-ui below — designed UI you can theme via{" "} - --cdr-ui-* CSS variables. Click any component for its live preview, code, props, and states. -

- -
-
-

Headless · @cdr-kit/react

-

Render-prop slots + hooks. Bring your own visuals.

-
-
- {HEADLESS.map((c) => ( - -
- {`<${c.name}>`} - {c.tag && {c.tag}} -
-

{c.description}

- - ))} -
-
- -
-
-

Styled · @cdr-kit/react-ui

-

Designed, batteries-included variants. Drop in and theme via CSS variables.

-
-

Vault-centric

-
- {STYLED_CORE.map((c) => ( - -
- {`<${c.name}>`} - {c.tag && {c.tag}} -
-

{c.description}

- - ))} -
- -

DX primitives

-
- {STYLED_PRIMITIVES.map((c) => ( - -
- {`<${c.name}>`} -
-

{c.description}

- - ))} -
-
- -
-
-

At a glance — live

-

A quick sampler of the styled set. Each component has a full page with Preview + Code + props.

-
- -
- - - - -
- -
- -
- -
- -
- -
- } - /> - } - /> -
- -
-
{``}
-
{``}
view on Aeneid
-
{``}
-
{``}
-
{``}
-
{``}
-
{``}
-
-
-
- ); -} diff --git a/apps/site/app/docs/components/short-address/page.tsx b/apps/site/app/docs/components/short-address/page.tsx deleted file mode 100644 index d976203..0000000 --- a/apps/site/app/docs/components/short-address/page.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import { ShortAddress } from "@cdr-kit/react-ui"; -import { Badge } from "@/components/primitives/badge"; -import { DocPage, PropsTable } from "@/components/docs/doc-page"; -import { Demo } from "@/components/docs/demo"; - -const CODE = `import { ShortAddress } from "@cdr-kit/react-ui"; - -`; - -export default function Page() { - return ( - ", - badges: DX primitive, - lede: <>Truncated mono address chip with an inline <CopyButton>. The chip's default truncation is 6 / 4 (head / tail)., - importLine: 'import { ShortAddress } from "@cdr-kit/react-ui"', - sections: [ - { - id: "preview", - title: "Live preview", - content: ( - } - code={CODE} - /> - ), - }, - { - id: "props", - title: "Props", - content: ( - - ), - }, - ], - prev: { href: "/docs/components/copy-button", label: "CopyButton" }, - next: { href: "/docs/components/explorer-link", label: "ExplorerLink" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/components/subscribe-button/page.tsx b/apps/site/app/docs/components/subscribe-button/page.tsx deleted file mode 100644 index 40357cc..0000000 --- a/apps/site/app/docs/components/subscribe-button/page.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import { Badge } from "@/components/primitives/badge"; -import { DocPage, PropsTable } from "@/components/docs/doc-page"; -import { Demo } from "@/components/docs/demo"; -import { SubscribeButtonDemo } from "@/components/gallery/subscribe-button-demo"; - -const CODE = `import { CdrProvider } from "@cdr-kit/react"; -import { createMockCdrKit } from "@cdr-kit/core"; -import { SubscribeButton } from "@cdr-kit/react-ui"; - - - -`; - -export default function Page() { - return ( - ", - badges: <>styledmock-ready, - lede: <>Batteries-included CTA. Wraps useSubscribeAndAccess, renders an inline AccessStepper through the wait phases, then shows the decrypted JSON when access is granted., - importLine: 'import { SubscribeButton } from "@cdr-kit/react-ui"', - sections: [ - { - id: "preview", - title: "Live preview", - content: } code={CODE} badge={mock kit} />, - }, - { - id: "props", - title: "Props", - content: ( - void", description: "Called with the decrypted bytes once the flow completes." }, - ]} /> - ), - }, - ], - prev: { href: "/docs/components/access-stepper", label: "AccessStepper" }, - next: { href: "/docs/components/vault-card", label: "VaultCard" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/components/time-window-badge/page.tsx b/apps/site/app/docs/components/time-window-badge/page.tsx deleted file mode 100644 index f7a8eb0..0000000 --- a/apps/site/app/docs/components/time-window-badge/page.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import { Badge } from "@/components/primitives/badge"; -import { DocPage, PropsTable } from "@/components/docs/doc-page"; -import { Demo } from "@/components/docs/demo"; -import { TimeWindowBadgeDemo } from "@/components/docs/demos/time-window-badge-demo"; -import "../components.css"; - -const CODE = `import { TimeWindowBadge } from "@cdr-kit/react"; - - - -// Render-prop for custom presentation: - - {({ isOpen, opensInMs, closesInMs }) => - isOpen - ? open · closes in {Math.floor(closesInMs / 60_000)}m - : opens in {Math.floor(opensInMs / 3_600_000)}h - } -`; - -export default function Page() { - return ( - ", - badges: <>new in 0.5headless, - lede: <>Status badge for TimeWindowCondition-gated vaults: opens in 3d 4h, closes in 2h 15m, or closed. Ticks every second client-side, no extra RPC traffic after the first read., - importLine: 'import { TimeWindowBadge } from "@cdr-kit/react"', - sections: [ - { - id: "preview", - title: "Live preview", - content: } code={CODE} badge={cycles} />, - }, - { - id: "props", - title: "Props", - content: ( - ReactNode", description: "Optional render-prop. Receives { startTs, endTs, blockBased, isOpen, opensInMs, closesInMs, isLoading }." }, - ]} /> - ), - }, - { - id: "block-based", - title: "Block-based windows", - content:

For windows configured with blockBased: true, the client-side opensInMs/closesInMs return 0 — block.number can't be ticked client-side cheaply. Render the raw block bounds from the state object instead.

, - }, - ], - prev: { href: "/docs/components/heartbeat-timer", label: "HeartbeatTimer" }, - next: { href: "/docs/components/multi-sig-approval-tracker", label: "MultiSigApprovalTracker" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/components/unlockable/page.tsx b/apps/site/app/docs/components/unlockable/page.tsx deleted file mode 100644 index d3a2968..0000000 --- a/apps/site/app/docs/components/unlockable/page.tsx +++ /dev/null @@ -1,121 +0,0 @@ -import Link from "next/link"; -import { Badge } from "@/components/primitives/badge"; -import { DocPage, PropsTable } from "@/components/docs/doc-page"; -import { Demo } from "@/components/docs/demo"; -import { UnlockableDemo } from "@/components/docs/demos/unlockable-demo"; -import "../components.css"; - -const CODE = `import { CdrProvider } from "@cdr-kit/react"; -import { createMockCdrKit } from "@cdr-kit/core"; -import { UnlockablePill } from "@cdr-kit/react-ui"; - - -

- Arlo Vance told the press he was alone, but{" "} - - the woman beside him on the dock - {" "} - disagrees. -

-
`; - -const HOOK_CODE = `import { useUnlockable } from "@cdr-kit/react"; - -function CustomPill({ uuid }) { - const { status, data, isOpen, open, close, request } = - useUnlockable({ uuid, mode: "subscribe" }); - - return ( - - [click to unlock] - {isOpen && ( -
- {status === "ready" ? render(data) : ( - - )} -
- )} -
- ); -}`; - -export default function Page() { - return ( - ", - badges: <>stylednew in 0.2mock-ready, - lede: <>Inline "free to read, pay to unlock" paywall. Wrap any anchor text in a pill; the click opens a floating card that runs the full CDR subscribe → threshold-read → decrypt flow and reveals the attached payload (text, image, file) right where the pill stands., - importLine: 'import { UnlockablePill } from "@cdr-kit/react-ui"', - callout: ( - - live showcase - See <UnlockablePill> in a real blog post → - Five live unlocks across text, image, and prose attachments. Mock CDR — no wallet, no chain. - - ), - sections: [ - { - id: "preview", - title: "Live preview", - content: } code={CODE} badge={mock kit} />, - }, - { - id: "hook", - title: "Headless variant", - content: ( - <> -

- Prefer to render your own UI? useUnlockable exposes the entire state machine — status, data, error, isOpen, open/close, request, reset. The styled UnlockablePill is a 60-line wrapper on top of it. -

- Use the hook for full control. Snippet on the Code tab.} code={HOOK_CODE} language="tsx" /> - - ), - }, - { - id: "props", - title: "Props", - content: ( - ReactNode", defaultValue: "unlockedAuto", description: "Render the decrypted bytes. Default auto-detects PNG/JPEG/WebP/GIF, falls back to UTF-8 text, then to a download link." }, - { name: "subscriptionCondition", type: "Hex", description: "Override the default deployed SubscriptionCondition address." }, - ]} /> - ), - }, - { - id: "mobile", - title: "Mobile fallback", - content: ( -

- Below 560px the floating popover collapses to a bottom-sheet — the card pins to the bottom of the viewport with a safe-area-aware inset. No additional code; the same UnlockablePill handles both. -

- ), - }, - { - id: "anchor", - title: "The anchor is plaintext — that's intentional", - content: ( - <> -

- The text inside <UnlockablePill> is a public teaser. Search engines and inspect-element will see it. The encrypted payload is what the vault holds — an image, a file, a hidden paragraph — and that only exists in the DOM after a successful read. -

-

- This matches the onscroll.app pattern: highlighted phrases anchor the unlock UX, attached content is the secret. If you want the anchor itself to be the secret, use <VaultGate> instead. -

- - ), - }, - ], - prev: { href: "/docs/components/subscribe-button", label: "SubscribeButton" }, - next: { href: "/docs/components/vault-card", label: "VaultCard" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/components/vault-card/page.tsx b/apps/site/app/docs/components/vault-card/page.tsx deleted file mode 100644 index 0c2a849..0000000 --- a/apps/site/app/docs/components/vault-card/page.tsx +++ /dev/null @@ -1,75 +0,0 @@ -import { VaultCard, IpPrice } from "@cdr-kit/react-ui"; -import { Badge } from "@/components/primitives/badge"; -import { DocPage, PropsTable } from "@/components/docs/doc-page"; -import { Demo } from "@/components/docs/demo"; - -const FIVE_IP = BigInt(5) * BigInt(10) ** BigInt(18); - -const CODE = `import { VaultCard, IpPrice } from "@cdr-kit/react-ui"; - -} - href="/vault/4200" -/>`; - -export default function Page() { - return ( - ", - badges: styled, - lede: <>Marketplace card with a CSS pointer-tracking spotlight on hover. Renders the condition badge, title, description, optional data type, creator, and price., - importLine: 'import { VaultCard } from "@cdr-kit/react-ui"', - sections: [ - { - id: "preview", - title: "Live preview", - content: ( - - } - /> - - } - code={CODE} - /> - ), - }, - { - id: "props", - title: "Props", - content: ( - ." }, - { name: "href", type: "string", description: "Render the card as an linking to the vault detail page." }, - ]} /> - ), - }, - ], - prev: { href: "/docs/components/subscribe-button", label: "SubscribeButton" }, - next: { href: "/docs/components/copy-button", label: "CopyButton" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/components/vault-gate/page.tsx b/apps/site/app/docs/components/vault-gate/page.tsx deleted file mode 100644 index f80ee2d..0000000 --- a/apps/site/app/docs/components/vault-gate/page.tsx +++ /dev/null @@ -1,164 +0,0 @@ -import { Badge } from "@/components/primitives/badge"; -import { Breadcrumb, Callout, DocTitle, H2, PrevNext, PropsTable } from "@/components/docs/parts"; -import { Demo } from "@/components/docs/demo"; -import { CodePanel } from "@/components/docs/code-panel"; -import { Toc } from "@/components/docs/toc"; -import { VaultGateDemo } from "@/components/docs/demos/vault-gate-demo"; - -const CODE = `import { CdrProvider, VaultGate } from "@cdr-kit/react"; -import { createMockCdrKit } from "@cdr-kit/core"; - -export function SignalCard() { - return ( - - } - loading={}> - {(data) =>
{new TextDecoder().decode(data)}
} -
-
- ); -}`; - -const TOC = [ - { id: "preview", label: "Live preview" }, - { id: "usage", label: "Usage" }, - { id: "props", label: "Props" }, - { id: "states", label: "States" }, - { id: "mock", label: "Mock mode" }, -]; - -export default function VaultGatePage() { - return ( - <> -
- - - component - mock-ready - - } - /> -

- A declarative gate. Wrap it around the data you want to protect; it checks the vault's on-chain read condition, - collects key shares, and renders the decrypted bytes via a render-prop once access is granted. -

-
- import {`{ VaultGate }`} from "@cdr-kit/react" -
- - - Mock by default. Every example on this page runs against an in-memory CDR — no wallet, no chain, no testnet - funds. Swap mockKit for config + apiUrl to go live on Aeneid. - - -

Live preview

-

- Press subscribe to run the full mock flow — condition check, payment, threshold key-share collection, and local - decryption. It mirrors the real 2-step subscribeAndAccess path against the actual{" "} - createMockCdrKit() from @cdr-kit/core. -

- } code={CODE} badge={mock kit} /> - -

Usage

-

- The simplest gate: pass a uuid and a render-prop. With auto, VaultGate{" "} - requests access on mount; without it, it waits for an imperative trigger from the access hook. -

- }> - {(data) => } -`} /> - -

Props

- - The CDR vault id. Read it from the VaultCreated event — never predict it (it's a global - counter). - - ), - }, - { - name: "children", - type: "(data: Uint8Array) => ReactNode", - required: true, - description: "Render-prop called with the decrypted bytes once the condition is satisfied.", - }, - { - name: "auto", - type: "boolean", - defaultValue: "false", - description: "Request access on mount instead of waiting for an imperative trigger.", - }, - { - name: "fallback", - type: "ReactNode", - defaultValue: "null", - description: "Rendered while the condition is unmet — typically your subscribe / pay button.", - }, - { - name: "loading", - type: "ReactNode", - defaultValue: "", - description: "Rendered during the ~15s threshold read while key shares are collected.", - }, - { - name: "accessAuxData", - type: "Hex", - defaultValue: '"0x"', - description: ( - <> - Optional ABI-encoded auxiliary data passed to the read condition (e.g. a tier-gate license tokenId). - - ), - }, - ]} - /> - -

States

-

- VaultGate is a thin wrapper over useAccessVault, whose discriminated{" "} - status drives what renders: -

-
    -
  • - idle / error — condition unmet → renders fallback. -
  • -
  • - collecting-partials — collecting key shares (the ~15s read) → renders loading. -
  • -
  • - ready — threshold met, decrypted → renders children(data). -
  • -
- -

Mock mode

-

- Wrap your tree in a CdrProvider with a createMockCdrKit() and the entire component - surface works with zero chain dependencies — ideal for Storybook, tests, and the previews on this page. Going - live is a one-line swap: -

- … - -// live on Aeneid — same children, real round-trip -`} /> - - -
- - - ); -} diff --git a/apps/site/app/docs/components/vault/page.tsx b/apps/site/app/docs/components/vault/page.tsx deleted file mode 100644 index 93fb32e..0000000 --- a/apps/site/app/docs/components/vault/page.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import { Badge } from "@/components/primitives/badge"; -import { DocPage } from "@/components/docs/doc-page"; -import { CodePanel } from "@/components/docs/code-panel"; - -const CODE = ` - - - {(data) => } -`; - -export default function VaultCompoundPage() { - return ( - componentcompound, - lede: ( - <> - Compound component — Clerk's SignedIn / SignedOut pattern adapted to CDR. A - single access drives the shared state; Vault.Locked, Vault.Loading, and{" "} - Vault.Unlocked render against it. - - ), - importLine: 'import { Vault } from "@cdr-kit/react"', - sections: [ - { - id: "usage", - title: "Usage", - content: ( - - ), - }, - { - id: "slots", - title: "Slots", - content: ( -
    -
  • Vault.Locked — status is idle or error.
  • -
  • Vault.Loading — status is paying or collecting-partials. Optional render-prop receives {`{ collected, threshold }`}.
  • -
  • Vault.Unlocked — status is ready. Render-prop receives the decrypted bytes.
  • -
- ), - }, - ], - prev: { href: "/docs/components/vault-gate", label: "VaultGate" }, - next: { href: "/docs/components/cdr-inspector", label: "CdrInspector" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/contracts/cdr-kit-vault/page.tsx b/apps/site/app/docs/contracts/cdr-kit-vault/page.tsx deleted file mode 100644 index ec98ef3..0000000 --- a/apps/site/app/docs/contracts/cdr-kit-vault/page.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import { aeneid } from "@cdr-kit/contracts"; -import { Badge } from "@/components/primitives/badge"; -import { DocPage } from "@/components/docs/doc-page"; -import { CodePanel } from "@/components/docs/code-panel"; - -export default function Page() { - return ( - factorydeployed, - lede: <>The atomic factory: createVault mints the vault NFT, registers it as a Story IP asset, allocates the CDR slot, configures the read condition, and (optionally) attaches PIL license terms — all in one transaction. The configure step is permissioned to the factory only, closing the race a permissionless setConfig would open., - importLine: `address = ${aeneid.cdrKitVault}`, - sections: [ - { - id: "create", - title: "createVault signature", - content: ( - - ), - }, - { - id: "events", - title: "Events", - content:

Emits VaultCreated(tokenId, uuid, ipId, creator, licenseTermsId) — read the uuid from the tx receipt; never predict it (global counter).

, - }, - { - id: "gas", - title: "Gas note", - content:

The factory nests a CDR precompile call (allocate) whose gas eth_estimateGas underestimates. Always set an explicit gas limit (3_000_000 is the SDK default).

, - }, - ], - prev: { href: "/docs/contracts/creator-write-condition", label: "CreatorWriteCondition" }, - next: { href: "/docs/scaffolder", label: "npm create cdr-kit" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/contracts/composable-condition/page.tsx b/apps/site/app/docs/contracts/composable-condition/page.tsx deleted file mode 100644 index 2e8968e..0000000 --- a/apps/site/app/docs/contracts/composable-condition/page.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { aeneid } from "@cdr-kit/contracts"; -import { Badge } from "@/components/primitives/badge"; -import { DocPage } from "@/components/docs/doc-page"; - -export default function Page() { - return ( - deployedboolean, - lede: <>Boolean AND / OR over child conditions, up to 8 deep. Compose "Subscription OR Tier" or "Royalty AND License" — natively, on chain, in one read check., - importLine: `address = ${aeneid.composableCondition}`, - sections: [ - { - id: "config", - title: "Config shape", - content: ( -
    -
  • mode: uint8 — 0 = AND, 1 = OR.
  • -
  • children: address[] — child condition addresses (1–8).
  • -
- ), - }, - { - id: "aux", - title: "accessAuxData", - content:

ABI-encoded bytes[] of per-child aux, aligned to the configured children order.

, - }, - ], - prev: { href: "/docs/contracts/tier-gate-condition", label: "TierGateCondition" }, - next: { href: "/docs/contracts/open-condition", label: "OpenCondition" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/contracts/conditional-escrow-condition/page.tsx b/apps/site/app/docs/contracts/conditional-escrow-condition/page.tsx deleted file mode 100644 index c97af42..0000000 --- a/apps/site/app/docs/contracts/conditional-escrow-condition/page.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import { Badge } from "@/components/primitives/badge"; -import { DocPage, PropsTable } from "@/components/docs/doc-page"; - -// Hardcoded until @cdr-kit/contracts@0.5.0 publishes (apps/site consumes ^0.4.0 from npm). -const ESCROW_ADDRESS = "0x7fcDe02DB7c14fD3587aB2fED064a1D8355b7584"; - -export default function Page() { - return ( - deployednew in 0.5, - lede: <>Buyer pays → confirms delivery → seller paid + buyer reads. Optional arbiter can refund. Seller can claimAfterTimeout(buyer) if the buyer goes silent., - importLine: `address = ${ESCROW_ADDRESS}`, - sections: [ - { - id: "config", - title: "Config shape", - content: ( - - ), - }, - { - id: "flow", - title: "Flow", - content: ( -
    -
  1. pay(uuid) — buyer escrows the price (excess refunded same tx).
  2. -
  3. confirmDelivery(uuid) — buyer signs off → seller paid + buyer reads.
  4. -
  5. claimAfterTimeout(uuid, buyer) — seller only, after paidAt + timeoutSecs.
  6. -
  7. arbiterRefund(uuid, buyer) — arbiter only; resets paidAt and refunds the buyer.
  8. -
- ), - }, - { - id: "intrinsic", - title: "Intrinsic CDR limitation", - content:

CDR has no confidential compute — once a buyer reads, they hold plaintext forever. The dispute path can revoke future access but cannot "un-read." Document this in your buyer UX.

, - }, - ], - prev: { href: "/docs/contracts/dead-man-switch-condition", label: "DeadManSwitchCondition" }, - next: { href: "/docs/contracts/multi-sig-condition", label: "MultiSigCondition" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/contracts/creator-write-condition/page.tsx b/apps/site/app/docs/contracts/creator-write-condition/page.tsx deleted file mode 100644 index e9f7534..0000000 --- a/apps/site/app/docs/contracts/creator-write-condition/page.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import { aeneid } from "@cdr-kit/contracts"; -import { Badge } from "@/components/primitives/badge"; -import { DocPage } from "@/components/docs/doc-page"; - -export default function Page() { - return ( - deployed, - lede: <>The default write gate when you mint through CdrKitVault: only the original creator (vault NFT owner) can write encrypted payloads. Factory-aware variant of OwnerWriteCondition., - importLine: `address = ${aeneid.creatorWriteCondition}`, - sections: [ - { id: "config", title: "Config", content:

No config bytes required — the factory wires the creator at allocation time.

}, - ], - prev: { href: "/docs/contracts/open-condition", label: "OpenCondition" }, - next: { href: "/docs/contracts/cdr-kit-vault", label: "CdrKitVault" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/contracts/dead-man-switch-condition/page.tsx b/apps/site/app/docs/contracts/dead-man-switch-condition/page.tsx deleted file mode 100644 index 7cb1fe5..0000000 --- a/apps/site/app/docs/contracts/dead-man-switch-condition/page.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import { Badge } from "@/components/primitives/badge"; -import { DocPage, PropsTable } from "@/components/docs/doc-page"; - -// Hardcoded until @cdr-kit/contracts@0.5.0 publishes (apps/site consumes ^0.4.0 from npm). -const DEAD_MAN_ADDRESS = "0x37226f97e184843aB0b8d4f08A55969801B97766"; - -export default function Page() { - return ( - deployednew in 0.5, - lede: <>Auto-unlock to heir(s) (or public) if the creator stops calling poke() within duration. The wallet-recovery / estate-planning / leak-on-disappearance primitive Story docs reference., - importLine: `address = ${DEAD_MAN_ADDRESS}`, - sections: [ - { - id: "config", - title: "Config shape", - content: ( - 0." }, - { name: "heirs", type: "address[]", required: true, description: "Allowed readers post-unlock if publicAfterUnlock = false. Empty array forces publicAfterUnlock to true." }, - { name: "blockBased", type: "bool", required: true, description: "true = interpret duration as block count." }, - { name: "creatorCanReadWhileLocked", type: "bool", required: true, description: "Creator reads their own vault pre-unlock (default true via agent helper)." }, - { name: "publicAfterUnlock", type: "bool", required: true, description: "true = anyone reads post-unlock; false = restricted to heirs." }, - ]} /> - ), - }, - { - id: "trapdoor", - title: "The trapdoor", - content:

Post-unlock, the creator gets NO special treatment. If publicAfterUnlock = false AND the creator isn't in heirs, they lose read access permanently at unlock — by design. agent.createDeadManVault defaults creatorCanReadWhileLocked = true and recommends adding the creator to heirs for post-unlock access.

, - }, - { - id: "poke", - title: "poke()", - content:

Creator-only. Cannot be called after unlockAt (one-way trapdoor — reviving would let a late-poking creator block heirs forever). Most operational risk is forgetting to poke; consider a self-hosted cron or Gelato Automate for long durations.

, - }, - ], - prev: { href: "/docs/contracts/time-window-condition", label: "TimeWindowCondition" }, - next: { href: "/docs/contracts/conditional-escrow-condition", label: "ConditionalEscrowCondition" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/contracts/multi-sig-condition/page.tsx b/apps/site/app/docs/contracts/multi-sig-condition/page.tsx deleted file mode 100644 index a8545e1..0000000 --- a/apps/site/app/docs/contracts/multi-sig-condition/page.tsx +++ /dev/null @@ -1,66 +0,0 @@ -import { Badge } from "@/components/primitives/badge"; -import { DocPage, PropsTable } from "@/components/docs/doc-page"; - -// Hardcoded until @cdr-kit/contracts@0.5.0 publishes (apps/site consumes ^0.4.0 from npm). -// 0x61061c… is the 0.5 redeploy with on-chain `approve()` path added; previous 0xb22EBF… -// retired (off-chain-only — same epoch + sig logic but no on-chain approve fn). -const MULTI_SIG_ADDRESS = "0x61061CCb8BD4C9E0AfF67ed4d2226f0Fc140FB87"; - -export default function Page() { - return ( - deployedfirst-of-kindnew in 0.5, - lede: <>N-of-M read gate with two parallel approval paths: off-chain EIP-712 sigs (gas-free; buyer collects + submits at read time) OR Safe-style on-chain approve() (signers pay gas; dashboards read chain truth). A read passes when EITHER path meets threshold. First-of-kind in the CDR ecosystem., - importLine: `address = ${MULTI_SIG_ADDRESS}`, - sections: [ - { - id: "config", - title: "Config shape", - content: ( - - ), - }, - { - id: "eip712", - title: "EIP-712 Approval", - content: ( -
    -
  • Domain: cdr-kit:MultiSigCondition, version 1, chainId 1315, verifyingContract = condition address.
  • -
  • Type: Approval(uint32 uuid, address caller, uint64 epoch, uint64 deadline).
  • -
  • caller binding prevents sig replay against a different reader; epoch rotation invalidates in-flight sigs.
  • -
- ), - }, - { - id: "onchain-approve", - title: "On-chain approve() — the Safe-style path", - content: ( - <> -

For dashboards that prefer chain-truth over off-chain sig collection, signers call approve(uuid) on-chain. Each approval costs ~50k gas. currentApprovalsCount(uuid) returns the count for the active epoch — read it directly in your UI via useMultiSigStatus.

-

Storage shape (epoch-scoped, so rotation auto-invalidates): hasApproved[uuid][epoch][signer] + approvalsCount[uuid][epoch]. Emits Approved(uuid, signer, epoch) for indexers.

- - ), - }, - { - id: "rotation", - title: "rotateSigners()", - content:

Creator-only. Validates the new signer set + threshold, bumps epoch — invalidates BOTH off-chain sigs (signed against the old epoch) AND on-chain approvals (the count under the old epoch key no longer matters since reads check the new epoch). Use this to remove a compromised signer immediately.

, - }, - { - id: "limitations", - title: "Limitations", - content:

EIP-1271 (Safe / contract-wallet signers) not supported in 0.5 — ecrecover handles EOAs only. Workaround: have a Safe-owned EOA sign on behalf and register that EOA.

, - }, - ], - prev: { href: "/docs/contracts/conditional-escrow-condition", label: "ConditionalEscrowCondition" }, - next: { href: "/docs/contracts/cdr-kit-vault", label: "CdrKitVault" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/contracts/open-condition/page.tsx b/apps/site/app/docs/contracts/open-condition/page.tsx deleted file mode 100644 index 4ff5c43..0000000 --- a/apps/site/app/docs/contracts/open-condition/page.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import { aeneid } from "@cdr-kit/contracts"; -import { Badge } from "@/components/primitives/badge"; -import { DocPage } from "@/components/docs/doc-page"; - -export default function Page() { - return ( - deployed, - lede: <>Always returns true. Use as a fallback / sanity gate, or as the read condition for genuinely public data., - importLine: `address = ${aeneid.openCondition}`, - sections: [{ id: "config", title: "Config", content:

No config bytes required — pass 0x.

}], - prev: { href: "/docs/contracts/composable-condition", label: "ComposableCondition" }, - next: { href: "/docs/contracts/creator-write-condition", label: "CreatorWriteCondition" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/contracts/page.tsx b/apps/site/app/docs/contracts/page.tsx deleted file mode 100644 index 46801c8..0000000 --- a/apps/site/app/docs/contracts/page.tsx +++ /dev/null @@ -1,66 +0,0 @@ -import Link from "next/link"; -import { aeneid } from "@cdr-kit/contracts"; -import { Badge } from "@/components/primitives/badge"; -import { DocPage } from "@/components/docs/doc-page"; -import { CodePanel } from "@/components/docs/code-panel"; - -export default function ContractsPage() { - return ( - @cdr-kit/contracts, - lede: <>A tested Solidity standard library + a factory (CdrKitVault) that mints, registers IP, allocates the CDR slot, and configures the read condition in one transaction. All deployed to Aeneid testnet (chain id {aeneid.chainId})., - importLine: 'import { aeneid } from "@cdr-kit/contracts"', - sections: [ - { - id: "library", - title: "Library", - content: ( -
    -
  • SubscriptionCondition
  • -
  • TierGateCondition
  • -
  • ComposableCondition
  • -
  • OpenCondition
  • -
  • CreatorWriteCondition
  • -
  • CdrKitVault — the factory
  • -
- ), - }, - { - id: "interface", - title: "Condition interface", - content: ( - <> -

Conditions are pure view functions the validator network calls at read/write time. The 4-param signature:

- - - ), - }, - { - id: "addresses", - title: "Deployed (Aeneid)", - content: ( -
    -
  • CdrKitVault: {aeneid.cdrKitVault}
  • -
  • SubscriptionCondition: {aeneid.subscriptionCondition}
  • -
  • TierGateCondition: {aeneid.tierGateCondition}
  • -
  • ComposableCondition: {aeneid.composableCondition}
  • -
  • OpenCondition: {aeneid.openCondition}
  • -
  • CreatorWriteCondition: {aeneid.creatorWriteCondition}
  • -
- ), - }, - ], - prev: { href: "/docs/agent-kit/mcp", label: "MCP server" }, - next: { href: "/docs/contracts/subscription-condition", label: "SubscriptionCondition" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/contracts/subscription-condition/page.tsx b/apps/site/app/docs/contracts/subscription-condition/page.tsx deleted file mode 100644 index 634cd36..0000000 --- a/apps/site/app/docs/contracts/subscription-condition/page.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import { aeneid } from "@cdr-kit/contracts"; -import { Badge } from "@/components/primitives/badge"; -import { DocPage, PropsTable } from "@/components/docs/doc-page"; - -export default function Page() { - return ( - deployedrecurring, - lede: <>Recurring paid access. The buyer calls subscribe(uuid, periods, maxPricePerPeriod) with the right value; subsequent reads pass until the subscription expires., - importLine: `address = ${aeneid.subscriptionCondition}`, - sections: [ - { - id: "config", - title: "Config shape", - content: ( - - ), - }, - ], - prev: { href: "/docs/contracts", label: "Condition library" }, - next: { href: "/docs/contracts/tier-gate-condition", label: "TierGateCondition" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/contracts/tier-gate-condition/page.tsx b/apps/site/app/docs/contracts/tier-gate-condition/page.tsx deleted file mode 100644 index 1cddd80..0000000 --- a/apps/site/app/docs/contracts/tier-gate-condition/page.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { aeneid } from "@cdr-kit/contracts"; -import { Badge } from "@/components/primitives/badge"; -import { DocPage } from "@/components/docs/doc-page"; - -export default function Page() { - return ( - deployedlicensed, - lede: <>Gate by a held Story IP license-token tier. The buyer passes the tokenId of their license as accessAuxData; the condition verifies ownership + that the tier is in the allowed set., - importLine: `address = ${aeneid.tierGateCondition}`, - sections: [ - { - id: "config", - title: "Config shape", - content: ( -
    -
  • ipId: address — the IP asset the license must reference.
  • -
  • allowedTermsIds: uint256[] — accepted PIL terms ids (≥1).
  • -
- ), - }, - { - id: "aux", - title: "accessAuxData", - content:

ABI-encoded uint256 tokenId of the license the caller holds.

, - }, - ], - prev: { href: "/docs/contracts/subscription-condition", label: "SubscriptionCondition" }, - next: { href: "/docs/contracts/composable-condition", label: "ComposableCondition" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/contracts/time-window-condition/page.tsx b/apps/site/app/docs/contracts/time-window-condition/page.tsx deleted file mode 100644 index 36fac04..0000000 --- a/apps/site/app/docs/contracts/time-window-condition/page.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import { Badge } from "@/components/primitives/badge"; -import { DocPage, PropsTable } from "@/components/docs/doc-page"; - -// Hardcoded until @cdr-kit/contracts@0.5.0 publishes (apps/site consumes ^0.4.0 from npm). -const TIME_WINDOW_ADDRESS = "0x67911435F262e7e4EC4F7FEB4e868a67b9dd90b1"; - -export default function Page() { - return ( - deployednew in 0.5, - lede: <>Read access is allowed only during [startTs, endTs]. endTs == 0 means open-ended (release-on-date pattern). Block-based mode (blockBased: true) is preferred for short horizons., - importLine: `address = ${TIME_WINDOW_ADDRESS}`, - sections: [ - { - id: "config", - title: "Config shape", - content: ( - - ), - }, - { - id: "presets", - title: "Agent presets", - content: ( -
    -
  • releaseOnDate(startTs)(startTs, 0, false) — open-ended after a date.
  • -
  • availableDuring(startTs, endTs)(startTs, endTs, false) — bounded window.
  • -
  • releaseAfterBlocks(blockNum)(0, blockNum, true) — block-based release.
  • -
- ), - }, - ], - prev: { href: "/docs/contracts/cdr-kit-vault", label: "CdrKitVault" }, - next: { href: "/docs/contracts/dead-man-switch-condition", label: "DeadManSwitchCondition" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/hooks/use-access-vault/page.tsx b/apps/site/app/docs/hooks/use-access-vault/page.tsx deleted file mode 100644 index a9c1a14..0000000 --- a/apps/site/app/docs/hooks/use-access-vault/page.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import { Badge } from "@/components/primitives/badge"; -import { DocPage } from "@/components/docs/doc-page"; -import { CodePanel } from "@/components/docs/code-panel"; - -const SIG = `function useAccessVault(uuid: number): { - access: (accessAuxData?: Hex) => Promise; - status: "idle" | "collecting-partials" | "ready" | "error"; - data?: Uint8Array; - error?: CdrError; - progress?: { collected: number; threshold: number }; // mock-mode only -};`; - -export default function UseAccessVaultPage() { - return ( - hook, - lede: <>Imperative access to one vault. Returns a discriminated status + the decrypted bytes when ready. The state machine behind <VaultGate> and <Vault>., - importLine: 'import { useAccessVault } from "@cdr-kit/react"', - sections: [ - { - id: "signature", - title: "Signature", - content: , - }, - { - id: "states", - title: "States", - content: ( -
    -
  • idle — initial; call access() to begin.
  • -
  • collecting-partials — the ~15s threshold read.
  • -
  • readydata populated.
  • -
  • error — see error for the typed reason.
  • -
- ), - }, - ], - prev: { href: "/docs/components/empty-vaults", label: "EmptyVaults" }, - next: { href: "/docs/hooks/use-subscribe-and-access", label: "useSubscribeAndAccess" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/hooks/use-attach-license-terms/page.tsx b/apps/site/app/docs/hooks/use-attach-license-terms/page.tsx deleted file mode 100644 index fa0becb..0000000 --- a/apps/site/app/docs/hooks/use-attach-license-terms/page.tsx +++ /dev/null @@ -1,84 +0,0 @@ -import { Badge } from "@/components/primitives/badge"; -import { DocPage } from "@/components/docs/doc-page"; -import { CodePanel } from "@/components/docs/code-panel"; - -const SIG = `function useAttachLicenseTerms(client: StoryClient | undefined): { - attach: (params: { - ipId: Hex; - licenseTermsId: bigint; - licenseTemplate?: Hex; // defaults to the canonical PIL template - }) => Promise<{ txHash: Hex }>; - isLoading: boolean; - error?: Error; -};`; - -const EXAMPLE = `import { useStoryClient, useAttachLicenseTerms } from "@cdr-kit/react"; - -function AttachTerms({ ipId, licenseTermsId }) { - const client = useStoryClient(); - const { attach, isLoading, error } = useAttachLicenseTerms(client); - return ( - <> - - {error && {error.message}} - - ); -}`; - -export default function Page() { - return ( - - hook - new in 0.5 - Story IP - - ), - lede: ( - <> - Attach an existing PIL licenseTermsId to an IP asset — required before any - buyer can mintLicenseTokens against it. Idempotent: calling twice with the - same args is a no-op tx (still costs gas, so check first if you can). - - ), - importLine: 'import { useAttachLicenseTerms } from "@cdr-kit/react"', - sections: [ - { id: "signature", title: "Signature", content: }, - { id: "example", title: "Example", content: }, - { - id: "ordering", - title: "Call ordering", - content: ( -

- The flow is: (1) registerIpAsset → ipId, (2) registerPilTerms{" "} - → licenseTermsId (or use a previously registered set), (3) attachLicenseTerms{" "} - links the two. Only then can buyers mint license tokens against your IP. -

- ), - }, - { - id: "template", - title: "License template", - content: ( -

- licenseTemplate defaults to the canonical Story PIL template. Override - only if you've registered a custom template at the protocol level — rare. -

- ), - }, - ], - prev: { href: "/docs/hooks/use-mint-license-token", label: "useMintLicenseToken" }, - next: { href: "/docs/hooks/use-publish", label: "usePublish" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/hooks/use-cdr-wallet/page.tsx b/apps/site/app/docs/hooks/use-cdr-wallet/page.tsx deleted file mode 100644 index 65bde61..0000000 --- a/apps/site/app/docs/hooks/use-cdr-wallet/page.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { Badge } from "@/components/primitives/badge"; -import { DocPage } from "@/components/docs/doc-page"; -import { CodePanel } from "@/components/docs/code-panel"; - -export default function Page() { - return ( - hook, - lede: <>Lightweight wallet connect for the simple path: pairs with <CdrProvider>'s built-in injected connector. Bring your own wallet stack (Privy / RainbowKit) for the rich path., - importLine: 'import { useCdrWallet } from "@cdr-kit/react"', - sections: [{ id: "signature", title: "Signature", content: void; - disconnect: () => void; -};`} /> }], - prev: { href: "/docs/hooks/use-creator-vaults", label: "useCreatorVaults" }, - next: { href: "/docs/agent-kit", label: "Agent kit" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/hooks/use-create-vault/page.tsx b/apps/site/app/docs/hooks/use-create-vault/page.tsx deleted file mode 100644 index 1b6d21d..0000000 --- a/apps/site/app/docs/hooks/use-create-vault/page.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import { Badge } from "@/components/primitives/badge"; -import { DocPage } from "@/components/docs/doc-page"; -import { CodePanel } from "@/components/docs/code-panel"; - -export default function Page() { - return ( - hook, - lede: <>Seller-side: call the CdrKitVault factory to mint the NFT, register the IP asset, allocate the CDR slot, and configure the read condition — in one transaction., - importLine: 'import { useCreateVault } from "@cdr-kit/react"', - sections: [{ id: "signature", title: "Signature", content: Promise;`} /> }], - prev: { href: "/docs/hooks/use-subscribe-and-access", label: "useSubscribeAndAccess" }, - next: { href: "/docs/hooks/use-discover-vaults", label: "useDiscoverVaults" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/hooks/use-creator-vaults/page.tsx b/apps/site/app/docs/hooks/use-creator-vaults/page.tsx deleted file mode 100644 index bc7ec5e..0000000 --- a/apps/site/app/docs/hooks/use-creator-vaults/page.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import { Badge } from "@/components/primitives/badge"; -import { DocPage } from "@/components/docs/doc-page"; -import { CodePanel } from "@/components/docs/code-panel"; - -export default function Page() { - return ( - hook, - lede: <>Returns the token ids owned by a given creator address — wraps the factory's getCreatorVaults(address). Standard wagmi useReadContract result shape., - importLine: 'import { useCreatorVaults } from "@cdr-kit/react"', - sections: [{ id: "signature", title: "Signature", content: }], - prev: { href: "/docs/hooks/use-vault-events", label: "useVaultEvents" }, - next: { href: "/docs/hooks/use-cdr-wallet", label: "useCdrWallet" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/hooks/use-dead-man-timer/page.tsx b/apps/site/app/docs/hooks/use-dead-man-timer/page.tsx deleted file mode 100644 index 1690dc5..0000000 --- a/apps/site/app/docs/hooks/use-dead-man-timer/page.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import { Badge } from "@/components/primitives/badge"; -import { DocPage } from "@/components/docs/doc-page"; -import { CodePanel } from "@/components/docs/code-panel"; - -export default function Page() { - return ( - hooknew in 0.5, - lede: <>Live countdown to DeadManSwitchCondition.unlockAt + a creator-only poke() action. The data source for <HeartbeatTimer>., - importLine: 'import { useDeadManTimer } from "@cdr-kit/react"', - sections: [ - { id: "signature", title: "Signature", content: Promise; - isLoading: boolean; -};`} /> }, - { id: "address-override", title: "Address override", content:

The default reads from aeneid.deadManSwitchCondition. Pass address to point at a custom deployment (e.g. mainnet once it ships).

}, - ], - prev: { href: "/docs/hooks/use-cdr-wallet", label: "useCdrWallet" }, - next: { href: "/docs/hooks/use-time-window-state", label: "useTimeWindowState" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/hooks/use-discover-vaults/page.tsx b/apps/site/app/docs/hooks/use-discover-vaults/page.tsx deleted file mode 100644 index c618522..0000000 --- a/apps/site/app/docs/hooks/use-discover-vaults/page.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { Badge } from "@/components/primitives/badge"; -import { DocPage } from "@/components/docs/doc-page"; -import { CodePanel } from "@/components/docs/code-panel"; - -export default function Page() { - return ( - hook, - lede: <>One-shot historical scan of the factory's VaultCreated events. Paginates inside a bounded RPC window. For live feeds, pair with useVaultEvents., - importLine: 'import { useDiscoverVaults } from "@cdr-kit/react"', - sections: [{ id: "signature", title: "Signature", content: }], - prev: { href: "/docs/hooks/use-create-vault", label: "useCreateVault" }, - next: { href: "/docs/hooks/use-vault", label: "useVault" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/hooks/use-escrow-state/page.tsx b/apps/site/app/docs/hooks/use-escrow-state/page.tsx deleted file mode 100644 index f2d591e..0000000 --- a/apps/site/app/docs/hooks/use-escrow-state/page.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import { Badge } from "@/components/primitives/badge"; -import { DocPage } from "@/components/docs/doc-page"; -import { CodePanel } from "@/components/docs/code-panel"; - -export default function Page() { - return ( - hooknew in 0.5, - lede: <>The buyer-side state machine for ConditionalEscrowCondition: listing + paid status + delivery + timeout countdown, plus the two write actions (pay, confirmDelivery)., - importLine: 'import { useEscrowState } from "@cdr-kit/react"', - sections: [ - { id: "signature", title: "Signature", content: Promise; - confirmDelivery: () => Promise; - isLoading: boolean; -};`} /> }, - ], - prev: { href: "/docs/hooks/use-multi-sig-status", label: "useMultiSigStatus" }, - next: { href: "/docs/hooks/use-storage-backend", label: "useStorageBackend" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/hooks/use-mint-license-token/page.tsx b/apps/site/app/docs/hooks/use-mint-license-token/page.tsx deleted file mode 100644 index 6bb7097..0000000 --- a/apps/site/app/docs/hooks/use-mint-license-token/page.tsx +++ /dev/null @@ -1,97 +0,0 @@ -import { Badge } from "@/components/primitives/badge"; -import { DocPage } from "@/components/docs/doc-page"; -import { CodePanel } from "@/components/docs/code-panel"; - -const SIG = `function useMintLicenseToken(client: StoryClient | undefined): { - mint: (params: { - licensorIpId: Hex; - licenseTermsId: bigint; - amount?: bigint; // default 1n - receiver?: Hex; // default connected wallet - maxMintingFee?: bigint; // default 0n (be careful with commercial flavors!) - }) => Promise<{ licenseTokenIds: bigint[]; txHash: Hex }>; - isLoading: boolean; - error?: Error; -};`; - -const EXAMPLE = `import { useStoryClient, useMintLicenseToken } from "@cdr-kit/react"; - -function BuyAccess({ ipId, licenseTermsId, priceWei }) { - const client = useStoryClient(); - const { mint, isLoading } = useMintLicenseToken(client); - return ( - - ); -}`; - -export default function Page() { - return ( - - hook - new in 0.5 - Story IP - - ), - lede: ( - <> - Buyer-side helper: mint Story license token(s) against an IP's{" "} - licenseTermsId. For commercial flavors the mint is the payment — - the fee flows from the buyer's wallet via WIP. The returned token id is the proof - the buyer holds the license; pass it as accessAuxData to read a - license-gated CDR vault. - - ), - importLine: 'import { useMintLicenseToken } from "@cdr-kit/react"', - sections: [ - { id: "signature", title: "Signature", content: }, - { id: "example", title: "Example", content: }, - { - id: "wip", - title: "WIP wrap + approval", - content: ( -

- Commercial PIL flavors charge in WIP (the ERC-20 wrap of native IP). Before - mint succeeds, the buyer wallet needs (1) enough WIP to cover the - fee × amount and (2) an allowance for the RoyaltyModule. Call agent.wrapIp{" "} - + agent.approveWip in the buyer flow, or wire matching hooks if you - build them in your dashboard. -

- ), - }, - { - id: "maxfee", - title: "Always set maxMintingFee", - content: ( -

- Default maxMintingFee is 0n — which means commercial - mints will revert! Pass the buyer-facing price you displayed in the UI to cap the - exposure if the seller changes the fee mid-tx. -

- ), - }, - ], - prev: { href: "/docs/hooks/use-register-ip", label: "useRegisterIp" }, - next: { href: "/docs/hooks/use-attach-license-terms", label: "useAttachLicenseTerms" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/hooks/use-multi-sig-status/page.tsx b/apps/site/app/docs/hooks/use-multi-sig-status/page.tsx deleted file mode 100644 index 2176d84..0000000 --- a/apps/site/app/docs/hooks/use-multi-sig-status/page.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { Badge } from "@/components/primitives/badge"; -import { DocPage } from "@/components/docs/doc-page"; -import { CodePanel } from "@/components/docs/code-panel"; - -export default function Page() { - return ( - hooknew in 0.5, - lede: <>Reads the configured signers + threshold + epoch for a MultiSigCondition vault. Sigs themselves live off-chain — combine this with your own collection state to render approval progress., - importLine: 'import { useMultiSigStatus } from "@cdr-kit/react"', - sections: [ - { id: "signature", title: "Signature", content: }, - ], - prev: { href: "/docs/hooks/use-time-window-state", label: "useTimeWindowState" }, - next: { href: "/docs/hooks/use-escrow-state", label: "useEscrowState" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/hooks/use-publish/page.tsx b/apps/site/app/docs/hooks/use-publish/page.tsx deleted file mode 100644 index 0889bd3..0000000 --- a/apps/site/app/docs/hooks/use-publish/page.tsx +++ /dev/null @@ -1,132 +0,0 @@ -import { Badge } from "@/components/primitives/badge"; -import { DocPage } from "@/components/docs/doc-page"; -import { CodePanel } from "@/components/docs/code-panel"; - -const SIG = `function usePublish(): { - publish: ( - agent: { publish: (p: PublishParams) => Promise }, - params: PublishParams, - ) => Promise; - isLoading: boolean; - error?: Error; - result?: PublishResult; -}; - -interface PublishParams { - data: Uint8Array; - spgNftContract: Hex; - pilTerms: unknown; // PILFlavor.commercialUse({...}) etc. - ipMetadata?: { ipMetadataURI?: string; ipMetadataHash?: Hex; nftMetadataURI?: string; nftMetadataHash?: Hex; }; -} - -interface PublishResult { - ipId: Hex; - tokenId: bigint; - licenseTermsId: bigint; - vaultUuid: number; - vaultTxHash: Hex; - ipRegisterTxHash: Hex; - writeTxHash: Hex; -}`; - -const EXAMPLE = `import { CdrAgent } from "@cdr-kit/agent"; -import { PILFlavor } from "@cdr-kit/story"; -import { usePublish } from "@cdr-kit/react"; -import { useAccount, useWalletClient } from "wagmi"; - -function PublishButton({ secret }: { secret: string }) { - const { data: walletClient } = useWalletClient(); - const { publish, isLoading, result, error } = usePublish(); - - const onClick = async () => { - if (!walletClient) return; - const agent = new CdrAgent({ - privateKey: "0x...", // server-side; in browser, pass walletClient.account - network: "aeneid", - }); - await publish(agent, { - data: new TextEncoder().encode(secret), - spgNftContract: "0xYourSpgCollection", - pilTerms: PILFlavor.commercialUse({ - defaultMintingFee: 1_000_000_000_000_000_000n, - commercialRevShare: 5, - }), - }); - }; - - return ( - <> - - {result && ( -
-{\`ipId:          \${result.ipId}
-licenseTermsId: \${result.licenseTermsId}
-vaultUuid:      \${result.vaultUuid}\`}
-        
- )} - {error && {error.message}} - - ); -}`; - -export default function Page() { - return ( - - hook - new in 0.5 - one-shot - Story IP - - ), - lede: ( - <> - Render-side wrapper for agent.publish() — the agent-as-publisher one-shot - that collapses register-IP + register-PIL-terms + attach-terms + create-license-gated-vault - + write-encrypted-data into a single call. Returns every artifact the buyer needs to - subscribe + read. - - ), - importLine: 'import { usePublish } from "@cdr-kit/react"', - sections: [ - { id: "signature", title: "Signature", content: }, - { id: "example", title: "Example", content: }, - { - id: "agent-required", - title: "Why does it take an `agent` argument?", - content: ( -

- agent.publish() needs a wallet client + private key for the - multi-step orchestration (4 contract writes across IP-registry, PIL-template, - CDR-precompile). The React hook stays headless — you construct the{" "} - CdrAgent however your app does (server-side env, browser RPC over the - connected wallet) and the hook handles loading/error/result state around it. -

- ), - }, - { - id: "buyer", - title: "Buyer flow", - content: ( -

- After publish resolves, share {`{ ipId, licenseTermsId, vaultUuid }`}{" "} - with the buyer (URL param, QR, on-chain event). They call agent.wrapIp →{" "} - agent.approveWipuseMintLicenseToken.mint →{" "} - agent.accessLicenseGated to pay + decrypt. See{" "} - /docs/story for the full buyer code. -

- ), - }, - ], - prev: { href: "/docs/hooks/use-attach-license-terms", label: "useAttachLicenseTerms" }, - next: { href: "/docs/storage", label: "Storage adapters" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/hooks/use-register-ip/page.tsx b/apps/site/app/docs/hooks/use-register-ip/page.tsx deleted file mode 100644 index 8a4dd59..0000000 --- a/apps/site/app/docs/hooks/use-register-ip/page.tsx +++ /dev/null @@ -1,78 +0,0 @@ -import { Badge } from "@/components/primitives/badge"; -import { DocPage } from "@/components/docs/doc-page"; -import { CodePanel } from "@/components/docs/code-panel"; - -const SIG = `function useRegisterIp(client: StoryClient | undefined): { - registerIp: (params: { - spgNftContract: Hex; - recipient?: Hex; - ipMetadataURI?: string; - ipMetadataHash?: Hex; - }) => Promise<{ ipId: Hex; tokenId: bigint; txHash: Hex }>; - isLoading: boolean; - error?: Error; -};`; - -const EXAMPLE = `import { useStoryClient, useRegisterIp } from "@cdr-kit/react"; - -function RegisterButton() { - const client = useStoryClient(); - const { registerIp, isLoading, error } = useRegisterIp(client); - return ( - - ); -}`; - -export default function Page() { - return ( - - hook - new in 0.5 - Story IP - - ), - lede: ( - <> - Mint a fresh NFT (via your SPG collection) and register it as a Story IP asset in a - single tx. Pair with useAttachLicenseTerms to make the IP licensable, then{" "} - useMintLicenseToken on the buyer side. - - ), - importLine: 'import { useRegisterIp } from "@cdr-kit/react"', - sections: [ - { id: "signature", title: "Signature", content: }, - { id: "example", title: "Example", content: }, - { - id: "prereq", - title: "Prerequisites", - content: ( -

- You need an existing SPG NFT collection. Create one via Story's registration - workflows (registrationWorkflows.createCollection) or use a previously - deployed collection address. The connected wallet must be allowed to mint into it. -

- ), - }, - ], - prev: { href: "/docs/hooks/use-story-client", label: "useStoryClient" }, - next: { href: "/docs/hooks/use-mint-license-token", label: "useMintLicenseToken" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/hooks/use-storage-backend/page.tsx b/apps/site/app/docs/hooks/use-storage-backend/page.tsx deleted file mode 100644 index b594ff6..0000000 --- a/apps/site/app/docs/hooks/use-storage-backend/page.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import { Badge } from "@/components/primitives/badge"; -import { DocPage } from "@/components/docs/doc-page"; -import { CodePanel } from "@/components/docs/code-panel"; - -export default function Page() { - return ( - hooknew in 0.5, - lede: <>Config-driven CdrStorageProvider factory. A dashboard switches backends at runtime by passing a JSON config (Pinata / Supabase / IPFS / read-only gateway / in-memory)., - importLine: 'import { useStorageBackend } from "@cdr-kit/react"', - sections: [ - { id: "signature", title: "Signature", content: }; - -function useStorageBackend(config: StorageBackendConfig | undefined): CdrStorageProvider | undefined;`} /> }, - { id: "memoization", title: "Memoization", content:

The provider instance is memoized on config identity. Pass a stable config object (typically from your environment variables, not a fresh literal every render).

}, - ], - prev: { href: "/docs/hooks/use-escrow-state", label: "useEscrowState" }, - next: { href: "/docs/contracts", label: "Condition library" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/hooks/use-story-client/page.tsx b/apps/site/app/docs/hooks/use-story-client/page.tsx deleted file mode 100644 index 462d227..0000000 --- a/apps/site/app/docs/hooks/use-story-client/page.tsx +++ /dev/null @@ -1,79 +0,0 @@ -import { Badge } from "@/components/primitives/badge"; -import { DocPage } from "@/components/docs/doc-page"; -import { CodePanel } from "@/components/docs/code-panel"; - -const SIG = `function useStoryClient(chainId?: number): StoryClient | undefined;`; - -const EXAMPLE = `import { useStoryClient } from "@cdr-kit/react"; - -function Publish() { - const client = useStoryClient(); // bound to the connected wagmi wallet - if (!client) return

connect a wallet to publish

; - // client is the StoryClient from @story-protocol/core-sdk — - // pass it to useRegisterIp, useMintLicenseToken, etc. - return ; -}`; - -export default function Page() { - return ( - - hook - new in 0.5 - Story IP - - ), - lede: ( - <> - Lazy-load and memoize a StoryClient from @story-protocol/core-sdk{" "} - bound to the connected wagmi wallet. Returns undefined until the wallet - connects and the lazy import resolves. Pair with useRegisterIp,{" "} - useMintLicenseToken, useAttachLicenseTerms, or any other Story - SDK call. - - ), - importLine: 'import { useStoryClient } from "@cdr-kit/react"', - sections: [ - { - id: "signature", - title: "Signature", - content: , - }, - { - id: "example", - title: "Example", - content: , - }, - { - id: "lazy", - title: "Lazy-loaded peer dep", - content: ( -

- @cdr-kit/story is an optional peer dep on @cdr-kit/react{" "} - — the hook does a dynamic import("@cdr-kit/story") on first - call, so dashboards that never publish IP don't pay the bundle cost. If the - peer dep isn't installed, the hook throws with a clear install hint. -

- ), - }, - { - id: "chain", - title: "Custom chain", - content: ( -

- The default chainId is 1315 (Story Aeneid). Pass an explicit value to - bind the client to a different chain (e.g. Story mainnet once it ships). -

- ), - }, - ], - prev: { href: "/docs/hooks/use-storage-backend", label: "useStorageBackend" }, - next: { href: "/docs/hooks/use-register-ip", label: "useRegisterIp" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/hooks/use-subscribe-and-access/page.tsx b/apps/site/app/docs/hooks/use-subscribe-and-access/page.tsx deleted file mode 100644 index 17c651a..0000000 --- a/apps/site/app/docs/hooks/use-subscribe-and-access/page.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { Badge } from "@/components/primitives/badge"; -import { DocPage } from "@/components/docs/doc-page"; -import { CodePanel } from "@/components/docs/code-panel"; - -const SIG = `function useSubscribeAndAccess( - uuid: number, - subscriptionCondition?: Hex, -): { - run: (p: { - periods: bigint; - maxPricePerPeriod: bigint; - value: bigint; - accessAuxData?: Hex; - }) => Promise; - status: "idle" | "paying" | "collecting-partials" | "ready" | "error"; - data?: Uint8Array; -};`; - -export default function UseSubscribeAndAccessPage() { - return ( - hook, - lede: <>The full 2-step flow — pay (real subscribe tx) then access (threshold read). Five status values; design the "paying" and "collecting-partials" states legibly., - importLine: 'import { useSubscribeAndAccess } from "@cdr-kit/react"', - sections: [ - { id: "signature", title: "Signature", content: }, - ], - prev: { href: "/docs/hooks/use-access-vault", label: "useAccessVault" }, - next: { href: "/docs/hooks/use-create-vault", label: "useCreateVault" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/hooks/use-time-window-state/page.tsx b/apps/site/app/docs/hooks/use-time-window-state/page.tsx deleted file mode 100644 index d454c66..0000000 --- a/apps/site/app/docs/hooks/use-time-window-state/page.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import { Badge } from "@/components/primitives/badge"; -import { DocPage } from "@/components/docs/doc-page"; -import { CodePanel } from "@/components/docs/code-panel"; - -export default function Page() { - return ( - hooknew in 0.5, - lede: <>Reads a TimeWindowCondition vault's [startTs, endTs] window + ticks a 1-second client-side timer to surface opensInMs/closesInMs., - importLine: 'import { useTimeWindowState } from "@cdr-kit/react"', - sections: [ - { id: "signature", title: "Signature", content: }, - { id: "block-based", title: "Block-based windows", content:

For blockBased: true windows, opensInMs/closesInMs return 0block.number isn't ticked client-side. Read the raw block bounds from the result object.

}, - ], - prev: { href: "/docs/hooks/use-dead-man-timer", label: "useDeadManTimer" }, - next: { href: "/docs/hooks/use-multi-sig-status", label: "useMultiSigStatus" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/hooks/use-vault-events/page.tsx b/apps/site/app/docs/hooks/use-vault-events/page.tsx deleted file mode 100644 index 3b334a5..0000000 --- a/apps/site/app/docs/hooks/use-vault-events/page.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import { Badge } from "@/components/primitives/badge"; -import { DocPage } from "@/components/docs/doc-page"; -import { CodePanel } from "@/components/docs/code-panel"; - -export default function Page() { - return ( - hook, - lede: <>Live subscription to VaultCreated events on the factory. Returns events accumulated since mount — pair with useDiscoverVaults for backfill + live., - importLine: 'import { useVaultEvents } from "@cdr-kit/react"', - sections: [{ id: "signature", title: "Signature", content: }], - prev: { href: "/docs/hooks/use-vault", label: "useVault" }, - next: { href: "/docs/hooks/use-creator-vaults", label: "useCreatorVaults" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/hooks/use-vault/page.tsx b/apps/site/app/docs/hooks/use-vault/page.tsx deleted file mode 100644 index a753a0d..0000000 --- a/apps/site/app/docs/hooks/use-vault/page.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import { Badge } from "@/components/primitives/badge"; -import { DocPage } from "@/components/docs/doc-page"; -import { CodePanel } from "@/components/docs/code-panel"; - -export default function Page() { - return ( - hook, - lede: <>Resolve a vault's on-chain metadata from its uuid via the CdrKitVault factory (token id, IP id, creator, license terms id)., - importLine: 'import { useVault } from "@cdr-kit/react"', - sections: [{ id: "signature", title: "Signature", content: }], - prev: { href: "/docs/hooks/use-discover-vaults", label: "useDiscoverVaults" }, - next: { href: "/docs/hooks/use-vault-events", label: "useVaultEvents" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/page.tsx b/apps/site/app/docs/page.tsx deleted file mode 100644 index 2eb9eeb..0000000 --- a/apps/site/app/docs/page.tsx +++ /dev/null @@ -1,141 +0,0 @@ -import Link from "next/link"; -import { Badge } from "@/components/primitives/badge"; -import { DocPage } from "@/components/docs/doc-page"; - -export default function IntroductionPage() { - return ( - v0.5.0, - lede: ( - <> - cdr-kit is the developer toolkit for Story Protocol's Confidential Data Rails — the{" "} - wagmi-style layer that makes it possible to - ship private, paid, license-gated data on Story without hand-writing Solidity, hand-rolling encryption - flows, or wiring IP licensing primitives by hand. - - ), - sections: [ - { - id: "what", - title: "What's in the kit", - content: ( - <> -

- 15 packages, MIT-licensed, all published to{" "} - - npmjs.com/org/cdr-kit - {" "} - at v0.5.0: -

-
    -
  • - - @cdr-kit/react - {" "} - — components + hooks + theming (5 new 0.5 components, 7 new hooks) -
  • -
  • - @cdr-kit/react-ui — styled drop-ins built on the headless layer -
  • -
  • - - @cdr-kit/core - {" "} - — typed SDK (condition encoders, 2-step flows, 8 storage adapters, mock kit, WASM init) -
  • -
  • - - @cdr-kit/contracts - {" "} - — Solidity ABIs + deployed addresses for 9 conditions (5 base + 4 advanced in 0.5) -
  • -
  • - - @cdr-kit/agent - {" "} - — autonomous-agent client (discover → subscribe → access; +12 advanced helpers in 0.5) -
  • -
  • - - @cdr-kit/story - {" "} - — Story IP creator surface (NEW in 0.5): registerIpAsset / PIL flavors / mintLicenseTokens -
  • -
  • - @cdr-kit/tools — framework-agnostic tool definitions (34 tools) -
  • -
  • - Framework adapters:{" "} - - @cdr-kit/vercel-ai - {" "} - ·{" "} - - @cdr-kit/openai - {" "} - ·{" "} - - @cdr-kit/langchain - {" "} - ·{" "} - - @cdr-kit/agentkit - {" "} - ·{" "} - - @cdr-kit/goat - -
  • -
  • - - @cdr-kit/mcp - {" "} - — the MCP server (Claude Desktop / Cursor / Windsurf / OpenClaw) -
  • -
  • - - @cdr-kit/cli - {" "} - — the cdr binary (25 commands across vault / multi-sig / escrow / IP) -
  • -
  • - - create-cdr-kit-app - {" "} - — the scaffolder -
  • -
- - ), - }, - { - id: "where", - title: "Where to start", - content: ( - <> -
    -
  • - Quickstart — install, gate encrypted data in under 60s. -
  • -
  • - VaultGate component — the canonical drop-in. -
  • -
  • - Agent kit overview — autonomous agents that buy data. -
  • -
  • - Condition library — the Solidity standard library. -
  • -
- - ), - }, - ], - next: { href: "/docs/quickstart", label: "Quickstart" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/quickstart/page.tsx b/apps/site/app/docs/quickstart/page.tsx deleted file mode 100644 index 1a4c4e5..0000000 --- a/apps/site/app/docs/quickstart/page.tsx +++ /dev/null @@ -1,78 +0,0 @@ -import { Badge } from "@/components/primitives/badge"; -import { DocPage } from "@/components/docs/doc-page"; -import { CodePanel } from "@/components/docs/code-panel"; - -const PROVIDER_CODE = `import { CdrProvider } from "@cdr-kit/react"; -import { wagmiConfig } from "./wagmi"; - -export function App({ children }) { - return ( - - {children} - - ); -}`; - -const GATE_CODE = `import { VaultGate } from "@cdr-kit/react"; - -export function SignalCard() { - return ( - }> - {(data) =>
{new TextDecoder().decode(data)}
} -
- ); -}`; - -export default function QuickstartPage() { - return ( - ≈ 60 seconds, - lede: <>Install the React layer, wrap your app in a provider, drop in a <VaultGate>. That's it., - sections: [ - { - id: "install", - title: "Install", - content: , - }, - { - id: "provider", - title: "Wrap in ", - content: ( - <> -

- <CdrProvider> wires WagmiProvider, react-query, and initializes the CDR - crypto WASM. Pass config + apiUrl for live mode, or mockKit for - offline dev. -

- - - ), - }, - { - id: "gate", - title: "Gate your data", - content: ( - <> -

- <VaultGate> checks the on-chain condition, collects key shares, and hands you the - decrypted bytes. Pass a fallback for the "not yet entitled" state. -

- - - ), - }, - { - id: "scaffold", - title: "Or scaffold a starter", - content: , - }, - ], - prev: { href: "/docs", label: "Introduction" }, - next: { href: "/docs/theming", label: "Theming" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/scaffolder/page.tsx b/apps/site/app/docs/scaffolder/page.tsx deleted file mode 100644 index 1369ac1..0000000 --- a/apps/site/app/docs/scaffolder/page.tsx +++ /dev/null @@ -1,79 +0,0 @@ -import { Badge } from "@/components/primitives/badge"; -import { DocPage } from "@/components/docs/doc-page"; -import { CodePanel } from "@/components/docs/code-panel"; - -export default function Page() { - return ( - create-cdr-kit-app9 templates · 0.3, - lede: <>One command per pattern. Pick a template and you have a working consumer app — paywalled blog, single-page Subscribe, stdio MCP server, or any of five agent-framework wirings — running locally in under a minute. Mock CDR out of the box; swap one provider to go live on Aeneid., - sections: [ - { - id: "invoke", - title: "Invoke", - content: ( - - ), - }, - { - id: "ui", - title: "UI templates", - content: ( - <> -

blog — Next.js 16 + React 19 + @cdr-kit/react-ui. Three inline <UnlockablePill>s on a real-looking blog post. The onscroll.app pattern. Recommended first.

-

paywall — Next.js single-page <SubscribeButton> gating a whole content block. Classic Substack/Patreon pattern.

- - ), - }, - { - id: "mcp", - title: "MCP server template", - content: ( - <> -

mcp-server — stdio Model Context Protocol server. Exposes cdr_discover_vaults, cdr_subscribe_and_access, cdr_access_vault to any MCP host (Claude Desktop, Cursor, Windsurf). The agent pays from its own wallet — the LLM never sees the key.

-

Ships with a ready-to-paste claude_desktop_config.json.

- - ), - }, - { - id: "agents", - title: "Agent templates (one per framework)", - content: ( - <> -

Each template instantiates new CdrAgent({"{"} privateKey, apiUrl {"}"}) and wires CDR tools into the named framework. Pick the one your stack uses; the rest of your agent logic stays untouched.

-

agent-vercel-ai — Vercel AI SDK chatbot using getVercelAITools(agent) with generateText.

-

agent-openai — Raw OpenAI / Anthropic tool-calling loop using getOpenAITools(agent).{"{"}tools, dispatch{"}"}.

-

agent-langchain — LangChain ReAct agent via createReactAgent({"{"}llm, tools: getLangChainTools(agent){"}"}).

-

agent-agentkit — Coinbase AgentKit action provider via getCdrActionProvider(agent). Compose with your wallet provider.

-

agent-goat — GOAT SDK ToolBase[] via getGoatTools(agent).

- - ), - }, - { - id: "starter", - title: "starter template", - content: ( - <> -

starter — Two-file Node TypeScript script that runs createMockCdrKit() + accessVault() end-to-end. Good for verifying the kit works in your env or for backend-only CDR work.

- - - ), - }, - ], - prev: { href: "/docs/contracts/cdr-kit-vault", label: "CdrKitVault" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/skill/page.tsx b/apps/site/app/docs/skill/page.tsx deleted file mode 100644 index 275de70..0000000 --- a/apps/site/app/docs/skill/page.tsx +++ /dev/null @@ -1,100 +0,0 @@ -import { Badge } from "@/components/primitives/badge"; -import { DocPage } from "@/components/docs/doc-page"; -import { CodePanel } from "@/components/docs/code-panel"; - -const INSTALL_PATHS = `# 1. via the cdr CLI (recommended) -$ npm install -g @cdr-kit/cli -$ cdr skill install - -# 2. via Claude Code's plugin marketplace -$ claude -/plugin marketplace add Blockchain-Oracle/cdr-kit -/plugin install cdr-kit@cdr-kit - -# 3. manual -$ git clone https://github.com/Blockchain-Oracle/cdr-kit -$ cp -r cdr-kit/packages/plugin/cdr-kit ~/.claude/skills/cdr-kit`; - -const SKILLS: { name: string; trigger: string; what: string }[] = [ - { name: "design-condition", trigger: "Which CDR condition should I use for X?", what: "Decision tree for picking among open / subscription / tier-gate / composable / license-read. Encoding cheatsheet per condition." }, - { name: "wire-allocate-pay-read", trigger: "How do I create a vault and read it?", what: "The canonical 4-step flow (creator + consumer sides). Gotchas: OOG, uuid-from-receipt, value-must-match-price." }, - { name: "debug-cdr-precompile", trigger: "OOG / ReentrancySentryOOG / AlreadyConfigured / partial-collection timeout", what: "7 failure modes with root cause + fix. Backed by the gotchas in context/research/cdr-protocol-truth.md." }, - { name: "audit-vault-config", trigger: "Should I subscribe to this? / Did my deploy configure right?", what: "4-call view-only audit. Red-flag checklist (payee mismatch, never-expiring period, missing licenseTermsId)." }, - { name: "explain-cdr-error", trigger: "(Any raw error message)", what: "Lookup table from error code → root cause + fix. Maps every @piplabs/cdr-sdk error class." }, - // 0.5 — advanced features - { name: "design-storage-adapter", trigger: "Which storage backend for my CDR file vault? Pinata / Supabase / R2 / Storacha?", what: "Decision tree for picking among the 6 official adapters + 3 ecosystem packages. Wiring examples, common failure modes (CORS, RLS, CID drift)." }, - { name: "design-multisig-condition", trigger: "Multi-sig CDR vault / N-of-M approval / off-chain signing", what: "N-of-M EIP-712 setup, signer rotation, sig-collection UX, caller binding, ECDSA-malleability dedupe, EIP-1271 gap." }, - { name: "design-deadman-switch", trigger: "Dead-man switch / wallet recovery / leak-on-disappearance / heartbeat", what: "Trapdoor semantics, poke() cadence, block-vs-timestamp tradeoff, heir variants, operational risk (forgotten heartbeat)." }, -]; - -export default function Page() { - return ( - cdr-kit plugin8 skills · v0.5, - lede: <>A multi-skill Claude Code plugin (Trail-of-Bits density) that teaches any agent the cdr-kit workflows. Each SKILL.md is under 500 lines (per Anthropic's hard cap); reference docs (ABIs, error catalog) live in a references/ subdir loaded on demand. Pairs with the cdr CLI and the @cdr-kit/mcp server — three coordinated surfaces, one bundle., - sections: [ - { id: "install", title: "Install (three paths)", content: }, - { - id: "skills", - title: "Skills (8)", - content: ( - - - - {SKILLS.map((s) => ( - - - - - - ))} - -
SkillWhen it firesWhat it teaches
{s.name}{s.trigger}{s.what}
- ), - }, - { - id: "layout", - title: "Plugin layout", - content: ( - - ), - }, - { - id: "boundary", - title: "Skill vs MCP vs CLI", - content: ( - <> -

- Per the Anthropic-blessed boundary (guide): MCP = let Claude access external systems; Skill = let Claude know how to do something; CLI = the same operations exposed for a human in the terminal. -

-

- cdr-kit ships all three from one shared core: the 21 CDR operations are MCP tools in @cdr-kit/mcp; this plugin's 8 SKILL.mds teach Claude the procedural knowledge for designing, wiring, and debugging around those tools; cdr exposes the same surface for terminal use. -

- - ), - }, - ], - prev: { href: "/docs/cli", label: "CLI: cdr" }, - next: { href: "/docs/contracts", label: "Contracts" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/storage/page.tsx b/apps/site/app/docs/storage/page.tsx deleted file mode 100644 index 750f401..0000000 --- a/apps/site/app/docs/storage/page.tsx +++ /dev/null @@ -1,195 +0,0 @@ -import { Badge } from "@/components/primitives/badge"; -import { DocPage } from "@/components/docs/doc-page"; -import { CodePanel } from "@/components/docs/code-panel"; - -const PINATA_CODE = `import { createPinataStorage, uploadFile } from "@cdr-kit/core"; - -const storage = createPinataStorage({ jwt: process.env.PINATA_JWT! }); -const { uuid, cid, txHashes } = await uploadFile(client, { - content: fileBytes, - storage, - readConditionAddr, - readConditionData, -});`; - -const SUPABASE_CODE = `import { createSupabaseStorage } from "@cdr-kit/core"; - -const storage = createSupabaseStorage({ - supabaseUrl: process.env.SUPABASE_URL!, - key: process.env.SUPABASE_SERVICE_ROLE_KEY!, - bucket: "cdr-secrets", - pathPrefix: "vaults/", // optional, default "cdr/" - bucketIsPublic: false, // download uses /authenticated/ when private -});`; - -const READ_ONLY_CODE = `import { createReadOnlyGatewayStorage, downloadFile } from "@cdr-kit/core"; - -// Buyer-side: read from any public IPFS gateway. Throws on upload() — by design. -const storage = createReadOnlyGatewayStorage({ gatewayUrl: "https://gateway.pinata.cloud" }); -const { content } = await downloadFile(client, { uuid, storage });`; - -const IPFS_CODE = `import { createIpfsStorage } from "@cdr-kit/core"; - -// Self-hosted Kubo, or any pinning service with a multipart POST + JSON CID response. -const storage = createIpfsStorage({ - addUrl: "http://kubo:5001/api/v0/add", - gatewayUrl: "http://kubo:8080", - headers: { Authorization: "Bearer ..." }, -});`; - -const MEMORY_CODE = `import { createMemoryStorage } from "@cdr-kit/core"; - -// Unit tests, CI, mocks. Content-addressed, returns a real CIDv1. -const storage = createMemoryStorage();`; - -const S3_CODE = `import { createS3Storage } from "@cdr-kit/core"; - -// Works against AWS S3, Cloudflare R2, MinIO, or any S3-compatible store. -// Lazy-loads @aws-sdk/client-s3 via dynamic import — install it yourself. -const storage = await createS3Storage({ - bucket: "cdr-secrets", - region: "auto", // R2: "auto"; AWS: "us-east-1" etc. - endpoint: "https://.r2.cloudflarestorage.com", // omit for AWS - accessKeyId: process.env.S3_ACCESS_KEY_ID!, - secretAccessKey: process.env.S3_SECRET_ACCESS_KEY!, - publicUrlBase: "https://.r2.dev/cdr-secrets", // for browser-readable downloads - prefix: "cdr/", -});`; - -const STORACHA_CODE = `import { createStorachaStorage } from "@cdr-kit/core"; - -// Storacha-server (UCAN-backed pinning over @web3-storage/w3up-client). -// Install: pnpm add @web3-storage/w3up-client -const storage = await createStorachaStorage({ - key: process.env.STORACHA_KEY!, - spaceDid: process.env.STORACHA_SPACE_DID!, - proof: process.env.STORACHA_PROOF!, // base64 UCAN delegation - gatewayUrl: "https://w3s.link", // optional, default w3s.link -});`; - -const HELIA_CODE = `import { createHeliaStorage } from "@cdr-kit/core"; - -// Browser-side embedded IPFS via Helia — no remote pinner, the user is the node. -// Install: pnpm add helia @helia/unixfs -// Pin @peculiar/webcrypto: 1.7.0 in pnpm.overrides (Helia's wasm setup is fragile). -const storage = await createHeliaStorage({ - gatewayUrl: "https://ipfs.io", // optional, only used by downloadFile if user is offline -});`; - -const ROUTING_CODE = `import { shouldUseFile, getInlineLimit } from "@cdr-kit/core"; - -const limit = await getInlineLimit(client); // reads CDR.maxEncryptedDataSize() once + caches -if (shouldUseFile(content, limit)) { - await uploadFile(client, { content, storage, readConditionAddr, readConditionData }); -} else { - await writeVaultData(client, { uuid, dataKey: content }); -}`; - -export default function Page() { - return ( - @cdr-kit/core0.5, - lede: <>CDR vaults route payloads by size: ≤ 1 KB goes inline on-chain, larger payloads go off-chain with a CDR-secured key reference. The off-chain path needs a CdrStorageProvider8 ship in @cdr-kit/core (5 core + 3 ecosystem: S3-compat / Storacha / Helia). All speak the same 2-method interface: upload(bytes) → cid, download(cid) → bytes., - importLine: 'import { createPinataStorage, createSupabaseStorage, /* ... */ } from "@cdr-kit/core"', - sections: [ - { - id: "decision", - title: "Pick the right adapter", - content: ( -
    -
  • Buyer-only / dashboardscreateReadOnlyGatewayStorage (no pin creds needed, throws on upload).
  • -
  • Hosted IPFS pinningcreatePinataStorage (JWT, default Pinata gateway).
  • -
  • Already-have-Supabase shopscreateSupabaseStorage (bucket + service-role key, bare REST — no @supabase/supabase-js dep).
  • -
  • Self-hosted Kubo / custom pinnercreateIpfsStorage (multipart POST + JSON CID response).
  • -
  • AWS S3 / R2 / MinIOcreateS3Storage (signed-URL downloads, lazy-loads @aws-sdk/client-s3).
  • -
  • UCAN-backed pinningcreateStorachaStorage (peer-dep @web3-storage/w3up-client).
  • -
  • Browser-embedded IPFScreateHeliaStorage (peer-dep helia, user is the node).
  • -
  • Tests / CIcreateMemoryStorage (content-addressed, real CIDv1).
  • -
- ), - }, - { - id: "pinata", - title: "createPinataStorage", - content: , - }, - { - id: "supabase", - title: "createSupabaseStorage", - content: ( - <> - -

The "CID" is the bucket-relative path the object was uploaded to. Supabase doesn't speak IPFS, but CdrStorageProvider only requires a string round-trip handle.

- - ), - }, - { - id: "gateway", - title: "createReadOnlyGatewayStorage", - content: ( - <> - -

For dashboards that consume but never produce. Pair with a seller using createPinataStorage (or any IPFS pinner) on the write side.

- - ), - }, - { - id: "ipfs", - title: "createIpfsStorage", - content: , - }, - { - id: "memory", - title: "createMemoryStorage", - content: , - }, - { - id: "routing", - title: "Inline cap + routing", - content: ( - <> -

CDR sizes payloads at write time. The hard cap comes from the on-chain CDR.maxEncryptedDataSize() (currently ≈ 1 KB after TDH2 overhead). getInlineLimit(client) reads it once + caches; shouldUseFile(content, limit) picks the routing.

- - - ), - }, - { - id: "s3", - title: "createS3Storage", - content: ( - <> -

Works against AWS S3, Cloudflare R2, or any S3-compatible store. The SDK is loaded lazily via dynamic import so non-S3 deployments don't pay the bundle cost. Install @aws-sdk/client-s3 yourself in your project.

- - - ), - }, - { - id: "storacha", - title: "createStorachaStorage", - content: ( - <> -

UCAN-backed pinning service. Lazy-loads @web3-storage/w3up-client; install it yourself. The agent address must be authorized for the Space via a base64 UCAN proof.

- - - ), - }, - { - id: "helia", - title: "createHeliaStorage", - content: ( - <> -

Browser-side embedded IPFS. The user's tab IS the IPFS node — no remote pinner needed. Lazy-loads helia + @helia/unixfs. Pin @peculiar/webcrypto: 1.7.0 in pnpm.overrides (Helia's WASM init is sensitive to webcrypto version drift).

- - - ), - }, - ], - prev: { href: "/docs/hooks/use-storage-backend", label: "useStorageBackend" }, - next: { href: "/docs/contracts", label: "Condition library" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/story/page.tsx b/apps/site/app/docs/story/page.tsx deleted file mode 100644 index 8f9d524..0000000 --- a/apps/site/app/docs/story/page.tsx +++ /dev/null @@ -1,107 +0,0 @@ -import { Badge } from "@/components/primitives/badge"; -import { DocPage } from "@/components/docs/doc-page"; -import { CodePanel } from "@/components/docs/code-panel"; - -const PUBLISH_CODE = `import { CdrAgent } from "@cdr-kit/agent"; -import { PILFlavor } from "@cdr-kit/story"; - -const agent = new CdrAgent({ privateKey: process.env.CDR_PRIVATE_KEY!, network: "aeneid" }); - -const result = await agent.publish({ - data: new TextEncoder().encode("the secret data"), - spgNftContract: "0xYourSpgCollection", - pilTerms: PILFlavor.commercialUse({ - defaultMintingFee: 1_000_000_000_000_000_000n, // 1 WIP per license - commercialRevShare: 5, // 5% derivative revenue - }), -}); - -// → { ipId, tokenId, licenseTermsId, vaultUuid, -// vaultTxHash, ipRegisterTxHash, writeTxHash }`; - -const BUYER_CODE = `// Buyer flow once they have { ipId, licenseTermsId, vaultUuid }: -await agent.wrapIp({ amountWei: 1_000_000_000_000_000_000n }); -await agent.approveWip({ spender: ROYALTY_MODULE, amountWei: 1_000_000_000_000_000_000n }); - -const { licenseTokenIds } = await agent.mintLicenseTokens({ - licensorIpId: ipId, - licenseTermsId, - amount: 1n, - maxMintingFee: 1_000_000_000_000_000_000n, -}); - -const bytes = await agent.accessLicenseGated({ - uuid: vaultUuid, - licenseTokenId: licenseTokenIds[0]!, -});`; - -export default function Page() { - return ( - @cdr-kit/story0.5, - lede: <>Thin TypeScript wrappers over @story-protocol/core-sdk: register an IP asset, attach PIL license terms, mint license tokens, register derivatives, wrap IP into WIP. Plus the headline agent.publish() one-shot that collapses register-IP + attach-terms + create-license-gated-vault + write-encrypted-data into a single agent call., - importLine: 'import { PILFlavor, createStoryClient } from "@cdr-kit/story"', - sections: [ - { - id: "publish", - title: "agent.publish() — the one-shot", - content: ( - <> -

Collapses 4 normally-separate Story SDK calls into a single agent method. Returns the IP / license / vault artifacts a buyer needs to subscribe + read.

- - - ), - }, - { - id: "buyer", - title: "Buyer flow", - content: ( - <> -

Once the seller publishes, share {`{ ipId, licenseTermsId, vaultUuid }`} with buyers (URL, QR, whatever). Buyer wraps IP → mints license token → reads vault:

- - - ), - }, - { - id: "flavors", - title: "PIL flavors", - content: ( -
    -
  • PILFlavor.nonCommercialSocialRemixing() — open-source / free public IP (0 fee, 0 rev share).
  • -
  • PILFlavor.commercialUse({"{ defaultMintingFee, commercialRevShare }"}) — paid one-off use, no derivatives.
  • -
  • PILFlavor.commercialRemix({"{ defaultMintingFee, commercialRevShare }"}) — paid use + derivative works allowed, revenue flows back.
  • -
  • PILFlavor.creativeCommonsAttribution() — CC-BY style (0 fee, attribution required).
  • -
- ), - }, - { - id: "individual", - title: "Lower-level wrappers", - content: ( -

If publish() doesn't fit, the individual wrappers stay accessible from the agent: registerIpAsset, attachLicenseTerms, mintLicenseTokens, registerDerivative, registerPilTerms, wrapIp, approveWip. Each is a thin @story-protocol/core-sdk wrapper with normalized return shapes.

- ), - }, - { - id: "react", - title: "React hooks", - content: ( -

@cdr-kit/react exposes useStoryClient (memoized client bound to the wagmi wallet), useRegisterIp, useAttachLicenseTerms, useMintLicenseToken, and usePublish (the one-shot delegator). Both @cdr-kit/agent and @cdr-kit/story are optional peer deps on the React package — pay only when you publish.

- ), - }, - { - id: "skill", - title: "Design skill", - content: ( -

See design-publish-with-story SKILL.md for the decision tree on picking PIL flavor, prerequisites (SPG NFT collection), common failure modes, and the agent / CLI / MCP triangulation.

- ), - }, - ], - prev: { href: "/docs/agent-kit", label: "Agent kit" }, - next: { href: "/docs/contracts", label: "Condition library" }, - }} - /> - ); -} diff --git a/apps/site/app/docs/theming/page.tsx b/apps/site/app/docs/theming/page.tsx deleted file mode 100644 index 04713ad..0000000 --- a/apps/site/app/docs/theming/page.tsx +++ /dev/null @@ -1,64 +0,0 @@ -import { DocPage } from "@/components/docs/doc-page"; -import { CodePanel } from "@/components/docs/code-panel"; - -const APPEARANCE_CODE = ``; - -export default function ThemingPage() { - return ( - - @cdr-kit/react is intentionally headless. The components ship minimal default visuals; you theme - the look through CSS custom properties passed via CdrProvider.appearance.variables (or by setting - them on a parent stylesheet). - - ), - sections: [ - { - id: "tokens", - title: "Recognized tokens", - content: ( -
    -
  • --cdr-accent — primary accent
  • -
  • --cdr-border — hairline border color
  • -
  • --cdr-skeleton — placeholder background
  • -
  • --cdr-fg, --cdr-muted — text colors
  • -
- ), - }, - { - id: "passing", - title: "Passing tokens", - content: ( - - ), - }, - { - id: "styled", - title: "Styled variants", - content: ( -

- Want batteries-included pre-styled components instead of headless slots? See{" "} - @cdr-kit/react-ui in the component gallery. -

- ), - }, - ], - prev: { href: "/docs/quickstart", label: "Quickstart" }, - next: { href: "/docs/components/cdr-provider", label: "CdrProvider" }, - }} - /> - ); -} diff --git a/apps/site/content/docs/agent-kit/agentkit.mdx b/apps/site/content/docs/agent-kit/agentkit.mdx index cf3d5e4..e2c39a1 100644 --- a/apps/site/content/docs/agent-kit/agentkit.mdx +++ b/apps/site/content/docs/agent-kit/agentkit.mdx @@ -3,4 +3,4 @@ title: Coinbase AgentKit adapter description: getCdrActionProvider for AgentKit. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/agent-kit/goat.mdx b/apps/site/content/docs/agent-kit/goat.mdx index 0c9493d..bd008c0 100644 --- a/apps/site/content/docs/agent-kit/goat.mdx +++ b/apps/site/content/docs/agent-kit/goat.mdx @@ -3,4 +3,4 @@ title: GOAT SDK adapter description: GOAT plugin wiring. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/agent-kit/index.mdx b/apps/site/content/docs/agent-kit/index.mdx index 5c975d4..ca34ffd 100644 --- a/apps/site/content/docs/agent-kit/index.mdx +++ b/apps/site/content/docs/agent-kit/index.mdx @@ -3,4 +3,4 @@ title: CdrAgent description: Autonomous agent surface for CDR operations. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/agent-kit/langchain.mdx b/apps/site/content/docs/agent-kit/langchain.mdx index 61d51bf..61d80d7 100644 --- a/apps/site/content/docs/agent-kit/langchain.mdx +++ b/apps/site/content/docs/agent-kit/langchain.mdx @@ -3,4 +3,4 @@ title: LangChain adapter description: createReactAgent integration. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/agent-kit/mcp.mdx b/apps/site/content/docs/agent-kit/mcp.mdx index 784b16a..f0857b7 100644 --- a/apps/site/content/docs/agent-kit/mcp.mdx +++ b/apps/site/content/docs/agent-kit/mcp.mdx @@ -3,4 +3,4 @@ title: MCP server description: stdio MCP server for Claude Desktop and friends. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/agent-kit/openai.mdx b/apps/site/content/docs/agent-kit/openai.mdx index 9367c68..0429aca 100644 --- a/apps/site/content/docs/agent-kit/openai.mdx +++ b/apps/site/content/docs/agent-kit/openai.mdx @@ -3,4 +3,4 @@ title: OpenAI / Anthropic adapter description: Tool-call loop for OpenAI/Anthropic. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/agent-kit/vercel-ai.mdx b/apps/site/content/docs/agent-kit/vercel-ai.mdx index be49f18..d4aa0ef 100644 --- a/apps/site/content/docs/agent-kit/vercel-ai.mdx +++ b/apps/site/content/docs/agent-kit/vercel-ai.mdx @@ -3,4 +3,4 @@ title: Vercel AI SDK adapter description: getVercelAITools for the AI SDK. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/cli.mdx b/apps/site/content/docs/cli.mdx index ebc81cb..e34b027 100644 --- a/apps/site/content/docs/cli.mdx +++ b/apps/site/content/docs/cli.mdx @@ -3,4 +3,4 @@ title: cdr CLI description: Command-line interface for vault and Story IP operations. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/components/access-stepper.mdx b/apps/site/content/docs/components/access-stepper.mdx index 37c6565..80ee29f 100644 --- a/apps/site/content/docs/components/access-stepper.mdx +++ b/apps/site/content/docs/components/access-stepper.mdx @@ -3,4 +3,4 @@ title: AccessStepper description: pay → collect-partials → decrypt ordered stepper. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/components/cdr-error.mdx b/apps/site/content/docs/components/cdr-error.mdx index c61f01a..206734f 100644 --- a/apps/site/content/docs/components/cdr-error.mdx +++ b/apps/site/content/docs/components/cdr-error.mdx @@ -3,4 +3,4 @@ title: CdrError description: Soft-bordered danger alert with optional retry. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/components/cdr-inspector.mdx b/apps/site/content/docs/components/cdr-inspector.mdx index 7139184..a7e23dc 100644 --- a/apps/site/content/docs/components/cdr-inspector.mdx +++ b/apps/site/content/docs/components/cdr-inspector.mdx @@ -3,4 +3,4 @@ title: CdrInspector description: Dev panel showing mock|live mode, WASM and API status. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/components/cdr-network-chip.mdx b/apps/site/content/docs/components/cdr-network-chip.mdx index 566844e..3ff8ab1 100644 --- a/apps/site/content/docs/components/cdr-network-chip.mdx +++ b/apps/site/content/docs/components/cdr-network-chip.mdx @@ -3,4 +3,4 @@ title: CdrNetworkChip description: Pulsing dot showing live or mock network state. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/components/cdr-progress.mdx b/apps/site/content/docs/components/cdr-progress.mdx index 836443d..e55a5ab 100644 --- a/apps/site/content/docs/components/cdr-progress.mdx +++ b/apps/site/content/docs/components/cdr-progress.mdx @@ -3,4 +3,4 @@ title: CdrProgress description: 6px gradient progress bar. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/components/cdr-provider.mdx b/apps/site/content/docs/components/cdr-provider.mdx index 1a60b66..b45e6d9 100644 --- a/apps/site/content/docs/components/cdr-provider.mdx +++ b/apps/site/content/docs/components/cdr-provider.mdx @@ -3,4 +3,4 @@ title: CdrProvider description: Top-level provider wiring wagmi + react-query + CDR config. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/components/cdr-skeleton.mdx b/apps/site/content/docs/components/cdr-skeleton.mdx index 3289949..2415c9c 100644 --- a/apps/site/content/docs/components/cdr-skeleton.mdx +++ b/apps/site/content/docs/components/cdr-skeleton.mdx @@ -3,4 +3,4 @@ title: CdrSkeleton description: Loading placeholder driven by --cdr-skeleton CSS variable. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/components/cdr-spinner.mdx b/apps/site/content/docs/components/cdr-spinner.mdx index 66168a9..e9ed263 100644 --- a/apps/site/content/docs/components/cdr-spinner.mdx +++ b/apps/site/content/docs/components/cdr-spinner.mdx @@ -3,4 +3,4 @@ title: CdrSpinner description: 18px rotating border spinner. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/components/condition-badge.mdx b/apps/site/content/docs/components/condition-badge.mdx index 6a05412..5b05b81 100644 --- a/apps/site/content/docs/components/condition-badge.mdx +++ b/apps/site/content/docs/components/condition-badge.mdx @@ -3,4 +3,4 @@ title: ConditionBadge description: Pill for subscription / tiergate / composable / open conditions. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/components/copy-button.mdx b/apps/site/content/docs/components/copy-button.mdx index 5322c99..18803d7 100644 --- a/apps/site/content/docs/components/copy-button.mdx +++ b/apps/site/content/docs/components/copy-button.mdx @@ -3,4 +3,4 @@ title: CopyButton description: Minimal copy-to-clipboard button. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/components/empty-vaults.mdx b/apps/site/content/docs/components/empty-vaults.mdx index 231dfc6..99bd48c 100644 --- a/apps/site/content/docs/components/empty-vaults.mdx +++ b/apps/site/content/docs/components/empty-vaults.mdx @@ -3,4 +3,4 @@ title: EmptyVaults description: Empty-state hook for vault lists. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/components/escrow-delivery-confirm.mdx b/apps/site/content/docs/components/escrow-delivery-confirm.mdx index c2579e6..552f8ea 100644 --- a/apps/site/content/docs/components/escrow-delivery-confirm.mdx +++ b/apps/site/content/docs/components/escrow-delivery-confirm.mdx @@ -3,4 +3,4 @@ title: EscrowDeliveryConfirm description: Buyer/seller pay + confirm-delivery flow. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/components/explorer-link.mdx b/apps/site/content/docs/components/explorer-link.mdx index 381b7a9..0b82999 100644 --- a/apps/site/content/docs/components/explorer-link.mdx +++ b/apps/site/content/docs/components/explorer-link.mdx @@ -3,4 +3,4 @@ title: ExplorerLink description: Mono primary link with external-link icon. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/components/heartbeat-timer.mdx b/apps/site/content/docs/components/heartbeat-timer.mdx index 834e84b..01210f0 100644 --- a/apps/site/content/docs/components/heartbeat-timer.mdx +++ b/apps/site/content/docs/components/heartbeat-timer.mdx @@ -3,4 +3,4 @@ title: HeartbeatTimer description: Dead-man countdown + extend-now poke button. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/components/index.mdx b/apps/site/content/docs/components/index.mdx index f95d663..35dc9a0 100644 --- a/apps/site/content/docs/components/index.mdx +++ b/apps/site/content/docs/components/index.mdx @@ -3,4 +3,4 @@ title: Components description: Headless + styled component library for CDR. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/components/ip-price.mdx b/apps/site/content/docs/components/ip-price.mdx index 2a63680..38a0cb6 100644 --- a/apps/site/content/docs/components/ip-price.mdx +++ b/apps/site/content/docs/components/ip-price.mdx @@ -3,4 +3,4 @@ title: IpPrice description: Formats wei → IP, renders License-gated for null. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/components/multi-sig-approval-tracker.mdx b/apps/site/content/docs/components/multi-sig-approval-tracker.mdx index dc49693..b0fb6d3 100644 --- a/apps/site/content/docs/components/multi-sig-approval-tracker.mdx +++ b/apps/site/content/docs/components/multi-sig-approval-tracker.mdx @@ -3,4 +3,4 @@ title: MultiSigApprovalTracker description: Tracks on-chain + off-chain multi-sig approvals. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/components/multi-sig-signer.mdx b/apps/site/content/docs/components/multi-sig-signer.mdx index 15c2ae7..88c0478 100644 --- a/apps/site/content/docs/components/multi-sig-signer.mdx +++ b/apps/site/content/docs/components/multi-sig-signer.mdx @@ -3,4 +3,4 @@ title: MultiSigSigner description: EIP-712 signer for multi-sig vault approvals. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/components/short-address.mdx b/apps/site/content/docs/components/short-address.mdx index 0b65f01..00ddb55 100644 --- a/apps/site/content/docs/components/short-address.mdx +++ b/apps/site/content/docs/components/short-address.mdx @@ -3,4 +3,4 @@ title: ShortAddress description: Truncated mono address chip with copy. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/components/subscribe-button.mdx b/apps/site/content/docs/components/subscribe-button.mdx index 940ccf8..773a5f8 100644 --- a/apps/site/content/docs/components/subscribe-button.mdx +++ b/apps/site/content/docs/components/subscribe-button.mdx @@ -3,4 +3,4 @@ title: SubscribeButton description: Batteries-included CTA wrapping useSubscribeAndAccess. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/components/time-window-badge.mdx b/apps/site/content/docs/components/time-window-badge.mdx index 1d409af..2b57605 100644 --- a/apps/site/content/docs/components/time-window-badge.mdx +++ b/apps/site/content/docs/components/time-window-badge.mdx @@ -3,4 +3,4 @@ title: TimeWindowBadge description: Open/upcoming/closed indicator for time-window vaults. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/components/unlockable.mdx b/apps/site/content/docs/components/unlockable.mdx index 1e63b11..6e755bd 100644 --- a/apps/site/content/docs/components/unlockable.mdx +++ b/apps/site/content/docs/components/unlockable.mdx @@ -3,4 +3,4 @@ title: UnlockablePill description: Inline pill paywall with floating popover. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/components/vault-card.mdx b/apps/site/content/docs/components/vault-card.mdx index 0f3dadf..4d31b47 100644 --- a/apps/site/content/docs/components/vault-card.mdx +++ b/apps/site/content/docs/components/vault-card.mdx @@ -3,4 +3,4 @@ title: VaultCard description: Marketplace card with mouse-tracking gradient. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/components/vault-gate.mdx b/apps/site/content/docs/components/vault-gate.mdx index 99956af..908c94e 100644 --- a/apps/site/content/docs/components/vault-gate.mdx +++ b/apps/site/content/docs/components/vault-gate.mdx @@ -3,4 +3,4 @@ title: VaultGate description: Headless gate that renders children when a vault is unlocked. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/components/vault.mdx b/apps/site/content/docs/components/vault.mdx index 73c19df..24b98c6 100644 --- a/apps/site/content/docs/components/vault.mdx +++ b/apps/site/content/docs/components/vault.mdx @@ -3,4 +3,4 @@ title: Vault description: Compound component with Unlocked/Locked/Loading slots. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/contracts/cdr-kit-vault.mdx b/apps/site/content/docs/contracts/cdr-kit-vault.mdx index 07c0653..2b1a079 100644 --- a/apps/site/content/docs/contracts/cdr-kit-vault.mdx +++ b/apps/site/content/docs/contracts/cdr-kit-vault.mdx @@ -3,4 +3,4 @@ title: CdrKitVault description: Factory contract that allocates + configures vaults atomically. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/contracts/composable-condition.mdx b/apps/site/content/docs/contracts/composable-condition.mdx index 82bfc2c..332afc2 100644 --- a/apps/site/content/docs/contracts/composable-condition.mdx +++ b/apps/site/content/docs/contracts/composable-condition.mdx @@ -3,4 +3,4 @@ title: ComposableCondition description: Composable AND/OR combinator. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/contracts/conditional-escrow-condition.mdx b/apps/site/content/docs/contracts/conditional-escrow-condition.mdx index 6145d6a..1c4dc67 100644 --- a/apps/site/content/docs/contracts/conditional-escrow-condition.mdx +++ b/apps/site/content/docs/contracts/conditional-escrow-condition.mdx @@ -3,4 +3,4 @@ title: ConditionalEscrowCondition description: Escrow with delivery confirmation. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/contracts/creator-write-condition.mdx b/apps/site/content/docs/contracts/creator-write-condition.mdx index c70c482..d48ca2f 100644 --- a/apps/site/content/docs/contracts/creator-write-condition.mdx +++ b/apps/site/content/docs/contracts/creator-write-condition.mdx @@ -3,4 +3,4 @@ title: CreatorWriteCondition description: Only creator can write. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/contracts/dead-man-switch-condition.mdx b/apps/site/content/docs/contracts/dead-man-switch-condition.mdx index a2f2c70..6fdeff3 100644 --- a/apps/site/content/docs/contracts/dead-man-switch-condition.mdx +++ b/apps/site/content/docs/contracts/dead-man-switch-condition.mdx @@ -3,4 +3,4 @@ title: DeadManSwitchCondition description: Dead-man switch with creator poke. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/contracts/index.mdx b/apps/site/content/docs/contracts/index.mdx index 676469b..af5eb1f 100644 --- a/apps/site/content/docs/contracts/index.mdx +++ b/apps/site/content/docs/contracts/index.mdx @@ -3,4 +3,4 @@ title: Condition library description: 9 deployed condition contracts on Aeneid. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/contracts/multi-sig-condition.mdx b/apps/site/content/docs/contracts/multi-sig-condition.mdx index 342267f..9cbe163 100644 --- a/apps/site/content/docs/contracts/multi-sig-condition.mdx +++ b/apps/site/content/docs/contracts/multi-sig-condition.mdx @@ -3,4 +3,4 @@ title: MultiSigCondition description: Multi-sig with on-chain + EIP-712 paths. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/contracts/open-condition.mdx b/apps/site/content/docs/contracts/open-condition.mdx index d2160e4..bde8fd6 100644 --- a/apps/site/content/docs/contracts/open-condition.mdx +++ b/apps/site/content/docs/contracts/open-condition.mdx @@ -3,4 +3,4 @@ title: OpenCondition description: Always-allows read condition. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/contracts/subscription-condition.mdx b/apps/site/content/docs/contracts/subscription-condition.mdx index 288e38d..bfa5053 100644 --- a/apps/site/content/docs/contracts/subscription-condition.mdx +++ b/apps/site/content/docs/contracts/subscription-condition.mdx @@ -3,4 +3,4 @@ title: SubscriptionCondition description: Pay-per-period access condition. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/contracts/tier-gate-condition.mdx b/apps/site/content/docs/contracts/tier-gate-condition.mdx index 14dada9..c90d8d0 100644 --- a/apps/site/content/docs/contracts/tier-gate-condition.mdx +++ b/apps/site/content/docs/contracts/tier-gate-condition.mdx @@ -3,4 +3,4 @@ title: TierGateCondition description: Tier-gated access condition. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/contracts/time-window-condition.mdx b/apps/site/content/docs/contracts/time-window-condition.mdx index 6ce0f23..e28768b 100644 --- a/apps/site/content/docs/contracts/time-window-condition.mdx +++ b/apps/site/content/docs/contracts/time-window-condition.mdx @@ -3,4 +3,4 @@ title: TimeWindowCondition description: Time-windowed access condition. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/hooks/use-access-vault.mdx b/apps/site/content/docs/hooks/use-access-vault.mdx index 92aa29d..63b7f39 100644 --- a/apps/site/content/docs/hooks/use-access-vault.mdx +++ b/apps/site/content/docs/hooks/use-access-vault.mdx @@ -3,4 +3,4 @@ title: useAccessVault description: Read + decrypt a CDR vault. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/hooks/use-attach-license-terms.mdx b/apps/site/content/docs/hooks/use-attach-license-terms.mdx index 0a2a5a3..6806089 100644 --- a/apps/site/content/docs/hooks/use-attach-license-terms.mdx +++ b/apps/site/content/docs/hooks/use-attach-license-terms.mdx @@ -3,4 +3,4 @@ title: useAttachLicenseTerms description: Attach PIL terms to an IP asset. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/hooks/use-cdr-wallet.mdx b/apps/site/content/docs/hooks/use-cdr-wallet.mdx index e665bea..a9ff07d 100644 --- a/apps/site/content/docs/hooks/use-cdr-wallet.mdx +++ b/apps/site/content/docs/hooks/use-cdr-wallet.mdx @@ -3,4 +3,4 @@ title: useCdrWallet description: Thin wagmi wrapper for connect/disconnect. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/hooks/use-create-vault.mdx b/apps/site/content/docs/hooks/use-create-vault.mdx index 4fdba79..f506fd4 100644 --- a/apps/site/content/docs/hooks/use-create-vault.mdx +++ b/apps/site/content/docs/hooks/use-create-vault.mdx @@ -3,4 +3,4 @@ title: useCreateVault description: Create a new CDR vault via the factory. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/hooks/use-creator-vaults.mdx b/apps/site/content/docs/hooks/use-creator-vaults.mdx index 158751a..2d48b9e 100644 --- a/apps/site/content/docs/hooks/use-creator-vaults.mdx +++ b/apps/site/content/docs/hooks/use-creator-vaults.mdx @@ -3,4 +3,4 @@ title: useCreatorVaults description: List vaults created by an address. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/hooks/use-dead-man-timer.mdx b/apps/site/content/docs/hooks/use-dead-man-timer.mdx index 128580c..e8f24df 100644 --- a/apps/site/content/docs/hooks/use-dead-man-timer.mdx +++ b/apps/site/content/docs/hooks/use-dead-man-timer.mdx @@ -3,4 +3,4 @@ title: useDeadManTimer description: Countdown + poke for DeadManSwitchCondition. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/hooks/use-discover-vaults.mdx b/apps/site/content/docs/hooks/use-discover-vaults.mdx index 94c6458..54e3b56 100644 --- a/apps/site/content/docs/hooks/use-discover-vaults.mdx +++ b/apps/site/content/docs/hooks/use-discover-vaults.mdx @@ -3,4 +3,4 @@ title: useDiscoverVaults description: Paginated VaultCreated event scan. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/hooks/use-escrow-state.mdx b/apps/site/content/docs/hooks/use-escrow-state.mdx index 513963c..b61218f 100644 --- a/apps/site/content/docs/hooks/use-escrow-state.mdx +++ b/apps/site/content/docs/hooks/use-escrow-state.mdx @@ -3,4 +3,4 @@ title: useEscrowState description: Buyer/seller state for ConditionalEscrowCondition. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/hooks/use-mint-license-token.mdx b/apps/site/content/docs/hooks/use-mint-license-token.mdx index 2b4b48c..d3e4b6a 100644 --- a/apps/site/content/docs/hooks/use-mint-license-token.mdx +++ b/apps/site/content/docs/hooks/use-mint-license-token.mdx @@ -3,4 +3,4 @@ title: useMintLicenseToken description: Mint Story license tokens. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/hooks/use-multi-sig-status.mdx b/apps/site/content/docs/hooks/use-multi-sig-status.mdx index bfa253b..38a0b02 100644 --- a/apps/site/content/docs/hooks/use-multi-sig-status.mdx +++ b/apps/site/content/docs/hooks/use-multi-sig-status.mdx @@ -3,4 +3,4 @@ title: useMultiSigStatus description: Polling status for MultiSigCondition. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/hooks/use-publish.mdx b/apps/site/content/docs/hooks/use-publish.mdx index 1d2bb0d..3317359 100644 --- a/apps/site/content/docs/hooks/use-publish.mdx +++ b/apps/site/content/docs/hooks/use-publish.mdx @@ -3,4 +3,4 @@ title: usePublish description: One-shot register + attach + vault + write secret. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/hooks/use-register-ip.mdx b/apps/site/content/docs/hooks/use-register-ip.mdx index 0c9e60d..98d11b6 100644 --- a/apps/site/content/docs/hooks/use-register-ip.mdx +++ b/apps/site/content/docs/hooks/use-register-ip.mdx @@ -3,4 +3,4 @@ title: useRegisterIp description: Mint + register IP asset via Story SPG. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/hooks/use-storage-backend.mdx b/apps/site/content/docs/hooks/use-storage-backend.mdx index 5b09038..889a50e 100644 --- a/apps/site/content/docs/hooks/use-storage-backend.mdx +++ b/apps/site/content/docs/hooks/use-storage-backend.mdx @@ -3,4 +3,4 @@ title: useStorageBackend description: Factory hook for storage providers. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/hooks/use-story-client.mdx b/apps/site/content/docs/hooks/use-story-client.mdx index 37e6fd4..08e5c76 100644 --- a/apps/site/content/docs/hooks/use-story-client.mdx +++ b/apps/site/content/docs/hooks/use-story-client.mdx @@ -3,4 +3,4 @@ title: useStoryClient description: Lazy-loaded Story SDK client bound to wagmi wallet. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/hooks/use-subscribe-and-access.mdx b/apps/site/content/docs/hooks/use-subscribe-and-access.mdx index 90fe200..e1d7f49 100644 --- a/apps/site/content/docs/hooks/use-subscribe-and-access.mdx +++ b/apps/site/content/docs/hooks/use-subscribe-and-access.mdx @@ -3,4 +3,4 @@ title: useSubscribeAndAccess description: Full subscribe → access two-step flow. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/hooks/use-time-window-state.mdx b/apps/site/content/docs/hooks/use-time-window-state.mdx index d091c57..a120305 100644 --- a/apps/site/content/docs/hooks/use-time-window-state.mdx +++ b/apps/site/content/docs/hooks/use-time-window-state.mdx @@ -3,4 +3,4 @@ title: useTimeWindowState description: Real-time TimeWindowCondition status. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/hooks/use-vault-events.mdx b/apps/site/content/docs/hooks/use-vault-events.mdx index 522c924..d52a1c3 100644 --- a/apps/site/content/docs/hooks/use-vault-events.mdx +++ b/apps/site/content/docs/hooks/use-vault-events.mdx @@ -3,4 +3,4 @@ title: useVaultEvents description: Live VaultCreated event feed. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/hooks/use-vault.mdx b/apps/site/content/docs/hooks/use-vault.mdx index 70ba760..3a97baa 100644 --- a/apps/site/content/docs/hooks/use-vault.mdx +++ b/apps/site/content/docs/hooks/use-vault.mdx @@ -3,4 +3,4 @@ title: useVault description: Read vault info from factory by uuid. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/index.mdx b/apps/site/content/docs/index.mdx index c04239f..761ec05 100644 --- a/apps/site/content/docs/index.mdx +++ b/apps/site/content/docs/index.mdx @@ -3,4 +3,4 @@ title: Introduction description: Developer toolkit for Story Protocol's Confidential Data Rails. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/quickstart.mdx b/apps/site/content/docs/quickstart.mdx index dba0663..dd8ebc5 100644 --- a/apps/site/content/docs/quickstart.mdx +++ b/apps/site/content/docs/quickstart.mdx @@ -3,4 +3,4 @@ title: Quickstart description: Ship private, paid, license-gated data on Story in under 60 seconds. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/scaffolder.mdx b/apps/site/content/docs/scaffolder.mdx index a7183a8..c303713 100644 --- a/apps/site/content/docs/scaffolder.mdx +++ b/apps/site/content/docs/scaffolder.mdx @@ -3,4 +3,4 @@ title: create-cdr-kit-app description: Scaffold a working CDR app in one command. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/skill.mdx b/apps/site/content/docs/skill.mdx index 09a35d8..7a263be 100644 --- a/apps/site/content/docs/skill.mdx +++ b/apps/site/content/docs/skill.mdx @@ -3,4 +3,4 @@ title: Claude Code plugin description: Multi-skill Claude Code plugin for cdr-kit operations. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/storage.mdx b/apps/site/content/docs/storage.mdx index 976835e..5b0e65f 100644 --- a/apps/site/content/docs/storage.mdx +++ b/apps/site/content/docs/storage.mdx @@ -3,4 +3,4 @@ title: Storage adapters description: S3, Storacha, Helia, Pinata, Supabase — drop-in storage providers. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/story.mdx b/apps/site/content/docs/story.mdx index 7f9f83f..507ca82 100644 --- a/apps/site/content/docs/story.mdx +++ b/apps/site/content/docs/story.mdx @@ -3,4 +3,4 @@ title: Story IP description: Register, license, and gate IP assets via @cdr-kit/story. --- - +{/* Placeholder. Full content migration in T1-E. */} diff --git a/apps/site/content/docs/theming.mdx b/apps/site/content/docs/theming.mdx index 25651c8..c5eeaf6 100644 --- a/apps/site/content/docs/theming.mdx +++ b/apps/site/content/docs/theming.mdx @@ -3,4 +3,4 @@ title: Theming description: Customize cdr-kit's design tokens to match your brand. --- - +{/* Placeholder. Full content migration in T1-E. */} From 498b33f89cacafca55d8e4e2e2eafedce9ad09d3 Mon Sep 17 00:00:00 2001 From: Blockchain-Oracle Date: Wed, 3 Jun 2026 08:53:19 +0100 Subject: [PATCH 05/23] =?UTF-8?q?feat(create-cdr-kit-app):=20T3=20?= =?UTF-8?q?=E2=80=94=20remove=20all=20mock,=20premium=20dark=20templates,?= =?UTF-8?q?=20data-marketplace=20flagship?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Generated apps now wire real Aeneid testnet from the first render. Zero mock. When a visitor has no wallet, the cdr-kit components render their own connect prompts; once they connect, every flow runs on chain. Templates updated: - blog: dark editorial layout, gradient hero title, sticky header with CdrNetworkChip + RainbowKit ConnectButton, two real Aeneid vault UUIDs (4200, 4201) seeded as inline UnlockablePill examples - paywall: dark premium card with radial-gradient backdrop, ConditionBadge + IpPrice header strip, SubscribeButton on real vault 4200 - starter: rewired to use @cdr-kit/agent against Aeneid with a WALLET_PRIVATE_KEY env (the user has to fund a wallet — no mock shortcut) - data-marketplace (NEW, flagship): dark hero + useDiscoverVaults grid of VaultCards + SubscribeButton per card. Replaces 'starter' as the obvious thing to demo to judges. Shared bits factored into templates/shared.ts: providers.tsx with wagmi+RainbowKit+CdrConfigProvider, package deps, tsconfig, .gitignore, .env.local.example, theme-init script. CDR_VERSION bumped to ^0.7.0 to align with the 0.7.0 release. Help-list column widened to fit data-marketplace (20-char pad). Verified: - pnpm build succeeds - node dist/index.mjs /tmp/x --template data-marketplace produces a tree with zero mock references (grep -r createMockCdrKit returns nothing) - Generated providers.tsx renders with clean indentation forms template (T3-C) is queued and will be added once @cdr-kit/forms (T4 — building in a worktree subagent) is ready. Co-Authored-By: Claude Opus 4.7 (1M context) --- packages/create-cdr-kit-app/src/index.ts | 6 +- .../create-cdr-kit-app/src/templates/blog.ts | 245 ++++++++------- .../src/templates/data-marketplace.ts | 295 ++++++++++++++++++ .../create-cdr-kit-app/src/templates/index.ts | 8 +- .../src/templates/paywall.ts | 245 ++++++++++----- .../src/templates/shared.ts | 114 +++++++ .../src/templates/starter.ts | 83 ++++- .../create-cdr-kit-app/src/templates/types.ts | 4 +- 8 files changed, 801 insertions(+), 199 deletions(-) create mode 100644 packages/create-cdr-kit-app/src/templates/data-marketplace.ts create mode 100644 packages/create-cdr-kit-app/src/templates/shared.ts diff --git a/packages/create-cdr-kit-app/src/index.ts b/packages/create-cdr-kit-app/src/index.ts index b9ec3ba..c9ad70e 100644 --- a/packages/create-cdr-kit-app/src/index.ts +++ b/packages/create-cdr-kit-app/src/index.ts @@ -7,6 +7,8 @@ const KNOWN_TEMPLATES: TemplateName[] = [ "starter", "blog", "paywall", + "data-marketplace", + "forms", "mcp-server", "agent-vercel-ai", "agent-openai", @@ -49,8 +51,8 @@ function parseArgs(argv: string[]): { target?: string; template: TemplateName; h } function printHelp(): void { - process.stdout.write("usage: create-cdr-kit-app [--template starter|blog]\n\ntemplates:\n"); - for (const t of listTemplates()) process.stdout.write(` ${t.name.padEnd(8)} ${t.description}\n`); + process.stdout.write("usage: create-cdr-kit-app [--template ]\n\ntemplates:\n"); + for (const t of listTemplates()) process.stdout.write(` ${t.name.padEnd(20)} ${t.description}\n`); } // CLI entry (skipped when imported, e.g. by tests). diff --git a/packages/create-cdr-kit-app/src/templates/blog.ts b/packages/create-cdr-kit-app/src/templates/blog.ts index 98bab1b..23c64b6 100644 --- a/packages/create-cdr-kit-app/src/templates/blog.ts +++ b/packages/create-cdr-kit-app/src/templates/blog.ts @@ -1,9 +1,25 @@ import { dedent } from "../util.js"; -import { CDR_VERSION, type Template } from "./types.js"; +import { + ENV_LOCAL_EXAMPLE, + GITIGNORE, + NEXT_CONFIG_TS, + NEXT_ENV_DTS, + PROVIDERS_TSX, + SHARED_DEPS, + SHARED_DEV_DEPS, + THEME_INIT_SCRIPT, + TSCONFIG_JSON, +} from "./shared.js"; +import type { Template } from "./types.js"; +/** + * Premium blog template — inline paywalls over a dark editorial layout. + * Real Aeneid integration from the first render. No mock. Connect a wallet to interact. + */ export const BLOG: Template = { name: "blog", - description: "Next.js 16 blog with inline paywalls. Mock-CDR out of the box; swap one provider to go live.", + description: + "Next.js 16 editorial blog with inline paywalls — real Aeneid integration, dark premium design.", postInstall: ["pnpm install", "pnpm dev # http://localhost:3000"], files: [ { @@ -13,108 +29,77 @@ export const BLOG: Template = { name: "cdr-kit-blog", private: true, version: "0.0.1", - scripts: { dev: "next dev", build: "next build", start: "next start", lint: "next lint" }, - dependencies: { - "@cdr-kit/contracts": CDR_VERSION, - "@cdr-kit/core": CDR_VERSION, - "@cdr-kit/react": CDR_VERSION, - "@cdr-kit/react-ui": CDR_VERSION, - "@tanstack/react-query": "^5.62.0", - next: "^16.2.6", - react: "^19.2.0", - "react-dom": "^19.2.0", - viem: "^2.51.3", - wagmi: "^2.14.0", - }, - devDependencies: { - "@types/node": "^20", - "@types/react": "^19", - "@types/react-dom": "^19", - typescript: "^5.7.2", + scripts: { + dev: "next dev", + build: "next build", + start: "next start", + lint: "next lint", + "upload:sample": "tsx scripts/upload.ts", }, + dependencies: SHARED_DEPS, + devDependencies: { ...SHARED_DEV_DEPS, tsx: "^4.19.2" }, }, null, 2, ), }, - { - path: "tsconfig.json", - content: JSON.stringify( - { - compilerOptions: { - target: "ES2022", - lib: ["dom", "dom.iterable", "esnext"], - module: "esnext", - moduleResolution: "bundler", - jsx: "preserve", - strict: true, - esModuleInterop: true, - skipLibCheck: true, - isolatedModules: true, - noEmit: true, - incremental: true, - resolveJsonModule: true, - allowJs: true, - plugins: [{ name: "next" }], - paths: { "@/*": ["./*"] }, - }, - include: ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], - exclude: ["node_modules"], - }, - null, - 2, - ), - }, - { path: "next.config.ts", content: "export default { reactStrictMode: true };\n" }, - { path: "next-env.d.ts", content: '/// \n/// \n' }, + { path: "tsconfig.json", content: TSCONFIG_JSON }, + { path: "next.config.ts", content: NEXT_CONFIG_TS }, + { path: "next-env.d.ts", content: NEXT_ENV_DTS }, { path: "app/layout.tsx", content: dedent(` import type { ReactNode } from "react"; import { Providers } from "./providers"; + import { SiteHeader } from "./header"; import "@cdr-kit/react-ui/styles.css"; import "./globals.css"; export const metadata = { title: "cdr-kit blog — pay-to-unlock prose", - description: "Inline paywalls powered by Story Confidential Data Rails.", + description: "Inline paywalls powered by Story Confidential Data Rails (real Aeneid testnet).", }; export default function RootLayout({ children }: { children: ReactNode }) { return ( - + + + ${THEME_INIT_SCRIPT} + - {children} + + +
{children}
+
); } `), }, + { path: "app/providers.tsx", content: PROVIDERS_TSX }, { - path: "app/providers.tsx", + path: "app/header.tsx", content: dedent(` "use client"; - import { useMemo, type ReactNode } from "react"; - import { CdrProvider } from "@cdr-kit/react"; - import { createMockCdrKit } from "@cdr-kit/core"; + import { ConnectButton } from "@rainbow-me/rainbowkit"; + import { CdrNetworkChip } from "@cdr-kit/react-ui"; - /** Mock CDR provider — every on the page runs the full - * subscribe → threshold-read → decrypt flow against in-memory bytes. - * Swap mockKit for { config, apiUrl } to go live on Aeneid. */ - export function Providers({ children }: { children: ReactNode }) { - const kit = useMemo(() => { - const k = createMockCdrKit({ readDelayMs: 2200, threshold: 7 }); - void k.writeVaultData({ uuid: 4242, dataKey: new TextEncoder().encode( - "Exhibit 14B — sheriff's report excerpt:\\n\\n\\"At 7:42pm the suspect was observed exiting via the boat-house door, not the main path as the witness initially stated.\\"", - ) }); - void k.writeVaultData({ uuid: 4243, dataKey: new TextEncoder().encode( - "The shadow on the dock wasn't her sister.\\n\\nArlo had paid Mrs. Calder twenty dollars to keep the negative — she'd developed it in her own basement that summer.", - ) }); - return k; - }, []); - return {children}; + /** Top bar with the network chip + RainbowKit connect button. */ + export function SiteHeader() { + return ( +
+
+ + cdr-kit blog +
+
+ + +
+
+ ); } `), }, @@ -123,6 +108,11 @@ export const BLOG: Template = { content: dedent(` import { UnlockablePill } from "@cdr-kit/react-ui"; + /** Real Aeneid vault IDs (deployed via the cdr-kit factory at 0xac592f…). + * Swap these for your own after running scripts/upload.ts. */ + const VAULT_EXHIBIT = 4200; + const VAULT_CHAPTER = 4201; + export default function HomePage() { return (
@@ -134,7 +124,7 @@ export const BLOG: Template = {

Arlo Vance told the press he was alone in Tahoe to write. But{" "} - + the woman beside him on the dock {" "} disagrees — and the timeline in the official record doesn't add up. @@ -142,11 +132,17 @@ export const BLOG: Template = {

What follows is the part the estate fought to suppress —{" "} - + the closing chapter from Arlo's lost notebook {" "} — written in his own hand the morning after.

+ +

+ Click either inline pill above to run the real subscribe → threshold-read → decrypt flow on Aeneid. + You'll need a wallet connected with a small amount of testnet IP (free from{" "} + the faucet). +

); } @@ -155,21 +151,61 @@ export const BLOG: Template = { { path: "app/globals.css", content: dedent(` - :root { color-scheme: light dark; } + :root { color-scheme: dark light; } * { box-sizing: border-box; } + html { background: var(--cdr-ui-bg, oklch(13% 0.012 90)); } body { - margin: 0; font-family: ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif; - background: #fafafa; color: #1a1614; + margin: 0; + font-family: var(--cdr-ui-font-sans, ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif); + background: var(--cdr-ui-bg, oklch(13% 0.012 90)); + color: var(--cdr-ui-fg, oklch(94% 0.01 90)); -webkit-font-smoothing: antialiased; } - .post { max-width: 680px; margin: 0 auto; padding: 64px 24px 96px; } - .post .eyebrow { font-family: ui-monospace, monospace; font-size: 0.72rem; color: #d9952e; letter-spacing: 0.06em; text-transform: uppercase; margin: 0 0 12px; } - .post h1 { font-size: clamp(2.1rem, 4.4vw, 3rem); font-weight: 800; letter-spacing: -0.025em; line-height: 1.1; margin: 0 0 14px; } - .post .byline { font-family: ui-monospace, monospace; font-size: 0.78rem; color: #777; margin: 0 0 36px; } - .post p { font-size: 1.08rem; line-height: 1.72; color: #2c2825; margin: 0 0 22px; } - @media (prefers-color-scheme: dark) { - body { background: #15110f; color: #fafafa; } - .post p { color: #d4cfc9; } + a { color: var(--cdr-ui-primary, oklch(78% 0.16 70)); text-decoration: none; } + a:hover { text-decoration: underline; } + + .site-header { + display: flex; align-items: center; justify-content: space-between; + padding: 18px 28px; + border-bottom: 1px solid var(--cdr-ui-border, oklch(22% 0.012 90)); + backdrop-filter: blur(8px); + position: sticky; top: 0; z-index: 10; + background: color-mix(in oklab, var(--cdr-ui-bg) 80%, transparent); + } + .brand { display: flex; align-items: center; gap: 10px; font-weight: 600; letter-spacing: -0.01em; } + .brand-dot { + width: 10px; height: 10px; border-radius: 999px; + background: linear-gradient(135deg, oklch(78% 0.16 70), oklch(72% 0.20 30)); + } + .header-actions { display: flex; align-items: center; gap: 14px; } + + .post { max-width: 720px; margin: 0 auto; padding: 80px 28px 120px; } + .post .eyebrow { + font-family: ui-monospace, monospace; font-size: 0.72rem; + color: var(--cdr-ui-accent, oklch(78% 0.16 70)); + letter-spacing: 0.08em; text-transform: uppercase; margin: 0 0 14px; + } + .post h1 { + font-size: clamp(2.2rem, 4.4vw, 3.4rem); font-weight: 800; + letter-spacing: -0.028em; line-height: 1.08; margin: 0 0 16px; + background: linear-gradient(135deg, var(--cdr-ui-fg, #fafafa) 0%, color-mix(in oklab, var(--cdr-ui-fg) 60%, var(--cdr-ui-primary, oklch(78% 0.16 70))) 100%); + -webkit-background-clip: text; background-clip: text; color: transparent; + } + .post .byline { + font-family: ui-monospace, monospace; font-size: 0.78rem; + color: var(--cdr-ui-muted, oklch(60% 0.01 90)); margin: 0 0 44px; + } + .post p { font-size: 1.12rem; line-height: 1.78; color: var(--cdr-ui-fg, #fafafa); margin: 0 0 22px; opacity: 0.92; } + .post .hint { + margin-top: 56px; padding: 18px 22px; + font-size: 0.92rem; line-height: 1.6; + border: 1px dashed var(--cdr-ui-border, oklch(28% 0.012 90)); + border-radius: 12px; + color: var(--cdr-ui-muted, oklch(60% 0.01 90)); + } + + @media (prefers-color-scheme: light) { + [data-theme="light"] html, [data-theme="light"] body { background: oklch(98% 0.005 90); color: oklch(20% 0.012 90); } } `), }, @@ -204,8 +240,6 @@ export const BLOG: Template = { const client = createCdrKitClient({ apiUrl: "https://aeneid.storyrpc.io", publicClient, walletClient }); const bytes = readFileSync(path); - // Set IPFS_ADD_URL + IPFS_GATEWAY_URL for your pinning service (web3.storage, Pinata, etc.) - // Optionally IPFS_AUTH for an Authorization header. const storage = createIpfsStorage({ addUrl: process.env.IPFS_ADD_URL ?? "https://api.web3.storage/upload", gatewayUrl: process.env.IPFS_GATEWAY_URL ?? "https://w3s.link", @@ -214,7 +248,6 @@ export const BLOG: Template = { const res = await uploadFile(client, { content: bytes, storage, - // default = OpenCondition. For paywall, pass subscriptionCondition + readConditionData. readConditionAddr: aeneid.subscriptionCondition as \`0x\${string}\`, }); console.log("uuid:", res.uuid); @@ -227,38 +260,38 @@ export const BLOG: Template = { content: dedent(` # cdr-kit blog - Inline pay-to-unlock paywalls with Story CDR — the [onscroll.app](https://onscroll.app) pattern. + Inline pay-to-unlock paywalls with Story CDR — the [onscroll.app](https://onscroll.app) pattern, + wired to **real Aeneid testnet** from the first render. No mock layer. \`\`\`bash pnpm install - pnpm dev # http://localhost:3000 — mock mode, no wallet + pnpm dev # http://localhost:3000 \`\`\` + Connect any wallet that supports the Story Aeneid testnet (chain ID 1315). Grab free testnet IP + from . Click an inline pill → real subscribe + decrypt + runs on chain. + ## How it works - Each \`\` is an inline span tied to a CDR vault \`uuid\`. Click it → - a popover opens → "Unlock" runs the full \`subscribe → threshold-read → decrypt\` - flow → the encrypted attachment renders right there. The anchor text stays - plaintext (it's a public teaser); only the **attached payload** is encrypted. + Each \`\` is an inline span tied to a CDR vault \`uuid\`. Click → popover opens → + "Unlock" runs the full subscribe → threshold-read → decrypt flow → encrypted attachment renders. + The anchor text stays plaintext (it's a teaser); only the attached payload is encrypted. - ## Going live on Aeneid + ## Using your own vaults - 1. Get a funded Aeneid testnet wallet. Add \`WALLET_PRIVATE_KEY=0x...\` to \`.env.local\`. - 2. Upload your real file & get its uuid: + 1. Get a funded Aeneid wallet. Set \`WALLET_PRIVATE_KEY=0x...\` in \`.env.local\`. + 2. Upload your file: \`\`\`bash - pnpm tsx scripts/upload.ts ./your-photo.jpg + pnpm upload:sample ./your-photo.jpg # → uuid: 12345 \`\`\` - 3. Replace the \`Providers\` in \`app/providers.tsx\` — drop the \`mockKit\`, wire your - \`wagmi\` config + the Aeneid apiUrl. (Or use \`@cdr-kit/react\`'s \`CdrConfigProvider\` - in a wagmi tree you already maintain.) - 4. Update the \`\` to use the real uuid from step 2. + 3. Replace the \`VAULT_EXHIBIT\` / \`VAULT_CHAPTER\` constants in \`app/page.tsx\`. - See full docs: + Full docs: `), }, - { path: ".gitignore", content: "node_modules\n.next\ndist\n.env\n.env.local\n.env.*.local\n" }, - { path: ".env.local.example", content: "# WALLET_PRIVATE_KEY=0x... # required only when uploading or going live\n" }, + { path: ".gitignore", content: GITIGNORE }, + { path: ".env.local.example", content: ENV_LOCAL_EXAMPLE }, ], }; - diff --git a/packages/create-cdr-kit-app/src/templates/data-marketplace.ts b/packages/create-cdr-kit-app/src/templates/data-marketplace.ts new file mode 100644 index 0000000..f7cbe0a --- /dev/null +++ b/packages/create-cdr-kit-app/src/templates/data-marketplace.ts @@ -0,0 +1,295 @@ +import { dedent } from "../util.js"; +import { + ENV_LOCAL_EXAMPLE, + GITIGNORE, + NEXT_CONFIG_TS, + NEXT_ENV_DTS, + PROVIDERS_TSX, + SHARED_DEPS, + SHARED_DEV_DEPS, + THEME_INIT_SCRIPT, + TSCONFIG_JSON, +} from "./shared.js"; +import type { Template } from "./types.js"; + +/** + * Flagship template: a data marketplace landing dark UI with a discovery grid + * (useDiscoverVaults → VaultCard) and inline SubscribeButton per card. + * Real Aeneid integration. No mock anywhere. The default `create-cdr-kit-app` template. + */ +export const DATA_MARKETPLACE: Template = { + name: "data-marketplace", + description: + "Flagship template — dark hero + live vault discovery grid + SubscribeButton CTAs on Aeneid.", + postInstall: ["pnpm install", "pnpm dev # http://localhost:3000"], + files: [ + { + path: "package.json", + content: JSON.stringify( + { + name: "cdr-kit-marketplace", + private: true, + version: "0.0.1", + scripts: { + dev: "next dev", + build: "next build", + start: "next start", + lint: "next lint", + }, + dependencies: SHARED_DEPS, + devDependencies: SHARED_DEV_DEPS, + }, + null, + 2, + ), + }, + { path: "tsconfig.json", content: TSCONFIG_JSON }, + { path: "next.config.ts", content: NEXT_CONFIG_TS }, + { path: "next-env.d.ts", content: NEXT_ENV_DTS }, + { + path: "app/layout.tsx", + content: dedent(` + import type { ReactNode } from "react"; + import { Providers } from "./providers"; + import { SiteHeader } from "./header"; + import "@cdr-kit/react-ui/styles.css"; + import "./globals.css"; + + export const metadata = { + title: "cdr-kit · data marketplace", + description: "Discover encrypted CDR vaults on Story Aeneid. Subscribe to decrypt.", + }; + + export default function RootLayout({ children }: { children: ReactNode }) { + return ( + + + ${THEME_INIT_SCRIPT} + + + + +
{children}
+
+ + + ); + } + `), + }, + { path: "app/providers.tsx", content: PROVIDERS_TSX }, + { + path: "app/header.tsx", + content: dedent(` + "use client"; + + import { ConnectButton } from "@rainbow-me/rainbowkit"; + import { CdrNetworkChip } from "@cdr-kit/react-ui"; + + export function SiteHeader() { + return ( +
+
+ + market.cdr +
+ +
+ + +
+
+ ); + } + `), + }, + { + path: "app/page.tsx", + content: dedent(` + import { Hero } from "./hero"; + import { DiscoveryGrid } from "./discovery-grid"; + + export default function Page() { + return ( + <> + + + + ); + } + `), + }, + { + path: "app/hero.tsx", + content: dedent(` + export function Hero() { + return ( +
+
+

Story · Confidential Data Rails

+

+ Encrypted vaults.
+ Real on-chain access. +

+

+ Discover live CDR vaults on Aeneid testnet. Subscribe to decrypt — every read goes + through the threshold-decrypt protocol, every payment is on chain. No mock. +

+
+ 15 active vaults + 9 condition types + Aeneid · chain 1315 +
+
+
+ ); + } + `), + }, + { + path: "app/discovery-grid.tsx", + content: dedent(` + "use client"; + + import { useDiscoverVaults } from "@cdr-kit/react"; + import { VaultCard, SubscribeButton, CdrSpinner, CdrError } from "@cdr-kit/react-ui"; + + export function DiscoveryGrid() { + const { vaults, isLoading, error } = useDiscoverVaults({ enabled: true }); + + if (isLoading) return ( +
Scanning VaultCreated events…
+ ); + if (error) return ( +
{String(error.message ?? error)}
+ ); + if (!vaults?.length) return ( +

No vaults yet on this RPC. Try the seller template to create one.

+ ); + + return ( +
+

Live vaults

+
+ {vaults.slice(0, 12).map((v) => ( + + + + ))} +
+
+ ); + } + `), + }, + { + path: "app/globals.css", + content: dedent(` + :root { color-scheme: dark light; } + * { box-sizing: border-box; } + html { background: var(--cdr-ui-bg, oklch(12% 0.012 90)); } + body { + margin: 0; + font-family: var(--cdr-ui-font-sans, ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif); + background: var(--cdr-ui-bg, oklch(12% 0.012 90)); + color: var(--cdr-ui-fg, oklch(94% 0.01 90)); + -webkit-font-smoothing: antialiased; + min-height: 100vh; + } + a { color: var(--cdr-ui-primary, oklch(78% 0.16 70)); text-decoration: none; } + a:hover { text-decoration: underline; } + + .site-header { + display: flex; align-items: center; justify-content: space-between; + padding: 16px 32px; + border-bottom: 1px solid var(--cdr-ui-border, oklch(20% 0.012 90)); + backdrop-filter: blur(10px); + position: sticky; top: 0; z-index: 10; + background: color-mix(in oklab, var(--cdr-ui-bg) 84%, transparent); + } + .brand { display: flex; align-items: center; gap: 10px; font-weight: 600; letter-spacing: -0.01em; font-family: ui-monospace, monospace; } + .brand-dot { + width: 10px; height: 10px; border-radius: 999px; + background: linear-gradient(135deg, oklch(78% 0.16 70), oklch(72% 0.20 30)); + } + .header-nav { display: flex; gap: 22px; font-size: 0.92rem; color: var(--cdr-ui-muted, oklch(68% 0.01 90)); } + .header-actions { display: flex; align-items: center; gap: 14px; } + + .hero { padding: 96px 32px 64px; } + .hero-inner { max-width: 1080px; margin: 0 auto; } + .eyebrow { + font-family: ui-monospace, monospace; font-size: 0.74rem; + color: var(--cdr-ui-accent, oklch(78% 0.16 70)); + letter-spacing: 0.10em; text-transform: uppercase; margin: 0 0 14px; + } + .hero-title { + font-size: clamp(2.8rem, 6.4vw, 5.2rem); + font-weight: 800; letter-spacing: -0.035em; line-height: 1.04; margin: 0 0 22px; + } + .hero-grad { + background: linear-gradient(135deg, oklch(78% 0.16 70), oklch(72% 0.20 30)); + -webkit-background-clip: text; background-clip: text; color: transparent; + } + .hero-lede { + font-size: 1.14rem; line-height: 1.65; max-width: 640px; + color: var(--cdr-ui-muted, oklch(74% 0.01 90)); margin: 0 0 32px; + } + .hero-meta { display: flex; flex-wrap: wrap; gap: 10px; } + .hero-pill { + padding: 6px 12px; border-radius: 999px; + font-size: 0.78rem; font-family: ui-monospace, monospace; + border: 1px solid var(--cdr-ui-border, oklch(24% 0.012 90)); + color: var(--cdr-ui-muted, oklch(70% 0.01 90)); + background: color-mix(in oklab, var(--cdr-ui-surface, oklch(18% 0.012 90)) 80%, transparent); + } + + .discovery { max-width: 1080px; margin: 0 auto; padding: 24px 32px 96px; } + .discovery-h { + font-size: 1.6rem; font-weight: 700; letter-spacing: -0.02em; + margin: 0 0 24px; + } + .grid { + display: grid; gap: 18px; + grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); + } + .loading-text { + font-family: ui-monospace, monospace; font-size: 0.86rem; + color: var(--cdr-ui-muted, oklch(68% 0.01 90)); + margin-left: 10px; + } + .empty { font-size: 0.96rem; color: var(--cdr-ui-muted, oklch(68% 0.01 90)); } + `), + }, + { + path: "README.md", + content: dedent(` + # cdr-kit · data marketplace + + Flagship template: live vault discovery grid + SubscribeButton CTAs on **real Aeneid testnet**. + Zero mock. Connect a wallet to interact. + + \`\`\`bash + pnpm install + pnpm dev # http://localhost:3000 + \`\`\` + + Need testnet IP? + + ## What's wired up + + - \`useDiscoverVaults()\` scans \`VaultCreated\` events on the factory at + \`0xac592f165D8dD1f27A087bdB39c0b2f619FF6C8C\` and renders each vault as a \`\` + - \`\` runs the full subscribe → threshold-decrypt → reveal flow per card + - \`\` in the header shows the live network state + - RainbowKit \`\` handles wallet connection + + Full docs: + `), + }, + { path: ".gitignore", content: GITIGNORE }, + { path: ".env.local.example", content: ENV_LOCAL_EXAMPLE }, + ], +}; diff --git a/packages/create-cdr-kit-app/src/templates/index.ts b/packages/create-cdr-kit-app/src/templates/index.ts index c876b82..38732f1 100644 --- a/packages/create-cdr-kit-app/src/templates/index.ts +++ b/packages/create-cdr-kit-app/src/templates/index.ts @@ -2,15 +2,17 @@ import type { Template, TemplateName } from "./types.js"; import { STARTER } from "./starter.js"; import { BLOG } from "./blog.js"; import { PAYWALL } from "./paywall.js"; +import { DATA_MARKETPLACE } from "./data-marketplace.js"; import { MCP_SERVER } from "./mcp-server.js"; import { AGENT_VERCEL_AI, AGENT_OPENAI, AGENT_LANGCHAIN, AGENT_AGENTKIT, AGENT_GOAT } from "./agents.js"; export type { Template, TemplateFile, TemplateName } from "./types.js"; -const TEMPLATES: Record = { +const TEMPLATES: Partial> = { starter: STARTER, blog: BLOG, paywall: PAYWALL, + "data-marketplace": DATA_MARKETPLACE, "mcp-server": MCP_SERVER, "agent-vercel-ai": AGENT_VERCEL_AI, "agent-openai": AGENT_OPENAI, @@ -26,5 +28,7 @@ export function getTemplate(name: TemplateName): Template { } export function listTemplates(): { name: TemplateName; description: string }[] { - return Object.values(TEMPLATES).map((t) => ({ name: t.name, description: t.description })); + return Object.values(TEMPLATES) + .filter((t): t is Template => Boolean(t)) + .map((t) => ({ name: t.name, description: t.description })); } diff --git a/packages/create-cdr-kit-app/src/templates/paywall.ts b/packages/create-cdr-kit-app/src/templates/paywall.ts index b0d5545..cef5d7a 100644 --- a/packages/create-cdr-kit-app/src/templates/paywall.ts +++ b/packages/create-cdr-kit-app/src/templates/paywall.ts @@ -1,9 +1,25 @@ import { dedent } from "../util.js"; -import { CDR_VERSION, type Template } from "./types.js"; +import { + ENV_LOCAL_EXAMPLE, + GITIGNORE, + NEXT_CONFIG_TS, + NEXT_ENV_DTS, + PROVIDERS_TSX, + SHARED_DEPS, + SHARED_DEV_DEPS, + THEME_INIT_SCRIPT, + TSCONFIG_JSON, +} from "./shared.js"; +import type { Template } from "./types.js"; +/** + * Single-page paywall: one Subscribe CTA gates the whole content block. + * Real Aeneid integration. No mock. Connect a wallet to interact. + */ export const PAYWALL: Template = { name: "paywall", - description: "Next.js single-page paywall — one Subscribe CTA gates the whole content block (classic pattern).", + description: + "Next.js single-page paywall — one Subscribe CTA on real Aeneid CDR, dark premium card.", postInstall: ["pnpm install", "pnpm dev # http://localhost:3000"], files: [ { @@ -13,120 +29,207 @@ export const PAYWALL: Template = { name: "cdr-kit-paywall", private: true, version: "0.0.1", - scripts: { dev: "next dev", build: "next build", start: "next start" }, - dependencies: { - "@cdr-kit/contracts": CDR_VERSION, - "@cdr-kit/core": CDR_VERSION, - "@cdr-kit/react": CDR_VERSION, - "@cdr-kit/react-ui": CDR_VERSION, - "@tanstack/react-query": "^5.62.0", - next: "^16.2.6", - react: "^19.2.0", - "react-dom": "^19.2.0", - viem: "^2.51.3", - wagmi: "^2.14.0", + scripts: { + dev: "next dev", + build: "next build", + start: "next start", + lint: "next lint", }, - devDependencies: { "@types/node": "^20", "@types/react": "^19", "@types/react-dom": "^19", typescript: "^5.7.2" }, + dependencies: SHARED_DEPS, + devDependencies: SHARED_DEV_DEPS, }, null, 2, ), }, - { - path: "tsconfig.json", - content: JSON.stringify( - { - compilerOptions: { - target: "ES2022", - lib: ["dom", "dom.iterable", "esnext"], - module: "esnext", - moduleResolution: "bundler", - jsx: "preserve", - strict: true, - esModuleInterop: true, - skipLibCheck: true, - isolatedModules: true, - noEmit: true, - resolveJsonModule: true, - allowJs: true, - plugins: [{ name: "next" }], - paths: { "@/*": ["./*"] }, - }, - include: ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], - exclude: ["node_modules"], - }, - null, - 2, - ), - }, - { path: "next.config.ts", content: "export default { reactStrictMode: true };\n" }, - { path: "next-env.d.ts", content: '/// \n/// \n' }, + { path: "tsconfig.json", content: TSCONFIG_JSON }, + { path: "next.config.ts", content: NEXT_CONFIG_TS }, + { path: "next-env.d.ts", content: NEXT_ENV_DTS }, { path: "app/layout.tsx", content: dedent(` import type { ReactNode } from "react"; import { Providers } from "./providers"; + import { PaywallHeader } from "./header"; import "@cdr-kit/react-ui/styles.css"; + import "./globals.css"; - export const metadata = { title: "Paywalled report", description: "Subscribe to read." }; + export const metadata = { + title: "This week's signal — cdr-kit paywall", + description: "Subscribe to decrypt the trade signal. Real Aeneid CDR.", + }; export default function RootLayout({ children }: { children: ReactNode }) { - return {{children}}; + return ( + + + ${THEME_INIT_SCRIPT} + + + + +
{children}
+
+ + + ); } `), }, + { path: "app/providers.tsx", content: PROVIDERS_TSX }, { - path: "app/providers.tsx", + path: "app/header.tsx", content: dedent(` "use client"; - import { useMemo, type ReactNode } from "react"; - import { CdrProvider } from "@cdr-kit/react"; - import { createMockCdrKit } from "@cdr-kit/core"; - const PAYLOAD = JSON.stringify({ signal: "BUY", pair: "ETH/USD", confidence: 0.86, ttl: "30d" }, null, 2); + import { ConnectButton } from "@rainbow-me/rainbowkit"; + import { CdrNetworkChip } from "@cdr-kit/react-ui"; - export function Providers({ children }: { children: ReactNode }) { - const kit = useMemo(() => { - const k = createMockCdrKit({ readDelayMs: 2200, threshold: 7 }); - void k.writeVaultData({ uuid: 4200, dataKey: new TextEncoder().encode(PAYLOAD) }); - return k; - }, []); - return {children}; + export function PaywallHeader() { + return ( +
+
+ + signal.cdr +
+
+ + +
+
+ ); } `), }, { path: "app/page.tsx", content: dedent(` - import { SubscribeButton } from "@cdr-kit/react-ui"; + import { SubscribeButton, IpPrice, ConditionBadge } from "@cdr-kit/react-ui"; + + /** Real Aeneid vault — deployed via the cdr-kit factory. */ + const VAULT_ID = 4200; + const PRICE_WEI = 5n * 10n ** 18n; export default function Page() { return ( -
-

This week's signal

-

- A confidential trade signal. Subscribe to decrypt and view the JSON payload locally — - the data never enters your bundle. Mock CDR · 5 IP / month. -

- -
+
+
+
+ Subscription + +
+

This week's signal

+

+ Confidential trade signal — encrypted via Story CDR. Subscribe to decrypt and view + the JSON payload locally. The data never enters your bundle, server logs, or DOM + until your wallet's read succeeds. +

+ +

+ Real Aeneid testnet. Need IP?{" "} + + Grab free testnet IP → + +

+
+
); } `), }, + { + path: "app/globals.css", + content: dedent(` + :root { color-scheme: dark light; } + * { box-sizing: border-box; } + html { background: var(--cdr-ui-bg, oklch(13% 0.012 90)); } + body { + margin: 0; + font-family: var(--cdr-ui-font-sans, ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif); + background: var(--cdr-ui-bg, oklch(13% 0.012 90)); + color: var(--cdr-ui-fg, oklch(94% 0.01 90)); + -webkit-font-smoothing: antialiased; + min-height: 100vh; + } + a { color: var(--cdr-ui-primary, oklch(78% 0.16 70)); text-decoration: none; } + a:hover { text-decoration: underline; } + + .site-header { + display: flex; align-items: center; justify-content: space-between; + padding: 18px 28px; + border-bottom: 1px solid var(--cdr-ui-border, oklch(22% 0.012 90)); + backdrop-filter: blur(8px); + position: sticky; top: 0; z-index: 10; + background: color-mix(in oklab, var(--cdr-ui-bg) 80%, transparent); + } + .brand { display: flex; align-items: center; gap: 10px; font-weight: 600; letter-spacing: -0.01em; font-family: ui-monospace, monospace; } + .brand-dot { + width: 10px; height: 10px; border-radius: 999px; + background: linear-gradient(135deg, oklch(78% 0.16 70), oklch(72% 0.20 30)); + } + .header-actions { display: flex; align-items: center; gap: 14px; } + + .paywall-stage { + min-height: calc(100vh - 70px); + display: grid; place-items: center; + padding: 48px 24px; + background: + radial-gradient(800px 400px at 50% 0%, color-mix(in oklab, oklch(78% 0.16 70) 12%, transparent), transparent), + var(--cdr-ui-bg); + } + .paywall-card { + width: 100%; max-width: 520px; + background: color-mix(in oklab, var(--cdr-ui-surface, oklch(17% 0.012 90)) 92%, transparent); + border: 1px solid var(--cdr-ui-border, oklch(24% 0.012 90)); + border-radius: 20px; + padding: 36px 32px 32px; + box-shadow: + 0 1px 0 color-mix(in oklab, oklch(100% 0 0) 6%, transparent) inset, + 0 24px 48px -24px color-mix(in oklab, oklch(0% 0 0) 50%, transparent); + } + .card-meta { + display: flex; align-items: center; justify-content: space-between; margin: 0 0 22px; + } + .card-title { + font-size: clamp(1.8rem, 3.4vw, 2.4rem); + font-weight: 800; letter-spacing: -0.025em; line-height: 1.1; margin: 0 0 14px; + background: linear-gradient(135deg, var(--cdr-ui-fg, #fafafa) 0%, color-mix(in oklab, var(--cdr-ui-fg) 60%, var(--cdr-ui-primary, oklch(78% 0.16 70))) 100%); + -webkit-background-clip: text; background-clip: text; color: transparent; + } + .card-lede { + font-size: 0.98rem; line-height: 1.65; color: var(--cdr-ui-muted, oklch(70% 0.01 90)); + margin: 0 0 24px; + } + .card-hint { + margin-top: 18px; font-size: 0.84rem; + color: var(--cdr-ui-muted, oklch(60% 0.01 90)); + } + `), + }, { path: "README.md", content: dedent(` # cdr-kit paywall + Classic single-block paywall: \`\` runs subscribe → threshold-read → decrypt → reveal. + \`\`\`bash - pnpm install && pnpm dev + pnpm install + pnpm dev # http://localhost:3000 \`\`\` - Classic single-block paywall pattern: runs subscribe → threshold-read → decrypt → reveal. To go live on Aeneid, swap the mock provider in \`app/providers.tsx\` for a real wagmi config + apiUrl. Use \`uploadFile()\` from \`@cdr-kit/core\` to encrypt + allocate a real vault and update the uuid. + Connect any wallet that supports Story Aeneid (chain ID 1315). Grab testnet IP from + . Click Subscribe → real on-chain payment → decrypted JSON renders. + + ## Using your own vault + + 1. Run \`uploadFile()\` from \`@cdr-kit/core\` server-side (or the \`cdr\` CLI) with your real data + a SubscriptionCondition. + 2. Update \`VAULT_ID\` and \`PRICE_WEI\` in \`app/page.tsx\`. + + Full docs: `), }, - { path: ".gitignore", content: "node_modules\n.next\ndist\n.env\n.env.local\n.env.*.local\n" }, + { path: ".gitignore", content: GITIGNORE }, + { path: ".env.local.example", content: ENV_LOCAL_EXAMPLE }, ], }; - diff --git a/packages/create-cdr-kit-app/src/templates/shared.ts b/packages/create-cdr-kit-app/src/templates/shared.ts new file mode 100644 index 0000000..8c98a9b --- /dev/null +++ b/packages/create-cdr-kit-app/src/templates/shared.ts @@ -0,0 +1,114 @@ +import { dedent } from "../util.js"; + +/** + * Shared snippets reused by every "premium" template (blog, paywall, data-marketplace, forms). + * Every template wires real wagmi + RainbowKit + CdrConfigProvider against Aeneid testnet. + * No mock — when the user has no wallet connected, the components render their own connect CTAs. + */ + +export const PROVIDERS_TSX = dedent(` + "use client"; + + import { useState, type ReactNode } from "react"; + import { WagmiProvider, http } from "wagmi"; + import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; + import { RainbowKitProvider, getDefaultConfig, midnightTheme } from "@rainbow-me/rainbowkit"; + import { CdrConfigProvider } from "@cdr-kit/react"; + import "@rainbow-me/rainbowkit/styles.css"; + + const aeneid = { + id: 1315, + name: "Story Aeneid Testnet", + nativeCurrency: { name: "IP", symbol: "IP", decimals: 18 }, + rpcUrls: { default: { http: ["https://aeneid.storyrpc.io"] } }, + blockExplorers: { default: { name: "Aeneid Explorer", url: "https://aeneid.storyscan.xyz" } }, + } as const; + + const config = getDefaultConfig({ + appName: "cdr-kit app", + projectId: process.env.NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID ?? "dev", + chains: [aeneid], + transports: { [aeneid.id]: http() }, + ssr: true, + }); + + /** Real CDR provider — connects to Aeneid testnet. No mock anywhere. + * Visitors without a wallet see the components render their own + * Connect prompts; once they connect, every flow runs on real chain. */ + export function Providers({ children }: { children: ReactNode }) { + const [queryClient] = useState(() => new QueryClient()); + return ( + + + + {children} + + + + ); + } +`); + +export const THEME_INIT_SCRIPT = `