@authup/access 1.0.0-beta.26 → 1.0.0-beta.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/dist/index.cjs +131 -131
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.mjs +131 -131
  4. package/dist/index.mjs.map +1 -1
  5. package/dist/permission/types.d.ts +2 -2
  6. package/dist/permission/types.d.ts.map +1 -1
  7. package/dist/policy/built-in/attribute-names/evaluator.d.ts +4 -4
  8. package/dist/policy/built-in/attribute-names/evaluator.d.ts.map +1 -1
  9. package/dist/policy/built-in/attributes/evaluator.d.ts +3 -3
  10. package/dist/policy/built-in/attributes/evaluator.d.ts.map +1 -1
  11. package/dist/policy/built-in/composite/evaluator.d.ts +3 -3
  12. package/dist/policy/built-in/composite/evaluator.d.ts.map +1 -1
  13. package/dist/policy/built-in/date/evaluator.d.ts +3 -3
  14. package/dist/policy/built-in/date/evaluator.d.ts.map +1 -1
  15. package/dist/policy/built-in/identity/evaluator.d.ts +3 -3
  16. package/dist/policy/built-in/identity/evaluator.d.ts.map +1 -1
  17. package/dist/policy/built-in/permission-binding/module.d.ts +4 -4
  18. package/dist/policy/built-in/permission-binding/module.d.ts.map +1 -1
  19. package/dist/policy/built-in/realm-match/evaluator.d.ts +3 -3
  20. package/dist/policy/built-in/realm-match/evaluator.d.ts.map +1 -1
  21. package/dist/policy/built-in/time/evaluator.d.ts +3 -3
  22. package/dist/policy/built-in/time/evaluator.d.ts.map +1 -1
  23. package/dist/policy/evaluator/data/validator.d.ts +2 -2
  24. package/dist/policy/evaluator/data/validator.d.ts.map +1 -1
  25. package/dist/policy/evaluator/types.d.ts +11 -11
  26. package/dist/policy/evaluator/types.d.ts.map +1 -1
  27. package/dist/policy/types.d.ts +1 -1
  28. package/dist/policy/types.d.ts.map +1 -1
  29. package/package.json +8 -8
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/policy/error/module.ts","../src/policy/helpers/invert.ts","../src/policy/built-in/constants.ts","../src/policy/built-in/attribute-names/validator.ts","../src/policy/built-in/attribute-names/evaluator.ts","../src/policy/built-in/attributes/define.ts","../src/policy/built-in/attributes/validator.ts","../src/policy/built-in/attributes/evaluator.ts","../src/constants.ts","../src/policy/evaluator/data/identity/validator.ts","../src/policy/evaluator/data/permission/validator.ts","../src/policy/evaluator/data/validator.ts","../src/policy/evaluator/evaluate.ts","../src/policy/built-in/composite/helper.ts","../src/policy/built-in/composite/validator.ts","../src/policy/built-in/composite/evaluator.ts","../src/policy/built-in/date/validator.ts","../src/policy/built-in/date/evaluator.ts","../src/policy/built-in/identity/validator.ts","../src/policy/built-in/identity/evaluator.ts","../src/policy/built-in/permission-binding/validator.ts","../src/policy/built-in/permission-binding/module.ts","../src/policy/built-in/realm-match/validator.ts","../src/policy/built-in/realm-match/evaluator.ts","../src/policy/built-in/time/constants.ts","../src/policy/built-in/time/helpers.ts","../src/policy/built-in/time/validator.ts","../src/policy/built-in/time/evaluator.ts","../src/policy/built-in/define.ts","../src/policy/engine/module.ts","../src/permission/error/module.ts","../src/permission/helpers/key.ts","../src/permission/helpers/equal.ts","../src/permission/helpers/merge.ts","../src/permission/provider/memory.ts","../src/permission/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { AuthupError, ErrorCode } from '@authup/errors';\n\nexport class PolicyError extends AuthupError {\n constructor(message?: string, code?: string | null) {\n super({ message, code });\n }\n\n static evaluatorNotFound(type: string) {\n return new PolicyError(\n `No evaluator is registered to handle the policy: ${type}`,\n ErrorCode.POLICY_EVALUATOR_NOT_FOUND,\n );\n }\n\n static evaluatorNotProcessable() {\n throw new PolicyError(\n 'The evaluator can not process the policy.',\n ErrorCode.POLICY_EVALUATOR_NOT_PROCESSABLE,\n );\n }\n\n static evaluatorContextInvalid() {\n throw new PolicyError(\n 'The evaluator context is not valid.',\n ErrorCode.POLICY_EVALUATOR_CONTEXT_INVALID,\n );\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\ntype InvertFn = (input: boolean) => boolean;\n\nexport function maybeInvertPolicyOutcome(\n outcome: boolean,\n invert?: boolean | InvertFn,\n) {\n if (typeof invert === 'undefined') {\n return outcome;\n }\n\n if (typeof invert === 'function') {\n return invert(outcome);\n }\n\n if (!invert) {\n return outcome;\n }\n\n return !outcome;\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum BuiltInPolicyType {\n /**\n * Bundles different policies.\n */\n COMPOSITE = 'composite',\n /**\n * Date Based Access Control (DBAC)\n */\n DATE = 'date',\n /**\n * Time Based Access Control (TBAC)\n */\n TIME = 'time',\n /**\n * Attribute Name Based Access Control (ANBAC)\n */\n ATTRIBUTE_NAMES = 'attributeNames',\n /**\n * Attribute Based Access Control (ABAC)\n */\n ATTRIBUTES = 'attributes',\n /**\n * Realm of Identity is for attribute realm.\n */\n REALM_MATCH = 'realmMatch',\n\n /**\n * Restriction based on identity (type, id, ...)\n */\n IDENTITY = 'identity',\n\n /**\n * Restriction based on a binding between identity <-> permission\n */\n PERMISSION_BINDING = 'permissionBinding',\n\n // Location (LBAC)\n // Device (DBAC)\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { createValidator } from '@validup/adapter-zod';\nimport { Container } from 'validup';\nimport { z } from 'zod';\nimport type { AttributeNamesPolicy } from './types';\n\nexport class AttributeNamesPolicyValidator extends Container<AttributeNamesPolicy> {\n initialize() {\n super.initialize();\n\n this.mount(\n 'names',\n createValidator(\n z.array(\n z.string()\n .min(3)\n .max(128),\n ),\n ),\n );\n\n this.mount(\n 'invert',\n createValidator(\n z.boolean()\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ),\n );\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { flattenObject, isObject } from '@authup/kit';\nimport { PolicyError } from '../../error';\nimport type { PolicyEvaluateContext, PolicyEvaluator } from '../../evaluator';\nimport { maybeInvertPolicyOutcome } from '../../helpers';\nimport type { PolicyData, PolicyWithType } from '../../types';\nimport { BuiltInPolicyType } from '../constants';\nimport type { AttributeNamesPolicy } from './types';\nimport { AttributeNamesPolicyValidator } from './validator';\n\nexport class AttributeNamesPolicyEvaluator implements PolicyEvaluator<AttributeNamesPolicy> {\n protected validator : AttributeNamesPolicyValidator;\n\n constructor() {\n this.validator = new AttributeNamesPolicyValidator();\n }\n\n async can(ctx: PolicyEvaluateContext<PolicyWithType>) : Promise<boolean> {\n return ctx.spec.type === BuiltInPolicyType.ATTRIBUTE_NAMES;\n }\n\n async validateSpecification(ctx: PolicyEvaluateContext<PolicyWithType>) : Promise<AttributeNamesPolicy> {\n return this.validator.run(ctx.spec);\n }\n\n async validateData(ctx: PolicyEvaluateContext<AttributeNamesPolicy>) : Promise<PolicyData> {\n if (!isObject(ctx.data.attributes)) {\n throw PolicyError.evaluatorContextInvalid();\n }\n\n return ctx.data;\n }\n\n async evaluate(ctx: PolicyEvaluateContext<AttributeNamesPolicy, PolicyData>): Promise<boolean> {\n if (!ctx.data.attributes) {\n throw PolicyError.evaluatorContextInvalid();\n }\n\n const attributes = flattenObject(ctx.data.attributes);\n const keys = Object.keys(attributes);\n for (let i = 0; i < keys.length; i++) {\n const index = ctx.spec.names.indexOf(keys[i]);\n if (index === -1) {\n return maybeInvertPolicyOutcome(false, ctx.spec.invert);\n }\n }\n\n return maybeInvertPolicyOutcome(true, ctx.spec.invert);\n }\n}\n","/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { AttributesPolicy } from './types';\n\nexport function defineAttributesPolicy<\n T extends Record<string, any> = Record<string, any>,\n>(\n data: AttributesPolicy<T>,\n) : AttributesPolicy<T> {\n return data;\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { createValidator } from '@validup/adapter-zod';\nimport { Container } from 'validup';\nimport { z } from 'zod';\nimport type { AttributesPolicy } from './types';\n\nexport class AttributesPolicyValidator<\n T extends Record<string, any> = Record<string, any>,\n> extends Container<AttributesPolicy<T>> {\n initialize() {\n super.initialize();\n\n this.mount(\n 'query',\n createValidator(\n z.object({})\n .passthrough(),\n ),\n );\n\n this.mount(\n 'invert',\n createValidator(\n z.boolean()\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ),\n );\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { guard } from '@ucast/mongo2js';\nimport { isObject } from '@authup/kit';\nimport { PolicyError } from '../../error';\nimport type { PolicyEvaluateContext, PolicyEvaluator } from '../../evaluator';\nimport { maybeInvertPolicyOutcome } from '../../helpers';\nimport type { PolicyData, PolicyWithType } from '../../types';\nimport { BuiltInPolicyType } from '../constants';\nimport type { AttributesPolicy } from './types';\nimport { AttributesPolicyValidator } from './validator';\n\nexport class AttributesPolicyEvaluator<\n T extends Record<string, any> = Record<string, any>,\n> implements PolicyEvaluator<AttributesPolicy<T>> {\n protected validator : AttributesPolicyValidator<T>;\n\n constructor() {\n this.validator = new AttributesPolicyValidator<T>();\n }\n\n async can(\n ctx: PolicyEvaluateContext<PolicyWithType>,\n ) : Promise<boolean> {\n return ctx.spec.type === BuiltInPolicyType.ATTRIBUTES;\n }\n\n async validateSpecification(ctx: PolicyEvaluateContext) : Promise<AttributesPolicy<T>> {\n return this.validator.run(ctx.spec);\n }\n\n async validateData(ctx: PolicyEvaluateContext<AttributesPolicy<T>>) : Promise<PolicyData> {\n if (!isObject(ctx.data.attributes)) {\n throw PolicyError.evaluatorContextInvalid();\n }\n\n return ctx.data;\n }\n\n async evaluate(ctx: PolicyEvaluateContext<AttributesPolicy<T>>): Promise<boolean> {\n if (!ctx.data.attributes) {\n throw PolicyError.evaluatorContextInvalid();\n }\n\n this.fixQuery(ctx.spec.query);\n\n const testIt = guard<T>(ctx.spec.query);\n return maybeInvertPolicyOutcome(testIt(ctx.data.attributes as T), ctx.spec.invert);\n }\n\n protected fixQuery(query: Record<string, any>) {\n const keys = Object.keys(query);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const value = query[key];\n\n if (isObject(value) || Array.isArray(value)) {\n this.fixQuery(value);\n continue;\n }\n\n if (\n key === '$regex' &&\n typeof value === 'string'\n ) {\n const fragments = value.match(/\\/(.*?)\\/([a-z]*)?$/i);\n if (fragments) {\n query[key] = new RegExp(fragments[1], fragments[2]);\n }\n }\n }\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum DecisionStrategy {\n /**\n * One or more positive\n */\n AFFIRMATIVE = 'affirmative',\n /**\n * All positive\n */\n UNANIMOUS = 'unanimous',\n /**\n * More positive than negative\n */\n CONSENSUS = 'consensus',\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { createValidator } from '@validup/adapter-zod';\nimport { Container } from 'validup';\nimport { z } from 'zod';\nimport type { PolicyIdentity } from '../../../types';\n\nexport class PolicyDataIdentityValidator extends Container<PolicyIdentity> {\n initialize() {\n super.initialize();\n\n this.mount(\n 'type',\n createValidator(\n z.string().min(3).max(128),\n ),\n );\n\n this.mount(\n 'id',\n createValidator(\n z.string().uuid(),\n ),\n );\n\n this.mount(\n 'clientId',\n createValidator(\n z.string().uuid()\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ),\n );\n\n this.mount(\n 'realmId',\n createValidator(\n z.string().uuid()\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ),\n );\n\n this.mount(\n 'realmName',\n createValidator(\n z.string().min(3).max(128)\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ),\n );\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { createValidator } from '@validup/adapter-zod';\nimport { Container } from 'validup';\nimport { z } from 'zod';\nimport type { PermissionItem } from '../../../../permission';\n\nexport class PolicyDataPermissionValidator extends Container<PermissionItem> {\n initialize() {\n super.initialize();\n\n this.mount('name', createValidator(\n z.string()\n .min(3)\n .max(256),\n ));\n\n this.mount('clientId', createValidator(\n z.string().uuid()\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ));\n\n this.mount('realmId', createValidator(\n z.string().uuid()\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ));\n\n this.mount('policy', createValidator(z.object({\n type: z.string(),\n }).optional()));\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { createValidator } from '@validup/adapter-zod';\nimport { Container } from 'validup';\nimport { z } from 'zod';\nimport type { PolicyData } from '../../types';\nimport { PolicyDataIdentityValidator } from './identity';\nimport { PolicyDataPermissionValidator } from './permission';\n\nexport class PolicyDataValidator extends Container<PolicyData> {\n initialize() {\n super.initialize();\n\n // todo: optionalValue should be null\n const identity = new PolicyDataIdentityValidator();\n this.mount(\n 'identity',\n {\n optional: true,\n optionalValue: 'undefined',\n optionalInclude: true,\n },\n identity,\n );\n\n // todo: optionalValue should be null\n const permission = new PolicyDataPermissionValidator();\n this.mount(\n 'permission',\n {\n optional: true,\n optionalValue: 'undefined',\n optionalInclude: true,\n },\n permission,\n );\n\n this.mount('attributes', createValidator(z.object({}).optional()));\n\n this.mount('dateTime', createValidator(z.date().or(z.string()).or(z.number()).optional()));\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { PolicyError } from '../error';\nimport { maybeInvertPolicyOutcome } from '../helpers';\nimport type { PolicyWithType } from '../types';\nimport type { PolicyEvaluateContext } from './types';\n\nexport async function evaluatePolicy(ctx: PolicyEvaluateContext<PolicyWithType>) : Promise<boolean> {\n if (\n ctx.options.exclude &&\n ctx.options.exclude.length > 0 &&\n ctx.options.exclude.indexOf(ctx.spec.type) !== -1\n ) {\n if (typeof ctx.spec.invert === 'boolean') {\n return maybeInvertPolicyOutcome(true, ctx.spec.invert);\n }\n\n return true;\n }\n\n if (\n ctx.options.include &&\n ctx.options.include.length > 0 &&\n ctx.options.include.indexOf(ctx.spec.type) === -1\n ) {\n if (typeof ctx.spec.invert === 'boolean') {\n return maybeInvertPolicyOutcome(true, ctx.spec.invert);\n }\n\n return true;\n }\n\n const evaluator = ctx.evaluators[ctx.spec.type];\n if (!evaluator) {\n throw PolicyError.evaluatorNotFound(ctx.spec.type);\n }\n\n try {\n const canEvaluate = await evaluator.can(ctx);\n if (canEvaluate) {\n const spec = await evaluator.validateSpecification(ctx);\n const data = await evaluator.validateData(ctx);\n\n return await evaluator.evaluate({\n ...ctx,\n data,\n spec,\n });\n }\n } catch (e) {\n if (e instanceof PolicyError) {\n throw e;\n }\n\n if (e instanceof Error) {\n const error = new PolicyError(e.message);\n error.stack = e.stack;\n throw error;\n }\n\n throw new PolicyError();\n }\n\n throw PolicyError.evaluatorNotProcessable();\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { PolicyWithType } from '../../types';\nimport { BuiltInPolicyType } from '../constants';\nimport type { CompositePolicy } from './types';\n\nexport function isCompositePolicy(\n input: PolicyWithType,\n) : input is PolicyWithType<CompositePolicy> {\n return input.type === BuiltInPolicyType.COMPOSITE;\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { createValidator } from '@validup/adapter-zod';\nimport { Container } from 'validup';\nimport { z } from 'zod';\nimport { DecisionStrategy } from '../../../constants';\nimport type { CompositePolicy } from './types';\n\nexport class CompositePolicyValidator extends Container<CompositePolicy> {\n initialize() {\n super.initialize();\n\n this.mount(\n 'decisionStrategy',\n createValidator(\n z.nativeEnum(DecisionStrategy)\n\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ),\n );\n\n this.mount(\n 'children',\n createValidator(\n z.array(z.object({\n type: z.string().min(3),\n }).passthrough()),\n ),\n );\n\n this.mount(\n 'invert',\n createValidator(\n z.boolean()\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ),\n );\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { DecisionStrategy } from '../../../constants';\nimport type { PolicyEvaluateContext, PolicyEvaluator } from '../../evaluator';\nimport { evaluatePolicy } from '../../evaluator';\nimport { maybeInvertPolicyOutcome } from '../../helpers';\nimport type { PolicyData, PolicyWithType } from '../../types';\nimport { isCompositePolicy } from './helper';\nimport type { CompositePolicy } from './types';\nimport { CompositePolicyValidator } from './validator';\n\nexport class CompositePolicyEvaluator implements PolicyEvaluator<CompositePolicy> {\n protected validator : CompositePolicyValidator;\n\n constructor() {\n this.validator = new CompositePolicyValidator();\n }\n\n async can(\n ctx: PolicyEvaluateContext<PolicyWithType>,\n ) : Promise<boolean> {\n return isCompositePolicy(ctx.spec);\n }\n\n async validateSpecification(ctx: PolicyEvaluateContext) : Promise<CompositePolicy> {\n return this.validator.run(ctx.spec);\n }\n\n async validateData(ctx: PolicyEvaluateContext<CompositePolicy>) : Promise<PolicyData> {\n return ctx.data;\n }\n\n async evaluate(ctx: PolicyEvaluateContext<CompositePolicy>): Promise<boolean> {\n let count = 0;\n\n const decisionStrategy = ctx.spec.decisionStrategy ??\n DecisionStrategy.UNANIMOUS;\n\n for (let i = 0; i < ctx.spec.children.length; i++) {\n const childPolicy = ctx.spec.children[i];\n let outcome : boolean;\n\n if (isCompositePolicy(childPolicy)) {\n outcome = await this.evaluate({\n ...ctx,\n spec: childPolicy,\n });\n } else {\n outcome = await evaluatePolicy({\n ...ctx,\n spec: childPolicy,\n });\n }\n\n if (outcome) {\n if (decisionStrategy === DecisionStrategy.AFFIRMATIVE) {\n return maybeInvertPolicyOutcome(true, ctx.spec.invert);\n }\n\n count++;\n } else {\n if (decisionStrategy === DecisionStrategy.UNANIMOUS) {\n return maybeInvertPolicyOutcome(false, ctx.spec.invert);\n }\n\n count--;\n }\n }\n\n return maybeInvertPolicyOutcome(count > 0, ctx.spec.invert);\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { createValidator } from '@validup/adapter-zod';\nimport { Container } from 'validup';\nimport { z } from 'zod';\nimport type { DatePolicy } from './types';\n\nexport class DatePolicyValidator extends Container<DatePolicy> {\n initialize() {\n super.initialize();\n\n this.mount('start', createValidator(\n z.date()\n .or(z.string().date())\n .or(z.number())\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ));\n this.mount('end', createValidator(\n z.date()\n .or(z.string().date())\n .or(z.number())\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ));\n\n this.mount('invert', createValidator(\n z.boolean()\n .or(z.undefined())\n .or(z.null())\n .optional(),\n ));\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { PolicyEvaluateContext, PolicyEvaluator } from '../../evaluator';\nimport { maybeInvertPolicyOutcome } from '../../helpers';\nimport type { PolicyData, PolicyWithType } from '../../types';\nimport { BuiltInPolicyType } from '../constants';\nimport type { DatePolicy } from './types';\nimport { DatePolicyValidator } from './validator';\n\nfunction normalizeDate(input: Date) {\n return new Date(input.getFullYear(), input.getMonth(), input.getDate());\n}\n\nfunction toDate(input: Date | string | number) : Date {\n if (typeof input === 'string') {\n return new Date(input);\n }\n\n if (typeof input === 'number') {\n return new Date(input);\n }\n\n return input;\n}\n\nexport class DatePolicyEvaluator implements PolicyEvaluator<DatePolicy> {\n protected validator : DatePolicyValidator;\n\n constructor() {\n this.validator = new DatePolicyValidator();\n }\n\n async can(\n ctx: PolicyEvaluateContext<PolicyWithType>,\n ) : Promise<boolean> {\n return ctx.spec.type === BuiltInPolicyType.DATE;\n }\n\n async validateSpecification(ctx: PolicyEvaluateContext) : Promise<DatePolicy> {\n return this.validator.run(ctx.spec);\n }\n\n async validateData(ctx: PolicyEvaluateContext<DatePolicy>) : Promise<PolicyData> {\n return ctx.data;\n }\n\n async evaluate(ctx: PolicyEvaluateContext<DatePolicy>) : Promise<boolean> {\n let now : Date;\n if (ctx.data.dateTime) {\n now = normalizeDate(toDate(ctx.data.dateTime));\n } else {\n now = normalizeDate(new Date());\n }\n\n if (ctx.spec.start) {\n const start = normalizeDate(toDate(ctx.spec.start));\n if (now < start) {\n return maybeInvertPolicyOutcome(false, ctx.spec.invert);\n }\n }\n\n if (ctx.spec.end) {\n const end = normalizeDate(toDate(ctx.spec.end));\n if (now > end) {\n return maybeInvertPolicyOutcome(false, ctx.spec.invert);\n }\n }\n\n return maybeInvertPolicyOutcome(true, ctx.spec.invert);\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { createValidator } from '@validup/adapter-zod';\nimport { Container } from 'validup';\nimport { z } from 'zod';\nimport type { IdentityPolicy } from './types';\n\nexport class IdentityPolicyValidator extends Container<IdentityPolicy> {\n protected initialize() {\n this.mount(\n 'types',\n createValidator(\n z.array(z.string())\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ),\n );\n\n this.mount(\n 'invert',\n createValidator(\n z.boolean()\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ),\n );\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from '@authup/kit';\nimport type { PolicyEvaluateContext, PolicyEvaluator } from '../../evaluator';\nimport type { PolicyData, PolicyWithType } from '../../types';\nimport { maybeInvertPolicyOutcome } from '../../helpers';\nimport { BuiltInPolicyType } from '../constants';\nimport type { IdentityPolicy } from './types';\nimport { IdentityPolicyValidator } from './validator';\n\nexport class IdentityPolicyEvaluator implements PolicyEvaluator<IdentityPolicy> {\n protected validator : IdentityPolicyValidator;\n\n constructor() {\n this.validator = new IdentityPolicyValidator();\n }\n\n async can(\n ctx: PolicyEvaluateContext<PolicyWithType>,\n ) : Promise<boolean> {\n return ctx.spec.type === BuiltInPolicyType.IDENTITY;\n }\n\n async validateSpecification(ctx: PolicyEvaluateContext) : Promise<IdentityPolicy> {\n return this.validator.run(ctx.spec);\n }\n\n async validateData(ctx: PolicyEvaluateContext<IdentityPolicy>) : Promise<PolicyData> {\n return ctx.data;\n }\n\n async evaluate(ctx: PolicyEvaluateContext<\n IdentityPolicy\n >): Promise<boolean> {\n if (!isObject(ctx.data.identity)) {\n return maybeInvertPolicyOutcome(false, ctx.spec.invert);\n }\n\n const types = ctx.spec.types || [];\n if (types.length === 0) {\n return maybeInvertPolicyOutcome(true, ctx.spec.invert);\n }\n\n const typeAllowed = types.indexOf(ctx.data.identity.type) !== -1;\n\n return maybeInvertPolicyOutcome(typeAllowed, ctx.spec.invert);\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { Container } from 'validup';\nimport type { PermissionBindingPolicy } from './types';\n\nexport class PermissionBindingPolicyValidator extends Container<PermissionBindingPolicy> {\n protected initialize() {\n }\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from '@authup/kit';\nimport { PolicyError } from '../../error';\nimport type { PolicyEvaluateContext, PolicyEvaluator } from '../../evaluator';\nimport { maybeInvertPolicyOutcome } from '../../helpers';\nimport type { PolicyData, PolicyWithType } from '../../types';\nimport { BuiltInPolicyType } from '../constants';\nimport type { PermissionBindingPolicy } from './types';\nimport { PermissionBindingPolicyValidator } from './validator';\n\nexport class PermissionBindingPolicyEvaluator implements PolicyEvaluator<PermissionBindingPolicy> {\n protected validator: PermissionBindingPolicyValidator;\n\n constructor() {\n this.validator = new PermissionBindingPolicyValidator();\n }\n\n async can(\n ctx: PolicyEvaluateContext<PolicyWithType>,\n ): Promise<boolean> {\n return ctx.spec.type === BuiltInPolicyType.PERMISSION_BINDING;\n }\n\n async validateSpecification(ctx: PolicyEvaluateContext) : Promise<PermissionBindingPolicy> {\n return this.validator.run(ctx.spec);\n }\n\n async validateData(ctx: PolicyEvaluateContext) : Promise<PolicyData> {\n if (!isObject(ctx.data.identity) && !isObject(ctx.data.permission)) {\n throw PolicyError.evaluatorContextInvalid();\n }\n\n return ctx.data;\n }\n\n async evaluate(ctx: PolicyEvaluateContext<\n PermissionBindingPolicy,\n PolicyData\n >): Promise<boolean> {\n // todo: this must be changed when the permission-checker not only checks owned permissions.\n return maybeInvertPolicyOutcome(true, ctx.spec.invert);\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { createValidator } from '@validup/adapter-zod';\nimport { Container } from 'validup';\nimport { z } from 'zod';\nimport { DecisionStrategy } from '../../../constants';\nimport type { RealmMatchPolicy } from './types';\n\nexport class RealmMatchPolicyValidator extends Container<RealmMatchPolicy> {\n initialize() {\n super.initialize();\n\n this.mount(\n 'decisionStrategy',\n createValidator(\n z.nativeEnum(DecisionStrategy)\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ),\n );\n\n this.mount(\n 'attributeName',\n createValidator(\n z.string()\n .min(3)\n .or(z.array(z.string().min(3)))\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ),\n );\n this.mount(\n 'attributeNameStrict',\n createValidator(\n z.boolean()\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ),\n );\n this.mount(\n 'attributeNullMatchAll',\n createValidator(\n z.boolean()\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ),\n );\n\n this.mount(\n 'identityMasterMatchAll',\n createValidator(\n z.boolean()\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ),\n );\n\n this.mount(\n 'invert',\n createValidator(\n z.boolean()\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ),\n );\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { hasOwnProperty, isObject } from '@authup/kit';\nimport { DecisionStrategy } from '../../../constants';\nimport { PolicyError } from '../../error';\nimport type { PolicyEvaluateContext, PolicyEvaluator } from '../../evaluator';\nimport type { PolicyData, PolicyWithType } from '../../types';\nimport { maybeInvertPolicyOutcome } from '../../helpers';\nimport { BuiltInPolicyType } from '../constants';\nimport type { RealmMatchPolicy } from './types';\nimport { RealmMatchPolicyValidator } from './validator';\n\nexport class RealmMatchPolicyEvaluator implements PolicyEvaluator<RealmMatchPolicy> {\n protected validator : RealmMatchPolicyValidator;\n\n constructor() {\n this.validator = new RealmMatchPolicyValidator();\n }\n\n async can(\n ctx: PolicyEvaluateContext<PolicyWithType>,\n ) : Promise<boolean> {\n return ctx.spec.type === BuiltInPolicyType.REALM_MATCH;\n }\n\n async validateSpecification(ctx: PolicyEvaluateContext) : Promise<RealmMatchPolicy> {\n return this.validator.run(ctx.spec);\n }\n\n async validateData(ctx: PolicyEvaluateContext<RealmMatchPolicy>) : Promise<PolicyData> {\n if (\n !isObject(ctx.data.attributes) ||\n !isObject(ctx.data.identity)\n ) {\n throw PolicyError.evaluatorContextInvalid();\n }\n\n return ctx.data;\n }\n\n async evaluate(ctx: PolicyEvaluateContext<\n RealmMatchPolicy\n >): Promise<boolean> {\n if (!ctx.data.attributes || !ctx.data.identity) {\n throw PolicyError.evaluatorContextInvalid();\n }\n\n const identityMasterMatchAll = ctx.spec.identityMasterMatchAll ?? true;\n if (\n identityMasterMatchAll &&\n ctx.data.identity.realmName &&\n ctx.data.identity.realmName === 'master'\n ) {\n return maybeInvertPolicyOutcome(true, ctx.spec.invert);\n }\n\n let keys : string[];\n if (ctx.spec.attributeName) {\n if (Array.isArray(ctx.spec.attributeName)) {\n keys = ctx.spec.attributeName;\n } else {\n keys = [ctx.spec.attributeName];\n }\n } else {\n keys = [\n 'realm_id',\n 'realm_name',\n 'realmId',\n 'realmName',\n ];\n\n ctx.spec.decisionStrategy = DecisionStrategy.CONSENSUS;\n }\n\n const attributeNameStrict = ctx.spec.attributeNameStrict ?? true;\n if (!attributeNameStrict) {\n const resourceKeys = Object.keys(ctx.data.attributes);\n const keysToAdd : string[] = [];\n for (let i = 0; i < resourceKeys.length; i++) {\n let contains : boolean = false;\n\n for (let j = 0; j < keys.length; j++) {\n if (\n resourceKeys[i] !== keys[j] &&\n resourceKeys[i].includes(keys[j])\n ) {\n contains = true;\n break;\n }\n }\n\n if (contains) {\n keysToAdd.push(resourceKeys[i]);\n }\n }\n\n if (keysToAdd.length > 0) {\n keys.push(...keysToAdd);\n }\n }\n\n let count = 0;\n\n for (let i = 0; i < keys.length; i++) {\n if (!hasOwnProperty(ctx.data.attributes, keys[i])) {\n continue;\n }\n\n let outcome : boolean = false;\n\n const attributeValue = ctx.data.attributes[keys[i]];\n\n if (\n attributeValue === null &&\n ctx.spec.attributeNullMatchAll\n ) {\n outcome = true;\n } else if (\n attributeValue === ctx.data.identity.realmId ||\n attributeValue === ctx.data.identity.realmName\n ) {\n outcome = true;\n }\n\n if (outcome) {\n if (ctx.spec.decisionStrategy === DecisionStrategy.AFFIRMATIVE) {\n return maybeInvertPolicyOutcome(true, ctx.spec.invert);\n }\n\n count++;\n } else {\n if (ctx.spec.decisionStrategy === DecisionStrategy.UNANIMOUS) {\n return maybeInvertPolicyOutcome(false, ctx.spec.invert);\n }\n\n count--;\n }\n }\n\n return maybeInvertPolicyOutcome(count > 0, ctx.spec.invert);\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum TimePolicyInterval {\n DAILY = 'daily',\n WEEKLY = 'weekly',\n MONTHLY = 'monthly',\n YEARLY = 'yearly',\n}\n","/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { TimePolicyInterval } from './constants';\n\nexport function isIntervalForDayOfWeek(\n interval: string,\n) {\n return interval === TimePolicyInterval.WEEKLY ||\n interval === TimePolicyInterval.MONTHLY ||\n interval === TimePolicyInterval.YEARLY;\n}\n\nexport function isIntervalForDayOfMonth(\n interval: string,\n) {\n return interval === TimePolicyInterval.MONTHLY ||\n interval === TimePolicyInterval.YEARLY;\n}\n\nexport function isIntervalForDayOfYear(\n interval: string,\n) {\n return interval === TimePolicyInterval.YEARLY;\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { createValidator } from '@validup/adapter-zod';\nimport { Container } from 'validup';\nimport { z } from 'zod';\nimport type { TimePolicy } from './types';\nimport { TimePolicyInterval } from './constants';\n\nexport class TimePolicyValidator extends Container<TimePolicy> {\n initialize() {\n super.initialize();\n\n this.mount('dayOfWeek', createValidator(\n z.number()\n .min(0).max(6)\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ));\n this.mount('dayOfMonth', createValidator(\n z.number()\n .min(1)\n .max(31)\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ));\n this.mount('dayOfYear', createValidator(\n z.number()\n .min(1)\n .max(366)\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ));\n\n this.mount('start', createValidator(\n z.date()\n .or(z.string().datetime())\n .or(z.string().time())\n .or(z.number())\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ));\n this.mount('end', createValidator(\n z.date()\n .or(z.string().datetime())\n .or(z.string().time())\n .or(z.number())\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ));\n\n this.mount(\n 'interval',\n createValidator(\n z.nativeEnum(TimePolicyInterval)\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ),\n );\n\n this.mount(\n 'invert',\n createValidator(\n z.boolean()\n .or(z.undefined())\n .or(z.null())\n .optional(),\n ),\n );\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { PolicyEvaluateContext, PolicyEvaluator } from '../../evaluator';\nimport { maybeInvertPolicyOutcome } from '../../helpers';\nimport type { PolicyData, PolicyWithType } from '../../types';\nimport { BuiltInPolicyType } from '../constants';\nimport { isIntervalForDayOfMonth, isIntervalForDayOfWeek, isIntervalForDayOfYear } from './helpers';\nimport type { TimePolicy } from './types';\nimport { TimePolicyValidator } from './validator';\n\nconst timeRegex = /^(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d)?$/;\n\nfunction normalizeDate(input: Date, dateRef?: Date) {\n const date = dateRef ? new Date(dateRef) : new Date();\n date.setHours(input.getHours(), input.getMinutes());\n\n return date;\n}\n\nfunction toDate(\n input: Date | string | number,\n dateRef?: Date,\n) : Date {\n if (typeof input === 'string') {\n if (timeRegex.test(input)) {\n const [startHours, startMinutes] = input.split(':').map(Number);\n const date = dateRef ? new Date(dateRef) : new Date();\n date.setHours(startHours, startMinutes);\n return date;\n }\n\n return new Date(input);\n }\n\n if (typeof input === 'number') {\n return new Date(input);\n }\n\n return input;\n}\n\nexport class TimePolicyEvaluator implements PolicyEvaluator<TimePolicy> {\n protected validator : TimePolicyValidator;\n\n constructor() {\n this.validator = new TimePolicyValidator();\n }\n\n async can(\n ctx: PolicyEvaluateContext<PolicyWithType>,\n ) : Promise<boolean> {\n return ctx.spec.type === BuiltInPolicyType.TIME;\n }\n\n async validateSpecification(ctx: PolicyEvaluateContext) : Promise<TimePolicy> {\n return this.validator.run(ctx.spec);\n }\n\n async validateData(ctx: PolicyEvaluateContext<TimePolicy>) : Promise<PolicyData> {\n return ctx.data;\n }\n\n async evaluate(ctx: PolicyEvaluateContext<TimePolicy>): Promise<boolean> {\n let now : Date;\n if (ctx.data.dateTime) {\n now = toDate(ctx.data.dateTime);\n } else {\n now = new Date();\n }\n\n if (ctx.spec.start) {\n const start = normalizeDate(toDate(ctx.spec.start, now), now);\n if (now < start) {\n return maybeInvertPolicyOutcome(false, ctx.spec.invert);\n }\n }\n\n if (ctx.spec.end) {\n const end = normalizeDate(toDate(ctx.spec.end, now), now);\n if (now > end) {\n return maybeInvertPolicyOutcome(false, ctx.spec.invert);\n }\n }\n\n if (ctx.spec.interval) {\n if (\n isIntervalForDayOfWeek(ctx.spec.interval) &&\n ctx.spec.dayOfWeek\n ) {\n if (now.getDay() !== ctx.spec.dayOfWeek) {\n return maybeInvertPolicyOutcome(false, ctx.spec.invert);\n }\n }\n\n if (\n isIntervalForDayOfMonth(ctx.spec.interval) &&\n ctx.spec.dayOfMonth\n ) {\n if (now.getDate() !== ctx.spec.dayOfMonth) {\n return maybeInvertPolicyOutcome(false, ctx.spec.invert);\n }\n }\n\n if (\n isIntervalForDayOfYear(ctx.spec.interval) &&\n ctx.spec.dayOfYear\n ) {\n const start = new Date(now.getFullYear(), 0, 0);\n const diff = (now.getTime() - start.getTime()) +\n ((start.getTimezoneOffset() - now.getTimezoneOffset()) * 60 * 1000);\n\n const oneDay = 1000 * 60 * 60 * 24;\n const dayOfYear = Math.floor(diff / oneDay);\n\n if (dayOfYear !== ctx.spec.dayOfYear) {\n return maybeInvertPolicyOutcome(false, ctx.spec.invert);\n }\n }\n }\n\n return maybeInvertPolicyOutcome(true, ctx.spec.invert);\n }\n}\n","/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { PolicyWithType } from '../types';\nimport type { BuiltInPolicyTypeMap } from './types';\n\nexport function definePolicyWithType<\n K extends keyof BuiltInPolicyTypeMap,\n D extends BuiltInPolicyTypeMap<any>[K],\n>(\n type: K,\n data: D,\n) : PolicyWithType<D, K> {\n return {\n ...data,\n type,\n };\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport {\n AttributeNamesPolicyEvaluator,\n AttributesPolicyEvaluator,\n BuiltInPolicyType,\n CompositePolicyEvaluator,\n DatePolicyEvaluator, IdentityPolicyEvaluator, PermissionBindingPolicyEvaluator,\n RealmMatchPolicyEvaluator,\n TimePolicyEvaluator,\n} from '../built-in';\nimport type { PolicyEvaluator, PolicyEvaluators } from '../evaluator';\nimport {\n evaluatePolicy,\n} from '../evaluator';\nimport type { PolicyEngineEvaluateContext } from './types';\n\n/**\n * The policy engine is a component that interprets defined policies and makes decisions\n * on whether to allow or deny a particular access.\n */\nexport class PolicyEngine {\n protected evaluators : PolicyEvaluators;\n\n constructor(evaluators: PolicyEvaluators = {}) {\n this.evaluators = {};\n this.registerDefaultEvaluators();\n this.registerEvaluators(evaluators);\n }\n\n public registerEvaluator(\n type: string,\n evaluator: PolicyEvaluator,\n ) : void {\n this.evaluators[type] = evaluator;\n }\n\n public registerEvaluators(evaluators: PolicyEvaluators) {\n const keys = Object.keys(evaluators);\n for (let i = 0; i < keys.length; i++) {\n this.registerEvaluator(keys[i], evaluators[keys[i]]);\n }\n }\n\n private registerDefaultEvaluators() {\n this.registerEvaluator(BuiltInPolicyType.COMPOSITE, new CompositePolicyEvaluator());\n this.registerEvaluator(BuiltInPolicyType.ATTRIBUTES, new AttributesPolicyEvaluator());\n this.registerEvaluator(BuiltInPolicyType.ATTRIBUTE_NAMES, new AttributeNamesPolicyEvaluator());\n this.registerEvaluator(BuiltInPolicyType.DATE, new DatePolicyEvaluator());\n this.registerEvaluator(BuiltInPolicyType.IDENTITY, new IdentityPolicyEvaluator());\n this.registerEvaluator(BuiltInPolicyType.PERMISSION_BINDING, new PermissionBindingPolicyEvaluator());\n this.registerEvaluator(BuiltInPolicyType.REALM_MATCH, new RealmMatchPolicyEvaluator());\n this.registerEvaluator(BuiltInPolicyType.TIME, new TimePolicyEvaluator());\n }\n\n /**\n * @throws PolicyError\n *\n * @param ctx\n */\n async evaluate(ctx: PolicyEngineEvaluateContext) : Promise<boolean> {\n return evaluatePolicy({\n ...ctx,\n options: ctx.options || {},\n evaluators: this.evaluators,\n });\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { AuthupErrorOptions } from '@authup/errors';\nimport { AuthupError, ErrorCode } from '@authup/errors';\nimport type { PolicyError, PolicyWithType } from '../../policy';\nimport { BuiltInPolicyType } from '../../policy';\nimport type { PermissionEvaluationErrorOptions } from './types';\n\nexport class PermissionError extends AuthupError {\n public policy : PolicyWithType | undefined;\n\n public policyError : PolicyError | undefined;\n\n constructor(options: AuthupErrorOptions = {}) {\n super({\n ...options,\n message: options.message || 'A permission error occurred.',\n statusCode: options.statusCode || 403,\n });\n }\n\n static notFound(name: string) {\n return new PermissionError({\n message: `The permission ${name} was not found.`,\n code: ErrorCode.PERMISSION_NOT_FOUND,\n });\n }\n\n static denied(name: string) {\n return new PermissionError({\n message: `The permission ${name} has not been granted.`,\n code: ErrorCode.PERMISSION_DENIED,\n });\n }\n\n static deniedAll(names: string[]) {\n return new PermissionError({\n message: `None of the permissions ${names.join(', ')} has been granted.`,\n code: ErrorCode.PERMISSION_DENIED,\n });\n }\n\n static evaluationFailed(options: PermissionEvaluationErrorOptions) {\n const error = new PermissionError({\n message: `The evaluation of permission ${options.name} failed.`,\n code: ErrorCode.PERMISSION_EVALUATION_FAILED,\n });\n\n if (options.policy) {\n error.policy = options.policy;\n\n if (options.policy.type === BuiltInPolicyType.IDENTITY) {\n error.statusCode = 401;\n }\n }\n\n if (options.policyError) {\n error.policyError = options.policyError;\n }\n\n return error;\n }\n}\n","/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { PermissionItem } from '../types';\n\nexport function buildPermissionItemKey(input: PermissionItem) {\n return `${input.realmId || '_'}/${input.clientId || '_'}/${input.name}`;\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { PermissionItem } from '../types';\n\nexport function isPermissionItemEqual(a: PermissionItem, b: PermissionItem): boolean {\n if (a.name !== b.name) {\n return false;\n }\n\n if (typeof a.realmId === 'string' || typeof b.realmId === 'string') {\n return a.realmId === b.realmId;\n }\n\n if (typeof a.clientId === 'string' || typeof b.clientId === 'string') {\n return a.clientId === b.clientId;\n }\n\n return !!a.realmId === !!b.realmId && !!a.clientId === !!b.clientId;\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { DecisionStrategy } from '../../constants';\nimport type { CompositePolicy, PolicyWithType } from '../../policy';\nimport { BuiltInPolicyType } from '../../policy';\nimport type { PermissionItem } from '../types';\nimport { buildPermissionItemKey } from './key';\n\nexport function mergePermissionItems(input: PermissionItem[]) : PermissionItem[] {\n const grouped : Record<string, PermissionItem[]> = input\n .reduce((previous, current) => {\n const key = buildPermissionItemKey(current);\n if (!previous[key]) {\n previous[key] = [];\n }\n\n previous[key].push(current);\n\n return previous;\n }, {} as Record<string, PermissionItem[]>);\n\n const output : PermissionItem[] = [];\n const keys = Object.keys(grouped);\n for (let i = 0; i < keys.length; i++) {\n const [permission, ...permissions] = grouped[keys[i]];\n\n if (permissions.length > 0) {\n const policy: PolicyWithType<CompositePolicy> = {\n type: BuiltInPolicyType.COMPOSITE,\n decisionStrategy: DecisionStrategy.AFFIRMATIVE,\n children: permissions\n .map((el) => el.policy)\n .filter((el) => typeof el !== 'undefined'),\n };\n\n if (permission.policy) {\n policy.children.push(permission.policy);\n }\n\n if (policy.children.length > 0) {\n permission.policy = policy;\n }\n }\n\n output.push(permission);\n }\n\n return output;\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { buildPermissionItemKey, mergePermissionItems } from '../helpers';\nimport type { PermissionItem } from '../types';\nimport type { PermissionGetOptions, PermissionProvider } from './types';\n\nexport class PermissionMemoryProvider implements PermissionProvider {\n protected items : Record<string, PermissionItem> = {};\n\n constructor(items: PermissionItem[] = []) {\n this.setMany(items);\n }\n\n async get(\n options: PermissionGetOptions,\n ): Promise<PermissionItem | undefined> {\n return this.items[buildPermissionItemKey(options)];\n }\n\n setMany(input: PermissionItem[]) {\n this.items = mergePermissionItems(input)\n .reduce((prev, current) => {\n prev[buildPermissionItemKey(current)] = current;\n return prev;\n }, {} as Record<string, PermissionItem>);\n }\n}\n","/*\n * Copyright (c) 2021-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { DecisionStrategy } from '../constants';\nimport { BuiltInPolicyType, PolicyEngine, PolicyError } from '../policy';\nimport { PermissionError } from './error';\nimport type { PermissionGetOptions, PermissionProvider } from './provider';\nimport { PermissionMemoryProvider } from './provider';\n\nimport type {\n PermissionCheckerCheckContext, PermissionCheckerOptions, PermissionItem,\n} from './types';\n\nexport class PermissionChecker {\n protected provider : PermissionProvider;\n\n protected policyEngine : PolicyEngine;\n\n protected clientId?: string | null;\n\n protected realmId?: string | null;\n\n // ----------------------------------------------\n\n constructor(options: PermissionCheckerOptions = {}) {\n if (options.provider) {\n this.provider = options.provider;\n } else {\n this.provider = new PermissionMemoryProvider();\n }\n\n if (options.clientId) {\n this.clientId = options.clientId;\n }\n\n if (options.realmId) {\n this.realmId = options.realmId;\n }\n\n if (options.policyEngine) {\n this.policyEngine = options.policyEngine;\n } else {\n this.policyEngine = new PolicyEngine();\n }\n }\n\n // ----------------------------------------------\n\n /**\n * Get a permission.\n *\n * @param input\n */\n protected async get(input: string) : Promise<PermissionItem | undefined> {\n const options : PermissionGetOptions = {\n name: input,\n };\n\n if (this.clientId) {\n options.clientId = this.clientId;\n }\n\n if (this.realmId) {\n options.realmId = this.realmId;\n }\n\n return this.provider.get(options);\n }\n\n // ----------------------------------------------\n\n /**\n * Verify if one or more possible owned permissions satisfy their conditions.\n *\n * @throws PermissionError\n *\n * @param ctx\n */\n async check(ctx: PermissionCheckerCheckContext) : Promise<void> {\n if (!Array.isArray(ctx.name)) {\n await this.check({\n ...ctx,\n name: [ctx.name],\n });\n return;\n }\n\n const {\n options = {},\n } = ctx;\n\n const decisionStrategy = options.decisionStrategy ??\n DecisionStrategy.UNANIMOUS;\n\n let lastError : PermissionError | undefined;\n let count = 0;\n\n for (let i = 0; i < ctx.name.length; i++) {\n const entity = await this.get(ctx.name[i]);\n if (!entity) {\n lastError = PermissionError.notFound(ctx.name[i]);\n if (decisionStrategy === DecisionStrategy.UNANIMOUS) {\n throw lastError;\n }\n\n continue;\n }\n\n if (!entity.policy) {\n if (decisionStrategy === DecisionStrategy.AFFIRMATIVE) {\n return;\n }\n\n count++;\n\n continue;\n }\n\n let outcome : boolean;\n\n try {\n outcome = await this.policyEngine.evaluate({\n data: {\n ...ctx.data || {},\n permission: entity,\n },\n spec: entity.policy,\n options: {\n include: options.policiesIncluded,\n exclude: options.policiesExcluded,\n },\n });\n } catch (e) {\n if (e instanceof PolicyError) {\n lastError = PermissionError.evaluationFailed({\n name: entity.name,\n policy: entity.policy,\n policyError: e,\n });\n } else {\n lastError = PermissionError.evaluationFailed({\n name: entity.name,\n policy: entity.policy,\n });\n }\n\n outcome = false;\n }\n\n if (outcome) {\n if (decisionStrategy === DecisionStrategy.AFFIRMATIVE) {\n return;\n }\n\n count++;\n } else {\n if (!lastError) {\n lastError = PermissionError.evaluationFailed({\n name: entity.name,\n policy: entity.policy,\n });\n }\n\n if (decisionStrategy === DecisionStrategy.UNANIMOUS) {\n throw lastError;\n }\n\n count--;\n }\n }\n\n if (count > 0) {\n return;\n }\n\n if (count > 1 || !lastError) {\n throw PermissionError.deniedAll(ctx.name);\n } else {\n throw lastError;\n }\n }\n\n /**\n * Verify if one of the permissions evaluates to true.\n *\n * @throws PermissionError\n *\n * @param ctx\n */\n async checkOneOf(ctx: PermissionCheckerCheckContext) : Promise<void> {\n return this.check({\n ...ctx,\n options: {\n ...(ctx.options || {}),\n decisionStrategy: DecisionStrategy.AFFIRMATIVE,\n },\n });\n }\n\n // ----------------------------------------------\n\n async preCheck(ctx: PermissionCheckerCheckContext) : Promise<void> {\n return this.check({\n ...ctx,\n options: {\n ...(ctx.options || {}),\n policiesExcluded: [\n BuiltInPolicyType.ATTRIBUTES,\n BuiltInPolicyType.ATTRIBUTE_NAMES,\n BuiltInPolicyType.REALM_MATCH,\n ],\n },\n });\n }\n\n async preCheckOneOf(ctx: PermissionCheckerCheckContext) : Promise<void> {\n return this.preCheck({\n ...ctx,\n options: {\n ...(ctx.options || {}),\n decisionStrategy: DecisionStrategy.AFFIRMATIVE,\n },\n });\n }\n}\n"],"names":["PolicyError","AuthupError","evaluatorNotFound","type","ErrorCode","POLICY_EVALUATOR_NOT_FOUND","evaluatorNotProcessable","POLICY_EVALUATOR_NOT_PROCESSABLE","evaluatorContextInvalid","POLICY_EVALUATOR_CONTEXT_INVALID","constructor","message","code","maybeInvertPolicyOutcome","outcome","invert","BuiltInPolicyType","AttributeNamesPolicyValidator","Container","initialize","mount","createValidator","z","array","string","min","max","boolean","or","null","undefined","optional","AttributeNamesPolicyEvaluator","can","ctx","spec","ATTRIBUTE_NAMES","validateSpecification","validator","run","validateData","isObject","data","attributes","evaluate","flattenObject","keys","Object","i","length","index","names","indexOf","defineAttributesPolicy","AttributesPolicyValidator","object","passthrough","AttributesPolicyEvaluator","ATTRIBUTES","fixQuery","query","testIt","guard","key","value","Array","isArray","fragments","match","RegExp","DecisionStrategy","PolicyDataIdentityValidator","uuid","PolicyDataPermissionValidator","PolicyDataValidator","identity","optionalValue","optionalInclude","permission","date","number","evaluatePolicy","options","exclude","include","evaluator","evaluators","canEvaluate","e","Error","error","stack","isCompositePolicy","input","COMPOSITE","CompositePolicyValidator","nativeEnum","CompositePolicyEvaluator","count","decisionStrategy","UNANIMOUS","children","childPolicy","AFFIRMATIVE","DatePolicyValidator","normalizeDate","Date","getFullYear","getMonth","getDate","toDate","DatePolicyEvaluator","DATE","now","dateTime","start","end","IdentityPolicyValidator","IdentityPolicyEvaluator","IDENTITY","types","typeAllowed","PermissionBindingPolicyValidator","PermissionBindingPolicyEvaluator","PERMISSION_BINDING","RealmMatchPolicyValidator","RealmMatchPolicyEvaluator","REALM_MATCH","identityMasterMatchAll","realmName","attributeName","CONSENSUS","attributeNameStrict","resourceKeys","keysToAdd","contains","j","includes","push","hasOwnProperty","attributeValue","attributeNullMatchAll","realmId","TimePolicyInterval","isIntervalForDayOfWeek","interval","WEEKLY","MONTHLY","YEARLY","isIntervalForDayOfMonth","isIntervalForDayOfYear","TimePolicyValidator","datetime","time","timeRegex","dateRef","setHours","getHours","getMinutes","test","startHours","startMinutes","split","map","Number","TimePolicyEvaluator","TIME","dayOfWeek","getDay","dayOfMonth","dayOfYear","diff","getTime","getTimezoneOffset","oneDay","Math","floor","definePolicyWithType","PolicyEngine","registerEvaluator","registerEvaluators","registerDefaultEvaluators","PermissionError","notFound","name","PERMISSION_NOT_FOUND","denied","PERMISSION_DENIED","deniedAll","join","evaluationFailed","PERMISSION_EVALUATION_FAILED","policy","statusCode","policyError","buildPermissionItemKey","clientId","isPermissionItemEqual","a","b","mergePermissionItems","grouped","reduce","previous","current","output","permissions","el","filter","PermissionMemoryProvider","get","items","setMany","prev","PermissionChecker","provider","check","lastError","entity","policyEngine","policiesIncluded","policiesExcluded","checkOneOf","preCheck","preCheckOneOf"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/policy/error/module.ts","../src/policy/helpers/invert.ts","../src/policy/built-in/constants.ts","../src/policy/built-in/attribute-names/validator.ts","../src/policy/built-in/attribute-names/evaluator.ts","../src/policy/built-in/attributes/define.ts","../src/policy/built-in/attributes/validator.ts","../src/policy/built-in/attributes/evaluator.ts","../src/constants.ts","../src/policy/evaluator/data/identity/validator.ts","../src/policy/evaluator/data/permission/validator.ts","../src/policy/evaluator/data/validator.ts","../src/policy/evaluator/evaluate.ts","../src/policy/built-in/composite/helper.ts","../src/policy/built-in/composite/validator.ts","../src/policy/built-in/composite/evaluator.ts","../src/policy/built-in/date/validator.ts","../src/policy/built-in/date/evaluator.ts","../src/policy/built-in/identity/validator.ts","../src/policy/built-in/identity/evaluator.ts","../src/policy/built-in/permission-binding/validator.ts","../src/policy/built-in/permission-binding/module.ts","../src/policy/built-in/realm-match/validator.ts","../src/policy/built-in/realm-match/evaluator.ts","../src/policy/built-in/time/constants.ts","../src/policy/built-in/time/helpers.ts","../src/policy/built-in/time/validator.ts","../src/policy/built-in/time/evaluator.ts","../src/policy/built-in/define.ts","../src/policy/engine/module.ts","../src/permission/error/module.ts","../src/permission/helpers/key.ts","../src/permission/helpers/equal.ts","../src/permission/helpers/merge.ts","../src/permission/provider/memory.ts","../src/permission/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { AuthupError, ErrorCode } from '@authup/errors';\n\nexport class PolicyError extends AuthupError {\n constructor(message?: string, code?: string | null) {\n super({ message, code });\n }\n\n static evaluatorNotFound(type: string) {\n return new PolicyError(\n `No evaluator is registered to handle the policy: ${type}`,\n ErrorCode.POLICY_EVALUATOR_NOT_FOUND,\n );\n }\n\n static evaluatorNotProcessable() {\n throw new PolicyError(\n 'The evaluator can not process the policy.',\n ErrorCode.POLICY_EVALUATOR_NOT_PROCESSABLE,\n );\n }\n\n static evaluatorContextInvalid() {\n throw new PolicyError(\n 'The evaluator context is not valid.',\n ErrorCode.POLICY_EVALUATOR_CONTEXT_INVALID,\n );\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\ntype InvertFn = (input: boolean) => boolean;\n\nexport function maybeInvertPolicyOutcome(\n outcome: boolean,\n invert?: boolean | InvertFn,\n) {\n if (typeof invert === 'undefined') {\n return outcome;\n }\n\n if (typeof invert === 'function') {\n return invert(outcome);\n }\n\n if (!invert) {\n return outcome;\n }\n\n return !outcome;\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum BuiltInPolicyType {\n /**\n * Bundles different policies.\n */\n COMPOSITE = 'composite',\n /**\n * Date Based Access Control (DBAC)\n */\n DATE = 'date',\n /**\n * Time Based Access Control (TBAC)\n */\n TIME = 'time',\n /**\n * Attribute Name Based Access Control (ANBAC)\n */\n ATTRIBUTE_NAMES = 'attributeNames',\n /**\n * Attribute Based Access Control (ABAC)\n */\n ATTRIBUTES = 'attributes',\n /**\n * Realm of Identity is for attribute realm.\n */\n REALM_MATCH = 'realmMatch',\n\n /**\n * Restriction based on identity (type, id, ...)\n */\n IDENTITY = 'identity',\n\n /**\n * Restriction based on a binding between identity <-> permission\n */\n PERMISSION_BINDING = 'permissionBinding',\n\n // Location (LBAC)\n // Device (DBAC)\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { createValidator } from '@validup/adapter-zod';\nimport { Container } from 'validup';\nimport { z } from 'zod';\nimport type { AttributeNamesPolicy } from './types';\n\nexport class AttributeNamesPolicyValidator extends Container<AttributeNamesPolicy> {\n initialize() {\n super.initialize();\n\n this.mount(\n 'names',\n createValidator(\n z.array(\n z.string()\n .min(3)\n .max(128),\n ),\n ),\n );\n\n this.mount(\n 'invert',\n createValidator(\n z.boolean()\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ),\n );\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { flattenObject, isObject } from '@authup/kit';\nimport { PolicyError } from '../../error';\nimport type { PolicyEvaluateContext, PolicyEvaluator } from '../../evaluator';\nimport { maybeInvertPolicyOutcome } from '../../helpers';\nimport type { PolicyInput, PolicyWithType } from '../../types';\nimport { BuiltInPolicyType } from '../constants';\nimport type { AttributeNamesPolicy } from './types';\nimport { AttributeNamesPolicyValidator } from './validator';\n\nexport class AttributeNamesPolicyEvaluator implements PolicyEvaluator<AttributeNamesPolicy> {\n protected validator : AttributeNamesPolicyValidator;\n\n constructor() {\n this.validator = new AttributeNamesPolicyValidator();\n }\n\n async can(ctx: PolicyEvaluateContext<PolicyWithType>) : Promise<boolean> {\n return ctx.config.type === BuiltInPolicyType.ATTRIBUTE_NAMES;\n }\n\n async validateConfig(ctx: PolicyEvaluateContext<PolicyWithType>) : Promise<AttributeNamesPolicy> {\n return this.validator.run(ctx.config);\n }\n\n async validateInput(ctx: PolicyEvaluateContext<AttributeNamesPolicy>) : Promise<PolicyInput> {\n if (!isObject(ctx.input.attributes)) {\n throw PolicyError.evaluatorContextInvalid();\n }\n\n return ctx.input;\n }\n\n async evaluate(ctx: PolicyEvaluateContext<AttributeNamesPolicy, PolicyInput>): Promise<boolean> {\n if (!ctx.input.attributes) {\n throw PolicyError.evaluatorContextInvalid();\n }\n\n const attributes = flattenObject(ctx.input.attributes);\n const keys = Object.keys(attributes);\n for (let i = 0; i < keys.length; i++) {\n const index = ctx.config.names.indexOf(keys[i]);\n if (index === -1) {\n return maybeInvertPolicyOutcome(false, ctx.config.invert);\n }\n }\n\n return maybeInvertPolicyOutcome(true, ctx.config.invert);\n }\n}\n","/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { AttributesPolicy } from './types';\n\nexport function defineAttributesPolicy<\n T extends Record<string, any> = Record<string, any>,\n>(\n data: AttributesPolicy<T>,\n) : AttributesPolicy<T> {\n return data;\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { createValidator } from '@validup/adapter-zod';\nimport { Container } from 'validup';\nimport { z } from 'zod';\nimport type { AttributesPolicy } from './types';\n\nexport class AttributesPolicyValidator<\n T extends Record<string, any> = Record<string, any>,\n> extends Container<AttributesPolicy<T>> {\n initialize() {\n super.initialize();\n\n this.mount(\n 'query',\n createValidator(\n z.object({})\n .passthrough(),\n ),\n );\n\n this.mount(\n 'invert',\n createValidator(\n z.boolean()\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ),\n );\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { guard } from '@ucast/mongo2js';\nimport { isObject } from '@authup/kit';\nimport { PolicyError } from '../../error';\nimport type { PolicyEvaluateContext, PolicyEvaluator } from '../../evaluator';\nimport { maybeInvertPolicyOutcome } from '../../helpers';\nimport type { PolicyInput, PolicyWithType } from '../../types';\nimport { BuiltInPolicyType } from '../constants';\nimport type { AttributesPolicy } from './types';\nimport { AttributesPolicyValidator } from './validator';\n\nexport class AttributesPolicyEvaluator<\n T extends Record<string, any> = Record<string, any>,\n> implements PolicyEvaluator<AttributesPolicy<T>> {\n protected validator : AttributesPolicyValidator<T>;\n\n constructor() {\n this.validator = new AttributesPolicyValidator<T>();\n }\n\n async can(\n ctx: PolicyEvaluateContext<PolicyWithType>,\n ) : Promise<boolean> {\n return ctx.config.type === BuiltInPolicyType.ATTRIBUTES;\n }\n\n async validateConfig(ctx: PolicyEvaluateContext) : Promise<AttributesPolicy<T>> {\n return this.validator.run(ctx.config);\n }\n\n async validateInput(ctx: PolicyEvaluateContext<AttributesPolicy<T>>) : Promise<PolicyInput> {\n if (!isObject(ctx.input.attributes)) {\n throw PolicyError.evaluatorContextInvalid();\n }\n\n return ctx.input;\n }\n\n async evaluate(ctx: PolicyEvaluateContext<AttributesPolicy<T>>): Promise<boolean> {\n if (!ctx.input.attributes) {\n throw PolicyError.evaluatorContextInvalid();\n }\n\n this.fixQuery(ctx.config.query);\n\n const testIt = guard<T>(ctx.config.query);\n return maybeInvertPolicyOutcome(testIt(ctx.input.attributes as T), ctx.config.invert);\n }\n\n protected fixQuery(query: Record<string, any>) {\n const keys = Object.keys(query);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const value = query[key];\n\n if (isObject(value) || Array.isArray(value)) {\n this.fixQuery(value);\n continue;\n }\n\n if (\n key === '$regex' &&\n typeof value === 'string'\n ) {\n const fragments = value.match(/\\/(.*?)\\/([a-z]*)?$/i);\n if (fragments) {\n query[key] = new RegExp(fragments[1], fragments[2]);\n }\n }\n }\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum DecisionStrategy {\n /**\n * One or more positive\n */\n AFFIRMATIVE = 'affirmative',\n /**\n * All positive\n */\n UNANIMOUS = 'unanimous',\n /**\n * More positive than negative\n */\n CONSENSUS = 'consensus',\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { createValidator } from '@validup/adapter-zod';\nimport { Container } from 'validup';\nimport { z } from 'zod';\nimport type { PolicyIdentity } from '../../../types';\n\nexport class PolicyDataIdentityValidator extends Container<PolicyIdentity> {\n initialize() {\n super.initialize();\n\n this.mount(\n 'type',\n createValidator(\n z.string().min(3).max(128),\n ),\n );\n\n this.mount(\n 'id',\n createValidator(\n z.string().uuid(),\n ),\n );\n\n this.mount(\n 'clientId',\n createValidator(\n z.string().uuid()\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ),\n );\n\n this.mount(\n 'realmId',\n createValidator(\n z.string().uuid()\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ),\n );\n\n this.mount(\n 'realmName',\n createValidator(\n z.string().min(3).max(128)\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ),\n );\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { createValidator } from '@validup/adapter-zod';\nimport { Container } from 'validup';\nimport { z } from 'zod';\nimport type { PermissionItem } from '../../../../permission';\n\nexport class PolicyDataPermissionValidator extends Container<PermissionItem> {\n initialize() {\n super.initialize();\n\n this.mount('name', createValidator(\n z.string()\n .min(3)\n .max(256),\n ));\n\n this.mount('clientId', createValidator(\n z.string().uuid()\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ));\n\n this.mount('realmId', createValidator(\n z.string().uuid()\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ));\n\n this.mount('policy', createValidator(z.object({\n type: z.string(),\n }).optional()));\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { createValidator } from '@validup/adapter-zod';\nimport { Container } from 'validup';\nimport { z } from 'zod';\nimport type { PolicyInput } from '../../types';\nimport { PolicyDataIdentityValidator } from './identity';\nimport { PolicyDataPermissionValidator } from './permission';\n\nexport class PolicyDataValidator extends Container<PolicyInput> {\n initialize() {\n super.initialize();\n\n // todo: optionalValue should be null\n const identity = new PolicyDataIdentityValidator();\n this.mount(\n 'identity',\n {\n optional: true,\n optionalValue: 'undefined',\n optionalInclude: true,\n },\n identity,\n );\n\n // todo: optionalValue should be null\n const permission = new PolicyDataPermissionValidator();\n this.mount(\n 'permission',\n {\n optional: true,\n optionalValue: 'undefined',\n optionalInclude: true,\n },\n permission,\n );\n\n this.mount('attributes', createValidator(z.object({}).optional()));\n\n this.mount('dateTime', createValidator(z.date().or(z.string()).or(z.number()).optional()));\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { PolicyError } from '../error';\nimport { maybeInvertPolicyOutcome } from '../helpers';\nimport type { PolicyWithType } from '../types';\nimport type { PolicyEvaluateContext } from './types';\n\nexport async function evaluatePolicy(ctx: PolicyEvaluateContext<PolicyWithType>) : Promise<boolean> {\n if (\n ctx.options.exclude &&\n ctx.options.exclude.length > 0 &&\n ctx.options.exclude.indexOf(ctx.config.type) !== -1\n ) {\n if (typeof ctx.config.invert === 'boolean') {\n return maybeInvertPolicyOutcome(true, ctx.config.invert);\n }\n\n return true;\n }\n\n if (\n ctx.options.include &&\n ctx.options.include.length > 0 &&\n ctx.options.include.indexOf(ctx.config.type) === -1\n ) {\n if (typeof ctx.config.invert === 'boolean') {\n return maybeInvertPolicyOutcome(true, ctx.config.invert);\n }\n\n return true;\n }\n\n const evaluator = ctx.evaluators[ctx.config.type];\n if (!evaluator) {\n throw PolicyError.evaluatorNotFound(ctx.config.type);\n }\n\n try {\n const canEvaluate = await evaluator.can(ctx);\n if (canEvaluate) {\n const config = await evaluator.validateConfig(ctx);\n const input = await evaluator.validateInput(ctx);\n\n return await evaluator.evaluate({\n ...ctx,\n input,\n config,\n });\n }\n } catch (e) {\n if (e instanceof PolicyError) {\n throw e;\n }\n\n if (e instanceof Error) {\n const error = new PolicyError(e.message);\n error.stack = e.stack;\n throw error;\n }\n\n throw new PolicyError();\n }\n\n throw PolicyError.evaluatorNotProcessable();\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { PolicyWithType } from '../../types';\nimport { BuiltInPolicyType } from '../constants';\nimport type { CompositePolicy } from './types';\n\nexport function isCompositePolicy(\n input: PolicyWithType,\n) : input is PolicyWithType<CompositePolicy> {\n return input.type === BuiltInPolicyType.COMPOSITE;\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { createValidator } from '@validup/adapter-zod';\nimport { Container } from 'validup';\nimport { z } from 'zod';\nimport { DecisionStrategy } from '../../../constants';\nimport type { CompositePolicy } from './types';\n\nexport class CompositePolicyValidator extends Container<CompositePolicy> {\n initialize() {\n super.initialize();\n\n this.mount(\n 'decisionStrategy',\n createValidator(\n z.nativeEnum(DecisionStrategy)\n\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ),\n );\n\n this.mount(\n 'children',\n createValidator(\n z.array(z.object({\n type: z.string().min(3),\n }).passthrough()),\n ),\n );\n\n this.mount(\n 'invert',\n createValidator(\n z.boolean()\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ),\n );\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { DecisionStrategy } from '../../../constants';\nimport type { PolicyEvaluateContext, PolicyEvaluator } from '../../evaluator';\nimport { evaluatePolicy } from '../../evaluator';\nimport { maybeInvertPolicyOutcome } from '../../helpers';\nimport type { PolicyInput, PolicyWithType } from '../../types';\nimport { isCompositePolicy } from './helper';\nimport type { CompositePolicy } from './types';\nimport { CompositePolicyValidator } from './validator';\n\nexport class CompositePolicyEvaluator implements PolicyEvaluator<CompositePolicy> {\n protected validator : CompositePolicyValidator;\n\n constructor() {\n this.validator = new CompositePolicyValidator();\n }\n\n async can(\n ctx: PolicyEvaluateContext<PolicyWithType>,\n ) : Promise<boolean> {\n return isCompositePolicy(ctx.config);\n }\n\n async validateConfig(ctx: PolicyEvaluateContext) : Promise<CompositePolicy> {\n return this.validator.run(ctx.config);\n }\n\n async validateInput(ctx: PolicyEvaluateContext<CompositePolicy>) : Promise<PolicyInput> {\n return ctx.input;\n }\n\n async evaluate(ctx: PolicyEvaluateContext<CompositePolicy>): Promise<boolean> {\n let count = 0;\n\n const decisionStrategy = ctx.config.decisionStrategy ??\n DecisionStrategy.UNANIMOUS;\n\n for (let i = 0; i < ctx.config.children.length; i++) {\n const childPolicy = ctx.config.children[i];\n let outcome : boolean;\n\n if (isCompositePolicy(childPolicy)) {\n outcome = await this.evaluate({\n ...ctx,\n config: childPolicy,\n });\n } else {\n outcome = await evaluatePolicy({\n ...ctx,\n config: childPolicy,\n });\n }\n\n if (outcome) {\n if (decisionStrategy === DecisionStrategy.AFFIRMATIVE) {\n return maybeInvertPolicyOutcome(true, ctx.config.invert);\n }\n\n count++;\n } else {\n if (decisionStrategy === DecisionStrategy.UNANIMOUS) {\n return maybeInvertPolicyOutcome(false, ctx.config.invert);\n }\n\n count--;\n }\n }\n\n return maybeInvertPolicyOutcome(count > 0, ctx.config.invert);\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { createValidator } from '@validup/adapter-zod';\nimport { Container } from 'validup';\nimport { z } from 'zod';\nimport type { DatePolicy } from './types';\n\nexport class DatePolicyValidator extends Container<DatePolicy> {\n initialize() {\n super.initialize();\n\n this.mount('start', createValidator(\n z.date()\n .or(z.string().date())\n .or(z.number())\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ));\n this.mount('end', createValidator(\n z.date()\n .or(z.string().date())\n .or(z.number())\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ));\n\n this.mount('invert', createValidator(\n z.boolean()\n .or(z.undefined())\n .or(z.null())\n .optional(),\n ));\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { PolicyEvaluateContext, PolicyEvaluator } from '../../evaluator';\nimport { maybeInvertPolicyOutcome } from '../../helpers';\nimport type { PolicyInput, PolicyWithType } from '../../types';\nimport { BuiltInPolicyType } from '../constants';\nimport type { DatePolicy } from './types';\nimport { DatePolicyValidator } from './validator';\n\nfunction normalizeDate(input: Date) {\n return new Date(input.getFullYear(), input.getMonth(), input.getDate());\n}\n\nfunction toDate(input: Date | string | number) : Date {\n if (typeof input === 'string') {\n return new Date(input);\n }\n\n if (typeof input === 'number') {\n return new Date(input);\n }\n\n return input;\n}\n\nexport class DatePolicyEvaluator implements PolicyEvaluator<DatePolicy> {\n protected validator : DatePolicyValidator;\n\n constructor() {\n this.validator = new DatePolicyValidator();\n }\n\n async can(\n ctx: PolicyEvaluateContext<PolicyWithType>,\n ) : Promise<boolean> {\n return ctx.config.type === BuiltInPolicyType.DATE;\n }\n\n async validateConfig(ctx: PolicyEvaluateContext) : Promise<DatePolicy> {\n return this.validator.run(ctx.config);\n }\n\n async validateInput(ctx: PolicyEvaluateContext<DatePolicy>) : Promise<PolicyInput> {\n return ctx.input;\n }\n\n async evaluate(ctx: PolicyEvaluateContext<DatePolicy>) : Promise<boolean> {\n let now : Date;\n if (ctx.input.dateTime) {\n now = normalizeDate(toDate(ctx.input.dateTime));\n } else {\n now = normalizeDate(new Date());\n }\n\n if (ctx.config.start) {\n const start = normalizeDate(toDate(ctx.config.start));\n if (now < start) {\n return maybeInvertPolicyOutcome(false, ctx.config.invert);\n }\n }\n\n if (ctx.config.end) {\n const end = normalizeDate(toDate(ctx.config.end));\n if (now > end) {\n return maybeInvertPolicyOutcome(false, ctx.config.invert);\n }\n }\n\n return maybeInvertPolicyOutcome(true, ctx.config.invert);\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { createValidator } from '@validup/adapter-zod';\nimport { Container } from 'validup';\nimport { z } from 'zod';\nimport type { IdentityPolicy } from './types';\n\nexport class IdentityPolicyValidator extends Container<IdentityPolicy> {\n protected initialize() {\n this.mount(\n 'types',\n createValidator(\n z.array(z.string())\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ),\n );\n\n this.mount(\n 'invert',\n createValidator(\n z.boolean()\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ),\n );\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from '@authup/kit';\nimport type { PolicyEvaluateContext, PolicyEvaluator } from '../../evaluator';\nimport type { PolicyInput, PolicyWithType } from '../../types';\nimport { maybeInvertPolicyOutcome } from '../../helpers';\nimport { BuiltInPolicyType } from '../constants';\nimport type { IdentityPolicy } from './types';\nimport { IdentityPolicyValidator } from './validator';\n\nexport class IdentityPolicyEvaluator implements PolicyEvaluator<IdentityPolicy> {\n protected validator : IdentityPolicyValidator;\n\n constructor() {\n this.validator = new IdentityPolicyValidator();\n }\n\n async can(\n ctx: PolicyEvaluateContext<PolicyWithType>,\n ) : Promise<boolean> {\n return ctx.config.type === BuiltInPolicyType.IDENTITY;\n }\n\n async validateConfig(ctx: PolicyEvaluateContext) : Promise<IdentityPolicy> {\n return this.validator.run(ctx.config);\n }\n\n async validateInput(ctx: PolicyEvaluateContext<IdentityPolicy>) : Promise<PolicyInput> {\n return ctx.input;\n }\n\n async evaluate(ctx: PolicyEvaluateContext<\n IdentityPolicy\n >): Promise<boolean> {\n if (!isObject(ctx.input.identity)) {\n return maybeInvertPolicyOutcome(false, ctx.config.invert);\n }\n\n const types = ctx.config.types || [];\n if (types.length === 0) {\n return maybeInvertPolicyOutcome(true, ctx.config.invert);\n }\n\n const typeAllowed = types.indexOf(ctx.input.identity.type) !== -1;\n\n return maybeInvertPolicyOutcome(typeAllowed, ctx.config.invert);\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { Container } from 'validup';\nimport type { PermissionBindingPolicy } from './types';\n\nexport class PermissionBindingPolicyValidator extends Container<PermissionBindingPolicy> {\n protected initialize() {\n }\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from '@authup/kit';\nimport { PolicyError } from '../../error';\nimport type { PolicyEvaluateContext, PolicyEvaluator } from '../../evaluator';\nimport { maybeInvertPolicyOutcome } from '../../helpers';\nimport type { PolicyInput, PolicyWithType } from '../../types';\nimport { BuiltInPolicyType } from '../constants';\nimport type { PermissionBindingPolicy } from './types';\nimport { PermissionBindingPolicyValidator } from './validator';\n\nexport class PermissionBindingPolicyEvaluator implements PolicyEvaluator<PermissionBindingPolicy> {\n protected validator: PermissionBindingPolicyValidator;\n\n constructor() {\n this.validator = new PermissionBindingPolicyValidator();\n }\n\n async can(\n ctx: PolicyEvaluateContext<PolicyWithType>,\n ): Promise<boolean> {\n return ctx.config.type === BuiltInPolicyType.PERMISSION_BINDING;\n }\n\n async validateConfig(ctx: PolicyEvaluateContext) : Promise<PermissionBindingPolicy> {\n return this.validator.run(ctx.config);\n }\n\n async validateInput(ctx: PolicyEvaluateContext) : Promise<PolicyInput> {\n if (!isObject(ctx.input.identity) && !isObject(ctx.input.permission)) {\n throw PolicyError.evaluatorContextInvalid();\n }\n\n return ctx.input;\n }\n\n async evaluate(ctx: PolicyEvaluateContext<\n PermissionBindingPolicy,\n PolicyInput\n >): Promise<boolean> {\n // todo: this must be changed when the permission-checker not only checks owned permissions.\n return maybeInvertPolicyOutcome(true, ctx.config.invert);\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { createValidator } from '@validup/adapter-zod';\nimport { Container } from 'validup';\nimport { z } from 'zod';\nimport { DecisionStrategy } from '../../../constants';\nimport type { RealmMatchPolicy } from './types';\n\nexport class RealmMatchPolicyValidator extends Container<RealmMatchPolicy> {\n initialize() {\n super.initialize();\n\n this.mount(\n 'decisionStrategy',\n createValidator(\n z.nativeEnum(DecisionStrategy)\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ),\n );\n\n this.mount(\n 'attributeName',\n createValidator(\n z.string()\n .min(3)\n .or(z.array(z.string().min(3)))\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ),\n );\n this.mount(\n 'attributeNameStrict',\n createValidator(\n z.boolean()\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ),\n );\n this.mount(\n 'attributeNullMatchAll',\n createValidator(\n z.boolean()\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ),\n );\n\n this.mount(\n 'identityMasterMatchAll',\n createValidator(\n z.boolean()\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ),\n );\n\n this.mount(\n 'invert',\n createValidator(\n z.boolean()\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ),\n );\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { hasOwnProperty, isObject } from '@authup/kit';\nimport { DecisionStrategy } from '../../../constants';\nimport { PolicyError } from '../../error';\nimport type { PolicyEvaluateContext, PolicyEvaluator } from '../../evaluator';\nimport type { PolicyInput, PolicyWithType } from '../../types';\nimport { maybeInvertPolicyOutcome } from '../../helpers';\nimport { BuiltInPolicyType } from '../constants';\nimport type { RealmMatchPolicy } from './types';\nimport { RealmMatchPolicyValidator } from './validator';\n\nexport class RealmMatchPolicyEvaluator implements PolicyEvaluator<RealmMatchPolicy> {\n protected validator : RealmMatchPolicyValidator;\n\n constructor() {\n this.validator = new RealmMatchPolicyValidator();\n }\n\n async can(\n ctx: PolicyEvaluateContext<PolicyWithType>,\n ) : Promise<boolean> {\n return ctx.config.type === BuiltInPolicyType.REALM_MATCH;\n }\n\n async validateConfig(ctx: PolicyEvaluateContext) : Promise<RealmMatchPolicy> {\n return this.validator.run(ctx.config);\n }\n\n async validateInput(ctx: PolicyEvaluateContext<RealmMatchPolicy>) : Promise<PolicyInput> {\n if (\n !isObject(ctx.input.attributes) ||\n !isObject(ctx.input.identity)\n ) {\n throw PolicyError.evaluatorContextInvalid();\n }\n\n return ctx.input;\n }\n\n async evaluate(ctx: PolicyEvaluateContext<\n RealmMatchPolicy\n >): Promise<boolean> {\n if (!ctx.input.attributes || !ctx.input.identity) {\n throw PolicyError.evaluatorContextInvalid();\n }\n\n const identityMasterMatchAll = ctx.config.identityMasterMatchAll ?? true;\n if (\n identityMasterMatchAll &&\n ctx.input.identity.realmName &&\n ctx.input.identity.realmName === 'master'\n ) {\n return maybeInvertPolicyOutcome(true, ctx.config.invert);\n }\n\n let keys : string[];\n if (ctx.config.attributeName) {\n if (Array.isArray(ctx.config.attributeName)) {\n keys = ctx.config.attributeName;\n } else {\n keys = [ctx.config.attributeName];\n }\n } else {\n keys = [\n 'realm_id',\n 'realm_name',\n 'realmId',\n 'realmName',\n ];\n\n ctx.config.decisionStrategy = DecisionStrategy.CONSENSUS;\n }\n\n const attributeNameStrict = ctx.config.attributeNameStrict ?? true;\n if (!attributeNameStrict) {\n const resourceKeys = Object.keys(ctx.input.attributes);\n const keysToAdd : string[] = [];\n for (let i = 0; i < resourceKeys.length; i++) {\n let contains : boolean = false;\n\n for (let j = 0; j < keys.length; j++) {\n if (\n resourceKeys[i] !== keys[j] &&\n resourceKeys[i].includes(keys[j])\n ) {\n contains = true;\n break;\n }\n }\n\n if (contains) {\n keysToAdd.push(resourceKeys[i]);\n }\n }\n\n if (keysToAdd.length > 0) {\n keys.push(...keysToAdd);\n }\n }\n\n let count = 0;\n\n for (let i = 0; i < keys.length; i++) {\n if (!hasOwnProperty(ctx.input.attributes, keys[i])) {\n continue;\n }\n\n let outcome : boolean = false;\n\n const attributeValue = ctx.input.attributes[keys[i]];\n\n if (\n attributeValue === null &&\n ctx.config.attributeNullMatchAll\n ) {\n outcome = true;\n } else if (\n attributeValue === ctx.input.identity.realmId ||\n attributeValue === ctx.input.identity.realmName\n ) {\n outcome = true;\n }\n\n if (outcome) {\n if (ctx.config.decisionStrategy === DecisionStrategy.AFFIRMATIVE) {\n return maybeInvertPolicyOutcome(true, ctx.config.invert);\n }\n\n count++;\n } else {\n if (ctx.config.decisionStrategy === DecisionStrategy.UNANIMOUS) {\n return maybeInvertPolicyOutcome(false, ctx.config.invert);\n }\n\n count--;\n }\n }\n\n return maybeInvertPolicyOutcome(count > 0, ctx.config.invert);\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum TimePolicyInterval {\n DAILY = 'daily',\n WEEKLY = 'weekly',\n MONTHLY = 'monthly',\n YEARLY = 'yearly',\n}\n","/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { TimePolicyInterval } from './constants';\n\nexport function isIntervalForDayOfWeek(\n interval: string,\n) {\n return interval === TimePolicyInterval.WEEKLY ||\n interval === TimePolicyInterval.MONTHLY ||\n interval === TimePolicyInterval.YEARLY;\n}\n\nexport function isIntervalForDayOfMonth(\n interval: string,\n) {\n return interval === TimePolicyInterval.MONTHLY ||\n interval === TimePolicyInterval.YEARLY;\n}\n\nexport function isIntervalForDayOfYear(\n interval: string,\n) {\n return interval === TimePolicyInterval.YEARLY;\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { createValidator } from '@validup/adapter-zod';\nimport { Container } from 'validup';\nimport { z } from 'zod';\nimport type { TimePolicy } from './types';\nimport { TimePolicyInterval } from './constants';\n\nexport class TimePolicyValidator extends Container<TimePolicy> {\n initialize() {\n super.initialize();\n\n this.mount('dayOfWeek', createValidator(\n z.number()\n .min(0).max(6)\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ));\n this.mount('dayOfMonth', createValidator(\n z.number()\n .min(1)\n .max(31)\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ));\n this.mount('dayOfYear', createValidator(\n z.number()\n .min(1)\n .max(366)\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ));\n\n this.mount('start', createValidator(\n z.date()\n .or(z.string().datetime())\n .or(z.string().time())\n .or(z.number())\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ));\n this.mount('end', createValidator(\n z.date()\n .or(z.string().datetime())\n .or(z.string().time())\n .or(z.number())\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ));\n\n this.mount(\n 'interval',\n createValidator(\n z.nativeEnum(TimePolicyInterval)\n .or(z.null())\n .or(z.undefined())\n .optional(),\n ),\n );\n\n this.mount(\n 'invert',\n createValidator(\n z.boolean()\n .or(z.undefined())\n .or(z.null())\n .optional(),\n ),\n );\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { PolicyEvaluateContext, PolicyEvaluator } from '../../evaluator';\nimport { maybeInvertPolicyOutcome } from '../../helpers';\nimport type { PolicyInput, PolicyWithType } from '../../types';\nimport { BuiltInPolicyType } from '../constants';\nimport { isIntervalForDayOfMonth, isIntervalForDayOfWeek, isIntervalForDayOfYear } from './helpers';\nimport type { TimePolicy } from './types';\nimport { TimePolicyValidator } from './validator';\n\nconst timeRegex = /^(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d)?$/;\n\nfunction normalizeDate(input: Date, dateRef?: Date) {\n const date = dateRef ? new Date(dateRef) : new Date();\n date.setHours(input.getHours(), input.getMinutes());\n\n return date;\n}\n\nfunction toDate(\n input: Date | string | number,\n dateRef?: Date,\n) : Date {\n if (typeof input === 'string') {\n if (timeRegex.test(input)) {\n const [startHours, startMinutes] = input.split(':').map(Number);\n const date = dateRef ? new Date(dateRef) : new Date();\n date.setHours(startHours, startMinutes);\n return date;\n }\n\n return new Date(input);\n }\n\n if (typeof input === 'number') {\n return new Date(input);\n }\n\n return input;\n}\n\nexport class TimePolicyEvaluator implements PolicyEvaluator<TimePolicy> {\n protected validator : TimePolicyValidator;\n\n constructor() {\n this.validator = new TimePolicyValidator();\n }\n\n async can(\n ctx: PolicyEvaluateContext<PolicyWithType>,\n ) : Promise<boolean> {\n return ctx.config.type === BuiltInPolicyType.TIME;\n }\n\n async validateConfig(ctx: PolicyEvaluateContext) : Promise<TimePolicy> {\n return this.validator.run(ctx.config);\n }\n\n async validateInput(ctx: PolicyEvaluateContext<TimePolicy>) : Promise<PolicyInput> {\n return ctx.input;\n }\n\n async evaluate(ctx: PolicyEvaluateContext<TimePolicy>): Promise<boolean> {\n let now : Date;\n if (ctx.input.dateTime) {\n now = toDate(ctx.input.dateTime);\n } else {\n now = new Date();\n }\n\n if (ctx.config.start) {\n const start = normalizeDate(toDate(ctx.config.start, now), now);\n if (now < start) {\n return maybeInvertPolicyOutcome(false, ctx.config.invert);\n }\n }\n\n if (ctx.config.end) {\n const end = normalizeDate(toDate(ctx.config.end, now), now);\n if (now > end) {\n return maybeInvertPolicyOutcome(false, ctx.config.invert);\n }\n }\n\n if (ctx.config.interval) {\n if (\n isIntervalForDayOfWeek(ctx.config.interval) &&\n ctx.config.dayOfWeek\n ) {\n if (now.getDay() !== ctx.config.dayOfWeek) {\n return maybeInvertPolicyOutcome(false, ctx.config.invert);\n }\n }\n\n if (\n isIntervalForDayOfMonth(ctx.config.interval) &&\n ctx.config.dayOfMonth\n ) {\n if (now.getDate() !== ctx.config.dayOfMonth) {\n return maybeInvertPolicyOutcome(false, ctx.config.invert);\n }\n }\n\n if (\n isIntervalForDayOfYear(ctx.config.interval) &&\n ctx.config.dayOfYear\n ) {\n const start = new Date(now.getFullYear(), 0, 0);\n const diff = (now.getTime() - start.getTime()) +\n ((start.getTimezoneOffset() - now.getTimezoneOffset()) * 60 * 1000);\n\n const oneDay = 1000 * 60 * 60 * 24;\n const dayOfYear = Math.floor(diff / oneDay);\n\n if (dayOfYear !== ctx.config.dayOfYear) {\n return maybeInvertPolicyOutcome(false, ctx.config.invert);\n }\n }\n }\n\n return maybeInvertPolicyOutcome(true, ctx.config.invert);\n }\n}\n","/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { PolicyWithType } from '../types';\nimport type { BuiltInPolicyTypeMap } from './types';\n\nexport function definePolicyWithType<\n K extends keyof BuiltInPolicyTypeMap,\n D extends BuiltInPolicyTypeMap<any>[K],\n>(\n type: K,\n data: D,\n) : PolicyWithType<D, K> {\n return {\n ...data,\n type,\n };\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport {\n AttributeNamesPolicyEvaluator,\n AttributesPolicyEvaluator,\n BuiltInPolicyType,\n CompositePolicyEvaluator,\n DatePolicyEvaluator, IdentityPolicyEvaluator, PermissionBindingPolicyEvaluator,\n RealmMatchPolicyEvaluator,\n TimePolicyEvaluator,\n} from '../built-in';\nimport type { PolicyEvaluator, PolicyEvaluators } from '../evaluator';\nimport {\n evaluatePolicy,\n} from '../evaluator';\nimport type { PolicyEngineEvaluateContext } from './types';\n\n/**\n * The policy engine is a component that interprets defined policies and makes decisions\n * on whether to allow or deny a particular access.\n */\nexport class PolicyEngine {\n protected evaluators : PolicyEvaluators;\n\n constructor(evaluators: PolicyEvaluators = {}) {\n this.evaluators = {};\n this.registerDefaultEvaluators();\n this.registerEvaluators(evaluators);\n }\n\n public registerEvaluator(\n type: string,\n evaluator: PolicyEvaluator,\n ) : void {\n this.evaluators[type] = evaluator;\n }\n\n public registerEvaluators(evaluators: PolicyEvaluators) {\n const keys = Object.keys(evaluators);\n for (let i = 0; i < keys.length; i++) {\n this.registerEvaluator(keys[i], evaluators[keys[i]]);\n }\n }\n\n private registerDefaultEvaluators() {\n this.registerEvaluator(BuiltInPolicyType.COMPOSITE, new CompositePolicyEvaluator());\n this.registerEvaluator(BuiltInPolicyType.ATTRIBUTES, new AttributesPolicyEvaluator());\n this.registerEvaluator(BuiltInPolicyType.ATTRIBUTE_NAMES, new AttributeNamesPolicyEvaluator());\n this.registerEvaluator(BuiltInPolicyType.DATE, new DatePolicyEvaluator());\n this.registerEvaluator(BuiltInPolicyType.IDENTITY, new IdentityPolicyEvaluator());\n this.registerEvaluator(BuiltInPolicyType.PERMISSION_BINDING, new PermissionBindingPolicyEvaluator());\n this.registerEvaluator(BuiltInPolicyType.REALM_MATCH, new RealmMatchPolicyEvaluator());\n this.registerEvaluator(BuiltInPolicyType.TIME, new TimePolicyEvaluator());\n }\n\n /**\n * @throws PolicyError\n *\n * @param ctx\n */\n async evaluate(ctx: PolicyEngineEvaluateContext) : Promise<boolean> {\n return evaluatePolicy({\n ...ctx,\n options: ctx.options || {},\n evaluators: this.evaluators,\n });\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { AuthupErrorOptions } from '@authup/errors';\nimport { AuthupError, ErrorCode } from '@authup/errors';\nimport type { PolicyError, PolicyWithType } from '../../policy';\nimport { BuiltInPolicyType } from '../../policy';\nimport type { PermissionEvaluationErrorOptions } from './types';\n\nexport class PermissionError extends AuthupError {\n public policy : PolicyWithType | undefined;\n\n public policyError : PolicyError | undefined;\n\n constructor(options: AuthupErrorOptions = {}) {\n super({\n ...options,\n message: options.message || 'A permission error occurred.',\n statusCode: options.statusCode || 403,\n });\n }\n\n static notFound(name: string) {\n return new PermissionError({\n message: `The permission ${name} was not found.`,\n code: ErrorCode.PERMISSION_NOT_FOUND,\n });\n }\n\n static denied(name: string) {\n return new PermissionError({\n message: `The permission ${name} has not been granted.`,\n code: ErrorCode.PERMISSION_DENIED,\n });\n }\n\n static deniedAll(names: string[]) {\n return new PermissionError({\n message: `None of the permissions ${names.join(', ')} has been granted.`,\n code: ErrorCode.PERMISSION_DENIED,\n });\n }\n\n static evaluationFailed(options: PermissionEvaluationErrorOptions) {\n const error = new PermissionError({\n message: `The evaluation of permission ${options.name} failed.`,\n code: ErrorCode.PERMISSION_EVALUATION_FAILED,\n });\n\n if (options.policy) {\n error.policy = options.policy;\n\n if (options.policy.type === BuiltInPolicyType.IDENTITY) {\n error.statusCode = 401;\n }\n }\n\n if (options.policyError) {\n error.policyError = options.policyError;\n }\n\n return error;\n }\n}\n","/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { PermissionItem } from '../types';\n\nexport function buildPermissionItemKey(input: PermissionItem) {\n return `${input.realmId || '_'}/${input.clientId || '_'}/${input.name}`;\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { PermissionItem } from '../types';\n\nexport function isPermissionItemEqual(a: PermissionItem, b: PermissionItem): boolean {\n if (a.name !== b.name) {\n return false;\n }\n\n if (typeof a.realmId === 'string' || typeof b.realmId === 'string') {\n return a.realmId === b.realmId;\n }\n\n if (typeof a.clientId === 'string' || typeof b.clientId === 'string') {\n return a.clientId === b.clientId;\n }\n\n return !!a.realmId === !!b.realmId && !!a.clientId === !!b.clientId;\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { DecisionStrategy } from '../../constants';\nimport type { CompositePolicy, PolicyWithType } from '../../policy';\nimport { BuiltInPolicyType } from '../../policy';\nimport type { PermissionItem } from '../types';\nimport { buildPermissionItemKey } from './key';\n\nexport function mergePermissionItems(input: PermissionItem[]) : PermissionItem[] {\n const grouped : Record<string, PermissionItem[]> = input\n .reduce((previous, current) => {\n const key = buildPermissionItemKey(current);\n if (!previous[key]) {\n previous[key] = [];\n }\n\n previous[key].push(current);\n\n return previous;\n }, {} as Record<string, PermissionItem[]>);\n\n const output : PermissionItem[] = [];\n const keys = Object.keys(grouped);\n for (let i = 0; i < keys.length; i++) {\n const [permission, ...permissions] = grouped[keys[i]];\n\n if (permissions.length > 0) {\n const policy: PolicyWithType<CompositePolicy> = {\n type: BuiltInPolicyType.COMPOSITE,\n decisionStrategy: DecisionStrategy.AFFIRMATIVE,\n children: permissions\n .map((el) => el.policy)\n .filter((el) => typeof el !== 'undefined'),\n };\n\n if (permission.policy) {\n policy.children.push(permission.policy);\n }\n\n if (policy.children.length > 0) {\n permission.policy = policy;\n }\n }\n\n output.push(permission);\n }\n\n return output;\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { buildPermissionItemKey, mergePermissionItems } from '../helpers';\nimport type { PermissionItem } from '../types';\nimport type { PermissionGetOptions, PermissionProvider } from './types';\n\nexport class PermissionMemoryProvider implements PermissionProvider {\n protected items : Record<string, PermissionItem> = {};\n\n constructor(items: PermissionItem[] = []) {\n this.setMany(items);\n }\n\n async get(\n options: PermissionGetOptions,\n ): Promise<PermissionItem | undefined> {\n return this.items[buildPermissionItemKey(options)];\n }\n\n setMany(input: PermissionItem[]) {\n this.items = mergePermissionItems(input)\n .reduce((prev, current) => {\n prev[buildPermissionItemKey(current)] = current;\n return prev;\n }, {} as Record<string, PermissionItem>);\n }\n}\n","/*\n * Copyright (c) 2021-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { DecisionStrategy } from '../constants';\nimport { BuiltInPolicyType, PolicyEngine, PolicyError } from '../policy';\nimport { PermissionError } from './error';\nimport type { PermissionGetOptions, PermissionProvider } from './provider';\nimport { PermissionMemoryProvider } from './provider';\n\nimport type {\n PermissionCheckerCheckContext, PermissionCheckerOptions, PermissionItem,\n} from './types';\n\nexport class PermissionChecker {\n protected provider : PermissionProvider;\n\n protected policyEngine : PolicyEngine;\n\n protected clientId?: string | null;\n\n protected realmId?: string | null;\n\n // ----------------------------------------------\n\n constructor(options: PermissionCheckerOptions = {}) {\n if (options.provider) {\n this.provider = options.provider;\n } else {\n this.provider = new PermissionMemoryProvider();\n }\n\n if (options.clientId) {\n this.clientId = options.clientId;\n }\n\n if (options.realmId) {\n this.realmId = options.realmId;\n }\n\n if (options.policyEngine) {\n this.policyEngine = options.policyEngine;\n } else {\n this.policyEngine = new PolicyEngine();\n }\n }\n\n // ----------------------------------------------\n\n /**\n * Get a permission.\n *\n * @param input\n */\n protected async get(input: string) : Promise<PermissionItem | undefined> {\n const options : PermissionGetOptions = {\n name: input,\n };\n\n if (this.clientId) {\n options.clientId = this.clientId;\n }\n\n if (this.realmId) {\n options.realmId = this.realmId;\n }\n\n return this.provider.get(options);\n }\n\n // ----------------------------------------------\n\n /**\n * Verify if one or more possible owned permissions satisfy their conditions.\n *\n * @throws PermissionError\n *\n * @param ctx\n */\n async check(ctx: PermissionCheckerCheckContext) : Promise<void> {\n if (!Array.isArray(ctx.name)) {\n await this.check({\n ...ctx,\n name: [ctx.name],\n });\n return;\n }\n\n const {\n options = {},\n } = ctx;\n\n const decisionStrategy = options.decisionStrategy ??\n DecisionStrategy.UNANIMOUS;\n\n let lastError : PermissionError | undefined;\n let count = 0;\n\n for (let i = 0; i < ctx.name.length; i++) {\n const entity = await this.get(ctx.name[i]);\n if (!entity) {\n lastError = PermissionError.notFound(ctx.name[i]);\n if (decisionStrategy === DecisionStrategy.UNANIMOUS) {\n throw lastError;\n }\n\n continue;\n }\n\n if (!entity.policy) {\n if (decisionStrategy === DecisionStrategy.AFFIRMATIVE) {\n return;\n }\n\n count++;\n\n continue;\n }\n\n let outcome : boolean;\n\n try {\n outcome = await this.policyEngine.evaluate({\n input: {\n ...ctx.input || {},\n permission: entity,\n },\n config: entity.policy,\n options: {\n include: options.policiesIncluded,\n exclude: options.policiesExcluded,\n },\n });\n } catch (e) {\n if (e instanceof PolicyError) {\n lastError = PermissionError.evaluationFailed({\n name: entity.name,\n policy: entity.policy,\n policyError: e,\n });\n } else {\n lastError = PermissionError.evaluationFailed({\n name: entity.name,\n policy: entity.policy,\n });\n }\n\n outcome = false;\n }\n\n if (outcome) {\n if (decisionStrategy === DecisionStrategy.AFFIRMATIVE) {\n return;\n }\n\n count++;\n } else {\n if (!lastError) {\n lastError = PermissionError.evaluationFailed({\n name: entity.name,\n policy: entity.policy,\n });\n }\n\n if (decisionStrategy === DecisionStrategy.UNANIMOUS) {\n throw lastError;\n }\n\n count--;\n }\n }\n\n if (count > 0) {\n return;\n }\n\n if (count > 1 || !lastError) {\n throw PermissionError.deniedAll(ctx.name);\n } else {\n throw lastError;\n }\n }\n\n /**\n * Verify if one of the permissions evaluates to true.\n *\n * @throws PermissionError\n *\n * @param ctx\n */\n async checkOneOf(ctx: PermissionCheckerCheckContext) : Promise<void> {\n return this.check({\n ...ctx,\n options: {\n ...(ctx.options || {}),\n decisionStrategy: DecisionStrategy.AFFIRMATIVE,\n },\n });\n }\n\n // ----------------------------------------------\n\n async preCheck(ctx: PermissionCheckerCheckContext) : Promise<void> {\n return this.check({\n ...ctx,\n options: {\n ...(ctx.options || {}),\n policiesExcluded: [\n BuiltInPolicyType.ATTRIBUTES,\n BuiltInPolicyType.ATTRIBUTE_NAMES,\n BuiltInPolicyType.REALM_MATCH,\n ],\n },\n });\n }\n\n async preCheckOneOf(ctx: PermissionCheckerCheckContext) : Promise<void> {\n return this.preCheck({\n ...ctx,\n options: {\n ...(ctx.options || {}),\n decisionStrategy: DecisionStrategy.AFFIRMATIVE,\n },\n });\n }\n}\n"],"names":["PolicyError","AuthupError","evaluatorNotFound","type","ErrorCode","POLICY_EVALUATOR_NOT_FOUND","evaluatorNotProcessable","POLICY_EVALUATOR_NOT_PROCESSABLE","evaluatorContextInvalid","POLICY_EVALUATOR_CONTEXT_INVALID","message","code","maybeInvertPolicyOutcome","outcome","invert","BuiltInPolicyType","AttributeNamesPolicyValidator","Container","initialize","mount","createValidator","z","array","string","min","max","boolean","or","null","undefined","optional","AttributeNamesPolicyEvaluator","can","ctx","config","ATTRIBUTE_NAMES","validateConfig","validator","run","validateInput","isObject","input","attributes","evaluate","flattenObject","keys","Object","i","length","index","names","indexOf","defineAttributesPolicy","data","AttributesPolicyValidator","object","passthrough","AttributesPolicyEvaluator","ATTRIBUTES","fixQuery","query","testIt","guard","key","value","Array","isArray","fragments","match","RegExp","DecisionStrategy","PolicyDataIdentityValidator","uuid","PolicyDataPermissionValidator","PolicyDataValidator","identity","optionalValue","optionalInclude","permission","date","number","evaluatePolicy","options","exclude","include","evaluator","evaluators","canEvaluate","e","Error","error","stack","isCompositePolicy","COMPOSITE","CompositePolicyValidator","nativeEnum","CompositePolicyEvaluator","count","decisionStrategy","UNANIMOUS","children","childPolicy","AFFIRMATIVE","DatePolicyValidator","normalizeDate","Date","getFullYear","getMonth","getDate","toDate","DatePolicyEvaluator","DATE","now","dateTime","start","end","IdentityPolicyValidator","IdentityPolicyEvaluator","IDENTITY","types","typeAllowed","PermissionBindingPolicyValidator","PermissionBindingPolicyEvaluator","PERMISSION_BINDING","RealmMatchPolicyValidator","RealmMatchPolicyEvaluator","REALM_MATCH","identityMasterMatchAll","realmName","attributeName","CONSENSUS","attributeNameStrict","resourceKeys","keysToAdd","contains","j","includes","push","hasOwnProperty","attributeValue","attributeNullMatchAll","realmId","TimePolicyInterval","isIntervalForDayOfWeek","interval","WEEKLY","MONTHLY","YEARLY","isIntervalForDayOfMonth","isIntervalForDayOfYear","TimePolicyValidator","datetime","time","timeRegex","dateRef","setHours","getHours","getMinutes","test","startHours","startMinutes","split","map","Number","TimePolicyEvaluator","TIME","dayOfWeek","getDay","dayOfMonth","dayOfYear","diff","getTime","getTimezoneOffset","oneDay","Math","floor","definePolicyWithType","PolicyEngine","registerEvaluator","registerEvaluators","registerDefaultEvaluators","PermissionError","notFound","name","PERMISSION_NOT_FOUND","denied","PERMISSION_DENIED","deniedAll","join","evaluationFailed","PERMISSION_EVALUATION_FAILED","policy","statusCode","policyError","buildPermissionItemKey","clientId","isPermissionItemEqual","a","b","mergePermissionItems","grouped","reduce","previous","current","output","permissions","el","filter","PermissionMemoryProvider","get","items","setMany","prev","PermissionChecker","provider","check","lastError","entity","policyEngine","policiesIncluded","policiesExcluded","checkOneOf","preCheck","preCheckOneOf"],"mappings":"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"}