{"_id":"@auth-craft/tenant-access-control","_rev":"7-14bd35b09a9fc70e5014a0d9e8b951d1","name":"@auth-craft/tenant-access-control","dist-tags":{"latest":"0.0.8"},"versions":{"0.0.1":{"name":"@auth-craft/tenant-access-control","version":"0.0.1","license":"MIT","_id":"@auth-craft/tenant-access-control@0.0.1","maintainers":[{"name":"minhtaimc","email":"minhtaimc@gmail.com"}],"dist":{"shasum":"a5541a749ebb08844e8cb33a0e53885c9835f7ca","tarball":"https://registry.npmjs.org/@auth-craft/tenant-access-control/-/tenant-access-control-0.0.1.tgz","fileCount":8,"integrity":"sha512-jywwmI1YNPoz4uUkRyuaX1jcQ8mWzgVnv2XkWlpHUgOR+cJb/jqgszsEjFqpmqC2MlTXgeZSB7SEQ/FigcUXoQ==","signatures":[{"sig":"MEQCIEIHFuTjZZLCs2T8L8AlVcbr3WjWHw1UYrgz3ABWlpe7AiA+B49vOksOXHFKWAGdawnDSjpxaZwI2rUDuaQhhDsmrg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":51287},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"0f91d2230ede79d1cc5b135a914aa5e428995842","scripts":{"dev":"tsup --watch","build":"tsup","type-check":"tsc --noEmit"},"_npmUser":{"name":"minhtaimc","email":"minhtaimc@gmail.com"},"_npmVersion":"11.6.2","description":"Tenant access control SDK for managing user permissions within tenants","directories":{},"_nodeVersion":"24.11.1","dependencies":{"ts-micro-result":"^2.2.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","typescript":"^5.7.2","@auth-craft/tsup-config":"workspace:*"},"_npmOperationalInternal":{"tmp":"tmp/tenant-access-control_0.0.1_1768475792292_0.9679225061323684","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@auth-craft/tenant-access-control","version":"0.0.2","license":"MIT","_id":"@auth-craft/tenant-access-control@0.0.2","maintainers":[{"name":"minhtaimc","email":"minhtaimc@gmail.com"}],"dist":{"shasum":"4425f6411481982978931b10f337252bb40cbf8c","tarball":"https://registry.npmjs.org/@auth-craft/tenant-access-control/-/tenant-access-control-0.0.2.tgz","fileCount":8,"integrity":"sha512-10lNMCiGVGk3K9W0AoUxZczFma0mKx247tRIObMODjGjAiDWvYwnL9xNrEiBnmFRm4AedJVRPa1bfhEkXObXkA==","signatures":[{"sig":"MEQCIAiZIheS46QBqCsdpKcLGUkYw6XBREDPr2b9eAhOKt5YAiAy5wyUupOiB5N5Vm0X2gEcxxNiqIHyFTjFI7uGs+J84g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":51240},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"b05464d676bff3de8b3773b141511e49905892ae","scripts":{"dev":"tsup --watch","build":"tsup","type-check":"tsc --noEmit"},"_npmUser":{"name":"minhtaimc","email":"minhtaimc@gmail.com"},"_npmVersion":"11.6.2","description":"Tenant access control SDK for managing user permissions within tenants","directories":{},"_nodeVersion":"24.11.1","dependencies":{"ts-micro-result":"^2.2.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","typescript":"^5.7.2"},"_npmOperationalInternal":{"tmp":"tmp/tenant-access-control_0.0.2_1768541764120_0.02436329647907809","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@auth-craft/tenant-access-control","version":"0.0.3","license":"MIT","_id":"@auth-craft/tenant-access-control@0.0.3","maintainers":[{"name":"minhtaimc","email":"minhtaimc@gmail.com"}],"dist":{"shasum":"5f3c621d5f8de96b43d9c88b51b5c86274efef9a","tarball":"https://registry.npmjs.org/@auth-craft/tenant-access-control/-/tenant-access-control-0.0.3.tgz","fileCount":8,"integrity":"sha512-dQxmgK9JHzrnUPws0E2iYGIwXRTJZVLkZZVb6rX0zO182ibtgpLRT5rG9eWzJAybZx/zMt/CzFHpDRhU8ezjhA==","signatures":[{"sig":"MEQCIAfJYChorcGpxwfOv2/uMp/SowiVg6OpkmWULo1MoZY2AiBEAMzDYW3soIaOTVWOvcIi/c4aYgEbgK8F0Zx24/UHLg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":49262},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"07ecebb316c9c1ee0a1d1b812b11b89f159cfec5","scripts":{"dev":"tsup --watch","build":"tsup","type-check":"tsc --noEmit"},"_npmUser":{"name":"minhtaimc","email":"minhtaimc@gmail.com"},"_npmVersion":"11.6.2","description":"Tenant access control SDK for managing user permissions within tenants","directories":{},"_nodeVersion":"24.11.1","dependencies":{"ts-micro-result":"^2.2.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","typescript":"^5.7.2"},"_npmOperationalInternal":{"tmp":"tmp/tenant-access-control_0.0.3_1768752450774_0.34965339215427194","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"@auth-craft/tenant-access-control","version":"0.0.5","license":"MIT","_id":"@auth-craft/tenant-access-control@0.0.5","maintainers":[{"name":"minhtaimc","email":"minhtaimc@gmail.com"}],"dist":{"shasum":"df9d6f68419ec1cd8473312ad4bbcd71dbf02cd6","tarball":"https://registry.npmjs.org/@auth-craft/tenant-access-control/-/tenant-access-control-0.0.5.tgz","fileCount":8,"integrity":"sha512-5zhxDlCchXBSlhfFSXp5ZXIj069GtBfmIFID0aRVnGMXTua7O7X2kp+Y0Zpjx5tMQ/qaOOzMaKHblbTdEcBo7Q==","signatures":[{"sig":"MEUCIQC2Hm8echvo9die43wGwBk7RQmwrEtCyOcdriP3UKrkgwIgSpIFwQ3JUJKepol1Gv0EUwC6VK3MHSVpMb8Fq6Httx4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":49262},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"07ecebb316c9c1ee0a1d1b812b11b89f159cfec5","scripts":{"dev":"tsup --watch","build":"tsup","type-check":"tsc --noEmit"},"_npmUser":{"name":"minhtaimc","email":"minhtaimc@gmail.com"},"_npmVersion":"11.6.2","description":"Tenant access control SDK for managing user permissions within tenants","directories":{},"_nodeVersion":"24.11.1","dependencies":{"ts-micro-result":"^2.2.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","typescript":"^5.7.2"},"_npmOperationalInternal":{"tmp":"tmp/tenant-access-control_0.0.5_1768752712405_0.8259351295303021","host":"s3://npm-registry-packages-npm-production"}},"0.0.6":{"name":"@auth-craft/tenant-access-control","version":"0.0.6","license":"MIT","_id":"@auth-craft/tenant-access-control@0.0.6","maintainers":[{"name":"minhtaimc","email":"minhtaimc@gmail.com"}],"dist":{"shasum":"54578d6c177a2e2c4512d23dab16d61d187081d5","tarball":"https://registry.npmjs.org/@auth-craft/tenant-access-control/-/tenant-access-control-0.0.6.tgz","fileCount":8,"integrity":"sha512-FGsTmbrlCx+kTvqST3L6xXTL+kuaDElcVrecwsx7UOCWc9oM7HaMYmuH8iX2rswEAcpVlgv4GbBQEcN2bOH4pw==","signatures":[{"sig":"MEUCIFsxYx2z4Rku7sguW30MBu4xDXc8wVdyfG7J+dmvWQmsAiEA/zxB59Qj+P9S8UcGSDdmubRjOLS+ngiItT95n6rXOYA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50176},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"a03685d6e27c554d348c584aa3e9a62a0b356bc4","scripts":{"dev":"tsup --watch","build":"tsup","type-check":"tsc --noEmit"},"_npmUser":{"name":"minhtaimc","email":"minhtaimc@gmail.com"},"_npmVersion":"11.6.2","description":"Tenant access control SDK for managing user permissions within tenants","directories":{},"_nodeVersion":"24.11.1","dependencies":{"ts-micro-result":"^2.2.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","typescript":"^5.7.2"},"_npmOperationalInternal":{"tmp":"tmp/tenant-access-control_0.0.6_1768817495642_0.2517345776848918","host":"s3://npm-registry-packages-npm-production"}},"0.0.7":{"name":"@auth-craft/tenant-access-control","version":"0.0.7","license":"MIT","_id":"@auth-craft/tenant-access-control@0.0.7","maintainers":[{"name":"minhtaimc","email":"minhtaimc@gmail.com"}],"dist":{"shasum":"89bf622fa5b5327d5502131b02d4118bdcc44d66","tarball":"https://registry.npmjs.org/@auth-craft/tenant-access-control/-/tenant-access-control-0.0.7.tgz","fileCount":8,"integrity":"sha512-kT7SkhMRzmhDaeJZo3IbmGM7OeQED04QxbszfFNdTLTuslW47n/nLi4TfYKAls+XRiHNbrlhmtGml/P8JqawVA==","signatures":[{"sig":"MEUCIQDszyn4Z4Qj0cRFfZf5J+12Ctmc/AGrLDFQcza5hipZlwIgLVkjls5vwmRZYKx0PIFg8xbTGFUqqiGtw25wRe383SQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":49629},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"2f2a0293d1427e2372bb0b56788119b888830add","scripts":{"dev":"tsup --watch","build":"tsup","type-check":"tsc --noEmit"},"_npmUser":{"name":"minhtaimc","email":"minhtaimc@gmail.com"},"_npmVersion":"11.6.2","description":"Tenant access control SDK for managing user permissions within tenants","directories":{},"_nodeVersion":"24.11.1","dependencies":{"ts-micro-result":"^3.2.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","typescript":"^5.7.2"},"_npmOperationalInternal":{"tmp":"tmp/tenant-access-control_0.0.7_1768963125260_0.8182237394465364","host":"s3://npm-registry-packages-npm-production"}},"0.0.8":{"name":"@auth-craft/tenant-access-control","version":"0.0.8","license":"MIT","description":"Tenant access control SDK for managing user permissions within tenants","type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"build":"tsup","dev":"tsup --watch","type-check":"tsc --noEmit"},"dependencies":{"ts-micro-result":"^3.3.0"},"devDependencies":{"tsup":"^8.3.5","typescript":"^5.7.2"},"gitHead":"2f2a0293d1427e2372bb0b56788119b888830add","_id":"@auth-craft/tenant-access-control@0.0.8","_nodeVersion":"24.11.1","_npmVersion":"11.6.2","dist":{"integrity":"sha512-dYJfRJS855EQf3kvUMTnTFboP1MIPxnsUly8/3cbRJjn/BSiAMcVwCMUEf9mx16wce0RYrgfcCoPUggy/b2Nhg==","shasum":"38e7fb621f8a0f8b25606c9f451653d798eb7564","tarball":"https://registry.npmjs.org/@auth-craft/tenant-access-control/-/tenant-access-control-0.0.8.tgz","fileCount":8,"unpackedSize":49629,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIFo+79DihcGlKp6mCXXG6GfxehGFtCEzGmSgUoGVmo2fAiBngzO+dG6hxhztXXZztfAL8520al/qR7+Nwuaa0Hy4lQ=="}]},"_npmUser":{"name":"minhtaimc","email":"minhtaimc@gmail.com"},"directories":{},"maintainers":[{"name":"minhtaimc","email":"minhtaimc@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/tenant-access-control_0.0.8_1768963199592_0.8275878659291953"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-15T11:16:32.166Z","modified":"2026-01-21T02:39:59.885Z","0.0.1":"2026-01-15T11:16:32.422Z","0.0.2":"2026-01-16T05:36:04.270Z","0.0.3":"2026-01-18T16:07:30.924Z","0.0.5":"2026-01-18T16:11:52.585Z","0.0.6":"2026-01-19T10:11:35.783Z","0.0.7":"2026-01-21T02:38:45.409Z","0.0.8":"2026-01-21T02:39:59.759Z"},"license":"MIT","description":"Tenant access control SDK for managing user permissions within tenants","maintainers":[{"name":"minhtaimc","email":"minhtaimc@gmail.com"}],"readme":"# @auth-craft/tenant-access-control\r\n\r\n> ⚠️ **Experimental / Internal Use**\r\n>\r\n> This package is published for convenience only.\r\n>\r\n> - No stability guarantee\r\n> - Breaking changes may happen at any time\r\n> - No documentation\r\n> - No support\r\n>\r\n> Use at your own risk.\r\n\r\n---\r\n\r\nTenant Access Control SDK for managing user permissions within tenants.\r\n\r\n## Installation\r\n\r\n```bash\r\nnpm install @auth-craft/tenant-access-control @auth-craft/tenant-access-control-dynamodb\r\n```\r\n\r\n## Quick Start\r\n\r\n```typescript\r\nimport {\r\n  createTenantAccessSDK,\r\n  type TenantId,\r\n  type UserId,\r\n} from '@auth-craft/tenant-access-control';\r\nimport { createTenantAccessDynamoDBPlugin } from '@auth-craft/tenant-access-control-dynamodb';\r\n\r\n// 1. Create DynamoDB plugin\r\nconst plugin = createTenantAccessDynamoDBPlugin({\r\n  tableName: 'your-auth-table',\r\n});\r\n\r\n// 2. Create SDK\r\nconst tenantAccess = createTenantAccessSDK(plugin);\r\n\r\n// 3. Use SDK\r\nconst member = await tenantAccess.getMember({\r\n  tenantId: 'org-abc' as TenantId,\r\n  userId: 'user-123' as UserId,\r\n});\r\n```\r\n\r\n## API\r\n\r\n### `createTenantAccessSDK(deps)`\r\n\r\nCreates a TenantAccessSDK instance.\r\n\r\n**Parameters:**\r\n- `deps.tenantMemberRepository` - TenantMemberRepository implementation\r\n- `deps.sessionRepository` - SessionRepository implementation\r\n\r\n**Returns:** `TenantAccessSDK`\r\n\r\n### SDK Methods\r\n\r\n#### `getMember(input)`\r\n\r\nGet member info (limited fields: status, role, permMask).\r\n\r\n```typescript\r\nconst result = await sdk.getMember({\r\n  tenantId: 'org-abc' as TenantId,\r\n  userId: 'user-123' as UserId,\r\n});\r\n\r\nif (result.isOkWithData()) {\r\n  console.log(result.data);\r\n  // { status: 'active', role: 'editor', permMask: 12 }\r\n}\r\n```\r\n\r\n#### `addMember(input)`\r\n\r\nAdd a user to tenant.\r\n\r\n```typescript\r\nconst result = await sdk.addMember({\r\n  tenantId: 'org-abc' as TenantId,\r\n  userId: 'user-456' as UserId,\r\n  status: 'active',\r\n  role: 'editor',      // optional\r\n  permMask: 0b1100,    // optional\r\n});\r\n```\r\n\r\n#### `updateMember(input)`\r\n\r\nUpdate member status, role, or permMask.\r\n\r\n```typescript\r\nconst result = await sdk.updateMember({\r\n  tenantId: 'org-abc' as TenantId,\r\n  userId: 'user-456' as UserId,\r\n  status: 'suspended', // optional\r\n  role: 'viewer',      // optional\r\n  permMask: 0b0100,    // optional\r\n});\r\n```\r\n\r\n#### `removeMember(input)`\r\n\r\nRemove member from tenant.\r\n\r\n```typescript\r\nconst result = await sdk.removeMember({\r\n  tenantId: 'org-abc' as TenantId,\r\n  userId: 'user-456' as UserId,\r\n});\r\n```\r\n\r\n#### `revokeSessionsByTenant(input)`\r\n\r\nRevoke all sessions for a user in specific tenant.\r\n\r\n```typescript\r\nconst result = await sdk.revokeSessionsByTenant({\r\n  tenantId: 'org-abc' as TenantId,\r\n  userId: 'user-456' as UserId,\r\n});\r\n\r\nif (result.isOkWithData()) {\r\n  console.log(`Revoked ${result.data} sessions`);\r\n}\r\n```\r\n\r\n## Types\r\n\r\n### Branded Types\r\n\r\n```typescript\r\ntype TenantId = string & { readonly __brand: 'TenantId' };\r\ntype UserId = string & { readonly __brand: 'UserId' };\r\ntype SessionId = string & { readonly __brand: 'SessionId' };\r\n```\r\n\r\n### TenantMemberStatus\r\n\r\n```typescript\r\ntype TenantMemberStatus = 'invited' | 'active' | 'suspended' | 'removed';\r\n```\r\n\r\n### TenantMemberInfo\r\n\r\nLimited info returned by `getMember()`:\r\n\r\n```typescript\r\ninterface TenantMemberInfo {\r\n  status: TenantMemberStatus;\r\n  role?: string;\r\n  permMask?: number;\r\n}\r\n```\r\n\r\n## Error Handling\r\n\r\nAll methods return `Result<T>` from `ts-micro-result`.\r\n\r\n```typescript\r\nimport { tenantAccessErrors } from '@auth-craft/tenant-access-control';\r\n\r\nconst result = await sdk.getMember({ ... });\r\n\r\nif (result.isError()) {\r\n  const error = result.errors[0];\r\n\r\n  switch (error?.code) {\r\n    case 'TENANT_MEMBER_NOT_FOUND':\r\n      // Handle not found\r\n      break;\r\n    case 'TENANT_MEMBER_ALREADY_EXISTS':\r\n      // Handle duplicate\r\n      break;\r\n    case 'TENANT_ACCESS_DATABASE_ERROR':\r\n      // Handle database error\r\n      break;\r\n  }\r\n}\r\n```\r\n\r\n## Repository Interfaces\r\n\r\nFor custom implementations:\r\n\r\n```typescript\r\ninterface TenantMemberRepository {\r\n  get(tenantId, userId): Promise<Result<TenantMember>>;\r\n  create(data): Promise<Result<void>>;\r\n  updatePermissions(tenantId, userId, updates): Promise<Result<void>>;\r\n  updateStatus(tenantId, userId, status): Promise<Result<void>>;\r\n  remove(tenantId, userId): Promise<Result<void>>;\r\n}\r\n\r\ninterface SessionRepository {\r\n  findActiveByUserId(userId, options?): Promise<PaginatedResult<SessionInfo>>;\r\n  revokeBatch(sessionIds): Promise<Result<number>>;\r\n}\r\n```\r\n\r\n## License\r\n\r\nMIT\r\n","readmeFilename":"README.md"}