@spfn/auth 0.2.0-beta.8 → 0.2.0-beta.9
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.
- package/dist/{dto-lZmWuObc.d.ts → dto-CRlgoCP5.d.ts} +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/server.d.ts +48 -48
- package/dist/server.js +11 -0
- package/dist/server.js.map +1 -1
- package/package.json +1 -1
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/guard/value.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/clone/value.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/clone/type.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/clone/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/value/guard/guard.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/value/guard/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/system/policy.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/create/immutable.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/create/type.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/create/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/error/error.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/error/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/symbols/symbols.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/symbols/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/guard/kind.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/guard/type.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/guard/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/helpers/helpers.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/helpers/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/patterns/patterns.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/patterns/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/registry/format.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/registry/type.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/registry/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/sets/set.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/sets/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/any/any.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/any/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/array/array.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/array/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/argument/argument.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/argument/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/async-iterator/async-iterator.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/async-iterator/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/computed/computed.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/computed/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/discard/discard.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/discard/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/never/never.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/never/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/mapped/mapped-key.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/mapped/mapped-result.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/constructor/constructor.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/constructor/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/function/function.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/function/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/union/union-create.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/union/union-evaluated.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/union/union-type.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/union/union.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/union/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/template-literal/parse.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/template-literal/finite.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/template-literal/generate.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/literal/literal.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/literal/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/boolean/boolean.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/boolean/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/bigint/bigint.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/bigint/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/number/number.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/number/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/string/string.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/string/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/template-literal/syntax.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/template-literal/pattern.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/template-literal/union.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/template-literal/template-literal.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/template-literal/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/indexed/indexed-property-keys.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/indexed/indexed-from-mapped-result.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/indexed/indexed.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/indexed/indexed-from-mapped-key.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/indexed/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/iterator/iterator.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/iterator/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/object/object.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/object/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/promise/promise.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/promise/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/readonly/readonly.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/readonly/readonly-from-mapped-result.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/readonly/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/tuple/tuple.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/tuple/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/mapped/mapped.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/mapped/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/optional/optional.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/optional/optional-from-mapped-result.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/optional/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/intersect/intersect-create.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/intersect/intersect-evaluated.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/intersect/intersect-type.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/intersect/intersect.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/intersect/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/ref/ref.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/ref/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/awaited/awaited.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/awaited/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/keyof/keyof-property-keys.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/keyof/keyof.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/keyof/keyof-from-mapped-result.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/keyof/keyof-property-entries.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/keyof/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/composite/composite.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/composite/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/date/date.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/date/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/null/null.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/null/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/symbol/symbol.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/symbol/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/undefined/undefined.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/undefined/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/uint8array/uint8array.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/uint8array/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/unknown/unknown.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/unknown/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/const/const.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/const/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/constructor-parameters/constructor-parameters.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/constructor-parameters/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/enum/enum.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/enum/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/extends/extends-check.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/extends/extends-from-mapped-result.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/extends/extends.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/extends/extends-from-mapped-key.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/extends/extends-undefined.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/extends/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/exclude/exclude-from-template-literal.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/exclude/exclude.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/exclude/exclude-from-mapped-result.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/exclude/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/extract/extract-from-template-literal.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/extract/extract.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/extract/extract-from-mapped-result.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/extract/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/instance-type/instance-type.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/instance-type/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/readonly-optional/readonly-optional.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/readonly-optional/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/record/record.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/record/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/instantiate/instantiate.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/instantiate/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/integer/integer.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/integer/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/intrinsic/intrinsic-from-mapped-key.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/intrinsic/intrinsic.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/intrinsic/capitalize.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/intrinsic/lowercase.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/intrinsic/uncapitalize.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/intrinsic/uppercase.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/intrinsic/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/omit/omit-from-mapped-result.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/omit/omit.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/omit/omit-from-mapped-key.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/omit/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/pick/pick-from-mapped-result.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/pick/pick.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/pick/pick-from-mapped-key.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/pick/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/partial/partial.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/partial/partial-from-mapped-result.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/partial/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/required/required.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/required/required-from-mapped-result.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/required/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/module/compute.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/module/module.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/module/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/not/not.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/not/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/parameters/parameters.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/parameters/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/recursive/recursive.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/recursive/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/regexp/regexp.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/regexp/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/rest/rest.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/rest/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/return-type/return-type.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/return-type/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/schema/anyschema.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/schema/schema.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/schema/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/static/static.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/static/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/transform/transform.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/transform/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/unsafe/unsafe.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/unsafe/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/void/void.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/void/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/type/type.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/type/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/index.mjs","../src/server/routes/schema.ts","../src/server/types.ts","../src/server/entities/schema.ts","../src/server/entities/roles.ts","../src/server/entities/users.ts","../src/server/entities/user-profiles.ts","../src/server/entities/user-public-keys.ts","../src/server/entities/user-social-accounts.ts","../src/server/entities/verification-codes.ts","../src/server/entities/user-invitations.ts","../src/server/rbac/types.ts","../src/server/rbac/builtin.ts","../src/server/rbac/index.ts","../src/server/entities/permissions.ts","../src/server/entities/role-permissions.ts","../src/server/entities/user-permissions.ts","../src/server/entities/index.ts","../src/server/repositories/users.repository.ts","../src/server/repositories/keys.repository.ts","../src/server/repositories/verification-codes.repository.ts","../src/server/repositories/roles.repository.ts","../src/server/repositories/permissions.repository.ts","../src/server/repositories/role-permissions.repository.ts","../src/server/repositories/user-permissions.repository.ts","../src/server/repositories/user-profiles.repository.ts","../src/server/repositories/invitations.repository.ts","../src/server/repositories/index.ts","../src/server/services/role.service.ts","../src/server.ts","../src/server/routes/index.ts","../src/server/routes/auth/index.ts","../src/server/helpers/password.ts","../src/server/helpers/jwt.ts","../src/server/helpers/context.ts","../src/server/services/auth.service.ts","../src/server/services/verification.service.ts","../src/server/logger.ts","../src/server/services/sms/provider.ts","../src/server/services/sms/aws-sns.provider.ts","../src/server/services/sms/index.ts","../src/server/services/email/provider.ts","../src/server/services/email/aws-ses.provider.ts","../src/server/services/email/index.ts","../src/server/services/email/templates/verification-code.ts","../src/server/services/email/templates/registry.ts","../src/server/services/key.service.ts","../src/server/services/user.service.ts","../src/server/services/rbac.service.ts","../src/server/lib/config.ts","../src/server/services/permission.service.ts","../src/server/services/index.ts","../src/server/services/invitation.service.ts","../src/server/services/auth-session.service.ts","../src/server/services/user-profile.service.ts","../src/server/routes/invitations/index.ts","../src/server/middleware/authenticate.ts","../src/server/middleware/require-permission.ts","../src/server/middleware/require-role.ts","../src/server/middleware/role-guard.ts","../src/server/routes/users/index.ts","../src/server/lib/crypto.ts","../src/server/lib/session.ts","../src/server/setup.ts","../src/server/lifecycle.ts"],"sourcesContent":["// --------------------------------------------------------------------------\n// PropertyKey\n// --------------------------------------------------------------------------\n/** Returns true if this value has this property key */\nexport function HasPropertyKey(value, key) {\n return key in value;\n}\n// --------------------------------------------------------------------------\n// Object Instances\n// --------------------------------------------------------------------------\n/** Returns true if this value is an async iterator */\nexport function IsAsyncIterator(value) {\n return IsObject(value) && !IsArray(value) && !IsUint8Array(value) && Symbol.asyncIterator in value;\n}\n/** Returns true if this value is an array */\nexport function IsArray(value) {\n return Array.isArray(value);\n}\n/** Returns true if this value is bigint */\nexport function IsBigInt(value) {\n return typeof value === 'bigint';\n}\n/** Returns true if this value is a boolean */\nexport function IsBoolean(value) {\n return typeof value === 'boolean';\n}\n/** Returns true if this value is a Date object */\nexport function IsDate(value) {\n return value instanceof globalThis.Date;\n}\n/** Returns true if this value is a function */\nexport function IsFunction(value) {\n return typeof value === 'function';\n}\n/** Returns true if this value is an iterator */\nexport function IsIterator(value) {\n return IsObject(value) && !IsArray(value) && !IsUint8Array(value) && Symbol.iterator in value;\n}\n/** Returns true if this value is null */\nexport function IsNull(value) {\n return value === null;\n}\n/** Returns true if this value is number */\nexport function IsNumber(value) {\n return typeof value === 'number';\n}\n/** Returns true if this value is an object */\nexport function IsObject(value) {\n return typeof value === 'object' && value !== null;\n}\n/** Returns true if this value is RegExp */\nexport function IsRegExp(value) {\n return value instanceof globalThis.RegExp;\n}\n/** Returns true if this value is string */\nexport function IsString(value) {\n return typeof value === 'string';\n}\n/** Returns true if this value is symbol */\nexport function IsSymbol(value) {\n return typeof value === 'symbol';\n}\n/** Returns true if this value is a Uint8Array */\nexport function IsUint8Array(value) {\n return value instanceof globalThis.Uint8Array;\n}\n/** Returns true if this value is undefined */\nexport function IsUndefined(value) {\n return value === undefined;\n}\n","import * as ValueGuard from '../guard/value.mjs';\nfunction ArrayType(value) {\n return value.map((value) => Visit(value));\n}\nfunction DateType(value) {\n return new Date(value.getTime());\n}\nfunction Uint8ArrayType(value) {\n return new Uint8Array(value);\n}\nfunction RegExpType(value) {\n return new RegExp(value.source, value.flags);\n}\nfunction ObjectType(value) {\n const result = {};\n for (const key of Object.getOwnPropertyNames(value)) {\n result[key] = Visit(value[key]);\n }\n for (const key of Object.getOwnPropertySymbols(value)) {\n result[key] = Visit(value[key]);\n }\n return result;\n}\n// prettier-ignore\nfunction Visit(value) {\n return (ValueGuard.IsArray(value) ? ArrayType(value) :\n ValueGuard.IsDate(value) ? DateType(value) :\n ValueGuard.IsUint8Array(value) ? Uint8ArrayType(value) :\n ValueGuard.IsRegExp(value) ? RegExpType(value) :\n ValueGuard.IsObject(value) ? ObjectType(value) :\n value);\n}\n/** Clones a value */\nexport function Clone(value) {\n return Visit(value);\n}\n","import { Clone } from './value.mjs';\n/** Clones a Rest */\nexport function CloneRest(schemas) {\n return schemas.map((schema) => CloneType(schema));\n}\n/** Clones a Type */\nexport function CloneType(schema, options) {\n return options === undefined ? Clone(schema) : Clone({ ...options, ...schema });\n}\n","export * from './type.mjs';\nexport * from './value.mjs';\n","// --------------------------------------------------------------------------\n// Iterators\n// --------------------------------------------------------------------------\n/** Returns true if this value is an async iterator */\nexport function IsAsyncIterator(value) {\n return IsObject(value) && globalThis.Symbol.asyncIterator in value;\n}\n/** Returns true if this value is an iterator */\nexport function IsIterator(value) {\n return IsObject(value) && globalThis.Symbol.iterator in value;\n}\n// --------------------------------------------------------------------------\n// Object Instances\n// --------------------------------------------------------------------------\n/** Returns true if this value is not an instance of a class */\nexport function IsStandardObject(value) {\n return IsObject(value) && (globalThis.Object.getPrototypeOf(value) === Object.prototype || globalThis.Object.getPrototypeOf(value) === null);\n}\n/** Returns true if this value is an instance of a class */\nexport function IsInstanceObject(value) {\n return IsObject(value) && !IsArray(value) && IsFunction(value.constructor) && value.constructor.name !== 'Object';\n}\n// --------------------------------------------------------------------------\n// JavaScript\n// --------------------------------------------------------------------------\n/** Returns true if this value is a Promise */\nexport function IsPromise(value) {\n return value instanceof globalThis.Promise;\n}\n/** Returns true if this value is a Date */\nexport function IsDate(value) {\n return value instanceof Date && globalThis.Number.isFinite(value.getTime());\n}\n/** Returns true if this value is an instance of Map<K, T> */\nexport function IsMap(value) {\n return value instanceof globalThis.Map;\n}\n/** Returns true if this value is an instance of Set<T> */\nexport function IsSet(value) {\n return value instanceof globalThis.Set;\n}\n/** Returns true if this value is RegExp */\nexport function IsRegExp(value) {\n return value instanceof globalThis.RegExp;\n}\n/** Returns true if this value is a typed array */\nexport function IsTypedArray(value) {\n return globalThis.ArrayBuffer.isView(value);\n}\n/** Returns true if the value is a Int8Array */\nexport function IsInt8Array(value) {\n return value instanceof globalThis.Int8Array;\n}\n/** Returns true if the value is a Uint8Array */\nexport function IsUint8Array(value) {\n return value instanceof globalThis.Uint8Array;\n}\n/** Returns true if the value is a Uint8ClampedArray */\nexport function IsUint8ClampedArray(value) {\n return value instanceof globalThis.Uint8ClampedArray;\n}\n/** Returns true if the value is a Int16Array */\nexport function IsInt16Array(value) {\n return value instanceof globalThis.Int16Array;\n}\n/** Returns true if the value is a Uint16Array */\nexport function IsUint16Array(value) {\n return value instanceof globalThis.Uint16Array;\n}\n/** Returns true if the value is a Int32Array */\nexport function IsInt32Array(value) {\n return value instanceof globalThis.Int32Array;\n}\n/** Returns true if the value is a Uint32Array */\nexport function IsUint32Array(value) {\n return value instanceof globalThis.Uint32Array;\n}\n/** Returns true if the value is a Float32Array */\nexport function IsFloat32Array(value) {\n return value instanceof globalThis.Float32Array;\n}\n/** Returns true if the value is a Float64Array */\nexport function IsFloat64Array(value) {\n return value instanceof globalThis.Float64Array;\n}\n/** Returns true if the value is a BigInt64Array */\nexport function IsBigInt64Array(value) {\n return value instanceof globalThis.BigInt64Array;\n}\n/** Returns true if the value is a BigUint64Array */\nexport function IsBigUint64Array(value) {\n return value instanceof globalThis.BigUint64Array;\n}\n// --------------------------------------------------------------------------\n// PropertyKey\n// --------------------------------------------------------------------------\n/** Returns true if this value has this property key */\nexport function HasPropertyKey(value, key) {\n return key in value;\n}\n// --------------------------------------------------------------------------\n// Standard\n// --------------------------------------------------------------------------\n/** Returns true of this value is an object type */\nexport function IsObject(value) {\n return value !== null && typeof value === 'object';\n}\n/** Returns true if this value is an array, but not a typed array */\nexport function IsArray(value) {\n return globalThis.Array.isArray(value) && !globalThis.ArrayBuffer.isView(value);\n}\n/** Returns true if this value is an undefined */\nexport function IsUndefined(value) {\n return value === undefined;\n}\n/** Returns true if this value is an null */\nexport function IsNull(value) {\n return value === null;\n}\n/** Returns true if this value is an boolean */\nexport function IsBoolean(value) {\n return typeof value === 'boolean';\n}\n/** Returns true if this value is an number */\nexport function IsNumber(value) {\n return typeof value === 'number';\n}\n/** Returns true if this value is an integer */\nexport function IsInteger(value) {\n return globalThis.Number.isInteger(value);\n}\n/** Returns true if this value is bigint */\nexport function IsBigInt(value) {\n return typeof value === 'bigint';\n}\n/** Returns true if this value is string */\nexport function IsString(value) {\n return typeof value === 'string';\n}\n/** Returns true if this value is a function */\nexport function IsFunction(value) {\n return typeof value === 'function';\n}\n/** Returns true if this value is a symbol */\nexport function IsSymbol(value) {\n return typeof value === 'symbol';\n}\n/** Returns true if this value is a value type such as number, string, boolean */\nexport function IsValueType(value) {\n // prettier-ignore\n return (IsBigInt(value) ||\n IsBoolean(value) ||\n IsNull(value) ||\n IsNumber(value) ||\n IsString(value) ||\n IsSymbol(value) ||\n IsUndefined(value));\n}\n","export * from './guard.mjs';\n","import { IsObject, IsArray, IsNumber, IsUndefined } from '../value/guard/index.mjs';\nexport var TypeSystemPolicy;\n(function (TypeSystemPolicy) {\n // ------------------------------------------------------------------\n // TypeSystemPolicy: Instancing\n // ------------------------------------------------------------------\n /**\n * Configures the instantiation behavior of TypeBox types. The `default` option assigns raw JavaScript\n * references for embedded types, which may cause side effects if type properties are explicitly updated\n * outside the TypeBox type builder. The `clone` option creates copies of any shared types upon creation,\n * preventing unintended side effects. The `freeze` option applies `Object.freeze()` to the type, making\n * it fully readonly and immutable. Implementations should use `default` whenever possible, as it is the\n * fastest way to instantiate types. The default setting is `default`.\n */\n TypeSystemPolicy.InstanceMode = 'default';\n // ------------------------------------------------------------------\n // TypeSystemPolicy: Checking\n // ------------------------------------------------------------------\n /** Sets whether TypeBox should assert optional properties using the TypeScript `exactOptionalPropertyTypes` assertion policy. The default is `false` */\n TypeSystemPolicy.ExactOptionalPropertyTypes = false;\n /** Sets whether arrays should be treated as a kind of objects. The default is `false` */\n TypeSystemPolicy.AllowArrayObject = false;\n /** Sets whether `NaN` or `Infinity` should be treated as valid numeric values. The default is `false` */\n TypeSystemPolicy.AllowNaN = false;\n /** Sets whether `null` should validate for void types. The default is `false` */\n TypeSystemPolicy.AllowNullVoid = false;\n /** Checks this value using the ExactOptionalPropertyTypes policy */\n function IsExactOptionalProperty(value, key) {\n return TypeSystemPolicy.ExactOptionalPropertyTypes ? key in value : value[key] !== undefined;\n }\n TypeSystemPolicy.IsExactOptionalProperty = IsExactOptionalProperty;\n /** Checks this value using the AllowArrayObjects policy */\n function IsObjectLike(value) {\n const isObject = IsObject(value);\n return TypeSystemPolicy.AllowArrayObject ? isObject : isObject && !IsArray(value);\n }\n TypeSystemPolicy.IsObjectLike = IsObjectLike;\n /** Checks this value as a record using the AllowArrayObjects policy */\n function IsRecordLike(value) {\n return IsObjectLike(value) && !(value instanceof Date) && !(value instanceof Uint8Array);\n }\n TypeSystemPolicy.IsRecordLike = IsRecordLike;\n /** Checks this value using the AllowNaN policy */\n function IsNumberLike(value) {\n return TypeSystemPolicy.AllowNaN ? IsNumber(value) : Number.isFinite(value);\n }\n TypeSystemPolicy.IsNumberLike = IsNumberLike;\n /** Checks this value using the AllowVoidNull policy */\n function IsVoidLike(value) {\n const isUndefined = IsUndefined(value);\n return TypeSystemPolicy.AllowNullVoid ? isUndefined || value === null : isUndefined;\n }\n TypeSystemPolicy.IsVoidLike = IsVoidLike;\n})(TypeSystemPolicy || (TypeSystemPolicy = {}));\n","import * as ValueGuard from '../guard/value.mjs';\nfunction ImmutableArray(value) {\n return globalThis.Object.freeze(value).map((value) => Immutable(value));\n}\nfunction ImmutableDate(value) {\n return value;\n}\nfunction ImmutableUint8Array(value) {\n return value;\n}\nfunction ImmutableRegExp(value) {\n return value;\n}\nfunction ImmutableObject(value) {\n const result = {};\n for (const key of Object.getOwnPropertyNames(value)) {\n result[key] = Immutable(value[key]);\n }\n for (const key of Object.getOwnPropertySymbols(value)) {\n result[key] = Immutable(value[key]);\n }\n return globalThis.Object.freeze(result);\n}\n/** Specialized deep immutable value. Applies freeze recursively to the given value */\n// prettier-ignore\nexport function Immutable(value) {\n return (ValueGuard.IsArray(value) ? ImmutableArray(value) :\n ValueGuard.IsDate(value) ? ImmutableDate(value) :\n ValueGuard.IsUint8Array(value) ? ImmutableUint8Array(value) :\n ValueGuard.IsRegExp(value) ? ImmutableRegExp(value) :\n ValueGuard.IsObject(value) ? ImmutableObject(value) :\n value);\n}\n","import { TypeSystemPolicy } from '../../system/policy.mjs';\nimport { Immutable } from './immutable.mjs';\nimport { Clone } from '../clone/value.mjs';\n/** Creates TypeBox schematics using the configured InstanceMode */\nexport function CreateType(schema, options) {\n const result = options !== undefined ? { ...options, ...schema } : schema;\n switch (TypeSystemPolicy.InstanceMode) {\n case 'freeze':\n return Immutable(result);\n case 'clone':\n return Clone(result);\n default:\n return result;\n }\n}\n","export * from './type.mjs';\n","/** The base Error type thrown for all TypeBox exceptions */\nexport class TypeBoxError extends Error {\n constructor(message) {\n super(message);\n }\n}\n","export * from './error.mjs';\n","/** Symbol key applied to transform types */\nexport const TransformKind = Symbol.for('TypeBox.Transform');\n/** Symbol key applied to readonly types */\nexport const ReadonlyKind = Symbol.for('TypeBox.Readonly');\n/** Symbol key applied to optional types */\nexport const OptionalKind = Symbol.for('TypeBox.Optional');\n/** Symbol key applied to types */\nexport const Hint = Symbol.for('TypeBox.Hint');\n/** Symbol key applied to types */\nexport const Kind = Symbol.for('TypeBox.Kind');\n","export * from './symbols.mjs';\n","import * as ValueGuard from './value.mjs';\nimport { Kind, Hint, TransformKind, ReadonlyKind, OptionalKind } from '../symbols/index.mjs';\n/** `[Kind-Only]` Returns true if this value has a Readonly symbol */\nexport function IsReadonly(value) {\n return ValueGuard.IsObject(value) && value[ReadonlyKind] === 'Readonly';\n}\n/** `[Kind-Only]` Returns true if this value has a Optional symbol */\nexport function IsOptional(value) {\n return ValueGuard.IsObject(value) && value[OptionalKind] === 'Optional';\n}\n/** `[Kind-Only]` Returns true if the given value is TAny */\nexport function IsAny(value) {\n return IsKindOf(value, 'Any');\n}\n/** `[Kind-Only]` Returns true if the given value is TArgument */\nexport function IsArgument(value) {\n return IsKindOf(value, 'Argument');\n}\n/** `[Kind-Only]` Returns true if the given value is TArray */\nexport function IsArray(value) {\n return IsKindOf(value, 'Array');\n}\n/** `[Kind-Only]` Returns true if the given value is TAsyncIterator */\nexport function IsAsyncIterator(value) {\n return IsKindOf(value, 'AsyncIterator');\n}\n/** `[Kind-Only]` Returns true if the given value is TBigInt */\nexport function IsBigInt(value) {\n return IsKindOf(value, 'BigInt');\n}\n/** `[Kind-Only]` Returns true if the given value is TBoolean */\nexport function IsBoolean(value) {\n return IsKindOf(value, 'Boolean');\n}\n/** `[Kind-Only]` Returns true if the given value is TComputed */\nexport function IsComputed(value) {\n return IsKindOf(value, 'Computed');\n}\n/** `[Kind-Only]` Returns true if the given value is TConstructor */\nexport function IsConstructor(value) {\n return IsKindOf(value, 'Constructor');\n}\n/** `[Kind-Only]` Returns true if the given value is TDate */\nexport function IsDate(value) {\n return IsKindOf(value, 'Date');\n}\n/** `[Kind-Only]` Returns true if the given value is TFunction */\nexport function IsFunction(value) {\n return IsKindOf(value, 'Function');\n}\n/** `[Kind-Only]` Returns true if the given value is TInteger */\nexport function IsImport(value) {\n return IsKindOf(value, 'Import');\n}\n/** `[Kind-Only]` Returns true if the given value is TInteger */\nexport function IsInteger(value) {\n return IsKindOf(value, 'Integer');\n}\n/** `[Kind-Only]` Returns true if the given schema is TProperties */\nexport function IsProperties(value) {\n return ValueGuard.IsObject(value);\n}\n/** `[Kind-Only]` Returns true if the given value is TIntersect */\nexport function IsIntersect(value) {\n return IsKindOf(value, 'Intersect');\n}\n/** `[Kind-Only]` Returns true if the given value is TIterator */\nexport function IsIterator(value) {\n return IsKindOf(value, 'Iterator');\n}\n/** `[Kind-Only]` Returns true if the given value is a TKind with the given name. */\nexport function IsKindOf(value, kind) {\n return ValueGuard.IsObject(value) && Kind in value && value[Kind] === kind;\n}\n/** `[Kind-Only]` Returns true if the given value is TLiteral<string> */\nexport function IsLiteralString(value) {\n return IsLiteral(value) && ValueGuard.IsString(value.const);\n}\n/** `[Kind-Only]` Returns true if the given value is TLiteral<number> */\nexport function IsLiteralNumber(value) {\n return IsLiteral(value) && ValueGuard.IsNumber(value.const);\n}\n/** `[Kind-Only]` Returns true if the given value is TLiteral<boolean> */\nexport function IsLiteralBoolean(value) {\n return IsLiteral(value) && ValueGuard.IsBoolean(value.const);\n}\n/** `[Kind-Only]` Returns true if the given value is TLiteralValue */\nexport function IsLiteralValue(value) {\n return ValueGuard.IsBoolean(value) || ValueGuard.IsNumber(value) || ValueGuard.IsString(value);\n}\n/** `[Kind-Only]` Returns true if the given value is TLiteral */\nexport function IsLiteral(value) {\n return IsKindOf(value, 'Literal');\n}\n/** `[Kind-Only]` Returns true if the given value is a TMappedKey */\nexport function IsMappedKey(value) {\n return IsKindOf(value, 'MappedKey');\n}\n/** `[Kind-Only]` Returns true if the given value is TMappedResult */\nexport function IsMappedResult(value) {\n return IsKindOf(value, 'MappedResult');\n}\n/** `[Kind-Only]` Returns true if the given value is TNever */\nexport function IsNever(value) {\n return IsKindOf(value, 'Never');\n}\n/** `[Kind-Only]` Returns true if the given value is TNot */\nexport function IsNot(value) {\n return IsKindOf(value, 'Not');\n}\n/** `[Kind-Only]` Returns true if the given value is TNull */\nexport function IsNull(value) {\n return IsKindOf(value, 'Null');\n}\n/** `[Kind-Only]` Returns true if the given value is TNumber */\nexport function IsNumber(value) {\n return IsKindOf(value, 'Number');\n}\n/** `[Kind-Only]` Returns true if the given value is TObject */\nexport function IsObject(value) {\n return IsKindOf(value, 'Object');\n}\n/** `[Kind-Only]` Returns true if the given value is TPromise */\nexport function IsPromise(value) {\n return IsKindOf(value, 'Promise');\n}\n/** `[Kind-Only]` Returns true if the given value is TRecord */\nexport function IsRecord(value) {\n return IsKindOf(value, 'Record');\n}\n/** `[Kind-Only]` Returns true if this value is TRecursive */\nexport function IsRecursive(value) {\n return ValueGuard.IsObject(value) && Hint in value && value[Hint] === 'Recursive';\n}\n/** `[Kind-Only]` Returns true if the given value is TRef */\nexport function IsRef(value) {\n return IsKindOf(value, 'Ref');\n}\n/** `[Kind-Only]` Returns true if the given value is TRegExp */\nexport function IsRegExp(value) {\n return IsKindOf(value, 'RegExp');\n}\n/** `[Kind-Only]` Returns true if the given value is TString */\nexport function IsString(value) {\n return IsKindOf(value, 'String');\n}\n/** `[Kind-Only]` Returns true if the given value is TSymbol */\nexport function IsSymbol(value) {\n return IsKindOf(value, 'Symbol');\n}\n/** `[Kind-Only]` Returns true if the given value is TTemplateLiteral */\nexport function IsTemplateLiteral(value) {\n return IsKindOf(value, 'TemplateLiteral');\n}\n/** `[Kind-Only]` Returns true if the given value is TThis */\nexport function IsThis(value) {\n return IsKindOf(value, 'This');\n}\n/** `[Kind-Only]` Returns true of this value is TTransform */\nexport function IsTransform(value) {\n return ValueGuard.IsObject(value) && TransformKind in value;\n}\n/** `[Kind-Only]` Returns true if the given value is TTuple */\nexport function IsTuple(value) {\n return IsKindOf(value, 'Tuple');\n}\n/** `[Kind-Only]` Returns true if the given value is TUndefined */\nexport function IsUndefined(value) {\n return IsKindOf(value, 'Undefined');\n}\n/** `[Kind-Only]` Returns true if the given value is TUnion */\nexport function IsUnion(value) {\n return IsKindOf(value, 'Union');\n}\n/** `[Kind-Only]` Returns true if the given value is TUint8Array */\nexport function IsUint8Array(value) {\n return IsKindOf(value, 'Uint8Array');\n}\n/** `[Kind-Only]` Returns true if the given value is TUnknown */\nexport function IsUnknown(value) {\n return IsKindOf(value, 'Unknown');\n}\n/** `[Kind-Only]` Returns true if the given value is a raw TUnsafe */\nexport function IsUnsafe(value) {\n return IsKindOf(value, 'Unsafe');\n}\n/** `[Kind-Only]` Returns true if the given value is TVoid */\nexport function IsVoid(value) {\n return IsKindOf(value, 'Void');\n}\n/** `[Kind-Only]` Returns true if the given value is TKind */\nexport function IsKind(value) {\n return ValueGuard.IsObject(value) && Kind in value && ValueGuard.IsString(value[Kind]);\n}\n/** `[Kind-Only]` Returns true if the given value is TSchema */\nexport function IsSchema(value) {\n // prettier-ignore\n return (IsAny(value) ||\n IsArgument(value) ||\n IsArray(value) ||\n IsBoolean(value) ||\n IsBigInt(value) ||\n IsAsyncIterator(value) ||\n IsComputed(value) ||\n IsConstructor(value) ||\n IsDate(value) ||\n IsFunction(value) ||\n IsInteger(value) ||\n IsIntersect(value) ||\n IsIterator(value) ||\n IsLiteral(value) ||\n IsMappedKey(value) ||\n IsMappedResult(value) ||\n IsNever(value) ||\n IsNot(value) ||\n IsNull(value) ||\n IsNumber(value) ||\n IsObject(value) ||\n IsPromise(value) ||\n IsRecord(value) ||\n IsRef(value) ||\n IsRegExp(value) ||\n IsString(value) ||\n IsSymbol(value) ||\n IsTemplateLiteral(value) ||\n IsThis(value) ||\n IsTuple(value) ||\n IsUndefined(value) ||\n IsUnion(value) ||\n IsUint8Array(value) ||\n IsUnknown(value) ||\n IsUnsafe(value) ||\n IsVoid(value) ||\n IsKind(value));\n}\n","import * as ValueGuard from './value.mjs';\nimport { Kind, Hint, TransformKind, ReadonlyKind, OptionalKind } from '../symbols/index.mjs';\nimport { TypeBoxError } from '../error/index.mjs';\nexport class TypeGuardUnknownTypeError extends TypeBoxError {\n}\nconst KnownTypes = [\n 'Argument',\n 'Any',\n 'Array',\n 'AsyncIterator',\n 'BigInt',\n 'Boolean',\n 'Computed',\n 'Constructor',\n 'Date',\n 'Enum',\n 'Function',\n 'Integer',\n 'Intersect',\n 'Iterator',\n 'Literal',\n 'MappedKey',\n 'MappedResult',\n 'Not',\n 'Null',\n 'Number',\n 'Object',\n 'Promise',\n 'Record',\n 'Ref',\n 'RegExp',\n 'String',\n 'Symbol',\n 'TemplateLiteral',\n 'This',\n 'Tuple',\n 'Undefined',\n 'Union',\n 'Uint8Array',\n 'Unknown',\n 'Void',\n];\nfunction IsPattern(value) {\n try {\n new RegExp(value);\n return true;\n }\n catch {\n return false;\n }\n}\nfunction IsControlCharacterFree(value) {\n if (!ValueGuard.IsString(value))\n return false;\n for (let i = 0; i < value.length; i++) {\n const code = value.charCodeAt(i);\n if ((code >= 7 && code <= 13) || code === 27 || code === 127) {\n return false;\n }\n }\n return true;\n}\nfunction IsAdditionalProperties(value) {\n return IsOptionalBoolean(value) || IsSchema(value);\n}\nfunction IsOptionalBigInt(value) {\n return ValueGuard.IsUndefined(value) || ValueGuard.IsBigInt(value);\n}\nfunction IsOptionalNumber(value) {\n return ValueGuard.IsUndefined(value) || ValueGuard.IsNumber(value);\n}\nfunction IsOptionalBoolean(value) {\n return ValueGuard.IsUndefined(value) || ValueGuard.IsBoolean(value);\n}\nfunction IsOptionalString(value) {\n return ValueGuard.IsUndefined(value) || ValueGuard.IsString(value);\n}\nfunction IsOptionalPattern(value) {\n return ValueGuard.IsUndefined(value) || (ValueGuard.IsString(value) && IsControlCharacterFree(value) && IsPattern(value));\n}\nfunction IsOptionalFormat(value) {\n return ValueGuard.IsUndefined(value) || (ValueGuard.IsString(value) && IsControlCharacterFree(value));\n}\nfunction IsOptionalSchema(value) {\n return ValueGuard.IsUndefined(value) || IsSchema(value);\n}\n// ------------------------------------------------------------------\n// Modifiers\n// ------------------------------------------------------------------\n/** Returns true if this value has a Readonly symbol */\nexport function IsReadonly(value) {\n return ValueGuard.IsObject(value) && value[ReadonlyKind] === 'Readonly';\n}\n/** Returns true if this value has a Optional symbol */\nexport function IsOptional(value) {\n return ValueGuard.IsObject(value) && value[OptionalKind] === 'Optional';\n}\n// ------------------------------------------------------------------\n// Types\n// ------------------------------------------------------------------\n/** Returns true if the given value is TAny */\nexport function IsAny(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Any') &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is TArgument */\nexport function IsArgument(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Argument') &&\n ValueGuard.IsNumber(value.index));\n}\n/** Returns true if the given value is TArray */\nexport function IsArray(value) {\n return (IsKindOf(value, 'Array') &&\n value.type === 'array' &&\n IsOptionalString(value.$id) &&\n IsSchema(value.items) &&\n IsOptionalNumber(value.minItems) &&\n IsOptionalNumber(value.maxItems) &&\n IsOptionalBoolean(value.uniqueItems) &&\n IsOptionalSchema(value.contains) &&\n IsOptionalNumber(value.minContains) &&\n IsOptionalNumber(value.maxContains));\n}\n/** Returns true if the given value is TAsyncIterator */\nexport function IsAsyncIterator(value) {\n // prettier-ignore\n return (IsKindOf(value, 'AsyncIterator') &&\n value.type === 'AsyncIterator' &&\n IsOptionalString(value.$id) &&\n IsSchema(value.items));\n}\n/** Returns true if the given value is TBigInt */\nexport function IsBigInt(value) {\n // prettier-ignore\n return (IsKindOf(value, 'BigInt') &&\n value.type === 'bigint' &&\n IsOptionalString(value.$id) &&\n IsOptionalBigInt(value.exclusiveMaximum) &&\n IsOptionalBigInt(value.exclusiveMinimum) &&\n IsOptionalBigInt(value.maximum) &&\n IsOptionalBigInt(value.minimum) &&\n IsOptionalBigInt(value.multipleOf));\n}\n/** Returns true if the given value is TBoolean */\nexport function IsBoolean(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Boolean') &&\n value.type === 'boolean' &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is TComputed */\nexport function IsComputed(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Computed') &&\n ValueGuard.IsString(value.target) &&\n ValueGuard.IsArray(value.parameters) &&\n value.parameters.every((schema) => IsSchema(schema)));\n}\n/** Returns true if the given value is TConstructor */\nexport function IsConstructor(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Constructor') &&\n value.type === 'Constructor' &&\n IsOptionalString(value.$id) &&\n ValueGuard.IsArray(value.parameters) &&\n value.parameters.every(schema => IsSchema(schema)) &&\n IsSchema(value.returns));\n}\n/** Returns true if the given value is TDate */\nexport function IsDate(value) {\n return (IsKindOf(value, 'Date') &&\n value.type === 'Date' &&\n IsOptionalString(value.$id) &&\n IsOptionalNumber(value.exclusiveMaximumTimestamp) &&\n IsOptionalNumber(value.exclusiveMinimumTimestamp) &&\n IsOptionalNumber(value.maximumTimestamp) &&\n IsOptionalNumber(value.minimumTimestamp) &&\n IsOptionalNumber(value.multipleOfTimestamp));\n}\n/** Returns true if the given value is TFunction */\nexport function IsFunction(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Function') &&\n value.type === 'Function' &&\n IsOptionalString(value.$id) &&\n ValueGuard.IsArray(value.parameters) &&\n value.parameters.every(schema => IsSchema(schema)) &&\n IsSchema(value.returns));\n}\n/** Returns true if the given value is TImport */\nexport function IsImport(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Import') &&\n ValueGuard.HasPropertyKey(value, '$defs') &&\n ValueGuard.IsObject(value.$defs) &&\n IsProperties(value.$defs) &&\n ValueGuard.HasPropertyKey(value, '$ref') &&\n ValueGuard.IsString(value.$ref) &&\n value.$ref in value.$defs // required\n );\n}\n/** Returns true if the given value is TInteger */\nexport function IsInteger(value) {\n return (IsKindOf(value, 'Integer') &&\n value.type === 'integer' &&\n IsOptionalString(value.$id) &&\n IsOptionalNumber(value.exclusiveMaximum) &&\n IsOptionalNumber(value.exclusiveMinimum) &&\n IsOptionalNumber(value.maximum) &&\n IsOptionalNumber(value.minimum) &&\n IsOptionalNumber(value.multipleOf));\n}\n/** Returns true if the given schema is TProperties */\nexport function IsProperties(value) {\n // prettier-ignore\n return (ValueGuard.IsObject(value) &&\n Object.entries(value).every(([key, schema]) => IsControlCharacterFree(key) && IsSchema(schema)));\n}\n/** Returns true if the given value is TIntersect */\nexport function IsIntersect(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Intersect') &&\n (ValueGuard.IsString(value.type) && value.type !== 'object' ? false : true) &&\n ValueGuard.IsArray(value.allOf) &&\n value.allOf.every(schema => IsSchema(schema) && !IsTransform(schema)) &&\n IsOptionalString(value.type) &&\n (IsOptionalBoolean(value.unevaluatedProperties) || IsOptionalSchema(value.unevaluatedProperties)) &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is TIterator */\nexport function IsIterator(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Iterator') &&\n value.type === 'Iterator' &&\n IsOptionalString(value.$id) &&\n IsSchema(value.items));\n}\n/** Returns true if the given value is a TKind with the given name. */\nexport function IsKindOf(value, kind) {\n return ValueGuard.IsObject(value) && Kind in value && value[Kind] === kind;\n}\n/** Returns true if the given value is TLiteral<string> */\nexport function IsLiteralString(value) {\n return IsLiteral(value) && ValueGuard.IsString(value.const);\n}\n/** Returns true if the given value is TLiteral<number> */\nexport function IsLiteralNumber(value) {\n return IsLiteral(value) && ValueGuard.IsNumber(value.const);\n}\n/** Returns true if the given value is TLiteral<boolean> */\nexport function IsLiteralBoolean(value) {\n return IsLiteral(value) && ValueGuard.IsBoolean(value.const);\n}\n/** Returns true if the given value is TLiteral */\nexport function IsLiteral(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Literal') &&\n IsOptionalString(value.$id) && IsLiteralValue(value.const));\n}\n/** Returns true if the given value is a TLiteralValue */\nexport function IsLiteralValue(value) {\n return ValueGuard.IsBoolean(value) || ValueGuard.IsNumber(value) || ValueGuard.IsString(value);\n}\n/** Returns true if the given value is a TMappedKey */\nexport function IsMappedKey(value) {\n // prettier-ignore\n return (IsKindOf(value, 'MappedKey') &&\n ValueGuard.IsArray(value.keys) &&\n value.keys.every(key => ValueGuard.IsNumber(key) || ValueGuard.IsString(key)));\n}\n/** Returns true if the given value is TMappedResult */\nexport function IsMappedResult(value) {\n // prettier-ignore\n return (IsKindOf(value, 'MappedResult') &&\n IsProperties(value.properties));\n}\n/** Returns true if the given value is TNever */\nexport function IsNever(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Never') &&\n ValueGuard.IsObject(value.not) &&\n Object.getOwnPropertyNames(value.not).length === 0);\n}\n/** Returns true if the given value is TNot */\nexport function IsNot(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Not') &&\n IsSchema(value.not));\n}\n/** Returns true if the given value is TNull */\nexport function IsNull(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Null') &&\n value.type === 'null' &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is TNumber */\nexport function IsNumber(value) {\n return (IsKindOf(value, 'Number') &&\n value.type === 'number' &&\n IsOptionalString(value.$id) &&\n IsOptionalNumber(value.exclusiveMaximum) &&\n IsOptionalNumber(value.exclusiveMinimum) &&\n IsOptionalNumber(value.maximum) &&\n IsOptionalNumber(value.minimum) &&\n IsOptionalNumber(value.multipleOf));\n}\n/** Returns true if the given value is TObject */\nexport function IsObject(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Object') &&\n value.type === 'object' &&\n IsOptionalString(value.$id) &&\n IsProperties(value.properties) &&\n IsAdditionalProperties(value.additionalProperties) &&\n IsOptionalNumber(value.minProperties) &&\n IsOptionalNumber(value.maxProperties));\n}\n/** Returns true if the given value is TPromise */\nexport function IsPromise(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Promise') &&\n value.type === 'Promise' &&\n IsOptionalString(value.$id) &&\n IsSchema(value.item));\n}\n/** Returns true if the given value is TRecord */\nexport function IsRecord(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Record') &&\n value.type === 'object' &&\n IsOptionalString(value.$id) &&\n IsAdditionalProperties(value.additionalProperties) &&\n ValueGuard.IsObject(value.patternProperties) &&\n ((schema) => {\n const keys = Object.getOwnPropertyNames(schema.patternProperties);\n return (keys.length === 1 &&\n IsPattern(keys[0]) &&\n ValueGuard.IsObject(schema.patternProperties) &&\n IsSchema(schema.patternProperties[keys[0]]));\n })(value));\n}\n/** Returns true if this value is TRecursive */\nexport function IsRecursive(value) {\n return ValueGuard.IsObject(value) && Hint in value && value[Hint] === 'Recursive';\n}\n/** Returns true if the given value is TRef */\nexport function IsRef(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Ref') &&\n IsOptionalString(value.$id) &&\n ValueGuard.IsString(value.$ref));\n}\n/** Returns true if the given value is TRegExp */\nexport function IsRegExp(value) {\n // prettier-ignore\n return (IsKindOf(value, 'RegExp') &&\n IsOptionalString(value.$id) &&\n ValueGuard.IsString(value.source) &&\n ValueGuard.IsString(value.flags) &&\n IsOptionalNumber(value.maxLength) &&\n IsOptionalNumber(value.minLength));\n}\n/** Returns true if the given value is TString */\nexport function IsString(value) {\n // prettier-ignore\n return (IsKindOf(value, 'String') &&\n value.type === 'string' &&\n IsOptionalString(value.$id) &&\n IsOptionalNumber(value.minLength) &&\n IsOptionalNumber(value.maxLength) &&\n IsOptionalPattern(value.pattern) &&\n IsOptionalFormat(value.format));\n}\n/** Returns true if the given value is TSymbol */\nexport function IsSymbol(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Symbol') &&\n value.type === 'symbol' &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is TTemplateLiteral */\nexport function IsTemplateLiteral(value) {\n // prettier-ignore\n return (IsKindOf(value, 'TemplateLiteral') &&\n value.type === 'string' &&\n ValueGuard.IsString(value.pattern) &&\n value.pattern[0] === '^' &&\n value.pattern[value.pattern.length - 1] === '$');\n}\n/** Returns true if the given value is TThis */\nexport function IsThis(value) {\n // prettier-ignore\n return (IsKindOf(value, 'This') &&\n IsOptionalString(value.$id) &&\n ValueGuard.IsString(value.$ref));\n}\n/** Returns true of this value is TTransform */\nexport function IsTransform(value) {\n return ValueGuard.IsObject(value) && TransformKind in value;\n}\n/** Returns true if the given value is TTuple */\nexport function IsTuple(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Tuple') &&\n value.type === 'array' &&\n IsOptionalString(value.$id) &&\n ValueGuard.IsNumber(value.minItems) &&\n ValueGuard.IsNumber(value.maxItems) &&\n value.minItems === value.maxItems &&\n (( // empty\n ValueGuard.IsUndefined(value.items) &&\n ValueGuard.IsUndefined(value.additionalItems) &&\n value.minItems === 0) || (ValueGuard.IsArray(value.items) &&\n value.items.every(schema => IsSchema(schema)))));\n}\n/** Returns true if the given value is TUndefined */\nexport function IsUndefined(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Undefined') &&\n value.type === 'undefined' &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is TUnion<Literal<string | number>[]> */\nexport function IsUnionLiteral(value) {\n return IsUnion(value) && value.anyOf.every((schema) => IsLiteralString(schema) || IsLiteralNumber(schema));\n}\n/** Returns true if the given value is TUnion */\nexport function IsUnion(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Union') &&\n IsOptionalString(value.$id) &&\n ValueGuard.IsObject(value) &&\n ValueGuard.IsArray(value.anyOf) &&\n value.anyOf.every(schema => IsSchema(schema)));\n}\n/** Returns true if the given value is TUint8Array */\nexport function IsUint8Array(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Uint8Array') &&\n value.type === 'Uint8Array' &&\n IsOptionalString(value.$id) &&\n IsOptionalNumber(value.minByteLength) &&\n IsOptionalNumber(value.maxByteLength));\n}\n/** Returns true if the given value is TUnknown */\nexport function IsUnknown(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Unknown') &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is a raw TUnsafe */\nexport function IsUnsafe(value) {\n return IsKindOf(value, 'Unsafe');\n}\n/** Returns true if the given value is TVoid */\nexport function IsVoid(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Void') &&\n value.type === 'void' &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is TKind */\nexport function IsKind(value) {\n return ValueGuard.IsObject(value) && Kind in value && ValueGuard.IsString(value[Kind]) && !KnownTypes.includes(value[Kind]);\n}\n/** Returns true if the given value is TSchema */\nexport function IsSchema(value) {\n // prettier-ignore\n return (ValueGuard.IsObject(value)) && (IsAny(value) ||\n IsArgument(value) ||\n IsArray(value) ||\n IsBoolean(value) ||\n IsBigInt(value) ||\n IsAsyncIterator(value) ||\n IsComputed(value) ||\n IsConstructor(value) ||\n IsDate(value) ||\n IsFunction(value) ||\n IsInteger(value) ||\n IsIntersect(value) ||\n IsIterator(value) ||\n IsLiteral(value) ||\n IsMappedKey(value) ||\n IsMappedResult(value) ||\n IsNever(value) ||\n IsNot(value) ||\n IsNull(value) ||\n IsNumber(value) ||\n IsObject(value) ||\n IsPromise(value) ||\n IsRecord(value) ||\n IsRef(value) ||\n IsRegExp(value) ||\n IsString(value) ||\n IsSymbol(value) ||\n IsTemplateLiteral(value) ||\n IsThis(value) ||\n IsTuple(value) ||\n IsUndefined(value) ||\n IsUnion(value) ||\n IsUint8Array(value) ||\n IsUnknown(value) ||\n IsUnsafe(value) ||\n IsVoid(value) ||\n IsKind(value));\n}\n","export * as KindGuard from './kind.mjs';\nexport * as TypeGuard from './type.mjs';\nexport * as ValueGuard from './value.mjs';\n","/** Increments the given string value + 1 */\nexport function Increment(T) {\n return (parseInt(T) + 1).toString();\n}\n","export * from './helpers.mjs';\n","export const PatternBoolean = '(true|false)';\nexport const PatternNumber = '(0|[1-9][0-9]*)';\nexport const PatternString = '(.*)';\nexport const PatternNever = '(?!.*)';\nexport const PatternBooleanExact = `^${PatternBoolean}$`;\nexport const PatternNumberExact = `^${PatternNumber}$`;\nexport const PatternStringExact = `^${PatternString}$`;\nexport const PatternNeverExact = `^${PatternNever}$`;\n","export * from './patterns.mjs';\n","/** A registry for user defined string formats */\nconst map = new Map();\n/** Returns the entries in this registry */\nexport function Entries() {\n return new Map(map);\n}\n/** Clears all user defined string formats */\nexport function Clear() {\n return map.clear();\n}\n/** Deletes a registered format */\nexport function Delete(format) {\n return map.delete(format);\n}\n/** Returns true if the user defined string format exists */\nexport function Has(format) {\n return map.has(format);\n}\n/** Sets a validation function for a user defined string format */\nexport function Set(format, func) {\n map.set(format, func);\n}\n/** Gets a validation function for a user defined string format */\nexport function Get(format) {\n return map.get(format);\n}\n","/** A registry for user defined types */\nconst map = new Map();\n/** Returns the entries in this registry */\nexport function Entries() {\n return new Map(map);\n}\n/** Clears all user defined types */\nexport function Clear() {\n return map.clear();\n}\n/** Deletes a registered type */\nexport function Delete(kind) {\n return map.delete(kind);\n}\n/** Returns true if this registry contains this kind */\nexport function Has(kind) {\n return map.has(kind);\n}\n/** Sets a validation function for a user defined type */\nexport function Set(kind, func) {\n map.set(kind, func);\n}\n/** Gets a custom validation function for a user defined type */\nexport function Get(kind) {\n return map.get(kind);\n}\n","export * as FormatRegistry from './format.mjs';\nexport * as TypeRegistry from './type.mjs';\n","/** Returns true if element right is in the set of left */\n// prettier-ignore\nexport function SetIncludes(T, S) {\n return T.includes(S);\n}\n/** Returns true if left is a subset of right */\nexport function SetIsSubset(T, S) {\n return T.every((L) => SetIncludes(S, L));\n}\n/** Returns a distinct set of elements */\nexport function SetDistinct(T) {\n return [...new Set(T)];\n}\n/** Returns the Intersect of the given sets */\nexport function SetIntersect(T, S) {\n return T.filter((L) => S.includes(L));\n}\n/** Returns the Union of the given sets */\nexport function SetUnion(T, S) {\n return [...T, ...S];\n}\n/** Returns the Complement by omitting elements in T that are in S */\n// prettier-ignore\nexport function SetComplement(T, S) {\n return T.filter(L => !S.includes(L));\n}\n// prettier-ignore\nfunction SetIntersectManyResolve(T, Init) {\n return T.reduce((Acc, L) => {\n return SetIntersect(Acc, L);\n }, Init);\n}\n// prettier-ignore\nexport function SetIntersectMany(T) {\n return (T.length === 1\n ? T[0]\n // Use left to initialize the accumulator for resolve\n : T.length > 1\n ? SetIntersectManyResolve(T.slice(1), T[0])\n : []);\n}\n/** Returns the Union of multiple sets */\nexport function SetUnionMany(T) {\n const Acc = [];\n for (const L of T)\n Acc.push(...L);\n return Acc;\n}\n","export * from './set.mjs';\n","import { CreateType } from '../create/index.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates an Any type */\nexport function Any(options) {\n return CreateType({ [Kind]: 'Any' }, options);\n}\n","export * from './any.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates an Array type */\nexport function Array(items, options) {\n return CreateType({ [Kind]: 'Array', type: 'array', items }, options);\n}\n","export * from './array.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates an Argument Type. */\nexport function Argument(index) {\n return CreateType({ [Kind]: 'Argument', index });\n}\n","export * from './argument.mjs';\n","import { Kind } from '../symbols/index.mjs';\nimport { CreateType } from '../create/type.mjs';\n/** `[JavaScript]` Creates a AsyncIterator type */\nexport function AsyncIterator(items, options) {\n return CreateType({ [Kind]: 'AsyncIterator', type: 'AsyncIterator', items }, options);\n}\n","export * from './async-iterator.mjs';\n","import { CreateType } from '../create/index.mjs';\nimport { Kind } from '../symbols/symbols.mjs';\n/** `[Internal]` Creates a deferred computed type. This type is used exclusively in modules to defer resolution of computable types that contain interior references */\nexport function Computed(target, parameters, options) {\n return CreateType({ [Kind]: 'Computed', target, parameters }, options);\n}\n","export * from './computed.mjs';\n","function DiscardKey(value, key) {\n const { [key]: _, ...rest } = value;\n return rest;\n}\n/** Discards property keys from the given value. This function returns a shallow Clone. */\nexport function Discard(value, keys) {\n return keys.reduce((acc, key) => DiscardKey(acc, key), value);\n}\n","export * from './discard.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Never type */\nexport function Never(options) {\n return CreateType({ [Kind]: 'Never', not: {} }, options);\n}\n","export * from './never.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n// prettier-ignore\nexport function MappedKey(T) {\n return CreateType({\n [Kind]: 'MappedKey',\n keys: T\n });\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n// prettier-ignore\nexport function MappedResult(properties) {\n return CreateType({\n [Kind]: 'MappedResult',\n properties\n });\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Constructor type */\nexport function Constructor(parameters, returns, options) {\n return CreateType({ [Kind]: 'Constructor', type: 'Constructor', parameters, returns }, options);\n}\n","export * from './constructor.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Function type */\nexport function Function(parameters, returns, options) {\n return CreateType({ [Kind]: 'Function', type: 'Function', parameters, returns }, options);\n}\n","export * from './function.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\nexport function UnionCreate(T, options) {\n return CreateType({ [Kind]: 'Union', anyOf: T }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { OptionalKind } from '../symbols/index.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport { Optional } from '../optional/index.mjs';\nimport { UnionCreate } from './union-create.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsOptional } from '../guard/kind.mjs';\n// prettier-ignore\nfunction IsUnionOptional(types) {\n return types.some(type => IsOptional(type));\n}\n// prettier-ignore\nfunction RemoveOptionalFromRest(types) {\n return types.map(left => IsOptional(left) ? RemoveOptionalFromType(left) : left);\n}\n// prettier-ignore\nfunction RemoveOptionalFromType(T) {\n return (Discard(T, [OptionalKind]));\n}\n// prettier-ignore\nfunction ResolveUnion(types, options) {\n const isOptional = IsUnionOptional(types);\n return (isOptional\n ? Optional(UnionCreate(RemoveOptionalFromRest(types), options))\n : UnionCreate(RemoveOptionalFromRest(types), options));\n}\n/** `[Json]` Creates an evaluated Union type */\nexport function UnionEvaluated(T, options) {\n // prettier-ignore\n return (T.length === 1 ? CreateType(T[0], options) :\n T.length === 0 ? Never(options) :\n ResolveUnion(T, options));\n}\n","import { Kind } from '../symbols/index.mjs';\n","import { Never } from '../never/index.mjs';\nimport { CreateType } from '../create/type.mjs';\nimport { UnionCreate } from './union-create.mjs';\n/** `[Json]` Creates a Union type */\nexport function Union(types, options) {\n // prettier-ignore\n return (types.length === 0 ? Never(options) :\n types.length === 1 ? CreateType(types[0], options) :\n UnionCreate(types, options));\n}\n","export * from './union-evaluated.mjs';\nexport * from './union-type.mjs';\nexport * from './union.mjs';\n","import { TypeBoxError } from '../error/index.mjs';\n// ------------------------------------------------------------------\n// TemplateLiteralParserError\n// ------------------------------------------------------------------\nexport class TemplateLiteralParserError extends TypeBoxError {\n}\n// -------------------------------------------------------------------\n// Unescape\n//\n// Unescape for these control characters specifically. Note that this\n// function is only called on non union group content, and where we\n// still want to allow the user to embed control characters in that\n// content. For review.\n// -------------------------------------------------------------------\n// prettier-ignore\nfunction Unescape(pattern) {\n return pattern\n .replace(/\\\\\\$/g, '$')\n .replace(/\\\\\\*/g, '*')\n .replace(/\\\\\\^/g, '^')\n .replace(/\\\\\\|/g, '|')\n .replace(/\\\\\\(/g, '(')\n .replace(/\\\\\\)/g, ')');\n}\n// -------------------------------------------------------------------\n// Control Characters\n// -------------------------------------------------------------------\nfunction IsNonEscaped(pattern, index, char) {\n return pattern[index] === char && pattern.charCodeAt(index - 1) !== 92;\n}\nfunction IsOpenParen(pattern, index) {\n return IsNonEscaped(pattern, index, '(');\n}\nfunction IsCloseParen(pattern, index) {\n return IsNonEscaped(pattern, index, ')');\n}\nfunction IsSeparator(pattern, index) {\n return IsNonEscaped(pattern, index, '|');\n}\n// -------------------------------------------------------------------\n// Control Groups\n// -------------------------------------------------------------------\nfunction IsGroup(pattern) {\n if (!(IsOpenParen(pattern, 0) && IsCloseParen(pattern, pattern.length - 1)))\n return false;\n let count = 0;\n for (let index = 0; index < pattern.length; index++) {\n if (IsOpenParen(pattern, index))\n count += 1;\n if (IsCloseParen(pattern, index))\n count -= 1;\n if (count === 0 && index !== pattern.length - 1)\n return false;\n }\n return true;\n}\n// prettier-ignore\nfunction InGroup(pattern) {\n return pattern.slice(1, pattern.length - 1);\n}\n// prettier-ignore\nfunction IsPrecedenceOr(pattern) {\n let count = 0;\n for (let index = 0; index < pattern.length; index++) {\n if (IsOpenParen(pattern, index))\n count += 1;\n if (IsCloseParen(pattern, index))\n count -= 1;\n if (IsSeparator(pattern, index) && count === 0)\n return true;\n }\n return false;\n}\n// prettier-ignore\nfunction IsPrecedenceAnd(pattern) {\n for (let index = 0; index < pattern.length; index++) {\n if (IsOpenParen(pattern, index))\n return true;\n }\n return false;\n}\n// prettier-ignore\nfunction Or(pattern) {\n let [count, start] = [0, 0];\n const expressions = [];\n for (let index = 0; index < pattern.length; index++) {\n if (IsOpenParen(pattern, index))\n count += 1;\n if (IsCloseParen(pattern, index))\n count -= 1;\n if (IsSeparator(pattern, index) && count === 0) {\n const range = pattern.slice(start, index);\n if (range.length > 0)\n expressions.push(TemplateLiteralParse(range));\n start = index + 1;\n }\n }\n const range = pattern.slice(start);\n if (range.length > 0)\n expressions.push(TemplateLiteralParse(range));\n if (expressions.length === 0)\n return { type: 'const', const: '' };\n if (expressions.length === 1)\n return expressions[0];\n return { type: 'or', expr: expressions };\n}\n// prettier-ignore\nfunction And(pattern) {\n function Group(value, index) {\n if (!IsOpenParen(value, index))\n throw new TemplateLiteralParserError(`TemplateLiteralParser: Index must point to open parens`);\n let count = 0;\n for (let scan = index; scan < value.length; scan++) {\n if (IsOpenParen(value, scan))\n count += 1;\n if (IsCloseParen(value, scan))\n count -= 1;\n if (count === 0)\n return [index, scan];\n }\n throw new TemplateLiteralParserError(`TemplateLiteralParser: Unclosed group parens in expression`);\n }\n function Range(pattern, index) {\n for (let scan = index; scan < pattern.length; scan++) {\n if (IsOpenParen(pattern, scan))\n return [index, scan];\n }\n return [index, pattern.length];\n }\n const expressions = [];\n for (let index = 0; index < pattern.length; index++) {\n if (IsOpenParen(pattern, index)) {\n const [start, end] = Group(pattern, index);\n const range = pattern.slice(start, end + 1);\n expressions.push(TemplateLiteralParse(range));\n index = end;\n }\n else {\n const [start, end] = Range(pattern, index);\n const range = pattern.slice(start, end);\n if (range.length > 0)\n expressions.push(TemplateLiteralParse(range));\n index = end - 1;\n }\n }\n return ((expressions.length === 0) ? { type: 'const', const: '' } :\n (expressions.length === 1) ? expressions[0] :\n { type: 'and', expr: expressions });\n}\n// ------------------------------------------------------------------\n// TemplateLiteralParse\n// ------------------------------------------------------------------\n/** Parses a pattern and returns an expression tree */\nexport function TemplateLiteralParse(pattern) {\n // prettier-ignore\n return (IsGroup(pattern) ? TemplateLiteralParse(InGroup(pattern)) :\n IsPrecedenceOr(pattern) ? Or(pattern) :\n IsPrecedenceAnd(pattern) ? And(pattern) :\n { type: 'const', const: Unescape(pattern) });\n}\n// ------------------------------------------------------------------\n// TemplateLiteralParseExact\n// ------------------------------------------------------------------\n/** Parses a pattern and strips forward and trailing ^ and $ */\nexport function TemplateLiteralParseExact(pattern) {\n return TemplateLiteralParse(pattern.slice(1, pattern.length - 1));\n}\n","import { TemplateLiteralParseExact } from './parse.mjs';\nimport { TypeBoxError } from '../error/index.mjs';\n// ------------------------------------------------------------------\n// TemplateLiteralFiniteError\n// ------------------------------------------------------------------\nexport class TemplateLiteralFiniteError extends TypeBoxError {\n}\n// ------------------------------------------------------------------\n// IsTemplateLiteralFiniteCheck\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction IsNumberExpression(expression) {\n return (expression.type === 'or' &&\n expression.expr.length === 2 &&\n expression.expr[0].type === 'const' &&\n expression.expr[0].const === '0' &&\n expression.expr[1].type === 'const' &&\n expression.expr[1].const === '[1-9][0-9]*');\n}\n// prettier-ignore\nfunction IsBooleanExpression(expression) {\n return (expression.type === 'or' &&\n expression.expr.length === 2 &&\n expression.expr[0].type === 'const' &&\n expression.expr[0].const === 'true' &&\n expression.expr[1].type === 'const' &&\n expression.expr[1].const === 'false');\n}\n// prettier-ignore\nfunction IsStringExpression(expression) {\n return expression.type === 'const' && expression.const === '.*';\n}\n// ------------------------------------------------------------------\n// IsTemplateLiteralExpressionFinite\n// ------------------------------------------------------------------\n// prettier-ignore\nexport function IsTemplateLiteralExpressionFinite(expression) {\n return (IsNumberExpression(expression) || IsStringExpression(expression) ? false :\n IsBooleanExpression(expression) ? true :\n (expression.type === 'and') ? expression.expr.every((expr) => IsTemplateLiteralExpressionFinite(expr)) :\n (expression.type === 'or') ? expression.expr.every((expr) => IsTemplateLiteralExpressionFinite(expr)) :\n (expression.type === 'const') ? true :\n (() => { throw new TemplateLiteralFiniteError(`Unknown expression type`); })());\n}\n/** Returns true if this TemplateLiteral resolves to a finite set of values */\nexport function IsTemplateLiteralFinite(schema) {\n const expression = TemplateLiteralParseExact(schema.pattern);\n return IsTemplateLiteralExpressionFinite(expression);\n}\n","import { IsTemplateLiteralExpressionFinite } from './finite.mjs';\nimport { TemplateLiteralParseExact } from './parse.mjs';\nimport { TypeBoxError } from '../error/index.mjs';\n// ------------------------------------------------------------------\n// TemplateLiteralGenerateError\n// ------------------------------------------------------------------\nexport class TemplateLiteralGenerateError extends TypeBoxError {\n}\n// ------------------------------------------------------------------\n// TemplateLiteralExpressionGenerate\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction* GenerateReduce(buffer) {\n if (buffer.length === 1)\n return yield* buffer[0];\n for (const left of buffer[0]) {\n for (const right of GenerateReduce(buffer.slice(1))) {\n yield `${left}${right}`;\n }\n }\n}\n// prettier-ignore\nfunction* GenerateAnd(expression) {\n return yield* GenerateReduce(expression.expr.map((expr) => [...TemplateLiteralExpressionGenerate(expr)]));\n}\n// prettier-ignore\nfunction* GenerateOr(expression) {\n for (const expr of expression.expr)\n yield* TemplateLiteralExpressionGenerate(expr);\n}\n// prettier-ignore\nfunction* GenerateConst(expression) {\n return yield expression.const;\n}\nexport function* TemplateLiteralExpressionGenerate(expression) {\n return expression.type === 'and'\n ? yield* GenerateAnd(expression)\n : expression.type === 'or'\n ? yield* GenerateOr(expression)\n : expression.type === 'const'\n ? yield* GenerateConst(expression)\n : (() => {\n throw new TemplateLiteralGenerateError('Unknown expression');\n })();\n}\n/** Generates a tuple of strings from the given TemplateLiteral. Returns an empty tuple if infinite. */\nexport function TemplateLiteralGenerate(schema) {\n const expression = TemplateLiteralParseExact(schema.pattern);\n // prettier-ignore\n return (IsTemplateLiteralExpressionFinite(expression)\n ? [...TemplateLiteralExpressionGenerate(expression)]\n : []);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Literal type */\nexport function Literal(value, options) {\n return CreateType({\n [Kind]: 'Literal',\n const: value,\n type: typeof value,\n }, options);\n}\n","export * from './literal.mjs';\n","import { Kind } from '../symbols/index.mjs';\nimport { CreateType } from '../create/index.mjs';\n/** `[Json]` Creates a Boolean type */\nexport function Boolean(options) {\n return CreateType({ [Kind]: 'Boolean', type: 'boolean' }, options);\n}\n","export * from './boolean.mjs';\n","import { Kind } from '../symbols/index.mjs';\nimport { CreateType } from '../create/index.mjs';\n/** `[JavaScript]` Creates a BigInt type */\nexport function BigInt(options) {\n return CreateType({ [Kind]: 'BigInt', type: 'bigint' }, options);\n}\n","export * from './bigint.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Number type */\nexport function Number(options) {\n return CreateType({ [Kind]: 'Number', type: 'number' }, options);\n}\n","export * from './number.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a String type */\nexport function String(options) {\n return CreateType({ [Kind]: 'String', type: 'string' }, options);\n}\n","export * from './string.mjs';\n","import { Literal } from '../literal/index.mjs';\nimport { Boolean } from '../boolean/index.mjs';\nimport { BigInt } from '../bigint/index.mjs';\nimport { Number } from '../number/index.mjs';\nimport { String } from '../string/index.mjs';\nimport { UnionEvaluated } from '../union/index.mjs';\nimport { Never } from '../never/index.mjs';\n// ------------------------------------------------------------------\n// SyntaxParsers\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction* FromUnion(syntax) {\n const trim = syntax.trim().replace(/\"|'/g, '');\n return (trim === 'boolean' ? yield Boolean() :\n trim === 'number' ? yield Number() :\n trim === 'bigint' ? yield BigInt() :\n trim === 'string' ? yield String() :\n yield (() => {\n const literals = trim.split('|').map((literal) => Literal(literal.trim()));\n return (literals.length === 0 ? Never() :\n literals.length === 1 ? literals[0] :\n UnionEvaluated(literals));\n })());\n}\n// prettier-ignore\nfunction* FromTerminal(syntax) {\n if (syntax[1] !== '{') {\n const L = Literal('$');\n const R = FromSyntax(syntax.slice(1));\n return yield* [L, ...R];\n }\n for (let i = 2; i < syntax.length; i++) {\n if (syntax[i] === '}') {\n const L = FromUnion(syntax.slice(2, i));\n const R = FromSyntax(syntax.slice(i + 1));\n return yield* [...L, ...R];\n }\n }\n yield Literal(syntax);\n}\n// prettier-ignore\nfunction* FromSyntax(syntax) {\n for (let i = 0; i < syntax.length; i++) {\n if (syntax[i] === '$') {\n const L = Literal(syntax.slice(0, i));\n const R = FromTerminal(syntax.slice(i));\n return yield* [L, ...R];\n }\n }\n yield Literal(syntax);\n}\n/** Parses TemplateLiteralSyntax and returns a tuple of TemplateLiteralKinds */\nexport function TemplateLiteralSyntax(syntax) {\n return [...FromSyntax(syntax)];\n}\n","import { PatternNumber, PatternString, PatternBoolean } from '../patterns/index.mjs';\nimport { Kind } from '../symbols/index.mjs';\nimport { TypeBoxError } from '../error/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsTemplateLiteral, IsUnion, IsNumber, IsInteger, IsBigInt, IsString, IsLiteral, IsBoolean } from '../guard/kind.mjs';\n// ------------------------------------------------------------------\n// TemplateLiteralPatternError\n// ------------------------------------------------------------------\nexport class TemplateLiteralPatternError extends TypeBoxError {\n}\n// ------------------------------------------------------------------\n// TemplateLiteralPattern\n// ------------------------------------------------------------------\nfunction Escape(value) {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n// prettier-ignore\nfunction Visit(schema, acc) {\n return (IsTemplateLiteral(schema) ? schema.pattern.slice(1, schema.pattern.length - 1) :\n IsUnion(schema) ? `(${schema.anyOf.map((schema) => Visit(schema, acc)).join('|')})` :\n IsNumber(schema) ? `${acc}${PatternNumber}` :\n IsInteger(schema) ? `${acc}${PatternNumber}` :\n IsBigInt(schema) ? `${acc}${PatternNumber}` :\n IsString(schema) ? `${acc}${PatternString}` :\n IsLiteral(schema) ? `${acc}${Escape(schema.const.toString())}` :\n IsBoolean(schema) ? `${acc}${PatternBoolean}` :\n (() => { throw new TemplateLiteralPatternError(`Unexpected Kind '${schema[Kind]}'`); })());\n}\nexport function TemplateLiteralPattern(kinds) {\n return `^${kinds.map((schema) => Visit(schema, '')).join('')}\\$`;\n}\n","import { UnionEvaluated } from '../union/index.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { TemplateLiteralGenerate } from './generate.mjs';\n/** Returns a Union from the given TemplateLiteral */\nexport function TemplateLiteralToUnion(schema) {\n const R = TemplateLiteralGenerate(schema);\n const L = R.map((S) => Literal(S));\n return UnionEvaluated(L);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { TemplateLiteralSyntax } from './syntax.mjs';\nimport { TemplateLiteralPattern } from './pattern.mjs';\nimport { IsString } from '../guard/value.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a TemplateLiteral type */\n// prettier-ignore\nexport function TemplateLiteral(unresolved, options) {\n const pattern = IsString(unresolved)\n ? TemplateLiteralPattern(TemplateLiteralSyntax(unresolved))\n : TemplateLiteralPattern(unresolved);\n return CreateType({ [Kind]: 'TemplateLiteral', type: 'string', pattern }, options);\n}\n","export * from './finite.mjs';\nexport * from './generate.mjs';\nexport * from './syntax.mjs';\nexport * from './parse.mjs';\nexport * from './pattern.mjs';\nexport * from './union.mjs';\nexport * from './template-literal.mjs';\n","import { TemplateLiteralGenerate } from '../template-literal/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsTemplateLiteral, IsUnion, IsLiteral, IsNumber, IsInteger } from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromTemplateLiteral(templateLiteral) {\n const keys = TemplateLiteralGenerate(templateLiteral);\n return keys.map(key => key.toString());\n}\n// prettier-ignore\nfunction FromUnion(types) {\n const result = [];\n for (const type of types)\n result.push(...IndexPropertyKeys(type));\n return result;\n}\n// prettier-ignore\nfunction FromLiteral(literalValue) {\n return ([literalValue.toString()] // TS 5.4 observes TLiteralValue as not having a toString()\n );\n}\n/** Returns a tuple of PropertyKeys derived from the given TSchema */\n// prettier-ignore\nexport function IndexPropertyKeys(type) {\n return [...new Set((IsTemplateLiteral(type) ? FromTemplateLiteral(type) :\n IsUnion(type) ? FromUnion(type.anyOf) :\n IsLiteral(type) ? FromLiteral(type.const) :\n IsNumber(type) ? ['[number]'] :\n IsInteger(type) ? ['[number]'] :\n []))];\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { IndexPropertyKeys } from './indexed-property-keys.mjs';\nimport { Index } from './index.mjs';\n// prettier-ignore\nfunction FromProperties(type, properties, options) {\n const result = {};\n for (const K2 of Object.getOwnPropertyNames(properties)) {\n result[K2] = Index(type, IndexPropertyKeys(properties[K2]), options);\n }\n return result;\n}\n// prettier-ignore\nfunction FromMappedResult(type, mappedResult, options) {\n return FromProperties(type, mappedResult.properties, options);\n}\n// prettier-ignore\nexport function IndexFromMappedResult(type, mappedResult, options) {\n const properties = FromMappedResult(type, mappedResult, options);\n return MappedResult(properties);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { TypeBoxError } from '../error/index.mjs';\nimport { Computed } from '../computed/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport { IntersectEvaluated } from '../intersect/index.mjs';\nimport { UnionEvaluated } from '../union/index.mjs';\nimport { IndexPropertyKeys } from './indexed-property-keys.mjs';\nimport { IndexFromMappedKey } from './indexed-from-mapped-key.mjs';\nimport { IndexFromMappedResult } from './indexed-from-mapped-result.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsArray, IsIntersect, IsObject, IsMappedKey, IsMappedResult, IsNever, IsSchema, IsTuple, IsUnion, IsRef } from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromRest(types, key) {\n return types.map(type => IndexFromPropertyKey(type, key));\n}\n// prettier-ignore\nfunction FromIntersectRest(types) {\n return types.filter(type => !IsNever(type));\n}\n// prettier-ignore\nfunction FromIntersect(types, key) {\n return (IntersectEvaluated(FromIntersectRest(FromRest(types, key))));\n}\n// prettier-ignore\nfunction FromUnionRest(types) {\n return (types.some(L => IsNever(L))\n ? []\n : types);\n}\n// prettier-ignore\nfunction FromUnion(types, key) {\n return (UnionEvaluated(FromUnionRest(FromRest(types, key))));\n}\n// prettier-ignore\nfunction FromTuple(types, key) {\n return (key in types ? types[key] :\n key === '[number]' ? UnionEvaluated(types) :\n Never());\n}\n// prettier-ignore\nfunction FromArray(type, key) {\n return (key === '[number]'\n ? type\n : Never());\n}\n// prettier-ignore\nfunction FromProperty(properties, propertyKey) {\n return (propertyKey in properties ? properties[propertyKey] : Never());\n}\n// prettier-ignore\nexport function IndexFromPropertyKey(type, propertyKey) {\n return (IsIntersect(type) ? FromIntersect(type.allOf, propertyKey) :\n IsUnion(type) ? FromUnion(type.anyOf, propertyKey) :\n IsTuple(type) ? FromTuple(type.items ?? [], propertyKey) :\n IsArray(type) ? FromArray(type.items, propertyKey) :\n IsObject(type) ? FromProperty(type.properties, propertyKey) :\n Never());\n}\n// prettier-ignore\nexport function IndexFromPropertyKeys(type, propertyKeys) {\n return propertyKeys.map(propertyKey => IndexFromPropertyKey(type, propertyKey));\n}\n// prettier-ignore\nfunction FromSchema(type, propertyKeys) {\n return (UnionEvaluated(IndexFromPropertyKeys(type, propertyKeys)));\n}\n// prettier-ignore\nexport function IndexFromComputed(type, key) {\n return Computed('Index', [type, key]);\n}\n/** `[Json]` Returns an Indexed property type for the given keys */\nexport function Index(type, key, options) {\n // computed-type\n if (IsRef(type) || IsRef(key)) {\n const error = `Index types using Ref parameters require both Type and Key to be of TSchema`;\n if (!IsSchema(type) || !IsSchema(key))\n throw new TypeBoxError(error);\n return Computed('Index', [type, key]);\n }\n // mapped-types\n if (IsMappedResult(key))\n return IndexFromMappedResult(type, key, options);\n if (IsMappedKey(key))\n return IndexFromMappedKey(type, key, options);\n // prettier-ignore\n return CreateType(IsSchema(key)\n ? FromSchema(type, IndexPropertyKeys(key))\n : FromSchema(type, key), options);\n}\n","import { Index } from './indexed.mjs';\nimport { MappedResult } from '../mapped/index.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction MappedIndexPropertyKey(type, key, options) {\n return { [key]: Index(type, [key], Clone(options)) };\n}\n// prettier-ignore\nfunction MappedIndexPropertyKeys(type, propertyKeys, options) {\n return propertyKeys.reduce((result, left) => {\n return { ...result, ...MappedIndexPropertyKey(type, left, options) };\n }, {});\n}\n// prettier-ignore\nfunction MappedIndexProperties(type, mappedKey, options) {\n return MappedIndexPropertyKeys(type, mappedKey.keys, options);\n}\n// prettier-ignore\nexport function IndexFromMappedKey(type, mappedKey, options) {\n const properties = MappedIndexProperties(type, mappedKey, options);\n return MappedResult(properties);\n}\n","export * from './indexed-from-mapped-key.mjs';\nexport * from './indexed-from-mapped-result.mjs';\nexport * from './indexed-property-keys.mjs';\nexport * from './indexed.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates an Iterator type */\nexport function Iterator(items, options) {\n return CreateType({ [Kind]: 'Iterator', type: 'Iterator', items }, options);\n}\n","export * from './iterator.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsOptional } from '../guard/kind.mjs';\nfunction RequiredKeys(properties) {\n const keys = [];\n for (let key in properties) {\n if (!IsOptional(properties[key]))\n keys.push(key);\n }\n return keys;\n}\n/** `[Json]` Creates an Object type */\nfunction _Object(properties, options) {\n const required = RequiredKeys(properties);\n const schematic = required.length > 0 ? { [Kind]: 'Object', type: 'object', properties, required } : { [Kind]: 'Object', type: 'object', properties };\n return CreateType(schematic, options);\n}\n/** `[Json]` Creates an Object type */\nexport var Object = _Object;\n","export * from './object.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Promise type */\nexport function Promise(item, options) {\n return CreateType({ [Kind]: 'Promise', type: 'Promise', item }, options);\n}\n","export * from './promise.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { ReadonlyKind } from '../symbols/index.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { ReadonlyFromMappedResult } from './readonly-from-mapped-result.mjs';\nimport { IsMappedResult } from '../guard/kind.mjs';\nfunction RemoveReadonly(schema) {\n return CreateType(Discard(schema, [ReadonlyKind]));\n}\nfunction AddReadonly(schema) {\n return CreateType({ ...schema, [ReadonlyKind]: 'Readonly' });\n}\n// prettier-ignore\nfunction ReadonlyWithFlag(schema, F) {\n return (F === false\n ? RemoveReadonly(schema)\n : AddReadonly(schema));\n}\n/** `[Json]` Creates a Readonly property */\nexport function Readonly(schema, enable) {\n const F = enable ?? true;\n return IsMappedResult(schema) ? ReadonlyFromMappedResult(schema, F) : ReadonlyWithFlag(schema, F);\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Readonly } from './readonly.mjs';\n// prettier-ignore\nfunction FromProperties(K, F) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(K))\n Acc[K2] = Readonly(K[K2], F);\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(R, F) {\n return FromProperties(R.properties, F);\n}\n// prettier-ignore\nexport function ReadonlyFromMappedResult(R, F) {\n const P = FromMappedResult(R, F);\n return MappedResult(P);\n}\n","export * from './readonly-from-mapped-result.mjs';\nexport * from './readonly.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Tuple type */\nexport function Tuple(types, options) {\n // prettier-ignore\n return CreateType(types.length > 0 ?\n { [Kind]: 'Tuple', type: 'array', items: types, additionalItems: false, minItems: types.length, maxItems: types.length } :\n { [Kind]: 'Tuple', type: 'array', minItems: types.length, maxItems: types.length }, options);\n}\n","export * from './tuple.mjs';\n","import { Kind, OptionalKind, ReadonlyKind } from '../symbols/index.mjs';\nimport { Discard } from '../discard/index.mjs';\n// evaluation types\nimport { Array } from '../array/index.mjs';\nimport { AsyncIterator } from '../async-iterator/index.mjs';\nimport { Constructor } from '../constructor/index.mjs';\nimport { Function as FunctionType } from '../function/index.mjs';\nimport { IndexPropertyKeys } from '../indexed/index.mjs';\nimport { Intersect } from '../intersect/index.mjs';\nimport { Iterator } from '../iterator/index.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { Object } from '../object/index.mjs';\nimport { Optional } from '../optional/index.mjs';\nimport { Promise } from '../promise/index.mjs';\nimport { Readonly } from '../readonly/index.mjs';\nimport { Tuple } from '../tuple/index.mjs';\nimport { Union } from '../union/index.mjs';\n// operator\nimport { SetIncludes } from '../sets/index.mjs';\n// mapping types\nimport { MappedResult } from './mapped-result.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsArray, IsAsyncIterator, IsConstructor, IsFunction, IsIntersect, IsIterator, IsReadonly, IsMappedResult, IsMappedKey, IsObject, IsOptional, IsPromise, IsSchema, IsTuple, IsUnion } from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromMappedResult(K, P) {\n return (K in P\n ? FromSchemaType(K, P[K])\n : MappedResult(P));\n}\n// prettier-ignore\nfunction MappedKeyToKnownMappedResultProperties(K) {\n return { [K]: Literal(K) };\n}\n// prettier-ignore\nfunction MappedKeyToUnknownMappedResultProperties(P) {\n const Acc = {};\n for (const L of P)\n Acc[L] = Literal(L);\n return Acc;\n}\n// prettier-ignore\nfunction MappedKeyToMappedResultProperties(K, P) {\n return (SetIncludes(P, K)\n ? MappedKeyToKnownMappedResultProperties(K)\n : MappedKeyToUnknownMappedResultProperties(P));\n}\n// prettier-ignore\nfunction FromMappedKey(K, P) {\n const R = MappedKeyToMappedResultProperties(K, P);\n return FromMappedResult(K, R);\n}\n// prettier-ignore\nfunction FromRest(K, T) {\n return T.map(L => FromSchemaType(K, L));\n}\n// prettier-ignore\nfunction FromProperties(K, T) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(T))\n Acc[K2] = FromSchemaType(K, T[K2]);\n return Acc;\n}\n// prettier-ignore\nfunction FromSchemaType(K, T) {\n // required to retain user defined options for mapped type\n const options = { ...T };\n return (\n // unevaluated modifier types\n IsOptional(T) ? Optional(FromSchemaType(K, Discard(T, [OptionalKind]))) :\n IsReadonly(T) ? Readonly(FromSchemaType(K, Discard(T, [ReadonlyKind]))) :\n // unevaluated mapped types\n IsMappedResult(T) ? FromMappedResult(K, T.properties) :\n IsMappedKey(T) ? FromMappedKey(K, T.keys) :\n // unevaluated types\n IsConstructor(T) ? Constructor(FromRest(K, T.parameters), FromSchemaType(K, T.returns), options) :\n IsFunction(T) ? FunctionType(FromRest(K, T.parameters), FromSchemaType(K, T.returns), options) :\n IsAsyncIterator(T) ? AsyncIterator(FromSchemaType(K, T.items), options) :\n IsIterator(T) ? Iterator(FromSchemaType(K, T.items), options) :\n IsIntersect(T) ? Intersect(FromRest(K, T.allOf), options) :\n IsUnion(T) ? Union(FromRest(K, T.anyOf), options) :\n IsTuple(T) ? Tuple(FromRest(K, T.items ?? []), options) :\n IsObject(T) ? Object(FromProperties(K, T.properties), options) :\n IsArray(T) ? Array(FromSchemaType(K, T.items), options) :\n IsPromise(T) ? Promise(FromSchemaType(K, T.item), options) :\n T);\n}\n// prettier-ignore\nexport function MappedFunctionReturnType(K, T) {\n const Acc = {};\n for (const L of K)\n Acc[L] = FromSchemaType(L, T);\n return Acc;\n}\n/** `[Json]` Creates a Mapped object type */\nexport function Mapped(key, map, options) {\n const K = IsSchema(key) ? IndexPropertyKeys(key) : key;\n const RT = map({ [Kind]: 'MappedKey', keys: K });\n const R = MappedFunctionReturnType(K, RT);\n return Object(R, options);\n}\n","export * from './mapped-key.mjs';\nexport * from './mapped-result.mjs';\nexport * from './mapped.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { OptionalKind } from '../symbols/index.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { OptionalFromMappedResult } from './optional-from-mapped-result.mjs';\nimport { IsMappedResult } from '../guard/kind.mjs';\nfunction RemoveOptional(schema) {\n return CreateType(Discard(schema, [OptionalKind]));\n}\nfunction AddOptional(schema) {\n return CreateType({ ...schema, [OptionalKind]: 'Optional' });\n}\n// prettier-ignore\nfunction OptionalWithFlag(schema, F) {\n return (F === false\n ? RemoveOptional(schema)\n : AddOptional(schema));\n}\n/** `[Json]` Creates a Optional property */\nexport function Optional(schema, enable) {\n const F = enable ?? true;\n return IsMappedResult(schema) ? OptionalFromMappedResult(schema, F) : OptionalWithFlag(schema, F);\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Optional } from './optional.mjs';\n// prettier-ignore\nfunction FromProperties(P, F) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(P))\n Acc[K2] = Optional(P[K2], F);\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(R, F) {\n return FromProperties(R.properties, F);\n}\n// prettier-ignore\nexport function OptionalFromMappedResult(R, F) {\n const P = FromMappedResult(R, F);\n return MappedResult(P);\n}\n","export * from './optional-from-mapped-result.mjs';\nexport * from './optional.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsObject, IsSchema } from '../guard/kind.mjs';\n// ------------------------------------------------------------------\n// IntersectCreate\n// ------------------------------------------------------------------\n// prettier-ignore\nexport function IntersectCreate(T, options = {}) {\n const allObjects = T.every((schema) => IsObject(schema));\n const clonedUnevaluatedProperties = IsSchema(options.unevaluatedProperties)\n ? { unevaluatedProperties: options.unevaluatedProperties }\n : {};\n return CreateType((options.unevaluatedProperties === false || IsSchema(options.unevaluatedProperties) || allObjects\n ? { ...clonedUnevaluatedProperties, [Kind]: 'Intersect', type: 'object', allOf: T }\n : { ...clonedUnevaluatedProperties, [Kind]: 'Intersect', allOf: T }), options);\n}\n","import { OptionalKind } from '../symbols/index.mjs';\nimport { CreateType } from '../create/type.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport { Optional } from '../optional/index.mjs';\nimport { IntersectCreate } from './intersect-create.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsOptional, IsTransform } from '../guard/kind.mjs';\n// prettier-ignore\nfunction IsIntersectOptional(types) {\n return types.every(left => IsOptional(left));\n}\n// prettier-ignore\nfunction RemoveOptionalFromType(type) {\n return (Discard(type, [OptionalKind]));\n}\n// prettier-ignore\nfunction RemoveOptionalFromRest(types) {\n return types.map(left => IsOptional(left) ? RemoveOptionalFromType(left) : left);\n}\n// prettier-ignore\nfunction ResolveIntersect(types, options) {\n return (IsIntersectOptional(types)\n ? Optional(IntersectCreate(RemoveOptionalFromRest(types), options))\n : IntersectCreate(RemoveOptionalFromRest(types), options));\n}\n/** `[Json]` Creates an evaluated Intersect type */\nexport function IntersectEvaluated(types, options = {}) {\n if (types.length === 1)\n return CreateType(types[0], options);\n if (types.length === 0)\n return Never(options);\n if (types.some((schema) => IsTransform(schema)))\n throw new Error('Cannot intersect transform types');\n return ResolveIntersect(types, options);\n}\n","import { Kind } from '../symbols/index.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Never } from '../never/index.mjs';\nimport { IntersectCreate } from './intersect-create.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsTransform } from '../guard/kind.mjs';\n/** `[Json]` Creates an evaluated Intersect type */\nexport function Intersect(types, options) {\n if (types.length === 1)\n return CreateType(types[0], options);\n if (types.length === 0)\n return Never(options);\n if (types.some((schema) => IsTransform(schema)))\n throw new Error('Cannot intersect transform types');\n return IntersectCreate(types, options);\n}\n","export * from './intersect-evaluated.mjs';\nexport * from './intersect-type.mjs';\nexport * from './intersect.mjs';\n","import { TypeBoxError } from '../error/index.mjs';\nimport { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Ref type. The referenced type must contain a $id */\nexport function Ref(...args) {\n const [$ref, options] = typeof args[0] === 'string' ? [args[0], args[1]] : [args[0].$id, args[1]];\n if (typeof $ref !== 'string')\n throw new TypeBoxError('Ref: $ref must be a string');\n return CreateType({ [Kind]: 'Ref', $ref }, options);\n}\n","export * from './ref.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Computed } from '../computed/index.mjs';\nimport { Intersect } from '../intersect/index.mjs';\nimport { Union } from '../union/index.mjs';\nimport { Ref } from '../ref/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsIntersect, IsUnion, IsPromise, IsRef, IsComputed } from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromComputed(target, parameters) {\n return Computed('Awaited', [Computed(target, parameters)]);\n}\n// prettier-ignore\nfunction FromRef($ref) {\n return Computed('Awaited', [Ref($ref)]);\n}\n// prettier-ignore\nfunction FromIntersect(types) {\n return Intersect(FromRest(types));\n}\n// prettier-ignore\nfunction FromUnion(types) {\n return Union(FromRest(types));\n}\n// prettier-ignore\nfunction FromPromise(type) {\n return Awaited(type);\n}\n// prettier-ignore\nfunction FromRest(types) {\n return types.map(type => Awaited(type));\n}\n/** `[JavaScript]` Constructs a type by recursively unwrapping Promise types */\nexport function Awaited(type, options) {\n return CreateType(IsComputed(type) ? FromComputed(type.target, type.parameters) : IsIntersect(type) ? FromIntersect(type.allOf) : IsUnion(type) ? FromUnion(type.anyOf) : IsPromise(type) ? FromPromise(type.item) : IsRef(type) ? FromRef(type.$ref) : type, options);\n}\n","export * from './awaited.mjs';\n","import { SetUnionMany, SetIntersectMany } from '../sets/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsIntersect, IsUnion, IsTuple, IsArray, IsObject, IsRecord } from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromRest(types) {\n const result = [];\n for (const L of types)\n result.push(KeyOfPropertyKeys(L));\n return result;\n}\n// prettier-ignore\nfunction FromIntersect(types) {\n const propertyKeysArray = FromRest(types);\n const propertyKeys = SetUnionMany(propertyKeysArray);\n return propertyKeys;\n}\n// prettier-ignore\nfunction FromUnion(types) {\n const propertyKeysArray = FromRest(types);\n const propertyKeys = SetIntersectMany(propertyKeysArray);\n return propertyKeys;\n}\n// prettier-ignore\nfunction FromTuple(types) {\n return types.map((_, indexer) => indexer.toString());\n}\n// prettier-ignore\nfunction FromArray(_) {\n return (['[number]']);\n}\n// prettier-ignore\nfunction FromProperties(T) {\n return (globalThis.Object.getOwnPropertyNames(T));\n}\n// ------------------------------------------------------------------\n// FromPatternProperties\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromPatternProperties(patternProperties) {\n if (!includePatternProperties)\n return [];\n const patternPropertyKeys = globalThis.Object.getOwnPropertyNames(patternProperties);\n return patternPropertyKeys.map(key => {\n return (key[0] === '^' && key[key.length - 1] === '$')\n ? key.slice(1, key.length - 1)\n : key;\n });\n}\n/** Returns a tuple of PropertyKeys derived from the given TSchema. */\n// prettier-ignore\nexport function KeyOfPropertyKeys(type) {\n return (IsIntersect(type) ? FromIntersect(type.allOf) :\n IsUnion(type) ? FromUnion(type.anyOf) :\n IsTuple(type) ? FromTuple(type.items ?? []) :\n IsArray(type) ? FromArray(type.items) :\n IsObject(type) ? FromProperties(type.properties) :\n IsRecord(type) ? FromPatternProperties(type.patternProperties) :\n []);\n}\n// ----------------------------------------------------------------\n// KeyOfPattern\n// ----------------------------------------------------------------\nlet includePatternProperties = false;\n/** Returns a regular expression pattern derived from the given TSchema */\nexport function KeyOfPattern(schema) {\n includePatternProperties = true;\n const keys = KeyOfPropertyKeys(schema);\n includePatternProperties = false;\n const pattern = keys.map((key) => `(${key})`);\n return `^(${pattern.join('|')})$`;\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { Number } from '../number/index.mjs';\nimport { Computed } from '../computed/index.mjs';\nimport { Ref } from '../ref/index.mjs';\nimport { KeyOfPropertyKeys } from './keyof-property-keys.mjs';\nimport { UnionEvaluated } from '../union/index.mjs';\nimport { KeyOfFromMappedResult } from './keyof-from-mapped-result.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsMappedResult, IsRef, IsComputed } from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromComputed(target, parameters) {\n return Computed('KeyOf', [Computed(target, parameters)]);\n}\n// prettier-ignore\nfunction FromRef($ref) {\n return Computed('KeyOf', [Ref($ref)]);\n}\n// prettier-ignore\nfunction KeyOfFromType(type, options) {\n const propertyKeys = KeyOfPropertyKeys(type);\n const propertyKeyTypes = KeyOfPropertyKeysToRest(propertyKeys);\n const result = UnionEvaluated(propertyKeyTypes);\n return CreateType(result, options);\n}\n// prettier-ignore\nexport function KeyOfPropertyKeysToRest(propertyKeys) {\n return propertyKeys.map(L => L === '[number]' ? Number() : Literal(L));\n}\n/** `[Json]` Creates a KeyOf type */\nexport function KeyOf(type, options) {\n return (IsComputed(type) ? FromComputed(type.target, type.parameters) : IsRef(type) ? FromRef(type.$ref) : IsMappedResult(type) ? KeyOfFromMappedResult(type, options) : KeyOfFromType(type, options));\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { KeyOf } from './keyof.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction FromProperties(properties, options) {\n const result = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(properties))\n result[K2] = KeyOf(properties[K2], Clone(options));\n return result;\n}\n// prettier-ignore\nfunction FromMappedResult(mappedResult, options) {\n return FromProperties(mappedResult.properties, options);\n}\n// prettier-ignore\nexport function KeyOfFromMappedResult(mappedResult, options) {\n const properties = FromMappedResult(mappedResult, options);\n return MappedResult(properties);\n}\n","import { IndexFromPropertyKeys } from '../indexed/indexed.mjs';\nimport { KeyOfPropertyKeys } from './keyof-property-keys.mjs';\n/**\n * `[Utility]` Resolves an array of keys and schemas from the given schema. This method is faster\n * than obtaining the keys and resolving each individually via indexing. This method was written\n * accellerate Intersect and Union encoding.\n */\nexport function KeyOfPropertyEntries(schema) {\n const keys = KeyOfPropertyKeys(schema);\n const schemas = IndexFromPropertyKeys(schema, keys);\n return keys.map((_, index) => [keys[index], schemas[index]]);\n}\n","export * from './keyof-from-mapped-result.mjs';\nexport * from './keyof-property-entries.mjs';\nexport * from './keyof-property-keys.mjs';\nexport * from './keyof.mjs';\n","import { IntersectEvaluated } from '../intersect/index.mjs';\nimport { IndexFromPropertyKeys } from '../indexed/index.mjs';\nimport { KeyOfPropertyKeys } from '../keyof/index.mjs';\nimport { Object } from '../object/index.mjs';\nimport { SetDistinct } from '../sets/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsNever } from '../guard/kind.mjs';\n// prettier-ignore\nfunction CompositeKeys(T) {\n const Acc = [];\n for (const L of T)\n Acc.push(...KeyOfPropertyKeys(L));\n return SetDistinct(Acc);\n}\n// prettier-ignore\nfunction FilterNever(T) {\n return T.filter(L => !IsNever(L));\n}\n// prettier-ignore\nfunction CompositeProperty(T, K) {\n const Acc = [];\n for (const L of T)\n Acc.push(...IndexFromPropertyKeys(L, [K]));\n return FilterNever(Acc);\n}\n// prettier-ignore\nfunction CompositeProperties(T, K) {\n const Acc = {};\n for (const L of K) {\n Acc[L] = IntersectEvaluated(CompositeProperty(T, L));\n }\n return Acc;\n}\n// prettier-ignore\nexport function Composite(T, options) {\n const K = CompositeKeys(T);\n const P = CompositeProperties(T, K);\n const R = Object(P, options);\n return R;\n}\n","export * from './composite.mjs';\n","import { Kind } from '../symbols/index.mjs';\nimport { CreateType } from '../create/type.mjs';\n/** `[JavaScript]` Creates a Date type */\nexport function Date(options) {\n return CreateType({ [Kind]: 'Date', type: 'Date' }, options);\n}\n","export * from './date.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Null type */\nexport function Null(options) {\n return CreateType({ [Kind]: 'Null', type: 'null' }, options);\n}\n","export * from './null.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Symbol type */\nexport function Symbol(options) {\n return CreateType({ [Kind]: 'Symbol', type: 'symbol' }, options);\n}\n","export * from './symbol.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Undefined type */\nexport function Undefined(options) {\n return CreateType({ [Kind]: 'Undefined', type: 'undefined' }, options);\n}\n","export * from './undefined.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Uint8Array type */\nexport function Uint8Array(options) {\n return CreateType({ [Kind]: 'Uint8Array', type: 'Uint8Array' }, options);\n}\n","export * from './uint8array.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates an Unknown type */\nexport function Unknown(options) {\n return CreateType({ [Kind]: 'Unknown' }, options);\n}\n","export * from './unknown.mjs';\n","import { Any } from '../any/index.mjs';\nimport { BigInt } from '../bigint/index.mjs';\nimport { Date } from '../date/index.mjs';\nimport { Function as FunctionType } from '../function/index.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { Null } from '../null/index.mjs';\nimport { Object } from '../object/index.mjs';\nimport { Symbol } from '../symbol/index.mjs';\nimport { Tuple } from '../tuple/index.mjs';\nimport { Readonly } from '../readonly/index.mjs';\nimport { Undefined } from '../undefined/index.mjs';\nimport { Uint8Array } from '../uint8array/index.mjs';\nimport { Unknown } from '../unknown/index.mjs';\nimport { CreateType } from '../create/index.mjs';\n// ------------------------------------------------------------------\n// ValueGuard\n// ------------------------------------------------------------------\nimport { IsArray, IsNumber, IsBigInt, IsUint8Array, IsDate, IsIterator, IsObject, IsAsyncIterator, IsFunction, IsUndefined, IsNull, IsSymbol, IsBoolean, IsString } from '../guard/value.mjs';\n// prettier-ignore\nfunction FromArray(T) {\n return T.map(L => FromValue(L, false));\n}\n// prettier-ignore\nfunction FromProperties(value) {\n const Acc = {};\n for (const K of globalThis.Object.getOwnPropertyNames(value))\n Acc[K] = Readonly(FromValue(value[K], false));\n return Acc;\n}\nfunction ConditionalReadonly(T, root) {\n return (root === true ? T : Readonly(T));\n}\n// prettier-ignore\nfunction FromValue(value, root) {\n return (IsAsyncIterator(value) ? ConditionalReadonly(Any(), root) :\n IsIterator(value) ? ConditionalReadonly(Any(), root) :\n IsArray(value) ? Readonly(Tuple(FromArray(value))) :\n IsUint8Array(value) ? Uint8Array() :\n IsDate(value) ? Date() :\n IsObject(value) ? ConditionalReadonly(Object(FromProperties(value)), root) :\n IsFunction(value) ? ConditionalReadonly(FunctionType([], Unknown()), root) :\n IsUndefined(value) ? Undefined() :\n IsNull(value) ? Null() :\n IsSymbol(value) ? Symbol() :\n IsBigInt(value) ? BigInt() :\n IsNumber(value) ? Literal(value) :\n IsBoolean(value) ? Literal(value) :\n IsString(value) ? Literal(value) :\n Object({}));\n}\n/** `[JavaScript]` Creates a readonly const type from the given value. */\nexport function Const(T, options) {\n return CreateType(FromValue(T, true), options);\n}\n","export * from './const.mjs';\n","import { Tuple } from '../tuple/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport * as KindGuard from '../guard/kind.mjs';\n/** `[JavaScript]` Extracts the ConstructorParameters from the given Constructor type */\nexport function ConstructorParameters(schema, options) {\n return (KindGuard.IsConstructor(schema) ? Tuple(schema.parameters, options) : Never(options));\n}\n","export * from './constructor-parameters.mjs';\n","import { Literal } from '../literal/index.mjs';\nimport { Kind, Hint } from '../symbols/index.mjs';\nimport { Union } from '../union/index.mjs';\n// ------------------------------------------------------------------\n// ValueGuard\n// ------------------------------------------------------------------\nimport { IsUndefined } from '../guard/value.mjs';\n/** `[Json]` Creates a Enum type */\nexport function Enum(item, options) {\n if (IsUndefined(item))\n throw new Error('Enum undefined or empty');\n const values1 = globalThis.Object.getOwnPropertyNames(item)\n .filter((key) => isNaN(key))\n .map((key) => item[key]);\n const values2 = [...new Set(values1)];\n const anyOf = values2.map((value) => Literal(value));\n return Union(anyOf, { ...options, [Hint]: 'Enum' });\n}\n","export * from './enum.mjs';\n","import { Any } from '../any/index.mjs';\nimport { Function as FunctionType } from '../function/index.mjs';\nimport { Number } from '../number/index.mjs';\nimport { String } from '../string/index.mjs';\nimport { Unknown } from '../unknown/index.mjs';\nimport { TemplateLiteralToUnion } from '../template-literal/index.mjs';\nimport { PatternNumberExact, PatternStringExact } from '../patterns/index.mjs';\nimport { Kind, Hint } from '../symbols/index.mjs';\nimport { TypeBoxError } from '../error/index.mjs';\nimport { TypeGuard, ValueGuard } from '../guard/index.mjs';\nexport class ExtendsResolverError extends TypeBoxError {\n}\nexport var ExtendsResult;\n(function (ExtendsResult) {\n ExtendsResult[ExtendsResult[\"Union\"] = 0] = \"Union\";\n ExtendsResult[ExtendsResult[\"True\"] = 1] = \"True\";\n ExtendsResult[ExtendsResult[\"False\"] = 2] = \"False\";\n})(ExtendsResult || (ExtendsResult = {}));\n// ------------------------------------------------------------------\n// IntoBooleanResult\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction IntoBooleanResult(result) {\n return result === ExtendsResult.False ? result : ExtendsResult.True;\n}\n// ------------------------------------------------------------------\n// Throw\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction Throw(message) {\n throw new ExtendsResolverError(message);\n}\n// ------------------------------------------------------------------\n// StructuralRight\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction IsStructuralRight(right) {\n return (TypeGuard.IsNever(right) ||\n TypeGuard.IsIntersect(right) ||\n TypeGuard.IsUnion(right) ||\n TypeGuard.IsUnknown(right) ||\n TypeGuard.IsAny(right));\n}\n// prettier-ignore\nfunction StructuralRight(left, right) {\n return (TypeGuard.IsNever(right) ? FromNeverRight(left, right) :\n TypeGuard.IsIntersect(right) ? FromIntersectRight(left, right) :\n TypeGuard.IsUnion(right) ? FromUnionRight(left, right) :\n TypeGuard.IsUnknown(right) ? FromUnknownRight(left, right) :\n TypeGuard.IsAny(right) ? FromAnyRight(left, right) :\n Throw('StructuralRight'));\n}\n// ------------------------------------------------------------------\n// Any\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromAnyRight(left, right) {\n return ExtendsResult.True;\n}\n// prettier-ignore\nfunction FromAny(left, right) {\n return (TypeGuard.IsIntersect(right) ? FromIntersectRight(left, right) :\n (TypeGuard.IsUnion(right) && right.anyOf.some((schema) => TypeGuard.IsAny(schema) || TypeGuard.IsUnknown(schema))) ? ExtendsResult.True :\n TypeGuard.IsUnion(right) ? ExtendsResult.Union :\n TypeGuard.IsUnknown(right) ? ExtendsResult.True :\n TypeGuard.IsAny(right) ? ExtendsResult.True :\n ExtendsResult.Union);\n}\n// ------------------------------------------------------------------\n// Array\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromArrayRight(left, right) {\n return (TypeGuard.IsUnknown(left) ? ExtendsResult.False :\n TypeGuard.IsAny(left) ? ExtendsResult.Union :\n TypeGuard.IsNever(left) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromArray(left, right) {\n return (TypeGuard.IsObject(right) && IsObjectArrayLike(right) ? ExtendsResult.True :\n IsStructuralRight(right) ? StructuralRight(left, right) :\n !TypeGuard.IsArray(right) ? ExtendsResult.False :\n IntoBooleanResult(Visit(left.items, right.items)));\n}\n// ------------------------------------------------------------------\n// AsyncIterator\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromAsyncIterator(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n !TypeGuard.IsAsyncIterator(right) ? ExtendsResult.False :\n IntoBooleanResult(Visit(left.items, right.items)));\n}\n// ------------------------------------------------------------------\n// BigInt\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromBigInt(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsBigInt(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Boolean\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromBooleanRight(left, right) {\n return (TypeGuard.IsLiteralBoolean(left) ? ExtendsResult.True :\n TypeGuard.IsBoolean(left) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromBoolean(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsBoolean(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Constructor\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromConstructor(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n !TypeGuard.IsConstructor(right) ? ExtendsResult.False :\n left.parameters.length > right.parameters.length ? ExtendsResult.False :\n (!left.parameters.every((schema, index) => IntoBooleanResult(Visit(right.parameters[index], schema)) === ExtendsResult.True)) ? ExtendsResult.False :\n IntoBooleanResult(Visit(left.returns, right.returns)));\n}\n// ------------------------------------------------------------------\n// Date\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromDate(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsDate(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Function\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromFunction(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n !TypeGuard.IsFunction(right) ? ExtendsResult.False :\n left.parameters.length > right.parameters.length ? ExtendsResult.False :\n (!left.parameters.every((schema, index) => IntoBooleanResult(Visit(right.parameters[index], schema)) === ExtendsResult.True)) ? ExtendsResult.False :\n IntoBooleanResult(Visit(left.returns, right.returns)));\n}\n// ------------------------------------------------------------------\n// Integer\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromIntegerRight(left, right) {\n return (TypeGuard.IsLiteral(left) && ValueGuard.IsNumber(left.const) ? ExtendsResult.True :\n TypeGuard.IsNumber(left) || TypeGuard.IsInteger(left) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromInteger(left, right) {\n return (TypeGuard.IsInteger(right) || TypeGuard.IsNumber(right) ? ExtendsResult.True :\n IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Intersect\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromIntersectRight(left, right) {\n return right.allOf.every((schema) => Visit(left, schema) === ExtendsResult.True)\n ? ExtendsResult.True\n : ExtendsResult.False;\n}\n// prettier-ignore\nfunction FromIntersect(left, right) {\n return left.allOf.some((schema) => Visit(schema, right) === ExtendsResult.True)\n ? ExtendsResult.True\n : ExtendsResult.False;\n}\n// ------------------------------------------------------------------\n// Iterator\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromIterator(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n !TypeGuard.IsIterator(right) ? ExtendsResult.False :\n IntoBooleanResult(Visit(left.items, right.items)));\n}\n// ------------------------------------------------------------------\n// Literal\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromLiteral(left, right) {\n return (TypeGuard.IsLiteral(right) && right.const === left.const ? ExtendsResult.True :\n IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsString(right) ? FromStringRight(left, right) :\n TypeGuard.IsNumber(right) ? FromNumberRight(left, right) :\n TypeGuard.IsInteger(right) ? FromIntegerRight(left, right) :\n TypeGuard.IsBoolean(right) ? FromBooleanRight(left, right) :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Never\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromNeverRight(left, right) {\n return ExtendsResult.False;\n}\n// prettier-ignore\nfunction FromNever(left, right) {\n return ExtendsResult.True;\n}\n// ------------------------------------------------------------------\n// Not\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction UnwrapTNot(schema) {\n let [current, depth] = [schema, 0];\n while (true) {\n if (!TypeGuard.IsNot(current))\n break;\n current = current.not;\n depth += 1;\n }\n return depth % 2 === 0 ? current : Unknown();\n}\n// prettier-ignore\nfunction FromNot(left, right) {\n // TypeScript has no concept of negated types, and attempts to correctly check the negated\n // type at runtime would put TypeBox at odds with TypeScripts ability to statically infer\n // the type. Instead we unwrap to either unknown or T and continue evaluating.\n // prettier-ignore\n return (TypeGuard.IsNot(left) ? Visit(UnwrapTNot(left), right) :\n TypeGuard.IsNot(right) ? Visit(left, UnwrapTNot(right)) :\n Throw('Invalid fallthrough for Not'));\n}\n// ------------------------------------------------------------------\n// Null\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromNull(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsNull(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Number\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromNumberRight(left, right) {\n return (TypeGuard.IsLiteralNumber(left) ? ExtendsResult.True :\n TypeGuard.IsNumber(left) || TypeGuard.IsInteger(left) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromNumber(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsInteger(right) || TypeGuard.IsNumber(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Object\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction IsObjectPropertyCount(schema, count) {\n return Object.getOwnPropertyNames(schema.properties).length === count;\n}\n// prettier-ignore\nfunction IsObjectStringLike(schema) {\n return IsObjectArrayLike(schema);\n}\n// prettier-ignore\nfunction IsObjectSymbolLike(schema) {\n return IsObjectPropertyCount(schema, 0) || (IsObjectPropertyCount(schema, 1) && 'description' in schema.properties && TypeGuard.IsUnion(schema.properties.description) && schema.properties.description.anyOf.length === 2 && ((TypeGuard.IsString(schema.properties.description.anyOf[0]) &&\n TypeGuard.IsUndefined(schema.properties.description.anyOf[1])) || (TypeGuard.IsString(schema.properties.description.anyOf[1]) &&\n TypeGuard.IsUndefined(schema.properties.description.anyOf[0]))));\n}\n// prettier-ignore\nfunction IsObjectNumberLike(schema) {\n return IsObjectPropertyCount(schema, 0);\n}\n// prettier-ignore\nfunction IsObjectBooleanLike(schema) {\n return IsObjectPropertyCount(schema, 0);\n}\n// prettier-ignore\nfunction IsObjectBigIntLike(schema) {\n return IsObjectPropertyCount(schema, 0);\n}\n// prettier-ignore\nfunction IsObjectDateLike(schema) {\n return IsObjectPropertyCount(schema, 0);\n}\n// prettier-ignore\nfunction IsObjectUint8ArrayLike(schema) {\n return IsObjectArrayLike(schema);\n}\n// prettier-ignore\nfunction IsObjectFunctionLike(schema) {\n const length = Number();\n return IsObjectPropertyCount(schema, 0) || (IsObjectPropertyCount(schema, 1) && 'length' in schema.properties && IntoBooleanResult(Visit(schema.properties['length'], length)) === ExtendsResult.True);\n}\n// prettier-ignore\nfunction IsObjectConstructorLike(schema) {\n return IsObjectPropertyCount(schema, 0);\n}\n// prettier-ignore\nfunction IsObjectArrayLike(schema) {\n const length = Number();\n return IsObjectPropertyCount(schema, 0) || (IsObjectPropertyCount(schema, 1) && 'length' in schema.properties && IntoBooleanResult(Visit(schema.properties['length'], length)) === ExtendsResult.True);\n}\n// prettier-ignore\nfunction IsObjectPromiseLike(schema) {\n const then = FunctionType([Any()], Any());\n return IsObjectPropertyCount(schema, 0) || (IsObjectPropertyCount(schema, 1) && 'then' in schema.properties && IntoBooleanResult(Visit(schema.properties['then'], then)) === ExtendsResult.True);\n}\n// ------------------------------------------------------------------\n// Property\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction Property(left, right) {\n return (Visit(left, right) === ExtendsResult.False ? ExtendsResult.False :\n TypeGuard.IsOptional(left) && !TypeGuard.IsOptional(right) ? ExtendsResult.False :\n ExtendsResult.True);\n}\n// prettier-ignore\nfunction FromObjectRight(left, right) {\n return (TypeGuard.IsUnknown(left) ? ExtendsResult.False :\n TypeGuard.IsAny(left) ? ExtendsResult.Union : (TypeGuard.IsNever(left) ||\n (TypeGuard.IsLiteralString(left) && IsObjectStringLike(right)) ||\n (TypeGuard.IsLiteralNumber(left) && IsObjectNumberLike(right)) ||\n (TypeGuard.IsLiteralBoolean(left) && IsObjectBooleanLike(right)) ||\n (TypeGuard.IsSymbol(left) && IsObjectSymbolLike(right)) ||\n (TypeGuard.IsBigInt(left) && IsObjectBigIntLike(right)) ||\n (TypeGuard.IsString(left) && IsObjectStringLike(right)) ||\n (TypeGuard.IsSymbol(left) && IsObjectSymbolLike(right)) ||\n (TypeGuard.IsNumber(left) && IsObjectNumberLike(right)) ||\n (TypeGuard.IsInteger(left) && IsObjectNumberLike(right)) ||\n (TypeGuard.IsBoolean(left) && IsObjectBooleanLike(right)) ||\n (TypeGuard.IsUint8Array(left) && IsObjectUint8ArrayLike(right)) ||\n (TypeGuard.IsDate(left) && IsObjectDateLike(right)) ||\n (TypeGuard.IsConstructor(left) && IsObjectConstructorLike(right)) ||\n (TypeGuard.IsFunction(left) && IsObjectFunctionLike(right))) ? ExtendsResult.True :\n (TypeGuard.IsRecord(left) && TypeGuard.IsString(RecordKey(left))) ? (() => {\n // When expressing a Record with literal key values, the Record is converted into a Object with\n // the Hint assigned as `Record`. This is used to invert the extends logic.\n return right[Hint] === 'Record' ? ExtendsResult.True : ExtendsResult.False;\n })() :\n (TypeGuard.IsRecord(left) && TypeGuard.IsNumber(RecordKey(left))) ? (() => {\n return IsObjectPropertyCount(right, 0) ? ExtendsResult.True : ExtendsResult.False;\n })() :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromObject(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n !TypeGuard.IsObject(right) ? ExtendsResult.False :\n (() => {\n for (const key of Object.getOwnPropertyNames(right.properties)) {\n if (!(key in left.properties) && !TypeGuard.IsOptional(right.properties[key])) {\n return ExtendsResult.False;\n }\n if (TypeGuard.IsOptional(right.properties[key])) {\n return ExtendsResult.True;\n }\n if (Property(left.properties[key], right.properties[key]) === ExtendsResult.False) {\n return ExtendsResult.False;\n }\n }\n return ExtendsResult.True;\n })());\n}\n// ------------------------------------------------------------------\n// Promise\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromPromise(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) && IsObjectPromiseLike(right) ? ExtendsResult.True :\n !TypeGuard.IsPromise(right) ? ExtendsResult.False :\n IntoBooleanResult(Visit(left.item, right.item)));\n}\n// ------------------------------------------------------------------\n// Record\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction RecordKey(schema) {\n return (PatternNumberExact in schema.patternProperties ? Number() :\n PatternStringExact in schema.patternProperties ? String() :\n Throw('Unknown record key pattern'));\n}\n// prettier-ignore\nfunction RecordValue(schema) {\n return (PatternNumberExact in schema.patternProperties ? schema.patternProperties[PatternNumberExact] :\n PatternStringExact in schema.patternProperties ? schema.patternProperties[PatternStringExact] :\n Throw('Unable to get record value schema'));\n}\n// prettier-ignore\nfunction FromRecordRight(left, right) {\n const [Key, Value] = [RecordKey(right), RecordValue(right)];\n return ((TypeGuard.IsLiteralString(left) && TypeGuard.IsNumber(Key) && IntoBooleanResult(Visit(left, Value)) === ExtendsResult.True) ? ExtendsResult.True :\n TypeGuard.IsUint8Array(left) && TypeGuard.IsNumber(Key) ? Visit(left, Value) :\n TypeGuard.IsString(left) && TypeGuard.IsNumber(Key) ? Visit(left, Value) :\n TypeGuard.IsArray(left) && TypeGuard.IsNumber(Key) ? Visit(left, Value) :\n TypeGuard.IsObject(left) ? (() => {\n for (const key of Object.getOwnPropertyNames(left.properties)) {\n if (Property(Value, left.properties[key]) === ExtendsResult.False) {\n return ExtendsResult.False;\n }\n }\n return ExtendsResult.True;\n })() :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromRecord(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n !TypeGuard.IsRecord(right) ? ExtendsResult.False :\n Visit(RecordValue(left), RecordValue(right)));\n}\n// ------------------------------------------------------------------\n// RegExp\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromRegExp(left, right) {\n // Note: RegExp types evaluate as strings, not RegExp objects.\n // Here we remap either into string and continue evaluating.\n const L = TypeGuard.IsRegExp(left) ? String() : left;\n const R = TypeGuard.IsRegExp(right) ? String() : right;\n return Visit(L, R);\n}\n// ------------------------------------------------------------------\n// String\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromStringRight(left, right) {\n return (TypeGuard.IsLiteral(left) && ValueGuard.IsString(left.const) ? ExtendsResult.True :\n TypeGuard.IsString(left) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromString(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsString(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Symbol\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromSymbol(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsSymbol(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// TemplateLiteral\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromTemplateLiteral(left, right) {\n // TemplateLiteral types are resolved to either unions for finite expressions or string\n // for infinite expressions. Here we call to TemplateLiteralResolver to resolve for\n // either type and continue evaluating.\n return (TypeGuard.IsTemplateLiteral(left) ? Visit(TemplateLiteralToUnion(left), right) :\n TypeGuard.IsTemplateLiteral(right) ? Visit(left, TemplateLiteralToUnion(right)) :\n Throw('Invalid fallthrough for TemplateLiteral'));\n}\n// ------------------------------------------------------------------\n// Tuple\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction IsArrayOfTuple(left, right) {\n return (TypeGuard.IsArray(right) &&\n left.items !== undefined &&\n left.items.every((schema) => Visit(schema, right.items) === ExtendsResult.True));\n}\n// prettier-ignore\nfunction FromTupleRight(left, right) {\n return (TypeGuard.IsNever(left) ? ExtendsResult.True :\n TypeGuard.IsUnknown(left) ? ExtendsResult.False :\n TypeGuard.IsAny(left) ? ExtendsResult.Union :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromTuple(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) && IsObjectArrayLike(right) ? ExtendsResult.True :\n TypeGuard.IsArray(right) && IsArrayOfTuple(left, right) ? ExtendsResult.True :\n !TypeGuard.IsTuple(right) ? ExtendsResult.False :\n (ValueGuard.IsUndefined(left.items) && !ValueGuard.IsUndefined(right.items)) || (!ValueGuard.IsUndefined(left.items) && ValueGuard.IsUndefined(right.items)) ? ExtendsResult.False :\n (ValueGuard.IsUndefined(left.items) && !ValueGuard.IsUndefined(right.items)) ? ExtendsResult.True :\n left.items.every((schema, index) => Visit(schema, right.items[index]) === ExtendsResult.True) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Uint8Array\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromUint8Array(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsUint8Array(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Undefined\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromUndefined(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsVoid(right) ? FromVoidRight(left, right) :\n TypeGuard.IsUndefined(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Union\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromUnionRight(left, right) {\n return right.anyOf.some((schema) => Visit(left, schema) === ExtendsResult.True)\n ? ExtendsResult.True\n : ExtendsResult.False;\n}\n// prettier-ignore\nfunction FromUnion(left, right) {\n return left.anyOf.every((schema) => Visit(schema, right) === ExtendsResult.True)\n ? ExtendsResult.True\n : ExtendsResult.False;\n}\n// ------------------------------------------------------------------\n// Unknown\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromUnknownRight(left, right) {\n return ExtendsResult.True;\n}\n// prettier-ignore\nfunction FromUnknown(left, right) {\n return (TypeGuard.IsNever(right) ? FromNeverRight(left, right) :\n TypeGuard.IsIntersect(right) ? FromIntersectRight(left, right) :\n TypeGuard.IsUnion(right) ? FromUnionRight(left, right) :\n TypeGuard.IsAny(right) ? FromAnyRight(left, right) :\n TypeGuard.IsString(right) ? FromStringRight(left, right) :\n TypeGuard.IsNumber(right) ? FromNumberRight(left, right) :\n TypeGuard.IsInteger(right) ? FromIntegerRight(left, right) :\n TypeGuard.IsBoolean(right) ? FromBooleanRight(left, right) :\n TypeGuard.IsArray(right) ? FromArrayRight(left, right) :\n TypeGuard.IsTuple(right) ? FromTupleRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsUnknown(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Void\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromVoidRight(left, right) {\n return (TypeGuard.IsUndefined(left) ? ExtendsResult.True :\n TypeGuard.IsUndefined(left) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromVoid(left, right) {\n return (TypeGuard.IsIntersect(right) ? FromIntersectRight(left, right) :\n TypeGuard.IsUnion(right) ? FromUnionRight(left, right) :\n TypeGuard.IsUnknown(right) ? FromUnknownRight(left, right) :\n TypeGuard.IsAny(right) ? FromAnyRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsVoid(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction Visit(left, right) {\n return (\n // resolvable\n (TypeGuard.IsTemplateLiteral(left) || TypeGuard.IsTemplateLiteral(right)) ? FromTemplateLiteral(left, right) :\n (TypeGuard.IsRegExp(left) || TypeGuard.IsRegExp(right)) ? FromRegExp(left, right) :\n (TypeGuard.IsNot(left) || TypeGuard.IsNot(right)) ? FromNot(left, right) :\n // standard\n TypeGuard.IsAny(left) ? FromAny(left, right) :\n TypeGuard.IsArray(left) ? FromArray(left, right) :\n TypeGuard.IsBigInt(left) ? FromBigInt(left, right) :\n TypeGuard.IsBoolean(left) ? FromBoolean(left, right) :\n TypeGuard.IsAsyncIterator(left) ? FromAsyncIterator(left, right) :\n TypeGuard.IsConstructor(left) ? FromConstructor(left, right) :\n TypeGuard.IsDate(left) ? FromDate(left, right) :\n TypeGuard.IsFunction(left) ? FromFunction(left, right) :\n TypeGuard.IsInteger(left) ? FromInteger(left, right) :\n TypeGuard.IsIntersect(left) ? FromIntersect(left, right) :\n TypeGuard.IsIterator(left) ? FromIterator(left, right) :\n TypeGuard.IsLiteral(left) ? FromLiteral(left, right) :\n TypeGuard.IsNever(left) ? FromNever(left, right) :\n TypeGuard.IsNull(left) ? FromNull(left, right) :\n TypeGuard.IsNumber(left) ? FromNumber(left, right) :\n TypeGuard.IsObject(left) ? FromObject(left, right) :\n TypeGuard.IsRecord(left) ? FromRecord(left, right) :\n TypeGuard.IsString(left) ? FromString(left, right) :\n TypeGuard.IsSymbol(left) ? FromSymbol(left, right) :\n TypeGuard.IsTuple(left) ? FromTuple(left, right) :\n TypeGuard.IsPromise(left) ? FromPromise(left, right) :\n TypeGuard.IsUint8Array(left) ? FromUint8Array(left, right) :\n TypeGuard.IsUndefined(left) ? FromUndefined(left, right) :\n TypeGuard.IsUnion(left) ? FromUnion(left, right) :\n TypeGuard.IsUnknown(left) ? FromUnknown(left, right) :\n TypeGuard.IsVoid(left) ? FromVoid(left, right) :\n Throw(`Unknown left type operand '${left[Kind]}'`));\n}\nexport function ExtendsCheck(left, right) {\n return Visit(left, right);\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Extends } from './extends.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction FromProperties(P, Right, True, False, options) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(P))\n Acc[K2] = Extends(P[K2], Right, True, False, Clone(options));\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(Left, Right, True, False, options) {\n return FromProperties(Left.properties, Right, True, False, options);\n}\n// prettier-ignore\nexport function ExtendsFromMappedResult(Left, Right, True, False, options) {\n const P = FromMappedResult(Left, Right, True, False, options);\n return MappedResult(P);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Union } from '../union/index.mjs';\nimport { ExtendsCheck, ExtendsResult } from './extends-check.mjs';\nimport { ExtendsFromMappedKey } from './extends-from-mapped-key.mjs';\nimport { ExtendsFromMappedResult } from './extends-from-mapped-result.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsMappedKey, IsMappedResult } from '../guard/kind.mjs';\n// prettier-ignore\nfunction ExtendsResolve(left, right, trueType, falseType) {\n const R = ExtendsCheck(left, right);\n return (R === ExtendsResult.Union ? Union([trueType, falseType]) :\n R === ExtendsResult.True ? trueType :\n falseType);\n}\n/** `[Json]` Creates a Conditional type */\nexport function Extends(L, R, T, F, options) {\n // prettier-ignore\n return (IsMappedResult(L) ? ExtendsFromMappedResult(L, R, T, F, options) :\n IsMappedKey(L) ? CreateType(ExtendsFromMappedKey(L, R, T, F, options)) :\n CreateType(ExtendsResolve(L, R, T, F), options));\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { Extends } from './extends.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction FromPropertyKey(K, U, L, R, options) {\n return {\n [K]: Extends(Literal(K), U, L, R, Clone(options))\n };\n}\n// prettier-ignore\nfunction FromPropertyKeys(K, U, L, R, options) {\n return K.reduce((Acc, LK) => {\n return { ...Acc, ...FromPropertyKey(LK, U, L, R, options) };\n }, {});\n}\n// prettier-ignore\nfunction FromMappedKey(K, U, L, R, options) {\n return FromPropertyKeys(K.keys, U, L, R, options);\n}\n// prettier-ignore\nexport function ExtendsFromMappedKey(T, U, L, R, options) {\n const P = FromMappedKey(T, U, L, R, options);\n return MappedResult(P);\n}\n","import { Kind } from '../symbols/index.mjs';\n/** Fast undefined check used for properties of type undefined */\nfunction Intersect(schema) {\n return schema.allOf.every((schema) => ExtendsUndefinedCheck(schema));\n}\nfunction Union(schema) {\n return schema.anyOf.some((schema) => ExtendsUndefinedCheck(schema));\n}\nfunction Not(schema) {\n return !ExtendsUndefinedCheck(schema.not);\n}\n/** Fast undefined check used for properties of type undefined */\n// prettier-ignore\nexport function ExtendsUndefinedCheck(schema) {\n return (schema[Kind] === 'Intersect' ? Intersect(schema) :\n schema[Kind] === 'Union' ? Union(schema) :\n schema[Kind] === 'Not' ? Not(schema) :\n schema[Kind] === 'Undefined' ? true :\n false);\n}\n","export * from './extends-check.mjs';\nexport * from './extends-from-mapped-key.mjs';\nexport * from './extends-from-mapped-result.mjs';\nexport * from './extends-undefined.mjs';\nexport * from './extends.mjs';\n","import { Exclude } from './exclude.mjs';\nimport { TemplateLiteralToUnion } from '../template-literal/index.mjs';\nexport function ExcludeFromTemplateLiteral(L, R) {\n return Exclude(TemplateLiteralToUnion(L), R);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Union } from '../union/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport { ExtendsCheck, ExtendsResult } from '../extends/index.mjs';\nimport { ExcludeFromMappedResult } from './exclude-from-mapped-result.mjs';\nimport { ExcludeFromTemplateLiteral } from './exclude-from-template-literal.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsMappedResult, IsTemplateLiteral, IsUnion } from '../guard/kind.mjs';\nfunction ExcludeRest(L, R) {\n const excluded = L.filter((inner) => ExtendsCheck(inner, R) === ExtendsResult.False);\n return excluded.length === 1 ? excluded[0] : Union(excluded);\n}\n/** `[Json]` Constructs a type by excluding from unionType all union members that are assignable to excludedMembers */\nexport function Exclude(L, R, options = {}) {\n // overloads\n if (IsTemplateLiteral(L))\n return CreateType(ExcludeFromTemplateLiteral(L, R), options);\n if (IsMappedResult(L))\n return CreateType(ExcludeFromMappedResult(L, R), options);\n // prettier-ignore\n return CreateType(IsUnion(L) ? ExcludeRest(L.anyOf, R) :\n ExtendsCheck(L, R) !== ExtendsResult.False ? Never() : L, options);\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Exclude } from './exclude.mjs';\n// prettier-ignore\nfunction FromProperties(P, U) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(P))\n Acc[K2] = Exclude(P[K2], U);\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(R, T) {\n return FromProperties(R.properties, T);\n}\n// prettier-ignore\nexport function ExcludeFromMappedResult(R, T) {\n const P = FromMappedResult(R, T);\n return MappedResult(P);\n}\n","export * from './exclude-from-mapped-result.mjs';\nexport * from './exclude-from-template-literal.mjs';\nexport * from './exclude.mjs';\n","import { Extract } from './extract.mjs';\nimport { TemplateLiteralToUnion } from '../template-literal/index.mjs';\nexport function ExtractFromTemplateLiteral(L, R) {\n return Extract(TemplateLiteralToUnion(L), R);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Union } from '../union/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport { ExtendsCheck, ExtendsResult } from '../extends/index.mjs';\nimport { ExtractFromMappedResult } from './extract-from-mapped-result.mjs';\nimport { ExtractFromTemplateLiteral } from './extract-from-template-literal.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsMappedResult, IsTemplateLiteral, IsUnion } from '../guard/kind.mjs';\nfunction ExtractRest(L, R) {\n const extracted = L.filter((inner) => ExtendsCheck(inner, R) !== ExtendsResult.False);\n return extracted.length === 1 ? extracted[0] : Union(extracted);\n}\n/** `[Json]` Constructs a type by extracting from type all union members that are assignable to union */\nexport function Extract(L, R, options) {\n // overloads\n if (IsTemplateLiteral(L))\n return CreateType(ExtractFromTemplateLiteral(L, R), options);\n if (IsMappedResult(L))\n return CreateType(ExtractFromMappedResult(L, R), options);\n // prettier-ignore\n return CreateType(IsUnion(L) ? ExtractRest(L.anyOf, R) :\n ExtendsCheck(L, R) !== ExtendsResult.False ? L : Never(), options);\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Extract } from './extract.mjs';\n// prettier-ignore\nfunction FromProperties(P, T) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(P))\n Acc[K2] = Extract(P[K2], T);\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(R, T) {\n return FromProperties(R.properties, T);\n}\n// prettier-ignore\nexport function ExtractFromMappedResult(R, T) {\n const P = FromMappedResult(R, T);\n return MappedResult(P);\n}\n","export * from './extract-from-mapped-result.mjs';\nexport * from './extract-from-template-literal.mjs';\nexport * from './extract.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Never } from '../never/index.mjs';\nimport * as KindGuard from '../guard/kind.mjs';\n/** `[JavaScript]` Extracts the InstanceType from the given Constructor type */\nexport function InstanceType(schema, options) {\n return (KindGuard.IsConstructor(schema) ? CreateType(schema.returns, options) : Never(options));\n}\n","export * from './instance-type.mjs';\n","import { Readonly } from '../readonly/index.mjs';\nimport { Optional } from '../optional/index.mjs';\n/** `[Json]` Creates a Readonly and Optional property */\nexport function ReadonlyOptional(schema) {\n return Readonly(Optional(schema));\n}\n","export * from './readonly-optional.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Kind, Hint } from '../symbols/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport { Number } from '../number/index.mjs';\nimport { Object } from '../object/index.mjs';\nimport { String } from '../string/index.mjs';\nimport { Union } from '../union/index.mjs';\nimport { IsTemplateLiteralFinite } from '../template-literal/index.mjs';\nimport { PatternStringExact, PatternNumberExact, PatternNeverExact } from '../patterns/index.mjs';\nimport { IndexPropertyKeys } from '../indexed/index.mjs';\n// ------------------------------------------------------------------\n// ValueGuard\n// ------------------------------------------------------------------\nimport { IsUndefined } from '../guard/value.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsInteger, IsLiteral, IsAny, IsBoolean, IsNever, IsNumber, IsString, IsRegExp, IsTemplateLiteral, IsUnion } from '../guard/kind.mjs';\n// ------------------------------------------------------------------\n// RecordCreateFromPattern\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction RecordCreateFromPattern(pattern, T, options) {\n return CreateType({ [Kind]: 'Record', type: 'object', patternProperties: { [pattern]: T } }, options);\n}\n// ------------------------------------------------------------------\n// RecordCreateFromKeys\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction RecordCreateFromKeys(K, T, options) {\n const result = {};\n for (const K2 of K)\n result[K2] = T;\n return Object(result, { ...options, [Hint]: 'Record' });\n}\n// prettier-ignore\nfunction FromTemplateLiteralKey(K, T, options) {\n return (IsTemplateLiteralFinite(K)\n ? RecordCreateFromKeys(IndexPropertyKeys(K), T, options)\n : RecordCreateFromPattern(K.pattern, T, options));\n}\n// prettier-ignore\nfunction FromUnionKey(key, type, options) {\n return RecordCreateFromKeys(IndexPropertyKeys(Union(key)), type, options);\n}\n// prettier-ignore\nfunction FromLiteralKey(key, type, options) {\n return RecordCreateFromKeys([key.toString()], type, options);\n}\n// prettier-ignore\nfunction FromRegExpKey(key, type, options) {\n return RecordCreateFromPattern(key.source, type, options);\n}\n// prettier-ignore\nfunction FromStringKey(key, type, options) {\n const pattern = IsUndefined(key.pattern) ? PatternStringExact : key.pattern;\n return RecordCreateFromPattern(pattern, type, options);\n}\n// prettier-ignore\nfunction FromAnyKey(_, type, options) {\n return RecordCreateFromPattern(PatternStringExact, type, options);\n}\n// prettier-ignore\nfunction FromNeverKey(_key, type, options) {\n return RecordCreateFromPattern(PatternNeverExact, type, options);\n}\n// prettier-ignore\nfunction FromBooleanKey(_key, type, options) {\n return Object({ true: type, false: type }, options);\n}\n// prettier-ignore\nfunction FromIntegerKey(_key, type, options) {\n return RecordCreateFromPattern(PatternNumberExact, type, options);\n}\n// prettier-ignore\nfunction FromNumberKey(_, type, options) {\n return RecordCreateFromPattern(PatternNumberExact, type, options);\n}\n// ------------------------------------------------------------------\n// TRecordOrObject\n// ------------------------------------------------------------------\n/** `[Json]` Creates a Record type */\nexport function Record(key, type, options = {}) {\n // prettier-ignore\n return (IsUnion(key) ? FromUnionKey(key.anyOf, type, options) :\n IsTemplateLiteral(key) ? FromTemplateLiteralKey(key, type, options) :\n IsLiteral(key) ? FromLiteralKey(key.const, type, options) :\n IsBoolean(key) ? FromBooleanKey(key, type, options) :\n IsInteger(key) ? FromIntegerKey(key, type, options) :\n IsNumber(key) ? FromNumberKey(key, type, options) :\n IsRegExp(key) ? FromRegExpKey(key, type, options) :\n IsString(key) ? FromStringKey(key, type, options) :\n IsAny(key) ? FromAnyKey(key, type, options) :\n IsNever(key) ? FromNeverKey(key, type, options) :\n Never(options));\n}\n// ------------------------------------------------------------------\n// Record Utilities\n// ------------------------------------------------------------------\n/** Gets the Records Pattern */\nexport function RecordPattern(record) {\n return globalThis.Object.getOwnPropertyNames(record.patternProperties)[0];\n}\n/** Gets the Records Key Type */\n// prettier-ignore\nexport function RecordKey(type) {\n const pattern = RecordPattern(type);\n return (pattern === PatternStringExact ? String() :\n pattern === PatternNumberExact ? Number() :\n String({ pattern }));\n}\n/** Gets a Record Value Type */\n// prettier-ignore\nexport function RecordValue(type) {\n return type.patternProperties[RecordPattern(type)];\n}\n","export * from './record.mjs';\n","import { CloneType } from '../clone/type.mjs';\nimport { Unknown } from '../unknown/index.mjs';\nimport { ReadonlyOptional } from '../readonly-optional/index.mjs';\nimport { Readonly } from '../readonly/index.mjs';\nimport { Optional } from '../optional/index.mjs';\nimport { Object } from '../object/index.mjs';\nimport { Record, RecordKey, RecordValue } from '../record/index.mjs';\nimport * as ValueGuard from '../guard/value.mjs';\nimport * as KindGuard from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromConstructor(args, type) {\n type.parameters = FromTypes(args, type.parameters);\n type.returns = FromType(args, type.returns);\n return type;\n}\n// prettier-ignore\nfunction FromFunction(args, type) {\n type.parameters = FromTypes(args, type.parameters);\n type.returns = FromType(args, type.returns);\n return type;\n}\n// prettier-ignore\nfunction FromIntersect(args, type) {\n type.allOf = FromTypes(args, type.allOf);\n return type;\n}\n// prettier-ignore\nfunction FromUnion(args, type) {\n type.anyOf = FromTypes(args, type.anyOf);\n return type;\n}\n// prettier-ignore\nfunction FromTuple(args, type) {\n if (ValueGuard.IsUndefined(type.items))\n return type;\n type.items = FromTypes(args, type.items);\n return type;\n}\n// prettier-ignore\nfunction FromArray(args, type) {\n type.items = FromType(args, type.items);\n return type;\n}\n// prettier-ignore\nfunction FromAsyncIterator(args, type) {\n type.items = FromType(args, type.items);\n return type;\n}\n// prettier-ignore\nfunction FromIterator(args, type) {\n type.items = FromType(args, type.items);\n return type;\n}\n// prettier-ignore\nfunction FromPromise(args, type) {\n type.item = FromType(args, type.item);\n return type;\n}\n// prettier-ignore\nfunction FromObject(args, type) {\n const mappedProperties = FromProperties(args, type.properties);\n return { ...type, ...Object(mappedProperties) }; // retain options\n}\n// prettier-ignore\nfunction FromRecord(args, type) {\n const mappedKey = FromType(args, RecordKey(type));\n const mappedValue = FromType(args, RecordValue(type));\n const result = Record(mappedKey, mappedValue);\n return { ...type, ...result }; // retain options\n}\n// prettier-ignore\nfunction FromArgument(args, argument) {\n return argument.index in args ? args[argument.index] : Unknown();\n}\n// prettier-ignore\nfunction FromProperty(args, type) {\n const isReadonly = KindGuard.IsReadonly(type);\n const isOptional = KindGuard.IsOptional(type);\n const mapped = FromType(args, type);\n return (isReadonly && isOptional ? ReadonlyOptional(mapped) :\n isReadonly && !isOptional ? Readonly(mapped) :\n !isReadonly && isOptional ? Optional(mapped) :\n mapped);\n}\n// prettier-ignore\nfunction FromProperties(args, properties) {\n return globalThis.Object.getOwnPropertyNames(properties).reduce((result, key) => {\n return { ...result, [key]: FromProperty(args, properties[key]) };\n }, {});\n}\n// prettier-ignore\nexport function FromTypes(args, types) {\n return types.map(type => FromType(args, type));\n}\n// prettier-ignore\nfunction FromType(args, type) {\n return (KindGuard.IsConstructor(type) ? FromConstructor(args, type) :\n KindGuard.IsFunction(type) ? FromFunction(args, type) :\n KindGuard.IsIntersect(type) ? FromIntersect(args, type) :\n KindGuard.IsUnion(type) ? FromUnion(args, type) :\n KindGuard.IsTuple(type) ? FromTuple(args, type) :\n KindGuard.IsArray(type) ? FromArray(args, type) :\n KindGuard.IsAsyncIterator(type) ? FromAsyncIterator(args, type) :\n KindGuard.IsIterator(type) ? FromIterator(args, type) :\n KindGuard.IsPromise(type) ? FromPromise(args, type) :\n KindGuard.IsObject(type) ? FromObject(args, type) :\n KindGuard.IsRecord(type) ? FromRecord(args, type) :\n KindGuard.IsArgument(type) ? FromArgument(args, type) :\n type);\n}\n/** `[JavaScript]` Instantiates a type with the given parameters */\n// prettier-ignore\nexport function Instantiate(type, args) {\n return FromType(args, CloneType(type));\n}\n","export * from './instantiate.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates an Integer type */\nexport function Integer(options) {\n return CreateType({ [Kind]: 'Integer', type: 'integer' }, options);\n}\n","export * from './integer.mjs';\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Intrinsic } from './intrinsic.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction MappedIntrinsicPropertyKey(K, M, options) {\n return {\n [K]: Intrinsic(Literal(K), M, Clone(options))\n };\n}\n// prettier-ignore\nfunction MappedIntrinsicPropertyKeys(K, M, options) {\n const result = K.reduce((Acc, L) => {\n return { ...Acc, ...MappedIntrinsicPropertyKey(L, M, options) };\n }, {});\n return result;\n}\n// prettier-ignore\nfunction MappedIntrinsicProperties(T, M, options) {\n return MappedIntrinsicPropertyKeys(T['keys'], M, options);\n}\n// prettier-ignore\nexport function IntrinsicFromMappedKey(T, M, options) {\n const P = MappedIntrinsicProperties(T, M, options);\n return MappedResult(P);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { TemplateLiteral, TemplateLiteralParseExact, IsTemplateLiteralExpressionFinite, TemplateLiteralExpressionGenerate } from '../template-literal/index.mjs';\nimport { IntrinsicFromMappedKey } from './intrinsic-from-mapped-key.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { Union } from '../union/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsMappedKey, IsTemplateLiteral, IsUnion, IsLiteral } from '../guard/kind.mjs';\n// ------------------------------------------------------------------\n// Apply\n// ------------------------------------------------------------------\nfunction ApplyUncapitalize(value) {\n const [first, rest] = [value.slice(0, 1), value.slice(1)];\n return [first.toLowerCase(), rest].join('');\n}\nfunction ApplyCapitalize(value) {\n const [first, rest] = [value.slice(0, 1), value.slice(1)];\n return [first.toUpperCase(), rest].join('');\n}\nfunction ApplyUppercase(value) {\n return value.toUpperCase();\n}\nfunction ApplyLowercase(value) {\n return value.toLowerCase();\n}\nfunction FromTemplateLiteral(schema, mode, options) {\n // note: template literals require special runtime handling as they are encoded in string patterns.\n // This diverges from the mapped type which would otherwise map on the template literal kind.\n const expression = TemplateLiteralParseExact(schema.pattern);\n const finite = IsTemplateLiteralExpressionFinite(expression);\n if (!finite)\n return { ...schema, pattern: FromLiteralValue(schema.pattern, mode) };\n const strings = [...TemplateLiteralExpressionGenerate(expression)];\n const literals = strings.map((value) => Literal(value));\n const mapped = FromRest(literals, mode);\n const union = Union(mapped);\n return TemplateLiteral([union], options);\n}\n// prettier-ignore\nfunction FromLiteralValue(value, mode) {\n return (typeof value === 'string' ? (mode === 'Uncapitalize' ? ApplyUncapitalize(value) :\n mode === 'Capitalize' ? ApplyCapitalize(value) :\n mode === 'Uppercase' ? ApplyUppercase(value) :\n mode === 'Lowercase' ? ApplyLowercase(value) :\n value) : value.toString());\n}\n// prettier-ignore\nfunction FromRest(T, M) {\n return T.map(L => Intrinsic(L, M));\n}\n/** Applies an intrinsic string manipulation to the given type. */\nexport function Intrinsic(schema, mode, options = {}) {\n // prettier-ignore\n return (\n // Intrinsic-Mapped-Inference\n IsMappedKey(schema) ? IntrinsicFromMappedKey(schema, mode, options) :\n // Standard-Inference\n IsTemplateLiteral(schema) ? FromTemplateLiteral(schema, mode, options) :\n IsUnion(schema) ? Union(FromRest(schema.anyOf, mode), options) :\n IsLiteral(schema) ? Literal(FromLiteralValue(schema.const, mode), options) :\n // Default Type\n CreateType(schema, options));\n}\n","import { Intrinsic } from './intrinsic.mjs';\n/** `[Json]` Intrinsic function to Capitalize LiteralString types */\nexport function Capitalize(T, options = {}) {\n return Intrinsic(T, 'Capitalize', options);\n}\n","import { Intrinsic } from './intrinsic.mjs';\n/** `[Json]` Intrinsic function to Lowercase LiteralString types */\nexport function Lowercase(T, options = {}) {\n return Intrinsic(T, 'Lowercase', options);\n}\n","import { Intrinsic } from './intrinsic.mjs';\n/** `[Json]` Intrinsic function to Uncapitalize LiteralString types */\nexport function Uncapitalize(T, options = {}) {\n return Intrinsic(T, 'Uncapitalize', options);\n}\n","import { Intrinsic } from './intrinsic.mjs';\n/** `[Json]` Intrinsic function to Uppercase LiteralString types */\nexport function Uppercase(T, options = {}) {\n return Intrinsic(T, 'Uppercase', options);\n}\n","export * from './capitalize.mjs';\nexport * from './intrinsic-from-mapped-key.mjs';\nexport * from './intrinsic.mjs';\nexport * from './lowercase.mjs';\nexport * from './uncapitalize.mjs';\nexport * from './uppercase.mjs';\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Omit } from './omit.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction FromProperties(properties, propertyKeys, options) {\n const result = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(properties))\n result[K2] = Omit(properties[K2], propertyKeys, Clone(options));\n return result;\n}\n// prettier-ignore\nfunction FromMappedResult(mappedResult, propertyKeys, options) {\n return FromProperties(mappedResult.properties, propertyKeys, options);\n}\n// prettier-ignore\nexport function OmitFromMappedResult(mappedResult, propertyKeys, options) {\n const properties = FromMappedResult(mappedResult, propertyKeys, options);\n return MappedResult(properties);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Discard } from '../discard/discard.mjs';\nimport { TransformKind } from '../symbols/symbols.mjs';\nimport { Computed } from '../computed/index.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { IndexPropertyKeys } from '../indexed/index.mjs';\nimport { Intersect } from '../intersect/index.mjs';\nimport { Union } from '../union/index.mjs';\nimport { Object } from '../object/index.mjs';\n// ------------------------------------------------------------------\n// Mapped\n// ------------------------------------------------------------------\nimport { OmitFromMappedKey } from './omit-from-mapped-key.mjs';\nimport { OmitFromMappedResult } from './omit-from-mapped-result.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsMappedKey, IsIntersect, IsUnion, IsObject, IsSchema, IsMappedResult, IsLiteralValue, IsRef } from '../guard/kind.mjs';\nimport { IsArray as IsArrayValue } from '../guard/value.mjs';\n// prettier-ignore\nfunction FromIntersect(types, propertyKeys) {\n return types.map((type) => OmitResolve(type, propertyKeys));\n}\n// prettier-ignore\nfunction FromUnion(types, propertyKeys) {\n return types.map((type) => OmitResolve(type, propertyKeys));\n}\n// ------------------------------------------------------------------\n// FromProperty\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromProperty(properties, key) {\n const { [key]: _, ...R } = properties;\n return R;\n}\n// prettier-ignore\nfunction FromProperties(properties, propertyKeys) {\n return propertyKeys.reduce((T, K2) => FromProperty(T, K2), properties);\n}\n// prettier-ignore\nfunction FromObject(properties, propertyKeys) {\n const options = Discard(properties, [TransformKind, '$id', 'required', 'properties']);\n const omittedProperties = FromProperties(properties['properties'], propertyKeys);\n return Object(omittedProperties, options);\n}\n// prettier-ignore\nfunction UnionFromPropertyKeys(propertyKeys) {\n const result = propertyKeys.reduce((result, key) => IsLiteralValue(key) ? [...result, Literal(key)] : result, []);\n return Union(result);\n}\n// prettier-ignore\nfunction OmitResolve(properties, propertyKeys) {\n return (IsIntersect(properties) ? Intersect(FromIntersect(properties.allOf, propertyKeys)) :\n IsUnion(properties) ? Union(FromUnion(properties.anyOf, propertyKeys)) :\n IsObject(properties) ? FromObject(properties, propertyKeys) :\n Object({}));\n}\n/** `[Json]` Constructs a type whose keys are picked from the given type */\n// prettier-ignore\nexport function Omit(type, key, options) {\n const typeKey = IsArrayValue(key) ? UnionFromPropertyKeys(key) : key;\n const propertyKeys = IsSchema(key) ? IndexPropertyKeys(key) : key;\n const isTypeRef = IsRef(type);\n const isKeyRef = IsRef(key);\n return (IsMappedResult(type) ? OmitFromMappedResult(type, propertyKeys, options) :\n IsMappedKey(key) ? OmitFromMappedKey(type, key, options) :\n (isTypeRef && isKeyRef) ? Computed('Omit', [type, typeKey], options) :\n (!isTypeRef && isKeyRef) ? Computed('Omit', [type, typeKey], options) :\n (isTypeRef && !isKeyRef) ? Computed('Omit', [type, typeKey], options) :\n CreateType({ ...OmitResolve(type, propertyKeys), ...options }));\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Omit } from './omit.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction FromPropertyKey(type, key, options) {\n return { [key]: Omit(type, [key], Clone(options)) };\n}\n// prettier-ignore\nfunction FromPropertyKeys(type, propertyKeys, options) {\n return propertyKeys.reduce((Acc, LK) => {\n return { ...Acc, ...FromPropertyKey(type, LK, options) };\n }, {});\n}\n// prettier-ignore\nfunction FromMappedKey(type, mappedKey, options) {\n return FromPropertyKeys(type, mappedKey.keys, options);\n}\n// prettier-ignore\nexport function OmitFromMappedKey(type, mappedKey, options) {\n const properties = FromMappedKey(type, mappedKey, options);\n return MappedResult(properties);\n}\n","export * from './omit-from-mapped-key.mjs';\nexport * from './omit-from-mapped-result.mjs';\nexport * from './omit.mjs';\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Pick } from './pick.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction FromProperties(properties, propertyKeys, options) {\n const result = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(properties))\n result[K2] = Pick(properties[K2], propertyKeys, Clone(options));\n return result;\n}\n// prettier-ignore\nfunction FromMappedResult(mappedResult, propertyKeys, options) {\n return FromProperties(mappedResult.properties, propertyKeys, options);\n}\n// prettier-ignore\nexport function PickFromMappedResult(mappedResult, propertyKeys, options) {\n const properties = FromMappedResult(mappedResult, propertyKeys, options);\n return MappedResult(properties);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Discard } from '../discard/discard.mjs';\nimport { Computed } from '../computed/index.mjs';\nimport { Intersect } from '../intersect/index.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { Object } from '../object/index.mjs';\nimport { Union } from '../union/index.mjs';\nimport { IndexPropertyKeys } from '../indexed/index.mjs';\nimport { TransformKind } from '../symbols/symbols.mjs';\n// ------------------------------------------------------------------\n// Guards\n// ------------------------------------------------------------------\nimport { IsMappedKey, IsMappedResult, IsIntersect, IsUnion, IsObject, IsSchema, IsLiteralValue, IsRef } from '../guard/kind.mjs';\nimport { IsArray as IsArrayValue } from '../guard/value.mjs';\n// ------------------------------------------------------------------\n// Infrastructure\n// ------------------------------------------------------------------\nimport { PickFromMappedKey } from './pick-from-mapped-key.mjs';\nimport { PickFromMappedResult } from './pick-from-mapped-result.mjs';\nfunction FromIntersect(types, propertyKeys) {\n return types.map((type) => PickResolve(type, propertyKeys));\n}\n// prettier-ignore\nfunction FromUnion(types, propertyKeys) {\n return types.map((type) => PickResolve(type, propertyKeys));\n}\n// prettier-ignore\nfunction FromProperties(properties, propertyKeys) {\n const result = {};\n for (const K2 of propertyKeys)\n if (K2 in properties)\n result[K2] = properties[K2];\n return result;\n}\n// prettier-ignore\nfunction FromObject(T, K) {\n const options = Discard(T, [TransformKind, '$id', 'required', 'properties']);\n const properties = FromProperties(T['properties'], K);\n return Object(properties, options);\n}\n// prettier-ignore\nfunction UnionFromPropertyKeys(propertyKeys) {\n const result = propertyKeys.reduce((result, key) => IsLiteralValue(key) ? [...result, Literal(key)] : result, []);\n return Union(result);\n}\n// prettier-ignore\nfunction PickResolve(properties, propertyKeys) {\n return (IsIntersect(properties) ? Intersect(FromIntersect(properties.allOf, propertyKeys)) :\n IsUnion(properties) ? Union(FromUnion(properties.anyOf, propertyKeys)) :\n IsObject(properties) ? FromObject(properties, propertyKeys) :\n Object({}));\n}\n/** `[Json]` Constructs a type whose keys are picked from the given type */\n// prettier-ignore\nexport function Pick(type, key, options) {\n const typeKey = IsArrayValue(key) ? UnionFromPropertyKeys(key) : key;\n const propertyKeys = IsSchema(key) ? IndexPropertyKeys(key) : key;\n const isTypeRef = IsRef(type);\n const isKeyRef = IsRef(key);\n return (IsMappedResult(type) ? PickFromMappedResult(type, propertyKeys, options) :\n IsMappedKey(key) ? PickFromMappedKey(type, key, options) :\n (isTypeRef && isKeyRef) ? Computed('Pick', [type, typeKey], options) :\n (!isTypeRef && isKeyRef) ? Computed('Pick', [type, typeKey], options) :\n (isTypeRef && !isKeyRef) ? Computed('Pick', [type, typeKey], options) :\n CreateType({ ...PickResolve(type, propertyKeys), ...options }));\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Pick } from './pick.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction FromPropertyKey(type, key, options) {\n return {\n [key]: Pick(type, [key], Clone(options))\n };\n}\n// prettier-ignore\nfunction FromPropertyKeys(type, propertyKeys, options) {\n return propertyKeys.reduce((result, leftKey) => {\n return { ...result, ...FromPropertyKey(type, leftKey, options) };\n }, {});\n}\n// prettier-ignore\nfunction FromMappedKey(type, mappedKey, options) {\n return FromPropertyKeys(type, mappedKey.keys, options);\n}\n// prettier-ignore\nexport function PickFromMappedKey(type, mappedKey, options) {\n const properties = FromMappedKey(type, mappedKey, options);\n return MappedResult(properties);\n}\n","export * from './pick-from-mapped-key.mjs';\nexport * from './pick-from-mapped-result.mjs';\nexport * from './pick.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Computed } from '../computed/index.mjs';\nimport { Optional } from '../optional/index.mjs';\nimport { Object } from '../object/index.mjs';\nimport { Intersect } from '../intersect/index.mjs';\nimport { Union } from '../union/index.mjs';\nimport { Ref } from '../ref/index.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { TransformKind } from '../symbols/index.mjs';\nimport { PartialFromMappedResult } from './partial-from-mapped-result.mjs';\n// ------------------------------------------------------------------\n// KindGuard\n// ------------------------------------------------------------------\nimport * as KindGuard from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromComputed(target, parameters) {\n return Computed('Partial', [Computed(target, parameters)]);\n}\n// prettier-ignore\nfunction FromRef($ref) {\n return Computed('Partial', [Ref($ref)]);\n}\n// prettier-ignore\nfunction FromProperties(properties) {\n const partialProperties = {};\n for (const K of globalThis.Object.getOwnPropertyNames(properties))\n partialProperties[K] = Optional(properties[K]);\n return partialProperties;\n}\n// prettier-ignore\nfunction FromObject(type) {\n const options = Discard(type, [TransformKind, '$id', 'required', 'properties']);\n const properties = FromProperties(type['properties']);\n return Object(properties, options);\n}\n// prettier-ignore\nfunction FromRest(types) {\n return types.map(type => PartialResolve(type));\n}\n// ------------------------------------------------------------------\n// PartialResolve\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction PartialResolve(type) {\n return (\n // Mappable\n KindGuard.IsComputed(type) ? FromComputed(type.target, type.parameters) :\n KindGuard.IsRef(type) ? FromRef(type.$ref) :\n KindGuard.IsIntersect(type) ? Intersect(FromRest(type.allOf)) :\n KindGuard.IsUnion(type) ? Union(FromRest(type.anyOf)) :\n KindGuard.IsObject(type) ? FromObject(type) :\n // Intrinsic\n KindGuard.IsBigInt(type) ? type :\n KindGuard.IsBoolean(type) ? type :\n KindGuard.IsInteger(type) ? type :\n KindGuard.IsLiteral(type) ? type :\n KindGuard.IsNull(type) ? type :\n KindGuard.IsNumber(type) ? type :\n KindGuard.IsString(type) ? type :\n KindGuard.IsSymbol(type) ? type :\n KindGuard.IsUndefined(type) ? type :\n // Passthrough\n Object({}));\n}\n/** `[Json]` Constructs a type where all properties are optional */\nexport function Partial(type, options) {\n if (KindGuard.IsMappedResult(type)) {\n return PartialFromMappedResult(type, options);\n }\n else {\n // special: mapping types require overridable options\n return CreateType({ ...PartialResolve(type), ...options });\n }\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Partial } from './partial.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction FromProperties(K, options) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(K))\n Acc[K2] = Partial(K[K2], Clone(options));\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(R, options) {\n return FromProperties(R.properties, options);\n}\n// prettier-ignore\nexport function PartialFromMappedResult(R, options) {\n const P = FromMappedResult(R, options);\n return MappedResult(P);\n}\n","export * from './partial-from-mapped-result.mjs';\nexport * from './partial.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Computed } from '../computed/index.mjs';\nimport { Object } from '../object/index.mjs';\nimport { Intersect } from '../intersect/index.mjs';\nimport { Union } from '../union/index.mjs';\nimport { Ref } from '../ref/index.mjs';\nimport { OptionalKind, TransformKind } from '../symbols/index.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { RequiredFromMappedResult } from './required-from-mapped-result.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport * as KindGuard from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromComputed(target, parameters) {\n return Computed('Required', [Computed(target, parameters)]);\n}\n// prettier-ignore\nfunction FromRef($ref) {\n return Computed('Required', [Ref($ref)]);\n}\n// prettier-ignore\nfunction FromProperties(properties) {\n const requiredProperties = {};\n for (const K of globalThis.Object.getOwnPropertyNames(properties))\n requiredProperties[K] = Discard(properties[K], [OptionalKind]);\n return requiredProperties;\n}\n// prettier-ignore\nfunction FromObject(type) {\n const options = Discard(type, [TransformKind, '$id', 'required', 'properties']);\n const properties = FromProperties(type['properties']);\n return Object(properties, options);\n}\n// prettier-ignore\nfunction FromRest(types) {\n return types.map(type => RequiredResolve(type));\n}\n// ------------------------------------------------------------------\n// RequiredResolve\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction RequiredResolve(type) {\n return (\n // Mappable\n KindGuard.IsComputed(type) ? FromComputed(type.target, type.parameters) :\n KindGuard.IsRef(type) ? FromRef(type.$ref) :\n KindGuard.IsIntersect(type) ? Intersect(FromRest(type.allOf)) :\n KindGuard.IsUnion(type) ? Union(FromRest(type.anyOf)) :\n KindGuard.IsObject(type) ? FromObject(type) :\n // Intrinsic\n KindGuard.IsBigInt(type) ? type :\n KindGuard.IsBoolean(type) ? type :\n KindGuard.IsInteger(type) ? type :\n KindGuard.IsLiteral(type) ? type :\n KindGuard.IsNull(type) ? type :\n KindGuard.IsNumber(type) ? type :\n KindGuard.IsString(type) ? type :\n KindGuard.IsSymbol(type) ? type :\n KindGuard.IsUndefined(type) ? type :\n // Passthrough\n Object({}));\n}\n/** `[Json]` Constructs a type where all properties are required */\nexport function Required(type, options) {\n if (KindGuard.IsMappedResult(type)) {\n return RequiredFromMappedResult(type, options);\n }\n else {\n // special: mapping types require overridable options\n return CreateType({ ...RequiredResolve(type), ...options });\n }\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Required } from './required.mjs';\n// prettier-ignore\nfunction FromProperties(P, options) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(P))\n Acc[K2] = Required(P[K2], options);\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(R, options) {\n return FromProperties(R.properties, options);\n}\n// prettier-ignore\nexport function RequiredFromMappedResult(R, options) {\n const P = FromMappedResult(R, options);\n return MappedResult(P);\n}\n","export * from './required-from-mapped-result.mjs';\nexport * from './required.mjs';\n","import { CreateType } from '../create/index.mjs';\nimport { CloneType } from '../clone/index.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { Array } from '../array/index.mjs';\nimport { Awaited } from '../awaited/index.mjs';\nimport { AsyncIterator } from '../async-iterator/index.mjs';\nimport { Constructor } from '../constructor/index.mjs';\nimport { Index } from '../indexed/index.mjs';\nimport { Function as FunctionType } from '../function/index.mjs';\nimport { Intersect } from '../intersect/index.mjs';\nimport { Iterator } from '../iterator/index.mjs';\nimport { KeyOf } from '../keyof/index.mjs';\nimport { Object } from '../object/index.mjs';\nimport { Omit } from '../omit/index.mjs';\nimport { Pick } from '../pick/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport { Partial } from '../partial/index.mjs';\nimport { RecordValue, RecordPattern } from '../record/index.mjs';\nimport { Required } from '../required/index.mjs';\nimport { Tuple } from '../tuple/index.mjs';\nimport { Union } from '../union/index.mjs';\n// ------------------------------------------------------------------\n// Symbols\n// ------------------------------------------------------------------\nimport { TransformKind, OptionalKind, ReadonlyKind } from '../symbols/index.mjs';\n// ------------------------------------------------------------------\n// KindGuard\n// ------------------------------------------------------------------\nimport * as KindGuard from '../guard/kind.mjs';\n// prettier-ignore\nfunction DereferenceParameters(moduleProperties, types) {\n return types.map((type) => {\n return KindGuard.IsRef(type)\n ? Dereference(moduleProperties, type.$ref)\n : FromType(moduleProperties, type);\n });\n}\n// prettier-ignore\nfunction Dereference(moduleProperties, ref) {\n return (ref in moduleProperties\n ? KindGuard.IsRef(moduleProperties[ref])\n ? Dereference(moduleProperties, moduleProperties[ref].$ref)\n : FromType(moduleProperties, moduleProperties[ref])\n : Never());\n}\n// prettier-ignore\nfunction FromAwaited(parameters) {\n return Awaited(parameters[0]);\n}\n// prettier-ignore\nfunction FromIndex(parameters) {\n return Index(parameters[0], parameters[1]);\n}\n// prettier-ignore\nfunction FromKeyOf(parameters) {\n return KeyOf(parameters[0]);\n}\n// prettier-ignore\nfunction FromPartial(parameters) {\n return Partial(parameters[0]);\n}\n// prettier-ignore\nfunction FromOmit(parameters) {\n return Omit(parameters[0], parameters[1]);\n}\n// prettier-ignore\nfunction FromPick(parameters) {\n return Pick(parameters[0], parameters[1]);\n}\n// prettier-ignore\nfunction FromRequired(parameters) {\n return Required(parameters[0]);\n}\n// prettier-ignore\nfunction FromComputed(moduleProperties, target, parameters) {\n const dereferenced = DereferenceParameters(moduleProperties, parameters);\n return (target === 'Awaited' ? FromAwaited(dereferenced) :\n target === 'Index' ? FromIndex(dereferenced) :\n target === 'KeyOf' ? FromKeyOf(dereferenced) :\n target === 'Partial' ? FromPartial(dereferenced) :\n target === 'Omit' ? FromOmit(dereferenced) :\n target === 'Pick' ? FromPick(dereferenced) :\n target === 'Required' ? FromRequired(dereferenced) :\n Never());\n}\nfunction FromArray(moduleProperties, type) {\n return Array(FromType(moduleProperties, type));\n}\nfunction FromAsyncIterator(moduleProperties, type) {\n return AsyncIterator(FromType(moduleProperties, type));\n}\n// prettier-ignore\nfunction FromConstructor(moduleProperties, parameters, instanceType) {\n return Constructor(FromTypes(moduleProperties, parameters), FromType(moduleProperties, instanceType));\n}\n// prettier-ignore\nfunction FromFunction(moduleProperties, parameters, returnType) {\n return FunctionType(FromTypes(moduleProperties, parameters), FromType(moduleProperties, returnType));\n}\nfunction FromIntersect(moduleProperties, types) {\n return Intersect(FromTypes(moduleProperties, types));\n}\nfunction FromIterator(moduleProperties, type) {\n return Iterator(FromType(moduleProperties, type));\n}\nfunction FromObject(moduleProperties, properties) {\n return Object(globalThis.Object.keys(properties).reduce((result, key) => {\n return { ...result, [key]: FromType(moduleProperties, properties[key]) };\n }, {}));\n}\n// prettier-ignore\nfunction FromRecord(moduleProperties, type) {\n const [value, pattern] = [FromType(moduleProperties, RecordValue(type)), RecordPattern(type)];\n const result = CloneType(type);\n result.patternProperties[pattern] = value;\n return result;\n}\n// prettier-ignore\nfunction FromTransform(moduleProperties, transform) {\n return (KindGuard.IsRef(transform))\n ? { ...Dereference(moduleProperties, transform.$ref), [TransformKind]: transform[TransformKind] }\n : transform;\n}\nfunction FromTuple(moduleProperties, types) {\n return Tuple(FromTypes(moduleProperties, types));\n}\nfunction FromUnion(moduleProperties, types) {\n return Union(FromTypes(moduleProperties, types));\n}\nfunction FromTypes(moduleProperties, types) {\n return types.map((type) => FromType(moduleProperties, type));\n}\n// prettier-ignore\nexport function FromType(moduleProperties, type) {\n return (\n // Modifiers\n KindGuard.IsOptional(type) ? CreateType(FromType(moduleProperties, Discard(type, [OptionalKind])), type) :\n KindGuard.IsReadonly(type) ? CreateType(FromType(moduleProperties, Discard(type, [ReadonlyKind])), type) :\n // Transform\n KindGuard.IsTransform(type) ? CreateType(FromTransform(moduleProperties, type), type) :\n // Types\n KindGuard.IsArray(type) ? CreateType(FromArray(moduleProperties, type.items), type) :\n KindGuard.IsAsyncIterator(type) ? CreateType(FromAsyncIterator(moduleProperties, type.items), type) :\n KindGuard.IsComputed(type) ? CreateType(FromComputed(moduleProperties, type.target, type.parameters)) :\n KindGuard.IsConstructor(type) ? CreateType(FromConstructor(moduleProperties, type.parameters, type.returns), type) :\n KindGuard.IsFunction(type) ? CreateType(FromFunction(moduleProperties, type.parameters, type.returns), type) :\n KindGuard.IsIntersect(type) ? CreateType(FromIntersect(moduleProperties, type.allOf), type) :\n KindGuard.IsIterator(type) ? CreateType(FromIterator(moduleProperties, type.items), type) :\n KindGuard.IsObject(type) ? CreateType(FromObject(moduleProperties, type.properties), type) :\n KindGuard.IsRecord(type) ? CreateType(FromRecord(moduleProperties, type)) :\n KindGuard.IsTuple(type) ? CreateType(FromTuple(moduleProperties, type.items || []), type) :\n KindGuard.IsUnion(type) ? CreateType(FromUnion(moduleProperties, type.anyOf), type) :\n type);\n}\n// prettier-ignore\nexport function ComputeType(moduleProperties, key) {\n return (key in moduleProperties\n ? FromType(moduleProperties, moduleProperties[key])\n : Never());\n}\n// prettier-ignore\nexport function ComputeModuleProperties(moduleProperties) {\n return globalThis.Object.getOwnPropertyNames(moduleProperties).reduce((result, key) => {\n return { ...result, [key]: ComputeType(moduleProperties, key) };\n }, {});\n}\n","import { CreateType } from '../create/index.mjs';\nimport { Kind } from '../symbols/index.mjs';\n// ------------------------------------------------------------------\n// Module Infrastructure Types\n// ------------------------------------------------------------------\nimport { ComputeModuleProperties } from './compute.mjs';\n// ------------------------------------------------------------------\n// Module\n// ------------------------------------------------------------------\n// prettier-ignore\nexport class TModule {\n constructor($defs) {\n const computed = ComputeModuleProperties($defs);\n const identified = this.WithIdentifiers(computed);\n this.$defs = identified;\n }\n /** `[Json]` Imports a Type by Key. */\n Import(key, options) {\n const $defs = { ...this.$defs, [key]: CreateType(this.$defs[key], options) };\n return CreateType({ [Kind]: 'Import', $defs, $ref: key });\n }\n // prettier-ignore\n WithIdentifiers($defs) {\n return globalThis.Object.getOwnPropertyNames($defs).reduce((result, key) => {\n return { ...result, [key]: { ...$defs[key], $id: key } };\n }, {});\n }\n}\n/** `[Json]` Creates a Type Definition Module. */\nexport function Module(properties) {\n return new TModule(properties);\n}\n","export * from './module.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Not type */\nexport function Not(type, options) {\n return CreateType({ [Kind]: 'Not', not: type }, options);\n}\n","export * from './not.mjs';\n","import { Tuple } from '../tuple/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport * as KindGuard from '../guard/kind.mjs';\n/** `[JavaScript]` Extracts the Parameters from the given Function type */\nexport function Parameters(schema, options) {\n return (KindGuard.IsFunction(schema) ? Tuple(schema.parameters, options) : Never());\n}\n","export * from './parameters.mjs';\n","import { CloneType } from '../clone/type.mjs';\nimport { CreateType } from '../create/type.mjs';\nimport { IsUndefined } from '../guard/value.mjs';\nimport { Kind, Hint } from '../symbols/index.mjs';\n// Auto Tracked For Recursive Types without ID's\nlet Ordinal = 0;\n/** `[Json]` Creates a Recursive type */\nexport function Recursive(callback, options = {}) {\n if (IsUndefined(options.$id))\n options.$id = `T${Ordinal++}`;\n const thisType = CloneType(callback({ [Kind]: 'This', $ref: `${options.$id}` }));\n thisType.$id = options.$id;\n // prettier-ignore\n return CreateType({ [Hint]: 'Recursive', ...thisType }, options);\n}\n","export * from './recursive.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { IsString } from '../guard/value.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a RegExp type */\nexport function RegExp(unresolved, options) {\n const expr = IsString(unresolved) ? new globalThis.RegExp(unresolved) : unresolved;\n return CreateType({ [Kind]: 'RegExp', type: 'RegExp', source: expr.source, flags: expr.flags }, options);\n}\n","export * from './regexp.mjs';\n","// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsIntersect, IsUnion, IsTuple } from '../guard/kind.mjs';\n// prettier-ignore\nfunction RestResolve(T) {\n return (IsIntersect(T) ? T.allOf :\n IsUnion(T) ? T.anyOf :\n IsTuple(T) ? T.items ?? [] :\n []);\n}\n/** `[Json]` Extracts interior Rest elements from Tuple, Intersect and Union types */\nexport function Rest(T) {\n return RestResolve(T);\n}\n","export * from './rest.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Never } from '../never/index.mjs';\nimport * as KindGuard from '../guard/kind.mjs';\n/** `[JavaScript]` Extracts the ReturnType from the given Function type */\nexport function ReturnType(schema, options) {\n return (KindGuard.IsFunction(schema) ? CreateType(schema.returns, options) : Never(options));\n}\n","export * from './return-type.mjs';\n","export {};\n","import { Kind, Hint, ReadonlyKind, OptionalKind } from '../symbols/index.mjs';\n","export * from './anyschema.mjs';\nexport * from './schema.mjs';\n","export {};\n","export * from './static.mjs';\n","import { TransformKind } from '../symbols/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsTransform } from '../guard/kind.mjs';\n// ------------------------------------------------------------------\n// TransformBuilders\n// ------------------------------------------------------------------\nexport class TransformDecodeBuilder {\n constructor(schema) {\n this.schema = schema;\n }\n Decode(decode) {\n return new TransformEncodeBuilder(this.schema, decode);\n }\n}\n// prettier-ignore\nexport class TransformEncodeBuilder {\n constructor(schema, decode) {\n this.schema = schema;\n this.decode = decode;\n }\n EncodeTransform(encode, schema) {\n const Encode = (value) => schema[TransformKind].Encode(encode(value));\n const Decode = (value) => this.decode(schema[TransformKind].Decode(value));\n const Codec = { Encode: Encode, Decode: Decode };\n return { ...schema, [TransformKind]: Codec };\n }\n EncodeSchema(encode, schema) {\n const Codec = { Decode: this.decode, Encode: encode };\n return { ...schema, [TransformKind]: Codec };\n }\n Encode(encode) {\n return (IsTransform(this.schema) ? this.EncodeTransform(encode, this.schema) : this.EncodeSchema(encode, this.schema));\n }\n}\n/** `[Json]` Creates a Transform type */\nexport function Transform(schema) {\n return new TransformDecodeBuilder(schema);\n}\n","export * from './transform.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Unsafe type that will infers as the generic argument T */\nexport function Unsafe(options = {}) {\n return CreateType({ [Kind]: options[Kind] ?? 'Unsafe' }, options);\n}\n","export * from './unsafe.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Void type */\nexport function Void(options) {\n return CreateType({ [Kind]: 'Void', type: 'void' }, options);\n}\n","export * from './void.mjs';\n","// ------------------------------------------------------------------\n// Type: Module\n// ------------------------------------------------------------------\nexport { Any } from '../any/index.mjs';\nexport { Argument } from '../argument/index.mjs';\nexport { Array } from '../array/index.mjs';\nexport { AsyncIterator } from '../async-iterator/index.mjs';\nexport { Awaited } from '../awaited/index.mjs';\nexport { BigInt } from '../bigint/index.mjs';\nexport { Boolean } from '../boolean/index.mjs';\nexport { Composite } from '../composite/index.mjs';\nexport { Const } from '../const/index.mjs';\nexport { Constructor } from '../constructor/index.mjs';\nexport { ConstructorParameters } from '../constructor-parameters/index.mjs';\nexport { Date } from '../date/index.mjs';\nexport { Enum } from '../enum/index.mjs';\nexport { Exclude } from '../exclude/index.mjs';\nexport { Extends } from '../extends/index.mjs';\nexport { Extract } from '../extract/index.mjs';\nexport { Function } from '../function/index.mjs';\nexport { Index } from '../indexed/index.mjs';\nexport { InstanceType } from '../instance-type/index.mjs';\nexport { Instantiate } from '../instantiate/index.mjs';\nexport { Integer } from '../integer/index.mjs';\nexport { Intersect } from '../intersect/index.mjs';\nexport { Capitalize, Uncapitalize, Lowercase, Uppercase } from '../intrinsic/index.mjs';\nexport { Iterator } from '../iterator/index.mjs';\nexport { KeyOf } from '../keyof/index.mjs';\nexport { Literal } from '../literal/index.mjs';\nexport { Mapped } from '../mapped/index.mjs';\nexport { Module } from '../module/index.mjs';\nexport { Never } from '../never/index.mjs';\nexport { Not } from '../not/index.mjs';\nexport { Null } from '../null/index.mjs';\nexport { Number } from '../number/index.mjs';\nexport { Object } from '../object/index.mjs';\nexport { Omit } from '../omit/index.mjs';\nexport { Optional } from '../optional/index.mjs';\nexport { Parameters } from '../parameters/index.mjs';\nexport { Partial } from '../partial/index.mjs';\nexport { Pick } from '../pick/index.mjs';\nexport { Promise } from '../promise/index.mjs';\nexport { Readonly } from '../readonly/index.mjs';\nexport { ReadonlyOptional } from '../readonly-optional/index.mjs';\nexport { Record } from '../record/index.mjs';\nexport { Recursive } from '../recursive/index.mjs';\nexport { Ref } from '../ref/index.mjs';\nexport { RegExp } from '../regexp/index.mjs';\nexport { Required } from '../required/index.mjs';\nexport { Rest } from '../rest/index.mjs';\nexport { ReturnType } from '../return-type/index.mjs';\nexport { String } from '../string/index.mjs';\nexport { Symbol } from '../symbol/index.mjs';\nexport { TemplateLiteral } from '../template-literal/index.mjs';\nexport { Transform } from '../transform/index.mjs';\nexport { Tuple } from '../tuple/index.mjs';\nexport { Uint8Array } from '../uint8array/index.mjs';\nexport { Undefined } from '../undefined/index.mjs';\nexport { Union } from '../union/index.mjs';\nexport { Unknown } from '../unknown/index.mjs';\nexport { Unsafe } from '../unsafe/index.mjs';\nexport { Void } from '../void/index.mjs';\n","// ------------------------------------------------------------------\n// JsonTypeBuilder\n// ------------------------------------------------------------------\nexport { JsonTypeBuilder } from './json.mjs';\n// ------------------------------------------------------------------\n// JavaScriptTypeBuilder\n// ------------------------------------------------------------------\nimport * as TypeBuilder from './type.mjs';\nimport { JavaScriptTypeBuilder } from './javascript.mjs';\n/** JavaScript Type Builder with Static Resolution for TypeScript */\nconst Type = TypeBuilder;\nexport { JavaScriptTypeBuilder };\nexport { Type };\n","// ------------------------------------------------------------------\n// Infrastructure\n// ------------------------------------------------------------------\nexport * from './type/clone/index.mjs';\nexport * from './type/create/index.mjs';\nexport * from './type/error/index.mjs';\nexport * from './type/guard/index.mjs';\nexport * from './type/helpers/index.mjs';\nexport * from './type/patterns/index.mjs';\nexport * from './type/registry/index.mjs';\nexport * from './type/sets/index.mjs';\nexport * from './type/symbols/index.mjs';\n// ------------------------------------------------------------------\n// Types\n// ------------------------------------------------------------------\nexport * from './type/any/index.mjs';\nexport * from './type/array/index.mjs';\nexport * from './type/argument/index.mjs';\nexport * from './type/async-iterator/index.mjs';\nexport * from './type/awaited/index.mjs';\nexport * from './type/bigint/index.mjs';\nexport * from './type/boolean/index.mjs';\nexport * from './type/composite/index.mjs';\nexport * from './type/const/index.mjs';\nexport * from './type/constructor/index.mjs';\nexport * from './type/constructor-parameters/index.mjs';\nexport * from './type/date/index.mjs';\nexport * from './type/enum/index.mjs';\nexport * from './type/exclude/index.mjs';\nexport * from './type/extends/index.mjs';\nexport * from './type/extract/index.mjs';\nexport * from './type/function/index.mjs';\nexport * from './type/indexed/index.mjs';\nexport * from './type/instance-type/index.mjs';\nexport * from './type/instantiate/index.mjs';\nexport * from './type/integer/index.mjs';\nexport * from './type/intersect/index.mjs';\nexport * from './type/iterator/index.mjs';\nexport * from './type/intrinsic/index.mjs';\nexport * from './type/keyof/index.mjs';\nexport * from './type/literal/index.mjs';\nexport * from './type/module/index.mjs';\nexport * from './type/mapped/index.mjs';\nexport * from './type/never/index.mjs';\nexport * from './type/not/index.mjs';\nexport * from './type/null/index.mjs';\nexport * from './type/number/index.mjs';\nexport * from './type/object/index.mjs';\nexport * from './type/omit/index.mjs';\nexport * from './type/optional/index.mjs';\nexport * from './type/parameters/index.mjs';\nexport * from './type/partial/index.mjs';\nexport * from './type/pick/index.mjs';\nexport * from './type/promise/index.mjs';\nexport * from './type/readonly/index.mjs';\nexport * from './type/readonly-optional/index.mjs';\nexport * from './type/record/index.mjs';\nexport * from './type/recursive/index.mjs';\nexport * from './type/ref/index.mjs';\nexport * from './type/regexp/index.mjs';\nexport * from './type/required/index.mjs';\nexport * from './type/rest/index.mjs';\nexport * from './type/return-type/index.mjs';\nexport * from './type/schema/index.mjs';\nexport * from './type/static/index.mjs';\nexport * from './type/string/index.mjs';\nexport * from './type/symbol/index.mjs';\nexport * from './type/template-literal/index.mjs';\nexport * from './type/transform/index.mjs';\nexport * from './type/tuple/index.mjs';\nexport * from './type/uint8array/index.mjs';\nexport * from './type/undefined/index.mjs';\nexport * from './type/union/index.mjs';\nexport * from './type/unknown/index.mjs';\nexport * from './type/unsafe/index.mjs';\nexport * from './type/void/index.mjs';\n// ------------------------------------------------------------------\n// Type.*\n// ------------------------------------------------------------------\nexport * from './type/type/index.mjs';\n","/**\n * TypeBox Schemas - Single Source of Truth\n *\n * All validation schemas, types, and runtime constants are defined here.\n * Other modules import from this file to ensure consistency.\n */\n\nimport { Type, Static } from \"@sinclair/typebox\";\nimport { EMAIL_PATTERN, PHONE_PATTERN } from \"@spfn/auth\";\n\n// ============================================================================\n// Basic Schemas\n// ============================================================================\n\nexport const EmailSchema = Type.String({\n pattern: EMAIL_PATTERN,\n description: 'Email address'\n});\n\nexport const PhoneSchema = Type.String({\n pattern: PHONE_PATTERN,\n description: 'Phone number in E.164 format (e.g., +821012345678)'\n});\n\nexport const PasswordSchema = Type.String({\n minLength: 8,\n description: 'User password (minimum 8 characters)'\n});\n\n// ============================================================================\n// Verification Target Type\n// ============================================================================\n\nexport const TargetTypeSchema = Type.Union([\n Type.Literal('email'),\n Type.Literal('phone')\n], {\n description: 'Type of target (email or phone)'\n});\n\nexport type VerificationTargetType = Static<typeof TargetTypeSchema>;\n\nexport const VERIFICATION_TARGET_TYPES = ['email', 'phone'] as const;\n\n// ============================================================================\n// Verification Purpose\n// ============================================================================\n\nexport const VerificationPurposeSchema = Type.Union([\n Type.Literal('registration'),\n Type.Literal('login'),\n Type.Literal('password_reset'),\n Type.Literal('email_change'),\n Type.Literal('phone_change')\n], {\n description: 'Purpose of verification'\n});\n\nexport type VerificationPurpose = Static<typeof VerificationPurposeSchema>;\n\nexport const VERIFICATION_PURPOSES = ['registration', 'login', 'password_reset', 'email_change', 'phone_change'] as const;","/**\n * @spfn/auth - Shared Types\n *\n * Common types and constants used across the auth package\n */\n\n/**\n * Supported JWT signature algorithms\n *\n * - ES256: ECDSA with P-256 and SHA-256 (recommended, smaller keys)\n * - RS256: RSA with SHA-256 (fallback, larger keys)\n */\nexport const KEY_ALGORITHM = ['ES256', 'RS256'] as const;\n\n/**\n * Key algorithm type derived from the const array\n */\nexport type KeyAlgorithmType = typeof KEY_ALGORITHM[number];\n\n/**\n * Invitation status enum values\n * Single source of truth for all invitation statuses\n */\nexport const INVITATION_STATUSES = ['pending', 'accepted', 'expired', 'cancelled'] as const;\n\n/**\n * Invitation status type derived from the const array\n */\nexport type InvitationStatus = typeof INVITATION_STATUSES[number];\n\n\n/**\n * User status enum values\n * Single source of truth for all user statuses\n */\nexport const USER_STATUSES = ['active', 'inactive', 'suspended'] as const;\n\n/**\n * User status type derived from the const array\n */\nexport type UserStatus = typeof USER_STATUSES[number];\n\n/**\n * Social provider enum values\n * Single source of truth for supported OAuth providers\n */\nexport const SOCIAL_PROVIDERS = ['google', 'github', 'kakao', 'naver'] as const;\n\n/**\n * Social provider type derived from the const array\n */\nexport type SocialProvider = typeof SOCIAL_PROVIDERS[number];","/**\n * @spfn/auth - Database Schema Definition\n *\n * Defines the 'spfn_auth' PostgreSQL schema for all auth-related tables\n */\n\nimport { createSchema } from '@spfn/core/db';\n\n/**\n * Auth schema for all authentication and authorization tables\n * Tables: users, roles, permissions, user_invitations, etc.\n */\nexport const authSchema = createSchema('@spfn/auth');","/**\n * @spfn/auth - Roles Entity\n *\n * Role-based access control (RBAC) roles table\n *\n * Features:\n * - Built-in roles (user, admin, superadmin) - cannot be deleted\n * - System roles (preset roles) - can be deactivated\n * - Custom roles (runtime created) - fully manageable\n * - Priority-based hierarchy\n */\n\nimport { text, boolean, integer, index } from 'drizzle-orm/pg-core';\nimport { id, timestamps } from '@spfn/core/db';\nimport { authSchema } from './schema';\n\nexport const roles = authSchema.table('roles',\n {\n // Primary key\n id: id(),\n\n // Role identifier (used in code, e.g., 'admin', 'editor')\n // Must be unique, lowercase, kebab-case recommended\n name: text('name').notNull().unique(),\n\n // Display name for UI (e.g., 'Administrator', 'Content Editor')\n displayName: text('display_name').notNull(),\n\n // Role description\n description: text('description'),\n\n // Built-in role flag\n // true: Core package roles (user, admin, superadmin) - cannot be deleted\n // false: Custom or preset roles - can be deleted\n isBuiltin: boolean('is_builtin').notNull().default(false),\n\n // System role flag\n // true: Defined in code (builtin or preset) - deletion restricted\n // false: Runtime created custom role - fully manageable\n isSystem: boolean('is_system').notNull().default(false),\n\n // Active status\n // false: Deactivated role (users cannot be assigned)\n isActive: boolean('is_active').notNull().default(true),\n\n // Priority level (higher = more privileged)\n // superadmin: 100, admin: 80, user: 10\n // Used for role hierarchy and conflict resolution\n priority: integer('priority').notNull().default(10),\n\n ...timestamps(),\n },\n (table) => [\n index('roles_name_idx').on(table.name),\n index('roles_is_system_idx').on(table.isSystem),\n index('roles_is_active_idx').on(table.isActive),\n index('roles_is_builtin_idx').on(table.isBuiltin),\n index('roles_priority_idx').on(table.priority),\n ]\n);\n\n// Type exports\nexport type RoleEntity = typeof roles.$inferSelect;\nexport type NewRoleEntity = typeof roles.$inferInsert;\n\n// Legacy alias for backward compatibility\nexport type Role = RoleEntity;\nexport type NewRole = NewRoleEntity;","/**\n * @spfn/auth - Users Entity\n *\n * Main user table supporting multiple authentication methods\n *\n * Features:\n * - Email or phone-based registration\n * - Password authentication (bcrypt)\n * - OAuth support (nullable passwordHash)\n * - Role-based access control (RBAC)\n * - Account status management\n * - Email/phone verification\n */\n\nimport { USER_STATUSES } from \"../types\";\nimport { text, check, boolean, index } from 'drizzle-orm/pg-core';\nimport { id, timestamps, enumText, utcTimestamp, foreignKey } from '@spfn/core/db';\nimport { sql } from 'drizzle-orm';\nimport { roles } from './roles';\nimport { authSchema } from './schema';\n\nexport const users = authSchema.table('users',\n {\n // Identity\n id: id(),\n\n // Email address (unique identifier)\n // Used for: login, password reset, notifications\n email: text('email').unique(),\n\n // Phone number in E.164 international format\n // Format: +[country code][number] (e.g., +821012345678)\n // Used for: SMS login, 2FA, notifications\n phone: text('phone').unique(),\n\n // Authentication\n // Bcrypt password hash ($2b$10$[salt][hash], 60 chars)\n // Nullable to support OAuth-only accounts\n passwordHash: text('password_hash'),\n\n // Force password change on next login\n // Use cases: initial setup, security breach, policy violation\n passwordChangeRequired: boolean('password_change_required').notNull().default(false),\n\n // Authorization (Role-Based Access Control)\n // Foreign key to roles table\n // References built-in roles: user (default), admin, superadmin\n // Can also reference custom roles created at runtime\n roleId: foreignKey('role', () => roles.id),\n\n // Account status\n // - active: Normal operation (default)\n // - inactive: Deactivated (user request, dormant)\n // - suspended: Locked (security incident, ToS violation)\n status: enumText('status', USER_STATUSES).default('active').notNull(),\n\n // Verification timestamps\n // null = unverified, timestamp = verified at this time\n // Email verification (via verification code or magic link)\n emailVerifiedAt: utcTimestamp('email_verified_at'),\n\n // Phone verification (via SMS OTP)\n phoneVerifiedAt: utcTimestamp('phone_verified_at'),\n\n // Metadata\n // Last successful login timestamp\n // Used for: security auditing, dormant account detection\n lastLoginAt: utcTimestamp('last_login_at'),\n\n ...timestamps(),\n },\n (table) => [\n // Database constraints\n // Ensure at least one identifier exists (email OR phone)\n check(\n 'email_or_phone_check',\n sql`${table.email} IS NOT NULL OR ${table.phone} IS NOT NULL`\n ),\n\n // Indexes for query optimization\n index('users_email_idx').on(table.email),\n index('users_phone_idx').on(table.phone),\n index('users_status_idx').on(table.status),\n index('users_role_id_idx').on(table.roleId),\n ]\n);\n\n// Type exports\nexport type User = typeof users.$inferSelect;\nexport type NewUser = typeof users.$inferInsert;","/**\n * @spfn/auth - User Profiles Entity\n *\n * User profile information (separate from authentication data)\n *\n * Features:\n * - Display name and personal information\n * - Avatar and bio\n * - Locale and timezone preferences\n * - Optional demographic data\n * - Social links and professional info\n */\n\nimport { text, index } from 'drizzle-orm/pg-core';\nimport { id, timestamps, typedJsonb, foreignKey } from '@spfn/core/db';\nimport { users } from './users';\nimport { authSchema } from './schema';\n\nexport const userProfiles = authSchema.table('user_profiles',\n {\n // Identity\n id: id(),\n\n // Foreign key to users table\n userId: foreignKey('user', () => users.id).unique(),\n\n // Display Information\n // Display name shown in UI (required)\n displayName: text('display_name').notNull(),\n\n // First name (optional)\n firstName: text('first_name'),\n\n // Last name (optional)\n lastName: text('last_name'),\n\n // Profile Media\n // Avatar/profile picture URL\n avatarUrl: text('avatar_url'),\n\n // Short bio/description (max 500 chars recommended)\n bio: text('bio'),\n\n // Preferences\n // Locale/language preference (e.g., 'en', 'ko', 'ja')\n locale: text('locale').default('en'),\n\n // Timezone (e.g., 'Asia/Seoul', 'America/New_York')\n timezone: text('timezone').default('UTC'),\n\n // Optional Information\n // Date of birth (YYYY-MM-DD format)\n dateOfBirth: text('date_of_birth'),\n\n // Gender (flexible text field)\n gender: text('gender'),\n\n // Personal Links\n // Personal or professional website\n website: text('website'),\n\n // Location (city, country, etc.)\n location: text('location'),\n\n // Professional Information\n // Company name\n company: text('company'),\n\n // Job title\n jobTitle: text('job_title'),\n\n // Additional metadata (JSONB)\n // Use cases:\n // - Custom fields: { department: 'Engineering', employeeId: 'E1234', team: 'Backend' }\n // - Social links: { twitter: '@user', linkedin: 'linkedin.com/in/user', github: 'username' }\n // - UI preferences: { theme: 'dark', sidebarCollapsed: true, notificationSound: false }\n // - Integration data: { slackId: 'U123456', discordId: '987654', zoomPmi: '1234567890' }\n // - App-specific: { onboardingCompleted: true, tutorialStep: 5, badges: ['early-adopter'] }\n // Example: { department: 'Engineering', theme: 'dark', twitter: '@user' }\n metadata: typedJsonb<Record<string, any>>('metadata'),\n\n ...timestamps(),\n },\n (table) => [\n // Indexes for query optimization\n index('user_profiles_user_id_idx').on(table.userId),\n index('user_profiles_display_name_idx').on(table.displayName),\n\n // Index for locale-based queries (useful for i18n features)\n index('user_profiles_locale_idx').on(table.locale),\n ]\n);\n\n// Type exports\nexport type UserProfile = typeof userProfiles.$inferSelect;\nexport type NewUserProfile = typeof userProfiles.$inferInsert;","/**\n * @spfn/auth - User Public Keys Entity\n *\n * Stores client-generated public keys for JWT verification\n * Supports key rotation and multi-key management per user\n */\n\nimport { KEY_ALGORITHM } from '../types';\nimport { text, boolean, index } from 'drizzle-orm/pg-core';\nimport { id, foreignKey, enumText, utcTimestamp } from '@spfn/core/db';\nimport { users } from './users';\nimport { authSchema } from './schema';\n\n/**\n * User Public Keys Table\n * Each user can have multiple public keys (for rotation)\n */\nexport const userPublicKeys = authSchema.table(\n 'user_public_keys',\n {\n id: id(),\n\n // User reference\n // Foreign key to users table\n // Used for: associating keys with user accounts\n userId: foreignKey('user', () => users.id),\n\n // Key identification\n // Client-generated UUID (v4 recommended)\n // Used in: JWT header 'kid' field for key lookup\n // Must be unique across all users\n keyId: text('key_id').notNull().unique(),\n\n // Public key material\n // Format: Base64-encoded DER (SPKI) format\n // Standards: RFC 5480 (EC), RFC 3447 (RSA)\n // Used for: JWT signature verification\n publicKey: text('public_key').notNull(),\n\n // Signature algorithm\n // ES256: ECDSA with P-256 and SHA-256 (recommended, smaller keys)\n // RS256: RSA with SHA-256 (fallback, larger keys)\n algorithm: enumText('algorithm', KEY_ALGORITHM).notNull().default('ES256'),\n\n // Key fingerprint\n // SHA-256 hash of the public key for quick identification\n // Format: hex-encoded string (64 chars)\n // Used for: duplicate detection, key verification\n fingerprint: text('fingerprint').notNull(),\n\n // Key status\n // false: Key is deactivated (cannot be used for verification)\n // Used for: soft key rotation, temporary key suspension\n isActive: boolean('is_active').notNull().default(true),\n\n // Key creation timestamp\n // Automatically set on insertion\n createdAt: utcTimestamp('created_at').notNull().defaultNow(),\n\n // Last usage timestamp\n // Updated each time key is used for JWT verification\n // Used for: tracking key activity, identifying unused keys\n lastUsedAt: utcTimestamp('last_used_at'),\n\n // Key expiration timestamp (optional)\n // null: Key does not expire\n // timestamp: Key cannot be used after this time\n // Used for: automatic key rotation, security compliance\n expiresAt: utcTimestamp('expires_at'),\n\n // Key revocation timestamp\n // null: Key is not revoked\n // timestamp: Key was revoked at this time\n // Used for: security incidents, key compromise\n revokedAt: utcTimestamp('revoked_at'),\n\n // Revocation reason\n // Human-readable explanation for key revocation\n // Example: \"Key compromised\", \"User reported device lost\"\n revokedReason: text('revoked_reason'),\n },\n (table) => [\n index('user_public_keys_user_id_idx').on(table.userId),\n index('user_public_keys_key_id_idx').on(table.keyId),\n index('user_public_keys_active_idx').on(table.isActive),\n index('user_public_keys_fingerprint_idx').on(table.fingerprint),\n ]\n);\n\nexport type UserPublicKey = typeof userPublicKeys.$inferSelect;\nexport type NewUserPublicKey = typeof userPublicKeys.$inferInsert;","/**\n * @spfn/auth - User Social Accounts Entity\n *\n * Stores OAuth connections for social login providers\n */\n\nimport { SOCIAL_PROVIDERS } from \"../types\";\nimport { text, uniqueIndex, index } from 'drizzle-orm/pg-core';\nimport { id, timestamps, foreignKey, enumText, utcTimestamp } from '@spfn/core/db';\nimport { users } from './users';\nimport { authSchema } from './schema';\n\nexport const userSocialAccounts = authSchema.table('user_social_accounts',\n {\n // Primary key\n id: id(),\n\n // User reference\n // Foreign key to users table\n // Links OAuth provider account to internal user\n // One user can have multiple provider connections\n userId: foreignKey('user', () => users.id),\n\n // OAuth provider\n // Supported providers: google, github, kakao, naver\n // Used for: identifying which OAuth provider was used\n provider: enumText('provider', SOCIAL_PROVIDERS).notNull(),\n\n // Provider's unique user identifier\n // Format varies by provider:\n // - Google: numeric string (e.g., \"1234567890\")\n // - GitHub: numeric ID\n // - Kakao: numeric ID\n // - Naver: alphanumeric string\n // Used for: linking provider account, preventing duplicate connections\n providerUserId: text('provider_user_id').notNull(),\n\n // Email from provider\n // May be null if provider doesn't share email\n // Used for: account linking, user verification\n providerEmail: text('provider_email'),\n\n // OAuth access token\n // ⚠️ SECURITY CRITICAL:\n // - MUST be encrypted at rest in production\n // - Use application-level encryption (AES-256-GCM recommended)\n // - Implement key rotation policy\n // - Never log or expose in API responses\n // - Set short expiration and refresh regularly\n // Used for: making API calls to provider on behalf of user\n accessToken: text('access_token'),\n\n // OAuth refresh token\n // ⚠️ SECURITY CRITICAL:\n // - MUST be encrypted at rest (same as accessToken)\n // - Store only if provider supports it\n // - Use to obtain new access tokens without re-authentication\n // - Revoke on user logout or account disconnect\n // Used for: refreshing expired access tokens\n refreshToken: text('refresh_token'),\n\n // Access token expiration timestamp\n // Used for: determining when to refresh token\n // Background job should refresh tokens before expiration\n tokenExpiresAt: utcTimestamp('token_expires_at'),\n\n ...timestamps(),\n },\n (table) => [\n // Indexes for query optimization\n // Index for user lookup (common query: get all providers for a user)\n index('user_social_accounts_user_id_idx').on(table.userId),\n\n // Index for provider lookup (for analytics, admin)\n index('user_social_accounts_provider_idx').on(table.provider),\n\n // Unique constraint: one provider account per provider\n // Prevents same OAuth account from being linked to multiple users\n uniqueIndex('provider_user_unique_idx')\n .on(table.provider, table.providerUserId),\n ]\n);\n\n// Type exports\nexport type UserSocialAccount = typeof userSocialAccounts.$inferSelect;\nexport type NewUserSocialAccount = typeof userSocialAccounts.$inferInsert;","/**\n * @spfn/auth - Verification Codes Entity\n *\n * Stores verification codes for email and phone verification\n * Codes expire after a configurable time period\n */\n\nimport { VERIFICATION_PURPOSES, VERIFICATION_TARGET_TYPES } from \"../routes/schema\";\nimport { text, index, integer, check } from 'drizzle-orm/pg-core';\nimport { id, timestamps, enumText, utcTimestamp } from '@spfn/core/db';\nimport { sql } from 'drizzle-orm';\nimport { authSchema } from './schema';\n\nexport const verificationCodes = authSchema.table('verification_codes',\n {\n id: id(),\n\n // Target (email or phone)\n // Email address or E.164 phone number (+821012345678)\n target: text('target').notNull(),\n targetType: enumText('target_type', VERIFICATION_TARGET_TYPES).notNull(),\n\n // Verification code\n // Default: 6-digit numeric code (configurable)\n // Generated by: crypto.randomInt(100000, 999999)\n code: text('code').notNull(),\n\n // Purpose of verification\n // Used to: prevent code reuse across different flows\n purpose: enumText('purpose', VERIFICATION_PURPOSES).notNull(),\n\n // Expiration timestamp\n // Default: 15 minutes from creation\n // Background job should clean up expired codes\n expiresAt: utcTimestamp('expires_at').notNull(),\n\n // Usage tracking\n // Timestamp when code was successfully used\n // null = not yet used, timestamp = used and no longer valid\n usedAt: utcTimestamp('used_at'),\n\n // Failed verification attempts counter\n // Incremented on each failed verification\n // Max attempts: 5 (enforced by check constraint)\n // Used for: rate limiting, security monitoring\n attempts: integer('attempts').notNull().default(0),\n\n ...timestamps(),\n },\n (table) => [\n // Database constraints\n // Limit verification attempts to prevent brute force attacks\n check('attempts_limit_check', sql`${table.attempts} >= 0 AND ${table.attempts} <= 10`),\n\n // Index for quick lookup by target and purpose\n index('target_purpose_idx')\n .on(table.target, table.purpose, table.expiresAt),\n ]\n);\n\n// Type exports\nexport type VerificationCode = typeof verificationCodes.$inferSelect;\nexport type NewVerificationCode = typeof verificationCodes.$inferInsert;","/**\n * @spfn/auth - User Invitations Entity\n *\n * Invitation system for invite-only user registration\n *\n * Features:\n * - Email-based invitations with unique tokens\n * - Role assignment at invitation time\n * - Expiration and status tracking\n * - Audit trail (who invited whom, when accepted)\n * - Metadata support for custom data\n */\n\nimport { INVITATION_STATUSES } from \"../types\";\nimport { text, index } from 'drizzle-orm/pg-core';\nimport { id, timestamps, enumText, utcTimestamp, typedJsonb, foreignKey } from '@spfn/core/db';\nimport { roles } from './roles';\nimport { users } from './users';\nimport { authSchema } from './schema';\n\nexport const userInvitations = authSchema.table('user_invitations',\n {\n // Primary key\n id: id(),\n\n // Target email address for the invitation\n // Will become the user's email upon acceptance\n email: text('email').notNull(),\n\n // Unique invitation token (UUID v4)\n // Used in invitation URL: /auth/invite/{token}\n // Single-use token that expires after acceptance\n token: text('token').notNull().unique(),\n\n // Role to be assigned when invitation is accepted\n // Foreign key to roles table\n roleId: foreignKey('role', () => roles.id),\n\n // User who created this invitation\n // Foreign key to users table\n // Used for: audit trail, permission checks\n invitedBy: foreignKey('invited_by', () => users.id, { onDelete: 'cascade' }),\n\n // Invitation status\n // - pending: Invitation sent, awaiting acceptance\n // - accepted: User accepted and account created\n // - expired: Invitation expired (automatic)\n // - cancelled: Invitation cancelled by admin\n status: enumText('status', INVITATION_STATUSES).default('pending').notNull(),\n\n // Expiration timestamp (default: 7 days from creation)\n // Invitation cannot be accepted after this time\n // Background job should update status to 'expired'\n expiresAt: utcTimestamp('expires_at').notNull(),\n\n // Timestamp when invitation was accepted\n // null = not yet accepted\n // Used for: audit trail, analytics\n acceptedAt: utcTimestamp('accepted_at'),\n\n // Timestamp when invitation was cancelled\n // null = not cancelled\n // Used for: audit trail\n cancelledAt: utcTimestamp('cancelled_at'),\n\n // Additional metadata (JSONB)\n // Use cases:\n // - Custom welcome message\n // - Onboarding instructions\n // - Team/department assignment\n // - Custom fields for app-specific data\n // Example: { message: \"Welcome!\", department: \"Engineering\" }\n metadata: typedJsonb<Record<string, any>>('metadata'),\n\n ...timestamps(),\n },\n (table) => [\n // Indexes for query optimization\n index('invitations_token_idx').on(table.token),\n index('invitations_email_idx').on(table.email),\n index('invitations_status_idx').on(table.status),\n index('invitations_invited_by_idx').on(table.invitedBy),\n index('invitations_expires_at_idx').on(table.expiresAt), // For cleanup jobs\n index('invitations_role_id_idx').on(table.roleId),\n ]\n);\n\n// Type exports\nexport type Invitation = typeof userInvitations.$inferSelect;\nexport type NewInvitation = typeof userInvitations.$inferInsert;","/**\n * @spfn/auth - RBAC Type Definitions\n *\n * Type definitions for role and permission configuration\n */\n\n/**\n * Permission category enum values\n * Single source of truth for permission categories\n */\nexport const PERMISSION_CATEGORIES = [\n 'auth', // Authentication & authorization\n 'user', // User management\n 'rbac', // Role & permission management\n 'system', // System administration\n 'custom' // App-specific categories\n] as const;\n\n/**\n * Permission category type derived from the const array\n */\nexport type PermissionCategory = typeof PERMISSION_CATEGORIES[number];\n\nexport interface RoleConfig\n{\n // Role identifier (e.g., 'admin', 'editor', 'content-creator')\n name: string;\n\n // Display name for UI\n displayName: string;\n\n // Role description\n description?: string;\n\n // Priority level (higher = more privileged)\n // Default: 10 for custom roles\n priority?: number;\n\n // System role flag (defined in code vs runtime created)\n // Default: false for custom roles\n isSystem?: boolean;\n\n // Built-in role flag (core package roles that cannot be deleted)\n // Internal use only - set by package\n isBuiltin?: boolean;\n}\n\nexport interface PermissionConfig\n{\n // Permission identifier (e.g., 'user:delete', 'post:publish')\n name: string;\n\n // Display name for UI\n displayName: string;\n\n // Permission description\n description?: string;\n\n // Category for grouping (e.g., 'user', 'auth', 'rbac', 'custom', 'system')\n category?: PermissionCategory;\n\n // System permission flag\n // Default: false for custom permissions\n isSystem?: boolean;\n\n // Built-in permission flag (core package permissions)\n // Internal use only - set by package\n isBuiltin?: boolean;\n}\n\nexport interface AuthInitOptions\n{\n /**\n * Additional roles to create\n * Built-in roles (user, admin, superadmin) are automatically included\n */\n roles?: RoleConfig[];\n\n /**\n * Additional permissions to create\n * Built-in permissions are automatically included\n */\n permissions?: PermissionConfig[];\n\n /**\n * Role-Permission mappings\n * Built-in mappings are automatically included\n * You can extend built-in roles or define mappings for custom roles\n *\n * @example\n * ```typescript\n * {\n * // Extend built-in admin role\n * admin: ['project:create', 'project:delete'],\n *\n * // Define custom role permissions\n * 'project-manager': ['project:create', 'task:assign'],\n * }\n * ```\n */\n rolePermissions?: Record<string, string[]>;\n\n /**\n * Default role name for new users\n * Must be a valid role name that exists after initialization\n * @default 'user'\n */\n defaultRole?: string;\n\n /**\n * Default session TTL (Time To Live)\n *\n * Supports:\n * - Number: seconds (e.g., 2592000)\n * - String: duration format ('30d', '12h', '45m', '3600s')\n *\n * Can be overridden at runtime with `remember` parameter.\n *\n * @default '7d' (7 days)\n *\n * @example\n * ```typescript\n * {\n * sessionTtl: '30d', // 30 days\n * }\n * ```\n */\n sessionTtl?: string | number;\n}","/**\n * @spfn/auth - Built-in Roles and Permissions\n *\n * Core roles and permissions required by the auth package\n * These cannot be deleted and are automatically created on initialization\n */\n\nimport type { RoleConfig, PermissionConfig } from './types';\n\n/**\n * Built-in roles (required by package)\n * These roles are always created and cannot be deleted\n */\nexport const BUILTIN_ROLES: Record<string, RoleConfig> = {\n SUPERADMIN: {\n name: 'superadmin',\n displayName: 'Super Administrator',\n description: 'Full system access and RBAC management',\n priority: 100,\n isSystem: true,\n isBuiltin: true,\n },\n ADMIN: {\n name: 'admin',\n displayName: 'Administrator',\n description: 'User management and organization administration',\n priority: 80,\n isSystem: true,\n isBuiltin: true,\n },\n USER: {\n name: 'user',\n displayName: 'User',\n description: 'Default user role with basic permissions',\n priority: 10,\n isSystem: true,\n isBuiltin: true,\n },\n} as const;\n\n/**\n * Built-in permissions (required by package)\n * These permissions are always created and cannot be deleted\n */\nexport const BUILTIN_PERMISSIONS: Record<string, PermissionConfig> = {\n // Self-service auth management\n AUTH_SELF_MANAGE: {\n name: 'auth:self:manage',\n displayName: 'Manage Own Auth',\n description: 'Change own password, rotate keys, manage own sessions',\n category: 'auth',\n isSystem: true,\n isBuiltin: true,\n },\n\n // User management (admin functions)\n USER_READ: {\n name: 'user:read',\n displayName: 'Read Users',\n description: 'View user information and list users',\n category: 'user',\n isSystem: true,\n isBuiltin: true,\n },\n USER_WRITE: {\n name: 'user:write',\n displayName: 'Write Users',\n description: 'Create and update user accounts',\n category: 'user',\n isSystem: true,\n isBuiltin: true,\n },\n USER_DELETE: {\n name: 'user:delete',\n displayName: 'Delete Users',\n description: 'Delete user accounts',\n category: 'user',\n isSystem: true,\n isBuiltin: true,\n },\n USER_INVITE: {\n name: 'user:invite',\n displayName: 'Invite Users',\n description: 'Create and send user invitations',\n category: 'user',\n isSystem: true,\n isBuiltin: true,\n },\n\n // RBAC management (superadmin functions)\n RBAC_ROLE_MANAGE: {\n name: 'rbac:role:manage',\n displayName: 'Manage Roles',\n description: 'Create, update, and delete roles',\n category: 'rbac',\n isSystem: true,\n isBuiltin: true,\n },\n RBAC_PERMISSION_MANAGE: {\n name: 'rbac:permission:manage',\n displayName: 'Manage Permissions',\n description: 'Assign permissions to roles and users',\n category: 'rbac',\n isSystem: true,\n isBuiltin: true,\n },\n} as const;\n\n/**\n * Built-in role-permission mappings\n * Defines default permissions for each built-in role\n */\nexport const BUILTIN_ROLE_PERMISSIONS: Record<string, string[]> = {\n superadmin: [\n 'auth:self:manage',\n 'user:read',\n 'user:write',\n 'user:delete',\n 'user:invite',\n 'rbac:role:manage',\n 'rbac:permission:manage',\n ],\n admin: [\n 'auth:self:manage',\n 'user:read',\n 'user:write',\n 'user:delete',\n 'user:invite',\n ],\n user: [\n 'auth:self:manage',\n ],\n} as const;\n\nexport type BuiltinRoleName = keyof typeof BUILTIN_ROLE_PERMISSIONS;\nexport type BuiltinPermissionName = typeof BUILTIN_PERMISSIONS[keyof typeof BUILTIN_PERMISSIONS]['name'];","/**\n * @spfn/auth - RBAC Configuration\n *\n * Role-Based Access Control system configuration\n */\n\nexport * from './types';\nexport * from './builtin';","/**\n * @spfn/auth - Permissions Entity\n *\n * Granular permissions for RBAC system\n *\n * Features:\n * - Built-in permissions (auth:*, user:*, rbac:*) - required for package\n * - System permissions (preset permissions) - optional\n * - Custom permissions (app-specific) - defined by developers\n * - Category grouping for organization\n */\n\nimport { PERMISSION_CATEGORIES } from \"../rbac\";\nimport { text, boolean, index } from 'drizzle-orm/pg-core';\nimport { id, timestamps, enumText, typedJsonb } from '@spfn/core/db';\nimport { authSchema } from './schema';\n\nexport const permissions = authSchema.table('permissions',\n {\n // Primary key\n id: id(),\n\n // Permission identifier\n // Format: resource:action or namespace:resource:action\n // Examples:\n // - Simple: 'user:delete', 'post:publish'\n // - Namespaced: 'auth:user:delete', 'cms:post:publish'\n // Must be unique across all permissions\n // Used in: permission checks, role assignments, API guards\n name: text('name').notNull().unique(),\n\n // Display name for UI\n // Human-readable name shown in admin panels\n // Example: \"Delete Users\", \"Publish Posts\"\n displayName: text('display_name').notNull(),\n\n // Permission description\n // Detailed explanation of what this permission allows\n // Example: \"Allows deletion of user accounts from the system\"\n description: text('description'),\n\n // Category for grouping\n // Used for: organizing permissions in UI, filtering\n // Built-in categories: auth, user, rbac, system\n // Custom categories: any app-specific category\n category: enumText('category', PERMISSION_CATEGORIES),\n\n // Built-in permission flag\n // true: Core package permissions (auth:*, user:*, rbac:*)\n // - Cannot be deleted or modified\n // - Must have isSystem = true\n // - Required for package functionality\n // false: Custom or preset permissions\n // - Can be deleted (if not system)\n isBuiltin: boolean('is_builtin').notNull().default(false),\n\n // System permission flag\n // true: Defined in code (builtin or preset)\n // - Deletion restricted\n // - Created during migrations or initialization\n // false: Runtime created custom permission\n // - Fully manageable by admins\n // - Created through admin UI or API\n isSystem: boolean('is_system').notNull().default(false),\n\n // Active status\n // true: Permission is enforced (default)\n // false: Deactivated permission (not enforced in checks)\n // - Useful for temporarily disabling features\n // - Maintains audit trail without deletion\n isActive: boolean('is_active').notNull().default(true),\n\n // Additional metadata (JSONB)\n // Use cases:\n // - UI configuration: { icon: 'trash', color: 'red', group: 'dangerous' }\n // - Access control: { requiresMfa: true, ipWhitelist: ['10.0.0.0/8'] }\n // - Dependencies: { requires: ['user:read'], conflicts: ['user:admin'] }\n // - Audit: { createdBy: 123, source: 'migration', version: '1.0.0' }\n // Example: { icon: 'trash', color: 'red', requiresMfa: true }\n metadata: typedJsonb<Record<string, any>>('metadata'),\n\n ...timestamps(),\n },\n (table) => [\n index('permissions_name_idx').on(table.name),\n index('permissions_category_idx').on(table.category),\n index('permissions_is_system_idx').on(table.isSystem),\n index('permissions_is_active_idx').on(table.isActive),\n index('permissions_is_builtin_idx').on(table.isBuiltin),\n ]\n);\n\n// Type exports\nexport type PermissionEntity = typeof permissions.$inferSelect;\nexport type NewPermissionEntity = typeof permissions.$inferInsert;\n\n// Legacy alias for backward compatibility\nexport type Permission = PermissionEntity;\nexport type NewPermission = NewPermissionEntity;","/**\n * @spfn/auth - Role-Permissions Mapping Entity\n *\n * Many-to-many relationship between roles and permissions\n *\n * Usage:\n * - Defines which permissions each role has\n * - Cascade delete when role or permission is deleted\n */\n\nimport { index, unique } from 'drizzle-orm/pg-core';\nimport { id, timestamps, foreignKey } from '@spfn/core/db';\nimport { roles } from './roles';\nimport { permissions } from './permissions';\nimport { authSchema } from './schema';\n\nexport const rolePermissions = authSchema.table('role_permissions',\n {\n // Primary key\n id: id(),\n\n // Role reference\n // Foreign key to roles table\n // Cascade delete: when role is deleted, all role-permission mappings are removed\n // Used for: defining which permissions each role has\n // Example: Admin role → [user:create, user:delete, user:update]\n roleId: foreignKey('role', () => roles.id, { onDelete: 'cascade' }),\n\n // Permission reference\n // Foreign key to permissions table\n // Cascade delete: when permission is deleted, all role-permission mappings are removed\n // Used for: granting permissions to roles\n // Example: user:delete permission → [Admin, Superadmin]\n permissionId: foreignKey('permission', () => permissions.id, { onDelete: 'cascade' }),\n\n ...timestamps(),\n },\n (table) => [\n // Indexes for query performance\n index('role_permissions_role_id_idx').on(table.roleId),\n index('role_permissions_permission_id_idx').on(table.permissionId),\n\n // Unique constraint: one role-permission pair only\n unique('role_permissions_unique').on(table.roleId, table.permissionId),\n ]\n);\n\n// Type exports\nexport type RolePermission = typeof rolePermissions.$inferSelect;\nexport type NewRolePermission = typeof rolePermissions.$inferInsert;","/**\n * @spfn/auth - User-Permissions Override Entity\n *\n * Per-user permission grants/revocations\n *\n * Features:\n * - Grant additional permissions to specific users\n * - Revoke role-inherited permissions from specific users\n * - Temporary permissions with expiration\n * - Audit trail with reason field\n *\n * Priority:\n * User permissions override role permissions\n */\n\nimport { boolean, text, index, unique } from 'drizzle-orm/pg-core';\nimport { id, timestamps, utcTimestamp, foreignKey } from '@spfn/core/db';\nimport { users } from './users';\nimport { permissions } from './permissions';\nimport { authSchema } from './schema';\n\nexport const userPermissions = authSchema.table('user_permissions',\n {\n // Primary key\n id: id(),\n\n // User reference\n // Foreign key to users table\n // Cascade delete: when user is deleted, all overrides are removed\n userId: foreignKey('user', () => users.id, { onDelete: 'cascade' }),\n\n // Permission reference\n // Foreign key to permissions table\n // Cascade delete: when permission is deleted, all overrides are removed\n permissionId: foreignKey('permission', () => permissions.id, { onDelete: 'cascade' }),\n\n // Grant or revoke flag\n // true: GRANT this permission to the user (additive override)\n // - Grants permission even if role doesn't have it\n // - Use case: Temporary elevated access, special privileges\n // - Example: Grant 'post:delete' to specific editor for cleanup task\n // false: REVOKE this permission from the user (subtractive override)\n // - Removes permission even if role has it\n // - Use case: Restrict specific actions, compliance requirements\n // - Example: Revoke 'user:delete' from admin during audit period\n // Priority: User permissions ALWAYS override role permissions\n granted: boolean('granted').notNull().default(true),\n\n // Reason for grant/revocation\n // Used for: audit trail, compliance documentation\n // Example: \"Temporary access for project X\", \"Security incident - restricted\"\n reason: text('reason'),\n\n // Expiration timestamp (optional)\n // null: Permanent override (remains until manually removed)\n // timestamp: Permission expires at this time (auto-revoked by background job)\n // Use case: Time-limited elevated access, temporary restrictions\n expiresAt: utcTimestamp('expires_at'),\n\n ...timestamps(),\n },\n (table) => [\n // Indexes for query performance\n index('user_permissions_user_id_idx').on(table.userId),\n index('user_permissions_permission_id_idx').on(table.permissionId),\n index('user_permissions_expires_at_idx').on(table.expiresAt),\n\n // Unique constraint: one user-permission pair only\n unique('user_permissions_unique').on(table.userId, table.permissionId),\n ]\n);\n\n// Type exports\nexport type UserPermission = typeof userPermissions.$inferSelect;\nexport type NewUserPermission = typeof userPermissions.$inferInsert;","/**\n * @spfn/auth - Database entities\n *\n * Core authentication and authorization entities\n */\n\n// Schema definition\nexport * from './schema';\n\n// User entities\nexport * from './users';\nexport * from './user-profiles';\nexport * from './user-public-keys';\nexport * from './user-social-accounts';\nexport * from './verification-codes';\nexport * from './user-invitations';\n\n// RBAC entities\nexport * from './roles';\nexport * from './permissions';\nexport * from './role-permissions';\nexport * from './user-permissions'","/**\n * Users Repository\n *\n * 사용자 데이터 관리를 위한 Repository\n * BaseRepository를 상속받아 자동 트랜잭션 컨텍스트 지원 및 Read/Write 분리\n */\n\nimport { eq, and } from 'drizzle-orm';\nimport { BaseRepository } from '@spfn/core/db';\nimport { EntityNotFoundError, NotFoundError } from \"@spfn/core/errors\";\n\nimport { rolePermissions, roles, NewUser, users, permissions } from \"../entities\";\n\n/**\n * Users Repository 클래스\n *\n * BaseRepository를 상속받아 다음 기능을 제공:\n * - 자동 트랜잭션 컨텍스트 감지 및 사용\n * - Read/Write 연결 분리 (replica 활용)\n * - 타입 안전성\n */\nexport class UsersRepository extends BaseRepository\n{\n /**\n * ID로 사용자 조회\n * Read replica 사용\n */\n async findById(id: number)\n {\n const result = await this.readDb\n .select()\n .from(users)\n .where(eq(users.id, id))\n .limit(1);\n\n return result[0] ?? null;\n }\n\n /**\n * 이메일로 사용자 조회\n * Read replica 사용\n */\n async findByEmail(email: string)\n {\n const result = await this.readDb\n .select()\n .from(users)\n .where(eq(users.email, email))\n .limit(1);\n\n return result[0] ?? null;\n }\n\n /**\n * 전화번호로 사용자 조회\n * Read replica 사용\n */\n async findByPhone(phone: string)\n {\n const result = await this.readDb\n .select()\n .from(users)\n .where(eq(users.phone, phone))\n .limit(1);\n\n return result[0] ?? null;\n }\n\n /**\n * 이메일 또는 전화번호로 사용자 조회\n * Read replica 사용\n */\n async findByEmailOrPhone(email?: string, phone?: string)\n {\n if (email)\n {\n return this.findByEmail(email);\n }\n else if (phone)\n {\n return this.findByPhone(phone);\n }\n\n return null;\n }\n\n /**\n * 사용자 생성\n * Write primary 사용\n */\n async create(data: NewUser)\n {\n return await this._create(users, {\n ...data,\n createdAt: new Date(),\n updatedAt: new Date(),\n });\n }\n\n /**\n * 사용자 정보 업데이트\n * Write primary 사용\n */\n async updateById(id: number, data: Partial<NewUser>)\n {\n const result = await this.db\n .update(users)\n .set({ ...data, updatedAt: new Date() })\n .where(eq(users.id, id))\n .returning();\n\n return result[0] ?? null;\n }\n\n /**\n * 비밀번호 업데이트\n * Write primary 사용\n */\n async updatePassword(\n id: number,\n passwordHash: string,\n clearPasswordChangeRequired: boolean = true\n ) {\n const updateData: Partial<NewUser> = {\n passwordHash,\n updatedAt: new Date(),\n };\n\n if (clearPasswordChangeRequired)\n {\n updateData.passwordChangeRequired = false;\n }\n\n const result = await this.db\n .update(users)\n .set(updateData)\n .where(eq(users.id, id))\n .returning();\n\n return result[0] ?? null;\n }\n\n /**\n * 마지막 로그인 시간 업데이트\n * Write primary 사용\n */\n async updateLastLogin(id: number)\n {\n const result = await this.db\n .update(users)\n .set({\n lastLoginAt: new Date(),\n updatedAt: new Date(),\n })\n .where(eq(users.id, id))\n .returning();\n\n return result[0] ?? null;\n }\n\n /**\n * 사용자 삭제\n * Write primary 사용\n */\n async deleteById(id: number)\n {\n const result = await this.db\n .delete(users)\n .where(eq(users.id, id))\n .returning();\n\n return result[0] ?? null;\n }\n\n /**\n * User의 Role과 Permissions 조회 (JOIN)\n * Read replica 사용\n *\n * @param userId - User ID\n * @returns Role 정보와 permissions 배열\n */\n async fetchUserRoleAndPermissions(userId: number)\n {\n // 1. Get user's role\n const userWithRole = await this.readDb\n .select({\n roleId: roles.id,\n roleName: roles.name,\n roleDisplayName: roles.displayName,\n rolePriority: roles.priority,\n })\n .from(users)\n .innerJoin(roles, eq(users.roleId, roles.id))\n .where(eq(users.id, userId))\n .limit(1)\n .then(rows => rows[0] ?? null);\n\n if (!userWithRole)\n {\n throw new NotFoundError({ message: '[@spfn/auth] User or role not found' });\n }\n\n // 2. Get role permissions\n const rolePerms = await this.readDb\n .select({\n id: permissions.id,\n name: permissions.name,\n displayName: permissions.displayName,\n category: permissions.category,\n })\n .from(rolePermissions)\n .innerJoin(permissions, eq(rolePermissions.permissionId, permissions.id))\n .where(\n and(\n eq(rolePermissions.roleId, userWithRole.roleId),\n eq(permissions.isActive, true)\n )\n );\n\n return {\n role: {\n id: userWithRole.roleId,\n name: userWithRole.roleName,\n displayName: userWithRole.roleDisplayName,\n priority: userWithRole.rolePriority,\n },\n permissions: rolePerms.map(perm => ({\n id: perm.id,\n name: perm.name,\n displayName: perm.displayName,\n category: perm.category ?? undefined,\n })),\n };\n }\n\n /**\n * Minimal user data 조회 (auth session용)\n * Read replica 사용\n *\n * @param userId - User ID\n * @returns Minimal user data\n */\n async fetchMinimalUserData(userId: number)\n {\n const user = await this.readDb\n .select({\n id: users.id,\n email: users.email,\n emailVerifiedAt: users.emailVerifiedAt,\n phoneVerifiedAt: users.phoneVerifiedAt,\n })\n .from(users)\n .where(eq(users.id, userId))\n .limit(1)\n .then(rows => rows[0] ?? null);\n\n if (!user)\n {\n throw new NotFoundError({ message: '[@spfn/auth] User not found' });\n }\n\n return {\n userId: user.id,\n email: user.email,\n isEmailVerified: !!user.emailVerifiedAt,\n isPhoneVerified: !!user.phoneVerifiedAt,\n };\n }\n\n /**\n * Full user data 조회 (user profile용)\n * Read replica 사용\n *\n * @param userId - User ID\n * @returns Full user data\n */\n async fetchFullUserData(userId: number)\n {\n const user = await this.readDb\n .select({\n id: users.id,\n email: users.email,\n emailVerifiedAt: users.emailVerifiedAt,\n phoneVerifiedAt: users.phoneVerifiedAt,\n lastLoginAt: users.lastLoginAt,\n createdAt: users.createdAt,\n updatedAt: users.updatedAt,\n })\n .from(users)\n .where(eq(users.id, userId))\n .limit(1)\n .then(rows => rows[0] ?? null);\n\n if (!user)\n {\n throw new EntityNotFoundError({ resource: 'users', id: userId });\n }\n\n return {\n userId: user.id,\n email: user.email,\n isEmailVerified: !!user.emailVerifiedAt,\n isPhoneVerified: !!user.phoneVerifiedAt,\n lastLoginAt: user.lastLoginAt,\n createdAt: user.createdAt,\n updatedAt: user.updatedAt,\n };\n }\n}\n\n// Default instance export\nexport const usersRepository = new UsersRepository();","/**\n * User Public Keys Repository\n *\n * 사용자 공개키 관리를 위한 Repository\n * BaseRepository를 상속받아 자동 트랜잭션 컨텍스트 지원 및 Read/Write 분리\n */\n\nimport { NewUserPublicKey, userPublicKeys } from \"../entities/user-public-keys\";\nimport { BaseRepository } from '@spfn/core/db';\nimport { eq, and } from 'drizzle-orm';\n\n/**\n * User Public Keys Repository 클래스\n *\n * BaseRepository를 상속받아 다음 기능을 제공:\n * - 자동 트랜잭션 컨텍스트 감지 및 사용\n * - Read/Write 연결 분리 (replica 활용)\n * - 타입 안전성\n */\nexport class KeysRepository extends BaseRepository\n{\n /**\n * Key ID와 User ID로 공개키 조회\n * Read replica 사용\n */\n async findByKeyIdAndUserId(keyId: string, userId: number)\n {\n const result = await this.readDb\n .select()\n .from(userPublicKeys)\n .where(\n and(\n eq(userPublicKeys.keyId, keyId),\n eq(userPublicKeys.userId, userId)\n )\n )\n .limit(1);\n\n return result[0] ?? null;\n }\n\n /**\n * User ID로 모든 공개키 조회\n * Read replica 사용\n */\n async findAllByUserId(userId: number)\n {\n return this.readDb\n .select()\n .from(userPublicKeys)\n .where(eq(userPublicKeys.userId, userId));\n }\n\n /**\n * User ID로 활성 공개키만 조회\n * Read replica 사용\n */\n async findActiveByUserId(userId: number)\n {\n return this.readDb\n .select()\n .from(userPublicKeys)\n .where(\n and(\n eq(userPublicKeys.userId, userId),\n eq(userPublicKeys.isActive, true)\n )\n );\n }\n\n /**\n * 공개키 생성\n * Write primary 사용\n */\n async create(data: NewUserPublicKey)\n {\n return await this._create(userPublicKeys, {\n ...data,\n createdAt: data.createdAt || new Date(),\n });\n }\n\n /**\n * 공개키 revoke (비활성화)\n * Write primary 사용\n */\n async revokeByKeyIdAndUserId(\n keyId: string,\n userId: number,\n reason: string\n )\n {\n const result = await this.db\n .update(userPublicKeys)\n .set({\n isActive: false,\n revokedAt: new Date(),\n revokedReason: reason,\n })\n .where(\n and(\n eq(userPublicKeys.keyId, keyId),\n eq(userPublicKeys.userId, userId)\n )\n )\n .returning();\n\n return result[0] ?? null;\n }\n\n /**\n * 공개키 삭제\n * Write primary 사용\n */\n async deleteByKeyIdAndUserId(keyId: string, userId: number)\n {\n const result = await this.db\n .delete(userPublicKeys)\n .where(\n and(\n eq(userPublicKeys.keyId, keyId),\n eq(userPublicKeys.userId, userId)\n )\n )\n .returning();\n\n return result[0] ?? null;\n }\n\n /**\n * 마지막 사용 시간 업데이트\n * Write primary 사용\n */\n async updateLastUsed(keyId: string, userId: number)\n {\n const result = await this.db\n .update(userPublicKeys)\n .set({\n lastUsedAt: new Date(),\n })\n .where(\n and(\n eq(userPublicKeys.keyId, keyId),\n eq(userPublicKeys.userId, userId)\n )\n )\n .returning();\n\n return result[0] ?? null;\n }\n\n /**\n * Key ID로 활성 공개키 조회 (authenticate용)\n * Read replica 사용\n */\n async findActiveByKeyId(keyId: string)\n {\n const result = await this.readDb\n .select()\n .from(userPublicKeys)\n .where(\n and(\n eq(userPublicKeys.keyId, keyId),\n eq(userPublicKeys.isActive, true)\n )\n )\n .limit(1);\n\n return result[0] ?? null;\n }\n\n /**\n * Primary key로 마지막 사용 시간 업데이트 (authenticate용)\n * Write primary 사용\n */\n async updateLastUsedById(id: number)\n {\n const result = await this.db\n .update(userPublicKeys)\n .set({\n lastUsedAt: new Date(),\n })\n .where(eq(userPublicKeys.id, id))\n .returning();\n\n return result[0] ?? null;\n }\n}\n\n// Default instance export\nexport const keysRepository = new KeysRepository();","/**\n * Verification Codes Repository\n *\n * 인증 코드 관리를 위한 Repository\n * BaseRepository를 상속받아 자동 트랜잭션 컨텍스트 지원 및 Read/Write 분리\n */\n\nimport { NewVerificationCode, verificationCodes } from \"../entities/verification-codes\";\nimport type { VerificationPurpose } from \"../routes/schema\";\nimport { BaseRepository } from '@spfn/core/db';\nimport { eq, and, lt, gt, isNull } from 'drizzle-orm';\n\n/**\n * Verification Codes Repository 클래스\n *\n * BaseRepository를 상속받아 다음 기능을 제공:\n * - 자동 트랜잭션 컨텍스트 감지 및 사용\n * - Read/Write 연결 분리 (replica 활용)\n * - 타입 안전성\n */\nexport class VerificationCodesRepository extends BaseRepository\n{\n /**\n * Target과 Purpose로 유효한 인증 코드 조회\n * (만료되지 않고, 사용되지 않은 코드)\n * Read replica 사용\n */\n async findValidByTargetAndPurpose(\n target: string,\n purpose: VerificationPurpose\n ) {\n const now = new Date();\n\n const result = await this.readDb\n .select()\n .from(verificationCodes)\n .where(\n and(\n eq(verificationCodes.target, target),\n eq(verificationCodes.purpose, purpose),\n isNull(verificationCodes.usedAt),\n gt(verificationCodes.expiresAt, now)\n )\n )\n .limit(1);\n\n return result[0] ?? null;\n }\n\n /**\n * ID로 인증 코드 조회\n * Read replica 사용\n */\n async findById(id: number)\n {\n const result = await this.readDb\n .select()\n .from(verificationCodes)\n .where(eq(verificationCodes.id, id))\n .limit(1);\n\n return result[0] ?? null;\n }\n\n /**\n * 인증 코드 생성\n * Write primary 사용\n */\n async create(data: NewVerificationCode)\n {\n return await this._create(verificationCodes, {\n ...data,\n createdAt: new Date(),\n updatedAt: new Date(),\n });\n }\n\n /**\n * 인증 코드 사용 처리\n * Write primary 사용\n */\n async markAsUsed(id: number)\n {\n const result = await this.db\n .update(verificationCodes)\n .set({\n usedAt: new Date(),\n updatedAt: new Date(),\n })\n .where(eq(verificationCodes.id, id))\n .returning();\n\n return result[0] ?? null;\n }\n\n /**\n * 시도 횟수 증가\n * Write primary 사용\n */\n async incrementAttempts(id: number)\n {\n const code = await this.findById(id);\n if (!code) return null;\n\n const result = await this.db\n .update(verificationCodes)\n .set({\n attempts: code.attempts + 1,\n updatedAt: new Date(),\n })\n .where(eq(verificationCodes.id, id))\n .returning();\n\n return result[0] ?? null;\n }\n\n /**\n * 만료된 코드 삭제\n * Write primary 사용\n */\n async deleteExpired()\n {\n const now = new Date();\n\n const result = await this.db\n .delete(verificationCodes)\n .where(lt(verificationCodes.expiresAt, now))\n .returning();\n\n return result.length;\n }\n\n /**\n * Target의 모든 이전 코드 무효화 (새 코드 발급 시)\n * Write primary 사용\n */\n async invalidatePreviousCodes(\n target: string,\n purpose: VerificationPurpose\n ) {\n const result = await this.db\n .update(verificationCodes)\n .set({\n usedAt: new Date(),\n updatedAt: new Date(),\n })\n .where(\n and(\n eq(verificationCodes.target, target),\n eq(verificationCodes.purpose, purpose),\n isNull(verificationCodes.usedAt)\n )\n )\n .returning();\n\n return result.length;\n }\n}\n\n// Default instance export\nexport const verificationCodesRepository = new VerificationCodesRepository();","/**\n * Roles Repository\n *\n * 역할 관리를 위한 Repository\n * BaseRepository를 상속받아 자동 트랜잭션 컨텍스트 지원 및 Read/Write 분리\n */\n\nimport { NewRoleEntity, roles } from \"../entities/roles\";\nimport { BaseRepository } from '@spfn/core/db';\nimport { eq, asc } from 'drizzle-orm';\n\n/**\n * Roles Repository 클래스\n */\nexport class RolesRepository extends BaseRepository\n{\n /**\n * ID로 역할 조회\n */\n async findById(id: number)\n {\n const result = await this.readDb\n .select()\n .from(roles)\n .where(eq(roles.id, id))\n .limit(1);\n\n return result[0] ?? null;\n }\n\n /**\n * Name으로 역할 조회\n */\n async findByName(name: string)\n {\n const result = await this.readDb\n .select()\n .from(roles)\n .where(eq(roles.name, name))\n .limit(1);\n\n return result[0] ?? null;\n }\n\n /**\n * 모든 역할 조회 (priority 순)\n */\n async findAll()\n {\n return this.readDb\n .select()\n .from(roles)\n .orderBy(asc(roles.priority));\n }\n\n /**\n * 활성 역할만 조회\n */\n async findActive()\n {\n return this.readDb\n .select()\n .from(roles)\n .where(eq(roles.isActive, true))\n .orderBy(asc(roles.priority));\n }\n\n /**\n * 역할 생성\n */\n async create(data: NewRoleEntity)\n {\n return await this._create(roles, {\n ...data,\n createdAt: new Date(),\n updatedAt: new Date(),\n });\n }\n\n /**\n * 역할 업데이트\n */\n async updateById(id: number, data: Partial<NewRoleEntity>)\n {\n const result = await this.db\n .update(roles)\n .set({ ...data, updatedAt: new Date() })\n .where(eq(roles.id, id))\n .returning();\n\n return result[0] ?? null;\n }\n\n /**\n * 역할 삭제\n */\n async deleteById(id: number)\n {\n const result = await this.db\n .delete(roles)\n .where(eq(roles.id, id))\n .returning();\n\n return result[0] ?? null;\n }\n}\n\n// Default instance export\nexport const rolesRepository = new RolesRepository();","/**\n * Permissions Repository\n *\n * 권한 관리를 위한 Repository\n * BaseRepository를 상속받아 자동 트랜잭션 컨텍스트 지원 및 Read/Write 분리\n */\n\nimport { NewPermissionEntity, PermissionEntity, permissions } from \"../entities/permissions\";\nimport type { PermissionCategory } from \"../rbac\";\nimport { BaseRepository } from '@spfn/core/db';\nimport { asc, eq, inArray } from 'drizzle-orm';\n\n/**\n * Permissions Repository 클래스\n */\nexport class PermissionsRepository extends BaseRepository\n{\n /**\n * ID로 권한 조회\n */\n async findById(id: number)\n {\n const result = await this.readDb\n .select()\n .from(permissions)\n .where(eq(permissions.id, id))\n .limit(1);\n\n return result[0] ?? null;\n }\n\n /**\n * Name으로 권한 조회\n */\n async findByName(name: string)\n {\n const result = await this.readDb\n .select()\n .from(permissions)\n .where(eq(permissions.name, name))\n .limit(1);\n\n return result[0] ?? null;\n }\n\n /**\n * 여러 Name으로 권한 조회\n */\n async findByNames(names: string[]): Promise<PermissionEntity[]>\n {\n if (names.length === 0) return [];\n\n return this.readDb\n .select()\n .from(permissions)\n .where(inArray(permissions.name, names));\n }\n\n /**\n * 모든 권한 조회\n */\n async findAll(): Promise<PermissionEntity[]>\n {\n return this.readDb\n .select()\n .from(permissions)\n .orderBy(asc(permissions.name));\n }\n\n /**\n * 활성 권한만 조회\n */\n async findActive(): Promise<PermissionEntity[]>\n {\n return this.readDb\n .select()\n .from(permissions)\n .where(eq(permissions.isActive, true))\n .orderBy(asc(permissions.name));\n }\n\n /**\n * 카테고리별 권한 조회\n */\n async findByCategory(category: PermissionCategory): Promise<PermissionEntity[]>\n {\n return this.readDb\n .select()\n .from(permissions)\n .where(eq(permissions.category, category))\n .orderBy(asc(permissions.name));\n }\n\n /**\n * 권한 생성\n */\n async create(data: NewPermissionEntity): Promise<PermissionEntity>\n {\n return await this._create(permissions, {\n ...data,\n createdAt: new Date(),\n updatedAt: new Date(),\n });\n }\n\n /**\n * 여러 권한 일괄 생성\n */\n async createMany(data: NewPermissionEntity[]): Promise<PermissionEntity[]>\n {\n if (data.length === 0) return [];\n\n const now = new Date();\n const valuesWithTimestamps = data.map(d => ({\n ...d,\n createdAt: now,\n updatedAt: now,\n }));\n\n return await this._createMany(permissions, valuesWithTimestamps);\n }\n\n /**\n * 권한 업데이트\n */\n async updateById(id: number, data: Partial<NewPermissionEntity>)\n {\n const result = await this.db\n .update(permissions)\n .set({ ...data, updatedAt: new Date() })\n .where(eq(permissions.id, id))\n .returning();\n\n return result[0] ?? null;\n }\n\n /**\n * 권한 삭제\n */\n async deleteById(id: number)\n {\n const result = await this.db\n .delete(permissions)\n .where(eq(permissions.id, id))\n .returning();\n\n return result[0] ?? null;\n }\n}\n\n// Default instance export\nexport const permissionsRepository = new PermissionsRepository();","/**\n * Role Permissions Repository\n *\n * 역할-권한 매핑 관리를 위한 Repository\n * BaseRepository를 상속받아 자동 트랜잭션 컨텍스트 지원 및 Read/Write 분리\n */\n\nimport { NewRolePermission, RolePermission, rolePermissions } from \"../entities/role-permissions\";\nimport { BaseRepository } from '@spfn/core/db';\nimport { and, eq } from 'drizzle-orm';\n\n/**\n * Role Permissions Repository 클래스\n */\nexport class RolePermissionsRepository extends BaseRepository\n{\n /**\n * 역할 ID로 모든 권한 조회\n */\n async findByRoleId(roleId: number)\n {\n return this.readDb\n .select()\n .from(rolePermissions)\n .where(eq(rolePermissions.roleId, roleId));\n }\n\n /**\n * 권한 ID로 모든 역할 조회\n */\n async findByPermissionId(permissionId: number)\n {\n return this.readDb\n .select()\n .from(rolePermissions)\n .where(eq(rolePermissions.permissionId, permissionId));\n }\n\n /**\n * 역할-권한 매핑 생성\n */\n async create(data: NewRolePermission): Promise<RolePermission>\n {\n return await this._create(rolePermissions, {\n ...data,\n createdAt: new Date(),\n updatedAt: new Date(),\n });\n }\n\n /**\n * 여러 역할-권한 매핑 일괄 생성\n */\n async createMany(data: NewRolePermission[])\n {\n if (data.length === 0) return [];\n\n const now = new Date();\n const valuesWithTimestamps = data.map(d => ({\n ...d,\n createdAt: now,\n updatedAt: now,\n }));\n\n return await this._createMany(rolePermissions, valuesWithTimestamps);\n }\n\n /**\n * 특정 역할-권한 매핑 삭제\n */\n async deleteByRoleIdAndPermissionId(\n roleId: number,\n permissionId: number\n ): Promise<RolePermission | null>\n {\n const result = await this.db\n .delete(rolePermissions)\n .where(\n and(\n eq(rolePermissions.roleId, roleId),\n eq(rolePermissions.permissionId, permissionId)\n )\n )\n .returning();\n\n return result[0] ?? null;\n }\n\n /**\n * 역할의 모든 권한 매핑 삭제\n */\n async deleteByRoleId(roleId: number)\n {\n const result = await this.db\n .delete(rolePermissions)\n .where(eq(rolePermissions.roleId, roleId))\n .returning();\n\n return result.length;\n }\n\n /**\n * 역할에 권한 ID 배열로 설정 (기존 삭제 후 재생성)\n */\n async setPermissionsForRole(roleId: number, permissionIds: number[])\n {\n // 기존 권한 삭제\n await this.deleteByRoleId(roleId);\n\n // 새 권한 추가\n if (permissionIds.length === 0) return [];\n\n const mappings = permissionIds.map(permissionId => ({\n roleId,\n permissionId,\n }));\n\n return await this.createMany(mappings);\n }\n}\n\n// Default instance export\nexport const rolePermissionsRepository = new RolePermissionsRepository();","/**\n * User Permissions Repository\n *\n * 사용자별 권한 오버라이드 관리를 위한 Repository\n * BaseRepository를 상속받아 자동 트랜잭션 컨텍스트 지원 및 Read/Write 분리\n */\n\nimport { NewUserPermission, userPermissions } from \"../entities/user-permissions\";\nimport { BaseRepository } from '@spfn/core/db';\nimport { eq, and, or, isNull, isNotNull, lt, gt } from 'drizzle-orm';\n\n/**\n * User Permissions Repository 클래스\n */\nexport class UserPermissionsRepository extends BaseRepository\n{\n /**\n * 사용자 ID로 모든 권한 오버라이드 조회\n */\n async findByUserId(userId: number)\n {\n return this.readDb\n .select()\n .from(userPermissions)\n .where(eq(userPermissions.userId, userId));\n }\n\n /**\n * 사용자 ID로 유효한 권한 오버라이드만 조회\n * (만료되지 않거나 만료 시간이 없는 것)\n */\n async findValidByUserId(userId: number)\n {\n const now = new Date();\n\n return this.readDb\n .select()\n .from(userPermissions)\n .where(\n and(\n eq(userPermissions.userId, userId),\n or(\n isNull(userPermissions.expiresAt),\n gt(userPermissions.expiresAt, now)\n )\n )\n );\n }\n\n /**\n * 특정 사용자-권한 매핑 조회\n */\n async findByUserIdAndPermissionId(\n userId: number,\n permissionId: number\n )\n {\n const result = await this.readDb\n .select()\n .from(userPermissions)\n .where(\n and(\n eq(userPermissions.userId, userId),\n eq(userPermissions.permissionId, permissionId)\n )\n )\n .limit(1);\n\n return result[0] ?? null;\n }\n\n /**\n * 사용자 권한 오버라이드 생성\n */\n async create(data: NewUserPermission)\n {\n return await this._create(userPermissions, {\n ...data,\n createdAt: new Date(),\n updatedAt: new Date(),\n });\n }\n\n /**\n * 사용자 권한 오버라이드 업데이트\n */\n async updateById(id: number, data: Partial<NewUserPermission>)\n {\n const result = await this.db\n .update(userPermissions)\n .set({ ...data, updatedAt: new Date() })\n .where(eq(userPermissions.id, id))\n .returning();\n\n return result[0] ?? null;\n }\n\n /**\n * 특정 사용자-권한 매핑 삭제\n */\n async deleteByUserIdAndPermissionId(\n userId: number,\n permissionId: number\n ) {\n const result = await this.db\n .delete(userPermissions)\n .where(\n and(\n eq(userPermissions.userId, userId),\n eq(userPermissions.permissionId, permissionId)\n )\n )\n .returning();\n\n return result[0] ?? null;\n }\n\n /**\n * 사용자의 모든 권한 오버라이드 삭제\n */\n async deleteByUserId(userId: number)\n {\n const result = await this.db\n .delete(userPermissions)\n .where(eq(userPermissions.userId, userId))\n .returning();\n\n return result.length;\n }\n\n /**\n * 만료된 권한 오버라이드 삭제\n */\n async deleteExpired()\n {\n const now = new Date();\n\n const result = await this.db\n .delete(userPermissions)\n .where(\n and(\n isNotNull(userPermissions.expiresAt),\n lt(userPermissions.expiresAt, now)\n )\n )\n .returning();\n\n return result.length;\n }\n}\n\n// Default instance export\nexport const userPermissionsRepository = new UserPermissionsRepository();","/**\n * User Profiles Repository\n *\n * 사용자 프로필 관리를 위한 Repository\n * BaseRepository를 상속받아 자동 트랜잭션 컨텍스트 지원 및 Read/Write 분리\n */\n\nimport { NewUserProfile, userProfiles } from \"../entities/user-profiles\";\nimport { BaseRepository } from '@spfn/core/db';\nimport { eq } from 'drizzle-orm';\n\n/**\n * User Profiles Repository 클래스\n */\nexport class UserProfilesRepository extends BaseRepository\n{\n /**\n * ID로 프로필 조회\n */\n async findById(id: number)\n {\n const result = await this.readDb\n .select()\n .from(userProfiles)\n .where(eq(userProfiles.id, id))\n .limit(1);\n\n return result[0] ?? null;\n }\n\n /**\n * User ID로 프로필 조회\n */\n async findByUserId(userId: number)\n {\n const result = await this.readDb\n .select()\n .from(userProfiles)\n .where(eq(userProfiles.userId, userId))\n .limit(1);\n\n return result[0] ?? null;\n }\n\n /**\n * 프로필 생성\n */\n async create(data: NewUserProfile)\n {\n return await this._create(userProfiles, {\n ...data,\n createdAt: new Date(),\n updatedAt: new Date(),\n });\n }\n\n /**\n * 프로필 업데이트 (by ID)\n */\n async updateById(id: number, data: Partial<NewUserProfile>)\n {\n const result = await this.db\n .update(userProfiles)\n .set({ ...data, updatedAt: new Date() })\n .where(eq(userProfiles.id, id))\n .returning();\n\n return result[0] ?? null;\n }\n\n /**\n * 프로필 업데이트 (by User ID)\n */\n async updateByUserId(userId: number, data: Partial<NewUserProfile>)\n {\n const result = await this.db\n .update(userProfiles)\n .set({ ...data, updatedAt: new Date() })\n .where(eq(userProfiles.userId, userId))\n .returning();\n\n return result[0] ?? null;\n }\n\n /**\n * 프로필 삭제 (by ID)\n */\n async deleteById(id: number)\n {\n const result = await this.db\n .delete(userProfiles)\n .where(eq(userProfiles.id, id))\n .returning();\n\n return result[0] ?? null;\n }\n\n /**\n * 프로필 삭제 (by User ID)\n */\n async deleteByUserId(userId: number)\n {\n const result = await this.db\n .delete(userProfiles)\n .where(eq(userProfiles.userId, userId))\n .returning();\n\n return result[0] ?? null;\n }\n\n /**\n * 프로필 Upsert (by User ID)\n *\n * 프로필이 없으면 생성, 있으면 업데이트\n * 새로 생성 시 displayName은 필수 (없으면 'User'로 설정)\n */\n async upsertByUserId(userId: number, data: Partial<Omit<NewUserProfile, 'userId'>>)\n {\n const existing = await this.findByUserId(userId);\n\n if (existing)\n {\n return await this.updateByUserId(userId, data);\n }\n\n return await this.create({\n userId,\n displayName: data.displayName || 'User',\n ...data,\n });\n }\n\n /**\n * User ID로 프로필 데이터 조회 (formatted)\n *\n * API 응답에 최적화된 형식으로 반환\n */\n async fetchProfileData(userId: number)\n {\n const profile = await this.readDb\n .select({\n profileId: userProfiles.id,\n displayName: userProfiles.displayName,\n firstName: userProfiles.firstName,\n lastName: userProfiles.lastName,\n avatarUrl: userProfiles.avatarUrl,\n bio: userProfiles.bio,\n locale: userProfiles.locale,\n timezone: userProfiles.timezone,\n website: userProfiles.website,\n location: userProfiles.location,\n company: userProfiles.company,\n jobTitle: userProfiles.jobTitle,\n metadata: userProfiles.metadata,\n createdAt: userProfiles.createdAt,\n updatedAt: userProfiles.updatedAt,\n })\n .from(userProfiles)\n .where(eq(userProfiles.userId, userId))\n .limit(1)\n .then(rows => rows[0] ?? null);\n\n if (!profile)\n {\n return null;\n }\n\n return {\n profileId: profile.profileId,\n displayName: profile.displayName,\n firstName: profile.firstName,\n lastName: profile.lastName,\n avatarUrl: profile.avatarUrl,\n bio: profile.bio,\n locale: profile.locale || 'en',\n timezone: profile.timezone || 'UTC',\n website: profile.website,\n location: profile.location,\n company: profile.company,\n jobTitle: profile.jobTitle,\n metadata: profile.metadata,\n createdAt: profile.createdAt,\n updatedAt: profile.updatedAt,\n };\n }\n}\n\n// Default instance export\nexport const userProfilesRepository = new UserProfilesRepository();","/**\n * Invitations Repository\n *\n * 사용자 초대 관리를 위한 Repository\n * BaseRepository를 상속받아 자동 트랜잭션 컨텍스트 지원 및 Read/Write 분리\n */\n\nimport { eq, and, lt, desc, sql } from 'drizzle-orm';\nimport { BaseRepository } from '@spfn/core/db';\n\nimport { users } from \"../entities/users\";\nimport { roles } from \"../entities/roles\";\nimport type { InvitationStatus } from \"../types\";\nimport { userInvitations, NewInvitation } from \"../entities/user-invitations\";\n\n/**\n * Invitations Repository 클래스\n */\nexport class InvitationsRepository extends BaseRepository\n{\n /**\n * ID로 초대 조회\n */\n async findById(id: number)\n {\n const result = await this.readDb\n .select()\n .from(userInvitations)\n .where(eq(userInvitations.id, id))\n .limit(1);\n\n return result[0] ?? null;\n }\n\n /**\n * Token으로 초대 조회\n */\n async findByToken(token: string)\n {\n const result = await this.readDb\n .select()\n .from(userInvitations)\n .where(eq(userInvitations.token, token))\n .limit(1);\n\n return result[0] ?? null;\n }\n\n /**\n * 이메일로 초대 조회 (pending 상태만)\n */\n async findPendingByEmail(email: string)\n {\n const result = await this.readDb\n .select()\n .from(userInvitations)\n .where(\n and(\n eq(userInvitations.email, email),\n eq(userInvitations.status, 'pending')\n )\n )\n .limit(1);\n\n return result[0] ?? null;\n }\n\n /**\n * 초대자 ID로 모든 초대 조회\n */\n async findByInvitedBy(invitedBy: number)\n {\n return this.readDb\n .select()\n .from(userInvitations)\n .where(eq(userInvitations.invitedBy, invitedBy));\n }\n\n /**\n * 상태별 초대 조회\n */\n async findByStatus(status: InvitationStatus)\n {\n return this.readDb\n .select()\n .from(userInvitations)\n .where(eq(userInvitations.status, status));\n }\n\n /**\n * 초대 생성\n */\n async create(data: NewInvitation)\n {\n return await this._create(userInvitations, {\n ...data,\n createdAt: new Date(),\n updatedAt: new Date(),\n });\n }\n\n /**\n * 초대 상태 업데이트\n */\n async updateStatus(\n id: number,\n status: InvitationStatus,\n timestamp?: Date\n ) {\n const updates: any = {\n status,\n updatedAt: new Date(),\n };\n\n if (timestamp)\n {\n if (status === 'accepted')\n {\n updates.acceptedAt = timestamp;\n }\n else if (status === 'cancelled')\n {\n updates.cancelledAt = timestamp;\n }\n }\n\n const result = await this.db\n .update(userInvitations)\n .set(updates)\n .where(eq(userInvitations.id, id))\n .returning();\n\n return result[0] ?? null;\n }\n\n /**\n * 초대 삭제\n */\n async deleteById(id: number)\n {\n const result = await this.db\n .delete(userInvitations)\n .where(eq(userInvitations.id, id))\n .returning();\n\n return result[0] ?? null;\n }\n\n /**\n * 만료된 초대 상태 업데이트\n */\n async updateExpiredInvitations(): Promise<number>\n {\n const now = new Date();\n\n const result = await this.db\n .update(userInvitations)\n .set({\n status: 'expired',\n updatedAt: now,\n })\n .where(\n and(\n eq(userInvitations.status, 'pending'),\n lt(userInvitations.expiresAt, now)\n )\n )\n .returning();\n\n return result.length;\n }\n\n /**\n * Token으로 초대 조회 (role, inviter 정보 포함)\n */\n async findByTokenWithDetails(token: string)\n {\n const result = await this.readDb\n .select({\n id: userInvitations.id,\n email: userInvitations.email,\n token: userInvitations.token,\n roleId: userInvitations.roleId,\n invitedBy: userInvitations.invitedBy,\n status: userInvitations.status,\n expiresAt: userInvitations.expiresAt,\n acceptedAt: userInvitations.acceptedAt,\n cancelledAt: userInvitations.cancelledAt,\n metadata: userInvitations.metadata,\n createdAt: userInvitations.createdAt,\n updatedAt: userInvitations.updatedAt,\n role: {\n id: roles.id,\n name: roles.name,\n displayName: roles.displayName,\n },\n inviter: {\n id: users.id,\n email: users.email,\n },\n })\n .from(userInvitations)\n .innerJoin(roles, eq(userInvitations.roleId, roles.id))\n .innerJoin(users, eq(userInvitations.invitedBy, users.id))\n .where(eq(userInvitations.token, token))\n .limit(1);\n\n return result[0] ?? null;\n }\n\n /**\n * 초대 목록 조회 (filtering + pagination + JOIN)\n */\n async list(params: {\n status?: InvitationStatus;\n invitedBy?: number;\n page?: number;\n limit?: number;\n }) {\n const { status, invitedBy, page = 1, limit = 20 } = params;\n const offset = (page - 1) * limit;\n\n // Build where conditions\n const conditions = [];\n if (status)\n {\n conditions.push(eq(userInvitations.status, status));\n }\n if (invitedBy)\n {\n conditions.push(eq(userInvitations.invitedBy, invitedBy));\n }\n\n const whereClause = conditions.length > 0 ? and(...conditions) : undefined;\n\n // Get total count\n const countResult = await this.readDb\n .select({ count: sql<number>`count(*)` })\n .from(userInvitations)\n .where(whereClause);\n\n const total = Number(countResult[0]?.count || 0);\n\n // Get paginated results with joins\n const results = await this.readDb\n .select({\n id: userInvitations.id,\n email: userInvitations.email,\n token: userInvitations.token,\n roleId: userInvitations.roleId,\n invitedBy: userInvitations.invitedBy,\n status: userInvitations.status,\n expiresAt: userInvitations.expiresAt,\n acceptedAt: userInvitations.acceptedAt,\n cancelledAt: userInvitations.cancelledAt,\n metadata: userInvitations.metadata,\n createdAt: userInvitations.createdAt,\n updatedAt: userInvitations.updatedAt,\n role: {\n id: roles.id,\n name: roles.name,\n displayName: roles.displayName,\n },\n inviter: {\n id: users.id,\n email: users.email,\n },\n })\n .from(userInvitations)\n .innerJoin(roles, eq(userInvitations.roleId, roles.id))\n .innerJoin(users, eq(userInvitations.invitedBy, users.id))\n .where(whereClause)\n .orderBy(desc(userInvitations.createdAt))\n .limit(limit)\n .offset(offset);\n\n return {\n invitations: results,\n total,\n page,\n limit,\n totalPages: Math.ceil(total / limit),\n };\n }\n\n /**\n * 초대 업데이트 (일반 업데이트 - 모든 필드 가능)\n */\n async updateById(id: number, data: Partial<NewInvitation>)\n {\n const result = await this.db\n .update(userInvitations)\n .set({\n ...data,\n updatedAt: new Date(),\n })\n .where(eq(userInvitations.id, id))\n .returning();\n\n return result[0] ?? null;\n }\n\n /**\n * 초대 재전송 (status와 expiresAt 동시 업데이트)\n */\n async resend(id: number, newExpiresAt: Date)\n {\n const result = await this.db\n .update(userInvitations)\n .set({\n status: 'pending',\n expiresAt: newExpiresAt,\n updatedAt: new Date(),\n })\n .where(eq(userInvitations.id, id))\n .returning();\n\n return result[0] ?? null;\n }\n\n /**\n * 초대 취소 (status, metadata 동시 업데이트)\n */\n async cancel(\n id: number,\n cancelledBy: number,\n reason?: string,\n currentMetadata?: Record<string, any> | null\n ) {\n const newMetadata = currentMetadata\n ? { ...currentMetadata, cancelReason: reason, cancelledBy }\n : { cancelReason: reason, cancelledBy };\n\n const result = await this.db\n .update(userInvitations)\n .set({\n status: 'cancelled',\n cancelledAt: new Date(),\n metadata: newMetadata,\n updatedAt: new Date(),\n })\n .where(eq(userInvitations.id, id))\n .returning();\n\n return result[0] ?? null;\n }\n}\n\n// Default instance export\nexport const invitationsRepository = new InvitationsRepository();","/**\n * @spfn/auth - Repositories\n *\n * Repository layer for data access with automatic Read/Write splitting\n * and transaction context support through BaseRepository pattern\n */\n\nexport * from './users.repository';\nexport * from './keys.repository';\nexport * from './verification-codes.repository';\nexport * from './roles.repository';\nexport * from './permissions.repository';\nexport * from './role-permissions.repository';\nexport * from './user-permissions.repository';\nexport * from './user-profiles.repository';\nexport * from './invitations.repository';","/**\n * @spfn/auth - Role Service\n *\n * Role management functions for runtime role creation and modification\n */\n\nimport {\n rolesRepository,\n permissionsRepository,\n rolePermissionsRepository,\n} from '../repositories';\nimport type { Role } from '../entities/roles';\n\n/**\n * Create a new custom role\n *\n * @param data - Role configuration\n * @returns Created role\n * @throws Error if role name already exists\n *\n * @example\n * ```typescript\n * const role = await createRole({\n * name: 'content-creator',\n * displayName: 'Content Creator',\n * description: 'Can create and publish content',\n * priority: 20,\n * permissionIds: [1n, 2n, 3n],\n * });\n * ```\n */\nexport async function createRole(data: {\n name: string;\n displayName: string;\n description?: string;\n priority?: number;\n permissionIds?: number[];\n}): Promise<Role>\n{\n // Check for duplicate name\n const existing = await rolesRepository.findByName(data.name);\n\n if (existing)\n {\n throw new Error(`Role with name '${data.name}' already exists`);\n }\n\n // Create role\n const newRole = await rolesRepository.create({\n name: data.name,\n displayName: data.displayName,\n description: data.description || null,\n priority: data.priority ?? 10,\n isSystem: false, // Custom roles are never system roles\n isBuiltin: false,\n isActive: true,\n });\n\n // Assign permissions if provided\n if (data.permissionIds && data.permissionIds.length > 0)\n {\n const mappings = data.permissionIds.map(permId => ({\n roleId: newRole.id,\n permissionId: Number(permId),\n }));\n\n await rolePermissionsRepository.createMany(mappings);\n }\n\n console.log(`[Auth] ✅ Created custom role: ${data.name}`);\n\n return newRole;\n}\n\n/**\n * Update an existing role\n *\n * @param roleId - Role ID\n * @param data - Update data\n * @returns Updated role\n * @throws Error if role is built-in (cannot modify)\n *\n * @example\n * ```typescript\n * await updateRole(1n, {\n * displayName: 'Senior Content Creator',\n * priority: 25,\n * });\n * ```\n */\nexport async function updateRole(\n roleId: number,\n data: {\n displayName?: string;\n description?: string;\n priority?: number;\n isActive?: boolean;\n }\n): Promise<Role>\n{\n const roleIdNum = Number(roleId);\n\n // Get role\n const role = await rolesRepository.findById(roleIdNum);\n\n if (!role)\n {\n throw new Error('Role not found');\n }\n\n // Cannot modify built-in role priority\n if (role.isBuiltin && data.priority !== undefined)\n {\n throw new Error('Cannot modify priority of built-in roles');\n }\n\n // Update role\n const updated = await rolesRepository.updateById(roleIdNum, data);\n\n if (!updated)\n {\n throw new Error('Failed to update role');\n }\n\n return updated;\n}\n\n/**\n * Delete a role\n *\n * @param roleId - Role ID\n * @throws Error if role is built-in or system role\n *\n * @example\n * ```typescript\n * await deleteRole(5n); // Delete custom role\n * ```\n */\nexport async function deleteRole(roleId: number): Promise<void>\n{\n const roleIdNum = Number(roleId);\n\n // Get role\n const role = await rolesRepository.findById(roleIdNum);\n\n if (!role)\n {\n throw new Error('Role not found');\n }\n\n // Cannot delete built-in roles\n if (role.isBuiltin)\n {\n throw new Error(`Cannot delete built-in role: ${role.name}`);\n }\n\n // Cannot delete system roles (optional protection)\n if (role.isSystem)\n {\n throw new Error(`Cannot delete system role: ${role.name}. Deactivate it instead.`);\n }\n\n // Delete role (cascade will remove role_permissions)\n await rolesRepository.deleteById(roleIdNum);\n\n console.log(`[Auth] 🗑️ Deleted role: ${role.name}`);\n}\n\n/**\n * Add permission to role\n *\n * @param roleId - Role ID\n * @param permissionId - Permission ID\n *\n * @example\n * ```typescript\n * await addPermissionToRole(1n, 5n);\n * ```\n */\nexport async function addPermissionToRole(roleId: number, permissionId: number): Promise<void>\n{\n const roleIdNum = Number(roleId);\n const permissionIdNum = Number(permissionId);\n\n // Check if mapping already exists\n const existingMappings = await rolePermissionsRepository.findByRoleId(roleIdNum);\n const alreadyExists = existingMappings.some(m => m.permissionId === permissionIdNum);\n\n if (alreadyExists)\n {\n return; // Already exists\n }\n\n // Create mapping\n await rolePermissionsRepository.create({\n roleId: roleIdNum,\n permissionId: permissionIdNum,\n });\n}\n\n/**\n * Remove permission from role\n *\n * @param roleId - Role ID\n * @param permissionId - Permission ID\n *\n * @example\n * ```typescript\n * await removePermissionFromRole(1n, 5n);\n * ```\n */\nexport async function removePermissionFromRole(roleId: number, permissionId: number): Promise<void>\n{\n const roleIdNum = Number(roleId);\n const permissionIdNum = Number(permissionId);\n\n await rolePermissionsRepository.deleteByRoleIdAndPermissionId(roleIdNum, permissionIdNum);\n}\n\n/**\n * Set permissions for a role (replaces all existing permissions)\n *\n * @param roleId - Role ID\n * @param permissionIds - Array of permission IDs\n *\n * @example\n * ```typescript\n * await setRolePermissions(1n, [1n, 2n, 3n]);\n * ```\n */\nexport async function setRolePermissions(roleId: number, permissionIds: number[]): Promise<void>\n{\n const roleIdNum = Number(roleId);\n const permissionIdNums = permissionIds.map(id => Number(id));\n\n await rolePermissionsRepository.setPermissionsForRole(roleIdNum, permissionIdNums);\n}\n\n/**\n * Get all roles\n *\n * @param includeInactive - Include inactive roles\n * @returns Array of roles\n *\n * @example\n * ```typescript\n * const roles = await getAllRoles();\n * ```\n */\nexport async function getAllRoles(includeInactive = false): Promise<Role[]>\n{\n if (includeInactive)\n {\n return await rolesRepository.findAll();\n }\n\n return await rolesRepository.findActive();\n}\n\n/**\n * Get role by name\n *\n * @param name - Role name\n * @returns Role or null\n *\n * @example\n * ```typescript\n * const role = await getRoleByName('admin');\n * ```\n */\nexport async function getRoleByName(name: string): Promise<Role | null>\n{\n return await rolesRepository.findByName(name);\n}\n\n/**\n * Get role permissions\n *\n * @param roleId - Role ID\n * @returns Array of permission names\n *\n * @example\n * ```typescript\n * const perms = await getRolePermissions(1n);\n * // ['user:read', 'user:write']\n * ```\n */\nexport async function getRolePermissions(roleId: number): Promise<string[]>\n{\n const roleIdNum = Number(roleId);\n\n // Get role-permission mappings\n const mappings = await rolePermissionsRepository.findByRoleId(roleIdNum);\n\n if (mappings.length === 0)\n {\n return [];\n }\n\n // Get permissions by IDs\n const permissionIds = mappings.map(m => m.permissionId);\n const perms = await Promise.all(\n permissionIds.map(id => permissionsRepository.findById(id))\n );\n\n // Filter out nulls and return names\n return perms\n .filter((p) => p !== null)\n .map(p => p.name);\n}","/**\n * @spfn/auth/server\n *\n * Server-side Only Module\n * 서버 전용 모듈 (서버 컴포넌트 + 백엔드)\n *\n * Includes:\n * - Routes (auth endpoints)\n * - Repositories (user, verification-code)\n * - Helpers (jwt, password)\n * - Middleware (authenticate, requirePermissions, requireRole)\n * - Services (auth, verification, key, user, rbac, permission, role)\n * - RBAC (roles, permissions, types)\n * - Setup functions\n *\n * @note This module should only be imported in server-side code\n */\n\n// ============================================================================\n// Router\n// ============================================================================\nimport '@spfn/auth/config';\n\n/**\n * Auth router for explicit registration\n *\n * @example\n * ```typescript\n * import { authRouter } from '@spfn/auth';\n * import { defineRouter } from '@spfn/core/route';\n *\n * export const appRouter = defineRouter({\n * auth: authRouter, // Mounted at /_auth/*\n * // ... other routes\n * });\n * ```\n */\nexport { mainAuthRouter as authRouter } from './server/routes/index.js';\n\n// ============================================================================\n// Services (Business Logic)\n// ============================================================================\n\nexport * from './server/services/index';\n\n// ============================================================================\n// Repositories (DB access)\n// ============================================================================\n\nexport * from './server/repositories/index';\n\n// ============================================================================\n// Helpers (JWT, Password)\n// ============================================================================\n\nexport * from './server/helpers/index';\n\n// ============================================================================\n// Middleware\n// ============================================================================\n\nexport * from './server/middleware/index';\nexport * from './server/entities';\n\n// ============================================================================\n// Types, Constants & Schemas\n// ============================================================================\n\nexport * from './server/types';\nexport * from './server/routes/schema'; // TypeBox schemas for validation\nexport * from './server/lib';\nexport * from './server/logger';\n\n// ============================================================================\n// Lifecycle Hooks\n// ============================================================================\n\nexport { createAuthLifecycle } from './server/lifecycle';","/**\n * @spfn/auth - Main Router\n *\n * Combines all auth-related routes into a single router\n */\n\nimport { defineRouter } from '@spfn/core/route';\nimport { authRouter } from './auth';\nimport { invitationRouter } from './invitations';\nimport { userRouter } from './users';\n\n/**\n * Main auth router\n * Exports all authentication-related routes\n *\n * Routes:\n * - Auth: /_auth/exists, /_auth/codes, /_auth/login, /_auth/logout, etc.\n * - Invitations: /_auth/invitations/*\n * - Users: /_auth/users/*\n */\nexport const mainAuthRouter = defineRouter({\n // Flatten all routes at root level\n ...authRouter.routes,\n ...invitationRouter.routes,\n ...userRouter.routes,\n});\n\n// For backward compatibility\nexport default mainAuthRouter;","/**\n * @spfn/auth - Auth Routes\n *\n * Thin route handlers that delegate to services\n */\n\nimport { EmailSchema, PhoneSchema, PasswordSchema, TargetTypeSchema, VerificationPurposeSchema } from \"../schema\";\nimport { getAuth, getUser } from '../../helpers';\nimport { KEY_ALGORITHM } from '../../types';\nimport {\n changePasswordService,\n checkAccountExistsService,\n loginService,\n logoutService,\n registerService,\n rotateKeyService,\n sendVerificationCodeService,\n verifyCodeService,\n getAuthSessionService\n} from '../../services';\nimport { Type } from '@sinclair/typebox';\nimport { Transactional } from '@spfn/core/db';\nimport { defineRouter, route } from '@spfn/core/route';\n\n/**\n * POST /_auth/exists - Check if account exists\n * Checks if an email or phone number is already registered\n */\nexport const checkAccountExists = route.post('/_auth/exists')\n .input({\n body: Type.Union([\n Type.Object({ email: EmailSchema }),\n Type.Object({ phone: PhoneSchema }),\n ])\n })\n .skip(['auth'])\n .handler(async (c) =>\n {\n const { body } = await c.data();\n return await checkAccountExistsService(body)\n });\n\n/**\n * POST /_auth/codes - Send verification code\n * Sends a 6-digit verification code to email or phone\n */\nexport const sendVerificationCode = route.post('/_auth/codes')\n .input({\n body: Type.Object({\n target: Type.String({\n description: 'Email address or phone number in E.164 format'\n }),\n targetType: TargetTypeSchema,\n purpose: VerificationPurposeSchema,\n })\n })\n .skip(['auth'])\n .handler(async (c) =>\n {\n const { body } = await c.data();\n return await sendVerificationCodeService(body)\n });\n\n/**\n * POST /_auth/codes/verify - Verify code (without creating account)\n * Validates verification code, returns a temporary token\n */\nexport const verifyCode = route.post('/_auth/codes/verify')\n .input({\n body: Type.Object({\n target: Type.String({\n description: 'Email address or phone number'\n }),\n targetType: TargetTypeSchema,\n code: Type.String({\n minLength: 6,\n maxLength: 6,\n pattern: '^[0-9]{6}$',\n description: '6-digit verification code'\n }),\n purpose: VerificationPurposeSchema,\n })\n })\n .skip(['auth'])\n .handler(async (c) =>\n {\n const { body } = await c.data();\n return await verifyCodeService(body)\n });\n\n/**\n * POST /_auth/register - Register new user\n * Register with email/phone and password, includes public key\n */\nexport const register = route.post('/_auth/register')\n .input({\n body: Type.Object({\n email: Type.Optional(EmailSchema),\n phone: Type.Optional(PhoneSchema),\n verificationToken: Type.String({\n description: 'Verification token obtained from /verify-code endpoint'\n }),\n password: PasswordSchema,\n }, {\n minProperties: 3, // email/phone + verificationToken + password\n description: 'Email or phone must be provided with verification token'\n })\n })\n .interceptor({\n body: Type.Object({\n publicKey: Type.String({ description: 'Client public key' }),\n keyId: Type.String({ description: 'Key identifier' }),\n fingerprint: Type.String({ description: 'Key fingerprint' }),\n algorithm: Type.Union(KEY_ALGORITHM.map(algo => Type.Literal(algo)), { description: 'Signature algorithm' }),\n })\n })\n .use([Transactional()])\n .skip(['auth'])\n .handler(async (c) =>\n {\n const { body } = await c.data();\n return await registerService(body)\n });\n\n/**\n * POST /_auth/login - User login\n * Authenticate user with email/phone and password\n * Replaces existing key with new one\n */\nexport const login = route.post('/_auth/login')\n .input({\n body: Type.Object({\n email: Type.Optional(EmailSchema),\n phone: Type.Optional(PhoneSchema),\n password: Type.String({\n minLength: 1,\n description: 'User password'\n }),\n }, {\n minProperties: 2, // email/phone + password\n description: 'Email or phone must be provided with password'\n })\n })\n .interceptor({\n body: Type.Object({\n publicKey: Type.String({ description: 'Client public key' }),\n keyId: Type.String({ description: 'Key identifier' }),\n fingerprint: Type.String({ description: 'Key fingerprint' }),\n algorithm: Type.Union(KEY_ALGORITHM.map(algo => Type.Literal(algo)), { description: 'Signature algorithm' }),\n oldKeyId: Type.Optional(Type.String({ description: 'Previous key ID for rotation' })),\n })\n })\n .use([Transactional()])\n .skip(['auth'])\n .handler(async (c) =>\n {\n const { body } = await c.data();\n return await loginService(body)\n });\n\n// ===== Authenticated Routes Below =====\n\n/**\n * POST /_auth/logout - Logout user\n * Revokes current key (requires authentication)\n */\nexport const logout = route.post('/_auth/logout')\n .handler(async (c) =>\n {\n const auth = getAuth(c);\n\n // If no auth (expired/invalid session), logout is still considered successful\n if (!auth)\n {\n return c.noContent();\n }\n\n const { keyId, userId } = auth;\n await logoutService({ userId: Number(userId), keyId });\n return c.noContent();\n });\n\n/**\n * POST /_auth/keys/rotate - Rotate key\n * Replace current key with new one (requires authentication)\n */\nexport const rotateKey = route.post('/_auth/keys/rotate')\n .interceptor({\n body: Type.Object({\n publicKey: Type.String({ description: 'New public key' }),\n keyId: Type.String({ description: 'New key identifier' }),\n fingerprint: Type.String({ description: 'New key fingerprint' }),\n algorithm: Type.Union(KEY_ALGORITHM.map(algo => Type.Literal(algo)), { description: 'Signature algorithm' }),\n })\n })\n .use([Transactional()])\n .handler(async (c) =>\n {\n const { body } = await c.data();\n const { keyId: oldKeyId, userId } = getAuth(c);\n\n return await rotateKeyService({\n userId: Number(userId),\n oldKeyId,\n newKeyId: body.keyId,\n newPublicKey: body.publicKey,\n fingerprint: body.fingerprint,\n algorithm: body.algorithm,\n })\n });\n\n/**\n * PUT /_auth/password - Change user password\n * Allows authenticated users to change their password\n * Requires current password for verification\n */\nexport const changePassword = route.put('/_auth/password')\n .input({\n body: Type.Object({\n currentPassword: Type.String({\n minLength: 1,\n description: 'Current password for verification'\n }),\n newPassword: PasswordSchema,\n })\n })\n .handler(async (c) =>\n {\n const { body } = await c.data();\n const user = getUser(c);\n\n await changePasswordService({\n userId: user.id,\n currentPassword: body.currentPassword,\n newPassword: body.newPassword,\n passwordHash: user.passwordHash || undefined,\n });\n\n return c.noContent();\n });\n\n/**\n * GET /_auth/session - Get authentication session\n * Returns authentication and authorization information including:\n * - Minimal user info (id, email, verification status)\n * - Role\n * - Permissions\n *\n * Lightweight endpoint for auth checks and guards\n * Does not include profile data\n *\n * Requires authentication\n */\nexport const getAuthSession = route.get('/_auth/session')\n .handler(async (c) =>\n {\n const { userId } = getAuth(c);\n return await getAuthSessionService(userId)\n });\n\n// Export router\nexport const authRouter = defineRouter({\n checkAccountExists: checkAccountExists,\n sendVerificationCode: sendVerificationCode,\n verifyCode: verifyCode,\n register: register,\n login: login,\n logout: logout,\n rotateKey: rotateKey,\n changePassword: changePassword,\n getAuthSession: getAuthSession,\n});\n\n// For backward compatibility with file-based routing (temporary)\nexport default authRouter;","/**\n * @spfn/auth - Password Helpers\n *\n * Password hashing and verification using bcrypt\n *\n * Security:\n * - Adaptive hashing (configurable rounds)\n * - Automatic salt generation (per-password)\n * - Constant-time comparison (timing attack protection)\n * - Rainbow table protection\n */\n\nimport bcrypt from 'bcryptjs';\nimport { env } from '@spfn/auth/config';\nimport { createPasswordParser } from '@spfn/core/env';\n\n/**\n * Hash a plain text password using bcrypt\n *\n * Algorithm:\n * 1. Generate random salt (128-bit)\n * 2. Apply bcrypt key derivation (2^rounds iterations)\n * 3. Return $2b$rounds$[salt][hash] (60 chars)\n *\n * Salt rounds are configured via SPFN_AUTH_BCRYPT_SALT_ROUNDS:\n * - 10 rounds: ~100ms (default, balanced)\n * - 12 rounds: ~400ms (more secure, slower)\n * - 14 rounds: ~1600ms (very secure, too slow for most apps)\n *\n * @param password - Plain text password to hash\n * @returns Bcrypt hash string (includes salt)\n * @throws Error if password is empty or invalid\n *\n * @example\n * ```typescript\n * const hash = await hashPassword('mySecurePassword123');\n * // Returns: \"$2b$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy\"\n * ```\n */\nexport async function hashPassword(password: string): Promise<string>\n{\n if (!password || password.length === 0)\n {\n throw new Error('Password cannot be empty');\n }\n\n return bcrypt.hash(password, env.SPFN_AUTH_BCRYPT_SALT_ROUNDS);\n}\n\n/**\n * Verify a password against a bcrypt hash\n *\n * Uses constant-time comparison to prevent timing attacks\n * Automatically extracts salt from hash for verification\n *\n * @param password - Plain text password to verify\n * @param hash - Bcrypt hash string (from hashPassword)\n * @returns True if password matches hash\n * @throws Error if inputs are invalid\n *\n * @example\n * ```typescript\n * const isValid = await verifyPassword(\n * 'mySecurePassword123',\n * '$2b$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy'\n * );\n * // Returns: true\n * ```\n */\nexport async function verifyPassword(password: string, hash: string): Promise<boolean>\n{\n if (!password || password.length === 0)\n {\n throw new Error('Password cannot be empty');\n }\n\n if (!hash || hash.length === 0)\n {\n throw new Error('Hash cannot be empty');\n }\n\n return bcrypt.compare(password, hash);\n}\n\n/**\n * Password strength validator (uses core validator internally)\n *\n * Uses @spfn/core/env/validator for consistent validation logic.\n */\nconst passwordValidator = createPasswordParser({\n minLength: 8,\n requireUppercase: true,\n requireLowercase: true,\n requireNumber: true,\n requireSpecial: true,\n});\n\n/**\n * Validate password strength\n *\n * Requirements:\n * - Minimum 8 characters\n * - At least one uppercase letter\n * - At least one lowercase letter\n * - At least one number\n * - At least one special character\n *\n * @param password - Password to validate\n * @returns Validation result with error messages\n *\n * @example\n * ```typescript\n * const result = validatePasswordStrength('weak');\n * // Returns: { valid: false, errors: ['Too short', 'Missing uppercase', ...] }\n *\n * const result = validatePasswordStrength('SecurePass123!');\n * // Returns: { valid: true, errors: [] }\n * ```\n */\nexport function validatePasswordStrength(password: string): {\n valid: boolean;\n errors: string[];\n}\n{\n try\n {\n passwordValidator(password);\n return {\n valid: true,\n errors: [],\n };\n }\n catch (error)\n {\n const message = error instanceof Error ? error.message : String(error);\n\n // Parse error message from validator\n // Format: \"Password validation failed: error1, error2, error3\"\n const errorMatch = message.match(/Password validation failed: (.+)/);\n\n if (errorMatch)\n {\n const errors = errorMatch[1].split(', ').map((err) =>\n {\n // Convert core validator messages to legacy format\n return err\n .replace(/^Must be at least (\\d+) characters$/, 'Password must be at least $1 characters')\n .replace(/^Must contain at least one uppercase letter$/, 'Password must contain at least one uppercase letter')\n .replace(/^Must contain at least one lowercase letter$/, 'Password must contain at least one lowercase letter')\n .replace(/^Must contain at least one number$/, 'Password must contain at least one number')\n .replace(/^Must contain at least one special character$/, 'Password must contain at least one special character');\n });\n\n return {\n valid: false,\n errors,\n };\n }\n\n // Fallback for unexpected error format\n return {\n valid: false,\n errors: [message],\n };\n }\n}","/**\n * @spfn/auth - JWT Helpers\n *\n * JWT token generation and verification\n * Supports both server-signed (legacy) and client-signed (asymmetric) tokens\n *\n * Architecture:\n * - Legacy: Server signs/verifies with SPFN_AUTH_JWT_SECRET (symmetric HMAC)\n * - New: Client signs with privateKey, server verifies with publicKey (asymmetric)\n */\n\nimport jwt, { type SignOptions } from 'jsonwebtoken';\nimport crypto from 'crypto';\nimport { env } from '@spfn/auth/config';\nimport { type KeyAlgorithmType } from '../types';\n\nexport interface SessionPayload\n{\n userId: string;\n keyId?: string;\n}\n\nexport interface TokenPayload extends SessionPayload\n{\n exp?: number;\n iat?: number;\n iss?: string;\n timestamp?: number;\n [key: string]: any;\n}\n\n/**\n * Generate a JWT token (legacy server-signed)\n *\n * @deprecated Use client-side signing with private keys instead\n * This method uses symmetric HMAC which requires sharing the secret\n *\n * @param payload - Token payload\n * @returns JWT token string\n */\nexport function generateToken(payload: SessionPayload): string\n{\n return jwt.sign(payload, env.SPFN_AUTH_JWT_SECRET, {\n expiresIn: env.SPFN_AUTH_JWT_EXPIRES_IN,\n } as SignOptions);\n}\n\n/**\n * Verify and decode a JWT token (legacy server-signed)\n *\n * @deprecated Use verifyClientToken for client-signed tokens\n * This method uses symmetric HMAC verification\n *\n * @param token - JWT token to verify\n * @returns Decoded payload\n * @throws Error if verification fails\n */\nexport function verifyToken(token: string): TokenPayload\n{\n return jwt.verify(token, env.SPFN_AUTH_JWT_SECRET) as TokenPayload;\n}\n\n/**\n * Verify client-signed JWT token with public key (DER format)\n *\n * Flow:\n * 1. Decode Base64 DER to Buffer\n * 2. Create KeyObject from DER\n * 3. Verify JWT signature with public key\n * 4. Validate issuer claim\n *\n * @param token - JWT token signed by client's private key\n * @param publicKeyB64 - Base64 encoded DER public key (SPKI format)\n * @param algorithm - Algorithm used for signing (ES256 or RS256)\n * @returns Decoded token payload\n * @throws Error if verification fails\n *\n * @example\n * ```typescript\n * const payload = verifyClientToken(\n * token,\n * 'MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE...',\n * 'ES256'\n * );\n * ```\n */\nexport function verifyClientToken(\n token: string,\n publicKeyB64: string,\n algorithm: KeyAlgorithmType\n): TokenPayload\n{\n // Convert Base64 DER to key object\n const publicKeyDER = Buffer.from(publicKeyB64, 'base64');\n const publicKeyObject = crypto.createPublicKey({\n key: publicKeyDER,\n format: 'der',\n type: 'spki',\n });\n\n let decoded;\n\n try\n {\n decoded = jwt.verify(token, publicKeyObject, {\n algorithms: [algorithm], // Prevent algorithm confusion attacks\n issuer: 'spfn-client', // Validate token issuer\n });\n }\n catch (error)\n {\n if (error instanceof jwt.TokenExpiredError)\n {\n throw new Error('Token has expired');\n }\n\n if (error instanceof jwt.JsonWebTokenError)\n {\n throw new Error('Invalid token signature');\n }\n\n throw new Error(`Token verification failed: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n\n // jwt.verify can return string, but we expect object payload\n if (typeof decoded === 'string')\n {\n throw new Error('Invalid token format: expected object payload');\n }\n\n return decoded as TokenPayload;\n}\n\n/**\n * Decode a JWT token without verification (for debugging)\n *\n * WARNING: Does not verify signature! Only use for debugging/logging.\n * Never trust decoded data without verification.\n *\n * @param token - JWT token to decode\n * @returns Decoded payload or null if invalid\n */\nexport function decodeToken(token: string): TokenPayload | null\n{\n try\n {\n return jwt.decode(token) as TokenPayload | null;\n }\n catch\n {\n return null;\n }\n}\n\n/**\n * Verify public key fingerprint matches\n *\n * Used during registration/login to ensure the public key wasn't tampered with\n * during transmission.\n *\n * Security:\n * - Client sends: publicKey + fingerprint\n * - Server calculates: SHA-256(publicKey)\n * - Server compares: calculated === received\n *\n * @param publicKeyB64 - Base64 encoded DER public key\n * @param expectedFingerprint - SHA-256 hex fingerprint (64 chars)\n * @returns True if fingerprint matches\n *\n * @example\n * ```typescript\n * const isValid = verifyKeyFingerprint(\n * publicKey,\n * 'a1b2c3d4e5f6...' // 64-char hex string\n * );\n * if (!isValid) {\n * throw new Error('Public key fingerprint mismatch');\n * }\n * ```\n */\nexport function verifyKeyFingerprint(\n publicKeyB64: string,\n expectedFingerprint: string\n): boolean\n{\n try\n {\n const publicKeyDER = Buffer.from(publicKeyB64, 'base64');\n const fingerprint = crypto\n .createHash('sha256')\n .update(publicKeyDER)\n .digest('hex');\n\n return fingerprint === expectedFingerprint;\n }\n catch (error)\n {\n console.error('Failed to verify key fingerprint:', error);\n return false;\n }\n}","/**\n * Auth Context Helpers\n *\n * Helper functions to access authenticated user data from route context\n */\n\nimport type { Context } from 'hono';\nimport type { AuthContext } from '../middleware';\n\n/**\n * Get auth context from route context\n *\n * Accepts both raw Hono Context and RouteContext with raw property\n *\n * @example\n * ```typescript\n * // With RouteContext (RPC routes)\n * app.bind(logoutContract, [authenticate], async (c) => {\n * const { user, userId, keyId } = getAuth(c);\n * // Use authenticated data...\n * });\n *\n * // With raw Context (middleware)\n * const auth = getAuth(c);\n * ```\n */\nexport function getAuth(c: Context | { raw: Context }): AuthContext\n{\n // Check if it's RouteContext with raw property\n if ('raw' in c && c.raw)\n {\n return c.raw.get('auth');\n }\n\n // Otherwise, it's raw Hono Context\n return (c as Context).get('auth');\n}\n\n/**\n * Get authenticated user from route context\n *\n * @example\n * ```typescript\n * app.bind(profileContract, [authenticate], async (c) => {\n * const user = getUser(c);\n * return c.success({ email: user.email });\n * });\n * ```\n */\nexport function getUser(c: Context | { raw: Context })\n{\n return getAuth(c).user;\n}\n\n/**\n * Get authenticated user ID from route context\n *\n * @example\n * ```typescript\n * app.bind(postsContract, [authenticate], async (c) => {\n * const userId = getUserId(c);\n * const posts = await findPosts({ authorId: userId });\n * });\n * ```\n */\nexport function getUserId(c: Context | { raw: Context }): string\n{\n return getAuth(c).userId;\n}\n\n/**\n * Get current key ID from route context\n *\n * @example\n * ```typescript\n * app.bind(rotateKeyContract, [authenticate], async (c) => {\n * const oldKeyId = getKeyId(c);\n * // Revoke old key...\n * });\n * ```\n */\nexport function getKeyId(c: Context | { raw: Context }): string\n{\n return getAuth(c).keyId;\n}","/**\n * @spfn/auth - Auth Service\n *\n * Core authentication logic: registration, login, logout, password management\n */\n\nimport { ValidationError } from '@spfn/core/errors';\nimport {\n InvalidCredentialsError,\n AccountDisabledError,\n AccountAlreadyExistsError,\n InvalidVerificationTokenError,\n VerificationTokenPurposeMismatchError,\n VerificationTokenTargetMismatchError,\n} from '@spfn/auth/errors';\n\nimport { type User } from \"../entities/users\";\nimport { usersRepository } from '../repositories';\nimport { type KeyAlgorithmType } from '../types';\nimport { hashPassword, verifyPassword } from '../helpers';\nimport { validateVerificationToken } from './verification.service';\nimport { registerPublicKeyService, revokeKeyService } from './key.service';\nimport { updateLastLoginService } from './user.service';\n\nexport interface CheckAccountExistsParams\n{\n email?: string;\n phone?: string;\n}\n\nexport interface CheckAccountExistsResult\n{\n exists: boolean;\n identifier: string;\n identifierType: 'email' | 'phone';\n}\n\nexport interface RegisterParams\n{\n email?: string;\n phone?: string;\n verificationToken: string;\n password: string;\n publicKey: string;\n keyId: string;\n fingerprint: string;\n algorithm?: KeyAlgorithmType;\n}\n\nexport interface RegisterResult\n{\n userId: string;\n email?: string;\n phone?: string;\n}\n\nexport interface LoginParams\n{\n email?: string;\n phone?: string;\n password: string;\n publicKey: string;\n keyId: string;\n fingerprint: string;\n oldKeyId?: string;\n algorithm?: KeyAlgorithmType;\n}\n\nexport interface LoginResult\n{\n userId: string;\n email?: string;\n phone?: string;\n passwordChangeRequired: boolean;\n}\n\nexport interface LogoutParams\n{\n userId: number;\n keyId: string;\n}\n\nexport interface ChangePasswordParams\n{\n userId: number;\n currentPassword: string;\n newPassword: string;\n passwordHash?: string; // Optional: pass user's password hash to avoid re-fetch\n}\n\n/**\n * Check if an account exists by email or phone\n */\nexport async function checkAccountExistsService(\n params: CheckAccountExistsParams\n): Promise<CheckAccountExistsResult>\n{\n const { email, phone } = params;\n\n let identifier: string;\n let identifierType: 'email' | 'phone';\n let user: User | null;\n\n if (email)\n {\n identifier = email;\n identifierType = 'email';\n user = await usersRepository.findByEmail(email);\n }\n else if (phone)\n {\n identifier = phone;\n identifierType = 'phone';\n user = await usersRepository.findByPhone(phone);\n }\n else\n {\n throw new ValidationError({ message: 'Either email or phone must be provided' });\n }\n\n return {\n exists: !!user,\n identifier,\n identifierType,\n };\n}\n\n/**\n * Register a new user account\n */\nexport async function registerService(\n params: RegisterParams\n): Promise<RegisterResult>\n{\n const { email, phone, verificationToken, password, publicKey, keyId, fingerprint, algorithm } = params;\n\n // Validate verification token\n const tokenPayload = validateVerificationToken(verificationToken);\n if (!tokenPayload)\n {\n throw new InvalidVerificationTokenError();\n }\n\n // Verify that token purpose is registration\n if (tokenPayload.purpose !== 'registration')\n {\n throw new VerificationTokenPurposeMismatchError({ expected: 'registration', actual: tokenPayload.purpose });\n }\n\n // Verify that token target matches provided email/phone\n const providedTarget = email || phone;\n if (tokenPayload.target !== providedTarget)\n {\n throw new VerificationTokenTargetMismatchError();\n }\n\n // Verify that token targetType matches\n const providedTargetType = email ? 'email' : 'phone';\n if (tokenPayload.targetType !== providedTargetType)\n {\n throw new VerificationTokenTargetMismatchError();\n }\n\n // Check if user already exists\n const existingUser = await usersRepository.findByEmailOrPhone(email, phone);\n\n if (existingUser)\n {\n const identifierType = email ? 'email' : 'phone';\n throw new AccountAlreadyExistsError({ identifier: email || phone!, identifierType });\n }\n\n // Hash password\n const passwordHash = await hashPassword(password);\n\n // Get default user role\n const { getRoleByName } = await import('./role.service');\n const userRole = await getRoleByName('user');\n\n if (!userRole)\n {\n throw new Error('Default user role not found. Run initializeAuth() first.');\n }\n\n // Create user\n const newUser = await usersRepository.create({\n email: email || null,\n phone: phone || null,\n passwordHash,\n passwordChangeRequired: false,\n roleId: userRole.id,\n status: 'active',\n });\n\n // Register public key\n await registerPublicKeyService({\n userId: newUser.id,\n keyId,\n publicKey,\n fingerprint,\n algorithm,\n });\n\n return {\n userId: String(newUser.id),\n email: newUser.email || undefined,\n phone: newUser.phone || undefined,\n };\n}\n\n/**\n * Authenticate user and create session\n */\nexport async function loginService(\n params: LoginParams\n): Promise<LoginResult>\n{\n const { email, phone, password, publicKey, keyId, fingerprint, oldKeyId, algorithm } = params;\n\n // Find user\n const user = await usersRepository.findByEmailOrPhone(email, phone);\n\n if (!email && !phone)\n {\n throw new ValidationError({ message: 'Either email or phone must be provided' });\n }\n\n if (!user || !user.passwordHash)\n {\n throw new InvalidCredentialsError();\n }\n\n // Verify password\n const isValid = await verifyPassword(password, user.passwordHash);\n if (!isValid)\n {\n throw new InvalidCredentialsError();\n }\n\n // Check if user is active\n if (user.status !== 'active')\n {\n throw new AccountDisabledError({ status: user.status });\n }\n\n // Revoke old key if provided\n if (oldKeyId)\n {\n await revokeKeyService({\n userId: user.id,\n keyId: oldKeyId,\n reason: 'Replaced by new key on login',\n });\n }\n\n // Register new public key\n await registerPublicKeyService({\n userId: user.id,\n keyId,\n publicKey,\n fingerprint,\n algorithm,\n });\n\n // Update last login\n await updateLastLoginService(user.id);\n\n return {\n userId: String(user.id),\n email: user.email || undefined,\n phone: user.phone || undefined,\n passwordChangeRequired: user.passwordChangeRequired,\n };\n}\n\n/**\n * Logout user (revoke current key)\n */\nexport async function logoutService(\n params: LogoutParams\n): Promise<void>\n{\n const { userId, keyId } = params;\n\n await revokeKeyService({\n userId,\n keyId,\n reason: 'Revoked by logout',\n });\n}\n\n/**\n * Change user password\n */\nexport async function changePasswordService(\n params: ChangePasswordParams\n): Promise<void>\n{\n const { userId, currentPassword, newPassword, passwordHash: providedHash } = params;\n\n // Get user's password hash (either provided or fetch from DB)\n let passwordHash: string | null;\n if (providedHash)\n {\n passwordHash = providedHash;\n }\n else\n {\n const user = await usersRepository.findById(userId);\n if (!user)\n {\n throw new ValidationError({ message: 'User not found' });\n }\n passwordHash = user.passwordHash;\n }\n\n // Verify current password\n if (!passwordHash)\n {\n throw new ValidationError({ message: 'No password set for this account' });\n }\n\n const isValid = await verifyPassword(currentPassword, passwordHash);\n if (!isValid)\n {\n throw new InvalidCredentialsError({ message: 'Current password is incorrect' });\n }\n\n // Hash new password\n const newPasswordHash = await hashPassword(newPassword);\n\n // Update password and clear passwordChangeRequired flag\n await usersRepository.updatePassword(userId, newPasswordHash, true);\n}","/**\n * @spfn/auth - Verification Service\n *\n * Handles OTP code generation, validation, and delivery\n */\n\nimport { env } from '@spfn/auth/config';\nimport { InvalidVerificationCodeError } from '@spfn/auth/errors';\nimport jwt from 'jsonwebtoken';\nimport { authLogger } from '../logger';\nimport { verificationCodesRepository } from '../repositories';\nimport type { VerificationTargetType, VerificationPurpose } from '../routes/schema';\nimport { sendSMS } from './sms';\nimport { sendEmail } from './email';\nimport { getVerificationCodeTemplate } from './email/templates';\n\n/**\n * Verification token expiry (15 minutes)\n */\nconst VERIFICATION_TOKEN_EXPIRY = '15m';\n\n/**\n * Verification code expiry (5 minutes)\n */\nconst VERIFICATION_CODE_EXPIRY_MINUTES = 5;\n\n/**\n * Maximum verification attempts before code expires\n */\nconst MAX_VERIFICATION_ATTEMPTS = 5;\n\n/**\n * Verification token payload\n */\nexport interface VerificationTokenPayload\n{\n target: string;\n targetType: VerificationTargetType;\n purpose: VerificationPurpose;\n codeId: number;\n}\n\n/**\n * Generate a random 6-digit verification code\n *\n * @returns 6-digit code as string\n */\nexport function generateVerificationCode(): string\n{\n // Generate random 6-digit number (000000 - 999999)\n return Math.floor(Math.random() * 1000000)\n .toString()\n .padStart(6, '0');\n}\n\n/**\n * Store verification code in database\n *\n * @param target - Email or phone number\n * @param targetType - Type of target (email or phone)\n * @param code - 6-digit verification code\n * @param purpose - Purpose of verification\n * @returns Created verification code record\n */\nasync function storeVerificationCode(\n target: string,\n targetType: VerificationTargetType,\n code: string,\n purpose: VerificationPurpose\n)\n{\n // Calculate expiry time\n const expiresAt = new Date();\n expiresAt.setMinutes(expiresAt.getMinutes() + VERIFICATION_CODE_EXPIRY_MINUTES);\n\n // Invalidate previous codes for same target/purpose\n await verificationCodesRepository.invalidatePreviousCodes(target, purpose);\n\n // Create verification code record\n return await verificationCodesRepository.create({\n target,\n targetType,\n code,\n purpose,\n expiresAt,\n attempts: 0,\n });\n}\n\n/**\n * Validate verification code\n *\n * @param target - Email or phone number\n * @param code - 6-digit code to validate\n * @param purpose - Purpose of verification\n * @returns Validation result with code ID if valid\n */\nasync function validateVerificationCode(\n target: string,\n code: string,\n purpose: VerificationPurpose\n): Promise<{ valid: boolean; codeId?: number; error?: string }>\n{\n // Find the verification code\n const record = await verificationCodesRepository.findValidByTargetAndPurpose(target, purpose);\n\n if (!record)\n {\n return { valid: false, error: 'Invalid verification code' };\n }\n\n // Check if code matches\n if (record.code !== code)\n {\n // Increment attempt count\n await verificationCodesRepository.incrementAttempts(record.id);\n return { valid: false, error: 'Invalid verification code' };\n }\n\n // Check if code is already used\n if (record.usedAt)\n {\n return { valid: false, error: 'Verification code already used' };\n }\n\n // Check if code is expired\n if (new Date() > new Date(record.expiresAt))\n {\n return { valid: false, error: 'Verification code expired' };\n }\n\n // Check attempt count\n if (record.attempts >= MAX_VERIFICATION_ATTEMPTS)\n {\n return { valid: false, error: 'Too many attempts, please request a new code' };\n }\n\n return { valid: true, codeId: record.id };\n}\n\n/**\n * Mark verification code as used\n *\n * @param codeId - Verification code ID\n */\nasync function markCodeAsUsed(codeId: number): Promise<void>\n{\n await verificationCodesRepository.markAsUsed(codeId);\n}\n\n/**\n * Create verification token (JWT)\n *\n * @param payload - Token payload\n * @returns Signed JWT token\n */\nexport function createVerificationToken(payload: VerificationTokenPayload): string\n{\n return jwt.sign(payload, env.SPFN_AUTH_VERIFICATION_TOKEN_SECRET!, {\n expiresIn: VERIFICATION_TOKEN_EXPIRY,\n issuer: 'spfn-auth',\n audience: 'spfn-client',\n });\n}\n\n/**\n * Validate verification token (JWT)\n *\n * @param token - JWT token to validate\n * @returns Decoded payload if valid, null otherwise\n */\nexport function validateVerificationToken(token: string): VerificationTokenPayload | null\n{\n try\n {\n const decoded = jwt.verify(token, env.SPFN_AUTH_VERIFICATION_TOKEN_SECRET!, {\n issuer: 'spfn-auth',\n audience: 'spfn-client',\n });\n\n // Validate that decoded has required properties\n if (\n typeof decoded === 'object' &&\n decoded !== null &&\n 'target' in decoded &&\n 'targetType' in decoded &&\n 'purpose' in decoded &&\n 'codeId' in decoded\n )\n {\n return decoded as VerificationTokenPayload;\n }\n\n return null;\n }\n catch (error)\n {\n authLogger.service.error('Failed to validate verification token', { error });\n return null;\n }\n}\n\n/**\n * Send verification code via email\n *\n * @param email - Email address\n * @param code - 6-digit verification code\n * @param purpose - Purpose of verification\n */\nasync function sendVerificationEmail(\n email: string,\n code: string,\n purpose: string\n): Promise<void>\n{\n const { subject, text, html } = getVerificationCodeTemplate({\n code,\n purpose,\n expiresInMinutes: VERIFICATION_CODE_EXPIRY_MINUTES,\n });\n\n const result = await sendEmail({\n to: email,\n subject,\n text,\n html,\n purpose,\n });\n\n if (!result.success)\n {\n authLogger.email.error('Failed to send verification email', {\n email,\n purpose,\n error: result.error,\n });\n }\n}\n\n/**\n * Send verification code via SMS\n *\n * @param phone - Phone number in E.164 format\n * @param code - 6-digit verification code\n * @param purpose - Purpose of verification\n */\nasync function sendVerificationSMS(\n phone: string,\n code: string,\n purpose: string\n): Promise<void>\n{\n const message = `Your verification code is: ${code}`;\n\n const result = await sendSMS({\n phone,\n message,\n purpose,\n });\n\n if (!result.success)\n {\n authLogger.sms.error('Failed to send verification SMS', {\n phone,\n purpose,\n error: result.error,\n });\n }\n}\n\nexport interface SendVerificationCodeParams\n{\n target: string;\n targetType: VerificationTargetType;\n purpose: VerificationPurpose;\n}\n\nexport interface SendVerificationCodeResult\n{\n success: boolean;\n expiresAt: string;\n}\n\nexport interface VerifyCodeParams\n{\n target: string;\n targetType: VerificationTargetType;\n code: string;\n purpose: VerificationPurpose;\n}\n\nexport interface VerifyCodeResult\n{\n valid: boolean;\n verificationToken: string;\n}\n\n/**\n * Send verification code via email or SMS\n */\nexport async function sendVerificationCodeService(\n params: SendVerificationCodeParams\n): Promise<SendVerificationCodeResult>\n{\n const { target, targetType, purpose } = params;\n\n // Generate 6-digit verification code\n const code = generateVerificationCode();\n\n // Store code in database\n const codeRecord = await storeVerificationCode(target, targetType, code, purpose);\n\n // Send code via email or SMS\n if (targetType === 'email')\n {\n await sendVerificationEmail(target, code, purpose);\n }\n else\n {\n await sendVerificationSMS(target, code, purpose);\n }\n\n return {\n success: true,\n expiresAt: codeRecord.expiresAt.toISOString(),\n };\n}\n\n/**\n * Verify OTP code and return verification token\n */\nexport async function verifyCodeService(params: VerifyCodeParams)\n{\n const { target, targetType, code, purpose } = params;\n\n // Validate the verification code\n const validation = await validateVerificationCode(target, code, purpose);\n\n if (!validation.valid)\n {\n throw new InvalidVerificationCodeError({ message: validation.error || 'Invalid verification code' });\n }\n\n // Mark code as used\n await markCodeAsUsed(validation.codeId!);\n\n // Create verification token (15 min validity)\n const verificationToken = createVerificationToken({\n target,\n targetType,\n purpose,\n codeId: validation.codeId!,\n });\n\n return {\n valid: true,\n verificationToken,\n };\n}\n","/**\n * @spfn/auth - Centralized Logger\n *\n * All auth package loggers with consistent naming\n */\n\nimport { logger as rootLogger } from '@spfn/core/logger';\n\nexport const authLogger = {\n plugin: rootLogger.child('@spfn/auth:plugin'),\n middleware: rootLogger.child('@spfn/auth:middleware'),\n interceptor: {\n general: rootLogger.child('@spfn/auth:interceptor:general'),\n login: rootLogger.child('@spfn/auth:interceptor:login'),\n keyRotation: rootLogger.child('@spfn/auth:interceptor:key-rotation'),\n },\n service: rootLogger.child('@spfn/auth:service'),\n setup: rootLogger.child('@spfn/auth:setup'),\n email: rootLogger.child('@spfn/auth:email'),\n sms: rootLogger.child('@spfn/auth:sms'),\n};","/**\n * @spfn/auth - SMS Provider Management\n *\n * Manages SMS provider registration and fallback behavior\n */\n\nimport { authLogger } from '../../logger';\nimport type { SMSProvider, SendSMSParams, SendSMSResult } from './types';\n\n/**\n * Currently registered SMS provider\n */\nlet currentProvider: SMSProvider | null = null;\n\n/**\n * Fallback SMS provider (development mode - console only)\n */\nconst fallbackProvider: SMSProvider = {\n name: 'fallback',\n sendSMS: async (params: SendSMSParams): Promise<SendSMSResult> =>\n {\n authLogger.sms.debug('DEV MODE - SMS not actually sent', {\n phone: params.phone,\n message: params.message,\n purpose: params.purpose || 'N/A',\n });\n return {\n success: true,\n messageId: 'dev-mode-no-actual-sms',\n };\n },\n};\n\n/**\n * Register a custom SMS provider\n *\n * @param provider - Custom SMS provider implementation\n *\n * @example\n * ```typescript\n * import { registerSMSProvider } from '@spfn/auth/server/services/sms';\n *\n * const twilioProvider = {\n * name: 'twilio',\n * sendSMS: async (params) => {\n * // Twilio implementation\n * return { success: true, messageId: '...' };\n * }\n * };\n *\n * registerSMSProvider(twilioProvider);\n * ```\n */\nexport function registerSMSProvider(provider: SMSProvider): void\n{\n currentProvider = provider;\n authLogger.sms.info('Registered SMS provider', { name: provider.name });\n}\n\n/**\n * Get the current SMS provider\n *\n * @returns Current provider or fallback if none registered\n */\nexport function getSMSProvider(): SMSProvider\n{\n return currentProvider || fallbackProvider;\n}\n\n/**\n * Send SMS using the registered provider\n *\n * Falls back to development mode (console only) if no provider is registered\n *\n * @param params - SMS parameters\n * @returns Send result\n */\nexport async function sendSMS(params: SendSMSParams): Promise<SendSMSResult>\n{\n const provider = getSMSProvider();\n return await provider.sendSMS(params);\n}","/**\n * @spfn/auth - AWS SNS SMS Provider\n *\n * Default SMS provider implementation using AWS SNS\n *\n * @requires @aws-sdk/client-sns (peer dependency)\n */\n\nimport { env } from '@spfn/auth/config';\nimport { authLogger } from '../../logger';\nimport type { SMSProvider, SendSMSParams, SendSMSResult } from './types';\n\n/**\n * Validate phone number format (E.164)\n *\n * @param phone - Phone number to validate\n * @returns True if valid E.164 format\n */\nfunction isValidE164Phone(phone: string): boolean\n{\n // E.164 format: +[country code][number]\n // Example: +821012345678\n const e164Regex = /^\\+[1-9]\\d{1,14}$/;\n return e164Regex.test(phone);\n}\n\n/**\n * Create AWS SNS SMS provider\n *\n * @returns SMSProvider instance or null if @aws-sdk/client-sns not available\n */\nexport function createAWSSNSProvider(): SMSProvider | null\n{\n try\n {\n // Dynamic import to check if @aws-sdk/client-sns is available\n const { SNSClient, PublishCommand } = require('@aws-sdk/client-sns');\n\n return {\n name: 'aws-sns',\n sendSMS: async (params: SendSMSParams): Promise<SendSMSResult> =>\n {\n const { phone, message, purpose } = params;\n\n // Validate phone number format\n if (!isValidE164Phone(phone))\n {\n return {\n success: false,\n error: 'Invalid phone number format. Must be E.164 format (e.g., +821012345678)',\n };\n }\n\n // Check if AWS credentials are configured\n if (!env.SPFN_AUTH_AWS_SNS_ACCESS_KEY_ID)\n {\n return {\n success: false,\n error: 'AWS SNS credentials not configured. Set SPFN_AUTH_AWS_SNS_ACCESS_KEY_ID environment variable.',\n };\n }\n\n try\n {\n // Initialize SNS client\n const config: any = {\n region: env.SPFN_AUTH_AWS_REGION || 'ap-northeast-2',\n };\n\n if (env.SPFN_AUTH_AWS_SNS_ACCESS_KEY_ID && env.SPFN_AUTH_AWS_SNS_SECRET_ACCESS_KEY)\n {\n config.credentials = {\n accessKeyId: env.SPFN_AUTH_AWS_SNS_ACCESS_KEY_ID,\n secretAccessKey: env.SPFN_AUTH_AWS_SNS_SECRET_ACCESS_KEY,\n };\n }\n\n const client = new SNSClient(config);\n\n // Prepare SNS publish command\n const command = new PublishCommand({\n PhoneNumber: phone,\n Message: message,\n MessageAttributes: {\n 'AWS.SNS.SMS.SMSType': {\n DataType: 'String',\n StringValue: 'Transactional', // For OTP codes\n },\n ...(env.SPFN_AUTH_AWS_SNS_SENDER_ID && {\n 'AWS.SNS.SMS.SenderID': {\n DataType: 'String',\n StringValue: env.SPFN_AUTH_AWS_SNS_SENDER_ID,\n },\n }),\n },\n });\n\n // Send SMS\n const response = await client.send(command);\n\n authLogger.sms.info('SMS sent via AWS SNS', {\n phone,\n messageId: response.MessageId,\n purpose: purpose || 'N/A',\n });\n\n return {\n success: true,\n messageId: response.MessageId,\n };\n }\n catch (error)\n {\n const err = error as Error;\n authLogger.sms.error('Failed to send SMS via AWS SNS', {\n phone,\n error: err.message,\n });\n\n return {\n success: false,\n error: err.message || 'Failed to send SMS via AWS SNS',\n };\n }\n },\n };\n }\n catch (error)\n {\n // @aws-sdk/client-sns not installed\n return null;\n }\n}\n\n/**\n * AWS SNS Provider instance (lazy initialization)\n */\nexport const awsSNSProvider = createAWSSNSProvider();","/**\n * @spfn/auth - SMS Service\n *\n * SMS sending service with pluggable provider support\n *\n * Default provider: AWS SNS (if @aws-sdk/client-sns is installed)\n * Fallback: Development mode (console only)\n *\n * @example\n * ```typescript\n * // Using default provider (AWS SNS)\n * import { sendSMS } from '@spfn/auth/server/services/sms';\n *\n * await sendSMS({\n * phone: '+821012345678',\n * message: 'Your code is: 123456',\n * purpose: 'verification'\n * });\n * ```\n *\n * @example\n * ```typescript\n * // Register custom provider\n * import { registerSMSProvider, SMSProvider } from '@spfn/auth/server/services/sms';\n *\n * const twilioProvider: SMSProvider = {\n * name: 'twilio',\n * sendSMS: async (params) => {\n * // Your Twilio implementation\n * return { success: true, messageId: '...' };\n * }\n * };\n *\n * registerSMSProvider(twilioProvider);\n * ```\n */\n\nexport { sendSMS, registerSMSProvider, getSMSProvider } from './provider';\nexport type { SendSMSParams, SendSMSResult, SMSProvider } from './types';\nexport { createAWSSNSProvider, awsSNSProvider } from './aws-sns.provider';\n\n// Auto-register AWS SNS provider if available\nimport { awsSNSProvider } from './aws-sns.provider';\nimport { registerSMSProvider } from './provider';\n\nif (awsSNSProvider)\n{\n registerSMSProvider(awsSNSProvider);\n}","/**\n * @spfn/auth - Email Provider Management\n *\n * Manages email provider registration and fallback behavior\n */\n\nimport { authLogger } from '../../logger';\nimport type { EmailProvider, SendEmailParams, SendEmailResult } from './types';\n\n/**\n * Currently registered email provider\n */\nlet currentProvider: EmailProvider | null = null;\n\n/**\n * Fallback email provider (development mode - console only)\n */\nconst fallbackProvider: EmailProvider = {\n name: 'fallback',\n sendEmail: async (params: SendEmailParams): Promise<SendEmailResult> =>\n {\n authLogger.email.debug('DEV MODE - Email not actually sent', {\n to: params.to,\n subject: params.subject,\n purpose: params.purpose || 'N/A',\n textPreview: params.text?.substring(0, 100) || 'N/A',\n });\n return {\n success: true,\n messageId: 'dev-mode-no-actual-email',\n };\n },\n};\n\n/**\n * Register a custom email provider\n *\n * @param provider - Custom email provider implementation\n *\n * @example\n * ```typescript\n * import { registerEmailProvider } from '@spfn/auth/server/services/email';\n *\n * const sendgridProvider = {\n * name: 'sendgrid',\n * sendEmail: async (params) => {\n * // SendGrid implementation\n * return { success: true, messageId: '...' };\n * }\n * };\n *\n * registerEmailProvider(sendgridProvider);\n * ```\n */\nexport function registerEmailProvider(provider: EmailProvider): void\n{\n currentProvider = provider;\n authLogger.email.info('Registered email provider', { name: provider.name });\n}\n\n/**\n * Get the current email provider\n *\n * @returns Current provider or fallback if none registered\n */\nexport function getEmailProvider(): EmailProvider\n{\n return currentProvider || fallbackProvider;\n}\n\n/**\n * Send email using the registered provider\n *\n * Falls back to development mode (console only) if no provider is registered\n *\n * @param params - Email parameters\n * @returns Send result\n */\nexport async function sendEmail(params: SendEmailParams): Promise<SendEmailResult>\n{\n const provider = getEmailProvider();\n return await provider.sendEmail(params);\n}\n","/**\n * @spfn/auth - AWS SES Email Provider\n *\n * Default email provider implementation using AWS SES\n *\n * @requires @aws-sdk/client-ses (peer dependency)\n */\n\nimport { env } from '@spfn/auth/config';\nimport { authLogger } from '../../logger';\nimport type { EmailProvider, SendEmailParams, SendEmailResult } from './types';\n\n/**\n * Validate email address format\n *\n * @param email - Email address to validate\n * @returns True if valid email format\n */\nfunction isValidEmail(email: string): boolean\n{\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailRegex.test(email);\n}\n\n/**\n * Create AWS SES email provider\n *\n * @returns EmailProvider instance or null if @aws-sdk/client-ses not available\n */\nexport function createAWSSESProvider(): EmailProvider | null\n{\n try\n {\n // Dynamic import to check if @aws-sdk/client-ses is available\n const { SESClient, SendEmailCommand } = require('@aws-sdk/client-ses');\n\n return {\n name: 'aws-ses',\n sendEmail: async (params: SendEmailParams): Promise<SendEmailResult> =>\n {\n const { to, subject, text, html, purpose } = params;\n\n // Validate email address format\n if (!isValidEmail(to))\n {\n return {\n success: false,\n error: 'Invalid email address format',\n };\n }\n\n // Check if AWS credentials are configured\n if (!env.SPFN_AUTH_AWS_SES_ACCESS_KEY_ID)\n {\n return {\n success: false,\n error: 'AWS SES credentials not configured. Set SPFN_AUTH_AWS_SES_ACCESS_KEY_ID environment variable.',\n };\n }\n\n // Check if sender email is configured\n if (!env.SPFN_AUTH_AWS_SES_FROM_EMAIL)\n {\n return {\n success: false,\n error: 'AWS SES sender email not configured. Set SPFN_AUTH_AWS_SES_FROM_EMAIL environment variable.',\n };\n }\n\n try\n {\n // Initialize SES client\n const config: any = {\n region: env.SPFN_AUTH_AWS_REGION || 'ap-northeast-2',\n };\n\n if (env.SPFN_AUTH_AWS_SES_ACCESS_KEY_ID && env.SPFN_AUTH_AWS_SES_SECRET_ACCESS_KEY)\n {\n config.credentials = {\n accessKeyId: env.SPFN_AUTH_AWS_SES_ACCESS_KEY_ID,\n secretAccessKey: env.SPFN_AUTH_AWS_SES_SECRET_ACCESS_KEY,\n };\n }\n\n const client = new SESClient(config);\n\n // Build email body\n const body: any = {};\n\n if (text)\n {\n body.Text = {\n Charset: 'UTF-8',\n Data: text,\n };\n }\n\n if (html)\n {\n body.Html = {\n Charset: 'UTF-8',\n Data: html,\n };\n }\n\n // Prepare SES send email command\n const command = new SendEmailCommand({\n Source: env.SPFN_AUTH_AWS_SES_FROM_EMAIL,\n Destination: {\n ToAddresses: [to],\n },\n Message: {\n Subject: {\n Charset: 'UTF-8',\n Data: subject,\n },\n Body: body,\n },\n });\n\n // Send email\n const response = await client.send(command);\n\n authLogger.email.info('Email sent via AWS SES', {\n to,\n messageId: response.MessageId,\n purpose: purpose || 'N/A',\n });\n\n return {\n success: true,\n messageId: response.MessageId,\n };\n }\n catch (error)\n {\n const err = error as Error;\n authLogger.email.error('Failed to send email via AWS SES', {\n to,\n error: err.message,\n });\n\n return {\n success: false,\n error: err.message || 'Failed to send email via AWS SES',\n };\n }\n },\n };\n }\n catch (error)\n {\n // @aws-sdk/client-ses not installed\n return null;\n }\n}\n\n/**\n * AWS SES Provider instance (lazy initialization)\n */\nexport const awsSESProvider = createAWSSESProvider();\n","/**\n * @spfn/auth - Email Service\n *\n * Email sending service with pluggable provider support\n *\n * Default provider: AWS SES (if @aws-sdk/client-ses is installed)\n * Fallback: Development mode (console only)\n *\n * @example\n * ```typescript\n * // Using default provider (AWS SES)\n * import { sendEmail } from '@spfn/auth/server/services/email';\n *\n * await sendEmail({\n * to: 'user@example.com',\n * subject: 'Your Verification Code',\n * text: 'Your code is: 123456',\n * html: '<p>Your code is: <strong>123456</strong></p>',\n * purpose: 'verification'\n * });\n * ```\n *\n * @example\n * ```typescript\n * // Register custom provider\n * import { registerEmailProvider, EmailProvider } from '@spfn/auth/server/services/email';\n *\n * const sendgridProvider: EmailProvider = {\n * name: 'sendgrid',\n * sendEmail: async (params) => {\n * // Your SendGrid implementation\n * return { success: true, messageId: '...' };\n * }\n * };\n *\n * registerEmailProvider(sendgridProvider);\n * ```\n */\n\nexport { sendEmail, registerEmailProvider, getEmailProvider } from './provider';\nexport type { SendEmailParams, SendEmailResult, EmailProvider } from './types';\nexport { createAWSSESProvider, awsSESProvider } from './aws-ses.provider';\n\n// Auto-register AWS SES provider if available\nimport { awsSESProvider } from './aws-ses.provider';\nimport { registerEmailProvider } from './provider';\n\nif (awsSESProvider)\n{\n registerEmailProvider(awsSESProvider);\n}\n","/**\n * @spfn/auth - Verification Code Email Template\n *\n * HTML email template for verification codes (registration, login, password reset)\n */\n\nexport interface VerificationCodeTemplateParams\n{\n /**\n * 6-digit verification code\n */\n code: string;\n\n /**\n * Purpose of verification\n */\n purpose: 'registration' | 'login' | 'password_reset' | string;\n\n /**\n * Code expiration time in minutes\n */\n expiresInMinutes?: number;\n\n /**\n * App/Brand name (optional)\n */\n appName?: string;\n}\n\n/**\n * Get subject line based on purpose\n */\nexport function getSubject(purpose: string): string\n{\n switch (purpose)\n {\n case 'registration':\n return 'Verify your email address';\n case 'login':\n return 'Your login verification code';\n case 'password_reset':\n return 'Reset your password';\n default:\n return 'Your verification code';\n }\n}\n\n/**\n * Get purpose description text\n */\nfunction getPurposeText(purpose: string): string\n{\n switch (purpose)\n {\n case 'registration':\n return 'complete your registration';\n case 'login':\n return 'verify your identity';\n case 'password_reset':\n return 'reset your password';\n default:\n return 'verify your identity';\n }\n}\n\n/**\n * Generate plain text version\n */\nexport function generateText(params: VerificationCodeTemplateParams): string\n{\n const { code, expiresInMinutes = 5 } = params;\n\n return `Your verification code is: ${code}\n\nThis code will expire in ${expiresInMinutes} minutes.\n\nIf you didn't request this code, please ignore this email.`;\n}\n\n/**\n * Generate HTML version\n */\nexport function generateHTML(params: VerificationCodeTemplateParams): string\n{\n const { code, purpose, expiresInMinutes = 5, appName } = params;\n const purposeText = getPurposeText(purpose);\n\n return `<!DOCTYPE html>\n<html>\n<head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>Verification Code</title>\n</head>\n<body style=\"font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; line-height: 1.6; color: #333; max-width: 600px; margin: 0 auto; padding: 20px; background-color: #f5f5f5;\">\n <div style=\"background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); padding: 30px; border-radius: 10px 10px 0 0; text-align: center;\">\n <h1 style=\"color: white; margin: 0; font-size: 24px;\">${appName ? appName : 'Verification Code'}</h1>\n </div>\n <div style=\"background: #ffffff; padding: 30px; border: 1px solid #e0e0e0; border-top: none; border-radius: 0 0 10px 10px;\">\n <p style=\"margin-bottom: 20px; font-size: 16px;\">\n Please use the following verification code to ${purposeText}:\n </p>\n <div style=\"background: #f8f9fa; padding: 25px; border-radius: 8px; text-align: center; margin: 25px 0; border: 2px dashed #dee2e6;\">\n <span style=\"font-size: 36px; font-weight: bold; letter-spacing: 10px; color: #333; font-family: 'Courier New', monospace;\">${code}</span>\n </div>\n <p style=\"color: #666; font-size: 14px; margin-top: 20px; text-align: center;\">\n <strong>This code will expire in ${expiresInMinutes} minutes.</strong>\n </p>\n <hr style=\"border: none; border-top: 1px solid #eee; margin: 30px 0;\">\n <p style=\"color: #999; font-size: 12px; text-align: center; margin: 0;\">\n If you didn't request this code, please ignore this email.\n </p>\n </div>\n <div style=\"text-align: center; padding: 20px; color: #999; font-size: 11px;\">\n <p style=\"margin: 0;\">This is an automated message. Please do not reply.</p>\n </div>\n</body>\n</html>`;\n}\n\n/**\n * Generate both text and HTML versions\n */\nexport function verificationCodeTemplate(params: VerificationCodeTemplateParams)\n{\n return {\n subject: getSubject(params.purpose),\n text: generateText(params),\n html: generateHTML(params),\n };\n}\n","/**\n * @spfn/auth - Email Template Registry\n *\n * Manages custom email template registration and fallback to defaults\n */\n\nimport { authLogger } from '../../../logger';\nimport type { EmailTemplateProvider, VerificationCodeParams, EmailTemplateResult } from './types';\nimport * as defaultTemplates from './verification-code';\n\n/**\n * Custom template overrides\n */\nlet customTemplates: Partial<EmailTemplateProvider> = {};\n\n/**\n * Register custom email templates\n *\n * Templates not provided will fall back to defaults\n *\n * @param templates - Custom template implementations\n *\n * @example\n * ```typescript\n * import { registerEmailTemplates } from '@spfn/auth/server';\n *\n * // Override verification code template with custom design\n * registerEmailTemplates({\n * verificationCode: ({ code, purpose, expiresInMinutes }) => ({\n * subject: `[MyApp] Your verification code`,\n * text: `Your code is: ${code}`,\n * html: `\n * <div style=\"font-family: Arial;\">\n * <h1>Welcome to MyApp!</h1>\n * <p>Your code: <strong>${code}</strong></p>\n * </div>\n * `,\n * }),\n * });\n * ```\n */\nexport function registerEmailTemplates(templates: Partial<EmailTemplateProvider>): void\n{\n customTemplates = { ...customTemplates, ...templates };\n authLogger.email.info('Registered custom email templates', {\n templates: Object.keys(templates),\n });\n}\n\n/**\n * Clear all custom templates (useful for testing)\n */\nexport function clearCustomTemplates(): void\n{\n customTemplates = {};\n}\n\n/**\n * Get verification code template\n *\n * Uses custom template if registered, otherwise falls back to default\n */\nexport function getVerificationCodeTemplate(params: VerificationCodeParams): EmailTemplateResult\n{\n if (customTemplates.verificationCode)\n {\n return customTemplates.verificationCode(params);\n }\n\n return defaultTemplates.verificationCodeTemplate(params);\n}\n\n/**\n * Get welcome template\n */\nexport function getWelcomeTemplate(params: { email: string; appName?: string }): EmailTemplateResult\n{\n if (customTemplates.welcome)\n {\n return customTemplates.welcome(params);\n }\n\n // Default welcome template\n return {\n subject: params.appName ? `Welcome to ${params.appName}!` : 'Welcome!',\n text: `Welcome! Your account has been created successfully.`,\n html: `\n<!DOCTYPE html>\n<html>\n<head><meta charset=\"utf-8\"></head>\n<body style=\"font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; padding: 20px;\">\n <h1>Welcome${params.appName ? ` to ${params.appName}` : ''}!</h1>\n <p>Your account has been created successfully.</p>\n</body>\n</html>`,\n };\n}\n\n/**\n * Get password reset template\n */\nexport function getPasswordResetTemplate(params: { resetLink: string; expiresInMinutes?: number; appName?: string }): EmailTemplateResult\n{\n if (customTemplates.passwordReset)\n {\n return customTemplates.passwordReset(params);\n }\n\n const expires = params.expiresInMinutes || 30;\n\n return {\n subject: 'Reset your password',\n text: `Click this link to reset your password: ${params.resetLink}\\n\\nThis link will expire in ${expires} minutes.`,\n html: `\n<!DOCTYPE html>\n<html>\n<head><meta charset=\"utf-8\"></head>\n<body style=\"font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; padding: 20px;\">\n <h1>Reset Your Password</h1>\n <p>Click the button below to reset your password:</p>\n <a href=\"${params.resetLink}\" style=\"display: inline-block; background: #667eea; color: white; padding: 12px 24px; text-decoration: none; border-radius: 6px;\">Reset Password</a>\n <p style=\"color: #666; margin-top: 20px;\">This link will expire in ${expires} minutes.</p>\n</body>\n</html>`,\n };\n}\n\n/**\n * Get invitation template\n */\nexport function getInvitationTemplate(params: { inviteLink: string; inviterName?: string; roleName?: string; appName?: string }): EmailTemplateResult\n{\n if (customTemplates.invitation)\n {\n return customTemplates.invitation(params);\n }\n\n const appName = params.appName || 'our platform';\n const inviterText = params.inviterName ? `${params.inviterName} has invited you` : 'You have been invited';\n const roleText = params.roleName ? ` as ${params.roleName}` : '';\n\n return {\n subject: `You're invited to join ${appName}`,\n text: `${inviterText} to join ${appName}${roleText}.\\n\\nClick here to accept: ${params.inviteLink}`,\n html: `\n<!DOCTYPE html>\n<html>\n<head><meta charset=\"utf-8\"></head>\n<body style=\"font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; padding: 20px;\">\n <h1>You're Invited!</h1>\n <p>${inviterText} to join <strong>${appName}</strong>${roleText}.</p>\n <a href=\"${params.inviteLink}\" style=\"display: inline-block; background: #667eea; color: white; padding: 12px 24px; text-decoration: none; border-radius: 6px;\">Accept Invitation</a>\n</body>\n</html>`,\n };\n}\n","/**\n * @spfn/auth - Key Service\n *\n * Handles public key registration, rotation, and revocation\n */\n\nimport { type KeyAlgorithmType } from '../types';\nimport { verifyKeyFingerprint } from '../helpers/jwt';\nimport { InvalidKeyFingerprintError } from '@spfn/auth/errors';\nimport { keysRepository } from '../repositories';\n\nexport interface RegisterPublicKeyParams\n{\n userId: number;\n keyId: string;\n publicKey: string;\n fingerprint: string;\n algorithm?: KeyAlgorithmType;\n}\n\nexport interface RotateKeyParams\n{\n userId: number;\n oldKeyId: string;\n newKeyId: string;\n newPublicKey: string;\n fingerprint: string;\n algorithm?: KeyAlgorithmType;\n}\n\nexport interface RotateKeyResult\n{\n success: boolean;\n keyId: string;\n}\n\nexport interface RevokeKeyParams\n{\n userId: number;\n keyId: string;\n reason: string;\n}\n\n/**\n * Helper: Calculate key expiry date (90 days from now)\n */\nfunction getKeyExpiryDate(): Date\n{\n const expiresAt = new Date();\n expiresAt.setDate(expiresAt.getDate() + 90);\n return expiresAt;\n}\n\n/**\n * Register a new public key for a user\n */\nexport async function registerPublicKeyService(\n params: RegisterPublicKeyParams\n): Promise<void>\n{\n const { userId, keyId, publicKey, fingerprint, algorithm = 'ES256' } = params;\n\n // Verify fingerprint matches public key\n const isValidFingerprint = verifyKeyFingerprint(publicKey, fingerprint);\n if (!isValidFingerprint)\n {\n throw new InvalidKeyFingerprintError();\n }\n\n // Store public key (90 days expiry)\n await keysRepository.create({\n userId,\n keyId,\n publicKey,\n algorithm,\n fingerprint,\n isActive: true,\n createdAt: new Date(),\n expiresAt: getKeyExpiryDate(),\n });\n}\n\n/**\n * Rotate user's public key (revoke old, register new)\n */\nexport async function rotateKeyService(\n params: RotateKeyParams\n): Promise<RotateKeyResult>\n{\n const { userId, oldKeyId, newKeyId, newPublicKey, fingerprint, algorithm = 'ES256' } = params;\n\n // Verify fingerprint matches public key\n const isValidFingerprint = verifyKeyFingerprint(newPublicKey, fingerprint);\n if (!isValidFingerprint)\n {\n throw new InvalidKeyFingerprintError();\n }\n\n // Revoke old key\n await keysRepository.revokeByKeyIdAndUserId(\n oldKeyId,\n userId,\n 'Replaced by key rotation'\n );\n\n // Store new public key (90 days expiry)\n await keysRepository.create({\n userId,\n keyId: newKeyId,\n publicKey: newPublicKey,\n algorithm,\n fingerprint,\n isActive: true,\n createdAt: new Date(),\n expiresAt: getKeyExpiryDate(),\n });\n\n return {\n success: true,\n keyId: newKeyId,\n };\n}\n\n/**\n * Revoke a user's public key\n */\nexport async function revokeKeyService(\n params: RevokeKeyParams\n): Promise<void>\n{\n const { userId, keyId, reason } = params;\n\n await keysRepository.revokeByKeyIdAndUserId(keyId, userId, reason);\n}","/**\n * @spfn/auth - User Service\n *\n * Handles user CRUD operations\n */\n\nimport { type NewUser } from \"../entities/users\";\nimport { usersRepository } from '../repositories';\n\n/**\n * Get user by ID\n */\nexport async function getUserByIdService(userId: number)\n{\n return await usersRepository.findById(userId);\n}\n\n/**\n * Get user by email\n */\nexport async function getUserByEmailService(email: string)\n{\n return await usersRepository.findByEmail(email);\n}\n\n/**\n * Get user by phone\n */\nexport async function getUserByPhoneService(phone: string)\n{\n return await usersRepository.findByPhone(phone);\n}\n\n/**\n * Update user's last login timestamp\n */\nexport async function updateLastLoginService(userId: number)\n{\n await usersRepository.updateLastLogin(userId);\n}\n\n/**\n * Update user data\n */\nexport async function updateUserService(\n userId: number,\n updates: Partial<NewUser>\n): Promise<void>\n{\n await usersRepository.updateById(userId, updates);\n}","/**\n * @spfn/auth - RBAC Initialization Service\n *\n * Initialize roles, permissions, and their mappings\n */\n\nimport {\n rolesRepository,\n permissionsRepository,\n rolePermissionsRepository,\n} from '../repositories';\nimport {\n BUILTIN_ROLES,\n BUILTIN_PERMISSIONS,\n BUILTIN_ROLE_PERMISSIONS,\n} from '../rbac';\nimport type { AuthInitOptions, RoleConfig, PermissionConfig } from '../rbac';\nimport { configureAuth } from '../lib/config';\nimport { authLogger } from '../logger';\n\n/**\n * Initialize auth package with RBAC system\n *\n * Creates built-in roles, permissions, and custom configurations\n *\n * @param options - Initialization options\n *\n * @example\n * ```typescript\n * // Minimal - only built-in roles (user, admin, superadmin)\n * await initializeAuth();\n *\n * // Custom roles and permissions\n * await initializeAuth({\n * roles: [\n * { name: 'project-manager', displayName: 'Project Manager', priority: 50 },\n * { name: 'developer', displayName: 'Developer', priority: 30 },\n * ],\n * permissions: [\n * { name: 'project:create', displayName: 'Create Project', category: 'project' },\n * { name: 'task:assign', displayName: 'Assign Task', category: 'task' },\n * ],\n * rolePermissions: {\n * 'project-manager': ['project:create', 'task:assign'],\n * 'developer': ['task:complete'],\n * },\n * });\n * ```\n */\nexport async function initializeAuth(options: AuthInitOptions = {}): Promise<void>\n{\n authLogger.service.info('🔐 Initializing RBAC system...');\n\n // Configure global auth settings\n if (options.sessionTtl !== undefined)\n {\n configureAuth({\n sessionTtl: options.sessionTtl,\n });\n authLogger.service.info(`⏱️ Session TTL: ${options.sessionTtl}`);\n }\n\n // 1. Collect all roles (built-in + custom)\n const allRoles: RoleConfig[] = [\n ...Object.values(BUILTIN_ROLES),\n ...(options.roles || []),\n ];\n\n // 2. Create/update all roles\n for (const roleConfig of allRoles)\n {\n await upsertRole(roleConfig);\n }\n\n // 3. Collect all permissions (built-in + custom)\n const allPermissions: PermissionConfig[] = [\n ...Object.values(BUILTIN_PERMISSIONS),\n ...(options.permissions || []),\n ];\n\n // 4. Create/update all permissions\n for (const permConfig of allPermissions)\n {\n await upsertPermission(permConfig);\n }\n\n // 5. Collect all role-permission mappings (built-in + custom)\n const allMappings: Record<string, string[]> = { ...BUILTIN_ROLE_PERMISSIONS };\n\n // Merge custom mappings\n if (options.rolePermissions)\n {\n for (const [roleName, permNames] of Object.entries(options.rolePermissions))\n {\n if (allMappings[roleName])\n {\n // Merge with existing mappings (deduplicate)\n allMappings[roleName] = [\n ...new Set([...allMappings[roleName], ...permNames]),\n ];\n }\n else\n {\n // New role mapping\n allMappings[roleName] = permNames;\n }\n }\n }\n\n // 6. Create all role-permission mappings\n for (const [roleName, permNames] of Object.entries(allMappings))\n {\n await assignPermissionsToRole(roleName, permNames);\n }\n\n authLogger.service.info('✅ RBAC initialization complete');\n authLogger.service.info(`📊 Roles: ${allRoles.length}, Permissions: ${allPermissions.length}`);\n authLogger.service.info('🔒 Built-in roles: user, admin, superadmin');\n}\n\n/**\n * Create or update a role (idempotent)\n */\nasync function upsertRole(config: RoleConfig): Promise<void>\n{\n const existing = await rolesRepository.findByName(config.name);\n\n if (!existing)\n {\n // Create new role\n await rolesRepository.create({\n name: config.name,\n displayName: config.displayName,\n description: config.description || null,\n priority: config.priority ?? 10,\n isSystem: config.isSystem ?? false,\n isBuiltin: config.isBuiltin ?? false,\n isActive: true,\n });\n\n authLogger.service.info(` ✅ Created role: ${config.name}`);\n }\n else\n {\n // Update existing role (but preserve priority for built-in roles)\n const updateData: any = {\n displayName: config.displayName,\n description: config.description || null,\n };\n\n // Only update priority for non-builtin roles\n if (!existing.isBuiltin)\n {\n updateData.priority = config.priority ?? existing.priority;\n }\n\n await rolesRepository.updateById(existing.id, updateData);\n }\n}\n\n/**\n * Create or update a permission (idempotent)\n */\nasync function upsertPermission(config: PermissionConfig): Promise<void>\n{\n const existing = await permissionsRepository.findByName(config.name);\n\n if (!existing)\n {\n // Create new permission\n await permissionsRepository.create({\n name: config.name,\n displayName: config.displayName,\n description: config.description || null,\n category: config.category || null,\n isSystem: config.isSystem ?? false,\n isBuiltin: config.isBuiltin ?? false,\n isActive: true,\n metadata: null,\n });\n\n authLogger.service.info(` ✅ Created permission: ${config.name}`);\n }\n else\n {\n // Update existing permission\n await permissionsRepository.updateById(existing.id, {\n displayName: config.displayName,\n description: config.description || null,\n category: config.category || null,\n });\n }\n}\n\n/**\n * Assign permissions to a role\n */\nasync function assignPermissionsToRole(roleName: string, permissionNames: string[]): Promise<void>\n{\n // Get role\n const role = await rolesRepository.findByName(roleName);\n\n if (!role)\n {\n authLogger.service.warn(` ⚠️ Role not found: ${roleName}, skipping permission assignment`);\n return;\n }\n\n // Get permissions\n const perms = await permissionsRepository.findByNames(permissionNames);\n\n if (perms.length === 0)\n {\n authLogger.service.warn(` ⚠️ No permissions found for role: ${roleName}`);\n return;\n }\n\n // Get existing mappings to avoid duplicates\n const existingMappings = await rolePermissionsRepository.findByRoleId(role.id);\n const existingPermIds = new Set(existingMappings.map(m => m.permissionId));\n\n // Create new mappings (skip duplicates)\n const newMappings = perms\n .filter(perm => !existingPermIds.has(perm.id))\n .map(perm => ({\n roleId: role.id,\n permissionId: perm.id,\n }));\n\n if (newMappings.length > 0)\n {\n await rolePermissionsRepository.createMany(newMappings);\n }\n}","/**\n * @spfn/auth - Global Configuration\n *\n * Manages global auth configuration including session TTL\n */\n\nimport { env } from '@spfn/auth/config';\n\n/**\n * Cookie names used by SPFN Auth\n */\nexport const COOKIE_NAMES = {\n /** Encrypted session data (userId, privateKey, keyId, algorithm) */\n SESSION: 'spfn_session',\n /** Current key ID (for key rotation) */\n SESSION_KEY_ID: 'spfn_session_key_id',\n} as const;\n\n/**\n * Parse duration string to seconds\n *\n * Supports: '30d', '12h', '45m', '3600s', or plain number\n *\n * @example\n * parseDuration('30d') // 2592000 (30 days in seconds)\n * parseDuration('12h') // 43200\n * parseDuration('45m') // 2700\n * parseDuration('3600') // 3600\n */\nexport function parseDuration(duration: string | number): number\n{\n if (typeof duration === 'number')\n {\n return duration;\n }\n\n const match = duration.match(/^(\\d+)([dhms]?)$/);\n if (!match)\n {\n throw new Error(`Invalid duration format: ${duration}. Use format like '30d', '12h', '45m', '3600s', or plain number.`);\n }\n\n const value = parseInt(match[1], 10);\n const unit = match[2] || 's';\n\n switch (unit)\n {\n case 'd':\n return value * 24 * 60 * 60;\n case 'h':\n return value * 60 * 60;\n case 'm':\n return value * 60;\n case 's':\n return value;\n default:\n throw new Error(`Unknown duration unit: ${unit}`);\n }\n}\n\n/**\n * Auth configuration\n */\nexport interface AuthConfig\n{\n /**\n * Default session TTL in seconds or duration string\n *\n * Supports:\n * - Number: seconds (e.g., 2592000)\n * - String: '30d', '12h', '45m', '3600s'\n *\n * @default 7d (7 days)\n */\n sessionTtl?: string | number;\n}\n\n/**\n * Global auth configuration state\n */\nlet globalConfig: AuthConfig = {\n sessionTtl: '7d', // Default: 7 days\n};\n\n/**\n * Configure global auth settings\n *\n * @param config - Auth configuration\n *\n * @example\n * ```typescript\n * configureAuth({\n * sessionTtl: '30d', // 30 days\n * });\n * ```\n */\nexport function configureAuth(config: AuthConfig): void\n{\n globalConfig = {\n ...globalConfig,\n ...config,\n };\n}\n\n/**\n * Get current auth configuration\n */\nexport function getAuthConfig(): AuthConfig\n{\n return { ...globalConfig };\n}\n\n/**\n * Get session TTL in seconds\n *\n * Priority:\n * 1. Runtime override (remember parameter)\n * 2. Global config (configureAuth)\n * 3. Environment variable (SPFN_AUTH_SESSION_TTL) - via config module\n * 4. Default (7 days)\n */\nexport function getSessionTtl(override?: string | number): number\n{\n // 1. Runtime override\n if (override !== undefined)\n {\n return parseDuration(override);\n }\n\n // 2. Global config\n if (globalConfig.sessionTtl !== undefined)\n {\n return parseDuration(globalConfig.sessionTtl);\n }\n\n // 3. Environment variable (from config module)\n const envTtl = env.SPFN_AUTH_SESSION_TTL;\n if (envTtl)\n {\n return parseDuration(envTtl);\n }\n\n // 4. Default: 7 days\n return 7 * 24 * 60 * 60;\n}","/**\n * @spfn/auth - Permission Service\n *\n * Permission checking and validation logic\n */\n\nimport {\n usersRepository,\n rolesRepository,\n permissionsRepository,\n rolePermissionsRepository,\n userPermissionsRepository,\n} from '../repositories';\n\n/**\n * Get all permissions for a user\n *\n * Combines role-based permissions with user-specific overrides\n * Handles expiration of temporary permissions\n *\n * @param userId - User ID (string, number, or bigint)\n * @returns Array of permission names\n *\n * @example\n * ```typescript\n * const perms = await getUserPermissions('123');\n * // ['auth:self:manage', 'user:read', 'post:create']\n * ```\n */\nexport async function getUserPermissions(userId: string | number | bigint): Promise<string[]>\n{\n const userIdNum = typeof userId === 'string' ? Number(userId) : Number(userId);\n\n // 1. Get user's role\n const user = await usersRepository.findById(userIdNum);\n\n if (!user || !user.roleId)\n {\n return [];\n }\n\n const permSet = new Set<string>();\n\n // 2. Get role-based permissions\n const rolePermMappings = await rolePermissionsRepository.findByRoleId(user.roleId);\n const permIds = rolePermMappings.map(rp => rp.permissionId);\n\n if (permIds.length > 0)\n {\n const rolePerms = await Promise.all(\n permIds.map(id => permissionsRepository.findById(id))\n );\n\n for (const perm of rolePerms)\n {\n if (perm && perm.isActive)\n {\n permSet.add(perm.name);\n }\n }\n }\n\n // 3. Apply user-specific permission overrides\n const userPermMappings = await userPermissionsRepository.findValidByUserId(userIdNum);\n\n for (const userPermMapping of userPermMappings)\n {\n const perm = await permissionsRepository.findById(userPermMapping.permissionId);\n if (!perm) continue;\n\n if (userPermMapping.granted)\n {\n // Grant permission (add even if not in role)\n permSet.add(perm.name);\n }\n else\n {\n // Revoke permission (remove even if in role)\n permSet.delete(perm.name);\n }\n }\n\n return Array.from(permSet);\n}\n\n/**\n * Check if user has a specific permission\n *\n * @param userId - User ID\n * @param permissionName - Permission name (e.g., 'user:delete')\n * @returns true if user has permission\n *\n * @example\n * ```typescript\n * if (await hasPermission('123', 'user:delete')) {\n * // User can delete users\n * }\n * ```\n */\nexport async function hasPermission(\n userId: string | number | bigint,\n permissionName: string\n): Promise<boolean>\n{\n const perms = await getUserPermissions(userId);\n return perms.includes(permissionName);\n}\n\n/**\n * Check if user has any of the specified permissions\n *\n * @param userId - User ID\n * @param permissionNames - Array of permission names\n * @returns true if user has at least one permission\n *\n * @example\n * ```typescript\n * if (await hasAnyPermission('123', ['post:read', 'admin:access'])) {\n * // User can access content\n * }\n * ```\n */\nexport async function hasAnyPermission(\n userId: string | number | bigint,\n permissionNames: string[]\n): Promise<boolean>\n{\n const perms = await getUserPermissions(userId);\n return permissionNames.some(p => perms.includes(p));\n}\n\n/**\n * Check if user has all of the specified permissions\n *\n * @param userId - User ID\n * @param permissionNames - Array of permission names\n * @returns true if user has all permissions\n *\n * @example\n * ```typescript\n * if (await hasAllPermissions('123', ['post:write', 'post:publish'])) {\n * // User can write AND publish\n * }\n * ```\n */\nexport async function hasAllPermissions(\n userId: string | number | bigint,\n permissionNames: string[]\n): Promise<boolean>\n{\n const perms = await getUserPermissions(userId);\n return permissionNames.every(p => perms.includes(p));\n}\n\n/**\n * Get user's role name\n *\n * @param userId - User ID\n * @returns Role name or null if user has no role\n *\n * @example\n * ```typescript\n * const role = await getUserRole('123');\n * // 'admin' or null\n * ```\n */\nexport async function getUserRole(userId: string | number | bigint): Promise<string | null>\n{\n const userIdNum = typeof userId === 'string' ? Number(userId) : Number(userId);\n\n const user = await usersRepository.findById(userIdNum);\n\n if (!user || !user.roleId)\n {\n return null;\n }\n\n const role = await rolesRepository.findById(user.roleId);\n\n return role?.name || null;\n}\n\n/**\n * Check if user has a specific role\n *\n * @param userId - User ID\n * @param roleName - Role name (e.g., 'admin', 'superadmin')\n * @returns true if user has role\n *\n * @example\n * ```typescript\n * if (await hasRole('123', 'admin')) {\n * // User is admin\n * }\n * ```\n */\nexport async function hasRole(userId: string | number | bigint, roleName: string): Promise<boolean>\n{\n const role = await getUserRole(userId);\n return role === roleName;\n}\n\n/**\n * Check if user has any of the specified roles\n *\n * @param userId - User ID\n * @param roleNames - Array of role names\n * @returns true if user has at least one role\n */\nexport async function hasAnyRole(userId: string | number | bigint, roleNames: string[]): Promise<boolean>\n{\n for (const roleName of roleNames)\n {\n if (await hasRole(userId, roleName))\n {\n return true;\n }\n }\n\n return false;\n}","/**\n * @spfn/auth - Services Export\n *\n * All business logic services for reusability\n */\n\n// Auth Service\nexport {\n checkAccountExistsService,\n registerService,\n loginService,\n logoutService,\n changePasswordService,\n} from './auth.service';\n\nexport type {\n CheckAccountExistsParams,\n CheckAccountExistsResult,\n RegisterParams,\n RegisterResult,\n LoginParams,\n LoginResult,\n LogoutParams,\n ChangePasswordParams,\n} from './auth.service';\n\n// Verification Service\nexport {\n sendVerificationCodeService,\n verifyCodeService,\n} from './verification.service';\n\nexport type {\n SendVerificationCodeParams,\n SendVerificationCodeResult,\n VerifyCodeParams,\n VerifyCodeResult,\n} from './verification.service';\n\n// Key Service\nexport {\n registerPublicKeyService,\n rotateKeyService,\n revokeKeyService,\n} from './key.service';\n\nexport type {\n RegisterPublicKeyParams,\n RotateKeyParams,\n RotateKeyResult,\n RevokeKeyParams,\n} from './key.service';\n\n// User Service\nexport {\n getUserByIdService,\n getUserByEmailService,\n getUserByPhoneService,\n updateLastLoginService,\n updateUserService,\n} from './user.service';\n\n// RBAC Service\nexport {\n initializeAuth,\n} from './rbac.service';\n\n// Permission Service\nexport {\n getUserPermissions,\n hasPermission,\n hasAnyPermission,\n hasAllPermissions,\n getUserRole,\n hasRole,\n hasAnyRole,\n} from './permission.service';\n\n// Role Service\nexport {\n createRole,\n updateRole,\n deleteRole,\n addPermissionToRole,\n removePermissionFromRole,\n setRolePermissions,\n getAllRoles,\n getRoleByName,\n getRolePermissions,\n} from './role.service';\n\n// Invitation Service\nexport {\n createInvitation,\n getInvitationByToken,\n getInvitationWithDetails,\n validateInvitation,\n acceptInvitation,\n listInvitations,\n cancelInvitation,\n deleteInvitation,\n expireOldInvitations,\n resendInvitation,\n} from './invitation.service';\n\n// Auth Session Service (new)\nexport { getAuthSessionService } from './auth-session.service';\n\n// User Profile Service (new)\nexport { getUserProfileService, updateUserProfileService } from './user-profile.service';\nexport type { UpdateProfileParams } from './user-profile.service';\n\n// Email Templates\nexport {\n registerEmailTemplates,\n getVerificationCodeTemplate,\n getWelcomeTemplate,\n getPasswordResetTemplate,\n getInvitationTemplate,\n} from './email/templates';\n\nexport type {\n EmailTemplateProvider,\n EmailTemplateResult,\n VerificationCodeParams,\n} from './email/templates';\n\n// Email Service\nexport { sendEmail, registerEmailProvider } from './email';\nexport type { SendEmailParams, SendEmailResult, EmailProvider } from './email';\n\n// SMS Service\nexport { sendSMS, registerSMSProvider } from './sms';\nexport type { SendSMSParams, SendSMSResult, SMSProvider } from './sms';","/**\n * @spfn/auth - Invitation Service\n *\n * User invitation management for invite-only registration\n */\n\nimport crypto from 'crypto';\nimport { Invitation } from \"../entities/user-invitations\";\nimport {\n invitationsRepository,\n usersRepository,\n rolesRepository,\n keysRepository,\n} from '../repositories';\nimport type { InvitationStatus, KeyAlgorithmType } from '../types';\nimport { hashPassword } from '../helpers';\n\n/**\n * Generate unique invitation token (UUID v4)\n */\nfunction generateInvitationToken(): string\n{\n return crypto.randomUUID();\n}\n\n/**\n * Calculate expiration date from now\n *\n * @param days - Number of days until expiration (default: 7)\n * @returns Expiration timestamp\n */\nfunction calculateExpiresAt(days: number = 7): Date\n{\n const expiresAt = new Date();\n expiresAt.setDate(expiresAt.getDate() + days);\n return expiresAt;\n}\n\n/**\n * Create a new invitation\n *\n * @param params - Invitation parameters\n * @returns Created invitation\n * @throws Error if validation fails\n *\n * @example\n * ```typescript\n * const invitation = await createInvitation({\n * email: 'newuser@example.com',\n * roleId: 2n,\n * invitedBy: 1n,\n * expiresInDays: 7,\n * metadata: { message: 'Welcome!' }\n * });\n * ```\n */\nexport async function createInvitation(params: {\n email: string;\n roleId: number;\n invitedBy: number;\n expiresInDays?: number;\n metadata?: Record<string, any>;\n}): Promise<Invitation>\n{\n const { email, roleId, invitedBy, expiresInDays = 7, metadata } = params;\n\n // Validate email format\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n if (!emailRegex.test(email))\n {\n throw new Error('Invalid email format');\n }\n\n // Check if user already exists\n const existingUser = await usersRepository.findByEmail(email);\n\n if (existingUser)\n {\n throw new Error('User with this email already exists');\n }\n\n // Check if there's already a pending invitation for this email\n const existingInvitation = await invitationsRepository.findPendingByEmail(email);\n\n if (existingInvitation)\n {\n throw new Error('Pending invitation already exists for this email');\n }\n\n // Verify role exists\n const role = await rolesRepository.findById(roleId);\n\n if (!role)\n {\n throw new Error(`Role with id ${roleId} not found`);\n }\n\n // Verify inviter exists\n const inviter = await usersRepository.findById(invitedBy);\n\n if (!inviter)\n {\n throw new Error(`User with id ${invitedBy} not found`);\n }\n\n // Generate unique token\n const token = generateInvitationToken();\n const expiresAt = calculateExpiresAt(expiresInDays);\n\n // Create invitation\n const invitation = await invitationsRepository.create({\n email,\n token,\n roleId,\n invitedBy,\n status: 'pending',\n expiresAt,\n metadata: metadata || null,\n });\n\n console.log(`[Auth] ✅ Created invitation: ${email} as ${role.name} (expires: ${expiresAt.toISOString()})`);\n\n return invitation;\n}\n\n/**\n * Get invitation by token\n *\n * @param token - Invitation token (UUID)\n * @returns Invitation or null if not found\n */\nexport async function getInvitationByToken(token: string)\n{\n return await invitationsRepository.findByToken(token);\n}\n\n/**\n * Get invitation with role and inviter details\n *\n * @param token - Invitation token\n * @returns Invitation with joined data or null\n */\nexport async function getInvitationWithDetails(token: string)\n{\n return await invitationsRepository.findByTokenWithDetails(token);\n}\n\n/**\n * Validate invitation\n *\n * Checks if invitation is valid for acceptance\n *\n * @param token - Invitation token\n * @returns Validation result\n */\nexport async function validateInvitation(token: string): Promise<{\n valid: boolean;\n invitation?: Invitation;\n error?: string;\n}>\n{\n const invitation = await getInvitationByToken(token);\n\n if (!invitation)\n {\n return { valid: false, error: 'Invitation not found' };\n }\n\n if (invitation.status === 'accepted')\n {\n return { valid: false, error: 'Invitation already accepted', invitation };\n }\n\n if (invitation.status === 'cancelled')\n {\n return { valid: false, error: 'Invitation was cancelled', invitation };\n }\n\n if (invitation.status === 'expired')\n {\n return { valid: false, error: 'Invitation has expired', invitation };\n }\n\n // Check if expired by time\n if (new Date() > new Date(invitation.expiresAt))\n {\n return { valid: false, error: 'Invitation has expired', invitation };\n }\n\n return { valid: true, invitation };\n}\n\n/**\n * Accept invitation and create user account\n *\n * @param params - Acceptance parameters\n * @returns Created user info\n * @throws Error if invitation is invalid or user creation fails\n *\n * @example\n * ```typescript\n * const user = await acceptInvitation({\n * token: 'uuid-v4',\n * password: 'SecurePass123!',\n * publicKey: 'base64-der...',\n * keyId: 'uuid-v4',\n * fingerprint: 'sha256-hex',\n * algorithm: 'ES256'\n * });\n * ```\n */\nexport async function acceptInvitation(params: {\n token: string;\n password: string;\n publicKey: string;\n keyId: string;\n fingerprint: string;\n algorithm: KeyAlgorithmType;\n}) {\n const { token, password, publicKey, keyId, fingerprint, algorithm } = params;\n\n // Validate invitation\n const validation = await validateInvitation(token);\n\n if (!validation.valid || !validation.invitation)\n {\n throw new Error(validation.error || 'Invalid invitation');\n }\n\n const invitation = validation.invitation;\n\n // Get role details\n const role = await rolesRepository.findById(invitation.roleId);\n\n if (!role)\n {\n throw new Error('Role not found');\n }\n\n // Hash password\n const passwordHash = await hashPassword(password);\n\n // Create user\n const newUser = await usersRepository.create({\n email: invitation.email,\n passwordHash,\n roleId: invitation.roleId,\n emailVerifiedAt: new Date(), // Auto-verify invited users\n passwordChangeRequired: false,\n status: 'active',\n });\n\n // Create public key for asymmetric JWT\n await keysRepository.create({\n userId: newUser.id,\n keyId,\n publicKey,\n algorithm,\n fingerprint,\n isActive: true,\n expiresAt: new Date(Date.now() + 90 * 24 * 60 * 60 * 1000), // 90 days\n });\n\n // Update invitation status\n await invitationsRepository.updateStatus(\n invitation.id,\n 'accepted',\n new Date()\n );\n\n console.log(`[Auth] ✅ Invitation accepted: ${invitation.email} as ${role.name}`);\n\n return {\n userId: newUser.id,\n email: newUser.email!,\n role: role.name,\n };\n}\n\n/**\n * List invitations with filtering and pagination\n *\n * @param params - Query parameters\n * @returns Paginated invitations\n *\n * @example\n * ```typescript\n * const result = await listInvitations({\n * status: 'pending',\n * invitedBy: 1n,\n * page: 1,\n * limit: 20\n * });\n * ```\n */\nexport async function listInvitations(params: {\n status?: InvitationStatus;\n invitedBy?: number;\n page?: number;\n limit?: number;\n}) {\n return await invitationsRepository.list(params);\n}\n\n/**\n * Cancel invitation\n *\n * Only pending invitations can be cancelled\n *\n * @param id - Invitation ID\n * @param cancelledBy - User ID who cancelled\n * @param reason - Optional cancellation reason\n * @throws Error if invitation cannot be cancelled\n */\nexport async function cancelInvitation(\n id: number,\n cancelledBy: number,\n reason?: string\n) {\n // Get invitation\n const invitation = await invitationsRepository.findById(id);\n\n if (!invitation)\n {\n throw new Error('Invitation not found');\n }\n\n if (invitation.status !== 'pending')\n {\n throw new Error(`Cannot cancel ${invitation.status} invitation`);\n }\n\n // Cancel invitation with metadata\n await invitationsRepository.cancel(id, cancelledBy, reason, invitation.metadata);\n\n console.log(`[Auth] ⚠️ Invitation cancelled: ${invitation.email} (reason: ${reason || 'none'})`);\n}\n\n/**\n * Delete invitation\n *\n * Permanently removes invitation record\n * Typically only for superadmin cleanup\n *\n * @param id - Invitation ID\n */\nexport async function deleteInvitation(id: number)\n{\n await invitationsRepository.deleteById(id);\n\n console.log(`[Auth] 🗑️ Invitation deleted: ${id}`);\n}\n\n/**\n * Expire old invitations (cron job)\n *\n * Updates status of expired pending invitations\n *\n * @returns Number of invitations expired\n */\nexport async function expireOldInvitations()\n{\n const count = await invitationsRepository.updateExpiredInvitations();\n\n if (count > 0)\n {\n console.log(`[Auth] ⏰ Expired ${count} old invitations`);\n }\n\n return count;\n}\n\n/**\n * Resend invitation email\n *\n * Extends expiration and triggers email resend\n *\n * @param id - Invitation ID\n * @param expiresInDays - New expiration period (default: 7)\n * @returns Updated invitation\n * @throws Error if invitation cannot be resent\n */\nexport async function resendInvitation(\n id: number,\n expiresInDays: number = 7\n) {\n // Get invitation\n const invitation = await invitationsRepository.findById(id);\n\n if (!invitation)\n {\n throw new Error('Invitation not found');\n }\n\n // Can only resend pending or expired invitations\n if (!['pending', 'expired'].includes(invitation.status))\n {\n throw new Error(`Cannot resend ${invitation.status} invitation`);\n }\n\n // Update expiration and status\n const newExpiresAt = calculateExpiresAt(expiresInDays);\n\n const updated = await invitationsRepository.resend(id, newExpiresAt);\n\n if (!updated)\n {\n throw new Error('Failed to update invitation');\n }\n\n console.log(`[Auth] 📧 Invitation resent: ${invitation.email} (new expiry: ${newExpiresAt.toISOString()})`);\n\n return updated;\n}","/**\n * @spfn/auth - Auth Session Service\n *\n * Service for retrieving authentication session information\n * Returns minimal user info with role and permissions\n */\nimport { usersRepository } from '../repositories';\n\n/**\n * Get authentication session information\n *\n * @param userId - User ID (string, number, or bigint)\n * @returns Auth session data (minimal user info + role + permissions)\n *\n * @example\n * ```typescript\n * const session = await getAuthSessionService('123');\n * console.log(session.userId); // '123'\n * console.log(session.role.name); // 'admin'\n * console.log(session.permissions.length); // 15\n * ```\n */\nexport async function getAuthSessionService(userId: string | number | bigint)\n{\n const userIdNum = typeof userId === 'string' ? Number(userId) : Number(userId);\n\n // Fetch user and role/permissions in parallel\n const [user, roleAndPerms] = await Promise.all([\n usersRepository.fetchMinimalUserData(userIdNum),\n usersRepository.fetchUserRoleAndPermissions(userIdNum),\n ]);\n\n return {\n userId: user.userId,\n email: user.email,\n emailVerified: user.isEmailVerified,\n phoneVerified: user.isPhoneVerified,\n ...roleAndPerms,\n };\n}","/**\n * @spfn/auth - User Profile Service\n *\n * Service for retrieving and updating user profile information\n * Returns full user info with profile data\n */\n\nimport type { UserProfile, ProfileInfo } from '@spfn/auth';\nimport { usersRepository, userProfilesRepository } from '../repositories';\n\n/**\n * Profile update parameters\n * All fields are optional, empty string will be converted to null\n */\nexport interface UpdateProfileParams\n{\n displayName?: string;\n firstName?: string;\n lastName?: string;\n avatarUrl?: string;\n bio?: string;\n locale?: string;\n timezone?: string;\n dateOfBirth?: string;\n gender?: string;\n website?: string;\n location?: string;\n company?: string;\n jobTitle?: string;\n metadata?: Record<string, any>;\n}\n\n/**\n * Get user profile information\n *\n * @param userId - User ID (string, number, or bigint)\n * @returns User profile data with profile nested\n *\n * @example\n * ```typescript\n * const data = await getUserProfileService('123');\n * console.log(data.email); // 'user@example.com'\n * console.log(data.profile?.displayName); // 'John Doe'\n * console.log(data.lastLoginAt); // '2024-01-01T00:00:00.000Z'\n * ```\n */\nexport async function getUserProfileService(userId: string | number | bigint): Promise<UserProfile>\n{\n const userIdNum = typeof userId === 'string' ? Number(userId) : Number(userId);\n\n // Fetch user and profile in parallel\n const [user, profile] = await Promise.all([\n usersRepository.fetchFullUserData(userIdNum),\n userProfilesRepository.fetchProfileData(userIdNum),\n ]);\n\n return {\n userId: user.userId,\n email: user.email,\n emailVerified: user.isEmailVerified,\n phoneVerified: user.isPhoneVerified,\n lastLoginAt: user.lastLoginAt,\n createdAt: user.createdAt,\n updatedAt: user.updatedAt,\n profile: profile,\n };\n}\n\n/**\n * Convert empty string to null\n */\nfunction emptyToNull<T>(value: T): T | null\n{\n if (value === '')\n {\n return null;\n }\n return value;\n}\n\n/**\n * Update user profile (upsert)\n *\n * Creates profile if not exists, updates if exists\n * Empty strings are converted to null\n *\n * @param userId - User ID\n * @param params - Profile fields to update\n * @returns Updated profile info\n *\n * @example\n * ```typescript\n * const profile = await updateUserProfileService(123, {\n * displayName: 'John Doe',\n * bio: 'Software Engineer',\n * location: '', // will be saved as null\n * });\n * ```\n */\nexport async function updateUserProfileService(\n userId: string | number | bigint,\n params: UpdateProfileParams\n): Promise<ProfileInfo>\n{\n const userIdNum = typeof userId === 'string' ? Number(userId) : Number(userId);\n\n // Build update data, converting empty strings to null\n const updateData: Record<string, any> = {};\n\n if (params.displayName !== undefined)\n {\n updateData.displayName = emptyToNull(params.displayName) || 'User';\n }\n if (params.firstName !== undefined)\n {\n updateData.firstName = emptyToNull(params.firstName);\n }\n if (params.lastName !== undefined)\n {\n updateData.lastName = emptyToNull(params.lastName);\n }\n if (params.avatarUrl !== undefined)\n {\n updateData.avatarUrl = emptyToNull(params.avatarUrl);\n }\n if (params.bio !== undefined)\n {\n updateData.bio = emptyToNull(params.bio);\n }\n if (params.locale !== undefined)\n {\n updateData.locale = emptyToNull(params.locale) || 'en';\n }\n if (params.timezone !== undefined)\n {\n updateData.timezone = emptyToNull(params.timezone) || 'UTC';\n }\n if (params.dateOfBirth !== undefined)\n {\n updateData.dateOfBirth = emptyToNull(params.dateOfBirth);\n }\n if (params.gender !== undefined)\n {\n updateData.gender = emptyToNull(params.gender);\n }\n if (params.website !== undefined)\n {\n updateData.website = emptyToNull(params.website);\n }\n if (params.location !== undefined)\n {\n updateData.location = emptyToNull(params.location);\n }\n if (params.company !== undefined)\n {\n updateData.company = emptyToNull(params.company);\n }\n if (params.jobTitle !== undefined)\n {\n updateData.jobTitle = emptyToNull(params.jobTitle);\n }\n if (params.metadata !== undefined)\n {\n updateData.metadata = params.metadata;\n }\n\n // Check if this is a new profile (need displayName)\n const existing = await userProfilesRepository.findByUserId(userIdNum);\n if (!existing && !updateData.displayName)\n {\n updateData.displayName = 'User';\n }\n\n // Upsert profile\n await userProfilesRepository.upsertByUserId(userIdNum, updateData);\n\n // Fetch and return updated profile\n const profile = await userProfilesRepository.fetchProfileData(userIdNum);\n\n return profile!;\n}","/**\n * @spfn/auth - Invitation Routes\n *\n * Thin route handlers for user invitation management\n */\n\nimport { EMAIL_PATTERN, UUID_PATTERN } from \"@spfn/auth\";\nimport { getAuth } from '../../helpers';\nimport { authenticate, requirePermissions, requireRole } from '../../middleware';\nimport { KEY_ALGORITHM } from '../../types';\nimport {\n getInvitationWithDetails,\n validateInvitation,\n acceptInvitation as _acceptInvitation,\n createInvitation as _createInvitation,\n listInvitations as _listInvitations,\n cancelInvitation as _cancelInvitation,\n resendInvitation as _resendInvitation,\n deleteInvitation as _deleteInvitation,\n} from \"../../services\";\nimport { Type } from '@sinclair/typebox';\nimport { defineRouter, route } from '@spfn/core/route';\n\n/**\n * Invitation status enum values\n */\nconst INVITATION_STATUSES = ['pending', 'accepted', 'expired', 'cancelled'] as const;\n\n// ==========================================\n// Public Routes (No Authentication Required)\n// ==========================================\n\n/**\n * GET /_auth/invitations/:token\n * Get invitation details for acceptance page\n */\nexport const getInvitation = route.get('/_auth/invitations/:token')\n .input({\n params: Type.Object({\n token: Type.String({\n pattern: UUID_PATTERN,\n description: 'Invitation token (UUID v4)'\n }),\n })\n })\n .skip(['auth'])\n .handler(async (c) =>\n {\n const { params } = await c.data();\n const token = params.token;\n\n const validation = await validateInvitation(token);\n\n if (!validation.valid || !validation.invitation)\n {\n throw new Error(validation.error || 'Invalid invitation');\n }\n\n // Get full details with role and inviter info\n const invitation = await getInvitationWithDetails(token);\n\n if (!invitation)\n {\n throw new Error('Invitation not found');\n }\n\n return {\n email: invitation.email,\n role: invitation.role.name,\n roleDisplayName: invitation.role.displayName,\n invitedBy: invitation.inviter.email || 'Unknown',\n expiresAt: invitation.expiresAt.toISOString(),\n metadata: invitation.metadata || undefined,\n };\n });\n\n/**\n * POST /_auth/invitations/accept\n * Accept invitation and create user account\n */\nexport const acceptInvitation = route.post('/_auth/invitations/accept')\n .input({\n body: Type.Object({\n token: Type.String({\n pattern: UUID_PATTERN,\n description: 'Invitation token'\n }),\n password: Type.String({\n minLength: 8,\n description: 'User password (minimum 8 characters)'\n }),\n })\n })\n .interceptor({\n body: Type.Object({\n publicKey: Type.String({ description: 'Client public key' }),\n keyId: Type.String({ description: 'Key identifier' }),\n fingerprint: Type.String({ description: 'Key fingerprint' }),\n algorithm: Type.Union(KEY_ALGORITHM.map(algo => Type.Literal(algo)), { description: 'Signature algorithm' }),\n })\n })\n .skip(['auth'])\n .handler(async (c) =>\n {\n const { body } = await c.data();\n\n return await _acceptInvitation({\n token: body.token,\n password: body.password,\n publicKey: body.publicKey,\n keyId: body.keyId,\n fingerprint: body.fingerprint,\n algorithm: body.algorithm,\n });\n });\n\n// ==========================================\n// Protected Routes (Admin Only)\n// ==========================================\n\n/**\n * POST /_auth/invitations\n * Create new invitation (requires user:invite permission)\n */\nexport const createInvitation = route.post('/_auth/invitations')\n .input({\n body: Type.Object({\n email: Type.String({\n pattern: EMAIL_PATTERN,\n description: 'Email address'\n }),\n roleId: Type.Number({\n description: 'Role ID to assign'\n }),\n expiresInDays: Type.Optional(Type.Number({\n minimum: 1,\n maximum: 30,\n description: 'Days until invitation expires (default: 7)'\n })),\n metadata: Type.Optional(Type.Any({\n description: 'Custom metadata (welcome message, department, etc.)'\n })),\n })\n })\n .use([authenticate, requirePermissions('user:invite')])\n .handler(async (c) =>\n {\n const { body } = await c.data();\n const { userId } = getAuth(c);\n\n const invitation = await _createInvitation({\n email: body.email,\n roleId: body.roleId,\n invitedBy: Number(userId),\n expiresInDays: body.expiresInDays,\n metadata: body.metadata,\n });\n\n // Build invitation URL (use environment variable or default)\n const baseUrl = process.env.SPFN_API_URL || 'http://localhost:8790';\n const invitationUrl = `${baseUrl}/auth/invite/${invitation.token}`;\n\n return {\n id: invitation.id,\n email: invitation.email,\n token: invitation.token,\n roleId: invitation.roleId,\n expiresAt: invitation.expiresAt.toISOString(),\n invitationUrl,\n };\n });\n\n/**\n * GET /_auth/invitations\n * List invitations with filtering (requires user:read permission)\n */\nexport const listInvitations = route.get('/_auth/invitations')\n .input({\n query: Type.Object({\n status: Type.Optional(Type.Union(\n INVITATION_STATUSES.map(s => Type.Literal(s)),\n { description: 'Filter by status' }\n )),\n page: Type.Optional(Type.Number({\n minimum: 1,\n description: 'Page number (default: 1)'\n })),\n limit: Type.Optional(Type.Number({\n minimum: 1,\n maximum: 100,\n description: 'Items per page (default: 20)'\n })),\n })\n })\n .use([authenticate, requirePermissions('user:read')])\n .handler(async (c) =>\n {\n const { query } = await c.data();\n\n const result = await _listInvitations({\n status: query.status as any,\n page: query.page ? Number(query.page) : undefined,\n limit: query.limit ? Number(query.limit) : undefined,\n });\n\n // Format dates to ISO strings\n const formattedInvitations = result.invitations;\n\n return {\n ...result,\n invitations: formattedInvitations,\n };\n });\n\n/**\n * POST /_auth/invitations/cancel\n * Cancel invitation (requires user:invite permission)\n */\nexport const cancelInvitation = route.post('/_auth/invitations/cancel')\n .input({\n body: Type.Object({\n id: Type.Number({\n description: 'Invitation ID'\n }),\n reason: Type.Optional(Type.String({\n description: 'Cancellation reason'\n })),\n })\n })\n .use([authenticate, requirePermissions('user:invite')])\n .handler(async (c) =>\n {\n const { body } = await c.data();\n const { userId } = getAuth(c);\n\n await _cancelInvitation(\n body.id,\n Number(userId),\n body.reason\n );\n\n return {\n cancelledAt: new Date().toISOString(),\n };\n });\n\n/**\n * POST /_auth/invitations/resend\n * Resend invitation email (requires user:invite permission)\n */\nexport const resendInvitation = route.post('/_auth/invitations/resend')\n .input({\n body: Type.Object({\n id: Type.Number({\n description: 'Invitation ID'\n }),\n expiresInDays: Type.Optional(Type.Number({\n minimum: 1,\n maximum: 30,\n description: 'New expiration period (default: 7)'\n })),\n })\n })\n .use([authenticate, requirePermissions('user:invite')])\n .handler(async (c) =>\n {\n const { body } = await c.data();\n\n const updated = await _resendInvitation(\n body.id,\n body.expiresInDays\n );\n\n return {\n expiresAt: updated.expiresAt.toISOString(),\n };\n });\n\n/**\n * POST /_auth/invitations/delete\n * Delete invitation permanently (requires superadmin role)\n */\nexport const deleteInvitation = route.post('/_auth/invitations/delete')\n .input({\n body: Type.Object({\n id: Type.Number({\n description: 'Invitation ID'\n }),\n })\n })\n .use([authenticate, requireRole('superadmin')])\n .handler(async (c) =>\n {\n const { body } = await c.data();\n\n await _deleteInvitation(body.id);\n\n return c.noContent();\n });\n\n// Export router\nexport const invitationRouter = defineRouter({\n getInvitation: getInvitation,\n acceptInvitation: acceptInvitation,\n createInvitation: createInvitation,\n listInvitations: listInvitations,\n cancelInvitation: cancelInvitation,\n resendInvitation: resendInvitation,\n deleteInvitation: deleteInvitation,\n});\n\n// For backward compatibility with file-based routing (temporary)\nexport default invitationRouter;\n","/**\n * @spfn/auth - Authentication Middleware\n *\n * Verify client-signed JWT token with public key\n *\n * Flow:\n * 1. Extract Authorization header\n * 2. Decode JWT to extract keyId\n * 3. Fetch public key from database\n * 4. Check key expiration\n * 5. Verify JWT signature with public key\n * 6. Validate user status\n * 7. Update last used timestamp\n * 8. Attach user to context\n *\n * Security Checks:\n * - Token signature verification\n * - Key expiration check\n * - User status check (active/inactive/suspended)\n * - Key revocation check (isActive flag)\n */\n\nimport { defineMiddleware } from '@spfn/core/route';\nimport { UnauthorizedError } from '@spfn/core/errors';\n\nimport type { User, KeyAlgorithmType } from '@spfn/auth/server';\nimport { verifyClientToken, decodeToken, authLogger, keysRepository, usersRepository } from '@spfn/auth/server';\nimport {\n InvalidTokenError,\n TokenExpiredError,\n KeyExpiredError,\n AccountDisabledError,\n} from '@spfn/auth/errors';\n\n// Auth context type\nexport interface AuthContext\n{\n user: User;\n userId: string;\n keyId: string;\n}\n\n// Extend Hono context with auth\ndeclare module 'hono'\n{\n interface ContextVariableMap\n {\n auth: AuthContext;\n }\n}\n\n/**\n * Authentication middleware\n *\n * Verifies client-signed JWT token using stored public key\n * Must be applied to routes that require authentication\n *\n * @example\n * ```typescript\n * // In server.config.ts\n * import { authenticate } from '@spfn/auth/server/middleware';\n *\n * export default defineServerConfig()\n * .middlewares([authenticate])\n * .routes(appRouter)\n * .build();\n *\n * // In route file - skip auth for public routes\n * export const publicRoute = route.get('/health')\n * .skip(['auth']) // Type-safe skip\n * .handler(async (c) => c.success({ status: 'ok' }));\n *\n * // Protected route - auth applied automatically\n * export const protectedRoute = route.get('/profile')\n * .handler(async (c) => {\n * const auth = c.get('auth'); // Get auth context\n * const { user, userId, keyId } = auth;\n * // Or access directly: c.get('auth').user\n * });\n * ```\n */\nexport const authenticate = defineMiddleware('auth', async (c, next) =>\n{\n // Extract Authorization header\n const authHeader = c.req.header('Authorization');\n\n // Validate Authorization header format\n if (!authHeader || !authHeader.startsWith('Bearer '))\n {\n authLogger.middleware.error('Missing or invalid authorization header. If using Next.js API routes, ensure you have imported \\'@spfn/auth/nextjs/api\\' in your API route handler (e.g., src/app/api/actions/[[...path]]/route.ts) to enable automatic authentication header forwarding from client to backend.', {\n headers: c.req.header(),\n path: c.req.path,\n });\n\n throw new UnauthorizedError({ message: 'Authentication header missing or invalid: Bearer {token}' });\n }\n\n const token = authHeader.substring(7); // Remove 'Bearer ' prefix\n\n // 1. Decode JWT to extract keyId (without verification)\n // We need keyId to fetch the public key for verification\n const decoded = decodeToken(token);\n\n if (!decoded || !decoded.keyId)\n {\n throw new UnauthorizedError({ message: 'Invalid token: missing keyId' });\n }\n\n const keyId = decoded.keyId as string;\n\n // 2. Get public key from database\n // Query conditions:\n // - keyId matches (UUID)\n // - isActive = true (not revoked)\n const keyRecord = await keysRepository.findActiveByKeyId(keyId);\n\n if (!keyRecord)\n {\n throw new UnauthorizedError({ message: 'Invalid or revoked key' });\n }\n\n // 3. Check key expiration\n // Keys expire after 90 days by default\n if (keyRecord.expiresAt && new Date() > keyRecord.expiresAt)\n {\n throw new KeyExpiredError();\n }\n\n // 4. Verify JWT signature with public key\n // This validates:\n // - Signature matches (client signed with private key)\n // - Token not expired (15min default)\n // - Issuer is 'spfn-client'\n try\n {\n verifyClientToken(\n token,\n keyRecord.publicKey,\n keyRecord.algorithm as KeyAlgorithmType // entity.algorithm is always defined\n );\n }\n catch (err)\n {\n // Handle JWT verification errors\n if (err instanceof Error)\n {\n // Token expired (15min TTL)\n if (err.name === 'TokenExpiredError')\n {\n throw new TokenExpiredError();\n }\n\n // Invalid signature\n if (err.name === 'JsonWebTokenError')\n {\n throw new InvalidTokenError({ message: 'Invalid token signature' });\n }\n }\n\n // Generic authentication failure\n throw new UnauthorizedError({ message: 'Authentication failed' });\n }\n\n // 5. Get user from database\n const user = await usersRepository.findById(keyRecord.userId);\n if (!user)\n {\n throw new UnauthorizedError({ message: 'User not found' });\n }\n\n // 6. Check if user account is active\n // Status can be: active, inactive, suspended\n if (user.status !== 'active')\n {\n throw new AccountDisabledError({ status: user.status });\n }\n\n // 7. Update last used timestamp (fire-and-forget)\n // Don't await to avoid blocking the request\n // Useful for:\n // - Security audits\n // - Detecting inactive keys\n // - Key rotation reminders\n keysRepository.updateLastUsedById(keyRecord.id)\n .catch((err: unknown) => authLogger.middleware.error('Failed to update lastUsedAt', err));\n\n // 8. Attach auth data to context\n // Available in downstream route handlers via c.get('auth')\n c.set('auth', {\n user,\n userId: String(user.id),\n keyId,\n });\n\n // Log API access\n const method = c.req.method;\n const path = c.req.path;\n authLogger.middleware.info('API access', {\n userId: user.id,\n email: user.email,\n keyId,\n method,\n path,\n ip: c.req.header('x-forwarded-for') || c.req.header('x-real-ip'),\n userAgent: c.req.header('user-agent'),\n });\n\n // Continue to route handler\n await next();\n});","/**\n * @spfn/auth - Permission Middleware\n *\n * Middleware functions for permission-based access control\n */\n\nimport type { Context, Next } from 'hono';\nimport { defineMiddleware } from '@spfn/core/route';\nimport { ForbiddenError } from '@spfn/core/errors';\nimport { InsufficientPermissionsError } from '@spfn/auth/errors';\nimport { getAuth, hasAllPermissions, hasAnyPermission, authLogger } from '@spfn/auth/server';\n\n/**\n * Require user to have all specified permissions\n *\n * Must be used after authenticate middleware\n *\n * @param permissionNames - Permission names (e.g., 'user:delete', 'post:publish')\n * @returns Middleware function\n *\n * @example\n * ```typescript\n * // In route file\n * import { authenticate, requirePermissions } from '@spfn/auth/server/middleware';\n *\n * export const deleteUserRoute = route.delete('/users/:id')\n * .use([authenticate, requirePermissions('user:delete')])\n * .handler(async (c) => {\n * // Only users with user:delete permission\n * });\n *\n * // Multiple permissions (all required)\n * export const publishPostRoute = route.post('/posts/publish')\n * .use([authenticate, requirePermissions('post:write', 'post:publish')])\n * .handler(async (c) => {\n * // Needs both permissions\n * });\n *\n * // Skip permission check for specific route\n * export const publicRoute = route.get('/posts')\n * .skip(['permission']) // Type-safe skip\n * .handler(async (c) => { ... });\n * ```\n */\nexport const requirePermissions = defineMiddleware('permission',\n (...permissionNames: string[]) => async (c: Context, next: Next) =>\n {\n const auth = getAuth(c);\n\n if (!auth)\n {\n authLogger.middleware.warn('Permission check failed: not authenticated', {\n permissions: permissionNames,\n path: c.req.path,\n });\n\n throw new ForbiddenError({ message: 'Authentication required' });\n }\n\n const { userId } = auth;\n\n const allowed = await hasAllPermissions(userId, permissionNames);\n\n if (!allowed)\n {\n authLogger.middleware.warn('Permission check failed', {\n userId,\n requiredPermissions: permissionNames,\n path: c.req.path,\n });\n\n throw new InsufficientPermissionsError({ requiredPermissions: permissionNames });\n }\n\n authLogger.middleware.debug('Permission check passed', {\n userId,\n permissions: permissionNames,\n });\n\n await next();\n }\n);\n\n/**\n * Require user to have at least one of the specified permissions\n *\n * Must be used after authenticate middleware\n *\n * @param permissionNames - Permission names\n * @returns Middleware function\n *\n * @example\n * ```typescript\n * // In route file\n * import { authenticate, requireAnyPermission } from '@spfn/auth/server/middleware';\n *\n * export const viewContentRoute = route.get('/content')\n * .use([authenticate, requireAnyPermission('content:read', 'admin:access')])\n * .handler(async (c) => {\n * // User has either content:read OR admin:access\n * });\n *\n * // Skip any permission check for specific route\n * export const publicRoute = route.get('/public')\n * .skip(['anyPermission']) // Type-safe skip\n * .handler(async (c) => { ... });\n * ```\n */\nexport const requireAnyPermission = defineMiddleware('anyPermission',\n (...permissionNames: string[]) => async (c: Context, next: Next) =>\n {\n const auth = getAuth(c);\n\n if (!auth)\n {\n authLogger.middleware.warn('Any permission check failed: not authenticated', {\n permissions: permissionNames,\n path: c.req.path,\n });\n\n throw new ForbiddenError({ message: 'Authentication required' });\n }\n\n const { userId } = auth;\n const allowed = await hasAnyPermission(userId, permissionNames);\n if (!allowed)\n {\n authLogger.middleware.warn('Any permission check failed', {\n userId,\n requiredAnyOf: permissionNames,\n path: c.req.path,\n });\n\n throw new InsufficientPermissionsError({ requiredPermissions: permissionNames });\n }\n\n authLogger.middleware.debug('Any permission check passed', {\n userId,\n permissions: permissionNames,\n });\n\n await next();\n }\n);","/**\n * @spfn/auth - Role Middleware\n *\n * Middleware functions for role-based access control\n */\n\nimport type { Context, Next } from 'hono';\nimport { defineMiddleware } from '@spfn/core/route';\nimport { getAuth, hasAnyRole, authLogger } from '@spfn/auth/server';\nimport { ForbiddenError } from '@spfn/core/errors';\nimport { InsufficientRoleError } from '@spfn/auth/errors';\n\n/**\n * Require user to have one of the specified roles\n *\n * Must be used after authenticate middleware\n *\n * @param roleNames - Role names (e.g., 'admin', 'superadmin')\n * @returns Middleware function\n *\n * @example\n * ```typescript\n * // In route file\n * import { authenticate, requireRole } from '@spfn/auth/server/middleware';\n *\n * export const adminDashboardRoute = route.get('/admin/dashboard')\n * .use([authenticate, requireRole('admin', 'superadmin')])\n * .handler(async (c) => {\n * // Only admin or superadmin\n * });\n *\n * // Single role\n * export const systemConfigRoute = route.get('/admin/config')\n * .use([authenticate, requireRole('superadmin')])\n * .handler(async (c) => {\n * // Only superadmin\n * });\n *\n * // Skip role check for specific route\n * export const publicAdminRoute = route.get('/admin/public')\n * .skip(['role']) // Type-safe skip\n * .handler(async (c) => { ... });\n * ```\n */\nexport const requireRole = defineMiddleware('role',\n (...roleNames: string[]) => async (c: Context, next: Next) =>\n {\n const auth = getAuth(c);\n\n if (!auth)\n {\n authLogger.middleware.warn('Role check failed: not authenticated', {\n roles: roleNames,\n path: c.req.path,\n });\n throw new ForbiddenError({ message: 'Authentication required' });\n }\n\n const { userId } = auth;\n\n const allowed = await hasAnyRole(userId, roleNames);\n\n if (!allowed)\n {\n authLogger.middleware.warn('Role check failed', {\n userId,\n requiredRoles: roleNames,\n path: c.req.path,\n });\n throw new InsufficientRoleError({ requiredRoles: roleNames });\n }\n\n authLogger.middleware.debug('Role check passed', {\n userId,\n roles: roleNames,\n });\n\n await next();\n }\n);","/**\n * @spfn/auth - Role Guard Middleware\n *\n * Middleware for role-based access control with allow/deny options\n */\n\nimport type { Context, Next } from 'hono';\nimport { defineMiddleware } from '@spfn/core/route';\nimport { getAuth, getUserRole, authLogger } from '@spfn/auth/server';\nimport { ForbiddenError } from '@spfn/core/errors';\nimport { InsufficientRoleError } from '@spfn/auth/errors';\n\n/**\n * Role guard options\n */\nexport interface RoleGuardOptions\n{\n /**\n * Roles to allow (OR condition)\n * User must have at least one of these roles\n */\n allow?: string[];\n\n /**\n * Roles to deny\n * User with any of these roles will be rejected\n */\n deny?: string[];\n}\n\n/**\n * Role-based access control middleware\n *\n * Must be used after authenticate middleware\n *\n * @param options - Role guard options (allow/deny)\n * @returns Middleware function\n *\n * @example Allow specific roles\n * ```typescript\n * export const adminRoute = route.get('/admin')\n * .use([authenticate, roleGuard({ allow: ['admin', 'superadmin'] })])\n * .handler(async (c) => { ... });\n * ```\n *\n * @example Deny specific roles\n * ```typescript\n * export const publicRoute = route.get('/content')\n * .use([authenticate, roleGuard({ deny: ['banned', 'suspended'] })])\n * .handler(async (c) => { ... });\n * ```\n *\n * @example Combined allow and deny\n * ```typescript\n * export const managerRoute = route.get('/manage')\n * .use([authenticate, roleGuard({ allow: ['admin', 'manager'], deny: ['suspended'] })])\n * .handler(async (c) => { ... });\n * ```\n */\nexport const roleGuard = defineMiddleware('roleGuard',\n (options: RoleGuardOptions) => async (c: Context, next: Next) =>\n {\n const { allow, deny } = options;\n\n // Validate options\n if (!allow && !deny)\n {\n throw new Error('roleGuard requires at least one of: allow, deny');\n }\n\n const auth = getAuth(c);\n\n if (!auth)\n {\n authLogger.middleware.warn('Role guard failed: not authenticated', {\n path: c.req.path,\n });\n throw new ForbiddenError({ message: 'Authentication required' });\n }\n\n const { userId } = auth;\n const userRole = await getUserRole(userId);\n\n // 1. Check deny list first\n if (deny && deny.length > 0)\n {\n if (userRole && deny.includes(userRole))\n {\n authLogger.middleware.warn('Role guard denied', {\n userId,\n userRole,\n deniedRoles: deny,\n path: c.req.path,\n });\n throw new InsufficientRoleError({ requiredRoles: allow || [] });\n }\n }\n\n // 2. Check allow list (if specified)\n if (allow && allow.length > 0)\n {\n if (!userRole || !allow.includes(userRole))\n {\n authLogger.middleware.warn('Role guard failed: role not allowed', {\n userId,\n userRole,\n allowedRoles: allow,\n path: c.req.path,\n });\n throw new InsufficientRoleError({ requiredRoles: allow });\n }\n }\n\n // 3. If only deny is specified and user passed, allow access\n authLogger.middleware.debug('Role guard passed', {\n userId,\n userRole,\n allow,\n deny,\n });\n\n await next();\n }\n);\n","/**\n * @spfn/auth - User Profile Routes\n */\n\nimport { getAuth } from '../../helpers';\nimport { getUserProfileService, updateUserProfileService } from '../../services';\nimport { defineRouter, route } from '@spfn/core/route';\nimport { Type } from '@sinclair/typebox';\n\n/**\n * GET /_auth/users/profile\n * Get user profile (authenticated)\n *\n * Returns complete user profile information including:\n * - User basic info (id, email, verification status, timestamps)\n * - Profile data (optional)\n *\n * Does not include role and permissions\n * Use /_auth/session for authentication/authorization data\n *\n * Requires authentication\n */\nexport const getUserProfile = route.get('/_auth/users/profile')\n .handler(async (c) =>\n {\n const { userId } = getAuth(c);\n return await getUserProfileService(userId);\n });\n\n/**\n * PATCH /_auth/users/profile\n * Update user profile (authenticated)\n *\n * Creates profile if not exists (upsert)\n * Empty string values are saved as null\n *\n * Requires authentication\n */\nexport const updateUserProfile = route.patch('/_auth/users/profile')\n .input({\n body: Type.Object({\n displayName: Type.Optional(Type.String({ description: 'Display name shown in UI' })),\n firstName: Type.Optional(Type.String({ description: 'First name' })),\n lastName: Type.Optional(Type.String({ description: 'Last name' })),\n avatarUrl: Type.Optional(Type.String({ description: 'Avatar/profile picture URL' })),\n bio: Type.Optional(Type.String({ description: 'Short bio/description' })),\n locale: Type.Optional(Type.String({ description: 'Locale/language preference (e.g., en, ko)' })),\n timezone: Type.Optional(Type.String({ description: 'Timezone (e.g., Asia/Seoul)' })),\n dateOfBirth: Type.Optional(Type.String({ description: 'Date of birth (YYYY-MM-DD)' })),\n gender: Type.Optional(Type.String({ description: 'Gender' })),\n website: Type.Optional(Type.String({ description: 'Personal or professional website' })),\n location: Type.Optional(Type.String({ description: 'Location (city, country, etc.)' })),\n company: Type.Optional(Type.String({ description: 'Company name' })),\n jobTitle: Type.Optional(Type.String({ description: 'Job title' })),\n metadata: Type.Optional(Type.Record(Type.String(), Type.Any(), { description: 'Additional metadata' })),\n })\n })\n .handler(async (c) =>\n {\n const { userId } = getAuth(c);\n const { body } = await c.data();\n return await updateUserProfileService(userId, body);\n });\n\n// Export router\nexport const userRouter = defineRouter({\n getUserProfile: getUserProfile,\n updateUserProfile: updateUserProfile,\n});\n\n// For backward compatibility with file-based routing (temporary)\nexport default userRouter;","/**\n * @spfn/auth - Client Crypto Helpers\n *\n * ES256 (ECDSA P-256) key generation and JWT signing for Next.js\n * Keys are stored in DER format (Base64 encoded) for efficiency\n *\n * Key Sizes:\n * - ES256 (ECDSA P-256): ~91 bytes (Base64: ~120 chars)\n * - RS256 (RSA 2048): ~294 bytes (Base64: ~392 chars)\n */\n\nimport { type KeyAlgorithmType } from '../types';\nimport crypto from 'crypto';\nimport jwt, { type Algorithm, type SignOptions } from 'jsonwebtoken';\n\ntype Unit =\n | \"Years\"\n | \"Year\"\n | \"Yrs\"\n | \"Yr\"\n | \"Y\"\n | \"Weeks\"\n | \"Week\"\n | \"W\"\n | \"Days\"\n | \"Day\"\n | \"D\"\n | \"Hours\"\n | \"Hour\"\n | \"Hrs\"\n | \"Hr\"\n | \"H\"\n | \"Minutes\"\n | \"Minute\"\n | \"Mins\"\n | \"Min\"\n | \"M\"\n | \"Seconds\"\n | \"Second\"\n | \"Secs\"\n | \"Sec\"\n | \"s\"\n | \"Milliseconds\"\n | \"Millisecond\"\n | \"Msecs\"\n | \"Msec\"\n | \"Ms\";\n\ntype UnitAnyCase = Unit | Uppercase<Unit> | Lowercase<Unit>;\n\ntype StringValue =\n | `${number}`\n | `${number}${UnitAnyCase}`\n | `${number} ${UnitAnyCase}`;\n\nexport interface KeyPair\n{\n privateKey: string; // Base64 encoded DER\n publicKey: string; // Base64 encoded DER\n keyId: string; // UUID\n fingerprint: string; // SHA-256 hash\n algorithm: KeyAlgorithmType;\n}\n\n/**\n * Generate ECDSA P-256 key pair (ES256)\n * Recommended for optimal size and performance\n */\nexport function generateKeyPairES256(): KeyPair\n{\n const keyId = crypto.randomUUID();\n\n const { privateKey, publicKey } = crypto.generateKeyPairSync('ec', {\n namedCurve: 'P-256', // ES256\n publicKeyEncoding: {\n type: 'spki',\n format: 'der',\n },\n privateKeyEncoding: {\n type: 'pkcs8',\n format: 'der',\n },\n });\n\n // Convert Buffer to Base64\n const privateKeyB64 = privateKey.toString('base64');\n const publicKeyB64 = publicKey.toString('base64');\n\n // Generate fingerprint (SHA-256 of public key)\n const fingerprint = crypto\n .createHash('sha256')\n .update(publicKey)\n .digest('hex');\n\n return {\n privateKey: privateKeyB64,\n publicKey: publicKeyB64,\n keyId,\n fingerprint,\n algorithm: 'ES256',\n };\n}\n\n/**\n * Generate RSA 2048 key pair (RS256)\n * Fallback option, larger size but wider compatibility\n */\nexport function generateKeyPairRS256(): KeyPair\n{\n const keyId = crypto.randomUUID();\n\n const { privateKey, publicKey } = crypto.generateKeyPairSync('rsa', {\n modulusLength: 2048,\n publicKeyEncoding: {\n type: 'spki',\n format: 'der',\n },\n privateKeyEncoding: {\n type: 'pkcs8',\n format: 'der',\n },\n });\n\n const privateKeyB64 = privateKey.toString('base64');\n const publicKeyB64 = publicKey.toString('base64');\n\n const fingerprint = crypto\n .createHash('sha256')\n .update(publicKey)\n .digest('hex');\n\n return {\n privateKey: privateKeyB64,\n publicKey: publicKeyB64,\n keyId,\n fingerprint,\n algorithm: 'RS256',\n };\n}\n\n/**\n * Generate key pair (defaults to ES256)\n */\nexport function generateKeyPair(\n algorithm: KeyAlgorithmType = 'ES256'\n): KeyPair\n{\n return algorithm === 'ES256'\n ? generateKeyPairES256()\n : generateKeyPairRS256();\n}\n\n/**\n * Generate JWT signed with client private key (DER format)\n */\nexport function generateClientToken(\n payload: Record<string, any>,\n privateKeyB64: string,\n algorithm: Algorithm,\n options?: {\n expiresIn?: StringValue | number;\n issuer?: string;\n }\n): string\n{\n try\n {\n // Convert Base64 back to Buffer\n const privateKeyDER = Buffer.from(privateKeyB64, 'base64');\n\n // Create key object for signing\n const privateKeyObject = crypto.createPrivateKey({\n key: privateKeyDER,\n format: 'der',\n type: 'pkcs8',\n });\n\n // Export as PEM for jwt.sign\n const privateKeyPEM = privateKeyObject.export({\n type: 'pkcs8',\n format: 'pem',\n });\n\n const signOptions: SignOptions = {\n algorithm,\n issuer: options?.issuer || 'spfn-client',\n expiresIn: options?.expiresIn ?? '15m', // Default to 15 minutes\n }\n\n return jwt.sign(payload, privateKeyPEM, signOptions);\n }\n catch (error)\n {\n throw new Error(\n `Failed to generate client token: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n}\n\n/**\n * Get key size information\n */\nexport function getKeySize(publicKeyB64: string): {\n bytes: number;\n base64Length: number;\n}\n{\n const keyDER = Buffer.from(publicKeyB64, 'base64');\n\n return {\n bytes: keyDER.length,\n base64Length: publicKeyB64.length,\n };\n}\n\n/**\n * Check if key should be rotated based on creation date\n */\nexport function shouldRotateKey(\n createdAt: Date,\n rotationDays: number = 90\n): {\n shouldRotate: boolean;\n daysRemaining: number;\n}\n{\n const now = new Date();\n const ageInDays = Math.floor(\n (now.getTime() - createdAt.getTime()) / (1000 * 60 * 60 * 24)\n );\n const daysRemaining = Math.max(0, rotationDays - ageInDays);\n\n return {\n shouldRotate: daysRemaining <= 7, // Warn 7 days before expiry\n daysRemaining,\n };\n}","/**\n * @spfn/auth - Client Session Management\n *\n * Uses Jose JWE (JSON Web Encryption) to securely store session data in cookies\n * More efficient than Iron Session with better Edge Runtime support\n */\n\nimport * as jose from 'jose';\nimport { env } from '@spfn/auth/config';\nimport { env as coreEnv } from '@spfn/core/config';\n\nimport { type KeyAlgorithmType } from '../types';\n\nexport interface SessionData\n{\n userId: string;\n privateKey: string; // Base64 encoded DER\n keyId: string;\n algorithm: KeyAlgorithmType;\n}\n\n/**\n * Get session secret key derived from environment\n * Must be at least 32 characters (256-bit)\n *\n * Derives a 32-byte key using SHA-256 to ensure compatibility with Jose A256GCM\n */\nasync function getSessionSecretKey(): Promise<Uint8Array>\n{\n const secret = env.SPFN_AUTH_SESSION_SECRET;\n\n // Derive a 32-byte key using SHA-256 for A256GCM compatibility\n // Use Web Crypto API for universal compatibility (browser + Node.js)\n const encoder = new TextEncoder();\n const data = encoder.encode(secret);\n const hashBuffer = await crypto.subtle.digest('SHA-256', data);\n return new Uint8Array(hashBuffer);\n}\n\n/**\n * Seal session data into encrypted JWT (JWE)\n *\n * @param data - Session data to encrypt\n * @param ttl - Time to live in seconds (default: 7 days)\n * @returns Encrypted JWT string\n */\nexport async function sealSession(\n data: SessionData,\n ttl: number = 60 * 60 * 24 * 7 // 7 days\n): Promise<string>\n{\n const secret = await getSessionSecretKey();\n\n return await new jose.EncryptJWT({ data })\n .setProtectedHeader({ alg: 'dir', enc: 'A256GCM' })\n .setIssuedAt()\n .setExpirationTime(`${ttl}s`)\n .setIssuer('spfn-auth')\n .setAudience('spfn-client')\n .encrypt(secret);\n}\n\n/**\n * Unseal encrypted JWT (JWE) to session data\n *\n * @param jwt - Encrypted JWT string\n * @returns Session data\n * @throws Error if session is invalid or expired\n */\nexport async function unsealSession(jwt: string): Promise<SessionData>\n{\n try\n {\n const secret = await getSessionSecretKey();\n\n const { payload } = await jose.jwtDecrypt(jwt, secret, {\n issuer: 'spfn-auth',\n audience: 'spfn-client',\n });\n\n return payload.data as SessionData;\n }\n catch (err)\n {\n if (err instanceof jose.errors.JWTExpired)\n {\n throw new Error('Session expired');\n }\n\n if (err instanceof jose.errors.JWEDecryptionFailed)\n {\n throw new Error('Invalid session');\n }\n\n if (err instanceof jose.errors.JWTClaimValidationFailed)\n {\n throw new Error('Session validation failed');\n }\n\n throw new Error('Failed to unseal session');\n }\n}\n\n/**\n * Get session metadata without decrypting\n *\n * @param jwt - Encrypted JWT string\n * @returns Session metadata or null if invalid\n */\nexport async function getSessionInfo(jwt: string): Promise<{\n issuedAt: Date;\n expiresAt: Date;\n issuer: string;\n audience: string;\n} | null>\n{\n const secret = await getSessionSecretKey();\n\n try\n {\n const { payload } = await jose.jwtDecrypt(jwt, secret);\n\n return {\n issuedAt: new Date(payload.iat! * 1000),\n expiresAt: new Date(payload.exp! * 1000),\n issuer: payload.iss || '',\n audience: Array.isArray(payload.aud) ? payload.aud[0] : payload.aud || '',\n };\n }\n catch (err)\n {\n // Log error for debugging but return null for graceful handling\n if (coreEnv.NODE_ENV !== 'production')\n {\n console.warn('[Session] Failed to get session info:', err instanceof Error ? err.message : 'Unknown error');\n }\n\n return null;\n }\n}\n\n/**\n * Check if session is about to expire (within threshold)\n *\n * @param jwt - Encrypted JWT string\n * @param thresholdHours - Hours before expiry to trigger refresh (default: 24)\n * @returns True if session should be refreshed\n */\nexport async function shouldRefreshSession(\n jwt: string,\n thresholdHours: number = 24\n): Promise<boolean>\n{\n const info = await getSessionInfo(jwt);\n\n if (!info)\n {\n return true;\n }\n\n const hoursRemaining = (info.expiresAt.getTime() - Date.now()) / (1000 * 60 * 60);\n\n return hoursRemaining < thresholdHours;\n}","/**\n * @spfn/auth - Setup Functions\n *\n * Initial setup and admin account creation\n */\n\nimport { env } from '@spfn/auth/config';\nimport { getRoleByName } from '@spfn/auth/server';\n\nimport { hashPassword } from './helpers';\nimport { authLogger } from './logger';\nimport { usersRepository } from './repositories';\n\n/**\n * Admin account configuration\n */\ninterface AdminAccountConfig\n{\n email: string;\n password: string;\n role?: string; // Role name (e.g., 'user', 'admin', 'superadmin')\n phone?: string;\n passwordChangeRequired?: boolean;\n}\n\n/**\n * Parse admin accounts from environment variables\n *\n * Supports three formats (in priority order):\n *\n * 1. JSON format (ADMIN_ACCOUNTS):\n * ```\n * ADMIN_ACCOUNTS='[{\"email\":\"admin@example.com\",\"password\":\"pass\",\"role\":\"superadmin\"}]'\n * ```\n *\n * 2. Comma-separated format (ADMIN_EMAILS + ADMIN_PASSWORDS + ADMIN_ROLES):\n * ```\n * ADMIN_EMAILS=admin@example.com,user@example.com\n * ADMIN_PASSWORDS=admin-pass,user-pass\n * ADMIN_ROLES=superadmin,user\n * ```\n *\n * 3. Single account format (legacy, ADMIN_EMAIL + ADMIN_PASSWORD):\n * ```\n * ADMIN_EMAIL=admin@example.com\n * ADMIN_PASSWORD=admin-password\n * ```\n *\n * @returns Array of admin account configurations\n */\nfunction parseAdminAccounts(): AdminAccountConfig[]\n{\n const accounts: AdminAccountConfig[] = [];\n\n // Method 1: JSON format (highest priority)\n if (env.SPFN_AUTH_ADMIN_ACCOUNTS)\n {\n try\n {\n const accountsJson = env.SPFN_AUTH_ADMIN_ACCOUNTS;\n\n const parsed = JSON.parse(accountsJson);\n\n if (!Array.isArray(parsed))\n {\n authLogger.setup.error('❌ SPFN_AUTH_ADMIN_ACCOUNTS must be an array');\n return accounts;\n }\n\n for (const item of parsed)\n {\n if (!item.email || !item.password)\n {\n authLogger.setup.warn('⚠️ Skipping account: missing email or password');\n continue;\n }\n\n accounts.push({\n email: item.email,\n password: item.password,\n role: item.role || 'user',\n phone: item.phone,\n passwordChangeRequired: item.passwordChangeRequired !== false, // Default: true\n });\n }\n\n return accounts;\n }\n catch (error)\n {\n const err = error as Error;\n authLogger.setup.error('❌ Failed to parse SPFN_AUTH_ADMIN_ACCOUNTS:', err);\n return accounts;\n }\n }\n\n // Method 2: Comma-separated format\n const adminEmails = env.SPFN_AUTH_ADMIN_EMAILS;\n\n if (adminEmails)\n {\n const emails = adminEmails.split(',').map(s => s.trim());\n const passwords = (env.SPFN_AUTH_ADMIN_PASSWORDS || '').split(',').map(s => s.trim());\n const roles = (env.SPFN_AUTH_ADMIN_ROLES || '').split(',').map(s => s.trim());\n\n // Validate lengths match\n if (passwords.length !== emails.length)\n {\n authLogger.setup.error('❌ SPFN_AUTH_ADMIN_EMAILS and SPFN_AUTH_ADMIN_PASSWORDS length mismatch');\n return accounts;\n }\n\n for (let i = 0; i < emails.length; i++)\n {\n const email = emails[i];\n const password = passwords[i];\n const role = roles[i] || 'user';\n\n if (!email || !password)\n {\n authLogger.setup.warn(`⚠️ Skipping account ${i + 1}: missing email or password`);\n continue;\n }\n\n accounts.push({\n email,\n password,\n role,\n passwordChangeRequired: true,\n });\n }\n\n return accounts;\n }\n\n // Method 3: Single account (legacy format)\n const adminEmail = env.SPFN_AUTH_ADMIN_EMAIL;\n const adminPassword = env.SPFN_AUTH_ADMIN_PASSWORD;\n\n if (adminEmail && adminPassword)\n {\n accounts.push({\n email: adminEmail,\n password: adminPassword,\n role: 'superadmin',\n passwordChangeRequired: true,\n });\n }\n\n return accounts;\n}\n\n/**\n * Ensure admin accounts exist from environment variables\n *\n * Supports multiple admin account creation via three formats:\n * 1. JSON format (SPFN_AUTH_ADMIN_ACCOUNTS)\n * 2. Comma-separated format (SPFN_AUTH_ADMIN_EMAILS + SPFN_AUTH_ADMIN_PASSWORDS + SPFN_AUTH_ADMIN_ROLES)\n * 3. Single account format (SPFN_AUTH_ADMIN_EMAIL + SPFN_AUTH_ADMIN_PASSWORD) - legacy\n *\n * Default behavior for created accounts:\n * - emailVerifiedAt: current timestamp (auto-verified)\n * - passwordChangeRequired: true (must change on first login)\n * - status: 'active'\n *\n * @example\n * ```typescript\n * // In your server startup code:\n * import { ensureAdminExists } from '@spfn/auth/server';\n *\n * await ensureAdminExists();\n * ```\n */\nexport async function ensureAdminExists(): Promise<void>\n{\n const accounts = parseAdminAccounts();\n\n // Skip if no accounts configured\n if (accounts.length === 0)\n {\n return;\n }\n\n authLogger.setup.info(`Creating ${accounts.length} admin account(s)...`);\n\n let created = 0;\n let skipped = 0;\n let failed = 0;\n\n for (const account of accounts)\n {\n authLogger.setup.info(`Creating ${account.email} admin account(s)...`);\n\n try\n {\n // Check if account already exists\n const existing = await usersRepository.findByEmail(account.email);\n\n if (existing)\n {\n authLogger.setup.info(`⚠️ Account already exists: ${account.email} (skipped)`);\n skipped++;\n continue;\n }\n\n // Get role ID from role name\n const roleName = account.role || 'user';\n const role = await getRoleByName(roleName);\n\n if (!role)\n {\n authLogger.setup.error(`❌ Role '${roleName}' not found for ${account.email}. Run initializeAuth() first.`);\n failed++;\n continue;\n }\n\n // Hash password\n const passwordHash = await hashPassword(account.password);\n\n // Create admin account\n await usersRepository.create({\n email: account.email,\n phone: account.phone || null,\n passwordHash,\n roleId: role.id,\n emailVerifiedAt: new Date(), // Auto-verify admin\n passwordChangeRequired: account.passwordChangeRequired !== false,\n status: 'active',\n });\n\n authLogger.setup.info(`✅ Admin account created: ${account.email} (${roleName})`);\n created++;\n }\n catch (error)\n {\n const err = error as Error;\n authLogger.setup.error(`❌ Failed to create account ${account.email}:`, err);\n failed++;\n }\n }\n\n // Summary\n authLogger.setup.info(`📊 Summary: ${created} created, ${skipped} skipped, ${failed} failed`);\n\n if (created > 0)\n {\n authLogger.setup.info('⚠️ Please change passwords on first login!');\n }\n}","/**\n * @spfn/auth - Server Lifecycle Hooks\n *\n * Provides lifecycle hooks for SPFN server initialization\n */\n\nimport type { AuthInitOptions } from './rbac';\nimport { ensureAdminExists } from './setup';\nimport { initializeAuth } from './services';\n\n/**\n * Auth lifecycle configuration\n */\nexport interface AuthLifecycleConfig\n{\n beforeInfrastructure?: () => Promise<void>;\n afterInfrastructure?: () => Promise<void>;\n}\n\n/**\n * Create auth lifecycle hooks for server configuration\n *\n * Provides essential initialization hooks:\n * - `beforeInfrastructure`: Validates environment variables before DB connection\n * - `afterInfrastructure`: Sets up admin accounts and initializes RBAC after DB is ready\n *\n * @param options - Auth initialization options (custom roles, permissions, mappings)\n *\n * @example Basic usage\n * ```typescript\n * import { defineServerConfig } from '@spfn/core/server';\n * import { createAuthLifecycle } from '@spfn/auth';\n * import { appRouter } from './router';\n *\n * export default defineServerConfig()\n * .port(8790)\n * .routes(appRouter)\n * .lifecycle(createAuthLifecycle())\n * .build();\n * ```\n *\n * @example With custom roles and permissions\n * ```typescript\n * export default defineServerConfig()\n * .port(8790)\n * .routes(appRouter)\n * .lifecycle(createAuthLifecycle({\n * roles: [\n * { name: 'project-manager', displayName: 'Project Manager', priority: 50 },\n * { name: 'developer', displayName: 'Developer', priority: 30 },\n * ],\n * permissions: [\n * { name: 'project:create', displayName: 'Create Project', category: 'custom' },\n * { name: 'task:assign', displayName: 'Assign Task', category: 'custom' },\n * ],\n * rolePermissions: {\n * 'project-manager': ['project:create', 'task:assign'],\n * 'developer': ['task:complete'],\n * },\n * sessionTtl: '30d'\n * }))\n * .build();\n * ```\n *\n * @example With custom lifecycle hooks\n * ```typescript\n * // You can call lifecycle() multiple times - all hooks will be executed in order\n * export default defineServerConfig()\n * .port(8790)\n * .routes(appRouter)\n * .lifecycle(createAuthLifecycle()) // Auth initialization runs first\n * .lifecycle({\n * afterInfrastructure: async () => {\n * // This runs after auth initialization\n * await myCustomSetup();\n * }\n * })\n * .build();\n * ```\n */\nexport function createAuthLifecycle(options: AuthInitOptions = {}): AuthLifecycleConfig\n{\n return {\n /**\n * Initialize auth system after database is ready\n *\n * Performs:\n * 1. Ensures admin account exists (creates if missing)\n * 2. Initializes RBAC system with built-in + custom roles/permissions\n */\n afterInfrastructure: async () =>\n {\n await initializeAuth(options);\n await ensureAdminExists();\n }\n };\n}"],"mappings":"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","names":["value","init_value","init_value","init_value","IsObject","IsArray","IsUndefined","IsNumber","init_guard","init_guard","TypeSystemPolicy","IsObject","IsArray","IsNumber","IsUndefined","value","init_type","init_value","init_type","init_error","init_symbols","IsArray","IsAsyncIterator","IsBigInt","IsBoolean","IsDate","IsFunction","IsIterator","IsNull","IsNumber","IsObject","IsRegExp","IsString","IsSymbol","IsUndefined","IsUint8Array","init_symbols","IsAny","IsArgument","IsArray","IsAsyncIterator","IsBigInt","IsBoolean","IsComputed","IsConstructor","IsDate","IsFunction","IsInteger","IsIntersect","IsIterator","IsKind","IsKindOf","IsLiteral","IsLiteralValue","IsMappedKey","IsMappedResult","IsNever","IsNot","IsNull","IsNumber","IsObject","IsOptional","IsPromise","IsReadonly","IsRecord","IsRef","IsRegExp","IsSchema","IsString","IsSymbol","IsTemplateLiteral","IsThis","IsTransform","IsTuple","IsUint8Array","IsUndefined","IsUnion","IsUnknown","IsUnsafe","IsVoid","init_type","init_symbols","init_error","init_guard","init_type","init_helpers","init_patterns","init_type","init_type","init_symbols","init_any","Array","init_type","init_symbols","init_array","index","init_type","init_symbols","init_argument","init_symbols","init_type","init_async_iterator","init_computed","init_discard","init_type","init_symbols","init_never","init_type","init_symbols","init_type","init_symbols","init_constructor","init_type","init_symbols","init_function","init_type","init_symbols","init_type","init_symbols","init_discard","init_never","init_optional","init_never","init_type","init_union","index","range","pattern","init_error","init_error","init_error","init_type","init_symbols","init_literal","init_symbols","init_boolean","init_symbols","init_bigint","Number","init_type","init_symbols","init_number","String","init_type","init_symbols","init_string","Number","String","init_literal","init_boolean","init_bigint","init_number","init_string","init_union","init_never","Visit","schema","IsNumber","IsBigInt","IsString","IsBoolean","init_patterns","init_symbols","init_error","init_union","init_literal","init_type","init_symbols","init_template_literal","init_union","FromUnion","IsNumber","init_template_literal","init_mapped","init_indexed","FromUnion","IsArray","IsObject","init_type","init_error","init_computed","init_never","init_intersect","init_union","init_mapped","init_value","init_indexed","init_type","init_symbols","init_iterator","Object","init_type","init_symbols","init_object","Promise","init_type","init_symbols","init_promise","init_type","init_symbols","init_discard","FromProperties","FromMappedResult","init_mapped","init_readonly","init_type","init_symbols","init_tuple","FromMappedResult","FromRest","FromProperties","IsFunction","IsAsyncIterator","IsIterator","IsObject","Object","IsArray","Array","Promise","init_symbols","init_discard","init_array","init_async_iterator","init_constructor","init_function","init_indexed","init_intersect","init_iterator","init_literal","init_object","init_optional","init_promise","init_readonly","init_tuple","init_union","init_mapped","init_type","init_symbols","init_discard","FromProperties","FromMappedResult","init_mapped","init_optional","IsObject","init_type","init_symbols","RemoveOptionalFromType","RemoveOptionalFromRest","init_symbols","init_type","init_discard","init_never","init_optional","init_type","init_never","init_intersect","init_error","init_type","init_symbols","init_ref","FromIntersect","FromRest","FromUnion","init_type","init_computed","init_intersect","init_union","init_ref","init_awaited","FromRest","FromIntersect","FromUnion","FromTuple","FromArray","FromProperties","IsArray","IsObject","FromComputed","FromRef","Number","init_type","init_literal","init_number","init_computed","init_ref","init_union","FromProperties","FromMappedResult","init_mapped","init_value","init_keyof","Object","init_intersect","init_indexed","init_keyof","init_object","init_composite","Date","init_symbols","init_type","init_date","init_type","init_symbols","init_null","Symbol","init_type","init_symbols","init_symbol","init_type","init_symbols","init_undefined","Uint8Array","init_type","init_symbols","init_uint8array","init_type","init_symbols","init_unknown","FromArray","FromProperties","Uint8Array","Date","Object","Symbol","init_any","init_bigint","init_date","init_function","init_literal","init_null","init_object","init_symbol","init_tuple","init_readonly","init_undefined","init_uint8array","init_unknown","init_const","init_tuple","init_never","init_constructor_parameters","init_literal","init_symbols","init_union","init_enum","FromArray","Visit","index","FromIntersect","FromLiteral","Number","FromPromise","String","FromTemplateLiteral","FromTuple","FromUnion","init_any","init_function","init_number","init_string","init_unknown","init_template_literal","init_patterns","init_symbols","init_error","init_guard","ExtendsResult","FromProperties","FromMappedResult","init_mapped","init_value","init_type","init_union","FromMappedKey","init_mapped","init_literal","init_value","init_extends","init_template_literal","init_type","init_union","init_never","init_extends","FromProperties","FromMappedResult","init_mapped","init_exclude","init_template_literal","init_type","init_union","init_never","init_extends","FromProperties","FromMappedResult","init_mapped","init_extract","init_type","init_never","init_instance_type","init_readonly","init_optional","init_readonly_optional","Object","IsBoolean","IsNumber","IsRegExp","IsString","RecordKey","String","Number","RecordValue","init_type","init_symbols","init_never","init_number","init_object","init_string","init_union","init_template_literal","init_patterns","init_indexed","init_record","FromConstructor","FromFunction","FromIntersect","FromUnion","FromTuple","FromArray","FromAsyncIterator","FromIterator","FromPromise","FromObject","FromProperties","Object","FromRecord","RecordKey","RecordValue","FromProperty","IsFunction","IsArray","IsAsyncIterator","IsIterator","IsObject","init_unknown","init_readonly_optional","init_readonly","init_optional","init_object","init_record","init_instantiate","init_type","init_symbols","init_integer","init_mapped","init_literal","init_value","FromTemplateLiteral","FromRest","init_type","init_template_literal","init_literal","init_union","init_intrinsic","FromProperties","FromMappedResult","init_mapped","init_value","FromIntersect","FromUnion","FromProperty","FromProperties","FromObject","Object","result","IsObject","init_type","init_computed","init_literal","init_indexed","init_intersect","init_union","init_object","FromPropertyKey","FromPropertyKeys","FromMappedKey","init_mapped","init_value","init_omit","FromProperties","FromMappedResult","init_mapped","init_value","FromIntersect","FromUnion","FromProperties","FromObject","Object","UnionFromPropertyKeys","result","IsObject","init_type","init_computed","init_intersect","init_literal","init_object","init_union","init_indexed","FromPropertyKey","FromPropertyKeys","FromMappedKey","init_mapped","init_value","init_pick","FromComputed","FromRef","FromProperties","FromObject","Object","FromRest","IsObject","IsBigInt","IsBoolean","IsNull","IsNumber","IsString","IsSymbol","IsUndefined","init_type","init_computed","init_optional","init_object","init_intersect","init_union","init_ref","init_discard","init_symbols","FromProperties","FromMappedResult","init_mapped","init_value","init_partial","FromComputed","FromRef","FromProperties","FromObject","Object","FromRest","IsObject","IsBigInt","IsBoolean","IsNull","IsNumber","IsString","IsSymbol","IsUndefined","init_type","init_computed","init_object","init_intersect","init_union","init_ref","init_symbols","init_discard","FromProperties","FromMappedResult","init_mapped","init_required","FromType","FromComputed","FromArray","Array","FromAsyncIterator","FromConstructor","FromTypes","FromFunction","FromIntersect","FromIterator","FromObject","Object","FromRecord","RecordValue","FromTuple","FromUnion","IsArray","IsAsyncIterator","IsFunction","IsIterator","IsObject","init_discard","init_array","init_awaited","init_async_iterator","init_constructor","init_indexed","init_function","init_intersect","init_iterator","init_keyof","init_object","init_omit","init_pick","init_never","init_partial","init_record","init_required","init_tuple","init_union","init_symbols","init_symbols","init_module","init_type","init_symbols","init_not","IsFunction","init_tuple","init_never","init_parameters","init_type","init_symbols","init_recursive","RegExp","init_type","init_symbols","init_regexp","init_rest","IsFunction","init_type","init_never","init_return_type","init_schema","init_static","init_symbols","init_transform","init_type","init_symbols","init_unsafe","init_type","init_symbols","init_void","type_exports","Array","Date","Number","Object","Promise","RegExp","String","Symbol","Uint8Array","init_type","init_any","init_argument","init_array","init_async_iterator","init_awaited","init_bigint","init_boolean","init_composite","init_const","init_constructor","init_constructor_parameters","init_date","init_enum","init_exclude","init_extends","init_extract","init_function","init_indexed","init_instance_type","init_instantiate","init_integer","init_intersect","init_intrinsic","init_iterator","init_keyof","init_literal","init_mapped","init_module","init_never","init_not","init_null","init_number","init_object","init_omit","init_optional","init_parameters","init_partial","init_pick","init_promise","init_readonly","init_readonly_optional","init_record","init_recursive","init_ref","init_regexp","init_required","init_rest","init_return_type","init_string","init_symbol","init_template_literal","init_transform","init_tuple","init_uint8array","init_undefined","init_union","init_unknown","init_unsafe","init_void","init_type","type_exports","init_error","init_guard","init_helpers","init_patterns","init_symbols","init_any","init_array","init_argument","init_async_iterator","init_awaited","init_bigint","init_boolean","init_composite","init_const","init_constructor","init_constructor_parameters","init_date","init_enum","init_exclude","init_extends","init_extract","init_function","init_indexed","init_instance_type","init_instantiate","init_integer","init_intersect","init_iterator","init_intrinsic","init_keyof","init_literal","init_module","init_mapped","init_never","init_not","init_null","init_number","init_object","init_omit","init_optional","init_parameters","init_partial","init_pick","init_promise","init_readonly","init_readonly_optional","init_record","init_recursive","init_ref","init_regexp","init_required","init_rest","init_return_type","init_schema","init_static","init_string","init_symbol","init_template_literal","init_transform","init_tuple","init_uint8array","init_undefined","init_union","init_unknown","init_unsafe","init_void","init_type","init_schema","init_schema","init_schema","text","boolean","index","id","timestamps","init_schema","text","index","id","timestamps","foreignKey","init_schema","text","boolean","index","id","foreignKey","enumText","utcTimestamp","init_schema","text","index","id","timestamps","foreignKey","enumText","utcTimestamp","init_schema","text","index","integer","check","id","timestamps","enumText","utcTimestamp","sql","init_schema","text","index","id","timestamps","enumText","utcTimestamp","typedJsonb","foreignKey","init_schema","init_types","init_types","text","boolean","index","id","timestamps","enumText","typedJsonb","init_schema","index","id","timestamps","foreignKey","init_schema","boolean","text","index","unique","id","timestamps","utcTimestamp","foreignKey","init_schema","init_schema","id","BaseRepository","eq","and","id","BaseRepository","eq","and","id","BaseRepository","eq","id","BaseRepository","asc","eq","id","BaseRepository","and","eq","BaseRepository","eq","and","isNull","lt","gt","id","BaseRepository","eq","id","eq","and","lt","sql","BaseRepository","id","id","defineRouter","init_schema","errors","crypto","env","env","jwt","env","env","currentProvider","fallbackProvider","env","text","env","jwt","env","text","getRoleByName","env","id","crypto","crypto","id","EMAIL_PATTERN","verifyClientToken","decodeToken","authLogger","keysRepository","usersRepository","AccountDisabledError","defineMiddleware","getAuth","hasAllPermissions","hasAnyPermission","authLogger","defineMiddleware","getAuth","hasAnyRole","authLogger","ForbiddenError","defineMiddleware","getAuth","getUserRole","authLogger","ForbiddenError","InsufficientRoleError","defineRouter","route","INVITATION_STATUSES","acceptInvitation","createInvitation","EMAIL_PATTERN","listInvitations","cancelInvitation","resendInvitation","deleteInvitation","defineRouter","route","defineRouter","init_schema","crypto","jwt","env","jwt","env","getRoleByName","env","roles","getRoleByName"]}
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/guard/value.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/clone/value.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/clone/type.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/clone/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/value/guard/guard.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/value/guard/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/system/policy.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/create/immutable.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/create/type.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/create/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/error/error.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/error/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/symbols/symbols.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/symbols/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/guard/kind.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/guard/type.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/guard/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/helpers/helpers.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/helpers/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/patterns/patterns.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/patterns/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/registry/format.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/registry/type.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/registry/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/sets/set.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/sets/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/any/any.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/any/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/array/array.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/array/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/argument/argument.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/argument/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/async-iterator/async-iterator.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/async-iterator/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/computed/computed.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/computed/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/discard/discard.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/discard/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/never/never.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/never/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/mapped/mapped-key.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/mapped/mapped-result.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/constructor/constructor.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/constructor/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/function/function.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/function/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/union/union-create.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/union/union-evaluated.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/union/union-type.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/union/union.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/union/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/template-literal/parse.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/template-literal/finite.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/template-literal/generate.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/literal/literal.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/literal/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/boolean/boolean.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/boolean/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/bigint/bigint.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/bigint/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/number/number.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/number/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/string/string.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/string/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/template-literal/syntax.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/template-literal/pattern.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/template-literal/union.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/template-literal/template-literal.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/template-literal/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/indexed/indexed-property-keys.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/indexed/indexed-from-mapped-result.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/indexed/indexed.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/indexed/indexed-from-mapped-key.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/indexed/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/iterator/iterator.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/iterator/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/object/object.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/object/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/promise/promise.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/promise/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/readonly/readonly.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/readonly/readonly-from-mapped-result.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/readonly/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/tuple/tuple.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/tuple/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/mapped/mapped.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/mapped/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/optional/optional.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/optional/optional-from-mapped-result.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/optional/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/intersect/intersect-create.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/intersect/intersect-evaluated.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/intersect/intersect-type.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/intersect/intersect.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/intersect/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/ref/ref.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/ref/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/awaited/awaited.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/awaited/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/keyof/keyof-property-keys.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/keyof/keyof.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/keyof/keyof-from-mapped-result.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/keyof/keyof-property-entries.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/keyof/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/composite/composite.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/composite/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/date/date.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/date/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/null/null.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/null/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/symbol/symbol.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/symbol/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/undefined/undefined.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/undefined/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/uint8array/uint8array.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/uint8array/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/unknown/unknown.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/unknown/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/const/const.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/const/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/constructor-parameters/constructor-parameters.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/constructor-parameters/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/enum/enum.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/enum/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/extends/extends-check.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/extends/extends-from-mapped-result.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/extends/extends.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/extends/extends-from-mapped-key.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/extends/extends-undefined.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/extends/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/exclude/exclude-from-template-literal.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/exclude/exclude.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/exclude/exclude-from-mapped-result.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/exclude/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/extract/extract-from-template-literal.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/extract/extract.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/extract/extract-from-mapped-result.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/extract/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/instance-type/instance-type.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/instance-type/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/readonly-optional/readonly-optional.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/readonly-optional/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/record/record.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/record/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/instantiate/instantiate.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/instantiate/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/integer/integer.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/integer/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/intrinsic/intrinsic-from-mapped-key.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/intrinsic/intrinsic.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/intrinsic/capitalize.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/intrinsic/lowercase.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/intrinsic/uncapitalize.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/intrinsic/uppercase.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/intrinsic/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/omit/omit-from-mapped-result.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/omit/omit.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/omit/omit-from-mapped-key.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/omit/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/pick/pick-from-mapped-result.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/pick/pick.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/pick/pick-from-mapped-key.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/pick/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/partial/partial.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/partial/partial-from-mapped-result.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/partial/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/required/required.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/required/required-from-mapped-result.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/required/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/module/compute.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/module/module.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/module/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/not/not.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/not/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/parameters/parameters.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/parameters/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/recursive/recursive.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/recursive/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/regexp/regexp.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/regexp/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/rest/rest.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/rest/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/return-type/return-type.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/return-type/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/schema/anyschema.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/schema/schema.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/schema/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/static/static.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/static/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/transform/transform.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/transform/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/unsafe/unsafe.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/unsafe/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/void/void.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/void/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/type/type.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/type/index.mjs","../../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/index.mjs","../src/server/routes/schema.ts","../src/server/types.ts","../src/server/entities/schema.ts","../src/server/entities/roles.ts","../src/server/entities/users.ts","../src/server/entities/user-profiles.ts","../src/server/entities/user-public-keys.ts","../src/server/entities/user-social-accounts.ts","../src/server/entities/verification-codes.ts","../src/server/entities/user-invitations.ts","../src/server/rbac/types.ts","../src/server/rbac/builtin.ts","../src/server/rbac/index.ts","../src/server/entities/permissions.ts","../src/server/entities/role-permissions.ts","../src/server/entities/user-permissions.ts","../src/server/entities/index.ts","../src/server/repositories/users.repository.ts","../src/server/repositories/keys.repository.ts","../src/server/repositories/verification-codes.repository.ts","../src/server/repositories/roles.repository.ts","../src/server/repositories/permissions.repository.ts","../src/server/repositories/role-permissions.repository.ts","../src/server/repositories/user-permissions.repository.ts","../src/server/repositories/user-profiles.repository.ts","../src/server/repositories/invitations.repository.ts","../src/server/repositories/index.ts","../src/server/services/role.service.ts","../src/server.ts","../src/server/routes/index.ts","../src/server/routes/auth/index.ts","../src/server/helpers/password.ts","../src/server/helpers/jwt.ts","../src/server/helpers/context.ts","../src/server/services/auth.service.ts","../src/server/services/verification.service.ts","../src/server/logger.ts","../src/server/services/sms/provider.ts","../src/server/services/sms/aws-sns.provider.ts","../src/server/services/sms/index.ts","../src/server/services/email/provider.ts","../src/server/services/email/aws-ses.provider.ts","../src/server/services/email/index.ts","../src/server/services/email/templates/verification-code.ts","../src/server/services/email/templates/registry.ts","../src/server/services/key.service.ts","../src/server/services/user.service.ts","../src/server/services/rbac.service.ts","../src/server/lib/config.ts","../src/server/services/permission.service.ts","../src/server/services/index.ts","../src/server/services/invitation.service.ts","../src/server/services/auth-session.service.ts","../src/server/services/user-profile.service.ts","../src/server/routes/invitations/index.ts","../src/server/middleware/authenticate.ts","../src/server/middleware/require-permission.ts","../src/server/middleware/require-role.ts","../src/server/middleware/role-guard.ts","../src/server/routes/users/index.ts","../src/server/lib/crypto.ts","../src/server/lib/session.ts","../src/server/setup.ts","../src/server/lifecycle.ts"],"sourcesContent":["// --------------------------------------------------------------------------\n// PropertyKey\n// --------------------------------------------------------------------------\n/** Returns true if this value has this property key */\nexport function HasPropertyKey(value, key) {\n return key in value;\n}\n// --------------------------------------------------------------------------\n// Object Instances\n// --------------------------------------------------------------------------\n/** Returns true if this value is an async iterator */\nexport function IsAsyncIterator(value) {\n return IsObject(value) && !IsArray(value) && !IsUint8Array(value) && Symbol.asyncIterator in value;\n}\n/** Returns true if this value is an array */\nexport function IsArray(value) {\n return Array.isArray(value);\n}\n/** Returns true if this value is bigint */\nexport function IsBigInt(value) {\n return typeof value === 'bigint';\n}\n/** Returns true if this value is a boolean */\nexport function IsBoolean(value) {\n return typeof value === 'boolean';\n}\n/** Returns true if this value is a Date object */\nexport function IsDate(value) {\n return value instanceof globalThis.Date;\n}\n/** Returns true if this value is a function */\nexport function IsFunction(value) {\n return typeof value === 'function';\n}\n/** Returns true if this value is an iterator */\nexport function IsIterator(value) {\n return IsObject(value) && !IsArray(value) && !IsUint8Array(value) && Symbol.iterator in value;\n}\n/** Returns true if this value is null */\nexport function IsNull(value) {\n return value === null;\n}\n/** Returns true if this value is number */\nexport function IsNumber(value) {\n return typeof value === 'number';\n}\n/** Returns true if this value is an object */\nexport function IsObject(value) {\n return typeof value === 'object' && value !== null;\n}\n/** Returns true if this value is RegExp */\nexport function IsRegExp(value) {\n return value instanceof globalThis.RegExp;\n}\n/** Returns true if this value is string */\nexport function IsString(value) {\n return typeof value === 'string';\n}\n/** Returns true if this value is symbol */\nexport function IsSymbol(value) {\n return typeof value === 'symbol';\n}\n/** Returns true if this value is a Uint8Array */\nexport function IsUint8Array(value) {\n return value instanceof globalThis.Uint8Array;\n}\n/** Returns true if this value is undefined */\nexport function IsUndefined(value) {\n return value === undefined;\n}\n","import * as ValueGuard from '../guard/value.mjs';\nfunction ArrayType(value) {\n return value.map((value) => Visit(value));\n}\nfunction DateType(value) {\n return new Date(value.getTime());\n}\nfunction Uint8ArrayType(value) {\n return new Uint8Array(value);\n}\nfunction RegExpType(value) {\n return new RegExp(value.source, value.flags);\n}\nfunction ObjectType(value) {\n const result = {};\n for (const key of Object.getOwnPropertyNames(value)) {\n result[key] = Visit(value[key]);\n }\n for (const key of Object.getOwnPropertySymbols(value)) {\n result[key] = Visit(value[key]);\n }\n return result;\n}\n// prettier-ignore\nfunction Visit(value) {\n return (ValueGuard.IsArray(value) ? ArrayType(value) :\n ValueGuard.IsDate(value) ? DateType(value) :\n ValueGuard.IsUint8Array(value) ? Uint8ArrayType(value) :\n ValueGuard.IsRegExp(value) ? RegExpType(value) :\n ValueGuard.IsObject(value) ? ObjectType(value) :\n value);\n}\n/** Clones a value */\nexport function Clone(value) {\n return Visit(value);\n}\n","import { Clone } from './value.mjs';\n/** Clones a Rest */\nexport function CloneRest(schemas) {\n return schemas.map((schema) => CloneType(schema));\n}\n/** Clones a Type */\nexport function CloneType(schema, options) {\n return options === undefined ? Clone(schema) : Clone({ ...options, ...schema });\n}\n","export * from './type.mjs';\nexport * from './value.mjs';\n","// --------------------------------------------------------------------------\n// Iterators\n// --------------------------------------------------------------------------\n/** Returns true if this value is an async iterator */\nexport function IsAsyncIterator(value) {\n return IsObject(value) && globalThis.Symbol.asyncIterator in value;\n}\n/** Returns true if this value is an iterator */\nexport function IsIterator(value) {\n return IsObject(value) && globalThis.Symbol.iterator in value;\n}\n// --------------------------------------------------------------------------\n// Object Instances\n// --------------------------------------------------------------------------\n/** Returns true if this value is not an instance of a class */\nexport function IsStandardObject(value) {\n return IsObject(value) && (globalThis.Object.getPrototypeOf(value) === Object.prototype || globalThis.Object.getPrototypeOf(value) === null);\n}\n/** Returns true if this value is an instance of a class */\nexport function IsInstanceObject(value) {\n return IsObject(value) && !IsArray(value) && IsFunction(value.constructor) && value.constructor.name !== 'Object';\n}\n// --------------------------------------------------------------------------\n// JavaScript\n// --------------------------------------------------------------------------\n/** Returns true if this value is a Promise */\nexport function IsPromise(value) {\n return value instanceof globalThis.Promise;\n}\n/** Returns true if this value is a Date */\nexport function IsDate(value) {\n return value instanceof Date && globalThis.Number.isFinite(value.getTime());\n}\n/** Returns true if this value is an instance of Map<K, T> */\nexport function IsMap(value) {\n return value instanceof globalThis.Map;\n}\n/** Returns true if this value is an instance of Set<T> */\nexport function IsSet(value) {\n return value instanceof globalThis.Set;\n}\n/** Returns true if this value is RegExp */\nexport function IsRegExp(value) {\n return value instanceof globalThis.RegExp;\n}\n/** Returns true if this value is a typed array */\nexport function IsTypedArray(value) {\n return globalThis.ArrayBuffer.isView(value);\n}\n/** Returns true if the value is a Int8Array */\nexport function IsInt8Array(value) {\n return value instanceof globalThis.Int8Array;\n}\n/** Returns true if the value is a Uint8Array */\nexport function IsUint8Array(value) {\n return value instanceof globalThis.Uint8Array;\n}\n/** Returns true if the value is a Uint8ClampedArray */\nexport function IsUint8ClampedArray(value) {\n return value instanceof globalThis.Uint8ClampedArray;\n}\n/** Returns true if the value is a Int16Array */\nexport function IsInt16Array(value) {\n return value instanceof globalThis.Int16Array;\n}\n/** Returns true if the value is a Uint16Array */\nexport function IsUint16Array(value) {\n return value instanceof globalThis.Uint16Array;\n}\n/** Returns true if the value is a Int32Array */\nexport function IsInt32Array(value) {\n return value instanceof globalThis.Int32Array;\n}\n/** Returns true if the value is a Uint32Array */\nexport function IsUint32Array(value) {\n return value instanceof globalThis.Uint32Array;\n}\n/** Returns true if the value is a Float32Array */\nexport function IsFloat32Array(value) {\n return value instanceof globalThis.Float32Array;\n}\n/** Returns true if the value is a Float64Array */\nexport function IsFloat64Array(value) {\n return value instanceof globalThis.Float64Array;\n}\n/** Returns true if the value is a BigInt64Array */\nexport function IsBigInt64Array(value) {\n return value instanceof globalThis.BigInt64Array;\n}\n/** Returns true if the value is a BigUint64Array */\nexport function IsBigUint64Array(value) {\n return value instanceof globalThis.BigUint64Array;\n}\n// --------------------------------------------------------------------------\n// PropertyKey\n// --------------------------------------------------------------------------\n/** Returns true if this value has this property key */\nexport function HasPropertyKey(value, key) {\n return key in value;\n}\n// --------------------------------------------------------------------------\n// Standard\n// --------------------------------------------------------------------------\n/** Returns true of this value is an object type */\nexport function IsObject(value) {\n return value !== null && typeof value === 'object';\n}\n/** Returns true if this value is an array, but not a typed array */\nexport function IsArray(value) {\n return globalThis.Array.isArray(value) && !globalThis.ArrayBuffer.isView(value);\n}\n/** Returns true if this value is an undefined */\nexport function IsUndefined(value) {\n return value === undefined;\n}\n/** Returns true if this value is an null */\nexport function IsNull(value) {\n return value === null;\n}\n/** Returns true if this value is an boolean */\nexport function IsBoolean(value) {\n return typeof value === 'boolean';\n}\n/** Returns true if this value is an number */\nexport function IsNumber(value) {\n return typeof value === 'number';\n}\n/** Returns true if this value is an integer */\nexport function IsInteger(value) {\n return globalThis.Number.isInteger(value);\n}\n/** Returns true if this value is bigint */\nexport function IsBigInt(value) {\n return typeof value === 'bigint';\n}\n/** Returns true if this value is string */\nexport function IsString(value) {\n return typeof value === 'string';\n}\n/** Returns true if this value is a function */\nexport function IsFunction(value) {\n return typeof value === 'function';\n}\n/** Returns true if this value is a symbol */\nexport function IsSymbol(value) {\n return typeof value === 'symbol';\n}\n/** Returns true if this value is a value type such as number, string, boolean */\nexport function IsValueType(value) {\n // prettier-ignore\n return (IsBigInt(value) ||\n IsBoolean(value) ||\n IsNull(value) ||\n IsNumber(value) ||\n IsString(value) ||\n IsSymbol(value) ||\n IsUndefined(value));\n}\n","export * from './guard.mjs';\n","import { IsObject, IsArray, IsNumber, IsUndefined } from '../value/guard/index.mjs';\nexport var TypeSystemPolicy;\n(function (TypeSystemPolicy) {\n // ------------------------------------------------------------------\n // TypeSystemPolicy: Instancing\n // ------------------------------------------------------------------\n /**\n * Configures the instantiation behavior of TypeBox types. The `default` option assigns raw JavaScript\n * references for embedded types, which may cause side effects if type properties are explicitly updated\n * outside the TypeBox type builder. The `clone` option creates copies of any shared types upon creation,\n * preventing unintended side effects. The `freeze` option applies `Object.freeze()` to the type, making\n * it fully readonly and immutable. Implementations should use `default` whenever possible, as it is the\n * fastest way to instantiate types. The default setting is `default`.\n */\n TypeSystemPolicy.InstanceMode = 'default';\n // ------------------------------------------------------------------\n // TypeSystemPolicy: Checking\n // ------------------------------------------------------------------\n /** Sets whether TypeBox should assert optional properties using the TypeScript `exactOptionalPropertyTypes` assertion policy. The default is `false` */\n TypeSystemPolicy.ExactOptionalPropertyTypes = false;\n /** Sets whether arrays should be treated as a kind of objects. The default is `false` */\n TypeSystemPolicy.AllowArrayObject = false;\n /** Sets whether `NaN` or `Infinity` should be treated as valid numeric values. The default is `false` */\n TypeSystemPolicy.AllowNaN = false;\n /** Sets whether `null` should validate for void types. The default is `false` */\n TypeSystemPolicy.AllowNullVoid = false;\n /** Checks this value using the ExactOptionalPropertyTypes policy */\n function IsExactOptionalProperty(value, key) {\n return TypeSystemPolicy.ExactOptionalPropertyTypes ? key in value : value[key] !== undefined;\n }\n TypeSystemPolicy.IsExactOptionalProperty = IsExactOptionalProperty;\n /** Checks this value using the AllowArrayObjects policy */\n function IsObjectLike(value) {\n const isObject = IsObject(value);\n return TypeSystemPolicy.AllowArrayObject ? isObject : isObject && !IsArray(value);\n }\n TypeSystemPolicy.IsObjectLike = IsObjectLike;\n /** Checks this value as a record using the AllowArrayObjects policy */\n function IsRecordLike(value) {\n return IsObjectLike(value) && !(value instanceof Date) && !(value instanceof Uint8Array);\n }\n TypeSystemPolicy.IsRecordLike = IsRecordLike;\n /** Checks this value using the AllowNaN policy */\n function IsNumberLike(value) {\n return TypeSystemPolicy.AllowNaN ? IsNumber(value) : Number.isFinite(value);\n }\n TypeSystemPolicy.IsNumberLike = IsNumberLike;\n /** Checks this value using the AllowVoidNull policy */\n function IsVoidLike(value) {\n const isUndefined = IsUndefined(value);\n return TypeSystemPolicy.AllowNullVoid ? isUndefined || value === null : isUndefined;\n }\n TypeSystemPolicy.IsVoidLike = IsVoidLike;\n})(TypeSystemPolicy || (TypeSystemPolicy = {}));\n","import * as ValueGuard from '../guard/value.mjs';\nfunction ImmutableArray(value) {\n return globalThis.Object.freeze(value).map((value) => Immutable(value));\n}\nfunction ImmutableDate(value) {\n return value;\n}\nfunction ImmutableUint8Array(value) {\n return value;\n}\nfunction ImmutableRegExp(value) {\n return value;\n}\nfunction ImmutableObject(value) {\n const result = {};\n for (const key of Object.getOwnPropertyNames(value)) {\n result[key] = Immutable(value[key]);\n }\n for (const key of Object.getOwnPropertySymbols(value)) {\n result[key] = Immutable(value[key]);\n }\n return globalThis.Object.freeze(result);\n}\n/** Specialized deep immutable value. Applies freeze recursively to the given value */\n// prettier-ignore\nexport function Immutable(value) {\n return (ValueGuard.IsArray(value) ? ImmutableArray(value) :\n ValueGuard.IsDate(value) ? ImmutableDate(value) :\n ValueGuard.IsUint8Array(value) ? ImmutableUint8Array(value) :\n ValueGuard.IsRegExp(value) ? ImmutableRegExp(value) :\n ValueGuard.IsObject(value) ? ImmutableObject(value) :\n value);\n}\n","import { TypeSystemPolicy } from '../../system/policy.mjs';\nimport { Immutable } from './immutable.mjs';\nimport { Clone } from '../clone/value.mjs';\n/** Creates TypeBox schematics using the configured InstanceMode */\nexport function CreateType(schema, options) {\n const result = options !== undefined ? { ...options, ...schema } : schema;\n switch (TypeSystemPolicy.InstanceMode) {\n case 'freeze':\n return Immutable(result);\n case 'clone':\n return Clone(result);\n default:\n return result;\n }\n}\n","export * from './type.mjs';\n","/** The base Error type thrown for all TypeBox exceptions */\nexport class TypeBoxError extends Error {\n constructor(message) {\n super(message);\n }\n}\n","export * from './error.mjs';\n","/** Symbol key applied to transform types */\nexport const TransformKind = Symbol.for('TypeBox.Transform');\n/** Symbol key applied to readonly types */\nexport const ReadonlyKind = Symbol.for('TypeBox.Readonly');\n/** Symbol key applied to optional types */\nexport const OptionalKind = Symbol.for('TypeBox.Optional');\n/** Symbol key applied to types */\nexport const Hint = Symbol.for('TypeBox.Hint');\n/** Symbol key applied to types */\nexport const Kind = Symbol.for('TypeBox.Kind');\n","export * from './symbols.mjs';\n","import * as ValueGuard from './value.mjs';\nimport { Kind, Hint, TransformKind, ReadonlyKind, OptionalKind } from '../symbols/index.mjs';\n/** `[Kind-Only]` Returns true if this value has a Readonly symbol */\nexport function IsReadonly(value) {\n return ValueGuard.IsObject(value) && value[ReadonlyKind] === 'Readonly';\n}\n/** `[Kind-Only]` Returns true if this value has a Optional symbol */\nexport function IsOptional(value) {\n return ValueGuard.IsObject(value) && value[OptionalKind] === 'Optional';\n}\n/** `[Kind-Only]` Returns true if the given value is TAny */\nexport function IsAny(value) {\n return IsKindOf(value, 'Any');\n}\n/** `[Kind-Only]` Returns true if the given value is TArgument */\nexport function IsArgument(value) {\n return IsKindOf(value, 'Argument');\n}\n/** `[Kind-Only]` Returns true if the given value is TArray */\nexport function IsArray(value) {\n return IsKindOf(value, 'Array');\n}\n/** `[Kind-Only]` Returns true if the given value is TAsyncIterator */\nexport function IsAsyncIterator(value) {\n return IsKindOf(value, 'AsyncIterator');\n}\n/** `[Kind-Only]` Returns true if the given value is TBigInt */\nexport function IsBigInt(value) {\n return IsKindOf(value, 'BigInt');\n}\n/** `[Kind-Only]` Returns true if the given value is TBoolean */\nexport function IsBoolean(value) {\n return IsKindOf(value, 'Boolean');\n}\n/** `[Kind-Only]` Returns true if the given value is TComputed */\nexport function IsComputed(value) {\n return IsKindOf(value, 'Computed');\n}\n/** `[Kind-Only]` Returns true if the given value is TConstructor */\nexport function IsConstructor(value) {\n return IsKindOf(value, 'Constructor');\n}\n/** `[Kind-Only]` Returns true if the given value is TDate */\nexport function IsDate(value) {\n return IsKindOf(value, 'Date');\n}\n/** `[Kind-Only]` Returns true if the given value is TFunction */\nexport function IsFunction(value) {\n return IsKindOf(value, 'Function');\n}\n/** `[Kind-Only]` Returns true if the given value is TInteger */\nexport function IsImport(value) {\n return IsKindOf(value, 'Import');\n}\n/** `[Kind-Only]` Returns true if the given value is TInteger */\nexport function IsInteger(value) {\n return IsKindOf(value, 'Integer');\n}\n/** `[Kind-Only]` Returns true if the given schema is TProperties */\nexport function IsProperties(value) {\n return ValueGuard.IsObject(value);\n}\n/** `[Kind-Only]` Returns true if the given value is TIntersect */\nexport function IsIntersect(value) {\n return IsKindOf(value, 'Intersect');\n}\n/** `[Kind-Only]` Returns true if the given value is TIterator */\nexport function IsIterator(value) {\n return IsKindOf(value, 'Iterator');\n}\n/** `[Kind-Only]` Returns true if the given value is a TKind with the given name. */\nexport function IsKindOf(value, kind) {\n return ValueGuard.IsObject(value) && Kind in value && value[Kind] === kind;\n}\n/** `[Kind-Only]` Returns true if the given value is TLiteral<string> */\nexport function IsLiteralString(value) {\n return IsLiteral(value) && ValueGuard.IsString(value.const);\n}\n/** `[Kind-Only]` Returns true if the given value is TLiteral<number> */\nexport function IsLiteralNumber(value) {\n return IsLiteral(value) && ValueGuard.IsNumber(value.const);\n}\n/** `[Kind-Only]` Returns true if the given value is TLiteral<boolean> */\nexport function IsLiteralBoolean(value) {\n return IsLiteral(value) && ValueGuard.IsBoolean(value.const);\n}\n/** `[Kind-Only]` Returns true if the given value is TLiteralValue */\nexport function IsLiteralValue(value) {\n return ValueGuard.IsBoolean(value) || ValueGuard.IsNumber(value) || ValueGuard.IsString(value);\n}\n/** `[Kind-Only]` Returns true if the given value is TLiteral */\nexport function IsLiteral(value) {\n return IsKindOf(value, 'Literal');\n}\n/** `[Kind-Only]` Returns true if the given value is a TMappedKey */\nexport function IsMappedKey(value) {\n return IsKindOf(value, 'MappedKey');\n}\n/** `[Kind-Only]` Returns true if the given value is TMappedResult */\nexport function IsMappedResult(value) {\n return IsKindOf(value, 'MappedResult');\n}\n/** `[Kind-Only]` Returns true if the given value is TNever */\nexport function IsNever(value) {\n return IsKindOf(value, 'Never');\n}\n/** `[Kind-Only]` Returns true if the given value is TNot */\nexport function IsNot(value) {\n return IsKindOf(value, 'Not');\n}\n/** `[Kind-Only]` Returns true if the given value is TNull */\nexport function IsNull(value) {\n return IsKindOf(value, 'Null');\n}\n/** `[Kind-Only]` Returns true if the given value is TNumber */\nexport function IsNumber(value) {\n return IsKindOf(value, 'Number');\n}\n/** `[Kind-Only]` Returns true if the given value is TObject */\nexport function IsObject(value) {\n return IsKindOf(value, 'Object');\n}\n/** `[Kind-Only]` Returns true if the given value is TPromise */\nexport function IsPromise(value) {\n return IsKindOf(value, 'Promise');\n}\n/** `[Kind-Only]` Returns true if the given value is TRecord */\nexport function IsRecord(value) {\n return IsKindOf(value, 'Record');\n}\n/** `[Kind-Only]` Returns true if this value is TRecursive */\nexport function IsRecursive(value) {\n return ValueGuard.IsObject(value) && Hint in value && value[Hint] === 'Recursive';\n}\n/** `[Kind-Only]` Returns true if the given value is TRef */\nexport function IsRef(value) {\n return IsKindOf(value, 'Ref');\n}\n/** `[Kind-Only]` Returns true if the given value is TRegExp */\nexport function IsRegExp(value) {\n return IsKindOf(value, 'RegExp');\n}\n/** `[Kind-Only]` Returns true if the given value is TString */\nexport function IsString(value) {\n return IsKindOf(value, 'String');\n}\n/** `[Kind-Only]` Returns true if the given value is TSymbol */\nexport function IsSymbol(value) {\n return IsKindOf(value, 'Symbol');\n}\n/** `[Kind-Only]` Returns true if the given value is TTemplateLiteral */\nexport function IsTemplateLiteral(value) {\n return IsKindOf(value, 'TemplateLiteral');\n}\n/** `[Kind-Only]` Returns true if the given value is TThis */\nexport function IsThis(value) {\n return IsKindOf(value, 'This');\n}\n/** `[Kind-Only]` Returns true of this value is TTransform */\nexport function IsTransform(value) {\n return ValueGuard.IsObject(value) && TransformKind in value;\n}\n/** `[Kind-Only]` Returns true if the given value is TTuple */\nexport function IsTuple(value) {\n return IsKindOf(value, 'Tuple');\n}\n/** `[Kind-Only]` Returns true if the given value is TUndefined */\nexport function IsUndefined(value) {\n return IsKindOf(value, 'Undefined');\n}\n/** `[Kind-Only]` Returns true if the given value is TUnion */\nexport function IsUnion(value) {\n return IsKindOf(value, 'Union');\n}\n/** `[Kind-Only]` Returns true if the given value is TUint8Array */\nexport function IsUint8Array(value) {\n return IsKindOf(value, 'Uint8Array');\n}\n/** `[Kind-Only]` Returns true if the given value is TUnknown */\nexport function IsUnknown(value) {\n return IsKindOf(value, 'Unknown');\n}\n/** `[Kind-Only]` Returns true if the given value is a raw TUnsafe */\nexport function IsUnsafe(value) {\n return IsKindOf(value, 'Unsafe');\n}\n/** `[Kind-Only]` Returns true if the given value is TVoid */\nexport function IsVoid(value) {\n return IsKindOf(value, 'Void');\n}\n/** `[Kind-Only]` Returns true if the given value is TKind */\nexport function IsKind(value) {\n return ValueGuard.IsObject(value) && Kind in value && ValueGuard.IsString(value[Kind]);\n}\n/** `[Kind-Only]` Returns true if the given value is TSchema */\nexport function IsSchema(value) {\n // prettier-ignore\n return (IsAny(value) ||\n IsArgument(value) ||\n IsArray(value) ||\n IsBoolean(value) ||\n IsBigInt(value) ||\n IsAsyncIterator(value) ||\n IsComputed(value) ||\n IsConstructor(value) ||\n IsDate(value) ||\n IsFunction(value) ||\n IsInteger(value) ||\n IsIntersect(value) ||\n IsIterator(value) ||\n IsLiteral(value) ||\n IsMappedKey(value) ||\n IsMappedResult(value) ||\n IsNever(value) ||\n IsNot(value) ||\n IsNull(value) ||\n IsNumber(value) ||\n IsObject(value) ||\n IsPromise(value) ||\n IsRecord(value) ||\n IsRef(value) ||\n IsRegExp(value) ||\n IsString(value) ||\n IsSymbol(value) ||\n IsTemplateLiteral(value) ||\n IsThis(value) ||\n IsTuple(value) ||\n IsUndefined(value) ||\n IsUnion(value) ||\n IsUint8Array(value) ||\n IsUnknown(value) ||\n IsUnsafe(value) ||\n IsVoid(value) ||\n IsKind(value));\n}\n","import * as ValueGuard from './value.mjs';\nimport { Kind, Hint, TransformKind, ReadonlyKind, OptionalKind } from '../symbols/index.mjs';\nimport { TypeBoxError } from '../error/index.mjs';\nexport class TypeGuardUnknownTypeError extends TypeBoxError {\n}\nconst KnownTypes = [\n 'Argument',\n 'Any',\n 'Array',\n 'AsyncIterator',\n 'BigInt',\n 'Boolean',\n 'Computed',\n 'Constructor',\n 'Date',\n 'Enum',\n 'Function',\n 'Integer',\n 'Intersect',\n 'Iterator',\n 'Literal',\n 'MappedKey',\n 'MappedResult',\n 'Not',\n 'Null',\n 'Number',\n 'Object',\n 'Promise',\n 'Record',\n 'Ref',\n 'RegExp',\n 'String',\n 'Symbol',\n 'TemplateLiteral',\n 'This',\n 'Tuple',\n 'Undefined',\n 'Union',\n 'Uint8Array',\n 'Unknown',\n 'Void',\n];\nfunction IsPattern(value) {\n try {\n new RegExp(value);\n return true;\n }\n catch {\n return false;\n }\n}\nfunction IsControlCharacterFree(value) {\n if (!ValueGuard.IsString(value))\n return false;\n for (let i = 0; i < value.length; i++) {\n const code = value.charCodeAt(i);\n if ((code >= 7 && code <= 13) || code === 27 || code === 127) {\n return false;\n }\n }\n return true;\n}\nfunction IsAdditionalProperties(value) {\n return IsOptionalBoolean(value) || IsSchema(value);\n}\nfunction IsOptionalBigInt(value) {\n return ValueGuard.IsUndefined(value) || ValueGuard.IsBigInt(value);\n}\nfunction IsOptionalNumber(value) {\n return ValueGuard.IsUndefined(value) || ValueGuard.IsNumber(value);\n}\nfunction IsOptionalBoolean(value) {\n return ValueGuard.IsUndefined(value) || ValueGuard.IsBoolean(value);\n}\nfunction IsOptionalString(value) {\n return ValueGuard.IsUndefined(value) || ValueGuard.IsString(value);\n}\nfunction IsOptionalPattern(value) {\n return ValueGuard.IsUndefined(value) || (ValueGuard.IsString(value) && IsControlCharacterFree(value) && IsPattern(value));\n}\nfunction IsOptionalFormat(value) {\n return ValueGuard.IsUndefined(value) || (ValueGuard.IsString(value) && IsControlCharacterFree(value));\n}\nfunction IsOptionalSchema(value) {\n return ValueGuard.IsUndefined(value) || IsSchema(value);\n}\n// ------------------------------------------------------------------\n// Modifiers\n// ------------------------------------------------------------------\n/** Returns true if this value has a Readonly symbol */\nexport function IsReadonly(value) {\n return ValueGuard.IsObject(value) && value[ReadonlyKind] === 'Readonly';\n}\n/** Returns true if this value has a Optional symbol */\nexport function IsOptional(value) {\n return ValueGuard.IsObject(value) && value[OptionalKind] === 'Optional';\n}\n// ------------------------------------------------------------------\n// Types\n// ------------------------------------------------------------------\n/** Returns true if the given value is TAny */\nexport function IsAny(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Any') &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is TArgument */\nexport function IsArgument(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Argument') &&\n ValueGuard.IsNumber(value.index));\n}\n/** Returns true if the given value is TArray */\nexport function IsArray(value) {\n return (IsKindOf(value, 'Array') &&\n value.type === 'array' &&\n IsOptionalString(value.$id) &&\n IsSchema(value.items) &&\n IsOptionalNumber(value.minItems) &&\n IsOptionalNumber(value.maxItems) &&\n IsOptionalBoolean(value.uniqueItems) &&\n IsOptionalSchema(value.contains) &&\n IsOptionalNumber(value.minContains) &&\n IsOptionalNumber(value.maxContains));\n}\n/** Returns true if the given value is TAsyncIterator */\nexport function IsAsyncIterator(value) {\n // prettier-ignore\n return (IsKindOf(value, 'AsyncIterator') &&\n value.type === 'AsyncIterator' &&\n IsOptionalString(value.$id) &&\n IsSchema(value.items));\n}\n/** Returns true if the given value is TBigInt */\nexport function IsBigInt(value) {\n // prettier-ignore\n return (IsKindOf(value, 'BigInt') &&\n value.type === 'bigint' &&\n IsOptionalString(value.$id) &&\n IsOptionalBigInt(value.exclusiveMaximum) &&\n IsOptionalBigInt(value.exclusiveMinimum) &&\n IsOptionalBigInt(value.maximum) &&\n IsOptionalBigInt(value.minimum) &&\n IsOptionalBigInt(value.multipleOf));\n}\n/** Returns true if the given value is TBoolean */\nexport function IsBoolean(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Boolean') &&\n value.type === 'boolean' &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is TComputed */\nexport function IsComputed(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Computed') &&\n ValueGuard.IsString(value.target) &&\n ValueGuard.IsArray(value.parameters) &&\n value.parameters.every((schema) => IsSchema(schema)));\n}\n/** Returns true if the given value is TConstructor */\nexport function IsConstructor(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Constructor') &&\n value.type === 'Constructor' &&\n IsOptionalString(value.$id) &&\n ValueGuard.IsArray(value.parameters) &&\n value.parameters.every(schema => IsSchema(schema)) &&\n IsSchema(value.returns));\n}\n/** Returns true if the given value is TDate */\nexport function IsDate(value) {\n return (IsKindOf(value, 'Date') &&\n value.type === 'Date' &&\n IsOptionalString(value.$id) &&\n IsOptionalNumber(value.exclusiveMaximumTimestamp) &&\n IsOptionalNumber(value.exclusiveMinimumTimestamp) &&\n IsOptionalNumber(value.maximumTimestamp) &&\n IsOptionalNumber(value.minimumTimestamp) &&\n IsOptionalNumber(value.multipleOfTimestamp));\n}\n/** Returns true if the given value is TFunction */\nexport function IsFunction(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Function') &&\n value.type === 'Function' &&\n IsOptionalString(value.$id) &&\n ValueGuard.IsArray(value.parameters) &&\n value.parameters.every(schema => IsSchema(schema)) &&\n IsSchema(value.returns));\n}\n/** Returns true if the given value is TImport */\nexport function IsImport(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Import') &&\n ValueGuard.HasPropertyKey(value, '$defs') &&\n ValueGuard.IsObject(value.$defs) &&\n IsProperties(value.$defs) &&\n ValueGuard.HasPropertyKey(value, '$ref') &&\n ValueGuard.IsString(value.$ref) &&\n value.$ref in value.$defs // required\n );\n}\n/** Returns true if the given value is TInteger */\nexport function IsInteger(value) {\n return (IsKindOf(value, 'Integer') &&\n value.type === 'integer' &&\n IsOptionalString(value.$id) &&\n IsOptionalNumber(value.exclusiveMaximum) &&\n IsOptionalNumber(value.exclusiveMinimum) &&\n IsOptionalNumber(value.maximum) &&\n IsOptionalNumber(value.minimum) &&\n IsOptionalNumber(value.multipleOf));\n}\n/** Returns true if the given schema is TProperties */\nexport function IsProperties(value) {\n // prettier-ignore\n return (ValueGuard.IsObject(value) &&\n Object.entries(value).every(([key, schema]) => IsControlCharacterFree(key) && IsSchema(schema)));\n}\n/** Returns true if the given value is TIntersect */\nexport function IsIntersect(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Intersect') &&\n (ValueGuard.IsString(value.type) && value.type !== 'object' ? false : true) &&\n ValueGuard.IsArray(value.allOf) &&\n value.allOf.every(schema => IsSchema(schema) && !IsTransform(schema)) &&\n IsOptionalString(value.type) &&\n (IsOptionalBoolean(value.unevaluatedProperties) || IsOptionalSchema(value.unevaluatedProperties)) &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is TIterator */\nexport function IsIterator(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Iterator') &&\n value.type === 'Iterator' &&\n IsOptionalString(value.$id) &&\n IsSchema(value.items));\n}\n/** Returns true if the given value is a TKind with the given name. */\nexport function IsKindOf(value, kind) {\n return ValueGuard.IsObject(value) && Kind in value && value[Kind] === kind;\n}\n/** Returns true if the given value is TLiteral<string> */\nexport function IsLiteralString(value) {\n return IsLiteral(value) && ValueGuard.IsString(value.const);\n}\n/** Returns true if the given value is TLiteral<number> */\nexport function IsLiteralNumber(value) {\n return IsLiteral(value) && ValueGuard.IsNumber(value.const);\n}\n/** Returns true if the given value is TLiteral<boolean> */\nexport function IsLiteralBoolean(value) {\n return IsLiteral(value) && ValueGuard.IsBoolean(value.const);\n}\n/** Returns true if the given value is TLiteral */\nexport function IsLiteral(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Literal') &&\n IsOptionalString(value.$id) && IsLiteralValue(value.const));\n}\n/** Returns true if the given value is a TLiteralValue */\nexport function IsLiteralValue(value) {\n return ValueGuard.IsBoolean(value) || ValueGuard.IsNumber(value) || ValueGuard.IsString(value);\n}\n/** Returns true if the given value is a TMappedKey */\nexport function IsMappedKey(value) {\n // prettier-ignore\n return (IsKindOf(value, 'MappedKey') &&\n ValueGuard.IsArray(value.keys) &&\n value.keys.every(key => ValueGuard.IsNumber(key) || ValueGuard.IsString(key)));\n}\n/** Returns true if the given value is TMappedResult */\nexport function IsMappedResult(value) {\n // prettier-ignore\n return (IsKindOf(value, 'MappedResult') &&\n IsProperties(value.properties));\n}\n/** Returns true if the given value is TNever */\nexport function IsNever(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Never') &&\n ValueGuard.IsObject(value.not) &&\n Object.getOwnPropertyNames(value.not).length === 0);\n}\n/** Returns true if the given value is TNot */\nexport function IsNot(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Not') &&\n IsSchema(value.not));\n}\n/** Returns true if the given value is TNull */\nexport function IsNull(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Null') &&\n value.type === 'null' &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is TNumber */\nexport function IsNumber(value) {\n return (IsKindOf(value, 'Number') &&\n value.type === 'number' &&\n IsOptionalString(value.$id) &&\n IsOptionalNumber(value.exclusiveMaximum) &&\n IsOptionalNumber(value.exclusiveMinimum) &&\n IsOptionalNumber(value.maximum) &&\n IsOptionalNumber(value.minimum) &&\n IsOptionalNumber(value.multipleOf));\n}\n/** Returns true if the given value is TObject */\nexport function IsObject(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Object') &&\n value.type === 'object' &&\n IsOptionalString(value.$id) &&\n IsProperties(value.properties) &&\n IsAdditionalProperties(value.additionalProperties) &&\n IsOptionalNumber(value.minProperties) &&\n IsOptionalNumber(value.maxProperties));\n}\n/** Returns true if the given value is TPromise */\nexport function IsPromise(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Promise') &&\n value.type === 'Promise' &&\n IsOptionalString(value.$id) &&\n IsSchema(value.item));\n}\n/** Returns true if the given value is TRecord */\nexport function IsRecord(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Record') &&\n value.type === 'object' &&\n IsOptionalString(value.$id) &&\n IsAdditionalProperties(value.additionalProperties) &&\n ValueGuard.IsObject(value.patternProperties) &&\n ((schema) => {\n const keys = Object.getOwnPropertyNames(schema.patternProperties);\n return (keys.length === 1 &&\n IsPattern(keys[0]) &&\n ValueGuard.IsObject(schema.patternProperties) &&\n IsSchema(schema.patternProperties[keys[0]]));\n })(value));\n}\n/** Returns true if this value is TRecursive */\nexport function IsRecursive(value) {\n return ValueGuard.IsObject(value) && Hint in value && value[Hint] === 'Recursive';\n}\n/** Returns true if the given value is TRef */\nexport function IsRef(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Ref') &&\n IsOptionalString(value.$id) &&\n ValueGuard.IsString(value.$ref));\n}\n/** Returns true if the given value is TRegExp */\nexport function IsRegExp(value) {\n // prettier-ignore\n return (IsKindOf(value, 'RegExp') &&\n IsOptionalString(value.$id) &&\n ValueGuard.IsString(value.source) &&\n ValueGuard.IsString(value.flags) &&\n IsOptionalNumber(value.maxLength) &&\n IsOptionalNumber(value.minLength));\n}\n/** Returns true if the given value is TString */\nexport function IsString(value) {\n // prettier-ignore\n return (IsKindOf(value, 'String') &&\n value.type === 'string' &&\n IsOptionalString(value.$id) &&\n IsOptionalNumber(value.minLength) &&\n IsOptionalNumber(value.maxLength) &&\n IsOptionalPattern(value.pattern) &&\n IsOptionalFormat(value.format));\n}\n/** Returns true if the given value is TSymbol */\nexport function IsSymbol(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Symbol') &&\n value.type === 'symbol' &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is TTemplateLiteral */\nexport function IsTemplateLiteral(value) {\n // prettier-ignore\n return (IsKindOf(value, 'TemplateLiteral') &&\n value.type === 'string' &&\n ValueGuard.IsString(value.pattern) &&\n value.pattern[0] === '^' &&\n value.pattern[value.pattern.length - 1] === '$');\n}\n/** Returns true if the given value is TThis */\nexport function IsThis(value) {\n // prettier-ignore\n return (IsKindOf(value, 'This') &&\n IsOptionalString(value.$id) &&\n ValueGuard.IsString(value.$ref));\n}\n/** Returns true of this value is TTransform */\nexport function IsTransform(value) {\n return ValueGuard.IsObject(value) && TransformKind in value;\n}\n/** Returns true if the given value is TTuple */\nexport function IsTuple(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Tuple') &&\n value.type === 'array' &&\n IsOptionalString(value.$id) &&\n ValueGuard.IsNumber(value.minItems) &&\n ValueGuard.IsNumber(value.maxItems) &&\n value.minItems === value.maxItems &&\n (( // empty\n ValueGuard.IsUndefined(value.items) &&\n ValueGuard.IsUndefined(value.additionalItems) &&\n value.minItems === 0) || (ValueGuard.IsArray(value.items) &&\n value.items.every(schema => IsSchema(schema)))));\n}\n/** Returns true if the given value is TUndefined */\nexport function IsUndefined(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Undefined') &&\n value.type === 'undefined' &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is TUnion<Literal<string | number>[]> */\nexport function IsUnionLiteral(value) {\n return IsUnion(value) && value.anyOf.every((schema) => IsLiteralString(schema) || IsLiteralNumber(schema));\n}\n/** Returns true if the given value is TUnion */\nexport function IsUnion(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Union') &&\n IsOptionalString(value.$id) &&\n ValueGuard.IsObject(value) &&\n ValueGuard.IsArray(value.anyOf) &&\n value.anyOf.every(schema => IsSchema(schema)));\n}\n/** Returns true if the given value is TUint8Array */\nexport function IsUint8Array(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Uint8Array') &&\n value.type === 'Uint8Array' &&\n IsOptionalString(value.$id) &&\n IsOptionalNumber(value.minByteLength) &&\n IsOptionalNumber(value.maxByteLength));\n}\n/** Returns true if the given value is TUnknown */\nexport function IsUnknown(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Unknown') &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is a raw TUnsafe */\nexport function IsUnsafe(value) {\n return IsKindOf(value, 'Unsafe');\n}\n/** Returns true if the given value is TVoid */\nexport function IsVoid(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Void') &&\n value.type === 'void' &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is TKind */\nexport function IsKind(value) {\n return ValueGuard.IsObject(value) && Kind in value && ValueGuard.IsString(value[Kind]) && !KnownTypes.includes(value[Kind]);\n}\n/** Returns true if the given value is TSchema */\nexport function IsSchema(value) {\n // prettier-ignore\n return (ValueGuard.IsObject(value)) && (IsAny(value) ||\n IsArgument(value) ||\n IsArray(value) ||\n IsBoolean(value) ||\n IsBigInt(value) ||\n IsAsyncIterator(value) ||\n IsComputed(value) ||\n IsConstructor(value) ||\n IsDate(value) ||\n IsFunction(value) ||\n IsInteger(value) ||\n IsIntersect(value) ||\n IsIterator(value) ||\n IsLiteral(value) ||\n IsMappedKey(value) ||\n IsMappedResult(value) ||\n IsNever(value) ||\n IsNot(value) ||\n IsNull(value) ||\n IsNumber(value) ||\n IsObject(value) ||\n IsPromise(value) ||\n IsRecord(value) ||\n IsRef(value) ||\n IsRegExp(value) ||\n IsString(value) ||\n IsSymbol(value) ||\n IsTemplateLiteral(value) ||\n IsThis(value) ||\n IsTuple(value) ||\n IsUndefined(value) ||\n IsUnion(value) ||\n IsUint8Array(value) ||\n IsUnknown(value) ||\n IsUnsafe(value) ||\n IsVoid(value) ||\n IsKind(value));\n}\n","export * as KindGuard from './kind.mjs';\nexport * as TypeGuard from './type.mjs';\nexport * as ValueGuard from './value.mjs';\n","/** Increments the given string value + 1 */\nexport function Increment(T) {\n return (parseInt(T) + 1).toString();\n}\n","export * from './helpers.mjs';\n","export const PatternBoolean = '(true|false)';\nexport const PatternNumber = '(0|[1-9][0-9]*)';\nexport const PatternString = '(.*)';\nexport const PatternNever = '(?!.*)';\nexport const PatternBooleanExact = `^${PatternBoolean}$`;\nexport const PatternNumberExact = `^${PatternNumber}$`;\nexport const PatternStringExact = `^${PatternString}$`;\nexport const PatternNeverExact = `^${PatternNever}$`;\n","export * from './patterns.mjs';\n","/** A registry for user defined string formats */\nconst map = new Map();\n/** Returns the entries in this registry */\nexport function Entries() {\n return new Map(map);\n}\n/** Clears all user defined string formats */\nexport function Clear() {\n return map.clear();\n}\n/** Deletes a registered format */\nexport function Delete(format) {\n return map.delete(format);\n}\n/** Returns true if the user defined string format exists */\nexport function Has(format) {\n return map.has(format);\n}\n/** Sets a validation function for a user defined string format */\nexport function Set(format, func) {\n map.set(format, func);\n}\n/** Gets a validation function for a user defined string format */\nexport function Get(format) {\n return map.get(format);\n}\n","/** A registry for user defined types */\nconst map = new Map();\n/** Returns the entries in this registry */\nexport function Entries() {\n return new Map(map);\n}\n/** Clears all user defined types */\nexport function Clear() {\n return map.clear();\n}\n/** Deletes a registered type */\nexport function Delete(kind) {\n return map.delete(kind);\n}\n/** Returns true if this registry contains this kind */\nexport function Has(kind) {\n return map.has(kind);\n}\n/** Sets a validation function for a user defined type */\nexport function Set(kind, func) {\n map.set(kind, func);\n}\n/** Gets a custom validation function for a user defined type */\nexport function Get(kind) {\n return map.get(kind);\n}\n","export * as FormatRegistry from './format.mjs';\nexport * as TypeRegistry from './type.mjs';\n","/** Returns true if element right is in the set of left */\n// prettier-ignore\nexport function SetIncludes(T, S) {\n return T.includes(S);\n}\n/** Returns true if left is a subset of right */\nexport function SetIsSubset(T, S) {\n return T.every((L) => SetIncludes(S, L));\n}\n/** Returns a distinct set of elements */\nexport function SetDistinct(T) {\n return [...new Set(T)];\n}\n/** Returns the Intersect of the given sets */\nexport function SetIntersect(T, S) {\n return T.filter((L) => S.includes(L));\n}\n/** Returns the Union of the given sets */\nexport function SetUnion(T, S) {\n return [...T, ...S];\n}\n/** Returns the Complement by omitting elements in T that are in S */\n// prettier-ignore\nexport function SetComplement(T, S) {\n return T.filter(L => !S.includes(L));\n}\n// prettier-ignore\nfunction SetIntersectManyResolve(T, Init) {\n return T.reduce((Acc, L) => {\n return SetIntersect(Acc, L);\n }, Init);\n}\n// prettier-ignore\nexport function SetIntersectMany(T) {\n return (T.length === 1\n ? T[0]\n // Use left to initialize the accumulator for resolve\n : T.length > 1\n ? SetIntersectManyResolve(T.slice(1), T[0])\n : []);\n}\n/** Returns the Union of multiple sets */\nexport function SetUnionMany(T) {\n const Acc = [];\n for (const L of T)\n Acc.push(...L);\n return Acc;\n}\n","export * from './set.mjs';\n","import { CreateType } from '../create/index.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates an Any type */\nexport function Any(options) {\n return CreateType({ [Kind]: 'Any' }, options);\n}\n","export * from './any.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates an Array type */\nexport function Array(items, options) {\n return CreateType({ [Kind]: 'Array', type: 'array', items }, options);\n}\n","export * from './array.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates an Argument Type. */\nexport function Argument(index) {\n return CreateType({ [Kind]: 'Argument', index });\n}\n","export * from './argument.mjs';\n","import { Kind } from '../symbols/index.mjs';\nimport { CreateType } from '../create/type.mjs';\n/** `[JavaScript]` Creates a AsyncIterator type */\nexport function AsyncIterator(items, options) {\n return CreateType({ [Kind]: 'AsyncIterator', type: 'AsyncIterator', items }, options);\n}\n","export * from './async-iterator.mjs';\n","import { CreateType } from '../create/index.mjs';\nimport { Kind } from '../symbols/symbols.mjs';\n/** `[Internal]` Creates a deferred computed type. This type is used exclusively in modules to defer resolution of computable types that contain interior references */\nexport function Computed(target, parameters, options) {\n return CreateType({ [Kind]: 'Computed', target, parameters }, options);\n}\n","export * from './computed.mjs';\n","function DiscardKey(value, key) {\n const { [key]: _, ...rest } = value;\n return rest;\n}\n/** Discards property keys from the given value. This function returns a shallow Clone. */\nexport function Discard(value, keys) {\n return keys.reduce((acc, key) => DiscardKey(acc, key), value);\n}\n","export * from './discard.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Never type */\nexport function Never(options) {\n return CreateType({ [Kind]: 'Never', not: {} }, options);\n}\n","export * from './never.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n// prettier-ignore\nexport function MappedKey(T) {\n return CreateType({\n [Kind]: 'MappedKey',\n keys: T\n });\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n// prettier-ignore\nexport function MappedResult(properties) {\n return CreateType({\n [Kind]: 'MappedResult',\n properties\n });\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Constructor type */\nexport function Constructor(parameters, returns, options) {\n return CreateType({ [Kind]: 'Constructor', type: 'Constructor', parameters, returns }, options);\n}\n","export * from './constructor.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Function type */\nexport function Function(parameters, returns, options) {\n return CreateType({ [Kind]: 'Function', type: 'Function', parameters, returns }, options);\n}\n","export * from './function.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\nexport function UnionCreate(T, options) {\n return CreateType({ [Kind]: 'Union', anyOf: T }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { OptionalKind } from '../symbols/index.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport { Optional } from '../optional/index.mjs';\nimport { UnionCreate } from './union-create.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsOptional } from '../guard/kind.mjs';\n// prettier-ignore\nfunction IsUnionOptional(types) {\n return types.some(type => IsOptional(type));\n}\n// prettier-ignore\nfunction RemoveOptionalFromRest(types) {\n return types.map(left => IsOptional(left) ? RemoveOptionalFromType(left) : left);\n}\n// prettier-ignore\nfunction RemoveOptionalFromType(T) {\n return (Discard(T, [OptionalKind]));\n}\n// prettier-ignore\nfunction ResolveUnion(types, options) {\n const isOptional = IsUnionOptional(types);\n return (isOptional\n ? Optional(UnionCreate(RemoveOptionalFromRest(types), options))\n : UnionCreate(RemoveOptionalFromRest(types), options));\n}\n/** `[Json]` Creates an evaluated Union type */\nexport function UnionEvaluated(T, options) {\n // prettier-ignore\n return (T.length === 1 ? CreateType(T[0], options) :\n T.length === 0 ? Never(options) :\n ResolveUnion(T, options));\n}\n","import { Kind } from '../symbols/index.mjs';\n","import { Never } from '../never/index.mjs';\nimport { CreateType } from '../create/type.mjs';\nimport { UnionCreate } from './union-create.mjs';\n/** `[Json]` Creates a Union type */\nexport function Union(types, options) {\n // prettier-ignore\n return (types.length === 0 ? Never(options) :\n types.length === 1 ? CreateType(types[0], options) :\n UnionCreate(types, options));\n}\n","export * from './union-evaluated.mjs';\nexport * from './union-type.mjs';\nexport * from './union.mjs';\n","import { TypeBoxError } from '../error/index.mjs';\n// ------------------------------------------------------------------\n// TemplateLiteralParserError\n// ------------------------------------------------------------------\nexport class TemplateLiteralParserError extends TypeBoxError {\n}\n// -------------------------------------------------------------------\n// Unescape\n//\n// Unescape for these control characters specifically. Note that this\n// function is only called on non union group content, and where we\n// still want to allow the user to embed control characters in that\n// content. For review.\n// -------------------------------------------------------------------\n// prettier-ignore\nfunction Unescape(pattern) {\n return pattern\n .replace(/\\\\\\$/g, '$')\n .replace(/\\\\\\*/g, '*')\n .replace(/\\\\\\^/g, '^')\n .replace(/\\\\\\|/g, '|')\n .replace(/\\\\\\(/g, '(')\n .replace(/\\\\\\)/g, ')');\n}\n// -------------------------------------------------------------------\n// Control Characters\n// -------------------------------------------------------------------\nfunction IsNonEscaped(pattern, index, char) {\n return pattern[index] === char && pattern.charCodeAt(index - 1) !== 92;\n}\nfunction IsOpenParen(pattern, index) {\n return IsNonEscaped(pattern, index, '(');\n}\nfunction IsCloseParen(pattern, index) {\n return IsNonEscaped(pattern, index, ')');\n}\nfunction IsSeparator(pattern, index) {\n return IsNonEscaped(pattern, index, '|');\n}\n// -------------------------------------------------------------------\n// Control Groups\n// -------------------------------------------------------------------\nfunction IsGroup(pattern) {\n if (!(IsOpenParen(pattern, 0) && IsCloseParen(pattern, pattern.length - 1)))\n return false;\n let count = 0;\n for (let index = 0; index < pattern.length; index++) {\n if (IsOpenParen(pattern, index))\n count += 1;\n if (IsCloseParen(pattern, index))\n count -= 1;\n if (count === 0 && index !== pattern.length - 1)\n return false;\n }\n return true;\n}\n// prettier-ignore\nfunction InGroup(pattern) {\n return pattern.slice(1, pattern.length - 1);\n}\n// prettier-ignore\nfunction IsPrecedenceOr(pattern) {\n let count = 0;\n for (let index = 0; index < pattern.length; index++) {\n if (IsOpenParen(pattern, index))\n count += 1;\n if (IsCloseParen(pattern, index))\n count -= 1;\n if (IsSeparator(pattern, index) && count === 0)\n return true;\n }\n return false;\n}\n// prettier-ignore\nfunction IsPrecedenceAnd(pattern) {\n for (let index = 0; index < pattern.length; index++) {\n if (IsOpenParen(pattern, index))\n return true;\n }\n return false;\n}\n// prettier-ignore\nfunction Or(pattern) {\n let [count, start] = [0, 0];\n const expressions = [];\n for (let index = 0; index < pattern.length; index++) {\n if (IsOpenParen(pattern, index))\n count += 1;\n if (IsCloseParen(pattern, index))\n count -= 1;\n if (IsSeparator(pattern, index) && count === 0) {\n const range = pattern.slice(start, index);\n if (range.length > 0)\n expressions.push(TemplateLiteralParse(range));\n start = index + 1;\n }\n }\n const range = pattern.slice(start);\n if (range.length > 0)\n expressions.push(TemplateLiteralParse(range));\n if (expressions.length === 0)\n return { type: 'const', const: '' };\n if (expressions.length === 1)\n return expressions[0];\n return { type: 'or', expr: expressions };\n}\n// prettier-ignore\nfunction And(pattern) {\n function Group(value, index) {\n if (!IsOpenParen(value, index))\n throw new TemplateLiteralParserError(`TemplateLiteralParser: Index must point to open parens`);\n let count = 0;\n for (let scan = index; scan < value.length; scan++) {\n if (IsOpenParen(value, scan))\n count += 1;\n if (IsCloseParen(value, scan))\n count -= 1;\n if (count === 0)\n return [index, scan];\n }\n throw new TemplateLiteralParserError(`TemplateLiteralParser: Unclosed group parens in expression`);\n }\n function Range(pattern, index) {\n for (let scan = index; scan < pattern.length; scan++) {\n if (IsOpenParen(pattern, scan))\n return [index, scan];\n }\n return [index, pattern.length];\n }\n const expressions = [];\n for (let index = 0; index < pattern.length; index++) {\n if (IsOpenParen(pattern, index)) {\n const [start, end] = Group(pattern, index);\n const range = pattern.slice(start, end + 1);\n expressions.push(TemplateLiteralParse(range));\n index = end;\n }\n else {\n const [start, end] = Range(pattern, index);\n const range = pattern.slice(start, end);\n if (range.length > 0)\n expressions.push(TemplateLiteralParse(range));\n index = end - 1;\n }\n }\n return ((expressions.length === 0) ? { type: 'const', const: '' } :\n (expressions.length === 1) ? expressions[0] :\n { type: 'and', expr: expressions });\n}\n// ------------------------------------------------------------------\n// TemplateLiteralParse\n// ------------------------------------------------------------------\n/** Parses a pattern and returns an expression tree */\nexport function TemplateLiteralParse(pattern) {\n // prettier-ignore\n return (IsGroup(pattern) ? TemplateLiteralParse(InGroup(pattern)) :\n IsPrecedenceOr(pattern) ? Or(pattern) :\n IsPrecedenceAnd(pattern) ? And(pattern) :\n { type: 'const', const: Unescape(pattern) });\n}\n// ------------------------------------------------------------------\n// TemplateLiteralParseExact\n// ------------------------------------------------------------------\n/** Parses a pattern and strips forward and trailing ^ and $ */\nexport function TemplateLiteralParseExact(pattern) {\n return TemplateLiteralParse(pattern.slice(1, pattern.length - 1));\n}\n","import { TemplateLiteralParseExact } from './parse.mjs';\nimport { TypeBoxError } from '../error/index.mjs';\n// ------------------------------------------------------------------\n// TemplateLiteralFiniteError\n// ------------------------------------------------------------------\nexport class TemplateLiteralFiniteError extends TypeBoxError {\n}\n// ------------------------------------------------------------------\n// IsTemplateLiteralFiniteCheck\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction IsNumberExpression(expression) {\n return (expression.type === 'or' &&\n expression.expr.length === 2 &&\n expression.expr[0].type === 'const' &&\n expression.expr[0].const === '0' &&\n expression.expr[1].type === 'const' &&\n expression.expr[1].const === '[1-9][0-9]*');\n}\n// prettier-ignore\nfunction IsBooleanExpression(expression) {\n return (expression.type === 'or' &&\n expression.expr.length === 2 &&\n expression.expr[0].type === 'const' &&\n expression.expr[0].const === 'true' &&\n expression.expr[1].type === 'const' &&\n expression.expr[1].const === 'false');\n}\n// prettier-ignore\nfunction IsStringExpression(expression) {\n return expression.type === 'const' && expression.const === '.*';\n}\n// ------------------------------------------------------------------\n// IsTemplateLiteralExpressionFinite\n// ------------------------------------------------------------------\n// prettier-ignore\nexport function IsTemplateLiteralExpressionFinite(expression) {\n return (IsNumberExpression(expression) || IsStringExpression(expression) ? false :\n IsBooleanExpression(expression) ? true :\n (expression.type === 'and') ? expression.expr.every((expr) => IsTemplateLiteralExpressionFinite(expr)) :\n (expression.type === 'or') ? expression.expr.every((expr) => IsTemplateLiteralExpressionFinite(expr)) :\n (expression.type === 'const') ? true :\n (() => { throw new TemplateLiteralFiniteError(`Unknown expression type`); })());\n}\n/** Returns true if this TemplateLiteral resolves to a finite set of values */\nexport function IsTemplateLiteralFinite(schema) {\n const expression = TemplateLiteralParseExact(schema.pattern);\n return IsTemplateLiteralExpressionFinite(expression);\n}\n","import { IsTemplateLiteralExpressionFinite } from './finite.mjs';\nimport { TemplateLiteralParseExact } from './parse.mjs';\nimport { TypeBoxError } from '../error/index.mjs';\n// ------------------------------------------------------------------\n// TemplateLiteralGenerateError\n// ------------------------------------------------------------------\nexport class TemplateLiteralGenerateError extends TypeBoxError {\n}\n// ------------------------------------------------------------------\n// TemplateLiteralExpressionGenerate\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction* GenerateReduce(buffer) {\n if (buffer.length === 1)\n return yield* buffer[0];\n for (const left of buffer[0]) {\n for (const right of GenerateReduce(buffer.slice(1))) {\n yield `${left}${right}`;\n }\n }\n}\n// prettier-ignore\nfunction* GenerateAnd(expression) {\n return yield* GenerateReduce(expression.expr.map((expr) => [...TemplateLiteralExpressionGenerate(expr)]));\n}\n// prettier-ignore\nfunction* GenerateOr(expression) {\n for (const expr of expression.expr)\n yield* TemplateLiteralExpressionGenerate(expr);\n}\n// prettier-ignore\nfunction* GenerateConst(expression) {\n return yield expression.const;\n}\nexport function* TemplateLiteralExpressionGenerate(expression) {\n return expression.type === 'and'\n ? yield* GenerateAnd(expression)\n : expression.type === 'or'\n ? yield* GenerateOr(expression)\n : expression.type === 'const'\n ? yield* GenerateConst(expression)\n : (() => {\n throw new TemplateLiteralGenerateError('Unknown expression');\n })();\n}\n/** Generates a tuple of strings from the given TemplateLiteral. Returns an empty tuple if infinite. */\nexport function TemplateLiteralGenerate(schema) {\n const expression = TemplateLiteralParseExact(schema.pattern);\n // prettier-ignore\n return (IsTemplateLiteralExpressionFinite(expression)\n ? [...TemplateLiteralExpressionGenerate(expression)]\n : []);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Literal type */\nexport function Literal(value, options) {\n return CreateType({\n [Kind]: 'Literal',\n const: value,\n type: typeof value,\n }, options);\n}\n","export * from './literal.mjs';\n","import { Kind } from '../symbols/index.mjs';\nimport { CreateType } from '../create/index.mjs';\n/** `[Json]` Creates a Boolean type */\nexport function Boolean(options) {\n return CreateType({ [Kind]: 'Boolean', type: 'boolean' }, options);\n}\n","export * from './boolean.mjs';\n","import { Kind } from '../symbols/index.mjs';\nimport { CreateType } from '../create/index.mjs';\n/** `[JavaScript]` Creates a BigInt type */\nexport function BigInt(options) {\n return CreateType({ [Kind]: 'BigInt', type: 'bigint' }, options);\n}\n","export * from './bigint.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Number type */\nexport function Number(options) {\n return CreateType({ [Kind]: 'Number', type: 'number' }, options);\n}\n","export * from './number.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a String type */\nexport function String(options) {\n return CreateType({ [Kind]: 'String', type: 'string' }, options);\n}\n","export * from './string.mjs';\n","import { Literal } from '../literal/index.mjs';\nimport { Boolean } from '../boolean/index.mjs';\nimport { BigInt } from '../bigint/index.mjs';\nimport { Number } from '../number/index.mjs';\nimport { String } from '../string/index.mjs';\nimport { UnionEvaluated } from '../union/index.mjs';\nimport { Never } from '../never/index.mjs';\n// ------------------------------------------------------------------\n// SyntaxParsers\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction* FromUnion(syntax) {\n const trim = syntax.trim().replace(/\"|'/g, '');\n return (trim === 'boolean' ? yield Boolean() :\n trim === 'number' ? yield Number() :\n trim === 'bigint' ? yield BigInt() :\n trim === 'string' ? yield String() :\n yield (() => {\n const literals = trim.split('|').map((literal) => Literal(literal.trim()));\n return (literals.length === 0 ? Never() :\n literals.length === 1 ? literals[0] :\n UnionEvaluated(literals));\n })());\n}\n// prettier-ignore\nfunction* FromTerminal(syntax) {\n if (syntax[1] !== '{') {\n const L = Literal('$');\n const R = FromSyntax(syntax.slice(1));\n return yield* [L, ...R];\n }\n for (let i = 2; i < syntax.length; i++) {\n if (syntax[i] === '}') {\n const L = FromUnion(syntax.slice(2, i));\n const R = FromSyntax(syntax.slice(i + 1));\n return yield* [...L, ...R];\n }\n }\n yield Literal(syntax);\n}\n// prettier-ignore\nfunction* FromSyntax(syntax) {\n for (let i = 0; i < syntax.length; i++) {\n if (syntax[i] === '$') {\n const L = Literal(syntax.slice(0, i));\n const R = FromTerminal(syntax.slice(i));\n return yield* [L, ...R];\n }\n }\n yield Literal(syntax);\n}\n/** Parses TemplateLiteralSyntax and returns a tuple of TemplateLiteralKinds */\nexport function TemplateLiteralSyntax(syntax) {\n return [...FromSyntax(syntax)];\n}\n","import { PatternNumber, PatternString, PatternBoolean } from '../patterns/index.mjs';\nimport { Kind } from '../symbols/index.mjs';\nimport { TypeBoxError } from '../error/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsTemplateLiteral, IsUnion, IsNumber, IsInteger, IsBigInt, IsString, IsLiteral, IsBoolean } from '../guard/kind.mjs';\n// ------------------------------------------------------------------\n// TemplateLiteralPatternError\n// ------------------------------------------------------------------\nexport class TemplateLiteralPatternError extends TypeBoxError {\n}\n// ------------------------------------------------------------------\n// TemplateLiteralPattern\n// ------------------------------------------------------------------\nfunction Escape(value) {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n// prettier-ignore\nfunction Visit(schema, acc) {\n return (IsTemplateLiteral(schema) ? schema.pattern.slice(1, schema.pattern.length - 1) :\n IsUnion(schema) ? `(${schema.anyOf.map((schema) => Visit(schema, acc)).join('|')})` :\n IsNumber(schema) ? `${acc}${PatternNumber}` :\n IsInteger(schema) ? `${acc}${PatternNumber}` :\n IsBigInt(schema) ? `${acc}${PatternNumber}` :\n IsString(schema) ? `${acc}${PatternString}` :\n IsLiteral(schema) ? `${acc}${Escape(schema.const.toString())}` :\n IsBoolean(schema) ? `${acc}${PatternBoolean}` :\n (() => { throw new TemplateLiteralPatternError(`Unexpected Kind '${schema[Kind]}'`); })());\n}\nexport function TemplateLiteralPattern(kinds) {\n return `^${kinds.map((schema) => Visit(schema, '')).join('')}\\$`;\n}\n","import { UnionEvaluated } from '../union/index.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { TemplateLiteralGenerate } from './generate.mjs';\n/** Returns a Union from the given TemplateLiteral */\nexport function TemplateLiteralToUnion(schema) {\n const R = TemplateLiteralGenerate(schema);\n const L = R.map((S) => Literal(S));\n return UnionEvaluated(L);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { TemplateLiteralSyntax } from './syntax.mjs';\nimport { TemplateLiteralPattern } from './pattern.mjs';\nimport { IsString } from '../guard/value.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a TemplateLiteral type */\n// prettier-ignore\nexport function TemplateLiteral(unresolved, options) {\n const pattern = IsString(unresolved)\n ? TemplateLiteralPattern(TemplateLiteralSyntax(unresolved))\n : TemplateLiteralPattern(unresolved);\n return CreateType({ [Kind]: 'TemplateLiteral', type: 'string', pattern }, options);\n}\n","export * from './finite.mjs';\nexport * from './generate.mjs';\nexport * from './syntax.mjs';\nexport * from './parse.mjs';\nexport * from './pattern.mjs';\nexport * from './union.mjs';\nexport * from './template-literal.mjs';\n","import { TemplateLiteralGenerate } from '../template-literal/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsTemplateLiteral, IsUnion, IsLiteral, IsNumber, IsInteger } from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromTemplateLiteral(templateLiteral) {\n const keys = TemplateLiteralGenerate(templateLiteral);\n return keys.map(key => key.toString());\n}\n// prettier-ignore\nfunction FromUnion(types) {\n const result = [];\n for (const type of types)\n result.push(...IndexPropertyKeys(type));\n return result;\n}\n// prettier-ignore\nfunction FromLiteral(literalValue) {\n return ([literalValue.toString()] // TS 5.4 observes TLiteralValue as not having a toString()\n );\n}\n/** Returns a tuple of PropertyKeys derived from the given TSchema */\n// prettier-ignore\nexport function IndexPropertyKeys(type) {\n return [...new Set((IsTemplateLiteral(type) ? FromTemplateLiteral(type) :\n IsUnion(type) ? FromUnion(type.anyOf) :\n IsLiteral(type) ? FromLiteral(type.const) :\n IsNumber(type) ? ['[number]'] :\n IsInteger(type) ? ['[number]'] :\n []))];\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { IndexPropertyKeys } from './indexed-property-keys.mjs';\nimport { Index } from './index.mjs';\n// prettier-ignore\nfunction FromProperties(type, properties, options) {\n const result = {};\n for (const K2 of Object.getOwnPropertyNames(properties)) {\n result[K2] = Index(type, IndexPropertyKeys(properties[K2]), options);\n }\n return result;\n}\n// prettier-ignore\nfunction FromMappedResult(type, mappedResult, options) {\n return FromProperties(type, mappedResult.properties, options);\n}\n// prettier-ignore\nexport function IndexFromMappedResult(type, mappedResult, options) {\n const properties = FromMappedResult(type, mappedResult, options);\n return MappedResult(properties);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { TypeBoxError } from '../error/index.mjs';\nimport { Computed } from '../computed/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport { IntersectEvaluated } from '../intersect/index.mjs';\nimport { UnionEvaluated } from '../union/index.mjs';\nimport { IndexPropertyKeys } from './indexed-property-keys.mjs';\nimport { IndexFromMappedKey } from './indexed-from-mapped-key.mjs';\nimport { IndexFromMappedResult } from './indexed-from-mapped-result.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsArray, IsIntersect, IsObject, IsMappedKey, IsMappedResult, IsNever, IsSchema, IsTuple, IsUnion, IsRef } from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromRest(types, key) {\n return types.map(type => IndexFromPropertyKey(type, key));\n}\n// prettier-ignore\nfunction FromIntersectRest(types) {\n return types.filter(type => !IsNever(type));\n}\n// prettier-ignore\nfunction FromIntersect(types, key) {\n return (IntersectEvaluated(FromIntersectRest(FromRest(types, key))));\n}\n// prettier-ignore\nfunction FromUnionRest(types) {\n return (types.some(L => IsNever(L))\n ? []\n : types);\n}\n// prettier-ignore\nfunction FromUnion(types, key) {\n return (UnionEvaluated(FromUnionRest(FromRest(types, key))));\n}\n// prettier-ignore\nfunction FromTuple(types, key) {\n return (key in types ? types[key] :\n key === '[number]' ? UnionEvaluated(types) :\n Never());\n}\n// prettier-ignore\nfunction FromArray(type, key) {\n return (key === '[number]'\n ? type\n : Never());\n}\n// prettier-ignore\nfunction FromProperty(properties, propertyKey) {\n return (propertyKey in properties ? properties[propertyKey] : Never());\n}\n// prettier-ignore\nexport function IndexFromPropertyKey(type, propertyKey) {\n return (IsIntersect(type) ? FromIntersect(type.allOf, propertyKey) :\n IsUnion(type) ? FromUnion(type.anyOf, propertyKey) :\n IsTuple(type) ? FromTuple(type.items ?? [], propertyKey) :\n IsArray(type) ? FromArray(type.items, propertyKey) :\n IsObject(type) ? FromProperty(type.properties, propertyKey) :\n Never());\n}\n// prettier-ignore\nexport function IndexFromPropertyKeys(type, propertyKeys) {\n return propertyKeys.map(propertyKey => IndexFromPropertyKey(type, propertyKey));\n}\n// prettier-ignore\nfunction FromSchema(type, propertyKeys) {\n return (UnionEvaluated(IndexFromPropertyKeys(type, propertyKeys)));\n}\n// prettier-ignore\nexport function IndexFromComputed(type, key) {\n return Computed('Index', [type, key]);\n}\n/** `[Json]` Returns an Indexed property type for the given keys */\nexport function Index(type, key, options) {\n // computed-type\n if (IsRef(type) || IsRef(key)) {\n const error = `Index types using Ref parameters require both Type and Key to be of TSchema`;\n if (!IsSchema(type) || !IsSchema(key))\n throw new TypeBoxError(error);\n return Computed('Index', [type, key]);\n }\n // mapped-types\n if (IsMappedResult(key))\n return IndexFromMappedResult(type, key, options);\n if (IsMappedKey(key))\n return IndexFromMappedKey(type, key, options);\n // prettier-ignore\n return CreateType(IsSchema(key)\n ? FromSchema(type, IndexPropertyKeys(key))\n : FromSchema(type, key), options);\n}\n","import { Index } from './indexed.mjs';\nimport { MappedResult } from '../mapped/index.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction MappedIndexPropertyKey(type, key, options) {\n return { [key]: Index(type, [key], Clone(options)) };\n}\n// prettier-ignore\nfunction MappedIndexPropertyKeys(type, propertyKeys, options) {\n return propertyKeys.reduce((result, left) => {\n return { ...result, ...MappedIndexPropertyKey(type, left, options) };\n }, {});\n}\n// prettier-ignore\nfunction MappedIndexProperties(type, mappedKey, options) {\n return MappedIndexPropertyKeys(type, mappedKey.keys, options);\n}\n// prettier-ignore\nexport function IndexFromMappedKey(type, mappedKey, options) {\n const properties = MappedIndexProperties(type, mappedKey, options);\n return MappedResult(properties);\n}\n","export * from './indexed-from-mapped-key.mjs';\nexport * from './indexed-from-mapped-result.mjs';\nexport * from './indexed-property-keys.mjs';\nexport * from './indexed.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates an Iterator type */\nexport function Iterator(items, options) {\n return CreateType({ [Kind]: 'Iterator', type: 'Iterator', items }, options);\n}\n","export * from './iterator.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsOptional } from '../guard/kind.mjs';\nfunction RequiredKeys(properties) {\n const keys = [];\n for (let key in properties) {\n if (!IsOptional(properties[key]))\n keys.push(key);\n }\n return keys;\n}\n/** `[Json]` Creates an Object type */\nfunction _Object(properties, options) {\n const required = RequiredKeys(properties);\n const schematic = required.length > 0 ? { [Kind]: 'Object', type: 'object', properties, required } : { [Kind]: 'Object', type: 'object', properties };\n return CreateType(schematic, options);\n}\n/** `[Json]` Creates an Object type */\nexport var Object = _Object;\n","export * from './object.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Promise type */\nexport function Promise(item, options) {\n return CreateType({ [Kind]: 'Promise', type: 'Promise', item }, options);\n}\n","export * from './promise.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { ReadonlyKind } from '../symbols/index.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { ReadonlyFromMappedResult } from './readonly-from-mapped-result.mjs';\nimport { IsMappedResult } from '../guard/kind.mjs';\nfunction RemoveReadonly(schema) {\n return CreateType(Discard(schema, [ReadonlyKind]));\n}\nfunction AddReadonly(schema) {\n return CreateType({ ...schema, [ReadonlyKind]: 'Readonly' });\n}\n// prettier-ignore\nfunction ReadonlyWithFlag(schema, F) {\n return (F === false\n ? RemoveReadonly(schema)\n : AddReadonly(schema));\n}\n/** `[Json]` Creates a Readonly property */\nexport function Readonly(schema, enable) {\n const F = enable ?? true;\n return IsMappedResult(schema) ? ReadonlyFromMappedResult(schema, F) : ReadonlyWithFlag(schema, F);\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Readonly } from './readonly.mjs';\n// prettier-ignore\nfunction FromProperties(K, F) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(K))\n Acc[K2] = Readonly(K[K2], F);\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(R, F) {\n return FromProperties(R.properties, F);\n}\n// prettier-ignore\nexport function ReadonlyFromMappedResult(R, F) {\n const P = FromMappedResult(R, F);\n return MappedResult(P);\n}\n","export * from './readonly-from-mapped-result.mjs';\nexport * from './readonly.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Tuple type */\nexport function Tuple(types, options) {\n // prettier-ignore\n return CreateType(types.length > 0 ?\n { [Kind]: 'Tuple', type: 'array', items: types, additionalItems: false, minItems: types.length, maxItems: types.length } :\n { [Kind]: 'Tuple', type: 'array', minItems: types.length, maxItems: types.length }, options);\n}\n","export * from './tuple.mjs';\n","import { Kind, OptionalKind, ReadonlyKind } from '../symbols/index.mjs';\nimport { Discard } from '../discard/index.mjs';\n// evaluation types\nimport { Array } from '../array/index.mjs';\nimport { AsyncIterator } from '../async-iterator/index.mjs';\nimport { Constructor } from '../constructor/index.mjs';\nimport { Function as FunctionType } from '../function/index.mjs';\nimport { IndexPropertyKeys } from '../indexed/index.mjs';\nimport { Intersect } from '../intersect/index.mjs';\nimport { Iterator } from '../iterator/index.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { Object } from '../object/index.mjs';\nimport { Optional } from '../optional/index.mjs';\nimport { Promise } from '../promise/index.mjs';\nimport { Readonly } from '../readonly/index.mjs';\nimport { Tuple } from '../tuple/index.mjs';\nimport { Union } from '../union/index.mjs';\n// operator\nimport { SetIncludes } from '../sets/index.mjs';\n// mapping types\nimport { MappedResult } from './mapped-result.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsArray, IsAsyncIterator, IsConstructor, IsFunction, IsIntersect, IsIterator, IsReadonly, IsMappedResult, IsMappedKey, IsObject, IsOptional, IsPromise, IsSchema, IsTuple, IsUnion } from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromMappedResult(K, P) {\n return (K in P\n ? FromSchemaType(K, P[K])\n : MappedResult(P));\n}\n// prettier-ignore\nfunction MappedKeyToKnownMappedResultProperties(K) {\n return { [K]: Literal(K) };\n}\n// prettier-ignore\nfunction MappedKeyToUnknownMappedResultProperties(P) {\n const Acc = {};\n for (const L of P)\n Acc[L] = Literal(L);\n return Acc;\n}\n// prettier-ignore\nfunction MappedKeyToMappedResultProperties(K, P) {\n return (SetIncludes(P, K)\n ? MappedKeyToKnownMappedResultProperties(K)\n : MappedKeyToUnknownMappedResultProperties(P));\n}\n// prettier-ignore\nfunction FromMappedKey(K, P) {\n const R = MappedKeyToMappedResultProperties(K, P);\n return FromMappedResult(K, R);\n}\n// prettier-ignore\nfunction FromRest(K, T) {\n return T.map(L => FromSchemaType(K, L));\n}\n// prettier-ignore\nfunction FromProperties(K, T) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(T))\n Acc[K2] = FromSchemaType(K, T[K2]);\n return Acc;\n}\n// prettier-ignore\nfunction FromSchemaType(K, T) {\n // required to retain user defined options for mapped type\n const options = { ...T };\n return (\n // unevaluated modifier types\n IsOptional(T) ? Optional(FromSchemaType(K, Discard(T, [OptionalKind]))) :\n IsReadonly(T) ? Readonly(FromSchemaType(K, Discard(T, [ReadonlyKind]))) :\n // unevaluated mapped types\n IsMappedResult(T) ? FromMappedResult(K, T.properties) :\n IsMappedKey(T) ? FromMappedKey(K, T.keys) :\n // unevaluated types\n IsConstructor(T) ? Constructor(FromRest(K, T.parameters), FromSchemaType(K, T.returns), options) :\n IsFunction(T) ? FunctionType(FromRest(K, T.parameters), FromSchemaType(K, T.returns), options) :\n IsAsyncIterator(T) ? AsyncIterator(FromSchemaType(K, T.items), options) :\n IsIterator(T) ? Iterator(FromSchemaType(K, T.items), options) :\n IsIntersect(T) ? Intersect(FromRest(K, T.allOf), options) :\n IsUnion(T) ? Union(FromRest(K, T.anyOf), options) :\n IsTuple(T) ? Tuple(FromRest(K, T.items ?? []), options) :\n IsObject(T) ? Object(FromProperties(K, T.properties), options) :\n IsArray(T) ? Array(FromSchemaType(K, T.items), options) :\n IsPromise(T) ? Promise(FromSchemaType(K, T.item), options) :\n T);\n}\n// prettier-ignore\nexport function MappedFunctionReturnType(K, T) {\n const Acc = {};\n for (const L of K)\n Acc[L] = FromSchemaType(L, T);\n return Acc;\n}\n/** `[Json]` Creates a Mapped object type */\nexport function Mapped(key, map, options) {\n const K = IsSchema(key) ? IndexPropertyKeys(key) : key;\n const RT = map({ [Kind]: 'MappedKey', keys: K });\n const R = MappedFunctionReturnType(K, RT);\n return Object(R, options);\n}\n","export * from './mapped-key.mjs';\nexport * from './mapped-result.mjs';\nexport * from './mapped.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { OptionalKind } from '../symbols/index.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { OptionalFromMappedResult } from './optional-from-mapped-result.mjs';\nimport { IsMappedResult } from '../guard/kind.mjs';\nfunction RemoveOptional(schema) {\n return CreateType(Discard(schema, [OptionalKind]));\n}\nfunction AddOptional(schema) {\n return CreateType({ ...schema, [OptionalKind]: 'Optional' });\n}\n// prettier-ignore\nfunction OptionalWithFlag(schema, F) {\n return (F === false\n ? RemoveOptional(schema)\n : AddOptional(schema));\n}\n/** `[Json]` Creates a Optional property */\nexport function Optional(schema, enable) {\n const F = enable ?? true;\n return IsMappedResult(schema) ? OptionalFromMappedResult(schema, F) : OptionalWithFlag(schema, F);\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Optional } from './optional.mjs';\n// prettier-ignore\nfunction FromProperties(P, F) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(P))\n Acc[K2] = Optional(P[K2], F);\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(R, F) {\n return FromProperties(R.properties, F);\n}\n// prettier-ignore\nexport function OptionalFromMappedResult(R, F) {\n const P = FromMappedResult(R, F);\n return MappedResult(P);\n}\n","export * from './optional-from-mapped-result.mjs';\nexport * from './optional.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsObject, IsSchema } from '../guard/kind.mjs';\n// ------------------------------------------------------------------\n// IntersectCreate\n// ------------------------------------------------------------------\n// prettier-ignore\nexport function IntersectCreate(T, options = {}) {\n const allObjects = T.every((schema) => IsObject(schema));\n const clonedUnevaluatedProperties = IsSchema(options.unevaluatedProperties)\n ? { unevaluatedProperties: options.unevaluatedProperties }\n : {};\n return CreateType((options.unevaluatedProperties === false || IsSchema(options.unevaluatedProperties) || allObjects\n ? { ...clonedUnevaluatedProperties, [Kind]: 'Intersect', type: 'object', allOf: T }\n : { ...clonedUnevaluatedProperties, [Kind]: 'Intersect', allOf: T }), options);\n}\n","import { OptionalKind } from '../symbols/index.mjs';\nimport { CreateType } from '../create/type.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport { Optional } from '../optional/index.mjs';\nimport { IntersectCreate } from './intersect-create.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsOptional, IsTransform } from '../guard/kind.mjs';\n// prettier-ignore\nfunction IsIntersectOptional(types) {\n return types.every(left => IsOptional(left));\n}\n// prettier-ignore\nfunction RemoveOptionalFromType(type) {\n return (Discard(type, [OptionalKind]));\n}\n// prettier-ignore\nfunction RemoveOptionalFromRest(types) {\n return types.map(left => IsOptional(left) ? RemoveOptionalFromType(left) : left);\n}\n// prettier-ignore\nfunction ResolveIntersect(types, options) {\n return (IsIntersectOptional(types)\n ? Optional(IntersectCreate(RemoveOptionalFromRest(types), options))\n : IntersectCreate(RemoveOptionalFromRest(types), options));\n}\n/** `[Json]` Creates an evaluated Intersect type */\nexport function IntersectEvaluated(types, options = {}) {\n if (types.length === 1)\n return CreateType(types[0], options);\n if (types.length === 0)\n return Never(options);\n if (types.some((schema) => IsTransform(schema)))\n throw new Error('Cannot intersect transform types');\n return ResolveIntersect(types, options);\n}\n","import { Kind } from '../symbols/index.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Never } from '../never/index.mjs';\nimport { IntersectCreate } from './intersect-create.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsTransform } from '../guard/kind.mjs';\n/** `[Json]` Creates an evaluated Intersect type */\nexport function Intersect(types, options) {\n if (types.length === 1)\n return CreateType(types[0], options);\n if (types.length === 0)\n return Never(options);\n if (types.some((schema) => IsTransform(schema)))\n throw new Error('Cannot intersect transform types');\n return IntersectCreate(types, options);\n}\n","export * from './intersect-evaluated.mjs';\nexport * from './intersect-type.mjs';\nexport * from './intersect.mjs';\n","import { TypeBoxError } from '../error/index.mjs';\nimport { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Ref type. The referenced type must contain a $id */\nexport function Ref(...args) {\n const [$ref, options] = typeof args[0] === 'string' ? [args[0], args[1]] : [args[0].$id, args[1]];\n if (typeof $ref !== 'string')\n throw new TypeBoxError('Ref: $ref must be a string');\n return CreateType({ [Kind]: 'Ref', $ref }, options);\n}\n","export * from './ref.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Computed } from '../computed/index.mjs';\nimport { Intersect } from '../intersect/index.mjs';\nimport { Union } from '../union/index.mjs';\nimport { Ref } from '../ref/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsIntersect, IsUnion, IsPromise, IsRef, IsComputed } from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromComputed(target, parameters) {\n return Computed('Awaited', [Computed(target, parameters)]);\n}\n// prettier-ignore\nfunction FromRef($ref) {\n return Computed('Awaited', [Ref($ref)]);\n}\n// prettier-ignore\nfunction FromIntersect(types) {\n return Intersect(FromRest(types));\n}\n// prettier-ignore\nfunction FromUnion(types) {\n return Union(FromRest(types));\n}\n// prettier-ignore\nfunction FromPromise(type) {\n return Awaited(type);\n}\n// prettier-ignore\nfunction FromRest(types) {\n return types.map(type => Awaited(type));\n}\n/** `[JavaScript]` Constructs a type by recursively unwrapping Promise types */\nexport function Awaited(type, options) {\n return CreateType(IsComputed(type) ? FromComputed(type.target, type.parameters) : IsIntersect(type) ? FromIntersect(type.allOf) : IsUnion(type) ? FromUnion(type.anyOf) : IsPromise(type) ? FromPromise(type.item) : IsRef(type) ? FromRef(type.$ref) : type, options);\n}\n","export * from './awaited.mjs';\n","import { SetUnionMany, SetIntersectMany } from '../sets/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsIntersect, IsUnion, IsTuple, IsArray, IsObject, IsRecord } from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromRest(types) {\n const result = [];\n for (const L of types)\n result.push(KeyOfPropertyKeys(L));\n return result;\n}\n// prettier-ignore\nfunction FromIntersect(types) {\n const propertyKeysArray = FromRest(types);\n const propertyKeys = SetUnionMany(propertyKeysArray);\n return propertyKeys;\n}\n// prettier-ignore\nfunction FromUnion(types) {\n const propertyKeysArray = FromRest(types);\n const propertyKeys = SetIntersectMany(propertyKeysArray);\n return propertyKeys;\n}\n// prettier-ignore\nfunction FromTuple(types) {\n return types.map((_, indexer) => indexer.toString());\n}\n// prettier-ignore\nfunction FromArray(_) {\n return (['[number]']);\n}\n// prettier-ignore\nfunction FromProperties(T) {\n return (globalThis.Object.getOwnPropertyNames(T));\n}\n// ------------------------------------------------------------------\n// FromPatternProperties\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromPatternProperties(patternProperties) {\n if (!includePatternProperties)\n return [];\n const patternPropertyKeys = globalThis.Object.getOwnPropertyNames(patternProperties);\n return patternPropertyKeys.map(key => {\n return (key[0] === '^' && key[key.length - 1] === '$')\n ? key.slice(1, key.length - 1)\n : key;\n });\n}\n/** Returns a tuple of PropertyKeys derived from the given TSchema. */\n// prettier-ignore\nexport function KeyOfPropertyKeys(type) {\n return (IsIntersect(type) ? FromIntersect(type.allOf) :\n IsUnion(type) ? FromUnion(type.anyOf) :\n IsTuple(type) ? FromTuple(type.items ?? []) :\n IsArray(type) ? FromArray(type.items) :\n IsObject(type) ? FromProperties(type.properties) :\n IsRecord(type) ? FromPatternProperties(type.patternProperties) :\n []);\n}\n// ----------------------------------------------------------------\n// KeyOfPattern\n// ----------------------------------------------------------------\nlet includePatternProperties = false;\n/** Returns a regular expression pattern derived from the given TSchema */\nexport function KeyOfPattern(schema) {\n includePatternProperties = true;\n const keys = KeyOfPropertyKeys(schema);\n includePatternProperties = false;\n const pattern = keys.map((key) => `(${key})`);\n return `^(${pattern.join('|')})$`;\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { Number } from '../number/index.mjs';\nimport { Computed } from '../computed/index.mjs';\nimport { Ref } from '../ref/index.mjs';\nimport { KeyOfPropertyKeys } from './keyof-property-keys.mjs';\nimport { UnionEvaluated } from '../union/index.mjs';\nimport { KeyOfFromMappedResult } from './keyof-from-mapped-result.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsMappedResult, IsRef, IsComputed } from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromComputed(target, parameters) {\n return Computed('KeyOf', [Computed(target, parameters)]);\n}\n// prettier-ignore\nfunction FromRef($ref) {\n return Computed('KeyOf', [Ref($ref)]);\n}\n// prettier-ignore\nfunction KeyOfFromType(type, options) {\n const propertyKeys = KeyOfPropertyKeys(type);\n const propertyKeyTypes = KeyOfPropertyKeysToRest(propertyKeys);\n const result = UnionEvaluated(propertyKeyTypes);\n return CreateType(result, options);\n}\n// prettier-ignore\nexport function KeyOfPropertyKeysToRest(propertyKeys) {\n return propertyKeys.map(L => L === '[number]' ? Number() : Literal(L));\n}\n/** `[Json]` Creates a KeyOf type */\nexport function KeyOf(type, options) {\n return (IsComputed(type) ? FromComputed(type.target, type.parameters) : IsRef(type) ? FromRef(type.$ref) : IsMappedResult(type) ? KeyOfFromMappedResult(type, options) : KeyOfFromType(type, options));\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { KeyOf } from './keyof.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction FromProperties(properties, options) {\n const result = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(properties))\n result[K2] = KeyOf(properties[K2], Clone(options));\n return result;\n}\n// prettier-ignore\nfunction FromMappedResult(mappedResult, options) {\n return FromProperties(mappedResult.properties, options);\n}\n// prettier-ignore\nexport function KeyOfFromMappedResult(mappedResult, options) {\n const properties = FromMappedResult(mappedResult, options);\n return MappedResult(properties);\n}\n","import { IndexFromPropertyKeys } from '../indexed/indexed.mjs';\nimport { KeyOfPropertyKeys } from './keyof-property-keys.mjs';\n/**\n * `[Utility]` Resolves an array of keys and schemas from the given schema. This method is faster\n * than obtaining the keys and resolving each individually via indexing. This method was written\n * accellerate Intersect and Union encoding.\n */\nexport function KeyOfPropertyEntries(schema) {\n const keys = KeyOfPropertyKeys(schema);\n const schemas = IndexFromPropertyKeys(schema, keys);\n return keys.map((_, index) => [keys[index], schemas[index]]);\n}\n","export * from './keyof-from-mapped-result.mjs';\nexport * from './keyof-property-entries.mjs';\nexport * from './keyof-property-keys.mjs';\nexport * from './keyof.mjs';\n","import { IntersectEvaluated } from '../intersect/index.mjs';\nimport { IndexFromPropertyKeys } from '../indexed/index.mjs';\nimport { KeyOfPropertyKeys } from '../keyof/index.mjs';\nimport { Object } from '../object/index.mjs';\nimport { SetDistinct } from '../sets/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsNever } from '../guard/kind.mjs';\n// prettier-ignore\nfunction CompositeKeys(T) {\n const Acc = [];\n for (const L of T)\n Acc.push(...KeyOfPropertyKeys(L));\n return SetDistinct(Acc);\n}\n// prettier-ignore\nfunction FilterNever(T) {\n return T.filter(L => !IsNever(L));\n}\n// prettier-ignore\nfunction CompositeProperty(T, K) {\n const Acc = [];\n for (const L of T)\n Acc.push(...IndexFromPropertyKeys(L, [K]));\n return FilterNever(Acc);\n}\n// prettier-ignore\nfunction CompositeProperties(T, K) {\n const Acc = {};\n for (const L of K) {\n Acc[L] = IntersectEvaluated(CompositeProperty(T, L));\n }\n return Acc;\n}\n// prettier-ignore\nexport function Composite(T, options) {\n const K = CompositeKeys(T);\n const P = CompositeProperties(T, K);\n const R = Object(P, options);\n return R;\n}\n","export * from './composite.mjs';\n","import { Kind } from '../symbols/index.mjs';\nimport { CreateType } from '../create/type.mjs';\n/** `[JavaScript]` Creates a Date type */\nexport function Date(options) {\n return CreateType({ [Kind]: 'Date', type: 'Date' }, options);\n}\n","export * from './date.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Null type */\nexport function Null(options) {\n return CreateType({ [Kind]: 'Null', type: 'null' }, options);\n}\n","export * from './null.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Symbol type */\nexport function Symbol(options) {\n return CreateType({ [Kind]: 'Symbol', type: 'symbol' }, options);\n}\n","export * from './symbol.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Undefined type */\nexport function Undefined(options) {\n return CreateType({ [Kind]: 'Undefined', type: 'undefined' }, options);\n}\n","export * from './undefined.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Uint8Array type */\nexport function Uint8Array(options) {\n return CreateType({ [Kind]: 'Uint8Array', type: 'Uint8Array' }, options);\n}\n","export * from './uint8array.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates an Unknown type */\nexport function Unknown(options) {\n return CreateType({ [Kind]: 'Unknown' }, options);\n}\n","export * from './unknown.mjs';\n","import { Any } from '../any/index.mjs';\nimport { BigInt } from '../bigint/index.mjs';\nimport { Date } from '../date/index.mjs';\nimport { Function as FunctionType } from '../function/index.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { Null } from '../null/index.mjs';\nimport { Object } from '../object/index.mjs';\nimport { Symbol } from '../symbol/index.mjs';\nimport { Tuple } from '../tuple/index.mjs';\nimport { Readonly } from '../readonly/index.mjs';\nimport { Undefined } from '../undefined/index.mjs';\nimport { Uint8Array } from '../uint8array/index.mjs';\nimport { Unknown } from '../unknown/index.mjs';\nimport { CreateType } from '../create/index.mjs';\n// ------------------------------------------------------------------\n// ValueGuard\n// ------------------------------------------------------------------\nimport { IsArray, IsNumber, IsBigInt, IsUint8Array, IsDate, IsIterator, IsObject, IsAsyncIterator, IsFunction, IsUndefined, IsNull, IsSymbol, IsBoolean, IsString } from '../guard/value.mjs';\n// prettier-ignore\nfunction FromArray(T) {\n return T.map(L => FromValue(L, false));\n}\n// prettier-ignore\nfunction FromProperties(value) {\n const Acc = {};\n for (const K of globalThis.Object.getOwnPropertyNames(value))\n Acc[K] = Readonly(FromValue(value[K], false));\n return Acc;\n}\nfunction ConditionalReadonly(T, root) {\n return (root === true ? T : Readonly(T));\n}\n// prettier-ignore\nfunction FromValue(value, root) {\n return (IsAsyncIterator(value) ? ConditionalReadonly(Any(), root) :\n IsIterator(value) ? ConditionalReadonly(Any(), root) :\n IsArray(value) ? Readonly(Tuple(FromArray(value))) :\n IsUint8Array(value) ? Uint8Array() :\n IsDate(value) ? Date() :\n IsObject(value) ? ConditionalReadonly(Object(FromProperties(value)), root) :\n IsFunction(value) ? ConditionalReadonly(FunctionType([], Unknown()), root) :\n IsUndefined(value) ? Undefined() :\n IsNull(value) ? Null() :\n IsSymbol(value) ? Symbol() :\n IsBigInt(value) ? BigInt() :\n IsNumber(value) ? Literal(value) :\n IsBoolean(value) ? Literal(value) :\n IsString(value) ? Literal(value) :\n Object({}));\n}\n/** `[JavaScript]` Creates a readonly const type from the given value. */\nexport function Const(T, options) {\n return CreateType(FromValue(T, true), options);\n}\n","export * from './const.mjs';\n","import { Tuple } from '../tuple/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport * as KindGuard from '../guard/kind.mjs';\n/** `[JavaScript]` Extracts the ConstructorParameters from the given Constructor type */\nexport function ConstructorParameters(schema, options) {\n return (KindGuard.IsConstructor(schema) ? Tuple(schema.parameters, options) : Never(options));\n}\n","export * from './constructor-parameters.mjs';\n","import { Literal } from '../literal/index.mjs';\nimport { Kind, Hint } from '../symbols/index.mjs';\nimport { Union } from '../union/index.mjs';\n// ------------------------------------------------------------------\n// ValueGuard\n// ------------------------------------------------------------------\nimport { IsUndefined } from '../guard/value.mjs';\n/** `[Json]` Creates a Enum type */\nexport function Enum(item, options) {\n if (IsUndefined(item))\n throw new Error('Enum undefined or empty');\n const values1 = globalThis.Object.getOwnPropertyNames(item)\n .filter((key) => isNaN(key))\n .map((key) => item[key]);\n const values2 = [...new Set(values1)];\n const anyOf = values2.map((value) => Literal(value));\n return Union(anyOf, { ...options, [Hint]: 'Enum' });\n}\n","export * from './enum.mjs';\n","import { Any } from '../any/index.mjs';\nimport { Function as FunctionType } from '../function/index.mjs';\nimport { Number } from '../number/index.mjs';\nimport { String } from '../string/index.mjs';\nimport { Unknown } from '../unknown/index.mjs';\nimport { TemplateLiteralToUnion } from '../template-literal/index.mjs';\nimport { PatternNumberExact, PatternStringExact } from '../patterns/index.mjs';\nimport { Kind, Hint } from '../symbols/index.mjs';\nimport { TypeBoxError } from '../error/index.mjs';\nimport { TypeGuard, ValueGuard } from '../guard/index.mjs';\nexport class ExtendsResolverError extends TypeBoxError {\n}\nexport var ExtendsResult;\n(function (ExtendsResult) {\n ExtendsResult[ExtendsResult[\"Union\"] = 0] = \"Union\";\n ExtendsResult[ExtendsResult[\"True\"] = 1] = \"True\";\n ExtendsResult[ExtendsResult[\"False\"] = 2] = \"False\";\n})(ExtendsResult || (ExtendsResult = {}));\n// ------------------------------------------------------------------\n// IntoBooleanResult\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction IntoBooleanResult(result) {\n return result === ExtendsResult.False ? result : ExtendsResult.True;\n}\n// ------------------------------------------------------------------\n// Throw\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction Throw(message) {\n throw new ExtendsResolverError(message);\n}\n// ------------------------------------------------------------------\n// StructuralRight\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction IsStructuralRight(right) {\n return (TypeGuard.IsNever(right) ||\n TypeGuard.IsIntersect(right) ||\n TypeGuard.IsUnion(right) ||\n TypeGuard.IsUnknown(right) ||\n TypeGuard.IsAny(right));\n}\n// prettier-ignore\nfunction StructuralRight(left, right) {\n return (TypeGuard.IsNever(right) ? FromNeverRight(left, right) :\n TypeGuard.IsIntersect(right) ? FromIntersectRight(left, right) :\n TypeGuard.IsUnion(right) ? FromUnionRight(left, right) :\n TypeGuard.IsUnknown(right) ? FromUnknownRight(left, right) :\n TypeGuard.IsAny(right) ? FromAnyRight(left, right) :\n Throw('StructuralRight'));\n}\n// ------------------------------------------------------------------\n// Any\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromAnyRight(left, right) {\n return ExtendsResult.True;\n}\n// prettier-ignore\nfunction FromAny(left, right) {\n return (TypeGuard.IsIntersect(right) ? FromIntersectRight(left, right) :\n (TypeGuard.IsUnion(right) && right.anyOf.some((schema) => TypeGuard.IsAny(schema) || TypeGuard.IsUnknown(schema))) ? ExtendsResult.True :\n TypeGuard.IsUnion(right) ? ExtendsResult.Union :\n TypeGuard.IsUnknown(right) ? ExtendsResult.True :\n TypeGuard.IsAny(right) ? ExtendsResult.True :\n ExtendsResult.Union);\n}\n// ------------------------------------------------------------------\n// Array\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromArrayRight(left, right) {\n return (TypeGuard.IsUnknown(left) ? ExtendsResult.False :\n TypeGuard.IsAny(left) ? ExtendsResult.Union :\n TypeGuard.IsNever(left) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromArray(left, right) {\n return (TypeGuard.IsObject(right) && IsObjectArrayLike(right) ? ExtendsResult.True :\n IsStructuralRight(right) ? StructuralRight(left, right) :\n !TypeGuard.IsArray(right) ? ExtendsResult.False :\n IntoBooleanResult(Visit(left.items, right.items)));\n}\n// ------------------------------------------------------------------\n// AsyncIterator\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromAsyncIterator(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n !TypeGuard.IsAsyncIterator(right) ? ExtendsResult.False :\n IntoBooleanResult(Visit(left.items, right.items)));\n}\n// ------------------------------------------------------------------\n// BigInt\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromBigInt(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsBigInt(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Boolean\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromBooleanRight(left, right) {\n return (TypeGuard.IsLiteralBoolean(left) ? ExtendsResult.True :\n TypeGuard.IsBoolean(left) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromBoolean(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsBoolean(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Constructor\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromConstructor(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n !TypeGuard.IsConstructor(right) ? ExtendsResult.False :\n left.parameters.length > right.parameters.length ? ExtendsResult.False :\n (!left.parameters.every((schema, index) => IntoBooleanResult(Visit(right.parameters[index], schema)) === ExtendsResult.True)) ? ExtendsResult.False :\n IntoBooleanResult(Visit(left.returns, right.returns)));\n}\n// ------------------------------------------------------------------\n// Date\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromDate(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsDate(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Function\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromFunction(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n !TypeGuard.IsFunction(right) ? ExtendsResult.False :\n left.parameters.length > right.parameters.length ? ExtendsResult.False :\n (!left.parameters.every((schema, index) => IntoBooleanResult(Visit(right.parameters[index], schema)) === ExtendsResult.True)) ? ExtendsResult.False :\n IntoBooleanResult(Visit(left.returns, right.returns)));\n}\n// ------------------------------------------------------------------\n// Integer\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromIntegerRight(left, right) {\n return (TypeGuard.IsLiteral(left) && ValueGuard.IsNumber(left.const) ? ExtendsResult.True :\n TypeGuard.IsNumber(left) || TypeGuard.IsInteger(left) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromInteger(left, right) {\n return (TypeGuard.IsInteger(right) || TypeGuard.IsNumber(right) ? ExtendsResult.True :\n IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Intersect\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromIntersectRight(left, right) {\n return right.allOf.every((schema) => Visit(left, schema) === ExtendsResult.True)\n ? ExtendsResult.True\n : ExtendsResult.False;\n}\n// prettier-ignore\nfunction FromIntersect(left, right) {\n return left.allOf.some((schema) => Visit(schema, right) === ExtendsResult.True)\n ? ExtendsResult.True\n : ExtendsResult.False;\n}\n// ------------------------------------------------------------------\n// Iterator\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromIterator(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n !TypeGuard.IsIterator(right) ? ExtendsResult.False :\n IntoBooleanResult(Visit(left.items, right.items)));\n}\n// ------------------------------------------------------------------\n// Literal\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromLiteral(left, right) {\n return (TypeGuard.IsLiteral(right) && right.const === left.const ? ExtendsResult.True :\n IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsString(right) ? FromStringRight(left, right) :\n TypeGuard.IsNumber(right) ? FromNumberRight(left, right) :\n TypeGuard.IsInteger(right) ? FromIntegerRight(left, right) :\n TypeGuard.IsBoolean(right) ? FromBooleanRight(left, right) :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Never\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromNeverRight(left, right) {\n return ExtendsResult.False;\n}\n// prettier-ignore\nfunction FromNever(left, right) {\n return ExtendsResult.True;\n}\n// ------------------------------------------------------------------\n// Not\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction UnwrapTNot(schema) {\n let [current, depth] = [schema, 0];\n while (true) {\n if (!TypeGuard.IsNot(current))\n break;\n current = current.not;\n depth += 1;\n }\n return depth % 2 === 0 ? current : Unknown();\n}\n// prettier-ignore\nfunction FromNot(left, right) {\n // TypeScript has no concept of negated types, and attempts to correctly check the negated\n // type at runtime would put TypeBox at odds with TypeScripts ability to statically infer\n // the type. Instead we unwrap to either unknown or T and continue evaluating.\n // prettier-ignore\n return (TypeGuard.IsNot(left) ? Visit(UnwrapTNot(left), right) :\n TypeGuard.IsNot(right) ? Visit(left, UnwrapTNot(right)) :\n Throw('Invalid fallthrough for Not'));\n}\n// ------------------------------------------------------------------\n// Null\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromNull(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsNull(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Number\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromNumberRight(left, right) {\n return (TypeGuard.IsLiteralNumber(left) ? ExtendsResult.True :\n TypeGuard.IsNumber(left) || TypeGuard.IsInteger(left) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromNumber(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsInteger(right) || TypeGuard.IsNumber(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Object\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction IsObjectPropertyCount(schema, count) {\n return Object.getOwnPropertyNames(schema.properties).length === count;\n}\n// prettier-ignore\nfunction IsObjectStringLike(schema) {\n return IsObjectArrayLike(schema);\n}\n// prettier-ignore\nfunction IsObjectSymbolLike(schema) {\n return IsObjectPropertyCount(schema, 0) || (IsObjectPropertyCount(schema, 1) && 'description' in schema.properties && TypeGuard.IsUnion(schema.properties.description) && schema.properties.description.anyOf.length === 2 && ((TypeGuard.IsString(schema.properties.description.anyOf[0]) &&\n TypeGuard.IsUndefined(schema.properties.description.anyOf[1])) || (TypeGuard.IsString(schema.properties.description.anyOf[1]) &&\n TypeGuard.IsUndefined(schema.properties.description.anyOf[0]))));\n}\n// prettier-ignore\nfunction IsObjectNumberLike(schema) {\n return IsObjectPropertyCount(schema, 0);\n}\n// prettier-ignore\nfunction IsObjectBooleanLike(schema) {\n return IsObjectPropertyCount(schema, 0);\n}\n// prettier-ignore\nfunction IsObjectBigIntLike(schema) {\n return IsObjectPropertyCount(schema, 0);\n}\n// prettier-ignore\nfunction IsObjectDateLike(schema) {\n return IsObjectPropertyCount(schema, 0);\n}\n// prettier-ignore\nfunction IsObjectUint8ArrayLike(schema) {\n return IsObjectArrayLike(schema);\n}\n// prettier-ignore\nfunction IsObjectFunctionLike(schema) {\n const length = Number();\n return IsObjectPropertyCount(schema, 0) || (IsObjectPropertyCount(schema, 1) && 'length' in schema.properties && IntoBooleanResult(Visit(schema.properties['length'], length)) === ExtendsResult.True);\n}\n// prettier-ignore\nfunction IsObjectConstructorLike(schema) {\n return IsObjectPropertyCount(schema, 0);\n}\n// prettier-ignore\nfunction IsObjectArrayLike(schema) {\n const length = Number();\n return IsObjectPropertyCount(schema, 0) || (IsObjectPropertyCount(schema, 1) && 'length' in schema.properties && IntoBooleanResult(Visit(schema.properties['length'], length)) === ExtendsResult.True);\n}\n// prettier-ignore\nfunction IsObjectPromiseLike(schema) {\n const then = FunctionType([Any()], Any());\n return IsObjectPropertyCount(schema, 0) || (IsObjectPropertyCount(schema, 1) && 'then' in schema.properties && IntoBooleanResult(Visit(schema.properties['then'], then)) === ExtendsResult.True);\n}\n// ------------------------------------------------------------------\n// Property\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction Property(left, right) {\n return (Visit(left, right) === ExtendsResult.False ? ExtendsResult.False :\n TypeGuard.IsOptional(left) && !TypeGuard.IsOptional(right) ? ExtendsResult.False :\n ExtendsResult.True);\n}\n// prettier-ignore\nfunction FromObjectRight(left, right) {\n return (TypeGuard.IsUnknown(left) ? ExtendsResult.False :\n TypeGuard.IsAny(left) ? ExtendsResult.Union : (TypeGuard.IsNever(left) ||\n (TypeGuard.IsLiteralString(left) && IsObjectStringLike(right)) ||\n (TypeGuard.IsLiteralNumber(left) && IsObjectNumberLike(right)) ||\n (TypeGuard.IsLiteralBoolean(left) && IsObjectBooleanLike(right)) ||\n (TypeGuard.IsSymbol(left) && IsObjectSymbolLike(right)) ||\n (TypeGuard.IsBigInt(left) && IsObjectBigIntLike(right)) ||\n (TypeGuard.IsString(left) && IsObjectStringLike(right)) ||\n (TypeGuard.IsSymbol(left) && IsObjectSymbolLike(right)) ||\n (TypeGuard.IsNumber(left) && IsObjectNumberLike(right)) ||\n (TypeGuard.IsInteger(left) && IsObjectNumberLike(right)) ||\n (TypeGuard.IsBoolean(left) && IsObjectBooleanLike(right)) ||\n (TypeGuard.IsUint8Array(left) && IsObjectUint8ArrayLike(right)) ||\n (TypeGuard.IsDate(left) && IsObjectDateLike(right)) ||\n (TypeGuard.IsConstructor(left) && IsObjectConstructorLike(right)) ||\n (TypeGuard.IsFunction(left) && IsObjectFunctionLike(right))) ? ExtendsResult.True :\n (TypeGuard.IsRecord(left) && TypeGuard.IsString(RecordKey(left))) ? (() => {\n // When expressing a Record with literal key values, the Record is converted into a Object with\n // the Hint assigned as `Record`. This is used to invert the extends logic.\n return right[Hint] === 'Record' ? ExtendsResult.True : ExtendsResult.False;\n })() :\n (TypeGuard.IsRecord(left) && TypeGuard.IsNumber(RecordKey(left))) ? (() => {\n return IsObjectPropertyCount(right, 0) ? ExtendsResult.True : ExtendsResult.False;\n })() :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromObject(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n !TypeGuard.IsObject(right) ? ExtendsResult.False :\n (() => {\n for (const key of Object.getOwnPropertyNames(right.properties)) {\n if (!(key in left.properties) && !TypeGuard.IsOptional(right.properties[key])) {\n return ExtendsResult.False;\n }\n if (TypeGuard.IsOptional(right.properties[key])) {\n return ExtendsResult.True;\n }\n if (Property(left.properties[key], right.properties[key]) === ExtendsResult.False) {\n return ExtendsResult.False;\n }\n }\n return ExtendsResult.True;\n })());\n}\n// ------------------------------------------------------------------\n// Promise\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromPromise(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) && IsObjectPromiseLike(right) ? ExtendsResult.True :\n !TypeGuard.IsPromise(right) ? ExtendsResult.False :\n IntoBooleanResult(Visit(left.item, right.item)));\n}\n// ------------------------------------------------------------------\n// Record\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction RecordKey(schema) {\n return (PatternNumberExact in schema.patternProperties ? Number() :\n PatternStringExact in schema.patternProperties ? String() :\n Throw('Unknown record key pattern'));\n}\n// prettier-ignore\nfunction RecordValue(schema) {\n return (PatternNumberExact in schema.patternProperties ? schema.patternProperties[PatternNumberExact] :\n PatternStringExact in schema.patternProperties ? schema.patternProperties[PatternStringExact] :\n Throw('Unable to get record value schema'));\n}\n// prettier-ignore\nfunction FromRecordRight(left, right) {\n const [Key, Value] = [RecordKey(right), RecordValue(right)];\n return ((TypeGuard.IsLiteralString(left) && TypeGuard.IsNumber(Key) && IntoBooleanResult(Visit(left, Value)) === ExtendsResult.True) ? ExtendsResult.True :\n TypeGuard.IsUint8Array(left) && TypeGuard.IsNumber(Key) ? Visit(left, Value) :\n TypeGuard.IsString(left) && TypeGuard.IsNumber(Key) ? Visit(left, Value) :\n TypeGuard.IsArray(left) && TypeGuard.IsNumber(Key) ? Visit(left, Value) :\n TypeGuard.IsObject(left) ? (() => {\n for (const key of Object.getOwnPropertyNames(left.properties)) {\n if (Property(Value, left.properties[key]) === ExtendsResult.False) {\n return ExtendsResult.False;\n }\n }\n return ExtendsResult.True;\n })() :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromRecord(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n !TypeGuard.IsRecord(right) ? ExtendsResult.False :\n Visit(RecordValue(left), RecordValue(right)));\n}\n// ------------------------------------------------------------------\n// RegExp\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromRegExp(left, right) {\n // Note: RegExp types evaluate as strings, not RegExp objects.\n // Here we remap either into string and continue evaluating.\n const L = TypeGuard.IsRegExp(left) ? String() : left;\n const R = TypeGuard.IsRegExp(right) ? String() : right;\n return Visit(L, R);\n}\n// ------------------------------------------------------------------\n// String\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromStringRight(left, right) {\n return (TypeGuard.IsLiteral(left) && ValueGuard.IsString(left.const) ? ExtendsResult.True :\n TypeGuard.IsString(left) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromString(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsString(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Symbol\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromSymbol(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsSymbol(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// TemplateLiteral\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromTemplateLiteral(left, right) {\n // TemplateLiteral types are resolved to either unions for finite expressions or string\n // for infinite expressions. Here we call to TemplateLiteralResolver to resolve for\n // either type and continue evaluating.\n return (TypeGuard.IsTemplateLiteral(left) ? Visit(TemplateLiteralToUnion(left), right) :\n TypeGuard.IsTemplateLiteral(right) ? Visit(left, TemplateLiteralToUnion(right)) :\n Throw('Invalid fallthrough for TemplateLiteral'));\n}\n// ------------------------------------------------------------------\n// Tuple\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction IsArrayOfTuple(left, right) {\n return (TypeGuard.IsArray(right) &&\n left.items !== undefined &&\n left.items.every((schema) => Visit(schema, right.items) === ExtendsResult.True));\n}\n// prettier-ignore\nfunction FromTupleRight(left, right) {\n return (TypeGuard.IsNever(left) ? ExtendsResult.True :\n TypeGuard.IsUnknown(left) ? ExtendsResult.False :\n TypeGuard.IsAny(left) ? ExtendsResult.Union :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromTuple(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) && IsObjectArrayLike(right) ? ExtendsResult.True :\n TypeGuard.IsArray(right) && IsArrayOfTuple(left, right) ? ExtendsResult.True :\n !TypeGuard.IsTuple(right) ? ExtendsResult.False :\n (ValueGuard.IsUndefined(left.items) && !ValueGuard.IsUndefined(right.items)) || (!ValueGuard.IsUndefined(left.items) && ValueGuard.IsUndefined(right.items)) ? ExtendsResult.False :\n (ValueGuard.IsUndefined(left.items) && !ValueGuard.IsUndefined(right.items)) ? ExtendsResult.True :\n left.items.every((schema, index) => Visit(schema, right.items[index]) === ExtendsResult.True) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Uint8Array\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromUint8Array(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsUint8Array(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Undefined\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromUndefined(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsVoid(right) ? FromVoidRight(left, right) :\n TypeGuard.IsUndefined(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Union\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromUnionRight(left, right) {\n return right.anyOf.some((schema) => Visit(left, schema) === ExtendsResult.True)\n ? ExtendsResult.True\n : ExtendsResult.False;\n}\n// prettier-ignore\nfunction FromUnion(left, right) {\n return left.anyOf.every((schema) => Visit(schema, right) === ExtendsResult.True)\n ? ExtendsResult.True\n : ExtendsResult.False;\n}\n// ------------------------------------------------------------------\n// Unknown\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromUnknownRight(left, right) {\n return ExtendsResult.True;\n}\n// prettier-ignore\nfunction FromUnknown(left, right) {\n return (TypeGuard.IsNever(right) ? FromNeverRight(left, right) :\n TypeGuard.IsIntersect(right) ? FromIntersectRight(left, right) :\n TypeGuard.IsUnion(right) ? FromUnionRight(left, right) :\n TypeGuard.IsAny(right) ? FromAnyRight(left, right) :\n TypeGuard.IsString(right) ? FromStringRight(left, right) :\n TypeGuard.IsNumber(right) ? FromNumberRight(left, right) :\n TypeGuard.IsInteger(right) ? FromIntegerRight(left, right) :\n TypeGuard.IsBoolean(right) ? FromBooleanRight(left, right) :\n TypeGuard.IsArray(right) ? FromArrayRight(left, right) :\n TypeGuard.IsTuple(right) ? FromTupleRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsUnknown(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Void\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromVoidRight(left, right) {\n return (TypeGuard.IsUndefined(left) ? ExtendsResult.True :\n TypeGuard.IsUndefined(left) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromVoid(left, right) {\n return (TypeGuard.IsIntersect(right) ? FromIntersectRight(left, right) :\n TypeGuard.IsUnion(right) ? FromUnionRight(left, right) :\n TypeGuard.IsUnknown(right) ? FromUnknownRight(left, right) :\n TypeGuard.IsAny(right) ? FromAnyRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsVoid(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction Visit(left, right) {\n return (\n // resolvable\n (TypeGuard.IsTemplateLiteral(left) || TypeGuard.IsTemplateLiteral(right)) ? FromTemplateLiteral(left, right) :\n (TypeGuard.IsRegExp(left) || TypeGuard.IsRegExp(right)) ? FromRegExp(left, right) :\n (TypeGuard.IsNot(left) || TypeGuard.IsNot(right)) ? FromNot(left, right) :\n // standard\n TypeGuard.IsAny(left) ? FromAny(left, right) :\n TypeGuard.IsArray(left) ? FromArray(left, right) :\n TypeGuard.IsBigInt(left) ? FromBigInt(left, right) :\n TypeGuard.IsBoolean(left) ? FromBoolean(left, right) :\n TypeGuard.IsAsyncIterator(left) ? FromAsyncIterator(left, right) :\n TypeGuard.IsConstructor(left) ? FromConstructor(left, right) :\n TypeGuard.IsDate(left) ? FromDate(left, right) :\n TypeGuard.IsFunction(left) ? FromFunction(left, right) :\n TypeGuard.IsInteger(left) ? FromInteger(left, right) :\n TypeGuard.IsIntersect(left) ? FromIntersect(left, right) :\n TypeGuard.IsIterator(left) ? FromIterator(left, right) :\n TypeGuard.IsLiteral(left) ? FromLiteral(left, right) :\n TypeGuard.IsNever(left) ? FromNever(left, right) :\n TypeGuard.IsNull(left) ? FromNull(left, right) :\n TypeGuard.IsNumber(left) ? FromNumber(left, right) :\n TypeGuard.IsObject(left) ? FromObject(left, right) :\n TypeGuard.IsRecord(left) ? FromRecord(left, right) :\n TypeGuard.IsString(left) ? FromString(left, right) :\n TypeGuard.IsSymbol(left) ? FromSymbol(left, right) :\n TypeGuard.IsTuple(left) ? FromTuple(left, right) :\n TypeGuard.IsPromise(left) ? FromPromise(left, right) :\n TypeGuard.IsUint8Array(left) ? FromUint8Array(left, right) :\n TypeGuard.IsUndefined(left) ? FromUndefined(left, right) :\n TypeGuard.IsUnion(left) ? FromUnion(left, right) :\n TypeGuard.IsUnknown(left) ? FromUnknown(left, right) :\n TypeGuard.IsVoid(left) ? FromVoid(left, right) :\n Throw(`Unknown left type operand '${left[Kind]}'`));\n}\nexport function ExtendsCheck(left, right) {\n return Visit(left, right);\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Extends } from './extends.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction FromProperties(P, Right, True, False, options) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(P))\n Acc[K2] = Extends(P[K2], Right, True, False, Clone(options));\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(Left, Right, True, False, options) {\n return FromProperties(Left.properties, Right, True, False, options);\n}\n// prettier-ignore\nexport function ExtendsFromMappedResult(Left, Right, True, False, options) {\n const P = FromMappedResult(Left, Right, True, False, options);\n return MappedResult(P);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Union } from '../union/index.mjs';\nimport { ExtendsCheck, ExtendsResult } from './extends-check.mjs';\nimport { ExtendsFromMappedKey } from './extends-from-mapped-key.mjs';\nimport { ExtendsFromMappedResult } from './extends-from-mapped-result.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsMappedKey, IsMappedResult } from '../guard/kind.mjs';\n// prettier-ignore\nfunction ExtendsResolve(left, right, trueType, falseType) {\n const R = ExtendsCheck(left, right);\n return (R === ExtendsResult.Union ? Union([trueType, falseType]) :\n R === ExtendsResult.True ? trueType :\n falseType);\n}\n/** `[Json]` Creates a Conditional type */\nexport function Extends(L, R, T, F, options) {\n // prettier-ignore\n return (IsMappedResult(L) ? ExtendsFromMappedResult(L, R, T, F, options) :\n IsMappedKey(L) ? CreateType(ExtendsFromMappedKey(L, R, T, F, options)) :\n CreateType(ExtendsResolve(L, R, T, F), options));\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { Extends } from './extends.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction FromPropertyKey(K, U, L, R, options) {\n return {\n [K]: Extends(Literal(K), U, L, R, Clone(options))\n };\n}\n// prettier-ignore\nfunction FromPropertyKeys(K, U, L, R, options) {\n return K.reduce((Acc, LK) => {\n return { ...Acc, ...FromPropertyKey(LK, U, L, R, options) };\n }, {});\n}\n// prettier-ignore\nfunction FromMappedKey(K, U, L, R, options) {\n return FromPropertyKeys(K.keys, U, L, R, options);\n}\n// prettier-ignore\nexport function ExtendsFromMappedKey(T, U, L, R, options) {\n const P = FromMappedKey(T, U, L, R, options);\n return MappedResult(P);\n}\n","import { Kind } from '../symbols/index.mjs';\n/** Fast undefined check used for properties of type undefined */\nfunction Intersect(schema) {\n return schema.allOf.every((schema) => ExtendsUndefinedCheck(schema));\n}\nfunction Union(schema) {\n return schema.anyOf.some((schema) => ExtendsUndefinedCheck(schema));\n}\nfunction Not(schema) {\n return !ExtendsUndefinedCheck(schema.not);\n}\n/** Fast undefined check used for properties of type undefined */\n// prettier-ignore\nexport function ExtendsUndefinedCheck(schema) {\n return (schema[Kind] === 'Intersect' ? Intersect(schema) :\n schema[Kind] === 'Union' ? Union(schema) :\n schema[Kind] === 'Not' ? Not(schema) :\n schema[Kind] === 'Undefined' ? true :\n false);\n}\n","export * from './extends-check.mjs';\nexport * from './extends-from-mapped-key.mjs';\nexport * from './extends-from-mapped-result.mjs';\nexport * from './extends-undefined.mjs';\nexport * from './extends.mjs';\n","import { Exclude } from './exclude.mjs';\nimport { TemplateLiteralToUnion } from '../template-literal/index.mjs';\nexport function ExcludeFromTemplateLiteral(L, R) {\n return Exclude(TemplateLiteralToUnion(L), R);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Union } from '../union/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport { ExtendsCheck, ExtendsResult } from '../extends/index.mjs';\nimport { ExcludeFromMappedResult } from './exclude-from-mapped-result.mjs';\nimport { ExcludeFromTemplateLiteral } from './exclude-from-template-literal.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsMappedResult, IsTemplateLiteral, IsUnion } from '../guard/kind.mjs';\nfunction ExcludeRest(L, R) {\n const excluded = L.filter((inner) => ExtendsCheck(inner, R) === ExtendsResult.False);\n return excluded.length === 1 ? excluded[0] : Union(excluded);\n}\n/** `[Json]` Constructs a type by excluding from unionType all union members that are assignable to excludedMembers */\nexport function Exclude(L, R, options = {}) {\n // overloads\n if (IsTemplateLiteral(L))\n return CreateType(ExcludeFromTemplateLiteral(L, R), options);\n if (IsMappedResult(L))\n return CreateType(ExcludeFromMappedResult(L, R), options);\n // prettier-ignore\n return CreateType(IsUnion(L) ? ExcludeRest(L.anyOf, R) :\n ExtendsCheck(L, R) !== ExtendsResult.False ? Never() : L, options);\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Exclude } from './exclude.mjs';\n// prettier-ignore\nfunction FromProperties(P, U) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(P))\n Acc[K2] = Exclude(P[K2], U);\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(R, T) {\n return FromProperties(R.properties, T);\n}\n// prettier-ignore\nexport function ExcludeFromMappedResult(R, T) {\n const P = FromMappedResult(R, T);\n return MappedResult(P);\n}\n","export * from './exclude-from-mapped-result.mjs';\nexport * from './exclude-from-template-literal.mjs';\nexport * from './exclude.mjs';\n","import { Extract } from './extract.mjs';\nimport { TemplateLiteralToUnion } from '../template-literal/index.mjs';\nexport function ExtractFromTemplateLiteral(L, R) {\n return Extract(TemplateLiteralToUnion(L), R);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Union } from '../union/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport { ExtendsCheck, ExtendsResult } from '../extends/index.mjs';\nimport { ExtractFromMappedResult } from './extract-from-mapped-result.mjs';\nimport { ExtractFromTemplateLiteral } from './extract-from-template-literal.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsMappedResult, IsTemplateLiteral, IsUnion } from '../guard/kind.mjs';\nfunction ExtractRest(L, R) {\n const extracted = L.filter((inner) => ExtendsCheck(inner, R) !== ExtendsResult.False);\n return extracted.length === 1 ? extracted[0] : Union(extracted);\n}\n/** `[Json]` Constructs a type by extracting from type all union members that are assignable to union */\nexport function Extract(L, R, options) {\n // overloads\n if (IsTemplateLiteral(L))\n return CreateType(ExtractFromTemplateLiteral(L, R), options);\n if (IsMappedResult(L))\n return CreateType(ExtractFromMappedResult(L, R), options);\n // prettier-ignore\n return CreateType(IsUnion(L) ? ExtractRest(L.anyOf, R) :\n ExtendsCheck(L, R) !== ExtendsResult.False ? L : Never(), options);\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Extract } from './extract.mjs';\n// prettier-ignore\nfunction FromProperties(P, T) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(P))\n Acc[K2] = Extract(P[K2], T);\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(R, T) {\n return FromProperties(R.properties, T);\n}\n// prettier-ignore\nexport function ExtractFromMappedResult(R, T) {\n const P = FromMappedResult(R, T);\n return MappedResult(P);\n}\n","export * from './extract-from-mapped-result.mjs';\nexport * from './extract-from-template-literal.mjs';\nexport * from './extract.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Never } from '../never/index.mjs';\nimport * as KindGuard from '../guard/kind.mjs';\n/** `[JavaScript]` Extracts the InstanceType from the given Constructor type */\nexport function InstanceType(schema, options) {\n return (KindGuard.IsConstructor(schema) ? CreateType(schema.returns, options) : Never(options));\n}\n","export * from './instance-type.mjs';\n","import { Readonly } from '../readonly/index.mjs';\nimport { Optional } from '../optional/index.mjs';\n/** `[Json]` Creates a Readonly and Optional property */\nexport function ReadonlyOptional(schema) {\n return Readonly(Optional(schema));\n}\n","export * from './readonly-optional.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Kind, Hint } from '../symbols/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport { Number } from '../number/index.mjs';\nimport { Object } from '../object/index.mjs';\nimport { String } from '../string/index.mjs';\nimport { Union } from '../union/index.mjs';\nimport { IsTemplateLiteralFinite } from '../template-literal/index.mjs';\nimport { PatternStringExact, PatternNumberExact, PatternNeverExact } from '../patterns/index.mjs';\nimport { IndexPropertyKeys } from '../indexed/index.mjs';\n// ------------------------------------------------------------------\n// ValueGuard\n// ------------------------------------------------------------------\nimport { IsUndefined } from '../guard/value.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsInteger, IsLiteral, IsAny, IsBoolean, IsNever, IsNumber, IsString, IsRegExp, IsTemplateLiteral, IsUnion } from '../guard/kind.mjs';\n// ------------------------------------------------------------------\n// RecordCreateFromPattern\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction RecordCreateFromPattern(pattern, T, options) {\n return CreateType({ [Kind]: 'Record', type: 'object', patternProperties: { [pattern]: T } }, options);\n}\n// ------------------------------------------------------------------\n// RecordCreateFromKeys\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction RecordCreateFromKeys(K, T, options) {\n const result = {};\n for (const K2 of K)\n result[K2] = T;\n return Object(result, { ...options, [Hint]: 'Record' });\n}\n// prettier-ignore\nfunction FromTemplateLiteralKey(K, T, options) {\n return (IsTemplateLiteralFinite(K)\n ? RecordCreateFromKeys(IndexPropertyKeys(K), T, options)\n : RecordCreateFromPattern(K.pattern, T, options));\n}\n// prettier-ignore\nfunction FromUnionKey(key, type, options) {\n return RecordCreateFromKeys(IndexPropertyKeys(Union(key)), type, options);\n}\n// prettier-ignore\nfunction FromLiteralKey(key, type, options) {\n return RecordCreateFromKeys([key.toString()], type, options);\n}\n// prettier-ignore\nfunction FromRegExpKey(key, type, options) {\n return RecordCreateFromPattern(key.source, type, options);\n}\n// prettier-ignore\nfunction FromStringKey(key, type, options) {\n const pattern = IsUndefined(key.pattern) ? PatternStringExact : key.pattern;\n return RecordCreateFromPattern(pattern, type, options);\n}\n// prettier-ignore\nfunction FromAnyKey(_, type, options) {\n return RecordCreateFromPattern(PatternStringExact, type, options);\n}\n// prettier-ignore\nfunction FromNeverKey(_key, type, options) {\n return RecordCreateFromPattern(PatternNeverExact, type, options);\n}\n// prettier-ignore\nfunction FromBooleanKey(_key, type, options) {\n return Object({ true: type, false: type }, options);\n}\n// prettier-ignore\nfunction FromIntegerKey(_key, type, options) {\n return RecordCreateFromPattern(PatternNumberExact, type, options);\n}\n// prettier-ignore\nfunction FromNumberKey(_, type, options) {\n return RecordCreateFromPattern(PatternNumberExact, type, options);\n}\n// ------------------------------------------------------------------\n// TRecordOrObject\n// ------------------------------------------------------------------\n/** `[Json]` Creates a Record type */\nexport function Record(key, type, options = {}) {\n // prettier-ignore\n return (IsUnion(key) ? FromUnionKey(key.anyOf, type, options) :\n IsTemplateLiteral(key) ? FromTemplateLiteralKey(key, type, options) :\n IsLiteral(key) ? FromLiteralKey(key.const, type, options) :\n IsBoolean(key) ? FromBooleanKey(key, type, options) :\n IsInteger(key) ? FromIntegerKey(key, type, options) :\n IsNumber(key) ? FromNumberKey(key, type, options) :\n IsRegExp(key) ? FromRegExpKey(key, type, options) :\n IsString(key) ? FromStringKey(key, type, options) :\n IsAny(key) ? FromAnyKey(key, type, options) :\n IsNever(key) ? FromNeverKey(key, type, options) :\n Never(options));\n}\n// ------------------------------------------------------------------\n// Record Utilities\n// ------------------------------------------------------------------\n/** Gets the Records Pattern */\nexport function RecordPattern(record) {\n return globalThis.Object.getOwnPropertyNames(record.patternProperties)[0];\n}\n/** Gets the Records Key Type */\n// prettier-ignore\nexport function RecordKey(type) {\n const pattern = RecordPattern(type);\n return (pattern === PatternStringExact ? String() :\n pattern === PatternNumberExact ? Number() :\n String({ pattern }));\n}\n/** Gets a Record Value Type */\n// prettier-ignore\nexport function RecordValue(type) {\n return type.patternProperties[RecordPattern(type)];\n}\n","export * from './record.mjs';\n","import { CloneType } from '../clone/type.mjs';\nimport { Unknown } from '../unknown/index.mjs';\nimport { ReadonlyOptional } from '../readonly-optional/index.mjs';\nimport { Readonly } from '../readonly/index.mjs';\nimport { Optional } from '../optional/index.mjs';\nimport { Object } from '../object/index.mjs';\nimport { Record, RecordKey, RecordValue } from '../record/index.mjs';\nimport * as ValueGuard from '../guard/value.mjs';\nimport * as KindGuard from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromConstructor(args, type) {\n type.parameters = FromTypes(args, type.parameters);\n type.returns = FromType(args, type.returns);\n return type;\n}\n// prettier-ignore\nfunction FromFunction(args, type) {\n type.parameters = FromTypes(args, type.parameters);\n type.returns = FromType(args, type.returns);\n return type;\n}\n// prettier-ignore\nfunction FromIntersect(args, type) {\n type.allOf = FromTypes(args, type.allOf);\n return type;\n}\n// prettier-ignore\nfunction FromUnion(args, type) {\n type.anyOf = FromTypes(args, type.anyOf);\n return type;\n}\n// prettier-ignore\nfunction FromTuple(args, type) {\n if (ValueGuard.IsUndefined(type.items))\n return type;\n type.items = FromTypes(args, type.items);\n return type;\n}\n// prettier-ignore\nfunction FromArray(args, type) {\n type.items = FromType(args, type.items);\n return type;\n}\n// prettier-ignore\nfunction FromAsyncIterator(args, type) {\n type.items = FromType(args, type.items);\n return type;\n}\n// prettier-ignore\nfunction FromIterator(args, type) {\n type.items = FromType(args, type.items);\n return type;\n}\n// prettier-ignore\nfunction FromPromise(args, type) {\n type.item = FromType(args, type.item);\n return type;\n}\n// prettier-ignore\nfunction FromObject(args, type) {\n const mappedProperties = FromProperties(args, type.properties);\n return { ...type, ...Object(mappedProperties) }; // retain options\n}\n// prettier-ignore\nfunction FromRecord(args, type) {\n const mappedKey = FromType(args, RecordKey(type));\n const mappedValue = FromType(args, RecordValue(type));\n const result = Record(mappedKey, mappedValue);\n return { ...type, ...result }; // retain options\n}\n// prettier-ignore\nfunction FromArgument(args, argument) {\n return argument.index in args ? args[argument.index] : Unknown();\n}\n// prettier-ignore\nfunction FromProperty(args, type) {\n const isReadonly = KindGuard.IsReadonly(type);\n const isOptional = KindGuard.IsOptional(type);\n const mapped = FromType(args, type);\n return (isReadonly && isOptional ? ReadonlyOptional(mapped) :\n isReadonly && !isOptional ? Readonly(mapped) :\n !isReadonly && isOptional ? Optional(mapped) :\n mapped);\n}\n// prettier-ignore\nfunction FromProperties(args, properties) {\n return globalThis.Object.getOwnPropertyNames(properties).reduce((result, key) => {\n return { ...result, [key]: FromProperty(args, properties[key]) };\n }, {});\n}\n// prettier-ignore\nexport function FromTypes(args, types) {\n return types.map(type => FromType(args, type));\n}\n// prettier-ignore\nfunction FromType(args, type) {\n return (KindGuard.IsConstructor(type) ? FromConstructor(args, type) :\n KindGuard.IsFunction(type) ? FromFunction(args, type) :\n KindGuard.IsIntersect(type) ? FromIntersect(args, type) :\n KindGuard.IsUnion(type) ? FromUnion(args, type) :\n KindGuard.IsTuple(type) ? FromTuple(args, type) :\n KindGuard.IsArray(type) ? FromArray(args, type) :\n KindGuard.IsAsyncIterator(type) ? FromAsyncIterator(args, type) :\n KindGuard.IsIterator(type) ? FromIterator(args, type) :\n KindGuard.IsPromise(type) ? FromPromise(args, type) :\n KindGuard.IsObject(type) ? FromObject(args, type) :\n KindGuard.IsRecord(type) ? FromRecord(args, type) :\n KindGuard.IsArgument(type) ? FromArgument(args, type) :\n type);\n}\n/** `[JavaScript]` Instantiates a type with the given parameters */\n// prettier-ignore\nexport function Instantiate(type, args) {\n return FromType(args, CloneType(type));\n}\n","export * from './instantiate.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates an Integer type */\nexport function Integer(options) {\n return CreateType({ [Kind]: 'Integer', type: 'integer' }, options);\n}\n","export * from './integer.mjs';\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Intrinsic } from './intrinsic.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction MappedIntrinsicPropertyKey(K, M, options) {\n return {\n [K]: Intrinsic(Literal(K), M, Clone(options))\n };\n}\n// prettier-ignore\nfunction MappedIntrinsicPropertyKeys(K, M, options) {\n const result = K.reduce((Acc, L) => {\n return { ...Acc, ...MappedIntrinsicPropertyKey(L, M, options) };\n }, {});\n return result;\n}\n// prettier-ignore\nfunction MappedIntrinsicProperties(T, M, options) {\n return MappedIntrinsicPropertyKeys(T['keys'], M, options);\n}\n// prettier-ignore\nexport function IntrinsicFromMappedKey(T, M, options) {\n const P = MappedIntrinsicProperties(T, M, options);\n return MappedResult(P);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { TemplateLiteral, TemplateLiteralParseExact, IsTemplateLiteralExpressionFinite, TemplateLiteralExpressionGenerate } from '../template-literal/index.mjs';\nimport { IntrinsicFromMappedKey } from './intrinsic-from-mapped-key.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { Union } from '../union/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsMappedKey, IsTemplateLiteral, IsUnion, IsLiteral } from '../guard/kind.mjs';\n// ------------------------------------------------------------------\n// Apply\n// ------------------------------------------------------------------\nfunction ApplyUncapitalize(value) {\n const [first, rest] = [value.slice(0, 1), value.slice(1)];\n return [first.toLowerCase(), rest].join('');\n}\nfunction ApplyCapitalize(value) {\n const [first, rest] = [value.slice(0, 1), value.slice(1)];\n return [first.toUpperCase(), rest].join('');\n}\nfunction ApplyUppercase(value) {\n return value.toUpperCase();\n}\nfunction ApplyLowercase(value) {\n return value.toLowerCase();\n}\nfunction FromTemplateLiteral(schema, mode, options) {\n // note: template literals require special runtime handling as they are encoded in string patterns.\n // This diverges from the mapped type which would otherwise map on the template literal kind.\n const expression = TemplateLiteralParseExact(schema.pattern);\n const finite = IsTemplateLiteralExpressionFinite(expression);\n if (!finite)\n return { ...schema, pattern: FromLiteralValue(schema.pattern, mode) };\n const strings = [...TemplateLiteralExpressionGenerate(expression)];\n const literals = strings.map((value) => Literal(value));\n const mapped = FromRest(literals, mode);\n const union = Union(mapped);\n return TemplateLiteral([union], options);\n}\n// prettier-ignore\nfunction FromLiteralValue(value, mode) {\n return (typeof value === 'string' ? (mode === 'Uncapitalize' ? ApplyUncapitalize(value) :\n mode === 'Capitalize' ? ApplyCapitalize(value) :\n mode === 'Uppercase' ? ApplyUppercase(value) :\n mode === 'Lowercase' ? ApplyLowercase(value) :\n value) : value.toString());\n}\n// prettier-ignore\nfunction FromRest(T, M) {\n return T.map(L => Intrinsic(L, M));\n}\n/** Applies an intrinsic string manipulation to the given type. */\nexport function Intrinsic(schema, mode, options = {}) {\n // prettier-ignore\n return (\n // Intrinsic-Mapped-Inference\n IsMappedKey(schema) ? IntrinsicFromMappedKey(schema, mode, options) :\n // Standard-Inference\n IsTemplateLiteral(schema) ? FromTemplateLiteral(schema, mode, options) :\n IsUnion(schema) ? Union(FromRest(schema.anyOf, mode), options) :\n IsLiteral(schema) ? Literal(FromLiteralValue(schema.const, mode), options) :\n // Default Type\n CreateType(schema, options));\n}\n","import { Intrinsic } from './intrinsic.mjs';\n/** `[Json]` Intrinsic function to Capitalize LiteralString types */\nexport function Capitalize(T, options = {}) {\n return Intrinsic(T, 'Capitalize', options);\n}\n","import { Intrinsic } from './intrinsic.mjs';\n/** `[Json]` Intrinsic function to Lowercase LiteralString types */\nexport function Lowercase(T, options = {}) {\n return Intrinsic(T, 'Lowercase', options);\n}\n","import { Intrinsic } from './intrinsic.mjs';\n/** `[Json]` Intrinsic function to Uncapitalize LiteralString types */\nexport function Uncapitalize(T, options = {}) {\n return Intrinsic(T, 'Uncapitalize', options);\n}\n","import { Intrinsic } from './intrinsic.mjs';\n/** `[Json]` Intrinsic function to Uppercase LiteralString types */\nexport function Uppercase(T, options = {}) {\n return Intrinsic(T, 'Uppercase', options);\n}\n","export * from './capitalize.mjs';\nexport * from './intrinsic-from-mapped-key.mjs';\nexport * from './intrinsic.mjs';\nexport * from './lowercase.mjs';\nexport * from './uncapitalize.mjs';\nexport * from './uppercase.mjs';\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Omit } from './omit.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction FromProperties(properties, propertyKeys, options) {\n const result = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(properties))\n result[K2] = Omit(properties[K2], propertyKeys, Clone(options));\n return result;\n}\n// prettier-ignore\nfunction FromMappedResult(mappedResult, propertyKeys, options) {\n return FromProperties(mappedResult.properties, propertyKeys, options);\n}\n// prettier-ignore\nexport function OmitFromMappedResult(mappedResult, propertyKeys, options) {\n const properties = FromMappedResult(mappedResult, propertyKeys, options);\n return MappedResult(properties);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Discard } from '../discard/discard.mjs';\nimport { TransformKind } from '../symbols/symbols.mjs';\nimport { Computed } from '../computed/index.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { IndexPropertyKeys } from '../indexed/index.mjs';\nimport { Intersect } from '../intersect/index.mjs';\nimport { Union } from '../union/index.mjs';\nimport { Object } from '../object/index.mjs';\n// ------------------------------------------------------------------\n// Mapped\n// ------------------------------------------------------------------\nimport { OmitFromMappedKey } from './omit-from-mapped-key.mjs';\nimport { OmitFromMappedResult } from './omit-from-mapped-result.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsMappedKey, IsIntersect, IsUnion, IsObject, IsSchema, IsMappedResult, IsLiteralValue, IsRef } from '../guard/kind.mjs';\nimport { IsArray as IsArrayValue } from '../guard/value.mjs';\n// prettier-ignore\nfunction FromIntersect(types, propertyKeys) {\n return types.map((type) => OmitResolve(type, propertyKeys));\n}\n// prettier-ignore\nfunction FromUnion(types, propertyKeys) {\n return types.map((type) => OmitResolve(type, propertyKeys));\n}\n// ------------------------------------------------------------------\n// FromProperty\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromProperty(properties, key) {\n const { [key]: _, ...R } = properties;\n return R;\n}\n// prettier-ignore\nfunction FromProperties(properties, propertyKeys) {\n return propertyKeys.reduce((T, K2) => FromProperty(T, K2), properties);\n}\n// prettier-ignore\nfunction FromObject(properties, propertyKeys) {\n const options = Discard(properties, [TransformKind, '$id', 'required', 'properties']);\n const omittedProperties = FromProperties(properties['properties'], propertyKeys);\n return Object(omittedProperties, options);\n}\n// prettier-ignore\nfunction UnionFromPropertyKeys(propertyKeys) {\n const result = propertyKeys.reduce((result, key) => IsLiteralValue(key) ? [...result, Literal(key)] : result, []);\n return Union(result);\n}\n// prettier-ignore\nfunction OmitResolve(properties, propertyKeys) {\n return (IsIntersect(properties) ? Intersect(FromIntersect(properties.allOf, propertyKeys)) :\n IsUnion(properties) ? Union(FromUnion(properties.anyOf, propertyKeys)) :\n IsObject(properties) ? FromObject(properties, propertyKeys) :\n Object({}));\n}\n/** `[Json]` Constructs a type whose keys are picked from the given type */\n// prettier-ignore\nexport function Omit(type, key, options) {\n const typeKey = IsArrayValue(key) ? UnionFromPropertyKeys(key) : key;\n const propertyKeys = IsSchema(key) ? IndexPropertyKeys(key) : key;\n const isTypeRef = IsRef(type);\n const isKeyRef = IsRef(key);\n return (IsMappedResult(type) ? OmitFromMappedResult(type, propertyKeys, options) :\n IsMappedKey(key) ? OmitFromMappedKey(type, key, options) :\n (isTypeRef && isKeyRef) ? Computed('Omit', [type, typeKey], options) :\n (!isTypeRef && isKeyRef) ? Computed('Omit', [type, typeKey], options) :\n (isTypeRef && !isKeyRef) ? Computed('Omit', [type, typeKey], options) :\n CreateType({ ...OmitResolve(type, propertyKeys), ...options }));\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Omit } from './omit.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction FromPropertyKey(type, key, options) {\n return { [key]: Omit(type, [key], Clone(options)) };\n}\n// prettier-ignore\nfunction FromPropertyKeys(type, propertyKeys, options) {\n return propertyKeys.reduce((Acc, LK) => {\n return { ...Acc, ...FromPropertyKey(type, LK, options) };\n }, {});\n}\n// prettier-ignore\nfunction FromMappedKey(type, mappedKey, options) {\n return FromPropertyKeys(type, mappedKey.keys, options);\n}\n// prettier-ignore\nexport function OmitFromMappedKey(type, mappedKey, options) {\n const properties = FromMappedKey(type, mappedKey, options);\n return MappedResult(properties);\n}\n","export * from './omit-from-mapped-key.mjs';\nexport * from './omit-from-mapped-result.mjs';\nexport * from './omit.mjs';\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Pick } from './pick.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction FromProperties(properties, propertyKeys, options) {\n const result = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(properties))\n result[K2] = Pick(properties[K2], propertyKeys, Clone(options));\n return result;\n}\n// prettier-ignore\nfunction FromMappedResult(mappedResult, propertyKeys, options) {\n return FromProperties(mappedResult.properties, propertyKeys, options);\n}\n// prettier-ignore\nexport function PickFromMappedResult(mappedResult, propertyKeys, options) {\n const properties = FromMappedResult(mappedResult, propertyKeys, options);\n return MappedResult(properties);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Discard } from '../discard/discard.mjs';\nimport { Computed } from '../computed/index.mjs';\nimport { Intersect } from '../intersect/index.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { Object } from '../object/index.mjs';\nimport { Union } from '../union/index.mjs';\nimport { IndexPropertyKeys } from '../indexed/index.mjs';\nimport { TransformKind } from '../symbols/symbols.mjs';\n// ------------------------------------------------------------------\n// Guards\n// ------------------------------------------------------------------\nimport { IsMappedKey, IsMappedResult, IsIntersect, IsUnion, IsObject, IsSchema, IsLiteralValue, IsRef } from '../guard/kind.mjs';\nimport { IsArray as IsArrayValue } from '../guard/value.mjs';\n// ------------------------------------------------------------------\n// Infrastructure\n// ------------------------------------------------------------------\nimport { PickFromMappedKey } from './pick-from-mapped-key.mjs';\nimport { PickFromMappedResult } from './pick-from-mapped-result.mjs';\nfunction FromIntersect(types, propertyKeys) {\n return types.map((type) => PickResolve(type, propertyKeys));\n}\n// prettier-ignore\nfunction FromUnion(types, propertyKeys) {\n return types.map((type) => PickResolve(type, propertyKeys));\n}\n// prettier-ignore\nfunction FromProperties(properties, propertyKeys) {\n const result = {};\n for (const K2 of propertyKeys)\n if (K2 in properties)\n result[K2] = properties[K2];\n return result;\n}\n// prettier-ignore\nfunction FromObject(T, K) {\n const options = Discard(T, [TransformKind, '$id', 'required', 'properties']);\n const properties = FromProperties(T['properties'], K);\n return Object(properties, options);\n}\n// prettier-ignore\nfunction UnionFromPropertyKeys(propertyKeys) {\n const result = propertyKeys.reduce((result, key) => IsLiteralValue(key) ? [...result, Literal(key)] : result, []);\n return Union(result);\n}\n// prettier-ignore\nfunction PickResolve(properties, propertyKeys) {\n return (IsIntersect(properties) ? Intersect(FromIntersect(properties.allOf, propertyKeys)) :\n IsUnion(properties) ? Union(FromUnion(properties.anyOf, propertyKeys)) :\n IsObject(properties) ? FromObject(properties, propertyKeys) :\n Object({}));\n}\n/** `[Json]` Constructs a type whose keys are picked from the given type */\n// prettier-ignore\nexport function Pick(type, key, options) {\n const typeKey = IsArrayValue(key) ? UnionFromPropertyKeys(key) : key;\n const propertyKeys = IsSchema(key) ? IndexPropertyKeys(key) : key;\n const isTypeRef = IsRef(type);\n const isKeyRef = IsRef(key);\n return (IsMappedResult(type) ? PickFromMappedResult(type, propertyKeys, options) :\n IsMappedKey(key) ? PickFromMappedKey(type, key, options) :\n (isTypeRef && isKeyRef) ? Computed('Pick', [type, typeKey], options) :\n (!isTypeRef && isKeyRef) ? Computed('Pick', [type, typeKey], options) :\n (isTypeRef && !isKeyRef) ? Computed('Pick', [type, typeKey], options) :\n CreateType({ ...PickResolve(type, propertyKeys), ...options }));\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Pick } from './pick.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction FromPropertyKey(type, key, options) {\n return {\n [key]: Pick(type, [key], Clone(options))\n };\n}\n// prettier-ignore\nfunction FromPropertyKeys(type, propertyKeys, options) {\n return propertyKeys.reduce((result, leftKey) => {\n return { ...result, ...FromPropertyKey(type, leftKey, options) };\n }, {});\n}\n// prettier-ignore\nfunction FromMappedKey(type, mappedKey, options) {\n return FromPropertyKeys(type, mappedKey.keys, options);\n}\n// prettier-ignore\nexport function PickFromMappedKey(type, mappedKey, options) {\n const properties = FromMappedKey(type, mappedKey, options);\n return MappedResult(properties);\n}\n","export * from './pick-from-mapped-key.mjs';\nexport * from './pick-from-mapped-result.mjs';\nexport * from './pick.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Computed } from '../computed/index.mjs';\nimport { Optional } from '../optional/index.mjs';\nimport { Object } from '../object/index.mjs';\nimport { Intersect } from '../intersect/index.mjs';\nimport { Union } from '../union/index.mjs';\nimport { Ref } from '../ref/index.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { TransformKind } from '../symbols/index.mjs';\nimport { PartialFromMappedResult } from './partial-from-mapped-result.mjs';\n// ------------------------------------------------------------------\n// KindGuard\n// ------------------------------------------------------------------\nimport * as KindGuard from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromComputed(target, parameters) {\n return Computed('Partial', [Computed(target, parameters)]);\n}\n// prettier-ignore\nfunction FromRef($ref) {\n return Computed('Partial', [Ref($ref)]);\n}\n// prettier-ignore\nfunction FromProperties(properties) {\n const partialProperties = {};\n for (const K of globalThis.Object.getOwnPropertyNames(properties))\n partialProperties[K] = Optional(properties[K]);\n return partialProperties;\n}\n// prettier-ignore\nfunction FromObject(type) {\n const options = Discard(type, [TransformKind, '$id', 'required', 'properties']);\n const properties = FromProperties(type['properties']);\n return Object(properties, options);\n}\n// prettier-ignore\nfunction FromRest(types) {\n return types.map(type => PartialResolve(type));\n}\n// ------------------------------------------------------------------\n// PartialResolve\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction PartialResolve(type) {\n return (\n // Mappable\n KindGuard.IsComputed(type) ? FromComputed(type.target, type.parameters) :\n KindGuard.IsRef(type) ? FromRef(type.$ref) :\n KindGuard.IsIntersect(type) ? Intersect(FromRest(type.allOf)) :\n KindGuard.IsUnion(type) ? Union(FromRest(type.anyOf)) :\n KindGuard.IsObject(type) ? FromObject(type) :\n // Intrinsic\n KindGuard.IsBigInt(type) ? type :\n KindGuard.IsBoolean(type) ? type :\n KindGuard.IsInteger(type) ? type :\n KindGuard.IsLiteral(type) ? type :\n KindGuard.IsNull(type) ? type :\n KindGuard.IsNumber(type) ? type :\n KindGuard.IsString(type) ? type :\n KindGuard.IsSymbol(type) ? type :\n KindGuard.IsUndefined(type) ? type :\n // Passthrough\n Object({}));\n}\n/** `[Json]` Constructs a type where all properties are optional */\nexport function Partial(type, options) {\n if (KindGuard.IsMappedResult(type)) {\n return PartialFromMappedResult(type, options);\n }\n else {\n // special: mapping types require overridable options\n return CreateType({ ...PartialResolve(type), ...options });\n }\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Partial } from './partial.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction FromProperties(K, options) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(K))\n Acc[K2] = Partial(K[K2], Clone(options));\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(R, options) {\n return FromProperties(R.properties, options);\n}\n// prettier-ignore\nexport function PartialFromMappedResult(R, options) {\n const P = FromMappedResult(R, options);\n return MappedResult(P);\n}\n","export * from './partial-from-mapped-result.mjs';\nexport * from './partial.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Computed } from '../computed/index.mjs';\nimport { Object } from '../object/index.mjs';\nimport { Intersect } from '../intersect/index.mjs';\nimport { Union } from '../union/index.mjs';\nimport { Ref } from '../ref/index.mjs';\nimport { OptionalKind, TransformKind } from '../symbols/index.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { RequiredFromMappedResult } from './required-from-mapped-result.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport * as KindGuard from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromComputed(target, parameters) {\n return Computed('Required', [Computed(target, parameters)]);\n}\n// prettier-ignore\nfunction FromRef($ref) {\n return Computed('Required', [Ref($ref)]);\n}\n// prettier-ignore\nfunction FromProperties(properties) {\n const requiredProperties = {};\n for (const K of globalThis.Object.getOwnPropertyNames(properties))\n requiredProperties[K] = Discard(properties[K], [OptionalKind]);\n return requiredProperties;\n}\n// prettier-ignore\nfunction FromObject(type) {\n const options = Discard(type, [TransformKind, '$id', 'required', 'properties']);\n const properties = FromProperties(type['properties']);\n return Object(properties, options);\n}\n// prettier-ignore\nfunction FromRest(types) {\n return types.map(type => RequiredResolve(type));\n}\n// ------------------------------------------------------------------\n// RequiredResolve\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction RequiredResolve(type) {\n return (\n // Mappable\n KindGuard.IsComputed(type) ? FromComputed(type.target, type.parameters) :\n KindGuard.IsRef(type) ? FromRef(type.$ref) :\n KindGuard.IsIntersect(type) ? Intersect(FromRest(type.allOf)) :\n KindGuard.IsUnion(type) ? Union(FromRest(type.anyOf)) :\n KindGuard.IsObject(type) ? FromObject(type) :\n // Intrinsic\n KindGuard.IsBigInt(type) ? type :\n KindGuard.IsBoolean(type) ? type :\n KindGuard.IsInteger(type) ? type :\n KindGuard.IsLiteral(type) ? type :\n KindGuard.IsNull(type) ? type :\n KindGuard.IsNumber(type) ? type :\n KindGuard.IsString(type) ? type :\n KindGuard.IsSymbol(type) ? type :\n KindGuard.IsUndefined(type) ? type :\n // Passthrough\n Object({}));\n}\n/** `[Json]` Constructs a type where all properties are required */\nexport function Required(type, options) {\n if (KindGuard.IsMappedResult(type)) {\n return RequiredFromMappedResult(type, options);\n }\n else {\n // special: mapping types require overridable options\n return CreateType({ ...RequiredResolve(type), ...options });\n }\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Required } from './required.mjs';\n// prettier-ignore\nfunction FromProperties(P, options) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(P))\n Acc[K2] = Required(P[K2], options);\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(R, options) {\n return FromProperties(R.properties, options);\n}\n// prettier-ignore\nexport function RequiredFromMappedResult(R, options) {\n const P = FromMappedResult(R, options);\n return MappedResult(P);\n}\n","export * from './required-from-mapped-result.mjs';\nexport * from './required.mjs';\n","import { CreateType } from '../create/index.mjs';\nimport { CloneType } from '../clone/index.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { Array } from '../array/index.mjs';\nimport { Awaited } from '../awaited/index.mjs';\nimport { AsyncIterator } from '../async-iterator/index.mjs';\nimport { Constructor } from '../constructor/index.mjs';\nimport { Index } from '../indexed/index.mjs';\nimport { Function as FunctionType } from '../function/index.mjs';\nimport { Intersect } from '../intersect/index.mjs';\nimport { Iterator } from '../iterator/index.mjs';\nimport { KeyOf } from '../keyof/index.mjs';\nimport { Object } from '../object/index.mjs';\nimport { Omit } from '../omit/index.mjs';\nimport { Pick } from '../pick/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport { Partial } from '../partial/index.mjs';\nimport { RecordValue, RecordPattern } from '../record/index.mjs';\nimport { Required } from '../required/index.mjs';\nimport { Tuple } from '../tuple/index.mjs';\nimport { Union } from '../union/index.mjs';\n// ------------------------------------------------------------------\n// Symbols\n// ------------------------------------------------------------------\nimport { TransformKind, OptionalKind, ReadonlyKind } from '../symbols/index.mjs';\n// ------------------------------------------------------------------\n// KindGuard\n// ------------------------------------------------------------------\nimport * as KindGuard from '../guard/kind.mjs';\n// prettier-ignore\nfunction DereferenceParameters(moduleProperties, types) {\n return types.map((type) => {\n return KindGuard.IsRef(type)\n ? Dereference(moduleProperties, type.$ref)\n : FromType(moduleProperties, type);\n });\n}\n// prettier-ignore\nfunction Dereference(moduleProperties, ref) {\n return (ref in moduleProperties\n ? KindGuard.IsRef(moduleProperties[ref])\n ? Dereference(moduleProperties, moduleProperties[ref].$ref)\n : FromType(moduleProperties, moduleProperties[ref])\n : Never());\n}\n// prettier-ignore\nfunction FromAwaited(parameters) {\n return Awaited(parameters[0]);\n}\n// prettier-ignore\nfunction FromIndex(parameters) {\n return Index(parameters[0], parameters[1]);\n}\n// prettier-ignore\nfunction FromKeyOf(parameters) {\n return KeyOf(parameters[0]);\n}\n// prettier-ignore\nfunction FromPartial(parameters) {\n return Partial(parameters[0]);\n}\n// prettier-ignore\nfunction FromOmit(parameters) {\n return Omit(parameters[0], parameters[1]);\n}\n// prettier-ignore\nfunction FromPick(parameters) {\n return Pick(parameters[0], parameters[1]);\n}\n// prettier-ignore\nfunction FromRequired(parameters) {\n return Required(parameters[0]);\n}\n// prettier-ignore\nfunction FromComputed(moduleProperties, target, parameters) {\n const dereferenced = DereferenceParameters(moduleProperties, parameters);\n return (target === 'Awaited' ? FromAwaited(dereferenced) :\n target === 'Index' ? FromIndex(dereferenced) :\n target === 'KeyOf' ? FromKeyOf(dereferenced) :\n target === 'Partial' ? FromPartial(dereferenced) :\n target === 'Omit' ? FromOmit(dereferenced) :\n target === 'Pick' ? FromPick(dereferenced) :\n target === 'Required' ? FromRequired(dereferenced) :\n Never());\n}\nfunction FromArray(moduleProperties, type) {\n return Array(FromType(moduleProperties, type));\n}\nfunction FromAsyncIterator(moduleProperties, type) {\n return AsyncIterator(FromType(moduleProperties, type));\n}\n// prettier-ignore\nfunction FromConstructor(moduleProperties, parameters, instanceType) {\n return Constructor(FromTypes(moduleProperties, parameters), FromType(moduleProperties, instanceType));\n}\n// prettier-ignore\nfunction FromFunction(moduleProperties, parameters, returnType) {\n return FunctionType(FromTypes(moduleProperties, parameters), FromType(moduleProperties, returnType));\n}\nfunction FromIntersect(moduleProperties, types) {\n return Intersect(FromTypes(moduleProperties, types));\n}\nfunction FromIterator(moduleProperties, type) {\n return Iterator(FromType(moduleProperties, type));\n}\nfunction FromObject(moduleProperties, properties) {\n return Object(globalThis.Object.keys(properties).reduce((result, key) => {\n return { ...result, [key]: FromType(moduleProperties, properties[key]) };\n }, {}));\n}\n// prettier-ignore\nfunction FromRecord(moduleProperties, type) {\n const [value, pattern] = [FromType(moduleProperties, RecordValue(type)), RecordPattern(type)];\n const result = CloneType(type);\n result.patternProperties[pattern] = value;\n return result;\n}\n// prettier-ignore\nfunction FromTransform(moduleProperties, transform) {\n return (KindGuard.IsRef(transform))\n ? { ...Dereference(moduleProperties, transform.$ref), [TransformKind]: transform[TransformKind] }\n : transform;\n}\nfunction FromTuple(moduleProperties, types) {\n return Tuple(FromTypes(moduleProperties, types));\n}\nfunction FromUnion(moduleProperties, types) {\n return Union(FromTypes(moduleProperties, types));\n}\nfunction FromTypes(moduleProperties, types) {\n return types.map((type) => FromType(moduleProperties, type));\n}\n// prettier-ignore\nexport function FromType(moduleProperties, type) {\n return (\n // Modifiers\n KindGuard.IsOptional(type) ? CreateType(FromType(moduleProperties, Discard(type, [OptionalKind])), type) :\n KindGuard.IsReadonly(type) ? CreateType(FromType(moduleProperties, Discard(type, [ReadonlyKind])), type) :\n // Transform\n KindGuard.IsTransform(type) ? CreateType(FromTransform(moduleProperties, type), type) :\n // Types\n KindGuard.IsArray(type) ? CreateType(FromArray(moduleProperties, type.items), type) :\n KindGuard.IsAsyncIterator(type) ? CreateType(FromAsyncIterator(moduleProperties, type.items), type) :\n KindGuard.IsComputed(type) ? CreateType(FromComputed(moduleProperties, type.target, type.parameters)) :\n KindGuard.IsConstructor(type) ? CreateType(FromConstructor(moduleProperties, type.parameters, type.returns), type) :\n KindGuard.IsFunction(type) ? CreateType(FromFunction(moduleProperties, type.parameters, type.returns), type) :\n KindGuard.IsIntersect(type) ? CreateType(FromIntersect(moduleProperties, type.allOf), type) :\n KindGuard.IsIterator(type) ? CreateType(FromIterator(moduleProperties, type.items), type) :\n KindGuard.IsObject(type) ? CreateType(FromObject(moduleProperties, type.properties), type) :\n KindGuard.IsRecord(type) ? CreateType(FromRecord(moduleProperties, type)) :\n KindGuard.IsTuple(type) ? CreateType(FromTuple(moduleProperties, type.items || []), type) :\n KindGuard.IsUnion(type) ? CreateType(FromUnion(moduleProperties, type.anyOf), type) :\n type);\n}\n// prettier-ignore\nexport function ComputeType(moduleProperties, key) {\n return (key in moduleProperties\n ? FromType(moduleProperties, moduleProperties[key])\n : Never());\n}\n// prettier-ignore\nexport function ComputeModuleProperties(moduleProperties) {\n return globalThis.Object.getOwnPropertyNames(moduleProperties).reduce((result, key) => {\n return { ...result, [key]: ComputeType(moduleProperties, key) };\n }, {});\n}\n","import { CreateType } from '../create/index.mjs';\nimport { Kind } from '../symbols/index.mjs';\n// ------------------------------------------------------------------\n// Module Infrastructure Types\n// ------------------------------------------------------------------\nimport { ComputeModuleProperties } from './compute.mjs';\n// ------------------------------------------------------------------\n// Module\n// ------------------------------------------------------------------\n// prettier-ignore\nexport class TModule {\n constructor($defs) {\n const computed = ComputeModuleProperties($defs);\n const identified = this.WithIdentifiers(computed);\n this.$defs = identified;\n }\n /** `[Json]` Imports a Type by Key. */\n Import(key, options) {\n const $defs = { ...this.$defs, [key]: CreateType(this.$defs[key], options) };\n return CreateType({ [Kind]: 'Import', $defs, $ref: key });\n }\n // prettier-ignore\n WithIdentifiers($defs) {\n return globalThis.Object.getOwnPropertyNames($defs).reduce((result, key) => {\n return { ...result, [key]: { ...$defs[key], $id: key } };\n }, {});\n }\n}\n/** `[Json]` Creates a Type Definition Module. */\nexport function Module(properties) {\n return new TModule(properties);\n}\n","export * from './module.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Not type */\nexport function Not(type, options) {\n return CreateType({ [Kind]: 'Not', not: type }, options);\n}\n","export * from './not.mjs';\n","import { Tuple } from '../tuple/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport * as KindGuard from '../guard/kind.mjs';\n/** `[JavaScript]` Extracts the Parameters from the given Function type */\nexport function Parameters(schema, options) {\n return (KindGuard.IsFunction(schema) ? Tuple(schema.parameters, options) : Never());\n}\n","export * from './parameters.mjs';\n","import { CloneType } from '../clone/type.mjs';\nimport { CreateType } from '../create/type.mjs';\nimport { IsUndefined } from '../guard/value.mjs';\nimport { Kind, Hint } from '../symbols/index.mjs';\n// Auto Tracked For Recursive Types without ID's\nlet Ordinal = 0;\n/** `[Json]` Creates a Recursive type */\nexport function Recursive(callback, options = {}) {\n if (IsUndefined(options.$id))\n options.$id = `T${Ordinal++}`;\n const thisType = CloneType(callback({ [Kind]: 'This', $ref: `${options.$id}` }));\n thisType.$id = options.$id;\n // prettier-ignore\n return CreateType({ [Hint]: 'Recursive', ...thisType }, options);\n}\n","export * from './recursive.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { IsString } from '../guard/value.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a RegExp type */\nexport function RegExp(unresolved, options) {\n const expr = IsString(unresolved) ? new globalThis.RegExp(unresolved) : unresolved;\n return CreateType({ [Kind]: 'RegExp', type: 'RegExp', source: expr.source, flags: expr.flags }, options);\n}\n","export * from './regexp.mjs';\n","// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsIntersect, IsUnion, IsTuple } from '../guard/kind.mjs';\n// prettier-ignore\nfunction RestResolve(T) {\n return (IsIntersect(T) ? T.allOf :\n IsUnion(T) ? T.anyOf :\n IsTuple(T) ? T.items ?? [] :\n []);\n}\n/** `[Json]` Extracts interior Rest elements from Tuple, Intersect and Union types */\nexport function Rest(T) {\n return RestResolve(T);\n}\n","export * from './rest.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Never } from '../never/index.mjs';\nimport * as KindGuard from '../guard/kind.mjs';\n/** `[JavaScript]` Extracts the ReturnType from the given Function type */\nexport function ReturnType(schema, options) {\n return (KindGuard.IsFunction(schema) ? CreateType(schema.returns, options) : Never(options));\n}\n","export * from './return-type.mjs';\n","export {};\n","import { Kind, Hint, ReadonlyKind, OptionalKind } from '../symbols/index.mjs';\n","export * from './anyschema.mjs';\nexport * from './schema.mjs';\n","export {};\n","export * from './static.mjs';\n","import { TransformKind } from '../symbols/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsTransform } from '../guard/kind.mjs';\n// ------------------------------------------------------------------\n// TransformBuilders\n// ------------------------------------------------------------------\nexport class TransformDecodeBuilder {\n constructor(schema) {\n this.schema = schema;\n }\n Decode(decode) {\n return new TransformEncodeBuilder(this.schema, decode);\n }\n}\n// prettier-ignore\nexport class TransformEncodeBuilder {\n constructor(schema, decode) {\n this.schema = schema;\n this.decode = decode;\n }\n EncodeTransform(encode, schema) {\n const Encode = (value) => schema[TransformKind].Encode(encode(value));\n const Decode = (value) => this.decode(schema[TransformKind].Decode(value));\n const Codec = { Encode: Encode, Decode: Decode };\n return { ...schema, [TransformKind]: Codec };\n }\n EncodeSchema(encode, schema) {\n const Codec = { Decode: this.decode, Encode: encode };\n return { ...schema, [TransformKind]: Codec };\n }\n Encode(encode) {\n return (IsTransform(this.schema) ? this.EncodeTransform(encode, this.schema) : this.EncodeSchema(encode, this.schema));\n }\n}\n/** `[Json]` Creates a Transform type */\nexport function Transform(schema) {\n return new TransformDecodeBuilder(schema);\n}\n","export * from './transform.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Unsafe type that will infers as the generic argument T */\nexport function Unsafe(options = {}) {\n return CreateType({ [Kind]: options[Kind] ?? 'Unsafe' }, options);\n}\n","export * from './unsafe.mjs';\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Void type */\nexport function Void(options) {\n return CreateType({ [Kind]: 'Void', type: 'void' }, options);\n}\n","export * from './void.mjs';\n","// ------------------------------------------------------------------\n// Type: Module\n// ------------------------------------------------------------------\nexport { Any } from '../any/index.mjs';\nexport { Argument } from '../argument/index.mjs';\nexport { Array } from '../array/index.mjs';\nexport { AsyncIterator } from '../async-iterator/index.mjs';\nexport { Awaited } from '../awaited/index.mjs';\nexport { BigInt } from '../bigint/index.mjs';\nexport { Boolean } from '../boolean/index.mjs';\nexport { Composite } from '../composite/index.mjs';\nexport { Const } from '../const/index.mjs';\nexport { Constructor } from '../constructor/index.mjs';\nexport { ConstructorParameters } from '../constructor-parameters/index.mjs';\nexport { Date } from '../date/index.mjs';\nexport { Enum } from '../enum/index.mjs';\nexport { Exclude } from '../exclude/index.mjs';\nexport { Extends } from '../extends/index.mjs';\nexport { Extract } from '../extract/index.mjs';\nexport { Function } from '../function/index.mjs';\nexport { Index } from '../indexed/index.mjs';\nexport { InstanceType } from '../instance-type/index.mjs';\nexport { Instantiate } from '../instantiate/index.mjs';\nexport { Integer } from '../integer/index.mjs';\nexport { Intersect } from '../intersect/index.mjs';\nexport { Capitalize, Uncapitalize, Lowercase, Uppercase } from '../intrinsic/index.mjs';\nexport { Iterator } from '../iterator/index.mjs';\nexport { KeyOf } from '../keyof/index.mjs';\nexport { Literal } from '../literal/index.mjs';\nexport { Mapped } from '../mapped/index.mjs';\nexport { Module } from '../module/index.mjs';\nexport { Never } from '../never/index.mjs';\nexport { Not } from '../not/index.mjs';\nexport { Null } from '../null/index.mjs';\nexport { Number } from '../number/index.mjs';\nexport { Object } from '../object/index.mjs';\nexport { Omit } from '../omit/index.mjs';\nexport { Optional } from '../optional/index.mjs';\nexport { Parameters } from '../parameters/index.mjs';\nexport { Partial } from '../partial/index.mjs';\nexport { Pick } from '../pick/index.mjs';\nexport { Promise } from '../promise/index.mjs';\nexport { Readonly } from '../readonly/index.mjs';\nexport { ReadonlyOptional } from '../readonly-optional/index.mjs';\nexport { Record } from '../record/index.mjs';\nexport { Recursive } from '../recursive/index.mjs';\nexport { Ref } from '../ref/index.mjs';\nexport { RegExp } from '../regexp/index.mjs';\nexport { Required } from '../required/index.mjs';\nexport { Rest } from '../rest/index.mjs';\nexport { ReturnType } from '../return-type/index.mjs';\nexport { String } from '../string/index.mjs';\nexport { Symbol } from '../symbol/index.mjs';\nexport { TemplateLiteral } from '../template-literal/index.mjs';\nexport { Transform } from '../transform/index.mjs';\nexport { Tuple } from '../tuple/index.mjs';\nexport { Uint8Array } from '../uint8array/index.mjs';\nexport { Undefined } from '../undefined/index.mjs';\nexport { Union } from '../union/index.mjs';\nexport { Unknown } from '../unknown/index.mjs';\nexport { Unsafe } from '../unsafe/index.mjs';\nexport { Void } from '../void/index.mjs';\n","// ------------------------------------------------------------------\n// JsonTypeBuilder\n// ------------------------------------------------------------------\nexport { JsonTypeBuilder } from './json.mjs';\n// ------------------------------------------------------------------\n// JavaScriptTypeBuilder\n// ------------------------------------------------------------------\nimport * as TypeBuilder from './type.mjs';\nimport { JavaScriptTypeBuilder } from './javascript.mjs';\n/** JavaScript Type Builder with Static Resolution for TypeScript */\nconst Type = TypeBuilder;\nexport { JavaScriptTypeBuilder };\nexport { Type };\n","// ------------------------------------------------------------------\n// Infrastructure\n// ------------------------------------------------------------------\nexport * from './type/clone/index.mjs';\nexport * from './type/create/index.mjs';\nexport * from './type/error/index.mjs';\nexport * from './type/guard/index.mjs';\nexport * from './type/helpers/index.mjs';\nexport * from './type/patterns/index.mjs';\nexport * from './type/registry/index.mjs';\nexport * from './type/sets/index.mjs';\nexport * from './type/symbols/index.mjs';\n// ------------------------------------------------------------------\n// Types\n// ------------------------------------------------------------------\nexport * from './type/any/index.mjs';\nexport * from './type/array/index.mjs';\nexport * from './type/argument/index.mjs';\nexport * from './type/async-iterator/index.mjs';\nexport * from './type/awaited/index.mjs';\nexport * from './type/bigint/index.mjs';\nexport * from './type/boolean/index.mjs';\nexport * from './type/composite/index.mjs';\nexport * from './type/const/index.mjs';\nexport * from './type/constructor/index.mjs';\nexport * from './type/constructor-parameters/index.mjs';\nexport * from './type/date/index.mjs';\nexport * from './type/enum/index.mjs';\nexport * from './type/exclude/index.mjs';\nexport * from './type/extends/index.mjs';\nexport * from './type/extract/index.mjs';\nexport * from './type/function/index.mjs';\nexport * from './type/indexed/index.mjs';\nexport * from './type/instance-type/index.mjs';\nexport * from './type/instantiate/index.mjs';\nexport * from './type/integer/index.mjs';\nexport * from './type/intersect/index.mjs';\nexport * from './type/iterator/index.mjs';\nexport * from './type/intrinsic/index.mjs';\nexport * from './type/keyof/index.mjs';\nexport * from './type/literal/index.mjs';\nexport * from './type/module/index.mjs';\nexport * from './type/mapped/index.mjs';\nexport * from './type/never/index.mjs';\nexport * from './type/not/index.mjs';\nexport * from './type/null/index.mjs';\nexport * from './type/number/index.mjs';\nexport * from './type/object/index.mjs';\nexport * from './type/omit/index.mjs';\nexport * from './type/optional/index.mjs';\nexport * from './type/parameters/index.mjs';\nexport * from './type/partial/index.mjs';\nexport * from './type/pick/index.mjs';\nexport * from './type/promise/index.mjs';\nexport * from './type/readonly/index.mjs';\nexport * from './type/readonly-optional/index.mjs';\nexport * from './type/record/index.mjs';\nexport * from './type/recursive/index.mjs';\nexport * from './type/ref/index.mjs';\nexport * from './type/regexp/index.mjs';\nexport * from './type/required/index.mjs';\nexport * from './type/rest/index.mjs';\nexport * from './type/return-type/index.mjs';\nexport * from './type/schema/index.mjs';\nexport * from './type/static/index.mjs';\nexport * from './type/string/index.mjs';\nexport * from './type/symbol/index.mjs';\nexport * from './type/template-literal/index.mjs';\nexport * from './type/transform/index.mjs';\nexport * from './type/tuple/index.mjs';\nexport * from './type/uint8array/index.mjs';\nexport * from './type/undefined/index.mjs';\nexport * from './type/union/index.mjs';\nexport * from './type/unknown/index.mjs';\nexport * from './type/unsafe/index.mjs';\nexport * from './type/void/index.mjs';\n// ------------------------------------------------------------------\n// Type.*\n// ------------------------------------------------------------------\nexport * from './type/type/index.mjs';\n","/**\n * TypeBox Schemas - Single Source of Truth\n *\n * All validation schemas, types, and runtime constants are defined here.\n * Other modules import from this file to ensure consistency.\n */\n\nimport { Type, Static } from \"@sinclair/typebox\";\nimport { EMAIL_PATTERN, PHONE_PATTERN } from \"@spfn/auth\";\n\n// ============================================================================\n// Basic Schemas\n// ============================================================================\n\nexport const EmailSchema = Type.String({\n pattern: EMAIL_PATTERN,\n description: 'Email address'\n});\n\nexport const PhoneSchema = Type.String({\n pattern: PHONE_PATTERN,\n description: 'Phone number in E.164 format (e.g., +821012345678)'\n});\n\nexport const PasswordSchema = Type.String({\n minLength: 8,\n description: 'User password (minimum 8 characters)'\n});\n\n// ============================================================================\n// Verification Target Type\n// ============================================================================\n\nexport const TargetTypeSchema = Type.Union([\n Type.Literal('email'),\n Type.Literal('phone')\n], {\n description: 'Type of target (email or phone)'\n});\n\nexport type VerificationTargetType = Static<typeof TargetTypeSchema>;\n\nexport const VERIFICATION_TARGET_TYPES = ['email', 'phone'] as const;\n\n// ============================================================================\n// Verification Purpose\n// ============================================================================\n\nexport const VerificationPurposeSchema = Type.Union([\n Type.Literal('registration'),\n Type.Literal('login'),\n Type.Literal('password_reset'),\n Type.Literal('email_change'),\n Type.Literal('phone_change')\n], {\n description: 'Purpose of verification'\n});\n\nexport type VerificationPurpose = Static<typeof VerificationPurposeSchema>;\n\nexport const VERIFICATION_PURPOSES = ['registration', 'login', 'password_reset', 'email_change', 'phone_change'] as const;","/**\n * @spfn/auth - Shared Types\n *\n * Common types and constants used across the auth package\n */\n\n/**\n * Supported JWT signature algorithms\n *\n * - ES256: ECDSA with P-256 and SHA-256 (recommended, smaller keys)\n * - RS256: RSA with SHA-256 (fallback, larger keys)\n */\nexport const KEY_ALGORITHM = ['ES256', 'RS256'] as const;\n\n/**\n * Key algorithm type derived from the const array\n */\nexport type KeyAlgorithmType = typeof KEY_ALGORITHM[number];\n\n/**\n * Invitation status enum values\n * Single source of truth for all invitation statuses\n */\nexport const INVITATION_STATUSES = ['pending', 'accepted', 'expired', 'cancelled'] as const;\n\n/**\n * Invitation status type derived from the const array\n */\nexport type InvitationStatus = typeof INVITATION_STATUSES[number];\n\n\n/**\n * User status enum values\n * Single source of truth for all user statuses\n */\nexport const USER_STATUSES = ['active', 'inactive', 'suspended'] as const;\n\n/**\n * User status type derived from the const array\n */\nexport type UserStatus = typeof USER_STATUSES[number];\n\n/**\n * Social provider enum values\n * Single source of truth for supported OAuth providers\n */\nexport const SOCIAL_PROVIDERS = ['google', 'github', 'kakao', 'naver'] as const;\n\n/**\n * Social provider type derived from the const array\n */\nexport type SocialProvider = typeof SOCIAL_PROVIDERS[number];","/**\n * @spfn/auth - Database Schema Definition\n *\n * Defines the 'spfn_auth' PostgreSQL schema for all auth-related tables\n */\n\nimport { createSchema } from '@spfn/core/db';\n\n/**\n * Auth schema for all authentication and authorization tables\n * Tables: users, roles, permissions, user_invitations, etc.\n */\nexport const authSchema = createSchema('@spfn/auth');","/**\n * @spfn/auth - Roles Entity\n *\n * Role-based access control (RBAC) roles table\n *\n * Features:\n * - Built-in roles (user, admin, superadmin) - cannot be deleted\n * - System roles (preset roles) - can be deactivated\n * - Custom roles (runtime created) - fully manageable\n * - Priority-based hierarchy\n */\n\nimport { text, boolean, integer, index } from 'drizzle-orm/pg-core';\nimport { id, timestamps } from '@spfn/core/db';\nimport { authSchema } from './schema';\n\nexport const roles = authSchema.table('roles',\n {\n // Primary key\n id: id(),\n\n // Role identifier (used in code, e.g., 'admin', 'editor')\n // Must be unique, lowercase, kebab-case recommended\n name: text('name').notNull().unique(),\n\n // Display name for UI (e.g., 'Administrator', 'Content Editor')\n displayName: text('display_name').notNull(),\n\n // Role description\n description: text('description'),\n\n // Built-in role flag\n // true: Core package roles (user, admin, superadmin) - cannot be deleted\n // false: Custom or preset roles - can be deleted\n isBuiltin: boolean('is_builtin').notNull().default(false),\n\n // System role flag\n // true: Defined in code (builtin or preset) - deletion restricted\n // false: Runtime created custom role - fully manageable\n isSystem: boolean('is_system').notNull().default(false),\n\n // Active status\n // false: Deactivated role (users cannot be assigned)\n isActive: boolean('is_active').notNull().default(true),\n\n // Priority level (higher = more privileged)\n // superadmin: 100, admin: 80, user: 10\n // Used for role hierarchy and conflict resolution\n priority: integer('priority').notNull().default(10),\n\n ...timestamps(),\n },\n (table) => [\n index('roles_name_idx').on(table.name),\n index('roles_is_system_idx').on(table.isSystem),\n index('roles_is_active_idx').on(table.isActive),\n index('roles_is_builtin_idx').on(table.isBuiltin),\n index('roles_priority_idx').on(table.priority),\n ]\n);\n\n// Type exports\nexport type RoleEntity = typeof roles.$inferSelect;\nexport type NewRoleEntity = typeof roles.$inferInsert;\n\n// Legacy alias for backward compatibility\nexport type Role = RoleEntity;\nexport type NewRole = NewRoleEntity;","/**\n * @spfn/auth - Users Entity\n *\n * Main user table supporting multiple authentication methods\n *\n * Features:\n * - Email or phone-based registration\n * - Password authentication (bcrypt)\n * - OAuth support (nullable passwordHash)\n * - Role-based access control (RBAC)\n * - Account status management\n * - Email/phone verification\n */\n\nimport { USER_STATUSES } from \"../types\";\nimport { text, check, boolean, index } from 'drizzle-orm/pg-core';\nimport { id, timestamps, enumText, utcTimestamp, foreignKey } from '@spfn/core/db';\nimport { sql } from 'drizzle-orm';\nimport { roles } from './roles';\nimport { authSchema } from './schema';\n\nexport const users = authSchema.table('users',\n {\n // Identity\n id: id(),\n\n // Email address (unique identifier)\n // Used for: login, password reset, notifications\n email: text('email').unique(),\n\n // Phone number in E.164 international format\n // Format: +[country code][number] (e.g., +821012345678)\n // Used for: SMS login, 2FA, notifications\n phone: text('phone').unique(),\n\n // Authentication\n // Bcrypt password hash ($2b$10$[salt][hash], 60 chars)\n // Nullable to support OAuth-only accounts\n passwordHash: text('password_hash'),\n\n // Force password change on next login\n // Use cases: initial setup, security breach, policy violation\n passwordChangeRequired: boolean('password_change_required').notNull().default(false),\n\n // Authorization (Role-Based Access Control)\n // Foreign key to roles table\n // References built-in roles: user (default), admin, superadmin\n // Can also reference custom roles created at runtime\n roleId: foreignKey('role', () => roles.id),\n\n // Account status\n // - active: Normal operation (default)\n // - inactive: Deactivated (user request, dormant)\n // - suspended: Locked (security incident, ToS violation)\n status: enumText('status', USER_STATUSES).default('active').notNull(),\n\n // Verification timestamps\n // null = unverified, timestamp = verified at this time\n // Email verification (via verification code or magic link)\n emailVerifiedAt: utcTimestamp('email_verified_at'),\n\n // Phone verification (via SMS OTP)\n phoneVerifiedAt: utcTimestamp('phone_verified_at'),\n\n // Metadata\n // Last successful login timestamp\n // Used for: security auditing, dormant account detection\n lastLoginAt: utcTimestamp('last_login_at'),\n\n ...timestamps(),\n },\n (table) => [\n // Database constraints\n // Ensure at least one identifier exists (email OR phone)\n check(\n 'email_or_phone_check',\n sql`${table.email} IS NOT NULL OR ${table.phone} IS NOT NULL`\n ),\n\n // Indexes for query optimization\n index('users_email_idx').on(table.email),\n index('users_phone_idx').on(table.phone),\n index('users_status_idx').on(table.status),\n index('users_role_id_idx').on(table.roleId),\n ]\n);\n\n// Type exports\nexport type User = typeof users.$inferSelect;\nexport type NewUser = typeof users.$inferInsert;","/**\n * @spfn/auth - User Profiles Entity\n *\n * User profile information (separate from authentication data)\n *\n * Features:\n * - Display name and personal information\n * - Avatar and bio\n * - Locale and timezone preferences\n * - Optional demographic data\n * - Social links and professional info\n */\n\nimport { text, index } from 'drizzle-orm/pg-core';\nimport { id, timestamps, typedJsonb, foreignKey } from '@spfn/core/db';\nimport { users } from './users';\nimport { authSchema } from './schema';\n\nexport const userProfiles = authSchema.table('user_profiles',\n {\n // Identity\n id: id(),\n\n // Foreign key to users table\n userId: foreignKey('user', () => users.id).unique(),\n\n // Display Information\n // Display name shown in UI (required)\n displayName: text('display_name').notNull(),\n\n // First name (optional)\n firstName: text('first_name'),\n\n // Last name (optional)\n lastName: text('last_name'),\n\n // Profile Media\n // Avatar/profile picture URL\n avatarUrl: text('avatar_url'),\n\n // Short bio/description (max 500 chars recommended)\n bio: text('bio'),\n\n // Preferences\n // Locale/language preference (e.g., 'en', 'ko', 'ja')\n locale: text('locale').default('en'),\n\n // Timezone (e.g., 'Asia/Seoul', 'America/New_York')\n timezone: text('timezone').default('UTC'),\n\n // Optional Information\n // Date of birth (YYYY-MM-DD format)\n dateOfBirth: text('date_of_birth'),\n\n // Gender (flexible text field)\n gender: text('gender'),\n\n // Personal Links\n // Personal or professional website\n website: text('website'),\n\n // Location (city, country, etc.)\n location: text('location'),\n\n // Professional Information\n // Company name\n company: text('company'),\n\n // Job title\n jobTitle: text('job_title'),\n\n // Additional metadata (JSONB)\n // Use cases:\n // - Custom fields: { department: 'Engineering', employeeId: 'E1234', team: 'Backend' }\n // - Social links: { twitter: '@user', linkedin: 'linkedin.com/in/user', github: 'username' }\n // - UI preferences: { theme: 'dark', sidebarCollapsed: true, notificationSound: false }\n // - Integration data: { slackId: 'U123456', discordId: '987654', zoomPmi: '1234567890' }\n // - App-specific: { onboardingCompleted: true, tutorialStep: 5, badges: ['early-adopter'] }\n // Example: { department: 'Engineering', theme: 'dark', twitter: '@user' }\n metadata: typedJsonb<Record<string, any>>('metadata'),\n\n ...timestamps(),\n },\n (table) => [\n // Indexes for query optimization\n index('user_profiles_user_id_idx').on(table.userId),\n index('user_profiles_display_name_idx').on(table.displayName),\n\n // Index for locale-based queries (useful for i18n features)\n index('user_profiles_locale_idx').on(table.locale),\n ]\n);\n\n// Type exports\nexport type UserProfile = typeof userProfiles.$inferSelect;\nexport type NewUserProfile = typeof userProfiles.$inferInsert;","/**\n * @spfn/auth - User Public Keys Entity\n *\n * Stores client-generated public keys for JWT verification\n * Supports key rotation and multi-key management per user\n */\n\nimport { KEY_ALGORITHM } from '../types';\nimport { text, boolean, index } from 'drizzle-orm/pg-core';\nimport { id, foreignKey, enumText, utcTimestamp } from '@spfn/core/db';\nimport { users } from './users';\nimport { authSchema } from './schema';\n\n/**\n * User Public Keys Table\n * Each user can have multiple public keys (for rotation)\n */\nexport const userPublicKeys = authSchema.table(\n 'user_public_keys',\n {\n id: id(),\n\n // User reference\n // Foreign key to users table\n // Used for: associating keys with user accounts\n userId: foreignKey('user', () => users.id),\n\n // Key identification\n // Client-generated UUID (v4 recommended)\n // Used in: JWT header 'kid' field for key lookup\n // Must be unique across all users\n keyId: text('key_id').notNull().unique(),\n\n // Public key material\n // Format: Base64-encoded DER (SPKI) format\n // Standards: RFC 5480 (EC), RFC 3447 (RSA)\n // Used for: JWT signature verification\n publicKey: text('public_key').notNull(),\n\n // Signature algorithm\n // ES256: ECDSA with P-256 and SHA-256 (recommended, smaller keys)\n // RS256: RSA with SHA-256 (fallback, larger keys)\n algorithm: enumText('algorithm', KEY_ALGORITHM).notNull().default('ES256'),\n\n // Key fingerprint\n // SHA-256 hash of the public key for quick identification\n // Format: hex-encoded string (64 chars)\n // Used for: duplicate detection, key verification\n fingerprint: text('fingerprint').notNull(),\n\n // Key status\n // false: Key is deactivated (cannot be used for verification)\n // Used for: soft key rotation, temporary key suspension\n isActive: boolean('is_active').notNull().default(true),\n\n // Key creation timestamp\n // Automatically set on insertion\n createdAt: utcTimestamp('created_at').notNull().defaultNow(),\n\n // Last usage timestamp\n // Updated each time key is used for JWT verification\n // Used for: tracking key activity, identifying unused keys\n lastUsedAt: utcTimestamp('last_used_at'),\n\n // Key expiration timestamp (optional)\n // null: Key does not expire\n // timestamp: Key cannot be used after this time\n // Used for: automatic key rotation, security compliance\n expiresAt: utcTimestamp('expires_at'),\n\n // Key revocation timestamp\n // null: Key is not revoked\n // timestamp: Key was revoked at this time\n // Used for: security incidents, key compromise\n revokedAt: utcTimestamp('revoked_at'),\n\n // Revocation reason\n // Human-readable explanation for key revocation\n // Example: \"Key compromised\", \"User reported device lost\"\n revokedReason: text('revoked_reason'),\n },\n (table) => [\n index('user_public_keys_user_id_idx').on(table.userId),\n index('user_public_keys_key_id_idx').on(table.keyId),\n index('user_public_keys_active_idx').on(table.isActive),\n index('user_public_keys_fingerprint_idx').on(table.fingerprint),\n ]\n);\n\nexport type UserPublicKey = typeof userPublicKeys.$inferSelect;\nexport type NewUserPublicKey = typeof userPublicKeys.$inferInsert;","/**\n * @spfn/auth - User Social Accounts Entity\n *\n * Stores OAuth connections for social login providers\n */\n\nimport { SOCIAL_PROVIDERS } from \"../types\";\nimport { text, uniqueIndex, index } from 'drizzle-orm/pg-core';\nimport { id, timestamps, foreignKey, enumText, utcTimestamp } from '@spfn/core/db';\nimport { users } from './users';\nimport { authSchema } from './schema';\n\nexport const userSocialAccounts = authSchema.table('user_social_accounts',\n {\n // Primary key\n id: id(),\n\n // User reference\n // Foreign key to users table\n // Links OAuth provider account to internal user\n // One user can have multiple provider connections\n userId: foreignKey('user', () => users.id),\n\n // OAuth provider\n // Supported providers: google, github, kakao, naver\n // Used for: identifying which OAuth provider was used\n provider: enumText('provider', SOCIAL_PROVIDERS).notNull(),\n\n // Provider's unique user identifier\n // Format varies by provider:\n // - Google: numeric string (e.g., \"1234567890\")\n // - GitHub: numeric ID\n // - Kakao: numeric ID\n // - Naver: alphanumeric string\n // Used for: linking provider account, preventing duplicate connections\n providerUserId: text('provider_user_id').notNull(),\n\n // Email from provider\n // May be null if provider doesn't share email\n // Used for: account linking, user verification\n providerEmail: text('provider_email'),\n\n // OAuth access token\n // ⚠️ SECURITY CRITICAL:\n // - MUST be encrypted at rest in production\n // - Use application-level encryption (AES-256-GCM recommended)\n // - Implement key rotation policy\n // - Never log or expose in API responses\n // - Set short expiration and refresh regularly\n // Used for: making API calls to provider on behalf of user\n accessToken: text('access_token'),\n\n // OAuth refresh token\n // ⚠️ SECURITY CRITICAL:\n // - MUST be encrypted at rest (same as accessToken)\n // - Store only if provider supports it\n // - Use to obtain new access tokens without re-authentication\n // - Revoke on user logout or account disconnect\n // Used for: refreshing expired access tokens\n refreshToken: text('refresh_token'),\n\n // Access token expiration timestamp\n // Used for: determining when to refresh token\n // Background job should refresh tokens before expiration\n tokenExpiresAt: utcTimestamp('token_expires_at'),\n\n ...timestamps(),\n },\n (table) => [\n // Indexes for query optimization\n // Index for user lookup (common query: get all providers for a user)\n index('user_social_accounts_user_id_idx').on(table.userId),\n\n // Index for provider lookup (for analytics, admin)\n index('user_social_accounts_provider_idx').on(table.provider),\n\n // Unique constraint: one provider account per provider\n // Prevents same OAuth account from being linked to multiple users\n uniqueIndex('provider_user_unique_idx')\n .on(table.provider, table.providerUserId),\n ]\n);\n\n// Type exports\nexport type UserSocialAccount = typeof userSocialAccounts.$inferSelect;\nexport type NewUserSocialAccount = typeof userSocialAccounts.$inferInsert;","/**\n * @spfn/auth - Verification Codes Entity\n *\n * Stores verification codes for email and phone verification\n * Codes expire after a configurable time period\n */\n\nimport { VERIFICATION_PURPOSES, VERIFICATION_TARGET_TYPES } from \"../routes/schema\";\nimport { text, index, integer, check } from 'drizzle-orm/pg-core';\nimport { id, timestamps, enumText, utcTimestamp } from '@spfn/core/db';\nimport { sql } from 'drizzle-orm';\nimport { authSchema } from './schema';\n\nexport const verificationCodes = authSchema.table('verification_codes',\n {\n id: id(),\n\n // Target (email or phone)\n // Email address or E.164 phone number (+821012345678)\n target: text('target').notNull(),\n targetType: enumText('target_type', VERIFICATION_TARGET_TYPES).notNull(),\n\n // Verification code\n // Default: 6-digit numeric code (configurable)\n // Generated by: crypto.randomInt(100000, 999999)\n code: text('code').notNull(),\n\n // Purpose of verification\n // Used to: prevent code reuse across different flows\n purpose: enumText('purpose', VERIFICATION_PURPOSES).notNull(),\n\n // Expiration timestamp\n // Default: 15 minutes from creation\n // Background job should clean up expired codes\n expiresAt: utcTimestamp('expires_at').notNull(),\n\n // Usage tracking\n // Timestamp when code was successfully used\n // null = not yet used, timestamp = used and no longer valid\n usedAt: utcTimestamp('used_at'),\n\n // Failed verification attempts counter\n // Incremented on each failed verification\n // Max attempts: 5 (enforced by check constraint)\n // Used for: rate limiting, security monitoring\n attempts: integer('attempts').notNull().default(0),\n\n ...timestamps(),\n },\n (table) => [\n // Database constraints\n // Limit verification attempts to prevent brute force attacks\n check('attempts_limit_check', sql`${table.attempts} >= 0 AND ${table.attempts} <= 10`),\n\n // Index for quick lookup by target and purpose\n index('target_purpose_idx')\n .on(table.target, table.purpose, table.expiresAt),\n ]\n);\n\n// Type exports\nexport type VerificationCode = typeof verificationCodes.$inferSelect;\nexport type NewVerificationCode = typeof verificationCodes.$inferInsert;","/**\n * @spfn/auth - User Invitations Entity\n *\n * Invitation system for invite-only user registration\n *\n * Features:\n * - Email-based invitations with unique tokens\n * - Role assignment at invitation time\n * - Expiration and status tracking\n * - Audit trail (who invited whom, when accepted)\n * - Metadata support for custom data\n */\n\nimport { INVITATION_STATUSES } from \"../types\";\nimport { text, index } from 'drizzle-orm/pg-core';\nimport { id, timestamps, enumText, utcTimestamp, typedJsonb, foreignKey } from '@spfn/core/db';\nimport { roles } from './roles';\nimport { users } from './users';\nimport { authSchema } from './schema';\n\nexport const userInvitations = authSchema.table('user_invitations',\n {\n // Primary key\n id: id(),\n\n // Target email address for the invitation\n // Will become the user's email upon acceptance\n email: text('email').notNull(),\n\n // Unique invitation token (UUID v4)\n // Used in invitation URL: /auth/invite/{token}\n // Single-use token that expires after acceptance\n token: text('token').notNull().unique(),\n\n // Role to be assigned when invitation is accepted\n // Foreign key to roles table\n roleId: foreignKey('role', () => roles.id),\n\n // User who created this invitation\n // Foreign key to users table\n // Used for: audit trail, permission checks\n invitedBy: foreignKey('invited_by', () => users.id, { onDelete: 'cascade' }),\n\n // Invitation status\n // - pending: Invitation sent, awaiting acceptance\n // - accepted: User accepted and account created\n // - expired: Invitation expired (automatic)\n // - cancelled: Invitation cancelled by admin\n status: enumText('status', INVITATION_STATUSES).default('pending').notNull(),\n\n // Expiration timestamp (default: 7 days from creation)\n // Invitation cannot be accepted after this time\n // Background job should update status to 'expired'\n expiresAt: utcTimestamp('expires_at').notNull(),\n\n // Timestamp when invitation was accepted\n // null = not yet accepted\n // Used for: audit trail, analytics\n acceptedAt: utcTimestamp('accepted_at'),\n\n // Timestamp when invitation was cancelled\n // null = not cancelled\n // Used for: audit trail\n cancelledAt: utcTimestamp('cancelled_at'),\n\n // Additional metadata (JSONB)\n // Use cases:\n // - Custom welcome message\n // - Onboarding instructions\n // - Team/department assignment\n // - Custom fields for app-specific data\n // Example: { message: \"Welcome!\", department: \"Engineering\" }\n metadata: typedJsonb<Record<string, any>>('metadata'),\n\n ...timestamps(),\n },\n (table) => [\n // Indexes for query optimization\n index('invitations_token_idx').on(table.token),\n index('invitations_email_idx').on(table.email),\n index('invitations_status_idx').on(table.status),\n index('invitations_invited_by_idx').on(table.invitedBy),\n index('invitations_expires_at_idx').on(table.expiresAt), // For cleanup jobs\n index('invitations_role_id_idx').on(table.roleId),\n ]\n);\n\n// Type exports\nexport type Invitation = typeof userInvitations.$inferSelect;\nexport type NewInvitation = typeof userInvitations.$inferInsert;","/**\n * @spfn/auth - RBAC Type Definitions\n *\n * Type definitions for role and permission configuration\n */\n\n/**\n * Permission category enum values\n * Single source of truth for permission categories\n */\nexport const PERMISSION_CATEGORIES = [\n 'auth', // Authentication & authorization\n 'user', // User management\n 'rbac', // Role & permission management\n 'system', // System administration\n 'custom' // App-specific categories\n] as const;\n\n/**\n * Permission category type derived from the const array\n */\nexport type PermissionCategory = typeof PERMISSION_CATEGORIES[number];\n\nexport interface RoleConfig\n{\n // Role identifier (e.g., 'admin', 'editor', 'content-creator')\n name: string;\n\n // Display name for UI\n displayName: string;\n\n // Role description\n description?: string;\n\n // Priority level (higher = more privileged)\n // Default: 10 for custom roles\n priority?: number;\n\n // System role flag (defined in code vs runtime created)\n // Default: false for custom roles\n isSystem?: boolean;\n\n // Built-in role flag (core package roles that cannot be deleted)\n // Internal use only - set by package\n isBuiltin?: boolean;\n}\n\nexport interface PermissionConfig\n{\n // Permission identifier (e.g., 'user:delete', 'post:publish')\n name: string;\n\n // Display name for UI\n displayName: string;\n\n // Permission description\n description?: string;\n\n // Category for grouping (e.g., 'user', 'auth', 'rbac', 'custom', 'system')\n category?: PermissionCategory;\n\n // System permission flag\n // Default: false for custom permissions\n isSystem?: boolean;\n\n // Built-in permission flag (core package permissions)\n // Internal use only - set by package\n isBuiltin?: boolean;\n}\n\nexport interface AuthInitOptions\n{\n /**\n * Additional roles to create\n * Built-in roles (user, admin, superadmin) are automatically included\n */\n roles?: RoleConfig[];\n\n /**\n * Additional permissions to create\n * Built-in permissions are automatically included\n */\n permissions?: PermissionConfig[];\n\n /**\n * Role-Permission mappings\n * Built-in mappings are automatically included\n * You can extend built-in roles or define mappings for custom roles\n *\n * @example\n * ```typescript\n * {\n * // Extend built-in admin role\n * admin: ['project:create', 'project:delete'],\n *\n * // Define custom role permissions\n * 'project-manager': ['project:create', 'task:assign'],\n * }\n * ```\n */\n rolePermissions?: Record<string, string[]>;\n\n /**\n * Default role name for new users\n * Must be a valid role name that exists after initialization\n * @default 'user'\n */\n defaultRole?: string;\n\n /**\n * Default session TTL (Time To Live)\n *\n * Supports:\n * - Number: seconds (e.g., 2592000)\n * - String: duration format ('30d', '12h', '45m', '3600s')\n *\n * Can be overridden at runtime with `remember` parameter.\n *\n * @default '7d' (7 days)\n *\n * @example\n * ```typescript\n * {\n * sessionTtl: '30d', // 30 days\n * }\n * ```\n */\n sessionTtl?: string | number;\n}","/**\n * @spfn/auth - Built-in Roles and Permissions\n *\n * Core roles and permissions required by the auth package\n * These cannot be deleted and are automatically created on initialization\n */\n\nimport type { RoleConfig, PermissionConfig } from './types';\n\n/**\n * Built-in roles (required by package)\n * These roles are always created and cannot be deleted\n */\nexport const BUILTIN_ROLES: Record<string, RoleConfig> = {\n SUPERADMIN: {\n name: 'superadmin',\n displayName: 'Super Administrator',\n description: 'Full system access and RBAC management',\n priority: 100,\n isSystem: true,\n isBuiltin: true,\n },\n ADMIN: {\n name: 'admin',\n displayName: 'Administrator',\n description: 'User management and organization administration',\n priority: 80,\n isSystem: true,\n isBuiltin: true,\n },\n USER: {\n name: 'user',\n displayName: 'User',\n description: 'Default user role with basic permissions',\n priority: 10,\n isSystem: true,\n isBuiltin: true,\n },\n} as const;\n\n/**\n * Built-in permissions (required by package)\n * These permissions are always created and cannot be deleted\n */\nexport const BUILTIN_PERMISSIONS: Record<string, PermissionConfig> = {\n // Self-service auth management\n AUTH_SELF_MANAGE: {\n name: 'auth:self:manage',\n displayName: 'Manage Own Auth',\n description: 'Change own password, rotate keys, manage own sessions',\n category: 'auth',\n isSystem: true,\n isBuiltin: true,\n },\n\n // User management (admin functions)\n USER_READ: {\n name: 'user:read',\n displayName: 'Read Users',\n description: 'View user information and list users',\n category: 'user',\n isSystem: true,\n isBuiltin: true,\n },\n USER_WRITE: {\n name: 'user:write',\n displayName: 'Write Users',\n description: 'Create and update user accounts',\n category: 'user',\n isSystem: true,\n isBuiltin: true,\n },\n USER_DELETE: {\n name: 'user:delete',\n displayName: 'Delete Users',\n description: 'Delete user accounts',\n category: 'user',\n isSystem: true,\n isBuiltin: true,\n },\n USER_INVITE: {\n name: 'user:invite',\n displayName: 'Invite Users',\n description: 'Create and send user invitations',\n category: 'user',\n isSystem: true,\n isBuiltin: true,\n },\n\n // RBAC management (superadmin functions)\n RBAC_ROLE_MANAGE: {\n name: 'rbac:role:manage',\n displayName: 'Manage Roles',\n description: 'Create, update, and delete roles',\n category: 'rbac',\n isSystem: true,\n isBuiltin: true,\n },\n RBAC_PERMISSION_MANAGE: {\n name: 'rbac:permission:manage',\n displayName: 'Manage Permissions',\n description: 'Assign permissions to roles and users',\n category: 'rbac',\n isSystem: true,\n isBuiltin: true,\n },\n} as const;\n\n/**\n * Built-in role-permission mappings\n * Defines default permissions for each built-in role\n */\nexport const BUILTIN_ROLE_PERMISSIONS: Record<string, string[]> = {\n superadmin: [\n 'auth:self:manage',\n 'user:read',\n 'user:write',\n 'user:delete',\n 'user:invite',\n 'rbac:role:manage',\n 'rbac:permission:manage',\n ],\n admin: [\n 'auth:self:manage',\n 'user:read',\n 'user:write',\n 'user:delete',\n 'user:invite',\n ],\n user: [\n 'auth:self:manage',\n ],\n} as const;\n\nexport type BuiltinRoleName = keyof typeof BUILTIN_ROLE_PERMISSIONS;\nexport type BuiltinPermissionName = typeof BUILTIN_PERMISSIONS[keyof typeof BUILTIN_PERMISSIONS]['name'];","/**\n * @spfn/auth - RBAC Configuration\n *\n * Role-Based Access Control system configuration\n */\n\nexport * from './types';\nexport * from './builtin';","/**\n * @spfn/auth - Permissions Entity\n *\n * Granular permissions for RBAC system\n *\n * Features:\n * - Built-in permissions (auth:*, user:*, rbac:*) - required for package\n * - System permissions (preset permissions) - optional\n * - Custom permissions (app-specific) - defined by developers\n * - Category grouping for organization\n */\n\nimport { PERMISSION_CATEGORIES } from \"../rbac\";\nimport { text, boolean, index } from 'drizzle-orm/pg-core';\nimport { id, timestamps, enumText, typedJsonb } from '@spfn/core/db';\nimport { authSchema } from './schema';\n\nexport const permissions = authSchema.table('permissions',\n {\n // Primary key\n id: id(),\n\n // Permission identifier\n // Format: resource:action or namespace:resource:action\n // Examples:\n // - Simple: 'user:delete', 'post:publish'\n // - Namespaced: 'auth:user:delete', 'cms:post:publish'\n // Must be unique across all permissions\n // Used in: permission checks, role assignments, API guards\n name: text('name').notNull().unique(),\n\n // Display name for UI\n // Human-readable name shown in admin panels\n // Example: \"Delete Users\", \"Publish Posts\"\n displayName: text('display_name').notNull(),\n\n // Permission description\n // Detailed explanation of what this permission allows\n // Example: \"Allows deletion of user accounts from the system\"\n description: text('description'),\n\n // Category for grouping\n // Used for: organizing permissions in UI, filtering\n // Built-in categories: auth, user, rbac, system\n // Custom categories: any app-specific category\n category: enumText('category', PERMISSION_CATEGORIES),\n\n // Built-in permission flag\n // true: Core package permissions (auth:*, user:*, rbac:*)\n // - Cannot be deleted or modified\n // - Must have isSystem = true\n // - Required for package functionality\n // false: Custom or preset permissions\n // - Can be deleted (if not system)\n isBuiltin: boolean('is_builtin').notNull().default(false),\n\n // System permission flag\n // true: Defined in code (builtin or preset)\n // - Deletion restricted\n // - Created during migrations or initialization\n // false: Runtime created custom permission\n // - Fully manageable by admins\n // - Created through admin UI or API\n isSystem: boolean('is_system').notNull().default(false),\n\n // Active status\n // true: Permission is enforced (default)\n // false: Deactivated permission (not enforced in checks)\n // - Useful for temporarily disabling features\n // - Maintains audit trail without deletion\n isActive: boolean('is_active').notNull().default(true),\n\n // Additional metadata (JSONB)\n // Use cases:\n // - UI configuration: { icon: 'trash', color: 'red', group: 'dangerous' }\n // - Access control: { requiresMfa: true, ipWhitelist: ['10.0.0.0/8'] }\n // - Dependencies: { requires: ['user:read'], conflicts: ['user:admin'] }\n // - Audit: { createdBy: 123, source: 'migration', version: '1.0.0' }\n // Example: { icon: 'trash', color: 'red', requiresMfa: true }\n metadata: typedJsonb<Record<string, any>>('metadata'),\n\n ...timestamps(),\n },\n (table) => [\n index('permissions_name_idx').on(table.name),\n index('permissions_category_idx').on(table.category),\n index('permissions_is_system_idx').on(table.isSystem),\n index('permissions_is_active_idx').on(table.isActive),\n index('permissions_is_builtin_idx').on(table.isBuiltin),\n ]\n);\n\n// Type exports\nexport type PermissionEntity = typeof permissions.$inferSelect;\nexport type NewPermissionEntity = typeof permissions.$inferInsert;\n\n// Legacy alias for backward compatibility\nexport type Permission = PermissionEntity;\nexport type NewPermission = NewPermissionEntity;","/**\n * @spfn/auth - Role-Permissions Mapping Entity\n *\n * Many-to-many relationship between roles and permissions\n *\n * Usage:\n * - Defines which permissions each role has\n * - Cascade delete when role or permission is deleted\n */\n\nimport { index, unique } from 'drizzle-orm/pg-core';\nimport { id, timestamps, foreignKey } from '@spfn/core/db';\nimport { roles } from './roles';\nimport { permissions } from './permissions';\nimport { authSchema } from './schema';\n\nexport const rolePermissions = authSchema.table('role_permissions',\n {\n // Primary key\n id: id(),\n\n // Role reference\n // Foreign key to roles table\n // Cascade delete: when role is deleted, all role-permission mappings are removed\n // Used for: defining which permissions each role has\n // Example: Admin role → [user:create, user:delete, user:update]\n roleId: foreignKey('role', () => roles.id, { onDelete: 'cascade' }),\n\n // Permission reference\n // Foreign key to permissions table\n // Cascade delete: when permission is deleted, all role-permission mappings are removed\n // Used for: granting permissions to roles\n // Example: user:delete permission → [Admin, Superadmin]\n permissionId: foreignKey('permission', () => permissions.id, { onDelete: 'cascade' }),\n\n ...timestamps(),\n },\n (table) => [\n // Indexes for query performance\n index('role_permissions_role_id_idx').on(table.roleId),\n index('role_permissions_permission_id_idx').on(table.permissionId),\n\n // Unique constraint: one role-permission pair only\n unique('role_permissions_unique').on(table.roleId, table.permissionId),\n ]\n);\n\n// Type exports\nexport type RolePermission = typeof rolePermissions.$inferSelect;\nexport type NewRolePermission = typeof rolePermissions.$inferInsert;","/**\n * @spfn/auth - User-Permissions Override Entity\n *\n * Per-user permission grants/revocations\n *\n * Features:\n * - Grant additional permissions to specific users\n * - Revoke role-inherited permissions from specific users\n * - Temporary permissions with expiration\n * - Audit trail with reason field\n *\n * Priority:\n * User permissions override role permissions\n */\n\nimport { boolean, text, index, unique } from 'drizzle-orm/pg-core';\nimport { id, timestamps, utcTimestamp, foreignKey } from '@spfn/core/db';\nimport { users } from './users';\nimport { permissions } from './permissions';\nimport { authSchema } from './schema';\n\nexport const userPermissions = authSchema.table('user_permissions',\n {\n // Primary key\n id: id(),\n\n // User reference\n // Foreign key to users table\n // Cascade delete: when user is deleted, all overrides are removed\n userId: foreignKey('user', () => users.id, { onDelete: 'cascade' }),\n\n // Permission reference\n // Foreign key to permissions table\n // Cascade delete: when permission is deleted, all overrides are removed\n permissionId: foreignKey('permission', () => permissions.id, { onDelete: 'cascade' }),\n\n // Grant or revoke flag\n // true: GRANT this permission to the user (additive override)\n // - Grants permission even if role doesn't have it\n // - Use case: Temporary elevated access, special privileges\n // - Example: Grant 'post:delete' to specific editor for cleanup task\n // false: REVOKE this permission from the user (subtractive override)\n // - Removes permission even if role has it\n // - Use case: Restrict specific actions, compliance requirements\n // - Example: Revoke 'user:delete' from admin during audit period\n // Priority: User permissions ALWAYS override role permissions\n granted: boolean('granted').notNull().default(true),\n\n // Reason for grant/revocation\n // Used for: audit trail, compliance documentation\n // Example: \"Temporary access for project X\", \"Security incident - restricted\"\n reason: text('reason'),\n\n // Expiration timestamp (optional)\n // null: Permanent override (remains until manually removed)\n // timestamp: Permission expires at this time (auto-revoked by background job)\n // Use case: Time-limited elevated access, temporary restrictions\n expiresAt: utcTimestamp('expires_at'),\n\n ...timestamps(),\n },\n (table) => [\n // Indexes for query performance\n index('user_permissions_user_id_idx').on(table.userId),\n index('user_permissions_permission_id_idx').on(table.permissionId),\n index('user_permissions_expires_at_idx').on(table.expiresAt),\n\n // Unique constraint: one user-permission pair only\n unique('user_permissions_unique').on(table.userId, table.permissionId),\n ]\n);\n\n// Type exports\nexport type UserPermission = typeof userPermissions.$inferSelect;\nexport type NewUserPermission = typeof userPermissions.$inferInsert;","/**\n * @spfn/auth - Database entities\n *\n * Core authentication and authorization entities\n */\n\n// Schema definition\nexport * from './schema';\n\n// User entities\nexport * from './users';\nexport * from './user-profiles';\nexport * from './user-public-keys';\nexport * from './user-social-accounts';\nexport * from './verification-codes';\nexport * from './user-invitations';\n\n// RBAC entities\nexport * from './roles';\nexport * from './permissions';\nexport * from './role-permissions';\nexport * from './user-permissions'","/**\n * Users Repository\n *\n * 사용자 데이터 관리를 위한 Repository\n * BaseRepository를 상속받아 자동 트랜잭션 컨텍스트 지원 및 Read/Write 분리\n */\n\nimport { eq, and } from 'drizzle-orm';\nimport { BaseRepository } from '@spfn/core/db';\nimport { EntityNotFoundError, NotFoundError } from \"@spfn/core/errors\";\n\nimport { rolePermissions, roles, NewUser, users, permissions } from \"../entities\";\n\n/**\n * Users Repository 클래스\n *\n * BaseRepository를 상속받아 다음 기능을 제공:\n * - 자동 트랜잭션 컨텍스트 감지 및 사용\n * - Read/Write 연결 분리 (replica 활용)\n * - 타입 안전성\n */\nexport class UsersRepository extends BaseRepository\n{\n /**\n * ID로 사용자 조회\n * Read replica 사용\n */\n async findById(id: number)\n {\n const result = await this.readDb\n .select()\n .from(users)\n .where(eq(users.id, id))\n .limit(1);\n\n return result[0] ?? null;\n }\n\n /**\n * 이메일로 사용자 조회\n * Read replica 사용\n */\n async findByEmail(email: string)\n {\n const result = await this.readDb\n .select()\n .from(users)\n .where(eq(users.email, email))\n .limit(1);\n\n return result[0] ?? null;\n }\n\n /**\n * 전화번호로 사용자 조회\n * Read replica 사용\n */\n async findByPhone(phone: string)\n {\n const result = await this.readDb\n .select()\n .from(users)\n .where(eq(users.phone, phone))\n .limit(1);\n\n return result[0] ?? null;\n }\n\n /**\n * 이메일 또는 전화번호로 사용자 조회\n * Read replica 사용\n */\n async findByEmailOrPhone(email?: string, phone?: string)\n {\n if (email)\n {\n return this.findByEmail(email);\n }\n else if (phone)\n {\n return this.findByPhone(phone);\n }\n\n return null;\n }\n\n /**\n * 사용자 생성\n * Write primary 사용\n */\n async create(data: NewUser)\n {\n return await this._create(users, {\n ...data,\n createdAt: new Date(),\n updatedAt: new Date(),\n });\n }\n\n /**\n * 사용자 정보 업데이트\n * Write primary 사용\n */\n async updateById(id: number, data: Partial<NewUser>)\n {\n const result = await this.db\n .update(users)\n .set({ ...data, updatedAt: new Date() })\n .where(eq(users.id, id))\n .returning();\n\n return result[0] ?? null;\n }\n\n /**\n * 비밀번호 업데이트\n * Write primary 사용\n */\n async updatePassword(\n id: number,\n passwordHash: string,\n clearPasswordChangeRequired: boolean = true\n ) {\n const updateData: Partial<NewUser> = {\n passwordHash,\n updatedAt: new Date(),\n };\n\n if (clearPasswordChangeRequired)\n {\n updateData.passwordChangeRequired = false;\n }\n\n const result = await this.db\n .update(users)\n .set(updateData)\n .where(eq(users.id, id))\n .returning();\n\n return result[0] ?? null;\n }\n\n /**\n * 마지막 로그인 시간 업데이트\n * Write primary 사용\n */\n async updateLastLogin(id: number)\n {\n const result = await this.db\n .update(users)\n .set({\n lastLoginAt: new Date(),\n updatedAt: new Date(),\n })\n .where(eq(users.id, id))\n .returning();\n\n return result[0] ?? null;\n }\n\n /**\n * 사용자 삭제\n * Write primary 사용\n */\n async deleteById(id: number)\n {\n const result = await this.db\n .delete(users)\n .where(eq(users.id, id))\n .returning();\n\n return result[0] ?? null;\n }\n\n /**\n * User의 Role과 Permissions 조회 (JOIN)\n * Read replica 사용\n *\n * @param userId - User ID\n * @returns Role 정보와 permissions 배열\n */\n async fetchUserRoleAndPermissions(userId: number)\n {\n // 1. Get user's role\n const userWithRole = await this.readDb\n .select({\n roleId: roles.id,\n roleName: roles.name,\n roleDisplayName: roles.displayName,\n rolePriority: roles.priority,\n })\n .from(users)\n .innerJoin(roles, eq(users.roleId, roles.id))\n .where(eq(users.id, userId))\n .limit(1)\n .then(rows => rows[0] ?? null);\n\n if (!userWithRole)\n {\n throw new NotFoundError({ message: '[@spfn/auth] User or role not found' });\n }\n\n // 2. Get role permissions\n const rolePerms = await this.readDb\n .select({\n id: permissions.id,\n name: permissions.name,\n displayName: permissions.displayName,\n category: permissions.category,\n })\n .from(rolePermissions)\n .innerJoin(permissions, eq(rolePermissions.permissionId, permissions.id))\n .where(\n and(\n eq(rolePermissions.roleId, userWithRole.roleId),\n eq(permissions.isActive, true)\n )\n );\n\n return {\n role: {\n id: userWithRole.roleId,\n name: userWithRole.roleName,\n displayName: userWithRole.roleDisplayName,\n priority: userWithRole.rolePriority,\n },\n permissions: rolePerms.map(perm => ({\n id: perm.id,\n name: perm.name,\n displayName: perm.displayName,\n category: perm.category ?? undefined,\n })),\n };\n }\n\n /**\n * Minimal user data 조회 (auth session용)\n * Read replica 사용\n *\n * @param userId - User ID\n * @returns Minimal user data\n */\n async fetchMinimalUserData(userId: number)\n {\n const user = await this.readDb\n .select({\n id: users.id,\n email: users.email,\n emailVerifiedAt: users.emailVerifiedAt,\n phoneVerifiedAt: users.phoneVerifiedAt,\n })\n .from(users)\n .where(eq(users.id, userId))\n .limit(1)\n .then(rows => rows[0] ?? null);\n\n if (!user)\n {\n throw new NotFoundError({ message: '[@spfn/auth] User not found' });\n }\n\n return {\n userId: user.id,\n email: user.email,\n isEmailVerified: !!user.emailVerifiedAt,\n isPhoneVerified: !!user.phoneVerifiedAt,\n };\n }\n\n /**\n * Full user data 조회 (user profile용)\n * Read replica 사용\n *\n * @param userId - User ID\n * @returns Full user data\n */\n async fetchFullUserData(userId: number)\n {\n const user = await this.readDb\n .select({\n id: users.id,\n email: users.email,\n emailVerifiedAt: users.emailVerifiedAt,\n phoneVerifiedAt: users.phoneVerifiedAt,\n lastLoginAt: users.lastLoginAt,\n createdAt: users.createdAt,\n updatedAt: users.updatedAt,\n })\n .from(users)\n .where(eq(users.id, userId))\n .limit(1)\n .then(rows => rows[0] ?? null);\n\n if (!user)\n {\n throw new EntityNotFoundError({ resource: 'users', id: userId });\n }\n\n return {\n userId: user.id,\n email: user.email,\n isEmailVerified: !!user.emailVerifiedAt,\n isPhoneVerified: !!user.phoneVerifiedAt,\n lastLoginAt: user.lastLoginAt,\n createdAt: user.createdAt,\n updatedAt: user.updatedAt,\n };\n }\n}\n\n// Default instance export\nexport const usersRepository = new UsersRepository();","/**\n * User Public Keys Repository\n *\n * 사용자 공개키 관리를 위한 Repository\n * BaseRepository를 상속받아 자동 트랜잭션 컨텍스트 지원 및 Read/Write 분리\n */\n\nimport { NewUserPublicKey, userPublicKeys } from \"../entities/user-public-keys\";\nimport { BaseRepository } from '@spfn/core/db';\nimport { eq, and } from 'drizzle-orm';\n\n/**\n * User Public Keys Repository 클래스\n *\n * BaseRepository를 상속받아 다음 기능을 제공:\n * - 자동 트랜잭션 컨텍스트 감지 및 사용\n * - Read/Write 연결 분리 (replica 활용)\n * - 타입 안전성\n */\nexport class KeysRepository extends BaseRepository\n{\n /**\n * Key ID와 User ID로 공개키 조회\n * Read replica 사용\n */\n async findByKeyIdAndUserId(keyId: string, userId: number)\n {\n const result = await this.readDb\n .select()\n .from(userPublicKeys)\n .where(\n and(\n eq(userPublicKeys.keyId, keyId),\n eq(userPublicKeys.userId, userId)\n )\n )\n .limit(1);\n\n return result[0] ?? null;\n }\n\n /**\n * User ID로 모든 공개키 조회\n * Read replica 사용\n */\n async findAllByUserId(userId: number)\n {\n return this.readDb\n .select()\n .from(userPublicKeys)\n .where(eq(userPublicKeys.userId, userId));\n }\n\n /**\n * User ID로 활성 공개키만 조회\n * Read replica 사용\n */\n async findActiveByUserId(userId: number)\n {\n return this.readDb\n .select()\n .from(userPublicKeys)\n .where(\n and(\n eq(userPublicKeys.userId, userId),\n eq(userPublicKeys.isActive, true)\n )\n );\n }\n\n /**\n * 공개키 생성\n * Write primary 사용\n */\n async create(data: NewUserPublicKey)\n {\n return await this._create(userPublicKeys, {\n ...data,\n createdAt: data.createdAt || new Date(),\n });\n }\n\n /**\n * 공개키 revoke (비활성화)\n * Write primary 사용\n */\n async revokeByKeyIdAndUserId(\n keyId: string,\n userId: number,\n reason: string\n )\n {\n const result = await this.db\n .update(userPublicKeys)\n .set({\n isActive: false,\n revokedAt: new Date(),\n revokedReason: reason,\n })\n .where(\n and(\n eq(userPublicKeys.keyId, keyId),\n eq(userPublicKeys.userId, userId)\n )\n )\n .returning();\n\n return result[0] ?? null;\n }\n\n /**\n * 공개키 삭제\n * Write primary 사용\n */\n async deleteByKeyIdAndUserId(keyId: string, userId: number)\n {\n const result = await this.db\n .delete(userPublicKeys)\n .where(\n and(\n eq(userPublicKeys.keyId, keyId),\n eq(userPublicKeys.userId, userId)\n )\n )\n .returning();\n\n return result[0] ?? null;\n }\n\n /**\n * 마지막 사용 시간 업데이트\n * Write primary 사용\n */\n async updateLastUsed(keyId: string, userId: number)\n {\n const result = await this.db\n .update(userPublicKeys)\n .set({\n lastUsedAt: new Date(),\n })\n .where(\n and(\n eq(userPublicKeys.keyId, keyId),\n eq(userPublicKeys.userId, userId)\n )\n )\n .returning();\n\n return result[0] ?? null;\n }\n\n /**\n * Key ID로 활성 공개키 조회 (authenticate용)\n * Read replica 사용\n */\n async findActiveByKeyId(keyId: string)\n {\n const result = await this.readDb\n .select()\n .from(userPublicKeys)\n .where(\n and(\n eq(userPublicKeys.keyId, keyId),\n eq(userPublicKeys.isActive, true)\n )\n )\n .limit(1);\n\n return result[0] ?? null;\n }\n\n /**\n * Primary key로 마지막 사용 시간 업데이트 (authenticate용)\n * Write primary 사용\n */\n async updateLastUsedById(id: number)\n {\n const result = await this.db\n .update(userPublicKeys)\n .set({\n lastUsedAt: new Date(),\n })\n .where(eq(userPublicKeys.id, id))\n .returning();\n\n return result[0] ?? null;\n }\n}\n\n// Default instance export\nexport const keysRepository = new KeysRepository();","/**\n * Verification Codes Repository\n *\n * 인증 코드 관리를 위한 Repository\n * BaseRepository를 상속받아 자동 트랜잭션 컨텍스트 지원 및 Read/Write 분리\n */\n\nimport { NewVerificationCode, verificationCodes } from \"../entities/verification-codes\";\nimport type { VerificationPurpose } from \"../routes/schema\";\nimport { BaseRepository } from '@spfn/core/db';\nimport { eq, and, lt, gt, isNull } from 'drizzle-orm';\n\n/**\n * Verification Codes Repository 클래스\n *\n * BaseRepository를 상속받아 다음 기능을 제공:\n * - 자동 트랜잭션 컨텍스트 감지 및 사용\n * - Read/Write 연결 분리 (replica 활용)\n * - 타입 안전성\n */\nexport class VerificationCodesRepository extends BaseRepository\n{\n /**\n * Target과 Purpose로 유효한 인증 코드 조회\n * (만료되지 않고, 사용되지 않은 코드)\n * Read replica 사용\n */\n async findValidByTargetAndPurpose(\n target: string,\n purpose: VerificationPurpose\n ) {\n const now = new Date();\n\n const result = await this.readDb\n .select()\n .from(verificationCodes)\n .where(\n and(\n eq(verificationCodes.target, target),\n eq(verificationCodes.purpose, purpose),\n isNull(verificationCodes.usedAt),\n gt(verificationCodes.expiresAt, now)\n )\n )\n .limit(1);\n\n return result[0] ?? null;\n }\n\n /**\n * ID로 인증 코드 조회\n * Read replica 사용\n */\n async findById(id: number)\n {\n const result = await this.readDb\n .select()\n .from(verificationCodes)\n .where(eq(verificationCodes.id, id))\n .limit(1);\n\n return result[0] ?? null;\n }\n\n /**\n * 인증 코드 생성\n * Write primary 사용\n */\n async create(data: NewVerificationCode)\n {\n return await this._create(verificationCodes, {\n ...data,\n createdAt: new Date(),\n updatedAt: new Date(),\n });\n }\n\n /**\n * 인증 코드 사용 처리\n * Write primary 사용\n */\n async markAsUsed(id: number)\n {\n const result = await this.db\n .update(verificationCodes)\n .set({\n usedAt: new Date(),\n updatedAt: new Date(),\n })\n .where(eq(verificationCodes.id, id))\n .returning();\n\n return result[0] ?? null;\n }\n\n /**\n * 시도 횟수 증가\n * Write primary 사용\n */\n async incrementAttempts(id: number)\n {\n const code = await this.findById(id);\n if (!code) return null;\n\n const result = await this.db\n .update(verificationCodes)\n .set({\n attempts: code.attempts + 1,\n updatedAt: new Date(),\n })\n .where(eq(verificationCodes.id, id))\n .returning();\n\n return result[0] ?? null;\n }\n\n /**\n * 만료된 코드 삭제\n * Write primary 사용\n */\n async deleteExpired()\n {\n const now = new Date();\n\n const result = await this.db\n .delete(verificationCodes)\n .where(lt(verificationCodes.expiresAt, now))\n .returning();\n\n return result.length;\n }\n\n /**\n * Target의 모든 이전 코드 무효화 (새 코드 발급 시)\n * Write primary 사용\n */\n async invalidatePreviousCodes(\n target: string,\n purpose: VerificationPurpose\n ) {\n const result = await this.db\n .update(verificationCodes)\n .set({\n usedAt: new Date(),\n updatedAt: new Date(),\n })\n .where(\n and(\n eq(verificationCodes.target, target),\n eq(verificationCodes.purpose, purpose),\n isNull(verificationCodes.usedAt)\n )\n )\n .returning();\n\n return result.length;\n }\n}\n\n// Default instance export\nexport const verificationCodesRepository = new VerificationCodesRepository();","/**\n * Roles Repository\n *\n * 역할 관리를 위한 Repository\n * BaseRepository를 상속받아 자동 트랜잭션 컨텍스트 지원 및 Read/Write 분리\n */\n\nimport { NewRoleEntity, roles } from \"../entities/roles\";\nimport { BaseRepository } from '@spfn/core/db';\nimport { eq, asc } from 'drizzle-orm';\n\n/**\n * Roles Repository 클래스\n */\nexport class RolesRepository extends BaseRepository\n{\n /**\n * ID로 역할 조회\n */\n async findById(id: number)\n {\n const result = await this.readDb\n .select()\n .from(roles)\n .where(eq(roles.id, id))\n .limit(1);\n\n return result[0] ?? null;\n }\n\n /**\n * Name으로 역할 조회\n */\n async findByName(name: string)\n {\n const result = await this.readDb\n .select()\n .from(roles)\n .where(eq(roles.name, name))\n .limit(1);\n\n return result[0] ?? null;\n }\n\n /**\n * 모든 역할 조회 (priority 순)\n */\n async findAll()\n {\n return this.readDb\n .select()\n .from(roles)\n .orderBy(asc(roles.priority));\n }\n\n /**\n * 활성 역할만 조회\n */\n async findActive()\n {\n return this.readDb\n .select()\n .from(roles)\n .where(eq(roles.isActive, true))\n .orderBy(asc(roles.priority));\n }\n\n /**\n * 역할 생성\n */\n async create(data: NewRoleEntity)\n {\n return await this._create(roles, {\n ...data,\n createdAt: new Date(),\n updatedAt: new Date(),\n });\n }\n\n /**\n * 역할 업데이트\n */\n async updateById(id: number, data: Partial<NewRoleEntity>)\n {\n const result = await this.db\n .update(roles)\n .set({ ...data, updatedAt: new Date() })\n .where(eq(roles.id, id))\n .returning();\n\n return result[0] ?? null;\n }\n\n /**\n * 역할 삭제\n */\n async deleteById(id: number)\n {\n const result = await this.db\n .delete(roles)\n .where(eq(roles.id, id))\n .returning();\n\n return result[0] ?? null;\n }\n}\n\n// Default instance export\nexport const rolesRepository = new RolesRepository();","/**\n * Permissions Repository\n *\n * 권한 관리를 위한 Repository\n * BaseRepository를 상속받아 자동 트랜잭션 컨텍스트 지원 및 Read/Write 분리\n */\n\nimport { NewPermissionEntity, PermissionEntity, permissions } from \"../entities/permissions\";\nimport type { PermissionCategory } from \"../rbac\";\nimport { BaseRepository } from '@spfn/core/db';\nimport { asc, eq, inArray } from 'drizzle-orm';\n\n/**\n * Permissions Repository 클래스\n */\nexport class PermissionsRepository extends BaseRepository\n{\n /**\n * ID로 권한 조회\n */\n async findById(id: number)\n {\n const result = await this.readDb\n .select()\n .from(permissions)\n .where(eq(permissions.id, id))\n .limit(1);\n\n return result[0] ?? null;\n }\n\n /**\n * Name으로 권한 조회\n */\n async findByName(name: string)\n {\n const result = await this.readDb\n .select()\n .from(permissions)\n .where(eq(permissions.name, name))\n .limit(1);\n\n return result[0] ?? null;\n }\n\n /**\n * 여러 Name으로 권한 조회\n */\n async findByNames(names: string[]): Promise<PermissionEntity[]>\n {\n if (names.length === 0) return [];\n\n return this.readDb\n .select()\n .from(permissions)\n .where(inArray(permissions.name, names));\n }\n\n /**\n * 모든 권한 조회\n */\n async findAll(): Promise<PermissionEntity[]>\n {\n return this.readDb\n .select()\n .from(permissions)\n .orderBy(asc(permissions.name));\n }\n\n /**\n * 활성 권한만 조회\n */\n async findActive(): Promise<PermissionEntity[]>\n {\n return this.readDb\n .select()\n .from(permissions)\n .where(eq(permissions.isActive, true))\n .orderBy(asc(permissions.name));\n }\n\n /**\n * 카테고리별 권한 조회\n */\n async findByCategory(category: PermissionCategory): Promise<PermissionEntity[]>\n {\n return this.readDb\n .select()\n .from(permissions)\n .where(eq(permissions.category, category))\n .orderBy(asc(permissions.name));\n }\n\n /**\n * 권한 생성\n */\n async create(data: NewPermissionEntity): Promise<PermissionEntity>\n {\n return await this._create(permissions, {\n ...data,\n createdAt: new Date(),\n updatedAt: new Date(),\n });\n }\n\n /**\n * 여러 권한 일괄 생성\n */\n async createMany(data: NewPermissionEntity[]): Promise<PermissionEntity[]>\n {\n if (data.length === 0) return [];\n\n const now = new Date();\n const valuesWithTimestamps = data.map(d => ({\n ...d,\n createdAt: now,\n updatedAt: now,\n }));\n\n return await this._createMany(permissions, valuesWithTimestamps);\n }\n\n /**\n * 권한 업데이트\n */\n async updateById(id: number, data: Partial<NewPermissionEntity>)\n {\n const result = await this.db\n .update(permissions)\n .set({ ...data, updatedAt: new Date() })\n .where(eq(permissions.id, id))\n .returning();\n\n return result[0] ?? null;\n }\n\n /**\n * 권한 삭제\n */\n async deleteById(id: number)\n {\n const result = await this.db\n .delete(permissions)\n .where(eq(permissions.id, id))\n .returning();\n\n return result[0] ?? null;\n }\n}\n\n// Default instance export\nexport const permissionsRepository = new PermissionsRepository();","/**\n * Role Permissions Repository\n *\n * 역할-권한 매핑 관리를 위한 Repository\n * BaseRepository를 상속받아 자동 트랜잭션 컨텍스트 지원 및 Read/Write 분리\n */\n\nimport { NewRolePermission, RolePermission, rolePermissions } from \"../entities/role-permissions\";\nimport { BaseRepository } from '@spfn/core/db';\nimport { and, eq } from 'drizzle-orm';\n\n/**\n * Role Permissions Repository 클래스\n */\nexport class RolePermissionsRepository extends BaseRepository\n{\n /**\n * 역할 ID로 모든 권한 조회\n */\n async findByRoleId(roleId: number)\n {\n return this.readDb\n .select()\n .from(rolePermissions)\n .where(eq(rolePermissions.roleId, roleId));\n }\n\n /**\n * 권한 ID로 모든 역할 조회\n */\n async findByPermissionId(permissionId: number)\n {\n return this.readDb\n .select()\n .from(rolePermissions)\n .where(eq(rolePermissions.permissionId, permissionId));\n }\n\n /**\n * 역할-권한 매핑 생성\n */\n async create(data: NewRolePermission): Promise<RolePermission>\n {\n return await this._create(rolePermissions, {\n ...data,\n createdAt: new Date(),\n updatedAt: new Date(),\n });\n }\n\n /**\n * 여러 역할-권한 매핑 일괄 생성\n */\n async createMany(data: NewRolePermission[])\n {\n if (data.length === 0) return [];\n\n const now = new Date();\n const valuesWithTimestamps = data.map(d => ({\n ...d,\n createdAt: now,\n updatedAt: now,\n }));\n\n return await this._createMany(rolePermissions, valuesWithTimestamps);\n }\n\n /**\n * 특정 역할-권한 매핑 삭제\n */\n async deleteByRoleIdAndPermissionId(\n roleId: number,\n permissionId: number\n ): Promise<RolePermission | null>\n {\n const result = await this.db\n .delete(rolePermissions)\n .where(\n and(\n eq(rolePermissions.roleId, roleId),\n eq(rolePermissions.permissionId, permissionId)\n )\n )\n .returning();\n\n return result[0] ?? null;\n }\n\n /**\n * 역할의 모든 권한 매핑 삭제\n */\n async deleteByRoleId(roleId: number)\n {\n const result = await this.db\n .delete(rolePermissions)\n .where(eq(rolePermissions.roleId, roleId))\n .returning();\n\n return result.length;\n }\n\n /**\n * 역할에 권한 ID 배열로 설정 (기존 삭제 후 재생성)\n */\n async setPermissionsForRole(roleId: number, permissionIds: number[])\n {\n // 기존 권한 삭제\n await this.deleteByRoleId(roleId);\n\n // 새 권한 추가\n if (permissionIds.length === 0) return [];\n\n const mappings = permissionIds.map(permissionId => ({\n roleId,\n permissionId,\n }));\n\n return await this.createMany(mappings);\n }\n}\n\n// Default instance export\nexport const rolePermissionsRepository = new RolePermissionsRepository();","/**\n * User Permissions Repository\n *\n * 사용자별 권한 오버라이드 관리를 위한 Repository\n * BaseRepository를 상속받아 자동 트랜잭션 컨텍스트 지원 및 Read/Write 분리\n */\n\nimport { NewUserPermission, userPermissions } from \"../entities/user-permissions\";\nimport { BaseRepository } from '@spfn/core/db';\nimport { eq, and, or, isNull, isNotNull, lt, gt } from 'drizzle-orm';\n\n/**\n * User Permissions Repository 클래스\n */\nexport class UserPermissionsRepository extends BaseRepository\n{\n /**\n * 사용자 ID로 모든 권한 오버라이드 조회\n */\n async findByUserId(userId: number)\n {\n return this.readDb\n .select()\n .from(userPermissions)\n .where(eq(userPermissions.userId, userId));\n }\n\n /**\n * 사용자 ID로 유효한 권한 오버라이드만 조회\n * (만료되지 않거나 만료 시간이 없는 것)\n */\n async findValidByUserId(userId: number)\n {\n const now = new Date();\n\n return this.readDb\n .select()\n .from(userPermissions)\n .where(\n and(\n eq(userPermissions.userId, userId),\n or(\n isNull(userPermissions.expiresAt),\n gt(userPermissions.expiresAt, now)\n )\n )\n );\n }\n\n /**\n * 특정 사용자-권한 매핑 조회\n */\n async findByUserIdAndPermissionId(\n userId: number,\n permissionId: number\n )\n {\n const result = await this.readDb\n .select()\n .from(userPermissions)\n .where(\n and(\n eq(userPermissions.userId, userId),\n eq(userPermissions.permissionId, permissionId)\n )\n )\n .limit(1);\n\n return result[0] ?? null;\n }\n\n /**\n * 사용자 권한 오버라이드 생성\n */\n async create(data: NewUserPermission)\n {\n return await this._create(userPermissions, {\n ...data,\n createdAt: new Date(),\n updatedAt: new Date(),\n });\n }\n\n /**\n * 사용자 권한 오버라이드 업데이트\n */\n async updateById(id: number, data: Partial<NewUserPermission>)\n {\n const result = await this.db\n .update(userPermissions)\n .set({ ...data, updatedAt: new Date() })\n .where(eq(userPermissions.id, id))\n .returning();\n\n return result[0] ?? null;\n }\n\n /**\n * 특정 사용자-권한 매핑 삭제\n */\n async deleteByUserIdAndPermissionId(\n userId: number,\n permissionId: number\n ) {\n const result = await this.db\n .delete(userPermissions)\n .where(\n and(\n eq(userPermissions.userId, userId),\n eq(userPermissions.permissionId, permissionId)\n )\n )\n .returning();\n\n return result[0] ?? null;\n }\n\n /**\n * 사용자의 모든 권한 오버라이드 삭제\n */\n async deleteByUserId(userId: number)\n {\n const result = await this.db\n .delete(userPermissions)\n .where(eq(userPermissions.userId, userId))\n .returning();\n\n return result.length;\n }\n\n /**\n * 만료된 권한 오버라이드 삭제\n */\n async deleteExpired()\n {\n const now = new Date();\n\n const result = await this.db\n .delete(userPermissions)\n .where(\n and(\n isNotNull(userPermissions.expiresAt),\n lt(userPermissions.expiresAt, now)\n )\n )\n .returning();\n\n return result.length;\n }\n}\n\n// Default instance export\nexport const userPermissionsRepository = new UserPermissionsRepository();","/**\n * User Profiles Repository\n *\n * 사용자 프로필 관리를 위한 Repository\n * BaseRepository를 상속받아 자동 트랜잭션 컨텍스트 지원 및 Read/Write 분리\n */\n\nimport { NewUserProfile, userProfiles } from \"../entities/user-profiles\";\nimport { BaseRepository } from '@spfn/core/db';\nimport { eq } from 'drizzle-orm';\n\n/**\n * User Profiles Repository 클래스\n */\nexport class UserProfilesRepository extends BaseRepository\n{\n /**\n * ID로 프로필 조회\n */\n async findById(id: number)\n {\n const result = await this.readDb\n .select()\n .from(userProfiles)\n .where(eq(userProfiles.id, id))\n .limit(1);\n\n return result[0] ?? null;\n }\n\n /**\n * User ID로 프로필 조회\n */\n async findByUserId(userId: number)\n {\n const result = await this.readDb\n .select()\n .from(userProfiles)\n .where(eq(userProfiles.userId, userId))\n .limit(1);\n\n return result[0] ?? null;\n }\n\n /**\n * 프로필 생성\n */\n async create(data: NewUserProfile)\n {\n return await this._create(userProfiles, {\n ...data,\n createdAt: new Date(),\n updatedAt: new Date(),\n });\n }\n\n /**\n * 프로필 업데이트 (by ID)\n */\n async updateById(id: number, data: Partial<NewUserProfile>)\n {\n const result = await this.db\n .update(userProfiles)\n .set({ ...data, updatedAt: new Date() })\n .where(eq(userProfiles.id, id))\n .returning();\n\n return result[0] ?? null;\n }\n\n /**\n * 프로필 업데이트 (by User ID)\n */\n async updateByUserId(userId: number, data: Partial<NewUserProfile>)\n {\n const result = await this.db\n .update(userProfiles)\n .set({ ...data, updatedAt: new Date() })\n .where(eq(userProfiles.userId, userId))\n .returning();\n\n return result[0] ?? null;\n }\n\n /**\n * 프로필 삭제 (by ID)\n */\n async deleteById(id: number)\n {\n const result = await this.db\n .delete(userProfiles)\n .where(eq(userProfiles.id, id))\n .returning();\n\n return result[0] ?? null;\n }\n\n /**\n * 프로필 삭제 (by User ID)\n */\n async deleteByUserId(userId: number)\n {\n const result = await this.db\n .delete(userProfiles)\n .where(eq(userProfiles.userId, userId))\n .returning();\n\n return result[0] ?? null;\n }\n\n /**\n * 프로필 Upsert (by User ID)\n *\n * 프로필이 없으면 생성, 있으면 업데이트\n * 새로 생성 시 displayName은 필수 (없으면 'User'로 설정)\n */\n async upsertByUserId(userId: number, data: Partial<Omit<NewUserProfile, 'userId'>>)\n {\n const existing = await this.findByUserId(userId);\n\n if (existing)\n {\n return await this.updateByUserId(userId, data);\n }\n\n return await this.create({\n userId,\n displayName: data.displayName || 'User',\n ...data,\n });\n }\n\n /**\n * User ID로 프로필 데이터 조회 (formatted)\n *\n * API 응답에 최적화된 형식으로 반환\n */\n async fetchProfileData(userId: number)\n {\n const profile = await this.readDb\n .select({\n profileId: userProfiles.id,\n displayName: userProfiles.displayName,\n firstName: userProfiles.firstName,\n lastName: userProfiles.lastName,\n avatarUrl: userProfiles.avatarUrl,\n bio: userProfiles.bio,\n locale: userProfiles.locale,\n timezone: userProfiles.timezone,\n website: userProfiles.website,\n location: userProfiles.location,\n company: userProfiles.company,\n jobTitle: userProfiles.jobTitle,\n metadata: userProfiles.metadata,\n createdAt: userProfiles.createdAt,\n updatedAt: userProfiles.updatedAt,\n })\n .from(userProfiles)\n .where(eq(userProfiles.userId, userId))\n .limit(1)\n .then(rows => rows[0] ?? null);\n\n if (!profile)\n {\n return null;\n }\n\n return {\n profileId: profile.profileId,\n displayName: profile.displayName,\n firstName: profile.firstName,\n lastName: profile.lastName,\n avatarUrl: profile.avatarUrl,\n bio: profile.bio,\n locale: profile.locale || 'en',\n timezone: profile.timezone || 'UTC',\n website: profile.website,\n location: profile.location,\n company: profile.company,\n jobTitle: profile.jobTitle,\n metadata: profile.metadata,\n createdAt: profile.createdAt,\n updatedAt: profile.updatedAt,\n };\n }\n}\n\n// Default instance export\nexport const userProfilesRepository = new UserProfilesRepository();","/**\n * Invitations Repository\n *\n * 사용자 초대 관리를 위한 Repository\n * BaseRepository를 상속받아 자동 트랜잭션 컨텍스트 지원 및 Read/Write 분리\n */\n\nimport { eq, and, lt, desc, sql } from 'drizzle-orm';\nimport { BaseRepository } from '@spfn/core/db';\n\nimport { users } from \"../entities/users\";\nimport { roles } from \"../entities/roles\";\nimport type { InvitationStatus } from \"../types\";\nimport { userInvitations, NewInvitation } from \"../entities/user-invitations\";\n\n/**\n * Invitations Repository 클래스\n */\nexport class InvitationsRepository extends BaseRepository\n{\n /**\n * ID로 초대 조회\n */\n async findById(id: number)\n {\n const result = await this.readDb\n .select()\n .from(userInvitations)\n .where(eq(userInvitations.id, id))\n .limit(1);\n\n return result[0] ?? null;\n }\n\n /**\n * Token으로 초대 조회\n */\n async findByToken(token: string)\n {\n const result = await this.readDb\n .select()\n .from(userInvitations)\n .where(eq(userInvitations.token, token))\n .limit(1);\n\n return result[0] ?? null;\n }\n\n /**\n * 이메일로 초대 조회 (pending 상태만)\n */\n async findPendingByEmail(email: string)\n {\n const result = await this.readDb\n .select()\n .from(userInvitations)\n .where(\n and(\n eq(userInvitations.email, email),\n eq(userInvitations.status, 'pending')\n )\n )\n .limit(1);\n\n return result[0] ?? null;\n }\n\n /**\n * 초대자 ID로 모든 초대 조회\n */\n async findByInvitedBy(invitedBy: number)\n {\n return this.readDb\n .select()\n .from(userInvitations)\n .where(eq(userInvitations.invitedBy, invitedBy));\n }\n\n /**\n * 상태별 초대 조회\n */\n async findByStatus(status: InvitationStatus)\n {\n return this.readDb\n .select()\n .from(userInvitations)\n .where(eq(userInvitations.status, status));\n }\n\n /**\n * 초대 생성\n */\n async create(data: NewInvitation)\n {\n return await this._create(userInvitations, {\n ...data,\n createdAt: new Date(),\n updatedAt: new Date(),\n });\n }\n\n /**\n * 초대 상태 업데이트\n */\n async updateStatus(\n id: number,\n status: InvitationStatus,\n timestamp?: Date\n ) {\n const updates: any = {\n status,\n updatedAt: new Date(),\n };\n\n if (timestamp)\n {\n if (status === 'accepted')\n {\n updates.acceptedAt = timestamp;\n }\n else if (status === 'cancelled')\n {\n updates.cancelledAt = timestamp;\n }\n }\n\n const result = await this.db\n .update(userInvitations)\n .set(updates)\n .where(eq(userInvitations.id, id))\n .returning();\n\n return result[0] ?? null;\n }\n\n /**\n * 초대 삭제\n */\n async deleteById(id: number)\n {\n const result = await this.db\n .delete(userInvitations)\n .where(eq(userInvitations.id, id))\n .returning();\n\n return result[0] ?? null;\n }\n\n /**\n * 만료된 초대 상태 업데이트\n */\n async updateExpiredInvitations(): Promise<number>\n {\n const now = new Date();\n\n const result = await this.db\n .update(userInvitations)\n .set({\n status: 'expired',\n updatedAt: now,\n })\n .where(\n and(\n eq(userInvitations.status, 'pending'),\n lt(userInvitations.expiresAt, now)\n )\n )\n .returning();\n\n return result.length;\n }\n\n /**\n * Token으로 초대 조회 (role, inviter 정보 포함)\n */\n async findByTokenWithDetails(token: string)\n {\n const result = await this.readDb\n .select({\n id: userInvitations.id,\n email: userInvitations.email,\n token: userInvitations.token,\n roleId: userInvitations.roleId,\n invitedBy: userInvitations.invitedBy,\n status: userInvitations.status,\n expiresAt: userInvitations.expiresAt,\n acceptedAt: userInvitations.acceptedAt,\n cancelledAt: userInvitations.cancelledAt,\n metadata: userInvitations.metadata,\n createdAt: userInvitations.createdAt,\n updatedAt: userInvitations.updatedAt,\n role: {\n id: roles.id,\n name: roles.name,\n displayName: roles.displayName,\n },\n inviter: {\n id: users.id,\n email: users.email,\n },\n })\n .from(userInvitations)\n .innerJoin(roles, eq(userInvitations.roleId, roles.id))\n .innerJoin(users, eq(userInvitations.invitedBy, users.id))\n .where(eq(userInvitations.token, token))\n .limit(1);\n\n return result[0] ?? null;\n }\n\n /**\n * 초대 목록 조회 (filtering + pagination + JOIN)\n */\n async list(params: {\n status?: InvitationStatus;\n invitedBy?: number;\n page?: number;\n limit?: number;\n }) {\n const { status, invitedBy, page = 1, limit = 20 } = params;\n const offset = (page - 1) * limit;\n\n // Build where conditions\n const conditions = [];\n if (status)\n {\n conditions.push(eq(userInvitations.status, status));\n }\n if (invitedBy)\n {\n conditions.push(eq(userInvitations.invitedBy, invitedBy));\n }\n\n const whereClause = conditions.length > 0 ? and(...conditions) : undefined;\n\n // Get total count\n const countResult = await this.readDb\n .select({ count: sql<number>`count(*)` })\n .from(userInvitations)\n .where(whereClause);\n\n const total = Number(countResult[0]?.count || 0);\n\n // Get paginated results with joins\n const results = await this.readDb\n .select({\n id: userInvitations.id,\n email: userInvitations.email,\n token: userInvitations.token,\n roleId: userInvitations.roleId,\n invitedBy: userInvitations.invitedBy,\n status: userInvitations.status,\n expiresAt: userInvitations.expiresAt,\n acceptedAt: userInvitations.acceptedAt,\n cancelledAt: userInvitations.cancelledAt,\n metadata: userInvitations.metadata,\n createdAt: userInvitations.createdAt,\n updatedAt: userInvitations.updatedAt,\n role: {\n id: roles.id,\n name: roles.name,\n displayName: roles.displayName,\n },\n inviter: {\n id: users.id,\n email: users.email,\n },\n })\n .from(userInvitations)\n .innerJoin(roles, eq(userInvitations.roleId, roles.id))\n .innerJoin(users, eq(userInvitations.invitedBy, users.id))\n .where(whereClause)\n .orderBy(desc(userInvitations.createdAt))\n .limit(limit)\n .offset(offset);\n\n return {\n invitations: results,\n total,\n page,\n limit,\n totalPages: Math.ceil(total / limit),\n };\n }\n\n /**\n * 초대 업데이트 (일반 업데이트 - 모든 필드 가능)\n */\n async updateById(id: number, data: Partial<NewInvitation>)\n {\n const result = await this.db\n .update(userInvitations)\n .set({\n ...data,\n updatedAt: new Date(),\n })\n .where(eq(userInvitations.id, id))\n .returning();\n\n return result[0] ?? null;\n }\n\n /**\n * 초대 재전송 (status와 expiresAt 동시 업데이트)\n */\n async resend(id: number, newExpiresAt: Date)\n {\n const result = await this.db\n .update(userInvitations)\n .set({\n status: 'pending',\n expiresAt: newExpiresAt,\n updatedAt: new Date(),\n })\n .where(eq(userInvitations.id, id))\n .returning();\n\n return result[0] ?? null;\n }\n\n /**\n * 초대 취소 (status, metadata 동시 업데이트)\n */\n async cancel(\n id: number,\n cancelledBy: number,\n reason?: string,\n currentMetadata?: Record<string, any> | null\n ) {\n const newMetadata = currentMetadata\n ? { ...currentMetadata, cancelReason: reason, cancelledBy }\n : { cancelReason: reason, cancelledBy };\n\n const result = await this.db\n .update(userInvitations)\n .set({\n status: 'cancelled',\n cancelledAt: new Date(),\n metadata: newMetadata,\n updatedAt: new Date(),\n })\n .where(eq(userInvitations.id, id))\n .returning();\n\n return result[0] ?? null;\n }\n}\n\n// Default instance export\nexport const invitationsRepository = new InvitationsRepository();","/**\n * @spfn/auth - Repositories\n *\n * Repository layer for data access with automatic Read/Write splitting\n * and transaction context support through BaseRepository pattern\n */\n\nexport * from './users.repository';\nexport * from './keys.repository';\nexport * from './verification-codes.repository';\nexport * from './roles.repository';\nexport * from './permissions.repository';\nexport * from './role-permissions.repository';\nexport * from './user-permissions.repository';\nexport * from './user-profiles.repository';\nexport * from './invitations.repository';","/**\n * @spfn/auth - Role Service\n *\n * Role management functions for runtime role creation and modification\n */\n\nimport {\n rolesRepository,\n permissionsRepository,\n rolePermissionsRepository,\n} from '../repositories';\nimport type { Role } from '../entities/roles';\n\n/**\n * Create a new custom role\n *\n * @param data - Role configuration\n * @returns Created role\n * @throws Error if role name already exists\n *\n * @example\n * ```typescript\n * const role = await createRole({\n * name: 'content-creator',\n * displayName: 'Content Creator',\n * description: 'Can create and publish content',\n * priority: 20,\n * permissionIds: [1n, 2n, 3n],\n * });\n * ```\n */\nexport async function createRole(data: {\n name: string;\n displayName: string;\n description?: string;\n priority?: number;\n permissionIds?: number[];\n}): Promise<Role>\n{\n // Check for duplicate name\n const existing = await rolesRepository.findByName(data.name);\n\n if (existing)\n {\n throw new Error(`Role with name '${data.name}' already exists`);\n }\n\n // Create role\n const newRole = await rolesRepository.create({\n name: data.name,\n displayName: data.displayName,\n description: data.description || null,\n priority: data.priority ?? 10,\n isSystem: false, // Custom roles are never system roles\n isBuiltin: false,\n isActive: true,\n });\n\n // Assign permissions if provided\n if (data.permissionIds && data.permissionIds.length > 0)\n {\n const mappings = data.permissionIds.map(permId => ({\n roleId: newRole.id,\n permissionId: Number(permId),\n }));\n\n await rolePermissionsRepository.createMany(mappings);\n }\n\n console.log(`[Auth] ✅ Created custom role: ${data.name}`);\n\n return newRole;\n}\n\n/**\n * Update an existing role\n *\n * @param roleId - Role ID\n * @param data - Update data\n * @returns Updated role\n * @throws Error if role is built-in (cannot modify)\n *\n * @example\n * ```typescript\n * await updateRole(1n, {\n * displayName: 'Senior Content Creator',\n * priority: 25,\n * });\n * ```\n */\nexport async function updateRole(\n roleId: number,\n data: {\n displayName?: string;\n description?: string;\n priority?: number;\n isActive?: boolean;\n }\n): Promise<Role>\n{\n const roleIdNum = Number(roleId);\n\n // Get role\n const role = await rolesRepository.findById(roleIdNum);\n\n if (!role)\n {\n throw new Error('Role not found');\n }\n\n // Cannot modify built-in role priority\n if (role.isBuiltin && data.priority !== undefined)\n {\n throw new Error('Cannot modify priority of built-in roles');\n }\n\n // Update role\n const updated = await rolesRepository.updateById(roleIdNum, data);\n\n if (!updated)\n {\n throw new Error('Failed to update role');\n }\n\n return updated;\n}\n\n/**\n * Delete a role\n *\n * @param roleId - Role ID\n * @throws Error if role is built-in or system role\n *\n * @example\n * ```typescript\n * await deleteRole(5n); // Delete custom role\n * ```\n */\nexport async function deleteRole(roleId: number): Promise<void>\n{\n const roleIdNum = Number(roleId);\n\n // Get role\n const role = await rolesRepository.findById(roleIdNum);\n\n if (!role)\n {\n throw new Error('Role not found');\n }\n\n // Cannot delete built-in roles\n if (role.isBuiltin)\n {\n throw new Error(`Cannot delete built-in role: ${role.name}`);\n }\n\n // Cannot delete system roles (optional protection)\n if (role.isSystem)\n {\n throw new Error(`Cannot delete system role: ${role.name}. Deactivate it instead.`);\n }\n\n // Delete role (cascade will remove role_permissions)\n await rolesRepository.deleteById(roleIdNum);\n\n console.log(`[Auth] 🗑️ Deleted role: ${role.name}`);\n}\n\n/**\n * Add permission to role\n *\n * @param roleId - Role ID\n * @param permissionId - Permission ID\n *\n * @example\n * ```typescript\n * await addPermissionToRole(1n, 5n);\n * ```\n */\nexport async function addPermissionToRole(roleId: number, permissionId: number): Promise<void>\n{\n const roleIdNum = Number(roleId);\n const permissionIdNum = Number(permissionId);\n\n // Check if mapping already exists\n const existingMappings = await rolePermissionsRepository.findByRoleId(roleIdNum);\n const alreadyExists = existingMappings.some(m => m.permissionId === permissionIdNum);\n\n if (alreadyExists)\n {\n return; // Already exists\n }\n\n // Create mapping\n await rolePermissionsRepository.create({\n roleId: roleIdNum,\n permissionId: permissionIdNum,\n });\n}\n\n/**\n * Remove permission from role\n *\n * @param roleId - Role ID\n * @param permissionId - Permission ID\n *\n * @example\n * ```typescript\n * await removePermissionFromRole(1n, 5n);\n * ```\n */\nexport async function removePermissionFromRole(roleId: number, permissionId: number): Promise<void>\n{\n const roleIdNum = Number(roleId);\n const permissionIdNum = Number(permissionId);\n\n await rolePermissionsRepository.deleteByRoleIdAndPermissionId(roleIdNum, permissionIdNum);\n}\n\n/**\n * Set permissions for a role (replaces all existing permissions)\n *\n * @param roleId - Role ID\n * @param permissionIds - Array of permission IDs\n *\n * @example\n * ```typescript\n * await setRolePermissions(1n, [1n, 2n, 3n]);\n * ```\n */\nexport async function setRolePermissions(roleId: number, permissionIds: number[]): Promise<void>\n{\n const roleIdNum = Number(roleId);\n const permissionIdNums = permissionIds.map(id => Number(id));\n\n await rolePermissionsRepository.setPermissionsForRole(roleIdNum, permissionIdNums);\n}\n\n/**\n * Get all roles\n *\n * @param includeInactive - Include inactive roles\n * @returns Array of roles\n *\n * @example\n * ```typescript\n * const roles = await getAllRoles();\n * ```\n */\nexport async function getAllRoles(includeInactive = false): Promise<Role[]>\n{\n if (includeInactive)\n {\n return await rolesRepository.findAll();\n }\n\n return await rolesRepository.findActive();\n}\n\n/**\n * Get role by name\n *\n * @param name - Role name\n * @returns Role or null\n *\n * @example\n * ```typescript\n * const role = await getRoleByName('admin');\n * ```\n */\nexport async function getRoleByName(name: string): Promise<Role | null>\n{\n return await rolesRepository.findByName(name);\n}\n\n/**\n * Get role permissions\n *\n * @param roleId - Role ID\n * @returns Array of permission names\n *\n * @example\n * ```typescript\n * const perms = await getRolePermissions(1n);\n * // ['user:read', 'user:write']\n * ```\n */\nexport async function getRolePermissions(roleId: number): Promise<string[]>\n{\n const roleIdNum = Number(roleId);\n\n // Get role-permission mappings\n const mappings = await rolePermissionsRepository.findByRoleId(roleIdNum);\n\n if (mappings.length === 0)\n {\n return [];\n }\n\n // Get permissions by IDs\n const permissionIds = mappings.map(m => m.permissionId);\n const perms = await Promise.all(\n permissionIds.map(id => permissionsRepository.findById(id))\n );\n\n // Filter out nulls and return names\n return perms\n .filter((p) => p !== null)\n .map(p => p.name);\n}","/**\n * @spfn/auth/server\n *\n * Server-side Only Module\n * 서버 전용 모듈 (서버 컴포넌트 + 백엔드)\n *\n * Includes:\n * - Routes (auth endpoints)\n * - Repositories (user, verification-code)\n * - Helpers (jwt, password)\n * - Middleware (authenticate, requirePermissions, requireRole)\n * - Services (auth, verification, key, user, rbac, permission, role)\n * - RBAC (roles, permissions, types)\n * - Setup functions\n *\n * @note This module should only be imported in server-side code\n */\n\n// ============================================================================\n// Router\n// ============================================================================\nimport '@spfn/auth/config';\n\n/**\n * Auth router for explicit registration\n *\n * @example\n * ```typescript\n * import { authRouter } from '@spfn/auth';\n * import { defineRouter } from '@spfn/core/route';\n *\n * export const appRouter = defineRouter({\n * auth: authRouter, // Mounted at /_auth/*\n * // ... other routes\n * });\n * ```\n */\nexport { mainAuthRouter as authRouter } from './server/routes/index.js';\n\n// ============================================================================\n// Services (Business Logic)\n// ============================================================================\n\nexport * from './server/services/index';\n\n// ============================================================================\n// Repositories (DB access)\n// ============================================================================\n\nexport * from './server/repositories/index';\n\n// ============================================================================\n// Helpers (JWT, Password)\n// ============================================================================\n\nexport * from './server/helpers/index';\n\n// ============================================================================\n// Middleware\n// ============================================================================\n\nexport * from './server/middleware/index';\nexport * from './server/entities';\n\n// ============================================================================\n// Types, Constants & Schemas\n// ============================================================================\n\nexport * from './server/types';\nexport * from './server/routes/schema'; // TypeBox schemas for validation\nexport * from './server/lib';\nexport * from './server/logger';\n\n// ============================================================================\n// Lifecycle Hooks\n// ============================================================================\n\nexport { createAuthLifecycle } from './server/lifecycle';","/**\n * @spfn/auth - Main Router\n *\n * Combines all auth-related routes into a single router\n */\n\nimport { defineRouter } from '@spfn/core/route';\nimport { authRouter } from './auth';\nimport { invitationRouter } from './invitations';\nimport { userRouter } from './users';\n\n/**\n * Main auth router\n * Exports all authentication-related routes\n *\n * Routes:\n * - Auth: /_auth/exists, /_auth/codes, /_auth/login, /_auth/logout, etc.\n * - Invitations: /_auth/invitations/*\n * - Users: /_auth/users/*\n */\nexport const mainAuthRouter = defineRouter({\n // Flatten all routes at root level\n ...authRouter.routes,\n ...invitationRouter.routes,\n ...userRouter.routes,\n});\n\n// For backward compatibility\nexport default mainAuthRouter;","/**\n * @spfn/auth - Auth Routes\n *\n * Thin route handlers that delegate to services\n */\n\nimport { EmailSchema, PhoneSchema, PasswordSchema, TargetTypeSchema, VerificationPurposeSchema } from \"../schema\";\nimport { getAuth, getUser } from '../../helpers';\nimport { KEY_ALGORITHM } from '../../types';\nimport {\n changePasswordService,\n checkAccountExistsService,\n loginService,\n logoutService,\n registerService,\n rotateKeyService,\n sendVerificationCodeService,\n verifyCodeService,\n getAuthSessionService\n} from '../../services';\nimport { Type } from '@sinclair/typebox';\nimport { Transactional } from '@spfn/core/db';\nimport { defineRouter, route } from '@spfn/core/route';\n\n/**\n * POST /_auth/exists - Check if account exists\n * Checks if an email or phone number is already registered\n */\nexport const checkAccountExists = route.post('/_auth/exists')\n .input({\n body: Type.Union([\n Type.Object({ email: EmailSchema }),\n Type.Object({ phone: PhoneSchema }),\n ])\n })\n .skip(['auth'])\n .handler(async (c) =>\n {\n const { body } = await c.data();\n return await checkAccountExistsService(body)\n });\n\n/**\n * POST /_auth/codes - Send verification code\n * Sends a 6-digit verification code to email or phone\n */\nexport const sendVerificationCode = route.post('/_auth/codes')\n .input({\n body: Type.Object({\n target: Type.String({\n description: 'Email address or phone number in E.164 format'\n }),\n targetType: TargetTypeSchema,\n purpose: VerificationPurposeSchema,\n })\n })\n .skip(['auth'])\n .handler(async (c) =>\n {\n const { body } = await c.data();\n return await sendVerificationCodeService(body)\n });\n\n/**\n * POST /_auth/codes/verify - Verify code (without creating account)\n * Validates verification code, returns a temporary token\n */\nexport const verifyCode = route.post('/_auth/codes/verify')\n .input({\n body: Type.Object({\n target: Type.String({\n description: 'Email address or phone number'\n }),\n targetType: TargetTypeSchema,\n code: Type.String({\n minLength: 6,\n maxLength: 6,\n pattern: '^[0-9]{6}$',\n description: '6-digit verification code'\n }),\n purpose: VerificationPurposeSchema,\n })\n })\n .skip(['auth'])\n .handler(async (c) =>\n {\n const { body } = await c.data();\n return await verifyCodeService(body)\n });\n\n/**\n * POST /_auth/register - Register new user\n * Register with email/phone and password, includes public key\n */\nexport const register = route.post('/_auth/register')\n .input({\n body: Type.Object({\n email: Type.Optional(EmailSchema),\n phone: Type.Optional(PhoneSchema),\n verificationToken: Type.String({\n description: 'Verification token obtained from /verify-code endpoint'\n }),\n password: PasswordSchema,\n }, {\n minProperties: 3, // email/phone + verificationToken + password\n description: 'Email or phone must be provided with verification token'\n })\n })\n .interceptor({\n body: Type.Object({\n publicKey: Type.String({ description: 'Client public key' }),\n keyId: Type.String({ description: 'Key identifier' }),\n fingerprint: Type.String({ description: 'Key fingerprint' }),\n algorithm: Type.Union(KEY_ALGORITHM.map(algo => Type.Literal(algo)), { description: 'Signature algorithm' }),\n })\n })\n .use([Transactional()])\n .skip(['auth'])\n .handler(async (c) =>\n {\n const { body } = await c.data();\n return await registerService(body)\n });\n\n/**\n * POST /_auth/login - User login\n * Authenticate user with email/phone and password\n * Replaces existing key with new one\n */\nexport const login = route.post('/_auth/login')\n .input({\n body: Type.Object({\n email: Type.Optional(EmailSchema),\n phone: Type.Optional(PhoneSchema),\n password: Type.String({\n minLength: 1,\n description: 'User password'\n }),\n }, {\n minProperties: 2, // email/phone + password\n description: 'Email or phone must be provided with password'\n })\n })\n .interceptor({\n body: Type.Object({\n publicKey: Type.String({ description: 'Client public key' }),\n keyId: Type.String({ description: 'Key identifier' }),\n fingerprint: Type.String({ description: 'Key fingerprint' }),\n algorithm: Type.Union(KEY_ALGORITHM.map(algo => Type.Literal(algo)), { description: 'Signature algorithm' }),\n oldKeyId: Type.Optional(Type.String({ description: 'Previous key ID for rotation' })),\n })\n })\n .use([Transactional()])\n .skip(['auth'])\n .handler(async (c) =>\n {\n const { body } = await c.data();\n return await loginService(body)\n });\n\n// ===== Authenticated Routes Below =====\n\n/**\n * POST /_auth/logout - Logout user\n * Revokes current key (requires authentication)\n */\nexport const logout = route.post('/_auth/logout')\n .handler(async (c) =>\n {\n const auth = getAuth(c);\n\n // If no auth (expired/invalid session), logout is still considered successful\n if (!auth)\n {\n return c.noContent();\n }\n\n const { keyId, userId } = auth;\n await logoutService({ userId: Number(userId), keyId });\n return c.noContent();\n });\n\n/**\n * POST /_auth/keys/rotate - Rotate key\n * Replace current key with new one (requires authentication)\n */\nexport const rotateKey = route.post('/_auth/keys/rotate')\n .interceptor({\n body: Type.Object({\n publicKey: Type.String({ description: 'New public key' }),\n keyId: Type.String({ description: 'New key identifier' }),\n fingerprint: Type.String({ description: 'New key fingerprint' }),\n algorithm: Type.Union(KEY_ALGORITHM.map(algo => Type.Literal(algo)), { description: 'Signature algorithm' }),\n })\n })\n .use([Transactional()])\n .handler(async (c) =>\n {\n const { body } = await c.data();\n const { keyId: oldKeyId, userId } = getAuth(c);\n\n return await rotateKeyService({\n userId: Number(userId),\n oldKeyId,\n newKeyId: body.keyId,\n newPublicKey: body.publicKey,\n fingerprint: body.fingerprint,\n algorithm: body.algorithm,\n })\n });\n\n/**\n * PUT /_auth/password - Change user password\n * Allows authenticated users to change their password\n * Requires current password for verification\n */\nexport const changePassword = route.put('/_auth/password')\n .input({\n body: Type.Object({\n currentPassword: Type.String({\n minLength: 1,\n description: 'Current password for verification'\n }),\n newPassword: PasswordSchema,\n })\n })\n .handler(async (c) =>\n {\n const { body } = await c.data();\n const user = getUser(c);\n\n await changePasswordService({\n userId: user.id,\n currentPassword: body.currentPassword,\n newPassword: body.newPassword,\n passwordHash: user.passwordHash || undefined,\n });\n\n return c.noContent();\n });\n\n/**\n * GET /_auth/session - Get authentication session\n * Returns authentication and authorization information including:\n * - Minimal user info (id, email, verification status)\n * - Role\n * - Permissions\n *\n * Lightweight endpoint for auth checks and guards\n * Does not include profile data\n *\n * Requires authentication\n */\nexport const getAuthSession = route.get('/_auth/session')\n .handler(async (c) =>\n {\n const { userId } = getAuth(c);\n return await getAuthSessionService(userId)\n });\n\n// Export router\nexport const authRouter = defineRouter({\n checkAccountExists: checkAccountExists,\n sendVerificationCode: sendVerificationCode,\n verifyCode: verifyCode,\n register: register,\n login: login,\n logout: logout,\n rotateKey: rotateKey,\n changePassword: changePassword,\n getAuthSession: getAuthSession,\n});\n\n// For backward compatibility with file-based routing (temporary)\nexport default authRouter;","/**\n * @spfn/auth - Password Helpers\n *\n * Password hashing and verification using bcrypt\n *\n * Security:\n * - Adaptive hashing (configurable rounds)\n * - Automatic salt generation (per-password)\n * - Constant-time comparison (timing attack protection)\n * - Rainbow table protection\n */\n\nimport bcrypt from 'bcryptjs';\nimport { env } from '@spfn/auth/config';\nimport { createPasswordParser } from '@spfn/core/env';\n\n/**\n * Hash a plain text password using bcrypt\n *\n * Algorithm:\n * 1. Generate random salt (128-bit)\n * 2. Apply bcrypt key derivation (2^rounds iterations)\n * 3. Return $2b$rounds$[salt][hash] (60 chars)\n *\n * Salt rounds are configured via SPFN_AUTH_BCRYPT_SALT_ROUNDS:\n * - 10 rounds: ~100ms (default, balanced)\n * - 12 rounds: ~400ms (more secure, slower)\n * - 14 rounds: ~1600ms (very secure, too slow for most apps)\n *\n * @param password - Plain text password to hash\n * @returns Bcrypt hash string (includes salt)\n * @throws Error if password is empty or invalid\n *\n * @example\n * ```typescript\n * const hash = await hashPassword('mySecurePassword123');\n * // Returns: \"$2b$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy\"\n * ```\n */\nexport async function hashPassword(password: string): Promise<string>\n{\n if (!password || password.length === 0)\n {\n throw new Error('Password cannot be empty');\n }\n\n return bcrypt.hash(password, env.SPFN_AUTH_BCRYPT_SALT_ROUNDS);\n}\n\n/**\n * Verify a password against a bcrypt hash\n *\n * Uses constant-time comparison to prevent timing attacks\n * Automatically extracts salt from hash for verification\n *\n * @param password - Plain text password to verify\n * @param hash - Bcrypt hash string (from hashPassword)\n * @returns True if password matches hash\n * @throws Error if inputs are invalid\n *\n * @example\n * ```typescript\n * const isValid = await verifyPassword(\n * 'mySecurePassword123',\n * '$2b$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy'\n * );\n * // Returns: true\n * ```\n */\nexport async function verifyPassword(password: string, hash: string): Promise<boolean>\n{\n if (!password || password.length === 0)\n {\n throw new Error('Password cannot be empty');\n }\n\n if (!hash || hash.length === 0)\n {\n throw new Error('Hash cannot be empty');\n }\n\n return bcrypt.compare(password, hash);\n}\n\n/**\n * Password strength validator (uses core validator internally)\n *\n * Uses @spfn/core/env/validator for consistent validation logic.\n */\nconst passwordValidator = createPasswordParser({\n minLength: 8,\n requireUppercase: true,\n requireLowercase: true,\n requireNumber: true,\n requireSpecial: true,\n});\n\n/**\n * Validate password strength\n *\n * Requirements:\n * - Minimum 8 characters\n * - At least one uppercase letter\n * - At least one lowercase letter\n * - At least one number\n * - At least one special character\n *\n * @param password - Password to validate\n * @returns Validation result with error messages\n *\n * @example\n * ```typescript\n * const result = validatePasswordStrength('weak');\n * // Returns: { valid: false, errors: ['Too short', 'Missing uppercase', ...] }\n *\n * const result = validatePasswordStrength('SecurePass123!');\n * // Returns: { valid: true, errors: [] }\n * ```\n */\nexport function validatePasswordStrength(password: string): {\n valid: boolean;\n errors: string[];\n}\n{\n try\n {\n passwordValidator(password);\n return {\n valid: true,\n errors: [],\n };\n }\n catch (error)\n {\n const message = error instanceof Error ? error.message : String(error);\n\n // Parse error message from validator\n // Format: \"Password validation failed: error1, error2, error3\"\n const errorMatch = message.match(/Password validation failed: (.+)/);\n\n if (errorMatch)\n {\n const errors = errorMatch[1].split(', ').map((err) =>\n {\n // Convert core validator messages to legacy format\n return err\n .replace(/^Must be at least (\\d+) characters$/, 'Password must be at least $1 characters')\n .replace(/^Must contain at least one uppercase letter$/, 'Password must contain at least one uppercase letter')\n .replace(/^Must contain at least one lowercase letter$/, 'Password must contain at least one lowercase letter')\n .replace(/^Must contain at least one number$/, 'Password must contain at least one number')\n .replace(/^Must contain at least one special character$/, 'Password must contain at least one special character');\n });\n\n return {\n valid: false,\n errors,\n };\n }\n\n // Fallback for unexpected error format\n return {\n valid: false,\n errors: [message],\n };\n }\n}","/**\n * @spfn/auth - JWT Helpers\n *\n * JWT token generation and verification\n * Supports both server-signed (legacy) and client-signed (asymmetric) tokens\n *\n * Architecture:\n * - Legacy: Server signs/verifies with SPFN_AUTH_JWT_SECRET (symmetric HMAC)\n * - New: Client signs with privateKey, server verifies with publicKey (asymmetric)\n */\n\nimport jwt, { type SignOptions } from 'jsonwebtoken';\nimport crypto from 'crypto';\nimport { env } from '@spfn/auth/config';\nimport { type KeyAlgorithmType } from '../types';\n\nexport interface SessionPayload\n{\n userId: string;\n keyId?: string;\n}\n\nexport interface TokenPayload extends SessionPayload\n{\n exp?: number;\n iat?: number;\n iss?: string;\n timestamp?: number;\n [key: string]: any;\n}\n\n/**\n * Generate a JWT token (legacy server-signed)\n *\n * @deprecated Use client-side signing with private keys instead\n * This method uses symmetric HMAC which requires sharing the secret\n *\n * @param payload - Token payload\n * @returns JWT token string\n */\nexport function generateToken(payload: SessionPayload): string\n{\n return jwt.sign(payload, env.SPFN_AUTH_JWT_SECRET, {\n expiresIn: env.SPFN_AUTH_JWT_EXPIRES_IN,\n } as SignOptions);\n}\n\n/**\n * Verify and decode a JWT token (legacy server-signed)\n *\n * @deprecated Use verifyClientToken for client-signed tokens\n * This method uses symmetric HMAC verification\n *\n * @param token - JWT token to verify\n * @returns Decoded payload\n * @throws Error if verification fails\n */\nexport function verifyToken(token: string): TokenPayload\n{\n return jwt.verify(token, env.SPFN_AUTH_JWT_SECRET) as TokenPayload;\n}\n\n/**\n * Verify client-signed JWT token with public key (DER format)\n *\n * Flow:\n * 1. Decode Base64 DER to Buffer\n * 2. Create KeyObject from DER\n * 3. Verify JWT signature with public key\n * 4. Validate issuer claim\n *\n * @param token - JWT token signed by client's private key\n * @param publicKeyB64 - Base64 encoded DER public key (SPKI format)\n * @param algorithm - Algorithm used for signing (ES256 or RS256)\n * @returns Decoded token payload\n * @throws Error if verification fails\n *\n * @example\n * ```typescript\n * const payload = verifyClientToken(\n * token,\n * 'MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE...',\n * 'ES256'\n * );\n * ```\n */\nexport function verifyClientToken(\n token: string,\n publicKeyB64: string,\n algorithm: KeyAlgorithmType\n): TokenPayload\n{\n // Convert Base64 DER to key object\n const publicKeyDER = Buffer.from(publicKeyB64, 'base64');\n const publicKeyObject = crypto.createPublicKey({\n key: publicKeyDER,\n format: 'der',\n type: 'spki',\n });\n\n let decoded;\n\n try\n {\n decoded = jwt.verify(token, publicKeyObject, {\n algorithms: [algorithm], // Prevent algorithm confusion attacks\n issuer: 'spfn-client', // Validate token issuer\n });\n }\n catch (error)\n {\n if (error instanceof jwt.TokenExpiredError)\n {\n throw new Error('Token has expired');\n }\n\n if (error instanceof jwt.JsonWebTokenError)\n {\n throw new Error('Invalid token signature');\n }\n\n throw new Error(`Token verification failed: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n\n // jwt.verify can return string, but we expect object payload\n if (typeof decoded === 'string')\n {\n throw new Error('Invalid token format: expected object payload');\n }\n\n return decoded as TokenPayload;\n}\n\n/**\n * Decode a JWT token without verification (for debugging)\n *\n * WARNING: Does not verify signature! Only use for debugging/logging.\n * Never trust decoded data without verification.\n *\n * @param token - JWT token to decode\n * @returns Decoded payload or null if invalid\n */\nexport function decodeToken(token: string): TokenPayload | null\n{\n try\n {\n return jwt.decode(token) as TokenPayload | null;\n }\n catch\n {\n return null;\n }\n}\n\n/**\n * Verify public key fingerprint matches\n *\n * Used during registration/login to ensure the public key wasn't tampered with\n * during transmission.\n *\n * Security:\n * - Client sends: publicKey + fingerprint\n * - Server calculates: SHA-256(publicKey)\n * - Server compares: calculated === received\n *\n * @param publicKeyB64 - Base64 encoded DER public key\n * @param expectedFingerprint - SHA-256 hex fingerprint (64 chars)\n * @returns True if fingerprint matches\n *\n * @example\n * ```typescript\n * const isValid = verifyKeyFingerprint(\n * publicKey,\n * 'a1b2c3d4e5f6...' // 64-char hex string\n * );\n * if (!isValid) {\n * throw new Error('Public key fingerprint mismatch');\n * }\n * ```\n */\nexport function verifyKeyFingerprint(\n publicKeyB64: string,\n expectedFingerprint: string\n): boolean\n{\n try\n {\n const publicKeyDER = Buffer.from(publicKeyB64, 'base64');\n const fingerprint = crypto\n .createHash('sha256')\n .update(publicKeyDER)\n .digest('hex');\n\n return fingerprint === expectedFingerprint;\n }\n catch (error)\n {\n console.error('Failed to verify key fingerprint:', error);\n return false;\n }\n}","/**\n * Auth Context Helpers\n *\n * Helper functions to access authenticated user data from route context\n */\n\nimport type { Context } from 'hono';\nimport type { AuthContext } from '../middleware';\n\n/**\n * Get auth context from route context\n *\n * Accepts both raw Hono Context and RouteContext with raw property\n *\n * @example\n * ```typescript\n * // With RouteContext (RPC routes)\n * app.bind(logoutContract, [authenticate], async (c) => {\n * const { user, userId, keyId } = getAuth(c);\n * // Use authenticated data...\n * });\n *\n * // With raw Context (middleware)\n * const auth = getAuth(c);\n * ```\n */\nexport function getAuth(c: Context | { raw: Context }): AuthContext\n{\n // Check if it's RouteContext with raw property\n if ('raw' in c && c.raw)\n {\n return c.raw.get('auth');\n }\n\n // Otherwise, it's raw Hono Context\n return (c as Context).get('auth');\n}\n\n/**\n * Get authenticated user from route context\n *\n * @example\n * ```typescript\n * app.bind(profileContract, [authenticate], async (c) => {\n * const user = getUser(c);\n * return c.success({ email: user.email });\n * });\n * ```\n */\nexport function getUser(c: Context | { raw: Context })\n{\n return getAuth(c).user;\n}\n\n/**\n * Get authenticated user ID from route context\n *\n * @example\n * ```typescript\n * app.bind(postsContract, [authenticate], async (c) => {\n * const userId = getUserId(c);\n * const posts = await findPosts({ authorId: userId });\n * });\n * ```\n */\nexport function getUserId(c: Context | { raw: Context }): string\n{\n return getAuth(c).userId;\n}\n\n/**\n * Get current key ID from route context\n *\n * @example\n * ```typescript\n * app.bind(rotateKeyContract, [authenticate], async (c) => {\n * const oldKeyId = getKeyId(c);\n * // Revoke old key...\n * });\n * ```\n */\nexport function getKeyId(c: Context | { raw: Context }): string\n{\n return getAuth(c).keyId;\n}","/**\n * @spfn/auth - Auth Service\n *\n * Core authentication logic: registration, login, logout, password management\n */\n\nimport { ValidationError } from '@spfn/core/errors';\nimport {\n InvalidCredentialsError,\n AccountDisabledError,\n AccountAlreadyExistsError,\n InvalidVerificationTokenError,\n VerificationTokenPurposeMismatchError,\n VerificationTokenTargetMismatchError,\n} from '@spfn/auth/errors';\n\nimport { type User } from \"../entities/users\";\nimport { usersRepository } from '../repositories';\nimport { type KeyAlgorithmType } from '../types';\nimport { hashPassword, verifyPassword } from '../helpers';\nimport { validateVerificationToken } from './verification.service';\nimport { registerPublicKeyService, revokeKeyService } from './key.service';\nimport { updateLastLoginService } from './user.service';\n\nexport interface CheckAccountExistsParams\n{\n email?: string;\n phone?: string;\n}\n\nexport interface CheckAccountExistsResult\n{\n exists: boolean;\n identifier: string;\n identifierType: 'email' | 'phone';\n}\n\nexport interface RegisterParams\n{\n email?: string;\n phone?: string;\n verificationToken: string;\n password: string;\n publicKey: string;\n keyId: string;\n fingerprint: string;\n algorithm?: KeyAlgorithmType;\n}\n\nexport interface RegisterResult\n{\n userId: string;\n email?: string;\n phone?: string;\n}\n\nexport interface LoginParams\n{\n email?: string;\n phone?: string;\n password: string;\n publicKey: string;\n keyId: string;\n fingerprint: string;\n oldKeyId?: string;\n algorithm?: KeyAlgorithmType;\n}\n\nexport interface LoginResult\n{\n userId: string;\n email?: string;\n phone?: string;\n passwordChangeRequired: boolean;\n}\n\nexport interface LogoutParams\n{\n userId: number;\n keyId: string;\n}\n\nexport interface ChangePasswordParams\n{\n userId: number;\n currentPassword: string;\n newPassword: string;\n passwordHash?: string; // Optional: pass user's password hash to avoid re-fetch\n}\n\n/**\n * Check if an account exists by email or phone\n */\nexport async function checkAccountExistsService(\n params: CheckAccountExistsParams\n): Promise<CheckAccountExistsResult>\n{\n const { email, phone } = params;\n\n let identifier: string;\n let identifierType: 'email' | 'phone';\n let user: User | null;\n\n if (email)\n {\n identifier = email;\n identifierType = 'email';\n user = await usersRepository.findByEmail(email);\n }\n else if (phone)\n {\n identifier = phone;\n identifierType = 'phone';\n user = await usersRepository.findByPhone(phone);\n }\n else\n {\n throw new ValidationError({ message: 'Either email or phone must be provided' });\n }\n\n return {\n exists: !!user,\n identifier,\n identifierType,\n };\n}\n\n/**\n * Register a new user account\n */\nexport async function registerService(\n params: RegisterParams\n): Promise<RegisterResult>\n{\n const { email, phone, verificationToken, password, publicKey, keyId, fingerprint, algorithm } = params;\n\n // Validate verification token\n const tokenPayload = validateVerificationToken(verificationToken);\n if (!tokenPayload)\n {\n throw new InvalidVerificationTokenError();\n }\n\n // Verify that token purpose is registration\n if (tokenPayload.purpose !== 'registration')\n {\n throw new VerificationTokenPurposeMismatchError({ expected: 'registration', actual: tokenPayload.purpose });\n }\n\n // Verify that token target matches provided email/phone\n const providedTarget = email || phone;\n if (tokenPayload.target !== providedTarget)\n {\n throw new VerificationTokenTargetMismatchError();\n }\n\n // Verify that token targetType matches\n const providedTargetType = email ? 'email' : 'phone';\n if (tokenPayload.targetType !== providedTargetType)\n {\n throw new VerificationTokenTargetMismatchError();\n }\n\n // Check if user already exists\n const existingUser = await usersRepository.findByEmailOrPhone(email, phone);\n\n if (existingUser)\n {\n const identifierType = email ? 'email' : 'phone';\n throw new AccountAlreadyExistsError({ identifier: email || phone!, identifierType });\n }\n\n // Hash password\n const passwordHash = await hashPassword(password);\n\n // Get default user role\n const { getRoleByName } = await import('./role.service');\n const userRole = await getRoleByName('user');\n\n if (!userRole)\n {\n throw new Error('Default user role not found. Run initializeAuth() first.');\n }\n\n // Create user\n const newUser = await usersRepository.create({\n email: email || null,\n phone: phone || null,\n passwordHash,\n passwordChangeRequired: false,\n roleId: userRole.id,\n status: 'active',\n });\n\n // Register public key\n await registerPublicKeyService({\n userId: newUser.id,\n keyId,\n publicKey,\n fingerprint,\n algorithm,\n });\n\n return {\n userId: String(newUser.id),\n email: newUser.email || undefined,\n phone: newUser.phone || undefined,\n };\n}\n\n/**\n * Authenticate user and create session\n */\nexport async function loginService(\n params: LoginParams\n): Promise<LoginResult>\n{\n const { email, phone, password, publicKey, keyId, fingerprint, oldKeyId, algorithm } = params;\n\n // Find user\n const user = await usersRepository.findByEmailOrPhone(email, phone);\n\n if (!email && !phone)\n {\n throw new ValidationError({ message: 'Either email or phone must be provided' });\n }\n\n if (!user || !user.passwordHash)\n {\n throw new InvalidCredentialsError();\n }\n\n // Verify password\n const isValid = await verifyPassword(password, user.passwordHash);\n if (!isValid)\n {\n throw new InvalidCredentialsError();\n }\n\n // Check if user is active\n if (user.status !== 'active')\n {\n throw new AccountDisabledError({ status: user.status });\n }\n\n // Revoke old key if provided\n if (oldKeyId)\n {\n await revokeKeyService({\n userId: user.id,\n keyId: oldKeyId,\n reason: 'Replaced by new key on login',\n });\n }\n\n // Register new public key\n await registerPublicKeyService({\n userId: user.id,\n keyId,\n publicKey,\n fingerprint,\n algorithm,\n });\n\n // Update last login\n await updateLastLoginService(user.id);\n\n return {\n userId: String(user.id),\n email: user.email || undefined,\n phone: user.phone || undefined,\n passwordChangeRequired: user.passwordChangeRequired,\n };\n}\n\n/**\n * Logout user (revoke current key)\n */\nexport async function logoutService(\n params: LogoutParams\n): Promise<void>\n{\n const { userId, keyId } = params;\n\n await revokeKeyService({\n userId,\n keyId,\n reason: 'Revoked by logout',\n });\n}\n\n/**\n * Change user password\n */\nexport async function changePasswordService(\n params: ChangePasswordParams\n): Promise<void>\n{\n const { userId, currentPassword, newPassword, passwordHash: providedHash } = params;\n\n // Get user's password hash (either provided or fetch from DB)\n let passwordHash: string | null;\n if (providedHash)\n {\n passwordHash = providedHash;\n }\n else\n {\n const user = await usersRepository.findById(userId);\n if (!user)\n {\n throw new ValidationError({ message: 'User not found' });\n }\n passwordHash = user.passwordHash;\n }\n\n // Verify current password\n if (!passwordHash)\n {\n throw new ValidationError({ message: 'No password set for this account' });\n }\n\n const isValid = await verifyPassword(currentPassword, passwordHash);\n if (!isValid)\n {\n throw new InvalidCredentialsError({ message: 'Current password is incorrect' });\n }\n\n // Hash new password\n const newPasswordHash = await hashPassword(newPassword);\n\n // Update password and clear passwordChangeRequired flag\n await usersRepository.updatePassword(userId, newPasswordHash, true);\n}","/**\n * @spfn/auth - Verification Service\n *\n * Handles OTP code generation, validation, and delivery\n */\n\nimport { env } from '@spfn/auth/config';\nimport { InvalidVerificationCodeError } from '@spfn/auth/errors';\nimport jwt from 'jsonwebtoken';\nimport { authLogger } from '../logger';\nimport { verificationCodesRepository } from '../repositories';\nimport type { VerificationTargetType, VerificationPurpose } from '../routes/schema';\nimport { sendSMS } from './sms';\nimport { sendEmail } from './email';\nimport { getVerificationCodeTemplate } from './email/templates';\n\n/**\n * Verification token expiry (15 minutes)\n */\nconst VERIFICATION_TOKEN_EXPIRY = '15m';\n\n/**\n * Verification code expiry (5 minutes)\n */\nconst VERIFICATION_CODE_EXPIRY_MINUTES = 5;\n\n/**\n * Maximum verification attempts before code expires\n */\nconst MAX_VERIFICATION_ATTEMPTS = 5;\n\n/**\n * Verification token payload\n */\nexport interface VerificationTokenPayload\n{\n target: string;\n targetType: VerificationTargetType;\n purpose: VerificationPurpose;\n codeId: number;\n}\n\n/**\n * Generate a random 6-digit verification code\n *\n * @returns 6-digit code as string\n */\nexport function generateVerificationCode(): string\n{\n // Generate random 6-digit number (000000 - 999999)\n return Math.floor(Math.random() * 1000000)\n .toString()\n .padStart(6, '0');\n}\n\n/**\n * Store verification code in database\n *\n * @param target - Email or phone number\n * @param targetType - Type of target (email or phone)\n * @param code - 6-digit verification code\n * @param purpose - Purpose of verification\n * @returns Created verification code record\n */\nasync function storeVerificationCode(\n target: string,\n targetType: VerificationTargetType,\n code: string,\n purpose: VerificationPurpose\n)\n{\n // Calculate expiry time\n const expiresAt = new Date();\n expiresAt.setMinutes(expiresAt.getMinutes() + VERIFICATION_CODE_EXPIRY_MINUTES);\n\n // Invalidate previous codes for same target/purpose\n await verificationCodesRepository.invalidatePreviousCodes(target, purpose);\n\n // Create verification code record\n return await verificationCodesRepository.create({\n target,\n targetType,\n code,\n purpose,\n expiresAt,\n attempts: 0,\n });\n}\n\n/**\n * Validate verification code\n *\n * @param target - Email or phone number\n * @param code - 6-digit code to validate\n * @param purpose - Purpose of verification\n * @returns Validation result with code ID if valid\n */\nasync function validateVerificationCode(\n target: string,\n code: string,\n purpose: VerificationPurpose\n): Promise<{ valid: boolean; codeId?: number; error?: string }>\n{\n // Find the verification code\n const record = await verificationCodesRepository.findValidByTargetAndPurpose(target, purpose);\n\n if (!record)\n {\n return { valid: false, error: 'Invalid verification code' };\n }\n\n // Check if code matches\n if (record.code !== code)\n {\n // Increment attempt count\n await verificationCodesRepository.incrementAttempts(record.id);\n return { valid: false, error: 'Invalid verification code' };\n }\n\n // Check if code is already used\n if (record.usedAt)\n {\n return { valid: false, error: 'Verification code already used' };\n }\n\n // Check if code is expired\n if (new Date() > new Date(record.expiresAt))\n {\n return { valid: false, error: 'Verification code expired' };\n }\n\n // Check attempt count\n if (record.attempts >= MAX_VERIFICATION_ATTEMPTS)\n {\n return { valid: false, error: 'Too many attempts, please request a new code' };\n }\n\n return { valid: true, codeId: record.id };\n}\n\n/**\n * Mark verification code as used\n *\n * @param codeId - Verification code ID\n */\nasync function markCodeAsUsed(codeId: number): Promise<void>\n{\n await verificationCodesRepository.markAsUsed(codeId);\n}\n\n/**\n * Create verification token (JWT)\n *\n * @param payload - Token payload\n * @returns Signed JWT token\n */\nexport function createVerificationToken(payload: VerificationTokenPayload): string\n{\n return jwt.sign(payload, env.SPFN_AUTH_VERIFICATION_TOKEN_SECRET!, {\n expiresIn: VERIFICATION_TOKEN_EXPIRY,\n issuer: 'spfn-auth',\n audience: 'spfn-client',\n });\n}\n\n/**\n * Validate verification token (JWT)\n *\n * @param token - JWT token to validate\n * @returns Decoded payload if valid, null otherwise\n */\nexport function validateVerificationToken(token: string): VerificationTokenPayload | null\n{\n try\n {\n const decoded = jwt.verify(token, env.SPFN_AUTH_VERIFICATION_TOKEN_SECRET!, {\n issuer: 'spfn-auth',\n audience: 'spfn-client',\n });\n\n // Validate that decoded has required properties\n if (\n typeof decoded === 'object' &&\n decoded !== null &&\n 'target' in decoded &&\n 'targetType' in decoded &&\n 'purpose' in decoded &&\n 'codeId' in decoded\n )\n {\n return decoded as VerificationTokenPayload;\n }\n\n return null;\n }\n catch (error)\n {\n authLogger.service.error('Failed to validate verification token', { error });\n return null;\n }\n}\n\n/**\n * Send verification code via email\n *\n * @param email - Email address\n * @param code - 6-digit verification code\n * @param purpose - Purpose of verification\n */\nasync function sendVerificationEmail(\n email: string,\n code: string,\n purpose: string\n): Promise<void>\n{\n const { subject, text, html } = getVerificationCodeTemplate({\n code,\n purpose,\n expiresInMinutes: VERIFICATION_CODE_EXPIRY_MINUTES,\n });\n\n const result = await sendEmail({\n to: email,\n subject,\n text,\n html,\n purpose,\n });\n\n if (!result.success)\n {\n authLogger.email.error('Failed to send verification email', {\n email,\n purpose,\n error: result.error,\n });\n }\n}\n\n/**\n * Send verification code via SMS\n *\n * @param phone - Phone number in E.164 format\n * @param code - 6-digit verification code\n * @param purpose - Purpose of verification\n */\nasync function sendVerificationSMS(\n phone: string,\n code: string,\n purpose: string\n): Promise<void>\n{\n const message = `Your verification code is: ${code}`;\n\n const result = await sendSMS({\n phone,\n message,\n purpose,\n });\n\n if (!result.success)\n {\n authLogger.sms.error('Failed to send verification SMS', {\n phone,\n purpose,\n error: result.error,\n });\n }\n}\n\nexport interface SendVerificationCodeParams\n{\n target: string;\n targetType: VerificationTargetType;\n purpose: VerificationPurpose;\n}\n\nexport interface SendVerificationCodeResult\n{\n success: boolean;\n expiresAt: string;\n}\n\nexport interface VerifyCodeParams\n{\n target: string;\n targetType: VerificationTargetType;\n code: string;\n purpose: VerificationPurpose;\n}\n\nexport interface VerifyCodeResult\n{\n valid: boolean;\n verificationToken: string;\n}\n\n/**\n * Send verification code via email or SMS\n */\nexport async function sendVerificationCodeService(\n params: SendVerificationCodeParams\n): Promise<SendVerificationCodeResult>\n{\n const { target, targetType, purpose } = params;\n\n // Generate 6-digit verification code\n const code = generateVerificationCode();\n\n // Store code in database\n const codeRecord = await storeVerificationCode(target, targetType, code, purpose);\n\n // Send code via email or SMS\n if (targetType === 'email')\n {\n await sendVerificationEmail(target, code, purpose);\n }\n else\n {\n await sendVerificationSMS(target, code, purpose);\n }\n\n return {\n success: true,\n expiresAt: codeRecord.expiresAt.toISOString(),\n };\n}\n\n/**\n * Verify OTP code and return verification token\n */\nexport async function verifyCodeService(params: VerifyCodeParams)\n{\n const { target, targetType, code, purpose } = params;\n\n // Validate the verification code\n const validation = await validateVerificationCode(target, code, purpose);\n\n if (!validation.valid)\n {\n throw new InvalidVerificationCodeError({ message: validation.error || 'Invalid verification code' });\n }\n\n // Mark code as used\n await markCodeAsUsed(validation.codeId!);\n\n // Create verification token (15 min validity)\n const verificationToken = createVerificationToken({\n target,\n targetType,\n purpose,\n codeId: validation.codeId!,\n });\n\n return {\n valid: true,\n verificationToken,\n };\n}\n","/**\n * @spfn/auth - Centralized Logger\n *\n * All auth package loggers with consistent naming\n */\n\nimport { logger as rootLogger } from '@spfn/core/logger';\n\nexport const authLogger = {\n plugin: rootLogger.child('@spfn/auth:plugin'),\n middleware: rootLogger.child('@spfn/auth:middleware'),\n interceptor: {\n general: rootLogger.child('@spfn/auth:interceptor:general'),\n login: rootLogger.child('@spfn/auth:interceptor:login'),\n keyRotation: rootLogger.child('@spfn/auth:interceptor:key-rotation'),\n },\n service: rootLogger.child('@spfn/auth:service'),\n setup: rootLogger.child('@spfn/auth:setup'),\n email: rootLogger.child('@spfn/auth:email'),\n sms: rootLogger.child('@spfn/auth:sms'),\n};","/**\n * @spfn/auth - SMS Provider Management\n *\n * Manages SMS provider registration and fallback behavior\n */\n\nimport { authLogger } from '../../logger';\nimport type { SMSProvider, SendSMSParams, SendSMSResult } from './types';\n\n/**\n * Currently registered SMS provider\n */\nlet currentProvider: SMSProvider | null = null;\n\n/**\n * Fallback SMS provider (development mode - console only)\n */\nconst fallbackProvider: SMSProvider = {\n name: 'fallback',\n sendSMS: async (params: SendSMSParams): Promise<SendSMSResult> =>\n {\n authLogger.sms.debug('DEV MODE - SMS not actually sent', {\n phone: params.phone,\n message: params.message,\n purpose: params.purpose || 'N/A',\n });\n return {\n success: true,\n messageId: 'dev-mode-no-actual-sms',\n };\n },\n};\n\n/**\n * Register a custom SMS provider\n *\n * @param provider - Custom SMS provider implementation\n *\n * @example\n * ```typescript\n * import { registerSMSProvider } from '@spfn/auth/server/services/sms';\n *\n * const twilioProvider = {\n * name: 'twilio',\n * sendSMS: async (params) => {\n * // Twilio implementation\n * return { success: true, messageId: '...' };\n * }\n * };\n *\n * registerSMSProvider(twilioProvider);\n * ```\n */\nexport function registerSMSProvider(provider: SMSProvider): void\n{\n currentProvider = provider;\n authLogger.sms.info('Registered SMS provider', { name: provider.name });\n}\n\n/**\n * Get the current SMS provider\n *\n * @returns Current provider or fallback if none registered\n */\nexport function getSMSProvider(): SMSProvider\n{\n return currentProvider || fallbackProvider;\n}\n\n/**\n * Send SMS using the registered provider\n *\n * Falls back to development mode (console only) if no provider is registered\n *\n * @param params - SMS parameters\n * @returns Send result\n */\nexport async function sendSMS(params: SendSMSParams): Promise<SendSMSResult>\n{\n const provider = getSMSProvider();\n return await provider.sendSMS(params);\n}","/**\n * @spfn/auth - AWS SNS SMS Provider\n *\n * Default SMS provider implementation using AWS SNS\n *\n * @requires @aws-sdk/client-sns (peer dependency)\n */\n\nimport { env } from '@spfn/auth/config';\nimport { authLogger } from '../../logger';\nimport type { SMSProvider, SendSMSParams, SendSMSResult } from './types';\n\n/**\n * Validate phone number format (E.164)\n *\n * @param phone - Phone number to validate\n * @returns True if valid E.164 format\n */\nfunction isValidE164Phone(phone: string): boolean\n{\n // E.164 format: +[country code][number]\n // Example: +821012345678\n const e164Regex = /^\\+[1-9]\\d{1,14}$/;\n return e164Regex.test(phone);\n}\n\n/**\n * Create AWS SNS SMS provider\n *\n * @returns SMSProvider instance or null if @aws-sdk/client-sns not available\n */\nexport function createAWSSNSProvider(): SMSProvider | null\n{\n try\n {\n // Dynamic import to check if @aws-sdk/client-sns is available\n const { SNSClient, PublishCommand } = require('@aws-sdk/client-sns');\n\n return {\n name: 'aws-sns',\n sendSMS: async (params: SendSMSParams): Promise<SendSMSResult> =>\n {\n const { phone, message, purpose } = params;\n\n // Validate phone number format\n if (!isValidE164Phone(phone))\n {\n return {\n success: false,\n error: 'Invalid phone number format. Must be E.164 format (e.g., +821012345678)',\n };\n }\n\n // Check if AWS credentials are configured\n if (!env.SPFN_AUTH_AWS_SNS_ACCESS_KEY_ID)\n {\n return {\n success: false,\n error: 'AWS SNS credentials not configured. Set SPFN_AUTH_AWS_SNS_ACCESS_KEY_ID environment variable.',\n };\n }\n\n try\n {\n // Initialize SNS client\n const config: any = {\n region: env.SPFN_AUTH_AWS_REGION || 'ap-northeast-2',\n };\n\n if (env.SPFN_AUTH_AWS_SNS_ACCESS_KEY_ID && env.SPFN_AUTH_AWS_SNS_SECRET_ACCESS_KEY)\n {\n config.credentials = {\n accessKeyId: env.SPFN_AUTH_AWS_SNS_ACCESS_KEY_ID,\n secretAccessKey: env.SPFN_AUTH_AWS_SNS_SECRET_ACCESS_KEY,\n };\n }\n\n const client = new SNSClient(config);\n\n // Prepare SNS publish command\n const command = new PublishCommand({\n PhoneNumber: phone,\n Message: message,\n MessageAttributes: {\n 'AWS.SNS.SMS.SMSType': {\n DataType: 'String',\n StringValue: 'Transactional', // For OTP codes\n },\n ...(env.SPFN_AUTH_AWS_SNS_SENDER_ID && {\n 'AWS.SNS.SMS.SenderID': {\n DataType: 'String',\n StringValue: env.SPFN_AUTH_AWS_SNS_SENDER_ID,\n },\n }),\n },\n });\n\n // Send SMS\n const response = await client.send(command);\n\n authLogger.sms.info('SMS sent via AWS SNS', {\n phone,\n messageId: response.MessageId,\n purpose: purpose || 'N/A',\n });\n\n return {\n success: true,\n messageId: response.MessageId,\n };\n }\n catch (error)\n {\n const err = error as Error;\n authLogger.sms.error('Failed to send SMS via AWS SNS', {\n phone,\n error: err.message,\n });\n\n return {\n success: false,\n error: err.message || 'Failed to send SMS via AWS SNS',\n };\n }\n },\n };\n }\n catch (error)\n {\n // @aws-sdk/client-sns not installed\n return null;\n }\n}\n\n/**\n * AWS SNS Provider instance (lazy initialization)\n */\nexport const awsSNSProvider = createAWSSNSProvider();","/**\n * @spfn/auth - SMS Service\n *\n * SMS sending service with pluggable provider support\n *\n * Default provider: AWS SNS (if @aws-sdk/client-sns is installed)\n * Fallback: Development mode (console only)\n *\n * @example\n * ```typescript\n * // Using default provider (AWS SNS)\n * import { sendSMS } from '@spfn/auth/server/services/sms';\n *\n * await sendSMS({\n * phone: '+821012345678',\n * message: 'Your code is: 123456',\n * purpose: 'verification'\n * });\n * ```\n *\n * @example\n * ```typescript\n * // Register custom provider\n * import { registerSMSProvider, SMSProvider } from '@spfn/auth/server/services/sms';\n *\n * const twilioProvider: SMSProvider = {\n * name: 'twilio',\n * sendSMS: async (params) => {\n * // Your Twilio implementation\n * return { success: true, messageId: '...' };\n * }\n * };\n *\n * registerSMSProvider(twilioProvider);\n * ```\n */\n\nexport { sendSMS, registerSMSProvider, getSMSProvider } from './provider';\nexport type { SendSMSParams, SendSMSResult, SMSProvider } from './types';\nexport { createAWSSNSProvider, awsSNSProvider } from './aws-sns.provider';\n\n// Auto-register AWS SNS provider if available\nimport { awsSNSProvider } from './aws-sns.provider';\nimport { registerSMSProvider } from './provider';\n\nif (awsSNSProvider)\n{\n registerSMSProvider(awsSNSProvider);\n}","/**\n * @spfn/auth - Email Provider Management\n *\n * Manages email provider registration and fallback behavior\n */\n\nimport { authLogger } from '../../logger';\nimport type { EmailProvider, SendEmailParams, SendEmailResult } from './types';\n\n/**\n * Currently registered email provider\n */\nlet currentProvider: EmailProvider | null = null;\n\n/**\n * Fallback email provider (development mode - console only)\n */\nconst fallbackProvider: EmailProvider = {\n name: 'fallback',\n sendEmail: async (params: SendEmailParams): Promise<SendEmailResult> =>\n {\n authLogger.email.debug('DEV MODE - Email not actually sent', {\n to: params.to,\n subject: params.subject,\n purpose: params.purpose || 'N/A',\n textPreview: params.text?.substring(0, 100) || 'N/A',\n });\n return {\n success: true,\n messageId: 'dev-mode-no-actual-email',\n };\n },\n};\n\n/**\n * Register a custom email provider\n *\n * @param provider - Custom email provider implementation\n *\n * @example\n * ```typescript\n * import { registerEmailProvider } from '@spfn/auth/server/services/email';\n *\n * const sendgridProvider = {\n * name: 'sendgrid',\n * sendEmail: async (params) => {\n * // SendGrid implementation\n * return { success: true, messageId: '...' };\n * }\n * };\n *\n * registerEmailProvider(sendgridProvider);\n * ```\n */\nexport function registerEmailProvider(provider: EmailProvider): void\n{\n currentProvider = provider;\n authLogger.email.info('Registered email provider', { name: provider.name });\n}\n\n/**\n * Get the current email provider\n *\n * @returns Current provider or fallback if none registered\n */\nexport function getEmailProvider(): EmailProvider\n{\n return currentProvider || fallbackProvider;\n}\n\n/**\n * Send email using the registered provider\n *\n * Falls back to development mode (console only) if no provider is registered\n *\n * @param params - Email parameters\n * @returns Send result\n */\nexport async function sendEmail(params: SendEmailParams): Promise<SendEmailResult>\n{\n const provider = getEmailProvider();\n return await provider.sendEmail(params);\n}\n","/**\n * @spfn/auth - AWS SES Email Provider\n *\n * Default email provider implementation using AWS SES\n *\n * @requires @aws-sdk/client-ses (peer dependency)\n */\n\nimport { env } from '@spfn/auth/config';\nimport { authLogger } from '../../logger';\nimport type { EmailProvider, SendEmailParams, SendEmailResult } from './types';\n\n/**\n * Validate email address format\n *\n * @param email - Email address to validate\n * @returns True if valid email format\n */\nfunction isValidEmail(email: string): boolean\n{\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailRegex.test(email);\n}\n\n/**\n * Create AWS SES email provider\n *\n * @returns EmailProvider instance or null if @aws-sdk/client-ses not available\n */\nexport function createAWSSESProvider(): EmailProvider | null\n{\n try\n {\n // Dynamic import to check if @aws-sdk/client-ses is available\n const { SESClient, SendEmailCommand } = require('@aws-sdk/client-ses');\n\n return {\n name: 'aws-ses',\n sendEmail: async (params: SendEmailParams): Promise<SendEmailResult> =>\n {\n const { to, subject, text, html, purpose } = params;\n\n // Validate email address format\n if (!isValidEmail(to))\n {\n return {\n success: false,\n error: 'Invalid email address format',\n };\n }\n\n // Check if AWS credentials are configured\n if (!env.SPFN_AUTH_AWS_SES_ACCESS_KEY_ID)\n {\n authLogger.email.warn('AWS SES credentials not configured', {\n hint: 'Set SPFN_AUTH_AWS_SES_ACCESS_KEY_ID environment variable',\n });\n return {\n success: false,\n error: 'AWS SES credentials not configured. Set SPFN_AUTH_AWS_SES_ACCESS_KEY_ID environment variable.',\n };\n }\n\n // Check if sender email is configured\n if (!env.SPFN_AUTH_AWS_SES_FROM_EMAIL)\n {\n authLogger.email.warn('AWS SES sender email not configured', {\n hint: 'Set SPFN_AUTH_AWS_SES_FROM_EMAIL environment variable',\n });\n return {\n success: false,\n error: 'AWS SES sender email not configured. Set SPFN_AUTH_AWS_SES_FROM_EMAIL environment variable.',\n };\n }\n\n try\n {\n // Initialize SES client\n const config: any = {\n region: env.SPFN_AUTH_AWS_REGION || 'ap-northeast-2',\n };\n\n if (env.SPFN_AUTH_AWS_SES_ACCESS_KEY_ID && env.SPFN_AUTH_AWS_SES_SECRET_ACCESS_KEY)\n {\n config.credentials = {\n accessKeyId: env.SPFN_AUTH_AWS_SES_ACCESS_KEY_ID,\n secretAccessKey: env.SPFN_AUTH_AWS_SES_SECRET_ACCESS_KEY,\n };\n }\n\n const client = new SESClient(config);\n\n // Build email body\n const body: any = {};\n\n if (text)\n {\n body.Text = {\n Charset: 'UTF-8',\n Data: text,\n };\n }\n\n if (html)\n {\n body.Html = {\n Charset: 'UTF-8',\n Data: html,\n };\n }\n\n // Prepare SES send email command\n const command = new SendEmailCommand({\n Source: env.SPFN_AUTH_AWS_SES_FROM_EMAIL,\n Destination: {\n ToAddresses: [to],\n },\n Message: {\n Subject: {\n Charset: 'UTF-8',\n Data: subject,\n },\n Body: body,\n },\n });\n\n // Send email\n const response = await client.send(command);\n\n authLogger.email.info('Email sent via AWS SES', {\n to,\n messageId: response.MessageId,\n purpose: purpose || 'N/A',\n });\n\n return {\n success: true,\n messageId: response.MessageId,\n };\n }\n catch (error)\n {\n const err = error as Error;\n authLogger.email.error('Failed to send email via AWS SES', {\n to,\n error: err.message,\n });\n\n return {\n success: false,\n error: err.message || 'Failed to send email via AWS SES',\n };\n }\n },\n };\n }\n catch (error)\n {\n // @aws-sdk/client-ses not installed\n authLogger.email.debug('@aws-sdk/client-ses not available, AWS SES provider disabled', {\n error: error instanceof Error ? error.message : String(error),\n });\n return null;\n }\n}\n\n/**\n * AWS SES Provider instance (lazy initialization)\n */\nexport const awsSESProvider = createAWSSESProvider();\n","/**\n * @spfn/auth - Email Service\n *\n * Email sending service with pluggable provider support\n *\n * Default provider: AWS SES (if @aws-sdk/client-ses is installed)\n * Fallback: Development mode (console only)\n *\n * @example\n * ```typescript\n * // Using default provider (AWS SES)\n * import { sendEmail } from '@spfn/auth/server/services/email';\n *\n * await sendEmail({\n * to: 'user@example.com',\n * subject: 'Your Verification Code',\n * text: 'Your code is: 123456',\n * html: '<p>Your code is: <strong>123456</strong></p>',\n * purpose: 'verification'\n * });\n * ```\n *\n * @example\n * ```typescript\n * // Register custom provider\n * import { registerEmailProvider, EmailProvider } from '@spfn/auth/server/services/email';\n *\n * const sendgridProvider: EmailProvider = {\n * name: 'sendgrid',\n * sendEmail: async (params) => {\n * // Your SendGrid implementation\n * return { success: true, messageId: '...' };\n * }\n * };\n *\n * registerEmailProvider(sendgridProvider);\n * ```\n */\n\nexport { sendEmail, registerEmailProvider, getEmailProvider } from './provider';\nexport type { SendEmailParams, SendEmailResult, EmailProvider } from './types';\nexport { createAWSSESProvider, awsSESProvider } from './aws-ses.provider';\n\n// Auto-register AWS SES provider if available\nimport { awsSESProvider } from './aws-ses.provider';\nimport { registerEmailProvider } from './provider';\nimport { authLogger } from '../../logger';\n\nif (awsSESProvider)\n{\n registerEmailProvider(awsSESProvider);\n}\nelse\n{\n authLogger.email.warn('No email provider registered, using fallback (dev mode). Emails will NOT be sent. Install @aws-sdk/client-ses to enable AWS SES.');\n}\n","/**\n * @spfn/auth - Verification Code Email Template\n *\n * HTML email template for verification codes (registration, login, password reset)\n */\n\nexport interface VerificationCodeTemplateParams\n{\n /**\n * 6-digit verification code\n */\n code: string;\n\n /**\n * Purpose of verification\n */\n purpose: 'registration' | 'login' | 'password_reset' | string;\n\n /**\n * Code expiration time in minutes\n */\n expiresInMinutes?: number;\n\n /**\n * App/Brand name (optional)\n */\n appName?: string;\n}\n\n/**\n * Get subject line based on purpose\n */\nexport function getSubject(purpose: string): string\n{\n switch (purpose)\n {\n case 'registration':\n return 'Verify your email address';\n case 'login':\n return 'Your login verification code';\n case 'password_reset':\n return 'Reset your password';\n default:\n return 'Your verification code';\n }\n}\n\n/**\n * Get purpose description text\n */\nfunction getPurposeText(purpose: string): string\n{\n switch (purpose)\n {\n case 'registration':\n return 'complete your registration';\n case 'login':\n return 'verify your identity';\n case 'password_reset':\n return 'reset your password';\n default:\n return 'verify your identity';\n }\n}\n\n/**\n * Generate plain text version\n */\nexport function generateText(params: VerificationCodeTemplateParams): string\n{\n const { code, expiresInMinutes = 5 } = params;\n\n return `Your verification code is: ${code}\n\nThis code will expire in ${expiresInMinutes} minutes.\n\nIf you didn't request this code, please ignore this email.`;\n}\n\n/**\n * Generate HTML version\n */\nexport function generateHTML(params: VerificationCodeTemplateParams): string\n{\n const { code, purpose, expiresInMinutes = 5, appName } = params;\n const purposeText = getPurposeText(purpose);\n\n return `<!DOCTYPE html>\n<html>\n<head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>Verification Code</title>\n</head>\n<body style=\"font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; line-height: 1.6; color: #333; max-width: 600px; margin: 0 auto; padding: 20px; background-color: #f5f5f5;\">\n <div style=\"background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); padding: 30px; border-radius: 10px 10px 0 0; text-align: center;\">\n <h1 style=\"color: white; margin: 0; font-size: 24px;\">${appName ? appName : 'Verification Code'}</h1>\n </div>\n <div style=\"background: #ffffff; padding: 30px; border: 1px solid #e0e0e0; border-top: none; border-radius: 0 0 10px 10px;\">\n <p style=\"margin-bottom: 20px; font-size: 16px;\">\n Please use the following verification code to ${purposeText}:\n </p>\n <div style=\"background: #f8f9fa; padding: 25px; border-radius: 8px; text-align: center; margin: 25px 0; border: 2px dashed #dee2e6;\">\n <span style=\"font-size: 36px; font-weight: bold; letter-spacing: 10px; color: #333; font-family: 'Courier New', monospace;\">${code}</span>\n </div>\n <p style=\"color: #666; font-size: 14px; margin-top: 20px; text-align: center;\">\n <strong>This code will expire in ${expiresInMinutes} minutes.</strong>\n </p>\n <hr style=\"border: none; border-top: 1px solid #eee; margin: 30px 0;\">\n <p style=\"color: #999; font-size: 12px; text-align: center; margin: 0;\">\n If you didn't request this code, please ignore this email.\n </p>\n </div>\n <div style=\"text-align: center; padding: 20px; color: #999; font-size: 11px;\">\n <p style=\"margin: 0;\">This is an automated message. Please do not reply.</p>\n </div>\n</body>\n</html>`;\n}\n\n/**\n * Generate both text and HTML versions\n */\nexport function verificationCodeTemplate(params: VerificationCodeTemplateParams)\n{\n return {\n subject: getSubject(params.purpose),\n text: generateText(params),\n html: generateHTML(params),\n };\n}\n","/**\n * @spfn/auth - Email Template Registry\n *\n * Manages custom email template registration and fallback to defaults\n */\n\nimport { authLogger } from '../../../logger';\nimport type { EmailTemplateProvider, VerificationCodeParams, EmailTemplateResult } from './types';\nimport * as defaultTemplates from './verification-code';\n\n/**\n * Custom template overrides\n */\nlet customTemplates: Partial<EmailTemplateProvider> = {};\n\n/**\n * Register custom email templates\n *\n * Templates not provided will fall back to defaults\n *\n * @param templates - Custom template implementations\n *\n * @example\n * ```typescript\n * import { registerEmailTemplates } from '@spfn/auth/server';\n *\n * // Override verification code template with custom design\n * registerEmailTemplates({\n * verificationCode: ({ code, purpose, expiresInMinutes }) => ({\n * subject: `[MyApp] Your verification code`,\n * text: `Your code is: ${code}`,\n * html: `\n * <div style=\"font-family: Arial;\">\n * <h1>Welcome to MyApp!</h1>\n * <p>Your code: <strong>${code}</strong></p>\n * </div>\n * `,\n * }),\n * });\n * ```\n */\nexport function registerEmailTemplates(templates: Partial<EmailTemplateProvider>): void\n{\n customTemplates = { ...customTemplates, ...templates };\n authLogger.email.info('Registered custom email templates', {\n templates: Object.keys(templates),\n });\n}\n\n/**\n * Clear all custom templates (useful for testing)\n */\nexport function clearCustomTemplates(): void\n{\n customTemplates = {};\n}\n\n/**\n * Get verification code template\n *\n * Uses custom template if registered, otherwise falls back to default\n */\nexport function getVerificationCodeTemplate(params: VerificationCodeParams): EmailTemplateResult\n{\n if (customTemplates.verificationCode)\n {\n return customTemplates.verificationCode(params);\n }\n\n return defaultTemplates.verificationCodeTemplate(params);\n}\n\n/**\n * Get welcome template\n */\nexport function getWelcomeTemplate(params: { email: string; appName?: string }): EmailTemplateResult\n{\n if (customTemplates.welcome)\n {\n return customTemplates.welcome(params);\n }\n\n // Default welcome template\n return {\n subject: params.appName ? `Welcome to ${params.appName}!` : 'Welcome!',\n text: `Welcome! Your account has been created successfully.`,\n html: `\n<!DOCTYPE html>\n<html>\n<head><meta charset=\"utf-8\"></head>\n<body style=\"font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; padding: 20px;\">\n <h1>Welcome${params.appName ? ` to ${params.appName}` : ''}!</h1>\n <p>Your account has been created successfully.</p>\n</body>\n</html>`,\n };\n}\n\n/**\n * Get password reset template\n */\nexport function getPasswordResetTemplate(params: { resetLink: string; expiresInMinutes?: number; appName?: string }): EmailTemplateResult\n{\n if (customTemplates.passwordReset)\n {\n return customTemplates.passwordReset(params);\n }\n\n const expires = params.expiresInMinutes || 30;\n\n return {\n subject: 'Reset your password',\n text: `Click this link to reset your password: ${params.resetLink}\\n\\nThis link will expire in ${expires} minutes.`,\n html: `\n<!DOCTYPE html>\n<html>\n<head><meta charset=\"utf-8\"></head>\n<body style=\"font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; padding: 20px;\">\n <h1>Reset Your Password</h1>\n <p>Click the button below to reset your password:</p>\n <a href=\"${params.resetLink}\" style=\"display: inline-block; background: #667eea; color: white; padding: 12px 24px; text-decoration: none; border-radius: 6px;\">Reset Password</a>\n <p style=\"color: #666; margin-top: 20px;\">This link will expire in ${expires} minutes.</p>\n</body>\n</html>`,\n };\n}\n\n/**\n * Get invitation template\n */\nexport function getInvitationTemplate(params: { inviteLink: string; inviterName?: string; roleName?: string; appName?: string }): EmailTemplateResult\n{\n if (customTemplates.invitation)\n {\n return customTemplates.invitation(params);\n }\n\n const appName = params.appName || 'our platform';\n const inviterText = params.inviterName ? `${params.inviterName} has invited you` : 'You have been invited';\n const roleText = params.roleName ? ` as ${params.roleName}` : '';\n\n return {\n subject: `You're invited to join ${appName}`,\n text: `${inviterText} to join ${appName}${roleText}.\\n\\nClick here to accept: ${params.inviteLink}`,\n html: `\n<!DOCTYPE html>\n<html>\n<head><meta charset=\"utf-8\"></head>\n<body style=\"font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; padding: 20px;\">\n <h1>You're Invited!</h1>\n <p>${inviterText} to join <strong>${appName}</strong>${roleText}.</p>\n <a href=\"${params.inviteLink}\" style=\"display: inline-block; background: #667eea; color: white; padding: 12px 24px; text-decoration: none; border-radius: 6px;\">Accept Invitation</a>\n</body>\n</html>`,\n };\n}\n","/**\n * @spfn/auth - Key Service\n *\n * Handles public key registration, rotation, and revocation\n */\n\nimport { type KeyAlgorithmType } from '../types';\nimport { verifyKeyFingerprint } from '../helpers/jwt';\nimport { InvalidKeyFingerprintError } from '@spfn/auth/errors';\nimport { keysRepository } from '../repositories';\n\nexport interface RegisterPublicKeyParams\n{\n userId: number;\n keyId: string;\n publicKey: string;\n fingerprint: string;\n algorithm?: KeyAlgorithmType;\n}\n\nexport interface RotateKeyParams\n{\n userId: number;\n oldKeyId: string;\n newKeyId: string;\n newPublicKey: string;\n fingerprint: string;\n algorithm?: KeyAlgorithmType;\n}\n\nexport interface RotateKeyResult\n{\n success: boolean;\n keyId: string;\n}\n\nexport interface RevokeKeyParams\n{\n userId: number;\n keyId: string;\n reason: string;\n}\n\n/**\n * Helper: Calculate key expiry date (90 days from now)\n */\nfunction getKeyExpiryDate(): Date\n{\n const expiresAt = new Date();\n expiresAt.setDate(expiresAt.getDate() + 90);\n return expiresAt;\n}\n\n/**\n * Register a new public key for a user\n */\nexport async function registerPublicKeyService(\n params: RegisterPublicKeyParams\n): Promise<void>\n{\n const { userId, keyId, publicKey, fingerprint, algorithm = 'ES256' } = params;\n\n // Verify fingerprint matches public key\n const isValidFingerprint = verifyKeyFingerprint(publicKey, fingerprint);\n if (!isValidFingerprint)\n {\n throw new InvalidKeyFingerprintError();\n }\n\n // Store public key (90 days expiry)\n await keysRepository.create({\n userId,\n keyId,\n publicKey,\n algorithm,\n fingerprint,\n isActive: true,\n createdAt: new Date(),\n expiresAt: getKeyExpiryDate(),\n });\n}\n\n/**\n * Rotate user's public key (revoke old, register new)\n */\nexport async function rotateKeyService(\n params: RotateKeyParams\n): Promise<RotateKeyResult>\n{\n const { userId, oldKeyId, newKeyId, newPublicKey, fingerprint, algorithm = 'ES256' } = params;\n\n // Verify fingerprint matches public key\n const isValidFingerprint = verifyKeyFingerprint(newPublicKey, fingerprint);\n if (!isValidFingerprint)\n {\n throw new InvalidKeyFingerprintError();\n }\n\n // Revoke old key\n await keysRepository.revokeByKeyIdAndUserId(\n oldKeyId,\n userId,\n 'Replaced by key rotation'\n );\n\n // Store new public key (90 days expiry)\n await keysRepository.create({\n userId,\n keyId: newKeyId,\n publicKey: newPublicKey,\n algorithm,\n fingerprint,\n isActive: true,\n createdAt: new Date(),\n expiresAt: getKeyExpiryDate(),\n });\n\n return {\n success: true,\n keyId: newKeyId,\n };\n}\n\n/**\n * Revoke a user's public key\n */\nexport async function revokeKeyService(\n params: RevokeKeyParams\n): Promise<void>\n{\n const { userId, keyId, reason } = params;\n\n await keysRepository.revokeByKeyIdAndUserId(keyId, userId, reason);\n}","/**\n * @spfn/auth - User Service\n *\n * Handles user CRUD operations\n */\n\nimport { type NewUser } from \"../entities/users\";\nimport { usersRepository } from '../repositories';\n\n/**\n * Get user by ID\n */\nexport async function getUserByIdService(userId: number)\n{\n return await usersRepository.findById(userId);\n}\n\n/**\n * Get user by email\n */\nexport async function getUserByEmailService(email: string)\n{\n return await usersRepository.findByEmail(email);\n}\n\n/**\n * Get user by phone\n */\nexport async function getUserByPhoneService(phone: string)\n{\n return await usersRepository.findByPhone(phone);\n}\n\n/**\n * Update user's last login timestamp\n */\nexport async function updateLastLoginService(userId: number)\n{\n await usersRepository.updateLastLogin(userId);\n}\n\n/**\n * Update user data\n */\nexport async function updateUserService(\n userId: number,\n updates: Partial<NewUser>\n): Promise<void>\n{\n await usersRepository.updateById(userId, updates);\n}","/**\n * @spfn/auth - RBAC Initialization Service\n *\n * Initialize roles, permissions, and their mappings\n */\n\nimport {\n rolesRepository,\n permissionsRepository,\n rolePermissionsRepository,\n} from '../repositories';\nimport {\n BUILTIN_ROLES,\n BUILTIN_PERMISSIONS,\n BUILTIN_ROLE_PERMISSIONS,\n} from '../rbac';\nimport type { AuthInitOptions, RoleConfig, PermissionConfig } from '../rbac';\nimport { configureAuth } from '../lib/config';\nimport { authLogger } from '../logger';\n\n/**\n * Initialize auth package with RBAC system\n *\n * Creates built-in roles, permissions, and custom configurations\n *\n * @param options - Initialization options\n *\n * @example\n * ```typescript\n * // Minimal - only built-in roles (user, admin, superadmin)\n * await initializeAuth();\n *\n * // Custom roles and permissions\n * await initializeAuth({\n * roles: [\n * { name: 'project-manager', displayName: 'Project Manager', priority: 50 },\n * { name: 'developer', displayName: 'Developer', priority: 30 },\n * ],\n * permissions: [\n * { name: 'project:create', displayName: 'Create Project', category: 'project' },\n * { name: 'task:assign', displayName: 'Assign Task', category: 'task' },\n * ],\n * rolePermissions: {\n * 'project-manager': ['project:create', 'task:assign'],\n * 'developer': ['task:complete'],\n * },\n * });\n * ```\n */\nexport async function initializeAuth(options: AuthInitOptions = {}): Promise<void>\n{\n authLogger.service.info('🔐 Initializing RBAC system...');\n\n // Configure global auth settings\n if (options.sessionTtl !== undefined)\n {\n configureAuth({\n sessionTtl: options.sessionTtl,\n });\n authLogger.service.info(`⏱️ Session TTL: ${options.sessionTtl}`);\n }\n\n // 1. Collect all roles (built-in + custom)\n const allRoles: RoleConfig[] = [\n ...Object.values(BUILTIN_ROLES),\n ...(options.roles || []),\n ];\n\n // 2. Create/update all roles\n for (const roleConfig of allRoles)\n {\n await upsertRole(roleConfig);\n }\n\n // 3. Collect all permissions (built-in + custom)\n const allPermissions: PermissionConfig[] = [\n ...Object.values(BUILTIN_PERMISSIONS),\n ...(options.permissions || []),\n ];\n\n // 4. Create/update all permissions\n for (const permConfig of allPermissions)\n {\n await upsertPermission(permConfig);\n }\n\n // 5. Collect all role-permission mappings (built-in + custom)\n const allMappings: Record<string, string[]> = { ...BUILTIN_ROLE_PERMISSIONS };\n\n // Merge custom mappings\n if (options.rolePermissions)\n {\n for (const [roleName, permNames] of Object.entries(options.rolePermissions))\n {\n if (allMappings[roleName])\n {\n // Merge with existing mappings (deduplicate)\n allMappings[roleName] = [\n ...new Set([...allMappings[roleName], ...permNames]),\n ];\n }\n else\n {\n // New role mapping\n allMappings[roleName] = permNames;\n }\n }\n }\n\n // 6. Create all role-permission mappings\n for (const [roleName, permNames] of Object.entries(allMappings))\n {\n await assignPermissionsToRole(roleName, permNames);\n }\n\n authLogger.service.info('✅ RBAC initialization complete');\n authLogger.service.info(`📊 Roles: ${allRoles.length}, Permissions: ${allPermissions.length}`);\n authLogger.service.info('🔒 Built-in roles: user, admin, superadmin');\n}\n\n/**\n * Create or update a role (idempotent)\n */\nasync function upsertRole(config: RoleConfig): Promise<void>\n{\n const existing = await rolesRepository.findByName(config.name);\n\n if (!existing)\n {\n // Create new role\n await rolesRepository.create({\n name: config.name,\n displayName: config.displayName,\n description: config.description || null,\n priority: config.priority ?? 10,\n isSystem: config.isSystem ?? false,\n isBuiltin: config.isBuiltin ?? false,\n isActive: true,\n });\n\n authLogger.service.info(` ✅ Created role: ${config.name}`);\n }\n else\n {\n // Update existing role (but preserve priority for built-in roles)\n const updateData: any = {\n displayName: config.displayName,\n description: config.description || null,\n };\n\n // Only update priority for non-builtin roles\n if (!existing.isBuiltin)\n {\n updateData.priority = config.priority ?? existing.priority;\n }\n\n await rolesRepository.updateById(existing.id, updateData);\n }\n}\n\n/**\n * Create or update a permission (idempotent)\n */\nasync function upsertPermission(config: PermissionConfig): Promise<void>\n{\n const existing = await permissionsRepository.findByName(config.name);\n\n if (!existing)\n {\n // Create new permission\n await permissionsRepository.create({\n name: config.name,\n displayName: config.displayName,\n description: config.description || null,\n category: config.category || null,\n isSystem: config.isSystem ?? false,\n isBuiltin: config.isBuiltin ?? false,\n isActive: true,\n metadata: null,\n });\n\n authLogger.service.info(` ✅ Created permission: ${config.name}`);\n }\n else\n {\n // Update existing permission\n await permissionsRepository.updateById(existing.id, {\n displayName: config.displayName,\n description: config.description || null,\n category: config.category || null,\n });\n }\n}\n\n/**\n * Assign permissions to a role\n */\nasync function assignPermissionsToRole(roleName: string, permissionNames: string[]): Promise<void>\n{\n // Get role\n const role = await rolesRepository.findByName(roleName);\n\n if (!role)\n {\n authLogger.service.warn(` ⚠️ Role not found: ${roleName}, skipping permission assignment`);\n return;\n }\n\n // Get permissions\n const perms = await permissionsRepository.findByNames(permissionNames);\n\n if (perms.length === 0)\n {\n authLogger.service.warn(` ⚠️ No permissions found for role: ${roleName}`);\n return;\n }\n\n // Get existing mappings to avoid duplicates\n const existingMappings = await rolePermissionsRepository.findByRoleId(role.id);\n const existingPermIds = new Set(existingMappings.map(m => m.permissionId));\n\n // Create new mappings (skip duplicates)\n const newMappings = perms\n .filter(perm => !existingPermIds.has(perm.id))\n .map(perm => ({\n roleId: role.id,\n permissionId: perm.id,\n }));\n\n if (newMappings.length > 0)\n {\n await rolePermissionsRepository.createMany(newMappings);\n }\n}","/**\n * @spfn/auth - Global Configuration\n *\n * Manages global auth configuration including session TTL\n */\n\nimport { env } from '@spfn/auth/config';\n\n/**\n * Cookie names used by SPFN Auth\n */\nexport const COOKIE_NAMES = {\n /** Encrypted session data (userId, privateKey, keyId, algorithm) */\n SESSION: 'spfn_session',\n /** Current key ID (for key rotation) */\n SESSION_KEY_ID: 'spfn_session_key_id',\n} as const;\n\n/**\n * Parse duration string to seconds\n *\n * Supports: '30d', '12h', '45m', '3600s', or plain number\n *\n * @example\n * parseDuration('30d') // 2592000 (30 days in seconds)\n * parseDuration('12h') // 43200\n * parseDuration('45m') // 2700\n * parseDuration('3600') // 3600\n */\nexport function parseDuration(duration: string | number): number\n{\n if (typeof duration === 'number')\n {\n return duration;\n }\n\n const match = duration.match(/^(\\d+)([dhms]?)$/);\n if (!match)\n {\n throw new Error(`Invalid duration format: ${duration}. Use format like '30d', '12h', '45m', '3600s', or plain number.`);\n }\n\n const value = parseInt(match[1], 10);\n const unit = match[2] || 's';\n\n switch (unit)\n {\n case 'd':\n return value * 24 * 60 * 60;\n case 'h':\n return value * 60 * 60;\n case 'm':\n return value * 60;\n case 's':\n return value;\n default:\n throw new Error(`Unknown duration unit: ${unit}`);\n }\n}\n\n/**\n * Auth configuration\n */\nexport interface AuthConfig\n{\n /**\n * Default session TTL in seconds or duration string\n *\n * Supports:\n * - Number: seconds (e.g., 2592000)\n * - String: '30d', '12h', '45m', '3600s'\n *\n * @default 7d (7 days)\n */\n sessionTtl?: string | number;\n}\n\n/**\n * Global auth configuration state\n */\nlet globalConfig: AuthConfig = {\n sessionTtl: '7d', // Default: 7 days\n};\n\n/**\n * Configure global auth settings\n *\n * @param config - Auth configuration\n *\n * @example\n * ```typescript\n * configureAuth({\n * sessionTtl: '30d', // 30 days\n * });\n * ```\n */\nexport function configureAuth(config: AuthConfig): void\n{\n globalConfig = {\n ...globalConfig,\n ...config,\n };\n}\n\n/**\n * Get current auth configuration\n */\nexport function getAuthConfig(): AuthConfig\n{\n return { ...globalConfig };\n}\n\n/**\n * Get session TTL in seconds\n *\n * Priority:\n * 1. Runtime override (remember parameter)\n * 2. Global config (configureAuth)\n * 3. Environment variable (SPFN_AUTH_SESSION_TTL) - via config module\n * 4. Default (7 days)\n */\nexport function getSessionTtl(override?: string | number): number\n{\n // 1. Runtime override\n if (override !== undefined)\n {\n return parseDuration(override);\n }\n\n // 2. Global config\n if (globalConfig.sessionTtl !== undefined)\n {\n return parseDuration(globalConfig.sessionTtl);\n }\n\n // 3. Environment variable (from config module)\n const envTtl = env.SPFN_AUTH_SESSION_TTL;\n if (envTtl)\n {\n return parseDuration(envTtl);\n }\n\n // 4. Default: 7 days\n return 7 * 24 * 60 * 60;\n}","/**\n * @spfn/auth - Permission Service\n *\n * Permission checking and validation logic\n */\n\nimport {\n usersRepository,\n rolesRepository,\n permissionsRepository,\n rolePermissionsRepository,\n userPermissionsRepository,\n} from '../repositories';\n\n/**\n * Get all permissions for a user\n *\n * Combines role-based permissions with user-specific overrides\n * Handles expiration of temporary permissions\n *\n * @param userId - User ID (string, number, or bigint)\n * @returns Array of permission names\n *\n * @example\n * ```typescript\n * const perms = await getUserPermissions('123');\n * // ['auth:self:manage', 'user:read', 'post:create']\n * ```\n */\nexport async function getUserPermissions(userId: string | number | bigint): Promise<string[]>\n{\n const userIdNum = typeof userId === 'string' ? Number(userId) : Number(userId);\n\n // 1. Get user's role\n const user = await usersRepository.findById(userIdNum);\n\n if (!user || !user.roleId)\n {\n return [];\n }\n\n const permSet = new Set<string>();\n\n // 2. Get role-based permissions\n const rolePermMappings = await rolePermissionsRepository.findByRoleId(user.roleId);\n const permIds = rolePermMappings.map(rp => rp.permissionId);\n\n if (permIds.length > 0)\n {\n const rolePerms = await Promise.all(\n permIds.map(id => permissionsRepository.findById(id))\n );\n\n for (const perm of rolePerms)\n {\n if (perm && perm.isActive)\n {\n permSet.add(perm.name);\n }\n }\n }\n\n // 3. Apply user-specific permission overrides\n const userPermMappings = await userPermissionsRepository.findValidByUserId(userIdNum);\n\n for (const userPermMapping of userPermMappings)\n {\n const perm = await permissionsRepository.findById(userPermMapping.permissionId);\n if (!perm) continue;\n\n if (userPermMapping.granted)\n {\n // Grant permission (add even if not in role)\n permSet.add(perm.name);\n }\n else\n {\n // Revoke permission (remove even if in role)\n permSet.delete(perm.name);\n }\n }\n\n return Array.from(permSet);\n}\n\n/**\n * Check if user has a specific permission\n *\n * @param userId - User ID\n * @param permissionName - Permission name (e.g., 'user:delete')\n * @returns true if user has permission\n *\n * @example\n * ```typescript\n * if (await hasPermission('123', 'user:delete')) {\n * // User can delete users\n * }\n * ```\n */\nexport async function hasPermission(\n userId: string | number | bigint,\n permissionName: string\n): Promise<boolean>\n{\n const perms = await getUserPermissions(userId);\n return perms.includes(permissionName);\n}\n\n/**\n * Check if user has any of the specified permissions\n *\n * @param userId - User ID\n * @param permissionNames - Array of permission names\n * @returns true if user has at least one permission\n *\n * @example\n * ```typescript\n * if (await hasAnyPermission('123', ['post:read', 'admin:access'])) {\n * // User can access content\n * }\n * ```\n */\nexport async function hasAnyPermission(\n userId: string | number | bigint,\n permissionNames: string[]\n): Promise<boolean>\n{\n const perms = await getUserPermissions(userId);\n return permissionNames.some(p => perms.includes(p));\n}\n\n/**\n * Check if user has all of the specified permissions\n *\n * @param userId - User ID\n * @param permissionNames - Array of permission names\n * @returns true if user has all permissions\n *\n * @example\n * ```typescript\n * if (await hasAllPermissions('123', ['post:write', 'post:publish'])) {\n * // User can write AND publish\n * }\n * ```\n */\nexport async function hasAllPermissions(\n userId: string | number | bigint,\n permissionNames: string[]\n): Promise<boolean>\n{\n const perms = await getUserPermissions(userId);\n return permissionNames.every(p => perms.includes(p));\n}\n\n/**\n * Get user's role name\n *\n * @param userId - User ID\n * @returns Role name or null if user has no role\n *\n * @example\n * ```typescript\n * const role = await getUserRole('123');\n * // 'admin' or null\n * ```\n */\nexport async function getUserRole(userId: string | number | bigint): Promise<string | null>\n{\n const userIdNum = typeof userId === 'string' ? Number(userId) : Number(userId);\n\n const user = await usersRepository.findById(userIdNum);\n\n if (!user || !user.roleId)\n {\n return null;\n }\n\n const role = await rolesRepository.findById(user.roleId);\n\n return role?.name || null;\n}\n\n/**\n * Check if user has a specific role\n *\n * @param userId - User ID\n * @param roleName - Role name (e.g., 'admin', 'superadmin')\n * @returns true if user has role\n *\n * @example\n * ```typescript\n * if (await hasRole('123', 'admin')) {\n * // User is admin\n * }\n * ```\n */\nexport async function hasRole(userId: string | number | bigint, roleName: string): Promise<boolean>\n{\n const role = await getUserRole(userId);\n return role === roleName;\n}\n\n/**\n * Check if user has any of the specified roles\n *\n * @param userId - User ID\n * @param roleNames - Array of role names\n * @returns true if user has at least one role\n */\nexport async function hasAnyRole(userId: string | number | bigint, roleNames: string[]): Promise<boolean>\n{\n for (const roleName of roleNames)\n {\n if (await hasRole(userId, roleName))\n {\n return true;\n }\n }\n\n return false;\n}","/**\n * @spfn/auth - Services Export\n *\n * All business logic services for reusability\n */\n\n// Auth Service\nexport {\n checkAccountExistsService,\n registerService,\n loginService,\n logoutService,\n changePasswordService,\n} from './auth.service';\n\nexport type {\n CheckAccountExistsParams,\n CheckAccountExistsResult,\n RegisterParams,\n RegisterResult,\n LoginParams,\n LoginResult,\n LogoutParams,\n ChangePasswordParams,\n} from './auth.service';\n\n// Verification Service\nexport {\n sendVerificationCodeService,\n verifyCodeService,\n} from './verification.service';\n\nexport type {\n SendVerificationCodeParams,\n SendVerificationCodeResult,\n VerifyCodeParams,\n VerifyCodeResult,\n} from './verification.service';\n\n// Key Service\nexport {\n registerPublicKeyService,\n rotateKeyService,\n revokeKeyService,\n} from './key.service';\n\nexport type {\n RegisterPublicKeyParams,\n RotateKeyParams,\n RotateKeyResult,\n RevokeKeyParams,\n} from './key.service';\n\n// User Service\nexport {\n getUserByIdService,\n getUserByEmailService,\n getUserByPhoneService,\n updateLastLoginService,\n updateUserService,\n} from './user.service';\n\n// RBAC Service\nexport {\n initializeAuth,\n} from './rbac.service';\n\n// Permission Service\nexport {\n getUserPermissions,\n hasPermission,\n hasAnyPermission,\n hasAllPermissions,\n getUserRole,\n hasRole,\n hasAnyRole,\n} from './permission.service';\n\n// Role Service\nexport {\n createRole,\n updateRole,\n deleteRole,\n addPermissionToRole,\n removePermissionFromRole,\n setRolePermissions,\n getAllRoles,\n getRoleByName,\n getRolePermissions,\n} from './role.service';\n\n// Invitation Service\nexport {\n createInvitation,\n getInvitationByToken,\n getInvitationWithDetails,\n validateInvitation,\n acceptInvitation,\n listInvitations,\n cancelInvitation,\n deleteInvitation,\n expireOldInvitations,\n resendInvitation,\n} from './invitation.service';\n\n// Auth Session Service (new)\nexport { getAuthSessionService } from './auth-session.service';\n\n// User Profile Service (new)\nexport { getUserProfileService, updateUserProfileService } from './user-profile.service';\nexport type { UpdateProfileParams } from './user-profile.service';\n\n// Email Templates\nexport {\n registerEmailTemplates,\n getVerificationCodeTemplate,\n getWelcomeTemplate,\n getPasswordResetTemplate,\n getInvitationTemplate,\n} from './email/templates';\n\nexport type {\n EmailTemplateProvider,\n EmailTemplateResult,\n VerificationCodeParams,\n} from './email/templates';\n\n// Email Service\nexport { sendEmail, registerEmailProvider } from './email';\nexport type { SendEmailParams, SendEmailResult, EmailProvider } from './email';\n\n// SMS Service\nexport { sendSMS, registerSMSProvider } from './sms';\nexport type { SendSMSParams, SendSMSResult, SMSProvider } from './sms';","/**\n * @spfn/auth - Invitation Service\n *\n * User invitation management for invite-only registration\n */\n\nimport crypto from 'crypto';\nimport { Invitation } from \"../entities/user-invitations\";\nimport {\n invitationsRepository,\n usersRepository,\n rolesRepository,\n keysRepository,\n} from '../repositories';\nimport type { InvitationStatus, KeyAlgorithmType } from '../types';\nimport { hashPassword } from '../helpers';\n\n/**\n * Generate unique invitation token (UUID v4)\n */\nfunction generateInvitationToken(): string\n{\n return crypto.randomUUID();\n}\n\n/**\n * Calculate expiration date from now\n *\n * @param days - Number of days until expiration (default: 7)\n * @returns Expiration timestamp\n */\nfunction calculateExpiresAt(days: number = 7): Date\n{\n const expiresAt = new Date();\n expiresAt.setDate(expiresAt.getDate() + days);\n return expiresAt;\n}\n\n/**\n * Create a new invitation\n *\n * @param params - Invitation parameters\n * @returns Created invitation\n * @throws Error if validation fails\n *\n * @example\n * ```typescript\n * const invitation = await createInvitation({\n * email: 'newuser@example.com',\n * roleId: 2n,\n * invitedBy: 1n,\n * expiresInDays: 7,\n * metadata: { message: 'Welcome!' }\n * });\n * ```\n */\nexport async function createInvitation(params: {\n email: string;\n roleId: number;\n invitedBy: number;\n expiresInDays?: number;\n metadata?: Record<string, any>;\n}): Promise<Invitation>\n{\n const { email, roleId, invitedBy, expiresInDays = 7, metadata } = params;\n\n // Validate email format\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n if (!emailRegex.test(email))\n {\n throw new Error('Invalid email format');\n }\n\n // Check if user already exists\n const existingUser = await usersRepository.findByEmail(email);\n\n if (existingUser)\n {\n throw new Error('User with this email already exists');\n }\n\n // Check if there's already a pending invitation for this email\n const existingInvitation = await invitationsRepository.findPendingByEmail(email);\n\n if (existingInvitation)\n {\n throw new Error('Pending invitation already exists for this email');\n }\n\n // Verify role exists\n const role = await rolesRepository.findById(roleId);\n\n if (!role)\n {\n throw new Error(`Role with id ${roleId} not found`);\n }\n\n // Verify inviter exists\n const inviter = await usersRepository.findById(invitedBy);\n\n if (!inviter)\n {\n throw new Error(`User with id ${invitedBy} not found`);\n }\n\n // Generate unique token\n const token = generateInvitationToken();\n const expiresAt = calculateExpiresAt(expiresInDays);\n\n // Create invitation\n const invitation = await invitationsRepository.create({\n email,\n token,\n roleId,\n invitedBy,\n status: 'pending',\n expiresAt,\n metadata: metadata || null,\n });\n\n console.log(`[Auth] ✅ Created invitation: ${email} as ${role.name} (expires: ${expiresAt.toISOString()})`);\n\n return invitation;\n}\n\n/**\n * Get invitation by token\n *\n * @param token - Invitation token (UUID)\n * @returns Invitation or null if not found\n */\nexport async function getInvitationByToken(token: string)\n{\n return await invitationsRepository.findByToken(token);\n}\n\n/**\n * Get invitation with role and inviter details\n *\n * @param token - Invitation token\n * @returns Invitation with joined data or null\n */\nexport async function getInvitationWithDetails(token: string)\n{\n return await invitationsRepository.findByTokenWithDetails(token);\n}\n\n/**\n * Validate invitation\n *\n * Checks if invitation is valid for acceptance\n *\n * @param token - Invitation token\n * @returns Validation result\n */\nexport async function validateInvitation(token: string): Promise<{\n valid: boolean;\n invitation?: Invitation;\n error?: string;\n}>\n{\n const invitation = await getInvitationByToken(token);\n\n if (!invitation)\n {\n return { valid: false, error: 'Invitation not found' };\n }\n\n if (invitation.status === 'accepted')\n {\n return { valid: false, error: 'Invitation already accepted', invitation };\n }\n\n if (invitation.status === 'cancelled')\n {\n return { valid: false, error: 'Invitation was cancelled', invitation };\n }\n\n if (invitation.status === 'expired')\n {\n return { valid: false, error: 'Invitation has expired', invitation };\n }\n\n // Check if expired by time\n if (new Date() > new Date(invitation.expiresAt))\n {\n return { valid: false, error: 'Invitation has expired', invitation };\n }\n\n return { valid: true, invitation };\n}\n\n/**\n * Accept invitation and create user account\n *\n * @param params - Acceptance parameters\n * @returns Created user info\n * @throws Error if invitation is invalid or user creation fails\n *\n * @example\n * ```typescript\n * const user = await acceptInvitation({\n * token: 'uuid-v4',\n * password: 'SecurePass123!',\n * publicKey: 'base64-der...',\n * keyId: 'uuid-v4',\n * fingerprint: 'sha256-hex',\n * algorithm: 'ES256'\n * });\n * ```\n */\nexport async function acceptInvitation(params: {\n token: string;\n password: string;\n publicKey: string;\n keyId: string;\n fingerprint: string;\n algorithm: KeyAlgorithmType;\n}) {\n const { token, password, publicKey, keyId, fingerprint, algorithm } = params;\n\n // Validate invitation\n const validation = await validateInvitation(token);\n\n if (!validation.valid || !validation.invitation)\n {\n throw new Error(validation.error || 'Invalid invitation');\n }\n\n const invitation = validation.invitation;\n\n // Get role details\n const role = await rolesRepository.findById(invitation.roleId);\n\n if (!role)\n {\n throw new Error('Role not found');\n }\n\n // Hash password\n const passwordHash = await hashPassword(password);\n\n // Create user\n const newUser = await usersRepository.create({\n email: invitation.email,\n passwordHash,\n roleId: invitation.roleId,\n emailVerifiedAt: new Date(), // Auto-verify invited users\n passwordChangeRequired: false,\n status: 'active',\n });\n\n // Create public key for asymmetric JWT\n await keysRepository.create({\n userId: newUser.id,\n keyId,\n publicKey,\n algorithm,\n fingerprint,\n isActive: true,\n expiresAt: new Date(Date.now() + 90 * 24 * 60 * 60 * 1000), // 90 days\n });\n\n // Update invitation status\n await invitationsRepository.updateStatus(\n invitation.id,\n 'accepted',\n new Date()\n );\n\n console.log(`[Auth] ✅ Invitation accepted: ${invitation.email} as ${role.name}`);\n\n return {\n userId: newUser.id,\n email: newUser.email!,\n role: role.name,\n };\n}\n\n/**\n * List invitations with filtering and pagination\n *\n * @param params - Query parameters\n * @returns Paginated invitations\n *\n * @example\n * ```typescript\n * const result = await listInvitations({\n * status: 'pending',\n * invitedBy: 1n,\n * page: 1,\n * limit: 20\n * });\n * ```\n */\nexport async function listInvitations(params: {\n status?: InvitationStatus;\n invitedBy?: number;\n page?: number;\n limit?: number;\n}) {\n return await invitationsRepository.list(params);\n}\n\n/**\n * Cancel invitation\n *\n * Only pending invitations can be cancelled\n *\n * @param id - Invitation ID\n * @param cancelledBy - User ID who cancelled\n * @param reason - Optional cancellation reason\n * @throws Error if invitation cannot be cancelled\n */\nexport async function cancelInvitation(\n id: number,\n cancelledBy: number,\n reason?: string\n) {\n // Get invitation\n const invitation = await invitationsRepository.findById(id);\n\n if (!invitation)\n {\n throw new Error('Invitation not found');\n }\n\n if (invitation.status !== 'pending')\n {\n throw new Error(`Cannot cancel ${invitation.status} invitation`);\n }\n\n // Cancel invitation with metadata\n await invitationsRepository.cancel(id, cancelledBy, reason, invitation.metadata);\n\n console.log(`[Auth] ⚠️ Invitation cancelled: ${invitation.email} (reason: ${reason || 'none'})`);\n}\n\n/**\n * Delete invitation\n *\n * Permanently removes invitation record\n * Typically only for superadmin cleanup\n *\n * @param id - Invitation ID\n */\nexport async function deleteInvitation(id: number)\n{\n await invitationsRepository.deleteById(id);\n\n console.log(`[Auth] 🗑️ Invitation deleted: ${id}`);\n}\n\n/**\n * Expire old invitations (cron job)\n *\n * Updates status of expired pending invitations\n *\n * @returns Number of invitations expired\n */\nexport async function expireOldInvitations()\n{\n const count = await invitationsRepository.updateExpiredInvitations();\n\n if (count > 0)\n {\n console.log(`[Auth] ⏰ Expired ${count} old invitations`);\n }\n\n return count;\n}\n\n/**\n * Resend invitation email\n *\n * Extends expiration and triggers email resend\n *\n * @param id - Invitation ID\n * @param expiresInDays - New expiration period (default: 7)\n * @returns Updated invitation\n * @throws Error if invitation cannot be resent\n */\nexport async function resendInvitation(\n id: number,\n expiresInDays: number = 7\n) {\n // Get invitation\n const invitation = await invitationsRepository.findById(id);\n\n if (!invitation)\n {\n throw new Error('Invitation not found');\n }\n\n // Can only resend pending or expired invitations\n if (!['pending', 'expired'].includes(invitation.status))\n {\n throw new Error(`Cannot resend ${invitation.status} invitation`);\n }\n\n // Update expiration and status\n const newExpiresAt = calculateExpiresAt(expiresInDays);\n\n const updated = await invitationsRepository.resend(id, newExpiresAt);\n\n if (!updated)\n {\n throw new Error('Failed to update invitation');\n }\n\n console.log(`[Auth] 📧 Invitation resent: ${invitation.email} (new expiry: ${newExpiresAt.toISOString()})`);\n\n return updated;\n}","/**\n * @spfn/auth - Auth Session Service\n *\n * Service for retrieving authentication session information\n * Returns minimal user info with role and permissions\n */\nimport { usersRepository } from '../repositories';\n\n/**\n * Get authentication session information\n *\n * @param userId - User ID (string, number, or bigint)\n * @returns Auth session data (minimal user info + role + permissions)\n *\n * @example\n * ```typescript\n * const session = await getAuthSessionService('123');\n * console.log(session.userId); // '123'\n * console.log(session.role.name); // 'admin'\n * console.log(session.permissions.length); // 15\n * ```\n */\nexport async function getAuthSessionService(userId: string | number | bigint)\n{\n const userIdNum = typeof userId === 'string' ? Number(userId) : Number(userId);\n\n // Fetch user and role/permissions in parallel\n const [user, roleAndPerms] = await Promise.all([\n usersRepository.fetchMinimalUserData(userIdNum),\n usersRepository.fetchUserRoleAndPermissions(userIdNum),\n ]);\n\n return {\n userId: user.userId,\n email: user.email,\n emailVerified: user.isEmailVerified,\n phoneVerified: user.isPhoneVerified,\n ...roleAndPerms,\n };\n}","/**\n * @spfn/auth - User Profile Service\n *\n * Service for retrieving and updating user profile information\n * Returns full user info with profile data\n */\n\nimport type { UserProfile, ProfileInfo } from '@spfn/auth';\nimport { usersRepository, userProfilesRepository } from '../repositories';\n\n/**\n * Profile update parameters\n * All fields are optional, empty string will be converted to null\n */\nexport interface UpdateProfileParams\n{\n displayName?: string;\n firstName?: string;\n lastName?: string;\n avatarUrl?: string;\n bio?: string;\n locale?: string;\n timezone?: string;\n dateOfBirth?: string;\n gender?: string;\n website?: string;\n location?: string;\n company?: string;\n jobTitle?: string;\n metadata?: Record<string, any>;\n}\n\n/**\n * Get user profile information\n *\n * @param userId - User ID (string, number, or bigint)\n * @returns User profile data with profile nested\n *\n * @example\n * ```typescript\n * const data = await getUserProfileService('123');\n * console.log(data.email); // 'user@example.com'\n * console.log(data.profile?.displayName); // 'John Doe'\n * console.log(data.lastLoginAt); // '2024-01-01T00:00:00.000Z'\n * ```\n */\nexport async function getUserProfileService(userId: string | number | bigint): Promise<UserProfile>\n{\n const userIdNum = typeof userId === 'string' ? Number(userId) : Number(userId);\n\n // Fetch user and profile in parallel\n const [user, profile] = await Promise.all([\n usersRepository.fetchFullUserData(userIdNum),\n userProfilesRepository.fetchProfileData(userIdNum),\n ]);\n\n return {\n userId: user.userId,\n email: user.email,\n emailVerified: user.isEmailVerified,\n phoneVerified: user.isPhoneVerified,\n lastLoginAt: user.lastLoginAt,\n createdAt: user.createdAt,\n updatedAt: user.updatedAt,\n profile: profile,\n };\n}\n\n/**\n * Convert empty string to null\n */\nfunction emptyToNull<T>(value: T): T | null\n{\n if (value === '')\n {\n return null;\n }\n return value;\n}\n\n/**\n * Update user profile (upsert)\n *\n * Creates profile if not exists, updates if exists\n * Empty strings are converted to null\n *\n * @param userId - User ID\n * @param params - Profile fields to update\n * @returns Updated profile info\n *\n * @example\n * ```typescript\n * const profile = await updateUserProfileService(123, {\n * displayName: 'John Doe',\n * bio: 'Software Engineer',\n * location: '', // will be saved as null\n * });\n * ```\n */\nexport async function updateUserProfileService(\n userId: string | number | bigint,\n params: UpdateProfileParams\n): Promise<ProfileInfo>\n{\n const userIdNum = typeof userId === 'string' ? Number(userId) : Number(userId);\n\n // Build update data, converting empty strings to null\n const updateData: Record<string, any> = {};\n\n if (params.displayName !== undefined)\n {\n updateData.displayName = emptyToNull(params.displayName) || 'User';\n }\n if (params.firstName !== undefined)\n {\n updateData.firstName = emptyToNull(params.firstName);\n }\n if (params.lastName !== undefined)\n {\n updateData.lastName = emptyToNull(params.lastName);\n }\n if (params.avatarUrl !== undefined)\n {\n updateData.avatarUrl = emptyToNull(params.avatarUrl);\n }\n if (params.bio !== undefined)\n {\n updateData.bio = emptyToNull(params.bio);\n }\n if (params.locale !== undefined)\n {\n updateData.locale = emptyToNull(params.locale) || 'en';\n }\n if (params.timezone !== undefined)\n {\n updateData.timezone = emptyToNull(params.timezone) || 'UTC';\n }\n if (params.dateOfBirth !== undefined)\n {\n updateData.dateOfBirth = emptyToNull(params.dateOfBirth);\n }\n if (params.gender !== undefined)\n {\n updateData.gender = emptyToNull(params.gender);\n }\n if (params.website !== undefined)\n {\n updateData.website = emptyToNull(params.website);\n }\n if (params.location !== undefined)\n {\n updateData.location = emptyToNull(params.location);\n }\n if (params.company !== undefined)\n {\n updateData.company = emptyToNull(params.company);\n }\n if (params.jobTitle !== undefined)\n {\n updateData.jobTitle = emptyToNull(params.jobTitle);\n }\n if (params.metadata !== undefined)\n {\n updateData.metadata = params.metadata;\n }\n\n // Check if this is a new profile (need displayName)\n const existing = await userProfilesRepository.findByUserId(userIdNum);\n if (!existing && !updateData.displayName)\n {\n updateData.displayName = 'User';\n }\n\n // Upsert profile\n await userProfilesRepository.upsertByUserId(userIdNum, updateData);\n\n // Fetch and return updated profile\n const profile = await userProfilesRepository.fetchProfileData(userIdNum);\n\n return profile!;\n}","/**\n * @spfn/auth - Invitation Routes\n *\n * Thin route handlers for user invitation management\n */\n\nimport { EMAIL_PATTERN, UUID_PATTERN } from \"@spfn/auth\";\nimport { getAuth } from '../../helpers';\nimport { authenticate, requirePermissions, requireRole } from '../../middleware';\nimport { KEY_ALGORITHM } from '../../types';\nimport {\n getInvitationWithDetails,\n validateInvitation,\n acceptInvitation as _acceptInvitation,\n createInvitation as _createInvitation,\n listInvitations as _listInvitations,\n cancelInvitation as _cancelInvitation,\n resendInvitation as _resendInvitation,\n deleteInvitation as _deleteInvitation,\n} from \"../../services\";\nimport { Type } from '@sinclair/typebox';\nimport { defineRouter, route } from '@spfn/core/route';\n\n/**\n * Invitation status enum values\n */\nconst INVITATION_STATUSES = ['pending', 'accepted', 'expired', 'cancelled'] as const;\n\n// ==========================================\n// Public Routes (No Authentication Required)\n// ==========================================\n\n/**\n * GET /_auth/invitations/:token\n * Get invitation details for acceptance page\n */\nexport const getInvitation = route.get('/_auth/invitations/:token')\n .input({\n params: Type.Object({\n token: Type.String({\n pattern: UUID_PATTERN,\n description: 'Invitation token (UUID v4)'\n }),\n })\n })\n .skip(['auth'])\n .handler(async (c) =>\n {\n const { params } = await c.data();\n const token = params.token;\n\n const validation = await validateInvitation(token);\n\n if (!validation.valid || !validation.invitation)\n {\n throw new Error(validation.error || 'Invalid invitation');\n }\n\n // Get full details with role and inviter info\n const invitation = await getInvitationWithDetails(token);\n\n if (!invitation)\n {\n throw new Error('Invitation not found');\n }\n\n return {\n email: invitation.email,\n role: invitation.role.name,\n roleDisplayName: invitation.role.displayName,\n invitedBy: invitation.inviter.email || 'Unknown',\n expiresAt: invitation.expiresAt.toISOString(),\n metadata: invitation.metadata || undefined,\n };\n });\n\n/**\n * POST /_auth/invitations/accept\n * Accept invitation and create user account\n */\nexport const acceptInvitation = route.post('/_auth/invitations/accept')\n .input({\n body: Type.Object({\n token: Type.String({\n pattern: UUID_PATTERN,\n description: 'Invitation token'\n }),\n password: Type.String({\n minLength: 8,\n description: 'User password (minimum 8 characters)'\n }),\n })\n })\n .interceptor({\n body: Type.Object({\n publicKey: Type.String({ description: 'Client public key' }),\n keyId: Type.String({ description: 'Key identifier' }),\n fingerprint: Type.String({ description: 'Key fingerprint' }),\n algorithm: Type.Union(KEY_ALGORITHM.map(algo => Type.Literal(algo)), { description: 'Signature algorithm' }),\n })\n })\n .skip(['auth'])\n .handler(async (c) =>\n {\n const { body } = await c.data();\n\n return await _acceptInvitation({\n token: body.token,\n password: body.password,\n publicKey: body.publicKey,\n keyId: body.keyId,\n fingerprint: body.fingerprint,\n algorithm: body.algorithm,\n });\n });\n\n// ==========================================\n// Protected Routes (Admin Only)\n// ==========================================\n\n/**\n * POST /_auth/invitations\n * Create new invitation (requires user:invite permission)\n */\nexport const createInvitation = route.post('/_auth/invitations')\n .input({\n body: Type.Object({\n email: Type.String({\n pattern: EMAIL_PATTERN,\n description: 'Email address'\n }),\n roleId: Type.Number({\n description: 'Role ID to assign'\n }),\n expiresInDays: Type.Optional(Type.Number({\n minimum: 1,\n maximum: 30,\n description: 'Days until invitation expires (default: 7)'\n })),\n metadata: Type.Optional(Type.Any({\n description: 'Custom metadata (welcome message, department, etc.)'\n })),\n })\n })\n .use([authenticate, requirePermissions('user:invite')])\n .handler(async (c) =>\n {\n const { body } = await c.data();\n const { userId } = getAuth(c);\n\n const invitation = await _createInvitation({\n email: body.email,\n roleId: body.roleId,\n invitedBy: Number(userId),\n expiresInDays: body.expiresInDays,\n metadata: body.metadata,\n });\n\n // Build invitation URL (use environment variable or default)\n const baseUrl = process.env.SPFN_API_URL || 'http://localhost:8790';\n const invitationUrl = `${baseUrl}/auth/invite/${invitation.token}`;\n\n return {\n id: invitation.id,\n email: invitation.email,\n token: invitation.token,\n roleId: invitation.roleId,\n expiresAt: invitation.expiresAt.toISOString(),\n invitationUrl,\n };\n });\n\n/**\n * GET /_auth/invitations\n * List invitations with filtering (requires user:read permission)\n */\nexport const listInvitations = route.get('/_auth/invitations')\n .input({\n query: Type.Object({\n status: Type.Optional(Type.Union(\n INVITATION_STATUSES.map(s => Type.Literal(s)),\n { description: 'Filter by status' }\n )),\n page: Type.Optional(Type.Number({\n minimum: 1,\n description: 'Page number (default: 1)'\n })),\n limit: Type.Optional(Type.Number({\n minimum: 1,\n maximum: 100,\n description: 'Items per page (default: 20)'\n })),\n })\n })\n .use([authenticate, requirePermissions('user:read')])\n .handler(async (c) =>\n {\n const { query } = await c.data();\n\n const result = await _listInvitations({\n status: query.status as any,\n page: query.page ? Number(query.page) : undefined,\n limit: query.limit ? Number(query.limit) : undefined,\n });\n\n // Format dates to ISO strings\n const formattedInvitations = result.invitations;\n\n return {\n ...result,\n invitations: formattedInvitations,\n };\n });\n\n/**\n * POST /_auth/invitations/cancel\n * Cancel invitation (requires user:invite permission)\n */\nexport const cancelInvitation = route.post('/_auth/invitations/cancel')\n .input({\n body: Type.Object({\n id: Type.Number({\n description: 'Invitation ID'\n }),\n reason: Type.Optional(Type.String({\n description: 'Cancellation reason'\n })),\n })\n })\n .use([authenticate, requirePermissions('user:invite')])\n .handler(async (c) =>\n {\n const { body } = await c.data();\n const { userId } = getAuth(c);\n\n await _cancelInvitation(\n body.id,\n Number(userId),\n body.reason\n );\n\n return {\n cancelledAt: new Date().toISOString(),\n };\n });\n\n/**\n * POST /_auth/invitations/resend\n * Resend invitation email (requires user:invite permission)\n */\nexport const resendInvitation = route.post('/_auth/invitations/resend')\n .input({\n body: Type.Object({\n id: Type.Number({\n description: 'Invitation ID'\n }),\n expiresInDays: Type.Optional(Type.Number({\n minimum: 1,\n maximum: 30,\n description: 'New expiration period (default: 7)'\n })),\n })\n })\n .use([authenticate, requirePermissions('user:invite')])\n .handler(async (c) =>\n {\n const { body } = await c.data();\n\n const updated = await _resendInvitation(\n body.id,\n body.expiresInDays\n );\n\n return {\n expiresAt: updated.expiresAt.toISOString(),\n };\n });\n\n/**\n * POST /_auth/invitations/delete\n * Delete invitation permanently (requires superadmin role)\n */\nexport const deleteInvitation = route.post('/_auth/invitations/delete')\n .input({\n body: Type.Object({\n id: Type.Number({\n description: 'Invitation ID'\n }),\n })\n })\n .use([authenticate, requireRole('superadmin')])\n .handler(async (c) =>\n {\n const { body } = await c.data();\n\n await _deleteInvitation(body.id);\n\n return c.noContent();\n });\n\n// Export router\nexport const invitationRouter = defineRouter({\n getInvitation: getInvitation,\n acceptInvitation: acceptInvitation,\n createInvitation: createInvitation,\n listInvitations: listInvitations,\n cancelInvitation: cancelInvitation,\n resendInvitation: resendInvitation,\n deleteInvitation: deleteInvitation,\n});\n\n// For backward compatibility with file-based routing (temporary)\nexport default invitationRouter;\n","/**\n * @spfn/auth - Authentication Middleware\n *\n * Verify client-signed JWT token with public key\n *\n * Flow:\n * 1. Extract Authorization header\n * 2. Decode JWT to extract keyId\n * 3. Fetch public key from database\n * 4. Check key expiration\n * 5. Verify JWT signature with public key\n * 6. Validate user status\n * 7. Update last used timestamp\n * 8. Attach user to context\n *\n * Security Checks:\n * - Token signature verification\n * - Key expiration check\n * - User status check (active/inactive/suspended)\n * - Key revocation check (isActive flag)\n */\n\nimport { defineMiddleware } from '@spfn/core/route';\nimport { UnauthorizedError } from '@spfn/core/errors';\n\nimport type { User, KeyAlgorithmType } from '@spfn/auth/server';\nimport { verifyClientToken, decodeToken, authLogger, keysRepository, usersRepository } from '@spfn/auth/server';\nimport {\n InvalidTokenError,\n TokenExpiredError,\n KeyExpiredError,\n AccountDisabledError,\n} from '@spfn/auth/errors';\n\n// Auth context type\nexport interface AuthContext\n{\n user: User;\n userId: string;\n keyId: string;\n}\n\n// Extend Hono context with auth\ndeclare module 'hono'\n{\n interface ContextVariableMap\n {\n auth: AuthContext;\n }\n}\n\n/**\n * Authentication middleware\n *\n * Verifies client-signed JWT token using stored public key\n * Must be applied to routes that require authentication\n *\n * @example\n * ```typescript\n * // In server.config.ts\n * import { authenticate } from '@spfn/auth/server/middleware';\n *\n * export default defineServerConfig()\n * .middlewares([authenticate])\n * .routes(appRouter)\n * .build();\n *\n * // In route file - skip auth for public routes\n * export const publicRoute = route.get('/health')\n * .skip(['auth']) // Type-safe skip\n * .handler(async (c) => c.success({ status: 'ok' }));\n *\n * // Protected route - auth applied automatically\n * export const protectedRoute = route.get('/profile')\n * .handler(async (c) => {\n * const auth = c.get('auth'); // Get auth context\n * const { user, userId, keyId } = auth;\n * // Or access directly: c.get('auth').user\n * });\n * ```\n */\nexport const authenticate = defineMiddleware('auth', async (c, next) =>\n{\n // Extract Authorization header\n const authHeader = c.req.header('Authorization');\n\n // Validate Authorization header format\n if (!authHeader || !authHeader.startsWith('Bearer '))\n {\n authLogger.middleware.error('Missing or invalid authorization header. If using Next.js API routes, ensure you have imported \\'@spfn/auth/nextjs/api\\' in your API route handler (e.g., src/app/api/actions/[[...path]]/route.ts) to enable automatic authentication header forwarding from client to backend.', {\n headers: c.req.header(),\n path: c.req.path,\n });\n\n throw new UnauthorizedError({ message: 'Authentication header missing or invalid: Bearer {token}' });\n }\n\n const token = authHeader.substring(7); // Remove 'Bearer ' prefix\n\n // 1. Decode JWT to extract keyId (without verification)\n // We need keyId to fetch the public key for verification\n const decoded = decodeToken(token);\n\n if (!decoded || !decoded.keyId)\n {\n throw new UnauthorizedError({ message: 'Invalid token: missing keyId' });\n }\n\n const keyId = decoded.keyId as string;\n\n // 2. Get public key from database\n // Query conditions:\n // - keyId matches (UUID)\n // - isActive = true (not revoked)\n const keyRecord = await keysRepository.findActiveByKeyId(keyId);\n\n if (!keyRecord)\n {\n throw new UnauthorizedError({ message: 'Invalid or revoked key' });\n }\n\n // 3. Check key expiration\n // Keys expire after 90 days by default\n if (keyRecord.expiresAt && new Date() > keyRecord.expiresAt)\n {\n throw new KeyExpiredError();\n }\n\n // 4. Verify JWT signature with public key\n // This validates:\n // - Signature matches (client signed with private key)\n // - Token not expired (15min default)\n // - Issuer is 'spfn-client'\n try\n {\n verifyClientToken(\n token,\n keyRecord.publicKey,\n keyRecord.algorithm as KeyAlgorithmType // entity.algorithm is always defined\n );\n }\n catch (err)\n {\n // Handle JWT verification errors\n if (err instanceof Error)\n {\n // Token expired (15min TTL)\n if (err.name === 'TokenExpiredError')\n {\n throw new TokenExpiredError();\n }\n\n // Invalid signature\n if (err.name === 'JsonWebTokenError')\n {\n throw new InvalidTokenError({ message: 'Invalid token signature' });\n }\n }\n\n // Generic authentication failure\n throw new UnauthorizedError({ message: 'Authentication failed' });\n }\n\n // 5. Get user from database\n const user = await usersRepository.findById(keyRecord.userId);\n if (!user)\n {\n throw new UnauthorizedError({ message: 'User not found' });\n }\n\n // 6. Check if user account is active\n // Status can be: active, inactive, suspended\n if (user.status !== 'active')\n {\n throw new AccountDisabledError({ status: user.status });\n }\n\n // 7. Update last used timestamp (fire-and-forget)\n // Don't await to avoid blocking the request\n // Useful for:\n // - Security audits\n // - Detecting inactive keys\n // - Key rotation reminders\n keysRepository.updateLastUsedById(keyRecord.id)\n .catch((err: unknown) => authLogger.middleware.error('Failed to update lastUsedAt', err));\n\n // 8. Attach auth data to context\n // Available in downstream route handlers via c.get('auth')\n c.set('auth', {\n user,\n userId: String(user.id),\n keyId,\n });\n\n // Log API access\n const method = c.req.method;\n const path = c.req.path;\n authLogger.middleware.info('API access', {\n userId: user.id,\n email: user.email,\n keyId,\n method,\n path,\n ip: c.req.header('x-forwarded-for') || c.req.header('x-real-ip'),\n userAgent: c.req.header('user-agent'),\n });\n\n // Continue to route handler\n await next();\n});","/**\n * @spfn/auth - Permission Middleware\n *\n * Middleware functions for permission-based access control\n */\n\nimport type { Context, Next } from 'hono';\nimport { defineMiddleware } from '@spfn/core/route';\nimport { ForbiddenError } from '@spfn/core/errors';\nimport { InsufficientPermissionsError } from '@spfn/auth/errors';\nimport { getAuth, hasAllPermissions, hasAnyPermission, authLogger } from '@spfn/auth/server';\n\n/**\n * Require user to have all specified permissions\n *\n * Must be used after authenticate middleware\n *\n * @param permissionNames - Permission names (e.g., 'user:delete', 'post:publish')\n * @returns Middleware function\n *\n * @example\n * ```typescript\n * // In route file\n * import { authenticate, requirePermissions } from '@spfn/auth/server/middleware';\n *\n * export const deleteUserRoute = route.delete('/users/:id')\n * .use([authenticate, requirePermissions('user:delete')])\n * .handler(async (c) => {\n * // Only users with user:delete permission\n * });\n *\n * // Multiple permissions (all required)\n * export const publishPostRoute = route.post('/posts/publish')\n * .use([authenticate, requirePermissions('post:write', 'post:publish')])\n * .handler(async (c) => {\n * // Needs both permissions\n * });\n *\n * // Skip permission check for specific route\n * export const publicRoute = route.get('/posts')\n * .skip(['permission']) // Type-safe skip\n * .handler(async (c) => { ... });\n * ```\n */\nexport const requirePermissions = defineMiddleware('permission',\n (...permissionNames: string[]) => async (c: Context, next: Next) =>\n {\n const auth = getAuth(c);\n\n if (!auth)\n {\n authLogger.middleware.warn('Permission check failed: not authenticated', {\n permissions: permissionNames,\n path: c.req.path,\n });\n\n throw new ForbiddenError({ message: 'Authentication required' });\n }\n\n const { userId } = auth;\n\n const allowed = await hasAllPermissions(userId, permissionNames);\n\n if (!allowed)\n {\n authLogger.middleware.warn('Permission check failed', {\n userId,\n requiredPermissions: permissionNames,\n path: c.req.path,\n });\n\n throw new InsufficientPermissionsError({ requiredPermissions: permissionNames });\n }\n\n authLogger.middleware.debug('Permission check passed', {\n userId,\n permissions: permissionNames,\n });\n\n await next();\n }\n);\n\n/**\n * Require user to have at least one of the specified permissions\n *\n * Must be used after authenticate middleware\n *\n * @param permissionNames - Permission names\n * @returns Middleware function\n *\n * @example\n * ```typescript\n * // In route file\n * import { authenticate, requireAnyPermission } from '@spfn/auth/server/middleware';\n *\n * export const viewContentRoute = route.get('/content')\n * .use([authenticate, requireAnyPermission('content:read', 'admin:access')])\n * .handler(async (c) => {\n * // User has either content:read OR admin:access\n * });\n *\n * // Skip any permission check for specific route\n * export const publicRoute = route.get('/public')\n * .skip(['anyPermission']) // Type-safe skip\n * .handler(async (c) => { ... });\n * ```\n */\nexport const requireAnyPermission = defineMiddleware('anyPermission',\n (...permissionNames: string[]) => async (c: Context, next: Next) =>\n {\n const auth = getAuth(c);\n\n if (!auth)\n {\n authLogger.middleware.warn('Any permission check failed: not authenticated', {\n permissions: permissionNames,\n path: c.req.path,\n });\n\n throw new ForbiddenError({ message: 'Authentication required' });\n }\n\n const { userId } = auth;\n const allowed = await hasAnyPermission(userId, permissionNames);\n if (!allowed)\n {\n authLogger.middleware.warn('Any permission check failed', {\n userId,\n requiredAnyOf: permissionNames,\n path: c.req.path,\n });\n\n throw new InsufficientPermissionsError({ requiredPermissions: permissionNames });\n }\n\n authLogger.middleware.debug('Any permission check passed', {\n userId,\n permissions: permissionNames,\n });\n\n await next();\n }\n);","/**\n * @spfn/auth - Role Middleware\n *\n * Middleware functions for role-based access control\n */\n\nimport type { Context, Next } from 'hono';\nimport { defineMiddleware } from '@spfn/core/route';\nimport { getAuth, hasAnyRole, authLogger } from '@spfn/auth/server';\nimport { ForbiddenError } from '@spfn/core/errors';\nimport { InsufficientRoleError } from '@spfn/auth/errors';\n\n/**\n * Require user to have one of the specified roles\n *\n * Must be used after authenticate middleware\n *\n * @param roleNames - Role names (e.g., 'admin', 'superadmin')\n * @returns Middleware function\n *\n * @example\n * ```typescript\n * // In route file\n * import { authenticate, requireRole } from '@spfn/auth/server/middleware';\n *\n * export const adminDashboardRoute = route.get('/admin/dashboard')\n * .use([authenticate, requireRole('admin', 'superadmin')])\n * .handler(async (c) => {\n * // Only admin or superadmin\n * });\n *\n * // Single role\n * export const systemConfigRoute = route.get('/admin/config')\n * .use([authenticate, requireRole('superadmin')])\n * .handler(async (c) => {\n * // Only superadmin\n * });\n *\n * // Skip role check for specific route\n * export const publicAdminRoute = route.get('/admin/public')\n * .skip(['role']) // Type-safe skip\n * .handler(async (c) => { ... });\n * ```\n */\nexport const requireRole = defineMiddleware('role',\n (...roleNames: string[]) => async (c: Context, next: Next) =>\n {\n const auth = getAuth(c);\n\n if (!auth)\n {\n authLogger.middleware.warn('Role check failed: not authenticated', {\n roles: roleNames,\n path: c.req.path,\n });\n throw new ForbiddenError({ message: 'Authentication required' });\n }\n\n const { userId } = auth;\n\n const allowed = await hasAnyRole(userId, roleNames);\n\n if (!allowed)\n {\n authLogger.middleware.warn('Role check failed', {\n userId,\n requiredRoles: roleNames,\n path: c.req.path,\n });\n throw new InsufficientRoleError({ requiredRoles: roleNames });\n }\n\n authLogger.middleware.debug('Role check passed', {\n userId,\n roles: roleNames,\n });\n\n await next();\n }\n);","/**\n * @spfn/auth - Role Guard Middleware\n *\n * Middleware for role-based access control with allow/deny options\n */\n\nimport type { Context, Next } from 'hono';\nimport { defineMiddleware } from '@spfn/core/route';\nimport { getAuth, getUserRole, authLogger } from '@spfn/auth/server';\nimport { ForbiddenError } from '@spfn/core/errors';\nimport { InsufficientRoleError } from '@spfn/auth/errors';\n\n/**\n * Role guard options\n */\nexport interface RoleGuardOptions\n{\n /**\n * Roles to allow (OR condition)\n * User must have at least one of these roles\n */\n allow?: string[];\n\n /**\n * Roles to deny\n * User with any of these roles will be rejected\n */\n deny?: string[];\n}\n\n/**\n * Role-based access control middleware\n *\n * Must be used after authenticate middleware\n *\n * @param options - Role guard options (allow/deny)\n * @returns Middleware function\n *\n * @example Allow specific roles\n * ```typescript\n * export const adminRoute = route.get('/admin')\n * .use([authenticate, roleGuard({ allow: ['admin', 'superadmin'] })])\n * .handler(async (c) => { ... });\n * ```\n *\n * @example Deny specific roles\n * ```typescript\n * export const publicRoute = route.get('/content')\n * .use([authenticate, roleGuard({ deny: ['banned', 'suspended'] })])\n * .handler(async (c) => { ... });\n * ```\n *\n * @example Combined allow and deny\n * ```typescript\n * export const managerRoute = route.get('/manage')\n * .use([authenticate, roleGuard({ allow: ['admin', 'manager'], deny: ['suspended'] })])\n * .handler(async (c) => { ... });\n * ```\n */\nexport const roleGuard = defineMiddleware('roleGuard',\n (options: RoleGuardOptions) => async (c: Context, next: Next) =>\n {\n const { allow, deny } = options;\n\n // Validate options\n if (!allow && !deny)\n {\n throw new Error('roleGuard requires at least one of: allow, deny');\n }\n\n const auth = getAuth(c);\n\n if (!auth)\n {\n authLogger.middleware.warn('Role guard failed: not authenticated', {\n path: c.req.path,\n });\n throw new ForbiddenError({ message: 'Authentication required' });\n }\n\n const { userId } = auth;\n const userRole = await getUserRole(userId);\n\n // 1. Check deny list first\n if (deny && deny.length > 0)\n {\n if (userRole && deny.includes(userRole))\n {\n authLogger.middleware.warn('Role guard denied', {\n userId,\n userRole,\n deniedRoles: deny,\n path: c.req.path,\n });\n throw new InsufficientRoleError({ requiredRoles: allow || [] });\n }\n }\n\n // 2. Check allow list (if specified)\n if (allow && allow.length > 0)\n {\n if (!userRole || !allow.includes(userRole))\n {\n authLogger.middleware.warn('Role guard failed: role not allowed', {\n userId,\n userRole,\n allowedRoles: allow,\n path: c.req.path,\n });\n throw new InsufficientRoleError({ requiredRoles: allow });\n }\n }\n\n // 3. If only deny is specified and user passed, allow access\n authLogger.middleware.debug('Role guard passed', {\n userId,\n userRole,\n allow,\n deny,\n });\n\n await next();\n }\n);\n","/**\n * @spfn/auth - User Profile Routes\n */\n\nimport { getAuth } from '../../helpers';\nimport { getUserProfileService, updateUserProfileService } from '../../services';\nimport { defineRouter, route } from '@spfn/core/route';\nimport { Type } from '@sinclair/typebox';\n\n/**\n * GET /_auth/users/profile\n * Get user profile (authenticated)\n *\n * Returns complete user profile information including:\n * - User basic info (id, email, verification status, timestamps)\n * - Profile data (optional)\n *\n * Does not include role and permissions\n * Use /_auth/session for authentication/authorization data\n *\n * Requires authentication\n */\nexport const getUserProfile = route.get('/_auth/users/profile')\n .handler(async (c) =>\n {\n const { userId } = getAuth(c);\n return await getUserProfileService(userId);\n });\n\n/**\n * PATCH /_auth/users/profile\n * Update user profile (authenticated)\n *\n * Creates profile if not exists (upsert)\n * Empty string values are saved as null\n *\n * Requires authentication\n */\nexport const updateUserProfile = route.patch('/_auth/users/profile')\n .input({\n body: Type.Object({\n displayName: Type.Optional(Type.String({ description: 'Display name shown in UI' })),\n firstName: Type.Optional(Type.String({ description: 'First name' })),\n lastName: Type.Optional(Type.String({ description: 'Last name' })),\n avatarUrl: Type.Optional(Type.String({ description: 'Avatar/profile picture URL' })),\n bio: Type.Optional(Type.String({ description: 'Short bio/description' })),\n locale: Type.Optional(Type.String({ description: 'Locale/language preference (e.g., en, ko)' })),\n timezone: Type.Optional(Type.String({ description: 'Timezone (e.g., Asia/Seoul)' })),\n dateOfBirth: Type.Optional(Type.String({ description: 'Date of birth (YYYY-MM-DD)' })),\n gender: Type.Optional(Type.String({ description: 'Gender' })),\n website: Type.Optional(Type.String({ description: 'Personal or professional website' })),\n location: Type.Optional(Type.String({ description: 'Location (city, country, etc.)' })),\n company: Type.Optional(Type.String({ description: 'Company name' })),\n jobTitle: Type.Optional(Type.String({ description: 'Job title' })),\n metadata: Type.Optional(Type.Record(Type.String(), Type.Any(), { description: 'Additional metadata' })),\n })\n })\n .handler(async (c) =>\n {\n const { userId } = getAuth(c);\n const { body } = await c.data();\n return await updateUserProfileService(userId, body);\n });\n\n// Export router\nexport const userRouter = defineRouter({\n getUserProfile: getUserProfile,\n updateUserProfile: updateUserProfile,\n});\n\n// For backward compatibility with file-based routing (temporary)\nexport default userRouter;","/**\n * @spfn/auth - Client Crypto Helpers\n *\n * ES256 (ECDSA P-256) key generation and JWT signing for Next.js\n * Keys are stored in DER format (Base64 encoded) for efficiency\n *\n * Key Sizes:\n * - ES256 (ECDSA P-256): ~91 bytes (Base64: ~120 chars)\n * - RS256 (RSA 2048): ~294 bytes (Base64: ~392 chars)\n */\n\nimport { type KeyAlgorithmType } from '../types';\nimport crypto from 'crypto';\nimport jwt, { type Algorithm, type SignOptions } from 'jsonwebtoken';\n\ntype Unit =\n | \"Years\"\n | \"Year\"\n | \"Yrs\"\n | \"Yr\"\n | \"Y\"\n | \"Weeks\"\n | \"Week\"\n | \"W\"\n | \"Days\"\n | \"Day\"\n | \"D\"\n | \"Hours\"\n | \"Hour\"\n | \"Hrs\"\n | \"Hr\"\n | \"H\"\n | \"Minutes\"\n | \"Minute\"\n | \"Mins\"\n | \"Min\"\n | \"M\"\n | \"Seconds\"\n | \"Second\"\n | \"Secs\"\n | \"Sec\"\n | \"s\"\n | \"Milliseconds\"\n | \"Millisecond\"\n | \"Msecs\"\n | \"Msec\"\n | \"Ms\";\n\ntype UnitAnyCase = Unit | Uppercase<Unit> | Lowercase<Unit>;\n\ntype StringValue =\n | `${number}`\n | `${number}${UnitAnyCase}`\n | `${number} ${UnitAnyCase}`;\n\nexport interface KeyPair\n{\n privateKey: string; // Base64 encoded DER\n publicKey: string; // Base64 encoded DER\n keyId: string; // UUID\n fingerprint: string; // SHA-256 hash\n algorithm: KeyAlgorithmType;\n}\n\n/**\n * Generate ECDSA P-256 key pair (ES256)\n * Recommended for optimal size and performance\n */\nexport function generateKeyPairES256(): KeyPair\n{\n const keyId = crypto.randomUUID();\n\n const { privateKey, publicKey } = crypto.generateKeyPairSync('ec', {\n namedCurve: 'P-256', // ES256\n publicKeyEncoding: {\n type: 'spki',\n format: 'der',\n },\n privateKeyEncoding: {\n type: 'pkcs8',\n format: 'der',\n },\n });\n\n // Convert Buffer to Base64\n const privateKeyB64 = privateKey.toString('base64');\n const publicKeyB64 = publicKey.toString('base64');\n\n // Generate fingerprint (SHA-256 of public key)\n const fingerprint = crypto\n .createHash('sha256')\n .update(publicKey)\n .digest('hex');\n\n return {\n privateKey: privateKeyB64,\n publicKey: publicKeyB64,\n keyId,\n fingerprint,\n algorithm: 'ES256',\n };\n}\n\n/**\n * Generate RSA 2048 key pair (RS256)\n * Fallback option, larger size but wider compatibility\n */\nexport function generateKeyPairRS256(): KeyPair\n{\n const keyId = crypto.randomUUID();\n\n const { privateKey, publicKey } = crypto.generateKeyPairSync('rsa', {\n modulusLength: 2048,\n publicKeyEncoding: {\n type: 'spki',\n format: 'der',\n },\n privateKeyEncoding: {\n type: 'pkcs8',\n format: 'der',\n },\n });\n\n const privateKeyB64 = privateKey.toString('base64');\n const publicKeyB64 = publicKey.toString('base64');\n\n const fingerprint = crypto\n .createHash('sha256')\n .update(publicKey)\n .digest('hex');\n\n return {\n privateKey: privateKeyB64,\n publicKey: publicKeyB64,\n keyId,\n fingerprint,\n algorithm: 'RS256',\n };\n}\n\n/**\n * Generate key pair (defaults to ES256)\n */\nexport function generateKeyPair(\n algorithm: KeyAlgorithmType = 'ES256'\n): KeyPair\n{\n return algorithm === 'ES256'\n ? generateKeyPairES256()\n : generateKeyPairRS256();\n}\n\n/**\n * Generate JWT signed with client private key (DER format)\n */\nexport function generateClientToken(\n payload: Record<string, any>,\n privateKeyB64: string,\n algorithm: Algorithm,\n options?: {\n expiresIn?: StringValue | number;\n issuer?: string;\n }\n): string\n{\n try\n {\n // Convert Base64 back to Buffer\n const privateKeyDER = Buffer.from(privateKeyB64, 'base64');\n\n // Create key object for signing\n const privateKeyObject = crypto.createPrivateKey({\n key: privateKeyDER,\n format: 'der',\n type: 'pkcs8',\n });\n\n // Export as PEM for jwt.sign\n const privateKeyPEM = privateKeyObject.export({\n type: 'pkcs8',\n format: 'pem',\n });\n\n const signOptions: SignOptions = {\n algorithm,\n issuer: options?.issuer || 'spfn-client',\n expiresIn: options?.expiresIn ?? '15m', // Default to 15 minutes\n }\n\n return jwt.sign(payload, privateKeyPEM, signOptions);\n }\n catch (error)\n {\n throw new Error(\n `Failed to generate client token: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n}\n\n/**\n * Get key size information\n */\nexport function getKeySize(publicKeyB64: string): {\n bytes: number;\n base64Length: number;\n}\n{\n const keyDER = Buffer.from(publicKeyB64, 'base64');\n\n return {\n bytes: keyDER.length,\n base64Length: publicKeyB64.length,\n };\n}\n\n/**\n * Check if key should be rotated based on creation date\n */\nexport function shouldRotateKey(\n createdAt: Date,\n rotationDays: number = 90\n): {\n shouldRotate: boolean;\n daysRemaining: number;\n}\n{\n const now = new Date();\n const ageInDays = Math.floor(\n (now.getTime() - createdAt.getTime()) / (1000 * 60 * 60 * 24)\n );\n const daysRemaining = Math.max(0, rotationDays - ageInDays);\n\n return {\n shouldRotate: daysRemaining <= 7, // Warn 7 days before expiry\n daysRemaining,\n };\n}","/**\n * @spfn/auth - Client Session Management\n *\n * Uses Jose JWE (JSON Web Encryption) to securely store session data in cookies\n * More efficient than Iron Session with better Edge Runtime support\n */\n\nimport * as jose from 'jose';\nimport { env } from '@spfn/auth/config';\nimport { env as coreEnv } from '@spfn/core/config';\n\nimport { type KeyAlgorithmType } from '../types';\n\nexport interface SessionData\n{\n userId: string;\n privateKey: string; // Base64 encoded DER\n keyId: string;\n algorithm: KeyAlgorithmType;\n}\n\n/**\n * Get session secret key derived from environment\n * Must be at least 32 characters (256-bit)\n *\n * Derives a 32-byte key using SHA-256 to ensure compatibility with Jose A256GCM\n */\nasync function getSessionSecretKey(): Promise<Uint8Array>\n{\n const secret = env.SPFN_AUTH_SESSION_SECRET;\n\n // Derive a 32-byte key using SHA-256 for A256GCM compatibility\n // Use Web Crypto API for universal compatibility (browser + Node.js)\n const encoder = new TextEncoder();\n const data = encoder.encode(secret);\n const hashBuffer = await crypto.subtle.digest('SHA-256', data);\n return new Uint8Array(hashBuffer);\n}\n\n/**\n * Seal session data into encrypted JWT (JWE)\n *\n * @param data - Session data to encrypt\n * @param ttl - Time to live in seconds (default: 7 days)\n * @returns Encrypted JWT string\n */\nexport async function sealSession(\n data: SessionData,\n ttl: number = 60 * 60 * 24 * 7 // 7 days\n): Promise<string>\n{\n const secret = await getSessionSecretKey();\n\n return await new jose.EncryptJWT({ data })\n .setProtectedHeader({ alg: 'dir', enc: 'A256GCM' })\n .setIssuedAt()\n .setExpirationTime(`${ttl}s`)\n .setIssuer('spfn-auth')\n .setAudience('spfn-client')\n .encrypt(secret);\n}\n\n/**\n * Unseal encrypted JWT (JWE) to session data\n *\n * @param jwt - Encrypted JWT string\n * @returns Session data\n * @throws Error if session is invalid or expired\n */\nexport async function unsealSession(jwt: string): Promise<SessionData>\n{\n try\n {\n const secret = await getSessionSecretKey();\n\n const { payload } = await jose.jwtDecrypt(jwt, secret, {\n issuer: 'spfn-auth',\n audience: 'spfn-client',\n });\n\n return payload.data as SessionData;\n }\n catch (err)\n {\n if (err instanceof jose.errors.JWTExpired)\n {\n throw new Error('Session expired');\n }\n\n if (err instanceof jose.errors.JWEDecryptionFailed)\n {\n throw new Error('Invalid session');\n }\n\n if (err instanceof jose.errors.JWTClaimValidationFailed)\n {\n throw new Error('Session validation failed');\n }\n\n throw new Error('Failed to unseal session');\n }\n}\n\n/**\n * Get session metadata without decrypting\n *\n * @param jwt - Encrypted JWT string\n * @returns Session metadata or null if invalid\n */\nexport async function getSessionInfo(jwt: string): Promise<{\n issuedAt: Date;\n expiresAt: Date;\n issuer: string;\n audience: string;\n} | null>\n{\n const secret = await getSessionSecretKey();\n\n try\n {\n const { payload } = await jose.jwtDecrypt(jwt, secret);\n\n return {\n issuedAt: new Date(payload.iat! * 1000),\n expiresAt: new Date(payload.exp! * 1000),\n issuer: payload.iss || '',\n audience: Array.isArray(payload.aud) ? payload.aud[0] : payload.aud || '',\n };\n }\n catch (err)\n {\n // Log error for debugging but return null for graceful handling\n if (coreEnv.NODE_ENV !== 'production')\n {\n console.warn('[Session] Failed to get session info:', err instanceof Error ? err.message : 'Unknown error');\n }\n\n return null;\n }\n}\n\n/**\n * Check if session is about to expire (within threshold)\n *\n * @param jwt - Encrypted JWT string\n * @param thresholdHours - Hours before expiry to trigger refresh (default: 24)\n * @returns True if session should be refreshed\n */\nexport async function shouldRefreshSession(\n jwt: string,\n thresholdHours: number = 24\n): Promise<boolean>\n{\n const info = await getSessionInfo(jwt);\n\n if (!info)\n {\n return true;\n }\n\n const hoursRemaining = (info.expiresAt.getTime() - Date.now()) / (1000 * 60 * 60);\n\n return hoursRemaining < thresholdHours;\n}","/**\n * @spfn/auth - Setup Functions\n *\n * Initial setup and admin account creation\n */\n\nimport { env } from '@spfn/auth/config';\nimport { getRoleByName } from '@spfn/auth/server';\n\nimport { hashPassword } from './helpers';\nimport { authLogger } from './logger';\nimport { usersRepository } from './repositories';\n\n/**\n * Admin account configuration\n */\ninterface AdminAccountConfig\n{\n email: string;\n password: string;\n role?: string; // Role name (e.g., 'user', 'admin', 'superadmin')\n phone?: string;\n passwordChangeRequired?: boolean;\n}\n\n/**\n * Parse admin accounts from environment variables\n *\n * Supports three formats (in priority order):\n *\n * 1. JSON format (ADMIN_ACCOUNTS):\n * ```\n * ADMIN_ACCOUNTS='[{\"email\":\"admin@example.com\",\"password\":\"pass\",\"role\":\"superadmin\"}]'\n * ```\n *\n * 2. Comma-separated format (ADMIN_EMAILS + ADMIN_PASSWORDS + ADMIN_ROLES):\n * ```\n * ADMIN_EMAILS=admin@example.com,user@example.com\n * ADMIN_PASSWORDS=admin-pass,user-pass\n * ADMIN_ROLES=superadmin,user\n * ```\n *\n * 3. Single account format (legacy, ADMIN_EMAIL + ADMIN_PASSWORD):\n * ```\n * ADMIN_EMAIL=admin@example.com\n * ADMIN_PASSWORD=admin-password\n * ```\n *\n * @returns Array of admin account configurations\n */\nfunction parseAdminAccounts(): AdminAccountConfig[]\n{\n const accounts: AdminAccountConfig[] = [];\n\n // Method 1: JSON format (highest priority)\n if (env.SPFN_AUTH_ADMIN_ACCOUNTS)\n {\n try\n {\n const accountsJson = env.SPFN_AUTH_ADMIN_ACCOUNTS;\n\n const parsed = JSON.parse(accountsJson);\n\n if (!Array.isArray(parsed))\n {\n authLogger.setup.error('❌ SPFN_AUTH_ADMIN_ACCOUNTS must be an array');\n return accounts;\n }\n\n for (const item of parsed)\n {\n if (!item.email || !item.password)\n {\n authLogger.setup.warn('⚠️ Skipping account: missing email or password');\n continue;\n }\n\n accounts.push({\n email: item.email,\n password: item.password,\n role: item.role || 'user',\n phone: item.phone,\n passwordChangeRequired: item.passwordChangeRequired !== false, // Default: true\n });\n }\n\n return accounts;\n }\n catch (error)\n {\n const err = error as Error;\n authLogger.setup.error('❌ Failed to parse SPFN_AUTH_ADMIN_ACCOUNTS:', err);\n return accounts;\n }\n }\n\n // Method 2: Comma-separated format\n const adminEmails = env.SPFN_AUTH_ADMIN_EMAILS;\n\n if (adminEmails)\n {\n const emails = adminEmails.split(',').map(s => s.trim());\n const passwords = (env.SPFN_AUTH_ADMIN_PASSWORDS || '').split(',').map(s => s.trim());\n const roles = (env.SPFN_AUTH_ADMIN_ROLES || '').split(',').map(s => s.trim());\n\n // Validate lengths match\n if (passwords.length !== emails.length)\n {\n authLogger.setup.error('❌ SPFN_AUTH_ADMIN_EMAILS and SPFN_AUTH_ADMIN_PASSWORDS length mismatch');\n return accounts;\n }\n\n for (let i = 0; i < emails.length; i++)\n {\n const email = emails[i];\n const password = passwords[i];\n const role = roles[i] || 'user';\n\n if (!email || !password)\n {\n authLogger.setup.warn(`⚠️ Skipping account ${i + 1}: missing email or password`);\n continue;\n }\n\n accounts.push({\n email,\n password,\n role,\n passwordChangeRequired: true,\n });\n }\n\n return accounts;\n }\n\n // Method 3: Single account (legacy format)\n const adminEmail = env.SPFN_AUTH_ADMIN_EMAIL;\n const adminPassword = env.SPFN_AUTH_ADMIN_PASSWORD;\n\n if (adminEmail && adminPassword)\n {\n accounts.push({\n email: adminEmail,\n password: adminPassword,\n role: 'superadmin',\n passwordChangeRequired: true,\n });\n }\n\n return accounts;\n}\n\n/**\n * Ensure admin accounts exist from environment variables\n *\n * Supports multiple admin account creation via three formats:\n * 1. JSON format (SPFN_AUTH_ADMIN_ACCOUNTS)\n * 2. Comma-separated format (SPFN_AUTH_ADMIN_EMAILS + SPFN_AUTH_ADMIN_PASSWORDS + SPFN_AUTH_ADMIN_ROLES)\n * 3. Single account format (SPFN_AUTH_ADMIN_EMAIL + SPFN_AUTH_ADMIN_PASSWORD) - legacy\n *\n * Default behavior for created accounts:\n * - emailVerifiedAt: current timestamp (auto-verified)\n * - passwordChangeRequired: true (must change on first login)\n * - status: 'active'\n *\n * @example\n * ```typescript\n * // In your server startup code:\n * import { ensureAdminExists } from '@spfn/auth/server';\n *\n * await ensureAdminExists();\n * ```\n */\nexport async function ensureAdminExists(): Promise<void>\n{\n const accounts = parseAdminAccounts();\n\n // Skip if no accounts configured\n if (accounts.length === 0)\n {\n return;\n }\n\n authLogger.setup.info(`Creating ${accounts.length} admin account(s)...`);\n\n let created = 0;\n let skipped = 0;\n let failed = 0;\n\n for (const account of accounts)\n {\n authLogger.setup.info(`Creating ${account.email} admin account(s)...`);\n\n try\n {\n // Check if account already exists\n const existing = await usersRepository.findByEmail(account.email);\n\n if (existing)\n {\n authLogger.setup.info(`⚠️ Account already exists: ${account.email} (skipped)`);\n skipped++;\n continue;\n }\n\n // Get role ID from role name\n const roleName = account.role || 'user';\n const role = await getRoleByName(roleName);\n\n if (!role)\n {\n authLogger.setup.error(`❌ Role '${roleName}' not found for ${account.email}. Run initializeAuth() first.`);\n failed++;\n continue;\n }\n\n // Hash password\n const passwordHash = await hashPassword(account.password);\n\n // Create admin account\n await usersRepository.create({\n email: account.email,\n phone: account.phone || null,\n passwordHash,\n roleId: role.id,\n emailVerifiedAt: new Date(), // Auto-verify admin\n passwordChangeRequired: account.passwordChangeRequired !== false,\n status: 'active',\n });\n\n authLogger.setup.info(`✅ Admin account created: ${account.email} (${roleName})`);\n created++;\n }\n catch (error)\n {\n const err = error as Error;\n authLogger.setup.error(`❌ Failed to create account ${account.email}:`, err);\n failed++;\n }\n }\n\n // Summary\n authLogger.setup.info(`📊 Summary: ${created} created, ${skipped} skipped, ${failed} failed`);\n\n if (created > 0)\n {\n authLogger.setup.info('⚠️ Please change passwords on first login!');\n }\n}","/**\n * @spfn/auth - Server Lifecycle Hooks\n *\n * Provides lifecycle hooks for SPFN server initialization\n */\n\nimport type { AuthInitOptions } from './rbac';\nimport { ensureAdminExists } from './setup';\nimport { initializeAuth } from './services';\n\n/**\n * Auth lifecycle configuration\n */\nexport interface AuthLifecycleConfig\n{\n beforeInfrastructure?: () => Promise<void>;\n afterInfrastructure?: () => Promise<void>;\n}\n\n/**\n * Create auth lifecycle hooks for server configuration\n *\n * Provides essential initialization hooks:\n * - `beforeInfrastructure`: Validates environment variables before DB connection\n * - `afterInfrastructure`: Sets up admin accounts and initializes RBAC after DB is ready\n *\n * @param options - Auth initialization options (custom roles, permissions, mappings)\n *\n * @example Basic usage\n * ```typescript\n * import { defineServerConfig } from '@spfn/core/server';\n * import { createAuthLifecycle } from '@spfn/auth';\n * import { appRouter } from './router';\n *\n * export default defineServerConfig()\n * .port(8790)\n * .routes(appRouter)\n * .lifecycle(createAuthLifecycle())\n * .build();\n * ```\n *\n * @example With custom roles and permissions\n * ```typescript\n * export default defineServerConfig()\n * .port(8790)\n * .routes(appRouter)\n * .lifecycle(createAuthLifecycle({\n * roles: [\n * { name: 'project-manager', displayName: 'Project Manager', priority: 50 },\n * { name: 'developer', displayName: 'Developer', priority: 30 },\n * ],\n * permissions: [\n * { name: 'project:create', displayName: 'Create Project', category: 'custom' },\n * { name: 'task:assign', displayName: 'Assign Task', category: 'custom' },\n * ],\n * rolePermissions: {\n * 'project-manager': ['project:create', 'task:assign'],\n * 'developer': ['task:complete'],\n * },\n * sessionTtl: '30d'\n * }))\n * .build();\n * ```\n *\n * @example With custom lifecycle hooks\n * ```typescript\n * // You can call lifecycle() multiple times - all hooks will be executed in order\n * export default defineServerConfig()\n * .port(8790)\n * .routes(appRouter)\n * .lifecycle(createAuthLifecycle()) // Auth initialization runs first\n * .lifecycle({\n * afterInfrastructure: async () => {\n * // This runs after auth initialization\n * await myCustomSetup();\n * }\n * })\n * .build();\n * ```\n */\nexport function createAuthLifecycle(options: AuthInitOptions = {}): AuthLifecycleConfig\n{\n return {\n /**\n * Initialize auth system after database is ready\n *\n * Performs:\n * 1. Ensures admin account exists (creates if missing)\n * 2. Initializes RBAC system with built-in + custom roles/permissions\n */\n afterInfrastructure: async () =>\n {\n await initializeAuth(options);\n await ensureAdminExists();\n }\n };\n}"],"mappings":"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","names":["value","init_value","init_value","init_value","IsObject","IsArray","IsUndefined","IsNumber","init_guard","init_guard","TypeSystemPolicy","IsObject","IsArray","IsNumber","IsUndefined","value","init_type","init_value","init_type","init_error","init_symbols","IsArray","IsAsyncIterator","IsBigInt","IsBoolean","IsDate","IsFunction","IsIterator","IsNull","IsNumber","IsObject","IsRegExp","IsString","IsSymbol","IsUndefined","IsUint8Array","init_symbols","IsAny","IsArgument","IsArray","IsAsyncIterator","IsBigInt","IsBoolean","IsComputed","IsConstructor","IsDate","IsFunction","IsInteger","IsIntersect","IsIterator","IsKind","IsKindOf","IsLiteral","IsLiteralValue","IsMappedKey","IsMappedResult","IsNever","IsNot","IsNull","IsNumber","IsObject","IsOptional","IsPromise","IsReadonly","IsRecord","IsRef","IsRegExp","IsSchema","IsString","IsSymbol","IsTemplateLiteral","IsThis","IsTransform","IsTuple","IsUint8Array","IsUndefined","IsUnion","IsUnknown","IsUnsafe","IsVoid","init_type","init_symbols","init_error","init_guard","init_type","init_helpers","init_patterns","init_type","init_type","init_symbols","init_any","Array","init_type","init_symbols","init_array","index","init_type","init_symbols","init_argument","init_symbols","init_type","init_async_iterator","init_computed","init_discard","init_type","init_symbols","init_never","init_type","init_symbols","init_type","init_symbols","init_constructor","init_type","init_symbols","init_function","init_type","init_symbols","init_type","init_symbols","init_discard","init_never","init_optional","init_never","init_type","init_union","index","range","pattern","init_error","init_error","init_error","init_type","init_symbols","init_literal","init_symbols","init_boolean","init_symbols","init_bigint","Number","init_type","init_symbols","init_number","String","init_type","init_symbols","init_string","Number","String","init_literal","init_boolean","init_bigint","init_number","init_string","init_union","init_never","Visit","schema","IsNumber","IsBigInt","IsString","IsBoolean","init_patterns","init_symbols","init_error","init_union","init_literal","init_type","init_symbols","init_template_literal","init_union","FromUnion","IsNumber","init_template_literal","init_mapped","init_indexed","FromUnion","IsArray","IsObject","init_type","init_error","init_computed","init_never","init_intersect","init_union","init_mapped","init_value","init_indexed","init_type","init_symbols","init_iterator","Object","init_type","init_symbols","init_object","Promise","init_type","init_symbols","init_promise","init_type","init_symbols","init_discard","FromProperties","FromMappedResult","init_mapped","init_readonly","init_type","init_symbols","init_tuple","FromMappedResult","FromRest","FromProperties","IsFunction","IsAsyncIterator","IsIterator","IsObject","Object","IsArray","Array","Promise","init_symbols","init_discard","init_array","init_async_iterator","init_constructor","init_function","init_indexed","init_intersect","init_iterator","init_literal","init_object","init_optional","init_promise","init_readonly","init_tuple","init_union","init_mapped","init_type","init_symbols","init_discard","FromProperties","FromMappedResult","init_mapped","init_optional","IsObject","init_type","init_symbols","RemoveOptionalFromType","RemoveOptionalFromRest","init_symbols","init_type","init_discard","init_never","init_optional","init_type","init_never","init_intersect","init_error","init_type","init_symbols","init_ref","FromIntersect","FromRest","FromUnion","init_type","init_computed","init_intersect","init_union","init_ref","init_awaited","FromRest","FromIntersect","FromUnion","FromTuple","FromArray","FromProperties","IsArray","IsObject","FromComputed","FromRef","Number","init_type","init_literal","init_number","init_computed","init_ref","init_union","FromProperties","FromMappedResult","init_mapped","init_value","init_keyof","Object","init_intersect","init_indexed","init_keyof","init_object","init_composite","Date","init_symbols","init_type","init_date","init_type","init_symbols","init_null","Symbol","init_type","init_symbols","init_symbol","init_type","init_symbols","init_undefined","Uint8Array","init_type","init_symbols","init_uint8array","init_type","init_symbols","init_unknown","FromArray","FromProperties","Uint8Array","Date","Object","Symbol","init_any","init_bigint","init_date","init_function","init_literal","init_null","init_object","init_symbol","init_tuple","init_readonly","init_undefined","init_uint8array","init_unknown","init_const","init_tuple","init_never","init_constructor_parameters","init_literal","init_symbols","init_union","init_enum","FromArray","Visit","index","FromIntersect","FromLiteral","Number","FromPromise","String","FromTemplateLiteral","FromTuple","FromUnion","init_any","init_function","init_number","init_string","init_unknown","init_template_literal","init_patterns","init_symbols","init_error","init_guard","ExtendsResult","FromProperties","FromMappedResult","init_mapped","init_value","init_type","init_union","FromMappedKey","init_mapped","init_literal","init_value","init_extends","init_template_literal","init_type","init_union","init_never","init_extends","FromProperties","FromMappedResult","init_mapped","init_exclude","init_template_literal","init_type","init_union","init_never","init_extends","FromProperties","FromMappedResult","init_mapped","init_extract","init_type","init_never","init_instance_type","init_readonly","init_optional","init_readonly_optional","Object","IsBoolean","IsNumber","IsRegExp","IsString","RecordKey","String","Number","RecordValue","init_type","init_symbols","init_never","init_number","init_object","init_string","init_union","init_template_literal","init_patterns","init_indexed","init_record","FromConstructor","FromFunction","FromIntersect","FromUnion","FromTuple","FromArray","FromAsyncIterator","FromIterator","FromPromise","FromObject","FromProperties","Object","FromRecord","RecordKey","RecordValue","FromProperty","IsFunction","IsArray","IsAsyncIterator","IsIterator","IsObject","init_unknown","init_readonly_optional","init_readonly","init_optional","init_object","init_record","init_instantiate","init_type","init_symbols","init_integer","init_mapped","init_literal","init_value","FromTemplateLiteral","FromRest","init_type","init_template_literal","init_literal","init_union","init_intrinsic","FromProperties","FromMappedResult","init_mapped","init_value","FromIntersect","FromUnion","FromProperty","FromProperties","FromObject","Object","result","IsObject","init_type","init_computed","init_literal","init_indexed","init_intersect","init_union","init_object","FromPropertyKey","FromPropertyKeys","FromMappedKey","init_mapped","init_value","init_omit","FromProperties","FromMappedResult","init_mapped","init_value","FromIntersect","FromUnion","FromProperties","FromObject","Object","UnionFromPropertyKeys","result","IsObject","init_type","init_computed","init_intersect","init_literal","init_object","init_union","init_indexed","FromPropertyKey","FromPropertyKeys","FromMappedKey","init_mapped","init_value","init_pick","FromComputed","FromRef","FromProperties","FromObject","Object","FromRest","IsObject","IsBigInt","IsBoolean","IsNull","IsNumber","IsString","IsSymbol","IsUndefined","init_type","init_computed","init_optional","init_object","init_intersect","init_union","init_ref","init_discard","init_symbols","FromProperties","FromMappedResult","init_mapped","init_value","init_partial","FromComputed","FromRef","FromProperties","FromObject","Object","FromRest","IsObject","IsBigInt","IsBoolean","IsNull","IsNumber","IsString","IsSymbol","IsUndefined","init_type","init_computed","init_object","init_intersect","init_union","init_ref","init_symbols","init_discard","FromProperties","FromMappedResult","init_mapped","init_required","FromType","FromComputed","FromArray","Array","FromAsyncIterator","FromConstructor","FromTypes","FromFunction","FromIntersect","FromIterator","FromObject","Object","FromRecord","RecordValue","FromTuple","FromUnion","IsArray","IsAsyncIterator","IsFunction","IsIterator","IsObject","init_discard","init_array","init_awaited","init_async_iterator","init_constructor","init_indexed","init_function","init_intersect","init_iterator","init_keyof","init_object","init_omit","init_pick","init_never","init_partial","init_record","init_required","init_tuple","init_union","init_symbols","init_symbols","init_module","init_type","init_symbols","init_not","IsFunction","init_tuple","init_never","init_parameters","init_type","init_symbols","init_recursive","RegExp","init_type","init_symbols","init_regexp","init_rest","IsFunction","init_type","init_never","init_return_type","init_schema","init_static","init_symbols","init_transform","init_type","init_symbols","init_unsafe","init_type","init_symbols","init_void","type_exports","Array","Date","Number","Object","Promise","RegExp","String","Symbol","Uint8Array","init_type","init_any","init_argument","init_array","init_async_iterator","init_awaited","init_bigint","init_boolean","init_composite","init_const","init_constructor","init_constructor_parameters","init_date","init_enum","init_exclude","init_extends","init_extract","init_function","init_indexed","init_instance_type","init_instantiate","init_integer","init_intersect","init_intrinsic","init_iterator","init_keyof","init_literal","init_mapped","init_module","init_never","init_not","init_null","init_number","init_object","init_omit","init_optional","init_parameters","init_partial","init_pick","init_promise","init_readonly","init_readonly_optional","init_record","init_recursive","init_ref","init_regexp","init_required","init_rest","init_return_type","init_string","init_symbol","init_template_literal","init_transform","init_tuple","init_uint8array","init_undefined","init_union","init_unknown","init_unsafe","init_void","init_type","type_exports","init_error","init_guard","init_helpers","init_patterns","init_symbols","init_any","init_array","init_argument","init_async_iterator","init_awaited","init_bigint","init_boolean","init_composite","init_const","init_constructor","init_constructor_parameters","init_date","init_enum","init_exclude","init_extends","init_extract","init_function","init_indexed","init_instance_type","init_instantiate","init_integer","init_intersect","init_iterator","init_intrinsic","init_keyof","init_literal","init_module","init_mapped","init_never","init_not","init_null","init_number","init_object","init_omit","init_optional","init_parameters","init_partial","init_pick","init_promise","init_readonly","init_readonly_optional","init_record","init_recursive","init_ref","init_regexp","init_required","init_rest","init_return_type","init_schema","init_static","init_string","init_symbol","init_template_literal","init_transform","init_tuple","init_uint8array","init_undefined","init_union","init_unknown","init_unsafe","init_void","init_type","init_schema","init_schema","init_schema","text","boolean","index","id","timestamps","init_schema","text","index","id","timestamps","foreignKey","init_schema","text","boolean","index","id","foreignKey","enumText","utcTimestamp","init_schema","text","index","id","timestamps","foreignKey","enumText","utcTimestamp","init_schema","text","index","integer","check","id","timestamps","enumText","utcTimestamp","sql","init_schema","text","index","id","timestamps","enumText","utcTimestamp","typedJsonb","foreignKey","init_schema","init_types","init_types","text","boolean","index","id","timestamps","enumText","typedJsonb","init_schema","index","id","timestamps","foreignKey","init_schema","boolean","text","index","unique","id","timestamps","utcTimestamp","foreignKey","init_schema","init_schema","id","BaseRepository","eq","and","id","BaseRepository","eq","and","id","BaseRepository","eq","id","BaseRepository","asc","eq","id","BaseRepository","and","eq","BaseRepository","eq","and","isNull","lt","gt","id","BaseRepository","eq","id","eq","and","lt","sql","BaseRepository","id","id","defineRouter","init_schema","errors","crypto","env","env","jwt","env","env","currentProvider","fallbackProvider","env","text","env","jwt","env","text","getRoleByName","env","id","crypto","crypto","id","EMAIL_PATTERN","verifyClientToken","decodeToken","authLogger","keysRepository","usersRepository","AccountDisabledError","defineMiddleware","getAuth","hasAllPermissions","hasAnyPermission","authLogger","defineMiddleware","getAuth","hasAnyRole","authLogger","ForbiddenError","defineMiddleware","getAuth","getUserRole","authLogger","ForbiddenError","InsufficientRoleError","defineRouter","route","INVITATION_STATUSES","acceptInvitation","createInvitation","EMAIL_PATTERN","listInvitations","cancelInvitation","resendInvitation","deleteInvitation","defineRouter","route","defineRouter","init_schema","crypto","jwt","env","jwt","env","getRoleByName","env","roles","getRoleByName"]}
|