Skip to main content

@drakkar.software/starfish-entitlements

Starfish entitlements extension — gate collection access on a per-user feature-slug document. The server-side createEntitlementRoleEnricher reads a user's entitlement document and grants entitlement:<slug> roles; the client-side pullEntitlements reads the same document for UI gating.

Install

pnpm add @drakkar.software/starfish-client @drakkar.software/starfish-server @drakkar.software/starfish-entitlements

Client usage

import { pullEntitlements } from "@drakkar.software/starfish-entitlements"

const features = await pullEntitlements(client, userId)
// e.g. ["premium-package-1", "paid-cloud-sync"]

if (features.includes("paid-cloud-sync")) {
// unlock cloud sync UI
}

Server usage

import { createSyncRouter } from "@drakkar.software/starfish-server"
import { createEntitlementRoleEnricher } from "@drakkar.software/starfish-entitlements"

const router = createSyncRouter({
store,
config,
roleResolver,
roleEnricher: createEntitlementRoleEnricher({ store }),
})

Compose it alongside your own enrichers with composeEnrichers from @drakkar.software/starfish-server:

import { composeEnrichers, type RoleEnricher } from "@drakkar.software/starfish-server"
import { createEntitlementRoleEnricher } from "@drakkar.software/starfish-entitlements"

const teamEnricher: RoleEnricher = async (auth, params) =>
(await isTeamMember(auth.identity, params.teamId)) ? ["team-member"] : []

const roleEnricher = composeEnrichers(
teamEnricher,
createEntitlementRoleEnricher({ store }),
)

See docs/ts/entitlements/ for the full guide.