{"_id":"@calvery/sdk","_rev":"2-78cb93b00a23f6461ab1b74d25c10d3e","name":"@calvery/sdk","dist-tags":{"latest":"0.3.0"},"versions":{"0.1.0":{"name":"@calvery/sdk","version":"0.1.0","keywords":["secrets","secret-manager","calvery","vault","env","dotenv"],"author":{"name":"Calvery","email":"support@calvery.xyz"},"license":"MIT","_id":"@calvery/sdk@0.1.0","maintainers":[{"name":"renzydev","email":"renzyarmstrong@gmail.com"}],"homepage":"https://calvery.xyz","bugs":{"url":"https://github.com/RenzyArmstrong/Calvery-Vault/issues"},"dist":{"shasum":"cbdb1539b42fba8aae4372258cabd4ca92c47fe4","tarball":"https://registry.npmjs.org/@calvery/sdk/-/sdk-0.1.0.tgz","fileCount":14,"integrity":"sha512-21rkYElziUXY4f/uYBYWbAw9IRUQk9o9tN4+T25fgnmTMS7UF15g2YA0cMgsWgNwDmWKThEBYAqTcb0MG9j1tQ==","signatures":[{"sig":"MEQCIAw/qZhJbCvpn2ymHo3YdxzNgWbjcnxPmNLjrkIeR9rFAiBeeCQOJz0YKCCxdhLzPM7qZvZN9n5k29lA3hlLbAtH2g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":27269},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"gitHead":"7b08b0a244f1464331b323a4e81b2ab9b5f312ad","scripts":{"build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"renzydev","email":"renzyarmstrong@gmail.com"},"_npmVersion":"11.8.0","description":"Official Node.js/TypeScript SDK for Calvery Vault secret manager","directories":{},"_nodeVersion":"24.13.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.0","@types/node":"^20.10.0"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.1.0_1776774696181_0.3260053988713978","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@calvery/sdk","version":"0.3.0","description":"Official Node.js/TypeScript SDK for Calvery Vault secret manager","keywords":["secrets","secret-manager","calvery","vault","env","dotenv"],"homepage":"https://calvery.xyz","bugs":{"url":"https://github.com/RenzyArmstrong/Calvery-Vault/issues"},"license":"MIT","author":{"name":"Calvery","email":"support@calvery.xyz"},"type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"engines":{"node":">=18"},"scripts":{"build":"tsc","prepublishOnly":"npm run build"},"devDependencies":{"typescript":"^5.4.0","@types/node":"^20.10.0"},"publishConfig":{"access":"public"},"gitHead":"187017501c0ca720fb7413fb02b77f2965ce1bad","_id":"@calvery/sdk@0.3.0","_nodeVersion":"24.13.1","_npmVersion":"11.8.0","dist":{"integrity":"sha512-VbzBPW59TKh8JwbjhcR0E6IzpZi0+BluZ+avVlJ6A1QIYSlr5fiDXobjvkie+EWU+syHHbBZt+FO+yOLS0TndA==","shasum":"ecd18abafe9b1a229d671c99084fb421ddaba202","tarball":"https://registry.npmjs.org/@calvery/sdk/-/sdk-0.3.0.tgz","fileCount":14,"unpackedSize":27269,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIDUpt+7fPhWG0D7+iyBGpK0s6GObH9F27xqfepNtRxk0AiEAvAhXX9e/OL3GuctNHFou47/0wKc8A+ArHt1XJG2k1t8="}]},"_npmUser":{"name":"renzydev","email":"renzyarmstrong@gmail.com"},"directories":{},"maintainers":[{"name":"renzydev","email":"renzyarmstrong@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/sdk_0.3.0_1777113224660_0.062308392768323895"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-21T12:31:36.046Z","modified":"2026-04-25T10:33:44.985Z","0.1.0":"2026-04-21T12:31:36.329Z","0.3.0":"2026-04-25T10:33:44.865Z"},"bugs":{"url":"https://github.com/RenzyArmstrong/Calvery-Vault/issues"},"author":{"name":"Calvery","email":"support@calvery.xyz"},"license":"MIT","homepage":"https://calvery.xyz","keywords":["secrets","secret-manager","calvery","vault","env","dotenv"],"description":"Official Node.js/TypeScript SDK for Calvery Vault secret manager","maintainers":[{"name":"renzydev","email":"renzyarmstrong@gmail.com"}],"readme":"# @calvery/sdk\n\nOfficial Node.js / TypeScript SDK untuk [Calvery Vault](https://calvery.xyz) — secret manager untuk tim developer.\n\n## Install\n\n```bash\nnpm install @calvery/sdk\n# atau\npnpm add @calvery/sdk\n```\n\nButuh Node 18+ (pakai built-in `fetch`).\n\n## Quick start\n\n```ts\nimport { Calvery } from '@calvery/sdk'\n\nconst calvery = new Calvery({\n  token: process.env.CVSM_TOKEN!,\n  team: 'acme-corp', // slug atau UUID team\n})\n\n// Ambil satu secret\nconst dbUrl = await calvery.get('DATABASE_URL')\n\n// Ambil semua secret sebagai object\nconst all = await calvery.getAll()\n// { DATABASE_URL: '...', STRIPE_KEY: '...', ... }\n\n// Inject ke process.env (pola dotenv-style)\nawait calvery.inject()\nconsole.log(process.env.DATABASE_URL) // sudah terisi\n```\n\n## API\n\n### `new Calvery(options)`\n\n| Option        | Type     | Default                     | Keterangan                                                       |\n| ------------- | -------- | --------------------------- | ---------------------------------------------------------------- |\n| `token`       | string   | **wajib**                   | Personal Access Token (`cvsm_...`). Buat di dash → Access Tokens |\n| `team`        | string   | **wajib**                   | Team slug atau UUID                                              |\n| `baseUrl`     | string   | `https://api.calvery.xyz`   | Override untuk self-host                                         |\n| `environment` | string   | `\"production\"`              | Default env kalau tidak di-override                              |\n| `cacheTTL`    | number   | `30000`                     | In-memory cache TTL (ms). Set `0` untuk disable                  |\n| `maxRetries`  | number   | `3`                         | Retry 5xx + network error dengan exponential backoff             |\n\n### `calvery.get(name, opts?)`\n\nAmbil satu secret by name.\n\n```ts\nconst val = await calvery.get('STRIPE_KEY')\nconst staging = await calvery.get('STRIPE_KEY', { environment: 'staging' })\n```\n\nThrow `CalverySecretNotFoundError` kalau secret tidak ada.\n\n### `calvery.getAll(opts?)`\n\nAmbil semua secret untuk environment tertentu.\n\n```ts\nconst secrets = await calvery.getAll()\nfor (const [k, v] of Object.entries(secrets)) {\n  console.log(k, v)\n}\n```\n\n### `calvery.inject(opts?)`\n\nInject semua secret ke `process.env`. Return array nama yang di-inject.\n\n```ts\nconst injected = await calvery.inject()\nconsole.log(`Loaded ${injected.length} secrets`)\n\n// Default: tidak overwrite env var yang sudah ada\n// Kalau mau overwrite:\nawait calvery.inject({ overwrite: true })\n```\n\n### `calvery.clearCache()`\n\nManual clear cache tanpa nunggu TTL expire.\n\n## Patterns\n\n### Next.js / Vercel\n\nDi `next.config.mjs`:\n\n```ts\nimport { Calvery } from '@calvery/sdk'\n\nconst calvery = new Calvery({\n  token: process.env.CVSM_TOKEN!,\n  team: 'acme-corp',\n})\nawait calvery.inject()\n\nexport default {\n  // ... config kamu\n}\n```\n\n### Express bootstrap\n\n```ts\nimport express from 'express'\nimport { Calvery } from '@calvery/sdk'\n\nconst calvery = new Calvery({ token: process.env.CVSM_TOKEN!, team: 'acme' })\nawait calvery.inject()\n\nconst app = express()\n// ... sekarang process.env.DATABASE_URL dll. sudah ada\n```\n\n### CI/CD (GitHub Actions)\n\n```yaml\n- name: Load secrets dari Calvery\n  run: |\n    npx -y @calvery/sdk inject --env production >> $GITHUB_ENV\n  env:\n    CVSM_TOKEN: ${{ secrets.CVSM_TOKEN }}\n    CVSM_TEAM: acme-corp\n```\n\n## Error handling\n\n```ts\nimport { Calvery, CalveryAuthError, CalverySecretNotFoundError } from '@calvery/sdk'\n\ntry {\n  const val = await calvery.get('FOO')\n} catch (err) {\n  if (err instanceof CalveryAuthError) {\n    // Token expired atau di-revoke — refresh token kamu\n  } else if (err instanceof CalverySecretNotFoundError) {\n    // Secret belum dibuat di dash\n  } else {\n    throw err\n  }\n}\n```\n\n## Self-host\n\nKalau kamu self-host Calvery Vault, set `baseUrl`:\n\n```ts\nconst calvery = new Calvery({\n  token: process.env.CVSM_TOKEN!,\n  team: 'internal',\n  baseUrl: 'https://vault.mycompany.internal',\n})\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}