/** * @typedef {'hex' | 'base64url' | 'base58' | 'crockford' | 'ulid' | 'uuid4' | 'uuid7' | 'alphanumeric' | 'prefixed' | 'structured'} OpaqueTokenFormat */ /** * @typedef {object} GenerateOptions * @property {OpaqueTokenFormat} format * @property {number} [bytes=32] Entropy size for byte-based generators (`hex`, `base64url`, `base58`). * @property {number} [length] Output length for `alphanumeric` — defaults to `bytes` if omitted. * @property {keyof typeof GENERATORS} [generator='hex'] Which generator produces the entropy segment of a `prefixed` / `structured` token. * @property {string} [prefix] Required for `format: 'prefixed'` — e.g. `'usr'`. * @property {string} [version] Required for `format: 'structured'` — e.g. `'v1'`. * @property {string} [type] Required for `format: 'structured'` — a literal label embedded in the token, e.g. `'ref'`. * @property {string} [separator='_'] Joins the segments of `prefixed` / `structured` tokens. */ /** * Generate an opaque token. `format` is either a bare generator name * (`'hex'`, `'uuid4'`, …) or a composite shape (`'prefixed'`, * `'structured'`) that wraps a generator's output with a literal label. * * @param {GenerateOptions} options * @returns {string} * * @example * generate({ format: 'hex', bytes: 32 }) * // → '3f9a...' (64 hex chars) * * generate({ format: 'prefixed', prefix: 'usr' }) * // → 'usr_3f9a...' (generator defaults to 'hex') * * generate({ format: 'structured', version: 'v1', type: 'ref', generator: 'ulid', separator: '.' }) * // → 'v1.ref.01ARZ3NDEKTSV4RRFFQ69G5FAV' */ export function generate(options: GenerateOptions): string; export type OpaqueTokenFormat = "hex" | "base64url" | "base58" | "crockford" | "ulid" | "uuid4" | "uuid7" | "alphanumeric" | "prefixed" | "structured"; export type GenerateOptions = { format: OpaqueTokenFormat; /** * Entropy size for byte-based generators (`hex`, `base64url`, `base58`). */ bytes?: number | undefined; /** * Output length for `alphanumeric` — defaults to `bytes` if omitted. */ length?: number | undefined; /** * Which generator produces the entropy segment of a `prefixed` / `structured` token. */ generator?: string | undefined; /** * Required for `format: 'prefixed'` — e.g. `'usr'`. */ prefix?: string | undefined; /** * Required for `format: 'structured'` — e.g. `'v1'`. */ version?: string | undefined; /** * Required for `format: 'structured'` — a literal label embedded in the token, e.g. `'ref'`. */ type?: string | undefined; /** * Joins the segments of `prefixed` / `structured` tokens. */ separator?: string | undefined; };