{"_id":"@croco/invitation-drizzle","_rev":"2-d90b7a2a74d515b346a3df2a735008e4","name":"@croco/invitation-drizzle","dist-tags":{"latest":"0.0.2"},"versions":{"0.0.1":{"name":"@croco/invitation-drizzle","version":"0.0.1","_id":"@croco/invitation-drizzle@0.0.1","maintainers":[{"name":"kang-heewon","email":"heewon.dev@gmail.com"},{"name":"ddark","email":"ddark.kr@gmail.com"}],"dist":{"shasum":"ab46708bd283451fb99e1d4976bf9daefa86ad21","tarball":"https://registry.npmjs.org/@croco/invitation-drizzle/-/invitation-drizzle-0.0.1.tgz","fileCount":4,"integrity":"sha512-3kFwXZjnT4zARiD+ayhHjailqMHY3L+4s3JMZUZE/kvH+UJ4ux50Pt4mq374oGwZrWpM8MCnTUCnf/dsz7WCsA==","signatures":[{"sig":"MEYCIQC0j3/YrnLHUfRqTIo+tQ0bc5/TxkN9p06mjgcORfgzEQIhAIkGxg5vX5U5p3nkn3mTegXn8jCunJ3l8dPg9J0kNhzB","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15639},"main":"./dist/index.js","type":"commonjs","_from":"file:croco-invitation-drizzle-0.0.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"dev":"tsup src/index.ts --format cjs,esm --dts --watch","lint":"oxlint .","test":"vitest run","build":"tsup src/index.ts --format esm,cjs --minify --clean","vitest":"vitest","typecheck":"tsc --noEmit"},"_npmUser":{"name":"kang-heewon","email":"heewon.dev@gmail.com"},"_resolved":"/tmp/38055a1a46c4e3ce11b6eb7d377e458d/croco-invitation-drizzle-0.0.1.tgz","_integrity":"sha512-3kFwXZjnT4zARiD+ayhHjailqMHY3L+4s3JMZUZE/kvH+UJ4ux50Pt4mq374oGwZrWpM8MCnTUCnf/dsz7WCsA==","_npmVersion":"10.9.7","description":"`@croco/invitation-core`용 Drizzle 저장소입니다.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"drizzle-orm":"^0.45.2","@croco/tx-core":"0.0.1","@croco/tx-drizzle":"0.0.1","@croco/invitation-core":"0.0.1","@croco/framework-context":"0.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vitest":"4.0.16","typescript":"^5.7.2","reflect-metadata":"^0.2.2"},"_npmOperationalInternal":{"tmp":"tmp/invitation-drizzle_0.0.1_1778834265461_0.0011629820240195432","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@croco/invitation-drizzle","version":"0.0.2","type":"commonjs","main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js","types":"./dist/index.d.ts"}},"publishConfig":{"access":"public"},"dependencies":{"drizzle-orm":"^0.45.2","@croco/tx-core":"0.0.2","@croco/invitation-core":"0.0.2","@croco/framework-context":"0.0.2","@croco/tx-drizzle":"0.0.2"},"devDependencies":{"reflect-metadata":"^0.2.2","tsup":"^8.4.0","typescript":"^5.7.2","vitest":"4.0.16"},"scripts":{"build":"tsup src/index.ts --format esm,cjs --minify --clean","dev":"tsup src/index.ts --format cjs,esm --dts --watch","vitest":"vitest","test":"vitest run","typecheck":"tsc --noEmit","lint":"oxlint ."},"_id":"@croco/invitation-drizzle@0.0.2","description":"`@croco/invitation-core`용 Drizzle 저장소입니다.","_integrity":"sha512-ToYMZUAOM1oGoe2WZmK44fl/2Teo4bpU0UgGUUz1E8CP+TU5RAgo4W6Cndsft4nvZjvmKBt+WSpVhJlaNaBWvA==","_resolved":"/private/var/folders/zp/px4pj6gs20q8c38hgmbym1080000gn/T/c7fba42df4cbd68757b256af94e678f8/croco-invitation-drizzle-0.0.2.tgz","_from":"file:croco-invitation-drizzle-0.0.2.tgz","_nodeVersion":"24.14.0","_npmVersion":"11.9.0","dist":{"integrity":"sha512-ToYMZUAOM1oGoe2WZmK44fl/2Teo4bpU0UgGUUz1E8CP+TU5RAgo4W6Cndsft4nvZjvmKBt+WSpVhJlaNaBWvA==","shasum":"e4a9bc1bdda37225375c48c6c1959cd8f4f64c10","tarball":"https://registry.npmjs.org/@croco/invitation-drizzle/-/invitation-drizzle-0.0.2.tgz","fileCount":4,"unpackedSize":15639,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIDW7FQ5/rBThq5c6BxDik/tDC/C6+WbGHEd4bgShwDlPAiBdHaGkrdI+HHrrvskEEAEV/4P7AuehGgurFRznaVeoDA=="}]},"_npmUser":{"name":"kang-heewon","email":"heewon.dev@gmail.com"},"directories":{},"maintainers":[{"name":"kang-heewon","email":"heewon.dev@gmail.com"},{"name":"ddark","email":"ddark.kr@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/invitation-drizzle_0.0.2_1780294878892_0.33575137476013084"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-15T08:37:45.330Z","modified":"2026-06-01T06:21:19.161Z","0.0.1":"2026-05-15T08:37:45.587Z","0.0.2":"2026-06-01T06:21:19.016Z"},"description":"`@croco/invitation-core`용 Drizzle 저장소입니다.","maintainers":[{"name":"kang-heewon","email":"heewon.dev@gmail.com"},{"name":"ddark","email":"ddark.kr@gmail.com"}],"readme":"# @croco/invitation-drizzle\n\n`@croco/invitation-core`용 Drizzle 저장소입니다.\n\n## 설치\n\n```bash\npnpm add @croco/invitation-drizzle @croco/invitation-core drizzle-orm\n```\n\n## 사용법\n\n```typescript\nimport { DrizzleDomainPolicyStore, DrizzleInvitationStore } from \"@croco/invitation-drizzle\";\nimport { TxManager } from \"@croco/tx-core\";\n\nconst txManager = new TxManager(adapter, { defaultNesting: \"join\" });\nconst invitationStore = new DrizzleInvitationStore(db, txManager);\nconst policyStore = new DrizzleDomainPolicyStore(db, txManager);\n\nawait invitationStore.save({\n  id: \"inv-1\",\n  tenantId: \"tenant-1\",\n  inviterId: \"user-1\",\n  email: \"new@example.com\",\n  tokenHash: \"hash-123\",\n  type: \"email\",\n  role: \"member\",\n  status: \"pending\",\n  expiresAt: new Date(\"2026-12-31\"),\n  acceptedAt: null,\n  revokedAt: null,\n  createdAt: new Date(),\n});\n\nawait policyStore.save({\n  id: \"policy-1\",\n  tenantId: \"tenant-1\",\n  domain: \"example.com\",\n  role: \"member\",\n  enabled: true,\n  createdAt: new Date(),\n});\n\nconst invitation = await invitationStore.findByTokenHash(\"hash-123\");\nconst policy = await policyStore.findByTenantAndDomain(\"tenant-1\", \"example.com\");\n```\n\n## API 레퍼런스\n\n### `DrizzleInvitationStore`\n\n- `findById(id)`, ID로 초대를 조회합니다.\n- `findByTokenHash(tokenHash)`, 토큰 해시로 초대를 조회합니다.\n- `findByTenantAndEmail(tenantId, email)`, 테넌트와 이메일로 초대를 조회합니다.\n- `findAllByTenant(tenantId)`, 테넌트의 모든 초대를 반환합니다.\n- `save(invitation)`, 초대를 upsert로 저장합니다.\n- `updateStatus(id, status)`, 초대 상태를 갱신합니다.\n- `countPendingByTenant(tenantId, since)`, 기간 내 대기 초대 수를 반환합니다.\n\n### `DrizzleDomainPolicyStore`\n\n- `findByTenantAndDomain(tenantId, domain)`, 도메인 정책을 조회합니다.\n- `findAllByTenant(tenantId)`, 테넌트의 모든 정책을 조회합니다.\n- `save(policy)`, 도메인 정책을 upsert로 저장합니다.\n- `delete(tenantId, domain)`, 도메인 정책을 삭제합니다.\n\n### 스키마와 토큰\n\n- `invitations`, 초대 엔터티 스키마입니다.\n- `domainPolicies`, 도메인 정책 스키마입니다.\n- `DRIZZLE_INVITATION_TOKEN`, 초대 저장소용 DB 토큰입니다.\n- `DRIZZLE_DOMAIN_POLICY_TOKEN`, 도메인 정책 저장소용 DB 토큰입니다.\n","readmeFilename":"README.md"}