{"_id":"@apicook/sdk","name":"@apicook/sdk","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@apicook/sdk","version":"0.1.0","description":"ApiCook SDK — API 가공 규칙을 적용하여 원본 API를 호출하는 클라이언트","main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"build":"tsup","dev":"tsup --watch"},"keywords":["apicook","api","sdk","transform","public-api","data-processing"],"license":"MIT","devDependencies":{"tsup":"^8.5.0","typescript":"^5.8.3"},"_id":"@apicook/sdk@0.1.0","gitHead":"314de60a0bc5bd4a0affbcbf0acd7d38f4a18bb7","_nodeVersion":"22.20.0","_npmVersion":"10.9.3","dist":{"integrity":"sha512-B0rdH9sdqq2DFxu/iC5uIcTo1FIFCZlgzwCp8uJuFHG/ztwu8L47QEiUX90DVb2K+EfTFtQuionik9imU1QeDg==","shasum":"247789a7daa206935078fb977dc4bceab866400b","tarball":"https://registry.npmjs.org/@apicook/sdk/-/sdk-0.1.0.tgz","fileCount":6,"unpackedSize":26563,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCzczr3zq+GKbw4IbPHsIJFmy5HQv/agr+8GgPM5uCjegIgK8f8HOXnTH8RgIB4i0S1OS778S0qpnQ35D8PhjWjVk8="}]},"_npmUser":{"name":"mbdyjk","email":"mbdyjk@gmail.com"},"directories":{},"maintainers":[{"name":"mbdyjk","email":"mbdyjk@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/sdk_0.1.0_1781076357967_0.44427576246616196"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-10T07:25:57.722Z","0.1.0":"2026-06-10T07:25:58.088Z","modified":"2026-06-10T07:25:58.404Z"},"maintainers":[{"name":"mbdyjk","email":"mbdyjk@gmail.com"}],"description":"ApiCook SDK — API 가공 규칙을 적용하여 원본 API를 호출하는 클라이언트","keywords":["apicook","api","sdk","transform","public-api","data-processing"],"license":"MIT","readme":"# @apicook/sdk\n\nApiCook에서 설정한 API 가공 규칙을 적용하여 원본 API를 호출하는 서버 사이드 SDK.\n\n## 설치\n\n```bash\nnpm install @apicook/sdk\n```\n\n## Quick Start\n\n```typescript\nimport { ApiCook } from '@apicook/sdk';\n\nconst cook = new ApiCook('your-project-id', {\n    apiKey: 'apk_your_api_key',\n});\n\nconst weather = await cook.fetch('current-weather', {\n    serviceKey: process.env.DATA_GO_KR_KEY,\n    nx: '60',\n    ny: '127',\n});\n\nconsole.log(weather);\n// → 가공된 결과 (ApiCook 에디터에서 설정한 필드만 포함)\n```\n\n## API Reference\n\n### `new ApiCook(projectId, options)`\n\n| 파라미터 | 타입 | 필수 | 설명 |\n|---------|------|------|------|\n| `projectId` | `string` | O | ApiCook 프로젝트 ID |\n| `options.apiKey` | `string` | O | SDK API 키 (`apk_...`) |\n| `options.cdnBase` | `string` | - | CDN URL (기본: `https://api.apicook.io`) |\n| `options.cacheTtlMs` | `number` | - | 설정 캐시 TTL (기본: 60000ms) |\n\n### `cook.fetch<T>(slug, params?, options?)`\n\n엔드포인트를 호출하고 가공된 결과를 반환합니다.\n\n```typescript\n// 기본 호출\nconst data = await cook.fetch('weather', { nx: '60', ny: '127' });\n\n// POST 요청 (body 전달)\nconst result = await cook.fetch('submit-data', {}, { body: { name: 'test' } });\n```\n\n| 파라미터 | 타입 | 설명 |\n|---------|------|------|\n| `slug` | `string` | 엔드포인트 slug (에디터에서 확인) |\n| `params` | `Record<string, string>` | query/path 파라미터 |\n| `options.body` | `unknown` | POST 등 요청 body |\n\n### `cook.endpoints`\n\n사용 가능한 엔드포인트 slug 목록을 반환합니다.\n\n```typescript\nconsole.log(cook.endpoints);\n// → ['current-weather', 'air-quality', 'forecast']\n```\n\n### `cook.setAuth(slug, params)`\n\n엔드포인트별 인증 파라미터를 사전 설정합니다. 매번 `fetch`에 전달하지 않아도 됩니다.\n\n```typescript\ncook.setAuth('weather', { serviceKey: process.env.WEATHER_KEY });\ncook.setAuth('air-quality', { serviceKey: process.env.AIR_KEY });\n\n// serviceKey가 자동으로 포함됨\nconst data = await cook.fetch('weather', { nx: '60' });\n```\n\n### `cook.refresh()`\n\n설정 JSON을 강제로 다시 로드합니다.\n\n```typescript\nawait cook.refresh();\n```\n\n## 지원 런타임\n\n글로벌 `fetch` API가 있는 모든 서버 사이드 런타임을 지원합니다.\n\n| 환경 | 지원 |\n|------|------|\n| Node.js 18+ | O |\n| Deno | O |\n| Bun | O |\n| Cloudflare Workers | O |\n| Vercel Edge Functions | O |\n| Next.js API Routes | O |\n| **브라우저** | **X** (공공 API CORS 미허용) |\n\n## 에러 처리\n\n```typescript\nimport { ApiCook, ApiCookError, TransformError } from '@apicook/sdk';\n\ntry {\n    const data = await cook.fetch('weather', { nx: '60' });\n} catch (err) {\n    if (err instanceof ApiCookError) {\n        // 설정 로드 실패, slug 미존재, API 키 오류\n        console.error('SDK 에러:', err.message);\n    }\n    if (err instanceof TransformError) {\n        // 원본 API 응답 구조 변경으로 가공 실패\n        console.error('변환 에러:', err.slug, err.message);\n    }\n}\n```\n\n## TypeScript\n\n모든 타입이 기본 제공됩니다. 제네릭으로 반환 타입을 지정할 수 있습니다.\n\n```typescript\ninterface WeatherData {\n    temperature: number;\n    humidity: number;\n}\n\nconst weather = await cook.fetch<WeatherData>('current-weather', { nx: '60' });\n// weather.temperature — 자동 완성 지원\n```\n\n## 라이선스\n\nMIT\n","readmeFilename":"README.md","_rev":"1-925d06e5b25306ef756c12ca514ded0d"}