{"_id":"@brama/sdk","_rev":"2-c481ceeedfbfdfc67ba55e6aa082044d","name":"@brama/sdk","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@brama/sdk","version":"1.0.0","keywords":["brama","brand","design-system","tokens","ai"],"license":"MIT","_id":"@brama/sdk@1.0.0","maintainers":[{"name":"buzzsoundyear","email":"vshl.design@gmail.com"}],"homepage":"https://www.brama.design/docs/api","bugs":{"url":"https://github.com/buzzsoundyear/brama/issues"},"dist":{"shasum":"02d0088006d643a7b9e2adafe03ab02f2a725685","tarball":"https://registry.npmjs.org/@brama/sdk/-/sdk-1.0.0.tgz","fileCount":11,"integrity":"sha512-DEK9maFMfcIieTZ2tDUVMxkx7N8Xi45AuYyoH3zmJsZ0UBoeoYGrZjMpTsIPuL302uYQ+qQH7QN1X7LdzfOD/A==","signatures":[{"sig":"MEUCIH08+iEedgFjz/g6jLCCc/rNeEmPjiFigo6/qx6Ku1jTAiEA7lyOcuAQg2bvu81WCEmXg55y0a87uqXVe1LdU/lrQK4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35809},"main":"./dist/index.js","type":"module","_from":"file:brama-sdk-1.0.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"build":"tsc -p tsconfig.json"},"_npmUser":{"name":"buzzsoundyear","email":"vshl.design@gmail.com"},"_resolved":"/private/var/folders/yl/qjnmqxks14jds96t650w2xc00000gn/T/14ffb78e81ce21a2c3602572cc2c3bc9/brama-sdk-1.0.0.tgz","_integrity":"sha512-DEK9maFMfcIieTZ2tDUVMxkx7N8Xi45AuYyoH3zmJsZ0UBoeoYGrZjMpTsIPuL302uYQ+qQH7QN1X7LdzfOD/A==","repository":{"url":"git+https://github.com/buzzsoundyear/brama.git","type":"git","directory":"packages/brama-sdk"},"_npmVersion":"11.12.1","description":"TypeScript client for the Brama public API — read + write brand state, run compliance scans, regenerate variants.","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sdk_1.0.0_1777929096202_0.8453549493731081","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Coming soon — Brama is in private preview"}},"time":{"created":"2026-05-04T21:11:36.113Z","modified":"2026-05-04T21:17:42.363Z","1.0.0":"2026-05-04T21:11:36.494Z"},"bugs":{"url":"https://github.com/buzzsoundyear/brama/issues"},"license":"MIT","homepage":"https://www.brama.design/docs/api","keywords":["brama","brand","design-system","tokens","ai"],"repository":{"url":"git+https://github.com/buzzsoundyear/brama.git","type":"git","directory":"packages/brama-sdk"},"description":"TypeScript client for the Brama public API — read + write brand state, run compliance scans, regenerate variants.","maintainers":[{"name":"buzzsoundyear","email":"vshl.design@gmail.com"}],"readme":"# @brama/sdk\n\nTypeScript client for the [Brama](https://www.brama.design) public API.\nRead brand state, run compliance scans, regenerate assets, kick off\nblock agent runs — all behind a single `Brama` class.\n\n## Install\n\n```bash\nnpm install @brama/sdk\n# or\npnpm add @brama/sdk\n```\n\n## Quickstart\n\n```ts\nimport { Brama } from \"@brama/sdk\";\n\nconst brama = new Brama({\n  apiKey: process.env.BRAMA_API_KEY!,\n});\n\n// Read\nconst { brands } = await brama.brands.list();\nconst score = await brama.brands.score(brands[0].id);\nif (score.score < 70) {\n  console.warn(`Score dropped: ${score.score}`);\n}\n\n// Write\nconst created = await brama.brands.create({\n  name: \"Lattice\",\n  brief: {\n    name: \"Lattice\",\n    industry: \"Developer tools\",\n    audience: \"Senior engineers\",\n    keywords: [\"technical\", \"calm\", \"considered\"],\n    tone_words: [\"technical\", \"direct\", \"no-fluff\"],\n  },\n});\n\n// Block-level actions\nawait brama.brands.approveBlock(created.id, \"color_palette\");\nawait brama.brands.regenerateBlock(created.id, \"typography\", {\n  agentPrompt: \"Pair a serif headline with a humanist sans body.\",\n});\n\n// Compliance\nconst result = await brama.compliance.scan({\n  brandId: created.id,\n  text: \"Unlock your potential and supercharge your workflow!\",\n  persist: true,\n  label: \"homepage-hero-v3\",\n});\nconsole.log(result.score, result.findings);\n```\n\n## Public asset URLs (no API key)\n\n```ts\nimport { assetUrl } from \"@brama/sdk\";\n\n<img src={assetUrl(token, { format: \"webp\" })} />\n```\n\n`assetUrl(token, { format })` builds a URL against the public token\nroute. Valid formats are `png` and `webp`; bare URL serves the source.\n\n## Errors\n\nNon-2xx responses throw `BramaApiError` with `status`, `code`, and\noptional `details`. Branch on `status` for retry policies and\n`code` for stable identifiers like `rate_limited` / `not_found` /\n`validation_failed`.\n\n```ts\nimport { Brama, BramaApiError } from \"@brama/sdk\";\n\ntry {\n  await brama.brands.list();\n} catch (err) {\n  if (err instanceof BramaApiError && err.status === 429) {\n    // back off + retry\n  }\n}\n```\n\n## Configuration\n\n```ts\nnew Brama({\n  apiKey: \"...\",\n  baseUrl: \"https://staging.brama.design\",  // optional\n  fetch: customFetch,                       // optional\n});\n```\n\n## Coverage\n\n| Endpoint | Method |\n|---|---|\n| `GET /api/v1/brands` | `brama.brands.list()` |\n| `GET /api/v1/brands/:id` | `brama.brands.get(id)` |\n| `GET /api/v1/brands/:id/blocks` | `brama.brands.blocks(id)` |\n| `GET /api/v1/brands/:id/score` | `brama.brands.score(id)` |\n| `GET /api/v1/brands/:id/watch/summary` | `brama.brands.watchSummary(id)` |\n| `GET /api/v1/brands/:id/microcopy` | `brama.brands.microcopy.list(id)` |\n| `GET /api/v1/brands/:id/microcopy/:setId` | `brama.brands.microcopy.get(id, setId)` |\n| `POST /api/v1/brands` | `brama.brands.create(input)` |\n| `PATCH /api/v1/brands/:id` | `brama.brands.update(id, input)` |\n| `DELETE /api/v1/brands/:id` | `brama.brands.delete(id)` |\n| `PATCH /api/v1/brands/:id/blocks/:type` | `brama.brands.block(id, type, body)` |\n| `POST /api/v1/brands/:id/assets/:assetId/regenerate-variants` | `brama.brands.regenerateAssetVariants(id, assetId)` |\n| `POST /api/v1/compliance/scan` | `brama.compliance.scan(input)` |\n\n## Versioning\n\nThe SDK ships against the `/api/v1/*` versioned surface. Major SDK\nversions follow API major versions; minor/patch follow\nnon-breaking additions.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}