@auth-craft/tenant-access-control-dynamodb
v0.0.8
Published
DynamoDB implementation for tenant-access-control
Readme
@auth-craft/tenant-access-control-dynamodb
⚠️ Experimental / Internal Use
This package is published for convenience only.
- No stability guarantee
- Breaking changes may happen at any time
- No documentation
- No support
Use at your own risk.
DynamoDB implementation for @auth-craft/tenant-access-control.
Installation
npm install @auth-craft/tenant-access-control @auth-craft/tenant-access-control-dynamodbUsage
import { createTenantAccessSDK } from '@auth-craft/tenant-access-control';
import { createTenantAccessDynamoDBPlugin } from '@auth-craft/tenant-access-control-dynamodb';
// Create DynamoDB plugin
const plugin = createTenantAccessDynamoDBPlugin({
tableName: 'your-auth-table',
});
// Create SDK with DynamoDB implementation
const sdk = createTenantAccessSDK(plugin);
// Use SDK
const member = await sdk.getMember({ ... });Configuration
createTenantAccessDynamoDBPlugin(config)
Parameters:
interface TenantAccessDynamoDBConfig {
// DynamoDB table name (required)
tableName: string;
// Optional: Provide your own DynamoDB client
// If not provided, a new client will be created
client?: DynamoDBClient;
}With Custom Client
import { DynamoDBClient } from '@aws-sdk/client-dynamodb';
const client = new DynamoDBClient({
region: 'ap-southeast-1',
credentials: {
accessKeyId: '...',
secretAccessKey: '...',
},
});
const plugin = createTenantAccessDynamoDBPlugin({
tableName: 'auth-table',
client,
});With Local DynamoDB
const client = new DynamoDBClient({
endpoint: 'http://localhost:8000',
region: 'local',
credentials: {
accessKeyId: 'local',
secretAccessKey: 'local',
},
});
const plugin = createTenantAccessDynamoDBPlugin({
tableName: 'auth-table',
client,
});Table Schema
This package uses the same DynamoDB table schema as @auth-craft/database-plugin-dynamodb.
TenantMember Item
| Attribute | Value |
|-----------|-------|
| PK | TNT#{tenantId} |
| SK | AUD#{audience}#USR#{userId} |
| userStatus | invited | active | suspended | removed |
| roleIds | JSON stringified array |
| permMask | number |
| createdAt | Unix milliseconds |
| updatedAt | Unix milliseconds |
Session Item
Uses existing session items with:
tenantId- Tenant identifieraudience- Target audience- GSI_ActiveSessions for querying active sessions
Advanced Usage
Direct Repository Access
import {
DynamoDBTenantMemberRepository,
DynamoDBSessionRepository,
} from '@auth-craft/tenant-access-control-dynamodb';
import { DynamoDBClient } from '@aws-sdk/client-dynamodb';
const client = new DynamoDBClient({});
const tenantMemberRepo = new DynamoDBTenantMemberRepository(client, 'auth-table');
const sessionRepo = new DynamoDBSessionRepository(client, 'auth-table');
// Use repositories directly
const member = await tenantMemberRepo.get(tenantId, audience, userId);Dependencies
@auth-craft/tenant-access-control- SDK and interfaces@auth-craft/database-plugin-dynamodb- Key patterns and utilities@aws-sdk/client-dynamodb- AWS SDK DynamoDB client@aws-sdk/lib-dynamodb- AWS SDK DynamoDB Document client
License
MIT
