@lumra/entitlements
v0.1.1
Published
Lumra headless entitlement / access control logic
Readme
@lumra/entitlements
Access control for Lumra. Pure functions for checking, granting, and revoking video access. No database assumptions — you provide the storage.
Install
npm install @lumra/entitlementscheckAccess
import { checkAccess } from '@lumra/entitlements'
const result = await checkAccess({
userId: 'user-123',
resourceId: 'video-456',
getUserPurchases: (uid) => db.purchases.findAll({ where: { userId: uid } }),
})
console.log(result.allowed) // true | false
console.log(result.reason) // 'purchase' | 'expired' | 'not_found' | undefinedgrantAccess
import { grantAccess } from '@lumra/entitlements'
await grantAccess({
userId: 'user-123',
resourceId: 'video-456',
savePurchase: (purchase) => db.purchases.create(purchase),
expiresInMs: 48 * 60 * 60 * 1000, // optional — undefined = permanent
})revokeAccess
import { revokeAccess } from '@lumra/entitlements'
await revokeAccess({
userId: 'user-123',
resourceId: 'video-456',
deletePurchase: (uid, rid) => db.purchases.delete({ userId: uid, resourceId: rid }),
})Purchase type
interface Purchase {
userId: string
resourceId: string
grantedAt: number // Unix ms timestamp
expiresAt?: number // Unix ms — undefined = never expires
}Persist Purchase objects in any database (Postgres, MySQL, MongoDB, SQLite, Redis, etc.).
© 2026 Reel Foundry AU. All rights reserved.
MIT License — see LICENSE
