@spfn/auth 0.1.0-alpha.86 → 0.1.0-alpha.87

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/server/entities/schema.ts","../../../../src/server/entities/verification-codes.ts","../../../../src/server/entities/roles.ts","../../../../src/server/entities/users.ts","../../../../src/server/entities/user-social-accounts.ts","../../../../src/server/entities/user-public-keys.ts","../../../../src/server/entities/invitations.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/services/role.service.ts","../../../../src/server/routes/auth/index.ts","../../../../../../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/value/guard/guard.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/error/error.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/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/patterns/patterns.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/any/any.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/argument/argument.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/computed/computed.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/never/never.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/function/function.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.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/boolean/boolean.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/number/number.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/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/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/iterator/iterator.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/promise/promise.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/tuple/tuple.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/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/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.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/awaited/awaited.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/composite/composite.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/null/null.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/undefined/undefined.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/unknown/unknown.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/constructor-parameters/constructor-parameters.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/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/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/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/instance-type/instance-type.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/record/record.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/integer/integer.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/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/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/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/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/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/not/not.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/recursive/recursive.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/rest/rest.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/transform/transform.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/void/void.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","../../../../src/lib/types/schemas.ts","../../../../src/lib/contracts/auth.ts","../../../../src/lib/contracts/invitation.ts","../../../../src/server/helpers/password.ts","../../../../src/server/helpers/jwt.ts","../../../../src/server/helpers/verification.ts","../../../../src/server/helpers/context.ts","../../../../src/server/services/auth.service.ts","../../../../src/server/errors/auth-errors.ts","../../../../src/server/services/key.service.ts","../../../../src/server/services/user.service.ts","../../../../src/server/services/verification.service.ts","../../../../src/server/services/me.service.ts","../../../../src/server/services/rbac.service.ts","../../../../src/server/services/permission.service.ts","../../../../src/server/services/index.ts","../../../../src/server/services/invitation.service.ts"],"sourcesContent":["/**\n * @spfn/auth - Database Schema Definition\n *\n * Defines the 'spfn_auth' PostgreSQL schema for all auth-related tables\n */\n\nimport { createFunctionSchema } 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 = createFunctionSchema('@spfn/auth');","/**\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 { text, timestamp, index } from 'drizzle-orm/pg-core';\nimport { id, timestamps } from '@spfn/core/db';\nimport { authSchema } from './schema';\n\nexport const verificationCodes = authSchema.table('verification_codes',\n {\n id: id(),\n\n // Target (email or phone)\n target: text('target').notNull(), // Email address or E.164 phone number\n targetType: text(\n 'target_type',\n {\n enum: ['email', 'phone']\n }\n ).notNull(),\n\n // Code\n code: text('code').notNull(), // 6-digit code by default (configurable)\n\n // Purpose\n purpose: text(\n 'purpose',\n {\n enum: ['registration', 'login', 'password_reset', 'email_change', 'phone_change']\n }\n ).notNull(),\n\n // Expiry\n expiresAt: timestamp('expires_at', { withTimezone: true }).notNull(),\n\n // Usage tracking\n usedAt: timestamp('used_at', { withTimezone: true }),\n attempts: text('attempts').notNull().default('0'), // Track failed verification attempts\n\n ...timestamps(),\n },\n (table) => [\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;\nexport type VerificationTargetType = 'email' | 'phone';\nexport type VerificationPurpose = 'registration' | 'login' | 'password_reset' | 'email_change' | 'phone_change';","/**\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 { text, timestamp, check, boolean, bigint, index } from 'drizzle-orm/pg-core';\nimport { id, timestamps } 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: bigint('role_id', { mode: 'number' })\n .references(() => roles.id)\n .notNull(),\n\n // Account status\n // - active: Normal operation (default)\n // - inactive: Deactivated (user request, dormant)\n // - suspended: Locked (security incident, ToS violation)\n status: text(\n 'status',\n {\n enum: ['active', 'inactive', 'suspended']\n }\n ).notNull().default('active'),\n\n // Verification timestamps\n // null = unverified, timestamp = verified at this time\n // Email verification (via verification code or magic link)\n emailVerifiedAt: timestamp('email_verified_at', { withTimezone: true }),\n\n // Phone verification (via SMS OTP)\n phoneVerifiedAt: timestamp('phone_verified_at', { withTimezone: true }),\n\n // Metadata\n // Last successful login timestamp\n // Used for: security auditing, dormant account detection\n lastLoginAt: timestamp('last_login_at', { withTimezone: true }),\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;\nexport type UserStatus = 'active' | 'inactive' | 'suspended';\n\n// Helper type with computed verification status\nexport type UserWithVerification = User &\n{\n isEmailVerified: boolean;\n isPhoneVerified: boolean;\n};","/**\n * @spfn/auth - User Social Accounts Entity\n *\n * Stores OAuth connections for social login providers\n */\n\nimport { text, timestamp, uniqueIndex } from 'drizzle-orm/pg-core';\nimport { id, timestamps, foreignKey } from '@spfn/core/db';\nimport { users } from './users';\nimport { authSchema } from './schema';\n\nexport const userSocialAccounts = authSchema.table('user_social_accounts',\n {\n id: id(),\n\n // Foreign key to users\n userId: foreignKey('user', () => users.id),\n\n // Provider info\n provider: text(\n 'provider',\n {\n enum: ['google', 'github', 'kakao', 'naver']\n }\n ).notNull(),\n\n providerUserId: text('provider_user_id').notNull(),\n providerEmail: text('provider_email'),\n\n // OAuth tokens (encrypted in production)\n accessToken: text('access_token'),\n refreshToken: text('refresh_token'),\n tokenExpiresAt: timestamp('token_expires_at', { withTimezone: true }),\n\n ...timestamps(),\n },\n (table) => [\n // Unique constraint: one provider account per provider\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;\nexport type SocialProvider = 'google' | 'github' | 'kakao' | 'naver';","/**\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 { text, timestamp, boolean, index } from 'drizzle-orm/pg-core';\nimport { id, foreignKey } 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 userId: foreignKey('user', () => users.id),\n\n // Key identification (client-generated UUID)\n keyId: text('key_id').notNull().unique(),\n\n // Public key in Base64-encoded DER format (SPKI)\n publicKey: text('public_key').notNull(),\n\n // Algorithm used (ES256 recommended, RS256 fallback)\n algorithm: text('algorithm', {\n enum: ['ES256', 'RS256']\n }).notNull().default('ES256'),\n\n // Key fingerprint (SHA-256 hash for quick identification)\n fingerprint: text('fingerprint').notNull(),\n\n // Key status\n isActive: boolean('is_active').notNull().default(true),\n\n // Timestamps\n createdAt: timestamp('created_at', { mode: 'date', withTimezone: true })\n .notNull()\n .defaultNow(),\n\n lastUsedAt: timestamp('last_used_at', { mode: 'date', withTimezone: true }),\n\n expiresAt: timestamp('expires_at', { mode: 'date', withTimezone: true }),\n\n // Revocation\n revokedAt: timestamp('revoked_at', { mode: 'date', withTimezone: true }),\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 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 { text, timestamp, bigint, index, jsonb } from 'drizzle-orm/pg-core';\nimport { id, timestamps } from '@spfn/core/db';\nimport { roles } from './roles';\nimport { users } from './users';\nimport { authSchema } from './schema';\n\nexport const invitations = 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: bigint('role_id', { mode: 'number' })\n .references(() => roles.id)\n .notNull(),\n\n // User who created this invitation\n // Foreign key to users table\n // Used for: audit trail, permission checks\n invitedBy: bigint('invited_by', { mode: 'number' })\n .references(() => users.id)\n .notNull(),\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: text(\n 'status',\n {\n enum: ['pending', 'accepted', 'expired', 'cancelled']\n }\n ).notNull().default('pending'),\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: timestamp('expires_at', { withTimezone: true }).notNull(),\n\n // Timestamp when invitation was accepted\n // null = not yet accepted\n // Used for: audit trail, analytics\n acceptedAt: timestamp('accepted_at', { withTimezone: true }),\n\n // Timestamp when invitation was cancelled\n // null = not cancelled\n // Used for: audit trail\n cancelledAt: timestamp('cancelled_at', { withTimezone: true }),\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: jsonb('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 invitations.$inferSelect;\nexport type NewInvitation = typeof invitations.$inferInsert;\nexport type InvitationStatus = 'pending' | 'accepted' | 'expired' | 'cancelled';\n\n// Helper type with joined data\nexport type InvitationWithDetails = Invitation &\n{\n role: {\n id: number;\n name: string;\n displayName: string;\n };\n inviter: {\n id: number;\n email: string | null;\n };\n};","/**\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 { text, boolean, index } from 'drizzle-orm/pg-core';\nimport { id, timestamps } 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 (e.g., 'user:delete', 'post:publish')\n // Format: resource:action or namespace:resource:action\n // Must be unique\n name: text('name').notNull().unique(),\n\n // Display name for UI\n displayName: text('display_name').notNull(),\n\n // Permission description\n description: text('description'),\n\n // Category for grouping (e.g., 'user', 'post', 'admin', 'system')\n category: text('category'),\n\n // Built-in permission flag\n // true: Core package permissions - cannot be deleted\n // false: Custom or preset permissions\n isBuiltin: boolean('is_builtin').notNull().default(false),\n\n // System permission flag\n // true: Defined in code (builtin or preset)\n // false: Runtime created custom permission\n isSystem: boolean('is_system').notNull().default(false),\n\n // Active status\n // false: Deactivated permission (not enforced)\n isActive: boolean('is_active').notNull().default(true),\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 { bigint, index, unique } from 'drizzle-orm/pg-core';\nimport { id, timestamps } 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 // Foreign key to roles table\n roleId: bigint('role_id', { mode: 'number' })\n .notNull()\n .references(() => roles.id, { onDelete: 'cascade' }),\n\n // Foreign key to permissions table\n permissionId: bigint('permission_id', { mode: 'number' })\n .notNull()\n .references(() => 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 { bigint, boolean, text, timestamp, index, unique } from 'drizzle-orm/pg-core';\nimport { id, timestamps } 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 // Foreign key to users table\n userId: bigint('user_id', { mode: 'number' })\n .notNull()\n .references(() => users.id, { onDelete: 'cascade' }),\n\n // Foreign key to permissions table\n permissionId: bigint('permission_id', { mode: 'number' })\n .notNull()\n .references(() => permissions.id, { onDelete: 'cascade' }),\n\n // Grant or revoke\n // true: Grant this permission (even if role doesn't have it)\n // false: Revoke this permission (even if role has it)\n granted: boolean('granted').notNull().default(true),\n\n // Reason for grant/revocation (audit trail)\n reason: text('reason'),\n\n // Expiration timestamp (optional)\n // null: Permanent override\n // timestamp: Permission expires at this time\n expiresAt: timestamp('expires_at', { withTimezone: true }),\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-social-accounts';\nexport * from './user-public-keys';\nexport * from './verification-codes';\nexport * from './invitations';\n\n// RBAC entities\nexport * from './roles';\nexport * from './permissions';\nexport * from './role-permissions';\nexport * from './user-permissions';","/**\n * @spfn/auth - Role Service\n *\n * Role management functions for runtime role creation and modification\n */\n\nimport { getDatabase } from '@spfn/core/db';\nimport { roles, permissions, rolePermissions } from '@/server/entities';\nimport type { Role } from '@/server/entities/roles';\nimport { eq, and } from 'drizzle-orm';\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 const db = getDatabase();\n\n if (!db)\n {\n throw new Error('[Auth] Database not initialized');\n }\n\n // Check for duplicate name\n const existing = await db\n .select()\n .from(roles)\n .where(eq(roles.name, data.name))\n .limit(1);\n\n if (existing.length > 0)\n {\n throw new Error(`Role with name '${data.name}' already exists`);\n }\n\n // Create role\n const [newRole] = await db\n .insert(roles)\n .values({\n name: data.name,\n displayName: data.displayName,\n description: data.description,\n priority: data.priority ?? 10,\n isSystem: false, // Custom roles are never system roles\n isBuiltin: false,\n })\n .returning();\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 db.insert(rolePermissions).values(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 db = getDatabase();\n\n if (!db)\n {\n throw new Error('[Auth] Database not initialized');\n }\n\n const roleIdNum = Number(roleId);\n\n // Get role\n const [role] = await db\n .select()\n .from(roles)\n .where(eq(roles.id, roleIdNum))\n .limit(1);\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 db\n .update(roles)\n .set(data)\n .where(eq(roles.id, roleIdNum))\n .returning();\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 db = getDatabase();\n\n if (!db)\n {\n throw new Error('[Auth] Database not initialized');\n }\n\n const roleIdNum = Number(roleId);\n\n // Get role\n const [role] = await db\n .select()\n .from(roles)\n .where(eq(roles.id, roleIdNum))\n .limit(1);\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 db.delete(roles).where(eq(roles.id, 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 db = getDatabase();\n\n if (!db)\n {\n throw new Error('[Auth] Database not initialized');\n }\n\n const roleIdNum = Number(roleId);\n const permissionIdNum = Number(permissionId);\n\n // Check if mapping already exists\n const existing = await db\n .select()\n .from(rolePermissions)\n .where(\n and(\n eq(rolePermissions.roleId, roleIdNum),\n eq(rolePermissions.permissionId, permissionIdNum)\n )\n )\n .limit(1);\n\n if (existing.length > 0)\n {\n return; // Already exists\n }\n\n // Create mapping\n await db.insert(rolePermissions).values({\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 db = getDatabase();\n\n if (!db)\n {\n throw new Error('[Auth] Database not initialized');\n }\n\n const roleIdNum = Number(roleId);\n const permissionIdNum = Number(permissionId);\n\n await db\n .delete(rolePermissions)\n .where(\n and(\n eq(rolePermissions.roleId, roleIdNum),\n eq(rolePermissions.permissionId, permissionIdNum)\n )\n );\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 db = getDatabase();\n\n if (!db)\n {\n throw new Error('[Auth] Database not initialized');\n }\n\n const roleIdNum = Number(roleId);\n\n // Delete existing mappings\n await db.delete(rolePermissions).where(eq(rolePermissions.roleId, roleIdNum));\n\n // Create new mappings\n if (permissionIds.length > 0)\n {\n const mappings = permissionIds.map(permId => ({\n roleId: roleIdNum,\n permissionId: Number(permId),\n }));\n\n await db.insert(rolePermissions).values(mappings);\n }\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 const db = getDatabase();\n\n if (!db)\n {\n throw new Error('[Auth] Database not initialized');\n }\n\n const query = db.select().from(roles);\n\n if (!includeInactive)\n {\n return query.where(eq(roles.isActive, true));\n }\n\n return query;\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 const db = getDatabase();\n\n if (!db)\n {\n throw new Error('[Auth] Database not initialized');\n }\n\n const [role] = await db\n .select()\n .from(roles)\n .where(eq(roles.name, name))\n .limit(1);\n\n return role || null;\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 db = getDatabase();\n\n if (!db)\n {\n throw new Error('[Auth] Database not initialized');\n }\n\n const roleIdNum = Number(roleId);\n\n const perms = await db\n .select({ name: permissions.name })\n .from(rolePermissions)\n .innerJoin(permissions, eq(rolePermissions.permissionId, permissions.id))\n .where(eq(rolePermissions.roleId, roleIdNum));\n\n return perms.map(p => p.name);\n}","/**\n * @spfn/auth - Auth Routes\n *\n * Thin route handlers that delegate to services\n */\n\nimport { createApp } from '@spfn/core/route';\nimport {\n checkAccountExistsContract,\n registerContract,\n loginContract,\n logoutContract,\n rotateKeyContract,\n changePasswordContract,\n sendVerificationCodeContract,\n verifyCodeContract,\n getMeContract\n} from '@/lib/contracts';\nimport { getAuth, getUser } from '@/server/helpers';\nimport {\n checkAccountExistsService,\n registerService,\n loginService,\n logoutService,\n changePasswordService,\n sendVerificationCodeService,\n verifyCodeService,\n rotateKeyService,\n getMeService,\n} from '@/server/services';\n\nconst app = createApp();\n\n// POST /api/auth/exists\napp.bind(checkAccountExistsContract, async (c) =>\n{\n const body = await c.data();\n const result = await checkAccountExistsService(body);\n return c.success(result);\n});\n\n// POST /_auth/codes\napp.bind(sendVerificationCodeContract, async (c) =>\n{\n const body = await c.data();\n const result = await sendVerificationCodeService(body);\n return c.success(result);\n});\n\n// POST /_auth/codes/verify\napp.bind(verifyCodeContract, async (c) =>\n{\n const body = await c.data();\n const result = await verifyCodeService(body);\n return c.success(result);\n});\n\n// POST /api/auth/register\napp.bind(registerContract, async (c) =>\n{\n const body = await c.data();\n const result = await registerService(body);\n return c.success(result);\n});\n\n// POST /api/auth/login\napp.bind(loginContract, async (c) =>\n{\n const body = await c.data();\n const result = await loginService(body);\n return c.success(result);\n});\n\n// ===== Authenticated Routes Below =====\n// POST /api/auth/logout (Authenticated)\napp.bind(logoutContract, 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.success({ success: true });\n }\n\n const { keyId, userId } = auth;\n await logoutService({ userId: Number(userId), keyId });\n return c.success({ success: true });\n});\n\n// POST /api/auth/keys/rotate (Authenticated)\napp.bind(rotateKeyContract, async (c) =>\n{\n const body = await c.data();\n const { keyId: oldKeyId, userId } = getAuth(c);\n\n const result = 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 return c.success(result);\n});\n\n// PUT /_auth/password (Authenticated)\napp.bind(changePasswordContract, 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.success({ success: true });\n});\n\n// GET /_auth/me (Authenticated)\napp.bind(getMeContract, async (c) =>\n{\n const { userId } = getAuth(c);\n const result = await getMeService(userId);\n return c.success(result);\n});\n\nexport default app;","// --------------------------------------------------------------------------\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","// --------------------------------------------------------------------------\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","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","/** The base Error type thrown for all TypeBox exceptions */\nexport class TypeBoxError extends Error {\n constructor(message) {\n super(message);\n }\n}\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","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 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","/** 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","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","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","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","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","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","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","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","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","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","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 { 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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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 { 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","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","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","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 { 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","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","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","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","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","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","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","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","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","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","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 { 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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","// ------------------------------------------------------------------\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","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","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","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","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","// ------------------------------------------------------------------\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 * @spfn/auth - TypeBox Schemas\n *\n * Common response schemas for contract definitions\n */\n\nimport { Type, TObject } from '@sinclair/typebox';\n\n/**\n * Success response schema wrapper\n *\n * Wraps a data schema with success: true and optional message\n */\nexport const SuccessResponseSchema = <T extends TObject>(dataSchema: T) =>\n Type.Object(\n {\n success: Type.Literal(true),\n data: dataSchema,\n message: Type.Optional(Type.String()),\n }\n );\n\n/**\n * Error response schema\n *\n * Standard error format with code, message, and optional details\n */\nexport const ErrorResponseSchema = Type.Object(\n {\n success: Type.Literal(false),\n error: Type.Object(\n {\n code: Type.String(),\n message: Type.String(),\n details: Type.Optional(Type.Any()),\n }\n ),\n }\n);\n\n/**\n * API Response schema (union of success and error)\n *\n * Use this to define contract responses that can be either success or error\n */\nexport const ApiResponseSchema = <T extends TObject>(dataSchema: T) =>\n Type.Union([\n SuccessResponseSchema(dataSchema),\n ErrorResponseSchema,\n ]);","/**\n * @spfn/auth - Auth API Contracts\n *\n * Type-safe API contracts for authentication operations\n */\n\nimport { Type } from '@sinclair/typebox';\nimport type { RouteContract } from '@spfn/core/route';\nimport { ApiResponseSchema } from '@/lib/types/schemas';\n\n// Email regex pattern (RFC 5322 compliant)\n// Validates: local-part@domain.tld\n// - Local part: alphanumeric, dots, hyphens, underscores\n// - Domain: alphanumeric, hyphens, dots\n// - TLD: minimum 2 characters\nconst EMAIL_PATTERN = '^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\\\\.[a-zA-Z]{2,}$';\n\n// Phone regex pattern (E.164 format)\n// Format: +[country code][number] (1-15 digits total)\nconst PHONE_PATTERN = '^\\\\+[1-9]\\\\d{1,14}$';\n\n// SHA-256 fingerprint pattern (64 hex characters)\nconst FINGERPRINT_PATTERN = '^[a-f0-9]{64}$';\n\n// UUID v4 pattern (8-4-4-4-12 format)\nconst UUID_PATTERN = '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$';\n\n// Base64 pattern (DER encoded keys)\n// Matches standard Base64 with padding\nconst BASE64_PATTERN = '^[A-Za-z0-9+/]+=*$';\n\n/**\n * POST /codes - Send verification code\n *\n * Sends a 6-digit verification code to email or phone\n * Final path: /_auth/codes\n */\nexport const sendVerificationCodeContract = {\n method: 'POST' as const,\n path: '/_auth/codes',\n body: Type.Object({\n target: Type.String({\n description: 'Email address or phone number in E.164 format'\n }),\n targetType: Type.Union([\n Type.Literal('email'),\n Type.Literal('phone')\n ], {\n description: 'Type of target (email or phone)'\n }),\n purpose: Type.Union([\n Type.Literal('registration'),\n Type.Literal('login'),\n Type.Literal('password_reset')\n ], {\n description: 'Purpose of verification'\n }),\n }),\n response: ApiResponseSchema(\n Type.Object({\n success: Type.Boolean(),\n expiresAt: Type.String({ description: 'ISO 8601 expiry time' }),\n })\n ),\n} as const satisfies RouteContract;\n\n/**\n * POST /codes/verify - Verify code (without creating account)\n *\n * Validates verification code, returns a temporary token\n * Final path: /_auth/codes/verify\n */\nexport const verifyCodeContract = {\n method: 'POST' as const,\n path: '/_auth/codes/verify',\n body: Type.Object({\n target: Type.String({\n description: 'Email address or phone number'\n }),\n targetType: Type.Union([\n Type.Literal('email'),\n Type.Literal('phone')\n ]),\n code: Type.String({\n minLength: 6,\n maxLength: 6,\n pattern: '^[0-9]{6}$',\n description: '6-digit verification code'\n }),\n purpose: Type.Union([\n Type.Literal('registration'),\n Type.Literal('login'),\n Type.Literal('password_reset')\n ]),\n }),\n response: ApiResponseSchema(\n Type.Object({\n valid: Type.Boolean(),\n verificationToken: Type.Optional(Type.String({\n description: 'Temporary token for completing registration (15min validity)'\n })),\n })\n ),\n} as const satisfies RouteContract;\n\n/**\n * POST /exists - Check if account exists\n *\n * Checks if an email or phone number is already registered\n * Final path: /_auth/exists (prefix added from package.json)\n */\nexport const checkAccountExistsContract = {\n method: 'POST' as const,\n path: '/_auth/exists',\n body: Type.Object(\n {\n email: Type.Optional(Type.String({\n pattern: EMAIL_PATTERN,\n description: 'Email address to check'\n })),\n phone: Type.Optional(Type.String({\n pattern: PHONE_PATTERN,\n description: 'Phone number in E.164 format (e.g., +821012345678)'\n })),\n },\n {\n minProperties: 1,\n description: 'At least one of email or phone must be provided'\n }\n ),\n response: ApiResponseSchema(\n Type.Object(\n {\n exists: Type.Boolean({ description: 'Whether the account exists' }),\n identifier: Type.String({ description: 'The identifier that was checked' }),\n identifierType: Type.Union([\n Type.Literal('email'),\n Type.Literal('phone')\n ], { description: 'Type of identifier checked' }),\n }\n )\n ),\n} as const satisfies RouteContract;\n\n/**\n * POST /register - Register new user\n *\n * Register with email/phone and password, includes public key\n * Final path: /_auth/register (prefix added from package.json)\n */\nexport const registerContract = {\n method: 'POST' as const,\n path: '/_auth/register',\n body: Type.Object({\n email: Type.Optional(Type.String({\n pattern: EMAIL_PATTERN,\n description: 'Email address'\n })),\n phone: Type.Optional(Type.String({\n pattern: PHONE_PATTERN,\n description: 'Phone number in E.164 format'\n })),\n verificationToken: Type.String({\n description: 'Verification token obtained from /verify-code endpoint'\n }),\n password: Type.String({\n minLength: 8,\n description: 'User password (minimum 8 characters)'\n }),\n publicKey: Type.String({\n pattern: BASE64_PATTERN,\n description: 'Base64 encoded DER public key (SPKI format)'\n }),\n keyId: Type.String({\n pattern: UUID_PATTERN,\n description: 'Client-generated UUID v4 key identifier'\n }),\n fingerprint: Type.String({\n pattern: FINGERPRINT_PATTERN,\n description: 'SHA-256 fingerprint of public key (64 hex characters)'\n }),\n algorithm: Type.Union([\n Type.Literal('ES256'),\n Type.Literal('RS256')\n ], {\n description: 'Signing algorithm (ES256 recommended, RS256 for compatibility)'\n }),\n keySize: Type.Optional(Type.Number({\n description: 'Key size in bytes'\n })),\n }, {\n minProperties: 6, // email/phone + verificationToken + password + publicKey + keyId + fingerprint\n description: 'Email or phone must be provided with verification token'\n }),\n response: ApiResponseSchema(\n Type.Object({\n userId: Type.String(),\n email: Type.Optional(Type.String()),\n phone: Type.Optional(Type.String()),\n })\n ),\n} as const satisfies RouteContract;\n\n/**\n * POST /login - User login\n *\n * Authenticate user with email/phone and password\n * Replaces existing key with new one\n * Final path: /_auth/login (prefix added from package.json)\n */\nexport const loginContract = {\n method: 'POST' as const,\n path: '/_auth/login',\n body: Type.Object({\n email: Type.Optional(Type.String({\n pattern: EMAIL_PATTERN,\n description: 'Email address'\n })),\n phone: Type.Optional(Type.String({\n pattern: PHONE_PATTERN,\n description: 'Phone number in E.164 format'\n })),\n password: Type.String({\n minLength: 1,\n description: 'User password'\n }),\n publicKey: Type.String({\n pattern: BASE64_PATTERN,\n description: 'Base64 encoded DER public key (SPKI format)'\n }),\n keyId: Type.String({\n pattern: UUID_PATTERN,\n description: 'Client-generated UUID v4 key identifier'\n }),\n fingerprint: Type.String({\n pattern: FINGERPRINT_PATTERN,\n description: 'SHA-256 fingerprint of public key (64 hex characters)'\n }),\n oldKeyId: Type.Optional(Type.String({\n pattern: UUID_PATTERN,\n description: 'Previous key ID to revoke (server-side cleanup)'\n })),\n algorithm: Type.Union([\n Type.Literal('ES256'),\n Type.Literal('RS256')\n ], {\n description: 'Signing algorithm (ES256 recommended, RS256 for compatibility)'\n }),\n keySize: Type.Optional(Type.Number({\n description: 'Key size in bytes'\n })),\n }, {\n minProperties: 5, // email/phone + password + publicKey + keyId + fingerprint\n description: 'Email or phone must be provided along with key data'\n }),\n response: ApiResponseSchema(\n Type.Object({\n userId: Type.String(),\n email: Type.Optional(Type.String()),\n phone: Type.Optional(Type.String()),\n passwordChangeRequired: Type.Boolean({\n description: 'Whether user must change password before proceeding'\n }),\n })\n ),\n} as const satisfies RouteContract;\n\n/**\n * POST /logout - Logout user\n *\n * Revokes current key (requires authentication)\n * Final path: /_auth/logout (prefix added from package.json)\n */\nexport const logoutContract = {\n method: 'POST' as const,\n path: '/_auth/logout',\n body: Type.Object({}),\n response: ApiResponseSchema(\n Type.Object({\n success: Type.Boolean(),\n })\n ),\n} as const satisfies RouteContract;\n\n/**\n * POST /keys/rotate - Rotate key\n *\n * Replace current key with new one (requires authentication)\n * Final path: /_auth/keys/rotate (prefix added from package.json)\n */\nexport const rotateKeyContract = {\n method: 'POST' as const,\n path: '/_auth/keys/rotate',\n body: Type.Object({\n publicKey: Type.String({\n pattern: BASE64_PATTERN,\n description: 'Base64 encoded DER public key (SPKI format)'\n }),\n keyId: Type.String({\n pattern: UUID_PATTERN,\n description: 'Client-generated UUID v4 key identifier'\n }),\n fingerprint: Type.String({\n pattern: FINGERPRINT_PATTERN,\n description: 'SHA-256 fingerprint of public key (64 hex characters)'\n }),\n algorithm: Type.Union([\n Type.Literal('ES256'),\n Type.Literal('RS256')\n ], {\n description: 'Signing algorithm (ES256 recommended, RS256 for compatibility)'\n }),\n keySize: Type.Optional(Type.Number({\n description: 'Key size in bytes'\n })),\n }),\n response: ApiResponseSchema(\n Type.Object({\n success: Type.Boolean(),\n keyId: Type.String(),\n })\n ),\n} as const satisfies RouteContract;\n\n/**\n * PUT /password - Change user password\n *\n * Allows authenticated users to change their password\n * Requires current password for verification\n * Final path: /_auth/password (prefix added from package.json)\n */\nexport const changePasswordContract = {\n method: 'PUT' as const,\n path: '/_auth/password',\n body: Type.Object({\n currentPassword: Type.String({\n minLength: 1,\n description: 'Current password for verification'\n }),\n newPassword: Type.String({\n minLength: 8,\n description: 'New password (minimum 8 characters)'\n }),\n }),\n response: ApiResponseSchema(\n Type.Object({\n success: Type.Boolean({ description: 'Whether password was changed successfully' }),\n })\n ),\n} as const satisfies RouteContract;\n\n/**\n * GET /me - Get current user info\n *\n * Returns authenticated user's information including role and permissions\n * Requires authentication\n * Final path: /_auth/me (prefix added from package.json)\n */\nexport const getMeContract = {\n method: 'GET' as const,\n path: '/_auth/me',\n body: Type.Object({}),\n response: ApiResponseSchema(\n Type.Object({\n userId: Type.String({ description: 'User ID' }),\n email: Type.Optional(Type.String({ description: 'User email address' })),\n phone: Type.Optional(Type.String({ description: 'User phone number' })),\n role: Type.Object({\n id: Type.Number({ description: 'Role ID' }),\n name: Type.String({ description: 'Role name (e.g., user, admin)' }),\n displayName: Type.String({ description: 'Display name for UI' }),\n priority: Type.Number({ description: 'Role priority level' }),\n }, { description: 'User role information' }),\n permissions: Type.Array(\n Type.Object({\n id: Type.Number({ description: 'Permission ID' }),\n name: Type.String({ description: 'Permission name (e.g., user:delete)' }),\n displayName: Type.String({ description: 'Display name for UI' }),\n category: Type.Optional(Type.String({ description: 'Permission category' })),\n }),\n { description: 'List of permissions granted through role' }\n ),\n })\n ),\n} as const satisfies RouteContract;","/**\n * @spfn/auth - Invitation API Contracts\n *\n * Type-safe API contracts for user invitation operations\n */\n\nimport { Type } from '@sinclair/typebox';\nimport type { RouteContract } from '@spfn/core/route';\nimport { ApiResponseSchema } from '@/lib/types/schemas';\n\n// UUID v4 pattern\nconst UUID_PATTERN = '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$';\n\n// Email pattern\nconst EMAIL_PATTERN = '^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\\\\.[a-zA-Z]{2,}$';\n\n// Base64 pattern (DER encoded keys)\nconst BASE64_PATTERN = '^[A-Za-z0-9+/]+=*$';\n\n// SHA-256 fingerprint pattern (64 hex characters)\nconst FINGERPRINT_PATTERN = '^[a-f0-9]{64}$';\n\n/**\n * GET /_auth/invitations/:token - Get invitation details (public)\n *\n * Retrieves invitation information for acceptance page\n */\nexport const getInvitationContract = {\n method: 'GET' as const,\n path: '/_auth/invitations/:token',\n params: Type.Object({\n token: Type.String({\n pattern: UUID_PATTERN,\n description: 'Invitation token (UUID v4)'\n }),\n }),\n response: ApiResponseSchema(\n Type.Object({\n email: Type.String({\n format: 'email',\n description: 'Email address being invited'\n }),\n role: Type.String({\n description: 'Role name (e.g., \"admin\", \"user\")'\n }),\n roleDisplayName: Type.String({\n description: 'Role display name (e.g., \"Administrator\")'\n }),\n invitedBy: Type.String({\n format: 'email',\n description: 'Email of user who sent invitation'\n }),\n expiresAt: Type.String({\n format: 'date-time',\n description: 'ISO 8601 expiration timestamp'\n }),\n metadata: Type.Optional(Type.Any({\n description: 'Custom metadata (welcome message, etc.)'\n })),\n })\n ),\n} as const satisfies RouteContract;\n\n/**\n * POST /_auth/invitations/accept - Accept invitation (public)\n *\n * Accepts invitation and creates user account with provided credentials\n */\nexport const acceptInvitationContract = {\n method: 'POST' as const,\n path: '/_auth/invitations/accept',\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: 'Account password (minimum 8 characters)'\n }),\n publicKey: Type.String({\n pattern: BASE64_PATTERN,\n description: 'Base64 DER encoded public key (SPKI format)'\n }),\n keyId: Type.String({\n pattern: UUID_PATTERN,\n description: 'Unique key identifier (UUID v4)'\n }),\n fingerprint: Type.String({\n pattern: FINGERPRINT_PATTERN,\n description: 'SHA-256 fingerprint of public key (64 hex chars)'\n }),\n algorithm: Type.Union([\n Type.Literal('ES256'),\n Type.Literal('RS256')\n ], {\n description: 'Asymmetric signing algorithm'\n }),\n }),\n response: ApiResponseSchema(\n Type.Object({\n userId: Type.Number({\n description: 'Created user ID'\n }),\n email: Type.String({\n format: 'email',\n description: 'User email address'\n }),\n role: Type.String({\n description: 'Assigned role name'\n }),\n })\n ),\n} as const satisfies RouteContract;\n\n/**\n * POST /_auth/invitations - Create new invitation (admin)\n *\n * Creates and sends invitation to new user\n * Requires: admin role or user:invite permission\n */\nexport const createInvitationContract = {\n method: 'POST' as const,\n path: '/_auth/invitations',\n body: Type.Object({\n email: Type.String({\n pattern: EMAIL_PATTERN,\n description: 'Email address to invite'\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 response: ApiResponseSchema(\n Type.Object({\n id: Type.Number(),\n email: Type.String({ format: 'email' }),\n token: Type.String({\n description: 'Invitation token (send via email)'\n }),\n roleId: Type.Number(),\n expiresAt: Type.String({\n format: 'date-time',\n description: 'ISO 8601 expiration timestamp'\n }),\n invitationUrl: Type.String({\n description: 'Full invitation URL for email'\n }),\n })\n ),\n} as const satisfies RouteContract;\n\n/**\n * GET /_auth/invitations - List invitations (admin)\n *\n * Retrieves paginated list of invitations with filtering\n * Requires: admin role\n */\nexport const listInvitationsContract = {\n method: 'GET' as const,\n path: '/_auth/invitations',\n query: Type.Object({\n status: Type.Optional(Type.Union([\n Type.Literal('pending'),\n Type.Literal('accepted'),\n Type.Literal('expired'),\n Type.Literal('cancelled'),\n ], {\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 response: ApiResponseSchema(\n Type.Object({\n invitations: Type.Array(Type.Object({\n id: Type.Number(),\n email: Type.String({ format: 'email' }),\n status: Type.String(),\n role: Type.Object({\n id: Type.Number(),\n name: Type.String(),\n displayName: Type.String(),\n }),\n inviter: Type.Object({\n id: Type.Number(),\n email: Type.String({ format: 'email' }),\n }),\n createdAt: Type.String({ format: 'date-time' }),\n expiresAt: Type.String({ format: 'date-time' }),\n acceptedAt: Type.Optional(Type.String({ format: 'date-time' })),\n cancelledAt: Type.Optional(Type.String({ format: 'date-time' })),\n })),\n total: Type.Number({ description: 'Total invitation count' }),\n page: Type.Number({ description: 'Current page' }),\n limit: Type.Number({ description: 'Items per page' }),\n totalPages: Type.Number({ description: 'Total page count' }),\n })\n ),\n} as const satisfies RouteContract;\n\n/**\n * POST /_auth/invitations/cancel - Cancel invitation (admin)\n *\n * Cancels pending invitation\n * Requires: admin role or invitation owner\n */\nexport const cancelInvitationContract = {\n method: 'POST' as const,\n path: '/_auth/invitations/cancel',\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 response: ApiResponseSchema(\n Type.Object({\n success: Type.Boolean(),\n cancelledAt: Type.String({\n format: 'date-time',\n description: 'Cancellation timestamp'\n }),\n })\n ),\n} as const satisfies RouteContract;\n\n/**\n * POST /_auth/invitations/resend - Resend invitation (admin)\n *\n * Resends invitation email and extends expiration\n * Requires: admin role\n */\nexport const resendInvitationContract = {\n method: 'POST' as const,\n path: '/_auth/invitations/resend',\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 response: ApiResponseSchema(\n Type.Object({\n success: Type.Boolean(),\n expiresAt: Type.String({\n format: 'date-time',\n description: 'New expiration timestamp'\n }),\n })\n ),\n} as const satisfies RouteContract;\n\n/**\n * DELETE /_auth/invitations/delete - Delete invitation (superadmin)\n *\n * Permanently deletes invitation record\n * Requires: superadmin role\n */\nexport const deleteInvitationContract = {\n method: 'POST' as const,\n path: '/_auth/invitations/delete',\n body: Type.Object({\n id: Type.Number({\n description: 'Invitation ID'\n }),\n }),\n response: ApiResponseSchema(\n Type.Object({\n success: Type.Boolean(),\n })\n ),\n} as const satisfies RouteContract;","/**\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 'bcrypt';\n\n/**\n * Bcrypt salt rounds (cost factor)\n *\n * Determines computational cost: 2^rounds iterations\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 * Can be configured via SPFN_AUTH_BCRYPT_SALT_ROUNDS environment variable\n */\nconst SALT_ROUNDS = parseInt(\n process.env.SPFN_AUTH_BCRYPT_SALT_ROUNDS || // New prefixed version (recommended)\n process.env.BCRYPT_SALT_ROUNDS || // Legacy fallback\n '10',\n 10\n);\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 * @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, 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 * 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 const errors: string[] = [];\n\n if (password.length < 8)\n {\n errors.push('Password must be at least 8 characters');\n }\n\n if (!/[A-Z]/.test(password))\n {\n errors.push('Password must contain at least one uppercase letter');\n }\n\n if (!/[a-z]/.test(password))\n {\n errors.push('Password must contain at least one lowercase letter');\n }\n\n if (!/[0-9]/.test(password))\n {\n errors.push('Password must contain at least one number');\n }\n\n if (!/[^A-Za-z0-9]/.test(password))\n {\n errors.push('Password must contain at least one special character');\n }\n\n return {\n valid: errors.length === 0,\n errors,\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 type { SessionPayload } from '@/lib/types/api';\n\nconst JWT_SECRET =\n process.env.SPFN_AUTH_JWT_SECRET || // New prefixed version (recommended)\n process.env.JWT_SECRET || // Legacy fallback\n 'dev-secret-key-change-in-production';\n\nconst JWT_EXPIRES_IN =\n process.env.SPFN_AUTH_JWT_EXPIRES_IN || // New prefixed version (recommended)\n process.env.JWT_EXPIRES_IN || // Legacy fallback\n '7d';\n\nexport interface TokenPayload extends SessionPayload\n{\n exp?: number;\n iat?: number;\n iss?: string;\n keyId?: 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, JWT_SECRET, {\n expiresIn: 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, 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: 'ES256' | 'RS256'\n): TokenPayload\n{\n try\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 const decoded = jwt.verify(token, publicKeyObject, {\n algorithms: [algorithm], // Prevent algorithm confusion attacks\n issuer: 'spfn-client', // Validate token issuer\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 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\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 * @spfn/auth - Verification Code Helpers\n *\n * Helper functions for email/phone verification codes\n */\n\nimport jwt from 'jsonwebtoken';\nimport { getDatabase, create } from '@spfn/core/db';\nimport { verificationCodes } from '@/server/entities/verification-codes';\nimport { eq, and } from 'drizzle-orm';\n\n/**\n * JWT secret for verification tokens\n * Must be at least 32 characters long\n */\nfunction getVerificationTokenSecret(): string\n{\n const secret =\n process.env.SPFN_AUTH_VERIFICATION_TOKEN_SECRET || // New prefixed version (recommended)\n process.env.VERIFICATION_TOKEN_SECRET || // Legacy fallback\n process.env.SPFN_AUTH_JWT_SECRET || // New JWT secret fallback\n process.env.JWT_SECRET; // Legacy JWT secret fallback\n\n if (!secret || secret.length < 32)\n {\n throw new Error('SPFN_AUTH_VERIFICATION_TOKEN_SECRET must be at least 32 characters long');\n }\n\n return secret;\n}\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: 'email' | 'phone';\n purpose: 'registration' | 'login' | 'password_reset';\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 const code = Math.floor(Math.random() * 1000000)\n .toString()\n .padStart(6, '0');\n\n return code;\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 */\nexport async function storeVerificationCode(\n target: string,\n targetType: 'email' | 'phone',\n code: string,\n purpose: 'registration' | 'login' | 'password_reset'\n)\n{\n const db = getDatabase();\n if (!db)\n {\n throw new Error('Database not initialized');\n }\n\n // Calculate expiry time\n const expiresAt = new Date();\n expiresAt.setMinutes(expiresAt.getMinutes() + VERIFICATION_CODE_EXPIRY_MINUTES);\n\n // Create verification code record\n const record = await create(verificationCodes, {\n target,\n targetType,\n code,\n purpose,\n expiresAt,\n attempts: '0',\n });\n\n return record;\n}\n\n/**\n * Validate verification code\n *\n * @param target - Email or phone number\n * @param targetType - Type of target\n * @param code - 6-digit code to validate\n * @param purpose - Purpose of verification\n * @returns Validation result with code ID if valid\n */\nexport async function validateVerificationCode(\n target: string,\n targetType: 'email' | 'phone',\n code: string,\n purpose: 'registration' | 'login' | 'password_reset'\n): Promise<{ valid: boolean; codeId?: number; error?: string }>\n{\n const db = getDatabase();\n if (!db)\n {\n throw new Error('Database not initialized');\n }\n\n // Find the verification code\n const records = await db\n .select()\n .from(verificationCodes)\n .where(\n and(\n eq(verificationCodes.target, target),\n eq(verificationCodes.targetType, targetType),\n eq(verificationCodes.code, code),\n eq(verificationCodes.purpose, purpose)\n )\n )\n .limit(1);\n\n if (records.length === 0)\n {\n return { valid: false, error: 'Invalid verification code' };\n }\n\n const record = records[0];\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 const attempts = parseInt(record.attempts, 10);\n if (attempts >= MAX_VERIFICATION_ATTEMPTS)\n {\n return { valid: false, error: 'Too many attempts, please request a new code' };\n }\n\n // Increment attempt count\n await db\n .update(verificationCodes)\n .set({ attempts: (attempts + 1).toString() })\n .where(eq(verificationCodes.id, record.id));\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 */\nexport async function markCodeAsUsed(codeId: number): Promise<void>\n{\n const db = getDatabase();\n if (!db)\n {\n throw new Error('Database not initialized');\n }\n\n await db\n .update(verificationCodes)\n .set({ usedAt: new Date() })\n .where(eq(verificationCodes.id, 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 const secret = getVerificationTokenSecret();\n return jwt.sign(payload, 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 secret = getVerificationTokenSecret();\n const decoded = jwt.verify(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 console.error('[validateVerificationToken] Error:', 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 */\nexport async function sendVerificationEmail(\n email: string,\n code: string,\n purpose: string\n): Promise<void>\n{\n // TODO: Implement email sending with your email service\n // For now, just log to console (development only)\n console.log(`[VERIFICATION EMAIL] To: ${email}, Code: ${code}, Purpose: ${purpose}`);\n\n // Example implementation with nodemailer:\n // const transporter = nodemailer.createTransport({...});\n // await transporter.sendMail({\n // from: 'noreply@yourapp.com',\n // to: email,\n // subject: 'Your Verification Code',\n // text: `Your verification code is: ${code}`,\n // html: `<p>Your verification code is: <strong>${code}</strong></p>`,\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 */\nexport async function sendVerificationSMS(\n phone: string,\n code: string,\n purpose: string\n): Promise<void>\n{\n // TODO: Implement SMS sending with your SMS service (Twilio, AWS SNS, etc.)\n // For now, just log to console (development only)\n console.log(`[VERIFICATION SMS] To: ${phone}, Code: ${code}, Purpose: ${purpose}`);\n\n // Example implementation with Twilio:\n // const client = twilio(accountSid, authToken);\n // await client.messages.create({\n // body: `Your verification code is: ${code}`,\n // from: '+1234567890',\n // to: phone,\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/authenticate.js';\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 { findOne, create } from '@spfn/core/db';\nimport { ValidationError } from '@spfn/core/errors';\nimport { users, type User } from '@/server/entities';\nimport { hashPassword, verifyPassword } from '@/server/helpers';\nimport { validateVerificationToken } from '@/server/helpers/verification';\nimport {\n InvalidCredentialsError,\n AccountDisabledError,\n AccountAlreadyExistsError,\n InvalidVerificationTokenError,\n VerificationTokenPurposeMismatchError,\n VerificationTokenTargetMismatchError,\n} from '@/server/errors';\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?: 'ES256' | 'RS256';\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?: 'ES256' | 'RS256';\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 findOne(users, { email });\n }\n else if (phone)\n {\n identifier = phone;\n identifierType = 'phone';\n user = await findOne(users, { phone });\n }\n else\n {\n throw new ValidationError('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('registration', 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 let existingUser: User | null;\n if (email)\n {\n existingUser = await findOne(users, { email });\n }\n else if (phone)\n {\n existingUser = await findOne(users, { phone });\n }\n else\n {\n throw new ValidationError('Either email or phone must be provided');\n }\n\n if (existingUser)\n {\n const identifierType = email ? 'email' : 'phone';\n throw new AccountAlreadyExistsError(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 create(users, {\n email: email || null,\n phone: phone || null,\n passwordHash,\n passwordChangeRequired: false,\n roleId: userRole.id,\n status: 'active',\n createdAt: new Date(),\n updatedAt: new Date(),\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 let user: User | null;\n if (email)\n {\n user = await findOne(users, { email });\n }\n else if (phone)\n {\n user = await findOne(users, { phone });\n }\n else\n {\n throw new ValidationError('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(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 findOne(users, { id: userId });\n if (!user)\n {\n throw new ValidationError('User not found');\n }\n passwordHash = user.passwordHash;\n }\n\n // Verify current password\n if (!passwordHash)\n {\n throw new ValidationError('No password set for this account');\n }\n\n const isValid = await verifyPassword(currentPassword, passwordHash);\n if (!isValid)\n {\n throw new InvalidCredentialsError('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 const { updateOne } = await import('@spfn/core/db');\n await updateOne(users, { id: userId }, {\n passwordHash: newPasswordHash,\n passwordChangeRequired: false,\n updatedAt: new Date(),\n });\n}","/**\n * Authentication & Authorization Error Classes\n *\n * Custom error classes for auth-specific scenarios\n */\n\nimport {\n ValidationError,\n UnauthorizedError,\n ForbiddenError,\n ConflictError\n} from '@spfn/core/errors';\n\n/**\n * Invalid Credentials Error (401)\n *\n * Thrown when login credentials are incorrect\n */\nexport class InvalidCredentialsError extends UnauthorizedError\n{\n constructor(message: string = 'Invalid credentials')\n {\n super(message);\n this.name = 'InvalidCredentialsError';\n }\n}\n\n/**\n * Invalid Token Error (401)\n *\n * Thrown when authentication token is invalid or malformed\n */\nexport class InvalidTokenError extends UnauthorizedError\n{\n constructor(message: string = 'Invalid authentication token')\n {\n super(message);\n this.name = 'InvalidTokenError';\n }\n}\n\n/**\n * Token Expired Error (401)\n *\n * Thrown when authentication token has expired\n */\nexport class TokenExpiredError extends UnauthorizedError\n{\n constructor(message: string = 'Authentication token has expired')\n {\n super(message);\n this.name = 'TokenExpiredError';\n }\n}\n\n/**\n * Key Expired Error (401)\n *\n * Thrown when public key has expired\n */\nexport class KeyExpiredError extends UnauthorizedError\n{\n constructor(message: string = 'Public key has expired')\n {\n super(message);\n this.name = 'KeyExpiredError';\n }\n}\n\n/**\n * Account Disabled Error (403)\n *\n * Thrown when user account is disabled or inactive\n */\nexport class AccountDisabledError extends ForbiddenError\n{\n constructor(status: string = 'disabled')\n {\n super(`Account is ${status}`, { details: { status } });\n this.name = 'AccountDisabledError';\n }\n}\n\n/**\n * Account Already Exists Error (409)\n *\n * Thrown when trying to register with existing email/phone\n */\nexport class AccountAlreadyExistsError extends ConflictError\n{\n constructor(identifier: string, identifierType: 'email' | 'phone')\n {\n super('Account already exists', { details: { identifier, identifierType } });\n this.name = 'AccountAlreadyExistsError';\n }\n}\n\n/**\n * Invalid Verification Code Error (400)\n *\n * Thrown when verification code is invalid, expired, or already used\n */\nexport class InvalidVerificationCodeError extends ValidationError\n{\n constructor(reason: string = 'Invalid verification code')\n {\n super(reason);\n this.name = 'InvalidVerificationCodeError';\n }\n}\n\n/**\n * Invalid Verification Token Error (400)\n *\n * Thrown when verification token is invalid or expired\n */\nexport class InvalidVerificationTokenError extends ValidationError\n{\n constructor(message: string = 'Invalid or expired verification token')\n {\n super(message);\n this.name = 'InvalidVerificationTokenError';\n }\n}\n\n/**\n * Invalid Key Fingerprint Error (400)\n *\n * Thrown when public key fingerprint doesn't match the public key\n */\nexport class InvalidKeyFingerprintError extends ValidationError\n{\n constructor(message: string = 'Invalid key fingerprint')\n {\n super(message);\n this.name = 'InvalidKeyFingerprintError';\n }\n}\n\n/**\n * Verification Token Purpose Mismatch Error (400)\n *\n * Thrown when verification token purpose doesn't match expected purpose\n */\nexport class VerificationTokenPurposeMismatchError extends ValidationError\n{\n constructor(expected: string, actual: string)\n {\n super(`Verification token is for ${actual}, but ${expected} was expected`, { details: { expected, actual } });\n this.name = 'VerificationTokenPurposeMismatchError';\n }\n}\n\n/**\n * Verification Token Target Mismatch Error (400)\n *\n * Thrown when verification token target doesn't match provided email/phone\n */\nexport class VerificationTokenTargetMismatchError extends ValidationError\n{\n constructor()\n {\n super('Verification token does not match provided email/phone');\n this.name = 'VerificationTokenTargetMismatchError';\n }\n}","/**\n * @spfn/auth - Key Service\n *\n * Handles public key registration, rotation, and revocation\n */\n\nimport { create, getDatabase } from '@spfn/core/db';\nimport { userPublicKeys } from '@/server/entities';\nimport { verifyKeyFingerprint } from '@/server/helpers/jwt';\nimport { InvalidKeyFingerprintError } from '@/server/errors';\nimport { eq, and } from 'drizzle-orm';\n\nexport interface RegisterPublicKeyParams\n{\n userId: number;\n keyId: string;\n publicKey: string;\n fingerprint: string;\n algorithm?: 'ES256' | 'RS256';\n}\n\nexport interface RotateKeyParams\n{\n userId: number;\n oldKeyId: string;\n newKeyId: string;\n newPublicKey: string;\n fingerprint: string;\n algorithm?: 'ES256' | 'RS256';\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 create(userPublicKeys, {\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 const db = getDatabase()!;\n\n // Revoke old key\n await db\n .update(userPublicKeys)\n .set({\n isActive: false,\n revokedAt: new Date(),\n revokedReason: 'Replaced by key rotation',\n })\n .where(\n and(\n eq(userPublicKeys.keyId, oldKeyId),\n eq(userPublicKeys.userId, userId)\n )\n );\n\n // Store new public key (90 days expiry)\n await create(userPublicKeys, {\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 const db = getDatabase()!;\n\n await 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}","/**\n * @spfn/auth - User Service\n *\n * Handles user CRUD operations\n */\n\nimport { findOne, updateOne } from '@spfn/core/db';\nimport { users, type User } from '@/server/entities';\n\n/**\n * Get user by ID\n */\nexport async function getUserByIdService(userId: number): Promise<User | null>\n{\n return await findOne(users, { id: userId });\n}\n\n/**\n * Get user by email\n */\nexport async function getUserByEmailService(email: string): Promise<User | null>\n{\n return await findOne(users, { email });\n}\n\n/**\n * Get user by phone\n */\nexport async function getUserByPhoneService(phone: string): Promise<User | null>\n{\n return await findOne(users, { phone });\n}\n\n/**\n * Update user's last login timestamp\n */\nexport async function updateLastLoginService(userId: number): Promise<void>\n{\n await updateOne(users, { id: userId }, {\n lastLoginAt: new Date(),\n });\n}\n\n/**\n * Update user data\n */\nexport async function updateUserService(\n userId: number,\n updates: Partial<Omit<User, 'id' | 'createdAt'>>\n): Promise<void>\n{\n await updateOne(users, { id: userId }, {\n ...updates,\n updatedAt: new Date(),\n });\n}","/**\n * @spfn/auth - Verification Service\n *\n * Handles OTP code generation, validation, and delivery\n */\n\nimport {\n generateVerificationCode,\n storeVerificationCode,\n validateVerificationCode,\n markCodeAsUsed,\n createVerificationToken,\n sendVerificationEmail,\n sendVerificationSMS\n} from '@/server/helpers/verification';\nimport { InvalidVerificationCodeError } from '@/server/errors';\n\nexport interface SendVerificationCodeParams\n{\n target: string;\n targetType: 'email' | 'phone';\n purpose: 'registration' | 'login' | 'password_reset';\n}\n\nexport interface SendVerificationCodeResult\n{\n success: boolean;\n expiresAt: string;\n}\n\nexport interface VerifyCodeParams\n{\n target: string;\n targetType: 'email' | 'phone';\n code: string;\n purpose: 'registration' | 'login' | 'password_reset';\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(\n params: VerifyCodeParams\n): Promise<VerifyCodeResult>\n{\n const { target, targetType, code, purpose } = params;\n\n // Validate the verification code\n const validation = await validateVerificationCode(target, targetType, code, purpose);\n\n if (!validation.valid)\n {\n throw new InvalidVerificationCodeError(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 - Me Service\n *\n * Service for retrieving current user information\n */\n\nimport { getDatabase } from '@spfn/core/db';\nimport { users, roles, permissions, rolePermissions } from '@/server/entities';\nimport { eq, and } from 'drizzle-orm';\n\nexport interface GetMeResult\n{\n userId: string;\n email?: string;\n phone?: string;\n role: {\n id: number;\n name: string;\n displayName: string;\n priority: number;\n };\n permissions: Array<{\n id: number;\n name: string;\n displayName: string;\n category?: string;\n }>;\n}\n\n/**\n * Get current user information including role and permissions\n *\n * @param userId - User ID (string, number, or bigint)\n * @returns User info with role and permissions\n *\n * @example\n * ```typescript\n * const userInfo = await getMeService('123');\n * console.log(userInfo.role.name); // 'admin'\n * console.log(userInfo.permissions.length); // 15\n * ```\n */\nexport async function getMeService(userId: string | number | bigint): Promise<GetMeResult>\n{\n const db = getDatabase();\n\n if (!db)\n {\n throw new Error('[Auth] Database not initialized');\n }\n\n const userIdNum = typeof userId === 'string' ? Number(userId) : Number(userId);\n\n // 1. Get user with role information\n const [userWithRole] = await db\n .select({\n userId: users.id,\n email: users.email,\n phone: users.phone,\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, userIdNum))\n .limit(1);\n\n if (!userWithRole)\n {\n throw new Error('[Auth] User not found');\n }\n\n // 2. Get role permissions\n const rolePerms = await db\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 // 3. Build response\n return {\n userId: userWithRole.userId.toString(),\n email: userWithRole.email ?? undefined,\n phone: userWithRole.phone ?? undefined,\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 * @spfn/auth - RBAC Initialization Service\n *\n * Initialize roles, permissions, and their mappings\n */\n\nimport { getDatabase } from '@spfn/core/db';\nimport { logger } from '@spfn/core/logger';\nimport { roles, permissions, rolePermissions } from '@/server/entities';\nimport {\n BUILTIN_ROLES,\n BUILTIN_PERMISSIONS,\n BUILTIN_ROLE_PERMISSIONS,\n} from '@/server/rbac';\nimport type { AuthInitOptions, RoleConfig, PermissionConfig } from '@/server/rbac';\nimport { eq, and, inArray } from 'drizzle-orm';\nimport { configureAuth } from '@/lib/config';\n\nconst authLogger = logger.child('@spfn/auth');\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 const db = getDatabase();\n\n if (!db)\n {\n throw new Error('[Auth] Database not initialized. Call initDatabase() first.');\n }\n\n authLogger.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.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.info('✅ RBAC initialization complete');\n authLogger.info(`📊 Roles: ${allRoles.length}, Permissions: ${allPermissions.length}`);\n authLogger.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 db = getDatabase()!;\n\n const existing = await db\n .select()\n .from(roles)\n .where(eq(roles.name, config.name))\n .limit(1);\n\n if (existing.length === 0)\n {\n // Create new role\n await db.insert(roles).values({\n name: config.name,\n displayName: config.displayName,\n description: config.description,\n priority: config.priority ?? 10,\n isSystem: config.isSystem ?? false,\n isBuiltin: config.isBuiltin ?? false,\n });\n\n authLogger.info(` ✅ Created role: ${config.name}`);\n }\n else\n {\n // Update existing role (but preserve priority for built-in roles)\n const updateData: Record<string, any> = {\n displayName: config.displayName,\n description: config.description,\n };\n\n // Only update priority for non-builtin roles\n if (!existing[0].isBuiltin)\n {\n updateData.priority = config.priority ?? existing[0].priority;\n }\n\n await db\n .update(roles)\n .set(updateData)\n .where(eq(roles.id, existing[0].id));\n }\n}\n\n/**\n * Create or update a permission (idempotent)\n */\nasync function upsertPermission(config: PermissionConfig): Promise<void>\n{\n const db = getDatabase()!;\n\n const existing = await db\n .select()\n .from(permissions)\n .where(eq(permissions.name, config.name))\n .limit(1);\n\n if (existing.length === 0)\n {\n // Create new permission\n await db.insert(permissions).values({\n name: config.name,\n displayName: config.displayName,\n description: config.description,\n category: config.category,\n isSystem: config.isSystem ?? false,\n isBuiltin: config.isBuiltin ?? false,\n });\n\n authLogger.info(` ✅ Created permission: ${config.name}`);\n }\n else\n {\n // Update existing permission\n await db\n .update(permissions)\n .set({\n displayName: config.displayName,\n description: config.description,\n category: config.category,\n })\n .where(eq(permissions.id, existing[0].id));\n }\n}\n\n/**\n * Assign permissions to a role\n */\nasync function assignPermissionsToRole(roleName: string, permissionNames: string[]): Promise<void>\n{\n const db = getDatabase()!;\n\n // Get role\n const [role] = await db\n .select()\n .from(roles)\n .where(eq(roles.name, roleName))\n .limit(1);\n\n if (!role)\n {\n authLogger.warn(` ⚠️ Role not found: ${roleName}, skipping permission assignment`);\n return;\n }\n\n // Get permissions\n const perms = await db\n .select()\n .from(permissions)\n .where(inArray(permissions.name, permissionNames));\n\n if (perms.length === 0)\n {\n authLogger.warn(` ⚠️ No permissions found for role: ${roleName}`);\n return;\n }\n\n // Create mappings (skip duplicates)\n for (const perm of perms)\n {\n const existing = await db\n .select()\n .from(rolePermissions)\n .where(\n and(\n eq(rolePermissions.roleId, role.id),\n eq(rolePermissions.permissionId, perm.id)\n )\n )\n .limit(1);\n\n if (existing.length === 0)\n {\n await db.insert(rolePermissions).values({\n roleId: role.id,\n permissionId: perm.id,\n });\n }\n }\n}","/**\n * @spfn/auth - Permission Service\n *\n * Permission checking and validation logic\n */\n\nimport { getDatabase } from '@spfn/core/db';\nimport { users, roles, permissions, rolePermissions, userPermissions } from '@/server/entities';\nimport { eq, and } from 'drizzle-orm';\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 db = getDatabase();\n\n if (!db)\n {\n throw new Error('[Auth] Database not initialized');\n }\n\n const userIdNum = typeof userId === 'string' ? Number(userId) : Number(userId);\n\n // 1. Get user's role\n const [user] = await db\n .select({ roleId: users.roleId })\n .from(users)\n .where(eq(users.id, userIdNum))\n .limit(1);\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 rolePerms = await db\n .select({ name: permissions.name })\n .from(rolePermissions)\n .innerJoin(permissions, eq(rolePermissions.permissionId, permissions.id))\n .where(\n and(\n eq(rolePermissions.roleId, user.roleId),\n eq(permissions.isActive, true)\n )\n );\n\n for (const perm of rolePerms)\n {\n permSet.add(perm.name);\n }\n\n // 3. Apply user-specific permission overrides\n const userPerms = await db\n .select({\n name: permissions.name,\n granted: userPermissions.granted,\n expiresAt: userPermissions.expiresAt,\n })\n .from(userPermissions)\n .innerJoin(permissions, eq(userPermissions.permissionId, permissions.id))\n .where(eq(userPermissions.userId, userIdNum));\n\n const now = new Date();\n for (const userPerm of userPerms)\n {\n // Skip expired permissions\n if (userPerm.expiresAt && userPerm.expiresAt < now)\n {\n continue;\n }\n\n if (userPerm.granted)\n {\n // Grant permission (add even if not in role)\n permSet.add(userPerm.name);\n }\n else\n {\n // Revoke permission (remove even if in role)\n permSet.delete(userPerm.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 * 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 db = getDatabase();\n\n if (!db)\n {\n throw new Error('[Auth] Database not initialized');\n }\n\n const userIdNum = typeof userId === 'string' ? Number(userId) : Number(userId);\n\n const [user] = await db\n .select({ roleId: users.roleId })\n .from(users)\n .where(eq(users.id, userIdNum))\n .limit(1);\n\n if (!user || !user.roleId)\n {\n return false;\n }\n\n const [role] = await db\n .select({ name: roles.name })\n .from(roles)\n .where(eq(roles.id, user.roleId))\n .limit(1);\n\n return role?.name === 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// Me Service\nexport {\n getMeService,\n} from './me.service';\n\nexport type {\n GetMeResult,\n} from './me.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 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 * @spfn/auth - Invitation Service\n *\n * User invitation management for invite-only registration\n */\n\nimport { getDatabase } from '@spfn/core/db';\nimport { invitations, users, roles } from '@/server/entities';\nimport type { Invitation, InvitationStatus, InvitationWithDetails } from '@/server/entities/invitations';\nimport { eq, and, lt, desc, sql } from 'drizzle-orm';\nimport { hashPassword } from '@/server/helpers';\nimport crypto from 'crypto';\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 db = getDatabase();\n\n if (!db)\n {\n throw new Error('[Auth] Database not initialized');\n }\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 db\n .select()\n .from(users)\n .where(eq(users.email, email))\n .limit(1);\n\n if (existingUser.length > 0)\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 db\n .select()\n .from(invitations)\n .where(\n and(\n eq(invitations.email, email),\n eq(invitations.status, 'pending')\n )\n )\n .limit(1);\n\n if (existingInvitation.length > 0)\n {\n throw new Error('Pending invitation already exists for this email');\n }\n\n // Verify role exists\n const role = await db\n .select()\n .from(roles)\n .where(eq(roles.id, roleId))\n .limit(1);\n\n if (role.length === 0)\n {\n throw new Error(`Role with id ${roleId} not found`);\n }\n\n // Verify inviter exists\n const inviter = await db\n .select()\n .from(users)\n .where(eq(users.id, invitedBy))\n .limit(1);\n\n if (inviter.length === 0)\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 db\n .insert(invitations)\n .values({\n email,\n token,\n roleId,\n invitedBy,\n status: 'pending',\n expiresAt,\n metadata: metadata || null,\n })\n .returning();\n\n console.log(`[Auth] ✅ Created invitation: ${email} as ${role[0].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): Promise<Invitation | null>\n{\n const db = getDatabase();\n\n if (!db)\n {\n throw new Error('[Auth] Database not initialized');\n }\n\n const result = await db\n .select()\n .from(invitations)\n .where(eq(invitations.token, token))\n .limit(1);\n\n return result[0] || null;\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): Promise<InvitationWithDetails | null>\n{\n const db = getDatabase();\n\n if (!db)\n {\n throw new Error('[Auth] Database not initialized');\n }\n\n const result = await db\n .select({\n id: invitations.id,\n email: invitations.email,\n token: invitations.token,\n roleId: invitations.roleId,\n invitedBy: invitations.invitedBy,\n status: invitations.status,\n expiresAt: invitations.expiresAt,\n acceptedAt: invitations.acceptedAt,\n cancelledAt: invitations.cancelledAt,\n metadata: invitations.metadata,\n createdAt: invitations.createdAt,\n updatedAt: invitations.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(invitations)\n .innerJoin(roles, eq(invitations.roleId, roles.id))\n .innerJoin(users, eq(invitations.invitedBy, users.id))\n .where(eq(invitations.token, token))\n .limit(1);\n\n return result[0] || null;\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: 'ES256' | 'RS256';\n}): Promise<{\n userId: number;\n email: string;\n role: string;\n}>\n{\n const db = getDatabase();\n\n if (!db)\n {\n throw new Error('[Auth] Database not initialized');\n }\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 db\n .select()\n .from(roles)\n .where(eq(roles.id, invitation.roleId))\n .limit(1);\n\n if (role.length === 0)\n {\n throw new Error('Role not found');\n }\n\n // Hash password\n const passwordHash = await hashPassword(password);\n\n // Use transaction to create user and update invitation atomically\n const result = await db.transaction(async (tx) =>\n {\n // Create user\n const [newUser] = await tx\n .insert(users)\n .values({\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 .returning();\n\n // Create public key for asymmetric JWT\n const { userPublicKeys } = await import('@/server/entities');\n await tx\n .insert(userPublicKeys)\n .values({\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 tx\n .update(invitations)\n .set({\n status: 'accepted',\n acceptedAt: new Date(),\n updatedAt: new Date(),\n })\n .where(eq(invitations.id, invitation.id));\n\n return { newUser, role: role[0] };\n });\n\n console.log(`[Auth] ✅ Invitation accepted: ${invitation.email} as ${result.role.name}`);\n\n return {\n userId: result.newUser.id,\n email: result.newUser.email!,\n role: result.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}): Promise<{\n invitations: InvitationWithDetails[];\n total: number;\n page: number;\n limit: number;\n totalPages: number;\n}>\n{\n const db = getDatabase();\n\n if (!db)\n {\n throw new Error('[Auth] Database not initialized');\n }\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(invitations.status, status));\n }\n if (invitedBy)\n {\n conditions.push(eq(invitations.invitedBy, invitedBy));\n }\n\n const whereClause = conditions.length > 0 ? and(...conditions) : undefined;\n\n // Get total count\n const countResult = await db\n .select({ count: sql<number>`count(*)` })\n .from(invitations)\n .where(whereClause);\n\n const total = Number(countResult[0]?.count || 0);\n\n // Get paginated results with joins\n const results = await db\n .select({\n id: invitations.id,\n email: invitations.email,\n token: invitations.token,\n roleId: invitations.roleId,\n invitedBy: invitations.invitedBy,\n status: invitations.status,\n expiresAt: invitations.expiresAt,\n acceptedAt: invitations.acceptedAt,\n cancelledAt: invitations.cancelledAt,\n metadata: invitations.metadata,\n createdAt: invitations.createdAt,\n updatedAt: invitations.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(invitations)\n .innerJoin(roles, eq(invitations.roleId, roles.id))\n .innerJoin(users, eq(invitations.invitedBy, users.id))\n .where(whereClause)\n .orderBy(desc(invitations.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 * 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): Promise<void>\n{\n const db = getDatabase();\n\n if (!db)\n {\n throw new Error('[Auth] Database not initialized');\n }\n\n // Get invitation\n const invitation = await db\n .select()\n .from(invitations)\n .where(eq(invitations.id, id))\n .limit(1);\n\n if (invitation.length === 0)\n {\n throw new Error('Invitation not found');\n }\n\n if (invitation[0].status !== 'pending')\n {\n throw new Error(`Cannot cancel ${invitation[0].status} invitation`);\n }\n\n // Update status\n await db\n .update(invitations)\n .set({\n status: 'cancelled',\n cancelledAt: new Date(),\n updatedAt: new Date(),\n metadata: invitation[0].metadata\n ? { ...invitation[0].metadata, cancelReason: reason, cancelledBy }\n : { cancelReason: reason, cancelledBy },\n })\n .where(eq(invitations.id, id));\n\n console.log(`[Auth] ⚠️ Invitation cancelled: ${invitation[0].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): Promise<void>\n{\n const db = getDatabase();\n\n if (!db)\n {\n throw new Error('[Auth] Database not initialized');\n }\n\n await db\n .delete(invitations)\n .where(eq(invitations.id, 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(): Promise<number>\n{\n const db = getDatabase();\n\n if (!db)\n {\n throw new Error('[Auth] Database not initialized');\n }\n\n const now = new Date();\n\n // Find expired pending invitations\n const expiredInvitations = await db\n .select()\n .from(invitations)\n .where(\n and(\n eq(invitations.status, 'pending'),\n lt(invitations.expiresAt, now)\n )\n );\n\n if (expiredInvitations.length === 0)\n {\n return 0;\n }\n\n // Update to expired status\n await db\n .update(invitations)\n .set({\n status: 'expired',\n updatedAt: now,\n })\n .where(\n and(\n eq(invitations.status, 'pending'),\n lt(invitations.expiresAt, now)\n )\n );\n\n console.log(`[Auth] ⏰ Expired ${expiredInvitations.length} old invitations`);\n\n return expiredInvitations.length;\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): Promise<Invitation>\n{\n const db = getDatabase();\n\n if (!db)\n {\n throw new Error('[Auth] Database not initialized');\n }\n\n // Get invitation\n const invitation = await db\n .select()\n .from(invitations)\n .where(eq(invitations.id, id))\n .limit(1);\n\n if (invitation.length === 0)\n {\n throw new Error('Invitation not found');\n }\n\n // Can only resend pending or expired invitations\n if (!['pending', 'expired'].includes(invitation[0].status))\n {\n throw new Error(`Cannot resend ${invitation[0].status} invitation`);\n }\n\n // Update expiration and status\n const newExpiresAt = calculateExpiresAt(expiresInDays);\n\n const [updated] = await db\n .update(invitations)\n .set({\n status: 'pending',\n expiresAt: newExpiresAt,\n updatedAt: new Date(),\n })\n .where(eq(invitations.id, id))\n .returning();\n\n console.log(`[Auth] 📧 Invitation resent: ${invitation[0].email} (new expiry: ${newExpiresAt.toISOString()})`);\n\n return updated;\n}"],"mappings":"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","names":["text","index","id","timestamps","text","timestamp","boolean","index","id","timestamps","text","timestamp","id","timestamps","text","timestamp","boolean","index","id","foreignKey","text","timestamp","bigint","index","id","timestamps","text","boolean","index","id","timestamps","bigint","index","id","timestamps","bigint","boolean","text","timestamp","index","unique","id","timestamps","getDatabase","eq","and","value","IsObject","IsArray","IsUndefined","IsNumber","TypeSystemPolicy","IsObject","IsArray","IsNumber","IsUndefined","value","IsArray","IsAsyncIterator","IsBigInt","IsBoolean","IsDate","IsFunction","IsIterator","IsNull","IsNumber","IsObject","IsRegExp","IsString","IsSymbol","IsUndefined","IsUint8Array","IsArray","IsBoolean","IsBigInt","IsAsyncIterator","IsDate","IsFunction","IsIterator","IsNull","IsNumber","IsObject","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","IsSchema","IsReadonly","IsOptional","IsAny","IsKindOf","IsArgument","IsArray","IsAsyncIterator","IsBigInt","IsBoolean","IsComputed","IsConstructor","IsDate","IsFunction","IsInteger","IsIntersect","IsTransform","IsIterator","IsLiteral","IsLiteralValue","IsMappedKey","IsMappedResult","IsNever","IsNot","IsNull","IsNumber","IsObject","IsPromise","IsRecord","IsRef","IsRegExp","IsString","IsSymbol","IsTemplateLiteral","IsThis","IsTuple","IsUndefined","IsUnion","IsUint8Array","IsUnknown","IsUnsafe","IsVoid","IsKind","Array","index","index","range","pattern","Number","String","Number","String","Visit","schema","IsNumber","IsBigInt","IsString","IsBoolean","FromUnion","IsNumber","FromUnion","IsArray","IsObject","Object","Promise","FromProperties","FromMappedResult","FromMappedResult","FromRest","FromProperties","IsFunction","IsAsyncIterator","IsIterator","IsObject","Object","IsArray","Array","Promise","FromProperties","FromMappedResult","IsObject","RemoveOptionalFromType","RemoveOptionalFromRest","FromIntersect","FromRest","FromUnion","FromRest","FromIntersect","FromUnion","FromTuple","FromArray","FromProperties","IsArray","IsObject","FromComputed","FromRef","Number","FromProperties","FromMappedResult","Object","Date","Symbol","Uint8Array","FromArray","FromProperties","Uint8Array","Date","Object","Symbol","ExtendsResult","FromArray","Visit","index","FromIntersect","FromLiteral","Number","FromPromise","String","FromTemplateLiteral","FromTuple","FromUnion","FromProperties","FromMappedResult","FromMappedKey","FromProperties","FromMappedResult","FromProperties","FromMappedResult","Object","IsBoolean","IsNumber","IsRegExp","IsString","RecordKey","String","Number","RecordValue","FromConstructor","FromFunction","FromIntersect","FromUnion","FromTuple","FromArray","FromAsyncIterator","FromIterator","FromPromise","FromObject","FromProperties","Object","FromRecord","RecordKey","RecordValue","FromProperty","IsFunction","IsArray","IsAsyncIterator","IsIterator","IsObject","FromTemplateLiteral","FromRest","FromProperties","FromMappedResult","FromIntersect","FromUnion","FromProperty","FromProperties","FromObject","Object","result","IsObject","FromPropertyKey","FromPropertyKeys","FromMappedKey","FromProperties","FromMappedResult","FromIntersect","FromUnion","FromProperties","FromObject","Object","UnionFromPropertyKeys","result","IsObject","FromPropertyKey","FromPropertyKeys","FromMappedKey","FromComputed","FromRef","FromProperties","FromObject","Object","FromRest","IsObject","IsBigInt","IsBoolean","IsNull","IsNumber","IsString","IsSymbol","IsUndefined","FromProperties","FromMappedResult","FromComputed","FromRef","FromProperties","FromObject","Object","FromRest","IsObject","IsBigInt","IsBoolean","IsNull","IsNumber","IsString","IsSymbol","IsUndefined","FromProperties","FromMappedResult","FromType","FromComputed","FromArray","Array","FromAsyncIterator","FromConstructor","FromTypes","FromFunction","FromIntersect","FromIterator","FromObject","Object","FromRecord","RecordValue","FromTuple","FromUnion","IsArray","IsAsyncIterator","IsFunction","IsIterator","IsObject","IsFunction","RegExp","IsFunction","type_exports","Array","Date","Number","Object","Promise","RegExp","String","Symbol","Uint8Array","type_exports","UUID_PATTERN","EMAIL_PATTERN","BASE64_PATTERN","FINGERPRINT_PATTERN","jwt","findOne","create","ValidationError","create","getDatabase","eq","and","create","getDatabase","findOne","ValidationError","getRoleByName","create","updateOne","getDatabase","eq","and","getDatabase","eq","and","getDatabase","eq","and","getDatabase","eq","and","sql"]}
1
+ {"version":3,"sources":["../../../../src/server/entities/schema.ts","../../../../src/server/entities/verification-codes.ts","../../../../src/server/entities/roles.ts","../../../../src/server/entities/users.ts","../../../../src/server/entities/user-social-accounts.ts","../../../../src/server/entities/user-public-keys.ts","../../../../src/server/entities/invitations.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/services/role.service.ts","../../../../src/server/routes/auth/index.ts","../../../../../../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/value/guard/guard.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/error/error.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/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/patterns/patterns.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/any/any.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/argument/argument.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/computed/computed.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/never/never.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/function/function.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.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/boolean/boolean.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/number/number.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/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/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/iterator/iterator.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/promise/promise.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/tuple/tuple.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/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/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.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/awaited/awaited.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/composite/composite.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/null/null.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/undefined/undefined.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/unknown/unknown.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/constructor-parameters/constructor-parameters.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/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/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/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/instance-type/instance-type.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/record/record.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/integer/integer.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/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/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/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/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/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/not/not.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/recursive/recursive.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/rest/rest.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/transform/transform.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/void/void.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","../../../../src/lib/types/schemas.ts","../../../../src/lib/contracts/auth.ts","../../../../src/lib/contracts/invitation.ts","../../../../src/server/helpers/password.ts","../../../../src/server/helpers/jwt.ts","../../../../src/server/helpers/verification.ts","../../../../src/server/helpers/context.ts","../../../../src/server/services/auth.service.ts","../../../../src/server/errors/auth-errors.ts","../../../../src/server/services/key.service.ts","../../../../src/server/services/user.service.ts","../../../../src/server/services/verification.service.ts","../../../../src/server/services/me.service.ts","../../../../src/server/services/rbac.service.ts","../../../../src/server/services/permission.service.ts","../../../../src/server/services/index.ts","../../../../src/server/services/invitation.service.ts"],"sourcesContent":["/**\n * @spfn/auth - Database Schema Definition\n *\n * Defines the 'spfn_auth' PostgreSQL schema for all auth-related tables\n */\n\nimport { createFunctionSchema } 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 = createFunctionSchema('@spfn/auth');","/**\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 { text, timestamp, index } from 'drizzle-orm/pg-core';\nimport { id, timestamps } from '@spfn/core/db';\nimport { authSchema } from './schema';\n\nexport const verificationCodes = authSchema.table('verification_codes',\n {\n id: id(),\n\n // Target (email or phone)\n target: text('target').notNull(), // Email address or E.164 phone number\n targetType: text(\n 'target_type',\n {\n enum: ['email', 'phone']\n }\n ).notNull(),\n\n // Code\n code: text('code').notNull(), // 6-digit code by default (configurable)\n\n // Purpose\n purpose: text(\n 'purpose',\n {\n enum: ['registration', 'login', 'password_reset', 'email_change', 'phone_change']\n }\n ).notNull(),\n\n // Expiry\n expiresAt: timestamp('expires_at', { withTimezone: true }).notNull(),\n\n // Usage tracking\n usedAt: timestamp('used_at', { withTimezone: true }),\n attempts: text('attempts').notNull().default('0'), // Track failed verification attempts\n\n ...timestamps(),\n },\n (table) => [\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;\nexport type VerificationTargetType = 'email' | 'phone';\nexport type VerificationPurpose = 'registration' | 'login' | 'password_reset' | 'email_change' | 'phone_change';","/**\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 { text, timestamp, check, boolean, bigint, index } from 'drizzle-orm/pg-core';\nimport { id, timestamps } 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: bigint('role_id', { mode: 'number' })\n .references(() => roles.id)\n .notNull(),\n\n // Account status\n // - active: Normal operation (default)\n // - inactive: Deactivated (user request, dormant)\n // - suspended: Locked (security incident, ToS violation)\n status: text(\n 'status',\n {\n enum: ['active', 'inactive', 'suspended']\n }\n ).notNull().default('active'),\n\n // Verification timestamps\n // null = unverified, timestamp = verified at this time\n // Email verification (via verification code or magic link)\n emailVerifiedAt: timestamp('email_verified_at', { withTimezone: true }),\n\n // Phone verification (via SMS OTP)\n phoneVerifiedAt: timestamp('phone_verified_at', { withTimezone: true }),\n\n // Metadata\n // Last successful login timestamp\n // Used for: security auditing, dormant account detection\n lastLoginAt: timestamp('last_login_at', { withTimezone: true }),\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;\nexport type UserStatus = 'active' | 'inactive' | 'suspended';\n\n// Helper type with computed verification status\nexport type UserWithVerification = User &\n{\n isEmailVerified: boolean;\n isPhoneVerified: boolean;\n};","/**\n * @spfn/auth - User Social Accounts Entity\n *\n * Stores OAuth connections for social login providers\n */\n\nimport { text, timestamp, uniqueIndex } from 'drizzle-orm/pg-core';\nimport { id, timestamps, foreignKey } from '@spfn/core/db';\nimport { users } from './users';\nimport { authSchema } from './schema';\n\nexport const userSocialAccounts = authSchema.table('user_social_accounts',\n {\n id: id(),\n\n // Foreign key to users\n userId: foreignKey('user', () => users.id),\n\n // Provider info\n provider: text(\n 'provider',\n {\n enum: ['google', 'github', 'kakao', 'naver']\n }\n ).notNull(),\n\n providerUserId: text('provider_user_id').notNull(),\n providerEmail: text('provider_email'),\n\n // OAuth tokens (encrypted in production)\n accessToken: text('access_token'),\n refreshToken: text('refresh_token'),\n tokenExpiresAt: timestamp('token_expires_at', { withTimezone: true }),\n\n ...timestamps(),\n },\n (table) => [\n // Unique constraint: one provider account per provider\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;\nexport type SocialProvider = 'google' | 'github' | 'kakao' | 'naver';","/**\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 { text, timestamp, boolean, index } from 'drizzle-orm/pg-core';\nimport { id, foreignKey } 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 userId: foreignKey('user', () => users.id),\n\n // Key identification (client-generated UUID)\n keyId: text('key_id').notNull().unique(),\n\n // Public key in Base64-encoded DER format (SPKI)\n publicKey: text('public_key').notNull(),\n\n // Algorithm used (ES256 recommended, RS256 fallback)\n algorithm: text('algorithm', {\n enum: ['ES256', 'RS256']\n }).notNull().default('ES256'),\n\n // Key fingerprint (SHA-256 hash for quick identification)\n fingerprint: text('fingerprint').notNull(),\n\n // Key status\n isActive: boolean('is_active').notNull().default(true),\n\n // Timestamps\n createdAt: timestamp('created_at', { mode: 'date', withTimezone: true })\n .notNull()\n .defaultNow(),\n\n lastUsedAt: timestamp('last_used_at', { mode: 'date', withTimezone: true }),\n\n expiresAt: timestamp('expires_at', { mode: 'date', withTimezone: true }),\n\n // Revocation\n revokedAt: timestamp('revoked_at', { mode: 'date', withTimezone: true }),\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 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 { text, timestamp, bigint, index, jsonb } from 'drizzle-orm/pg-core';\nimport { id, timestamps } from '@spfn/core/db';\nimport { roles } from './roles';\nimport { users } from './users';\nimport { authSchema } from './schema';\n\nexport const invitations = 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: bigint('role_id', { mode: 'number' })\n .references(() => roles.id)\n .notNull(),\n\n // User who created this invitation\n // Foreign key to users table\n // Used for: audit trail, permission checks\n invitedBy: bigint('invited_by', { mode: 'number' })\n .references(() => users.id)\n .notNull(),\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: text(\n 'status',\n {\n enum: ['pending', 'accepted', 'expired', 'cancelled']\n }\n ).notNull().default('pending'),\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: timestamp('expires_at', { withTimezone: true }).notNull(),\n\n // Timestamp when invitation was accepted\n // null = not yet accepted\n // Used for: audit trail, analytics\n acceptedAt: timestamp('accepted_at', { withTimezone: true }),\n\n // Timestamp when invitation was cancelled\n // null = not cancelled\n // Used for: audit trail\n cancelledAt: timestamp('cancelled_at', { withTimezone: true }),\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: jsonb('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 invitations.$inferSelect;\nexport type NewInvitation = typeof invitations.$inferInsert;\nexport type InvitationStatus = 'pending' | 'accepted' | 'expired' | 'cancelled';\n\n// Helper type with joined data\nexport type InvitationWithDetails = Invitation &\n{\n role: {\n id: number;\n name: string;\n displayName: string;\n };\n inviter: {\n id: number;\n email: string | null;\n };\n};","/**\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 { text, boolean, index } from 'drizzle-orm/pg-core';\nimport { id, timestamps } 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 (e.g., 'user:delete', 'post:publish')\n // Format: resource:action or namespace:resource:action\n // Must be unique\n name: text('name').notNull().unique(),\n\n // Display name for UI\n displayName: text('display_name').notNull(),\n\n // Permission description\n description: text('description'),\n\n // Category for grouping (e.g., 'user', 'post', 'admin', 'system')\n category: text('category'),\n\n // Built-in permission flag\n // true: Core package permissions - cannot be deleted\n // false: Custom or preset permissions\n isBuiltin: boolean('is_builtin').notNull().default(false),\n\n // System permission flag\n // true: Defined in code (builtin or preset)\n // false: Runtime created custom permission\n isSystem: boolean('is_system').notNull().default(false),\n\n // Active status\n // false: Deactivated permission (not enforced)\n isActive: boolean('is_active').notNull().default(true),\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 { bigint, index, unique } from 'drizzle-orm/pg-core';\nimport { id, timestamps } 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 // Foreign key to roles table\n roleId: bigint('role_id', { mode: 'number' })\n .notNull()\n .references(() => roles.id, { onDelete: 'cascade' }),\n\n // Foreign key to permissions table\n permissionId: bigint('permission_id', { mode: 'number' })\n .notNull()\n .references(() => 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 { bigint, boolean, text, timestamp, index, unique } from 'drizzle-orm/pg-core';\nimport { id, timestamps } 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 // Foreign key to users table\n userId: bigint('user_id', { mode: 'number' })\n .notNull()\n .references(() => users.id, { onDelete: 'cascade' }),\n\n // Foreign key to permissions table\n permissionId: bigint('permission_id', { mode: 'number' })\n .notNull()\n .references(() => permissions.id, { onDelete: 'cascade' }),\n\n // Grant or revoke\n // true: Grant this permission (even if role doesn't have it)\n // false: Revoke this permission (even if role has it)\n granted: boolean('granted').notNull().default(true),\n\n // Reason for grant/revocation (audit trail)\n reason: text('reason'),\n\n // Expiration timestamp (optional)\n // null: Permanent override\n // timestamp: Permission expires at this time\n expiresAt: timestamp('expires_at', { withTimezone: true }),\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-social-accounts';\nexport * from './user-public-keys';\nexport * from './verification-codes';\nexport * from './invitations';\n\n// RBAC entities\nexport * from './roles';\nexport * from './permissions';\nexport * from './role-permissions';\nexport * from './user-permissions';","/**\n * @spfn/auth - Role Service\n *\n * Role management functions for runtime role creation and modification\n */\n\nimport { getDatabase } from '@spfn/core/db';\nimport { roles, permissions, rolePermissions } from '@/server/entities';\nimport type { Role } from '@/server/entities/roles';\nimport { eq, and } from 'drizzle-orm';\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 const db = getDatabase();\n\n if (!db)\n {\n throw new Error('[Auth] Database not initialized');\n }\n\n // Check for duplicate name\n const existing = await db\n .select()\n .from(roles)\n .where(eq(roles.name, data.name))\n .limit(1);\n\n if (existing.length > 0)\n {\n throw new Error(`Role with name '${data.name}' already exists`);\n }\n\n // Create role\n const [newRole] = await db\n .insert(roles)\n .values({\n name: data.name,\n displayName: data.displayName,\n description: data.description,\n priority: data.priority ?? 10,\n isSystem: false, // Custom roles are never system roles\n isBuiltin: false,\n })\n .returning();\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 db.insert(rolePermissions).values(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 db = getDatabase();\n\n if (!db)\n {\n throw new Error('[Auth] Database not initialized');\n }\n\n const roleIdNum = Number(roleId);\n\n // Get role\n const [role] = await db\n .select()\n .from(roles)\n .where(eq(roles.id, roleIdNum))\n .limit(1);\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 db\n .update(roles)\n .set(data)\n .where(eq(roles.id, roleIdNum))\n .returning();\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 db = getDatabase();\n\n if (!db)\n {\n throw new Error('[Auth] Database not initialized');\n }\n\n const roleIdNum = Number(roleId);\n\n // Get role\n const [role] = await db\n .select()\n .from(roles)\n .where(eq(roles.id, roleIdNum))\n .limit(1);\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 db.delete(roles).where(eq(roles.id, 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 db = getDatabase();\n\n if (!db)\n {\n throw new Error('[Auth] Database not initialized');\n }\n\n const roleIdNum = Number(roleId);\n const permissionIdNum = Number(permissionId);\n\n // Check if mapping already exists\n const existing = await db\n .select()\n .from(rolePermissions)\n .where(\n and(\n eq(rolePermissions.roleId, roleIdNum),\n eq(rolePermissions.permissionId, permissionIdNum)\n )\n )\n .limit(1);\n\n if (existing.length > 0)\n {\n return; // Already exists\n }\n\n // Create mapping\n await db.insert(rolePermissions).values({\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 db = getDatabase();\n\n if (!db)\n {\n throw new Error('[Auth] Database not initialized');\n }\n\n const roleIdNum = Number(roleId);\n const permissionIdNum = Number(permissionId);\n\n await db\n .delete(rolePermissions)\n .where(\n and(\n eq(rolePermissions.roleId, roleIdNum),\n eq(rolePermissions.permissionId, permissionIdNum)\n )\n );\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 db = getDatabase();\n\n if (!db)\n {\n throw new Error('[Auth] Database not initialized');\n }\n\n const roleIdNum = Number(roleId);\n\n // Delete existing mappings\n await db.delete(rolePermissions).where(eq(rolePermissions.roleId, roleIdNum));\n\n // Create new mappings\n if (permissionIds.length > 0)\n {\n const mappings = permissionIds.map(permId => ({\n roleId: roleIdNum,\n permissionId: Number(permId),\n }));\n\n await db.insert(rolePermissions).values(mappings);\n }\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 const db = getDatabase();\n\n if (!db)\n {\n throw new Error('[Auth] Database not initialized');\n }\n\n const query = db.select().from(roles);\n\n if (!includeInactive)\n {\n return query.where(eq(roles.isActive, true));\n }\n\n return query;\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 const db = getDatabase();\n\n if (!db)\n {\n throw new Error('[Auth] Database not initialized');\n }\n\n const [role] = await db\n .select()\n .from(roles)\n .where(eq(roles.name, name))\n .limit(1);\n\n return role || null;\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 db = getDatabase();\n\n if (!db)\n {\n throw new Error('[Auth] Database not initialized');\n }\n\n const roleIdNum = Number(roleId);\n\n const perms = await db\n .select({ name: permissions.name })\n .from(rolePermissions)\n .innerJoin(permissions, eq(rolePermissions.permissionId, permissions.id))\n .where(eq(rolePermissions.roleId, roleIdNum));\n\n return perms.map(p => p.name);\n}","/**\n * @spfn/auth - Auth Routes\n *\n * Thin route handlers that delegate to services\n */\n\nimport { createApp } from '@spfn/core/route';\nimport {\n checkAccountExistsContract,\n registerContract,\n loginContract,\n logoutContract,\n rotateKeyContract,\n changePasswordContract,\n sendVerificationCodeContract,\n verifyCodeContract,\n getMeContract\n} from '@/lib/contracts';\nimport { getAuth, getUser } from '@/server/helpers';\nimport {\n checkAccountExistsService,\n registerService,\n loginService,\n logoutService,\n changePasswordService,\n sendVerificationCodeService,\n verifyCodeService,\n rotateKeyService,\n getMeService,\n} from '@/server/services';\n\nconst app = createApp();\n\n// POST /api/auth/exists\napp.bind(checkAccountExistsContract, async (c) =>\n{\n const body = await c.data();\n const result = await checkAccountExistsService(body);\n return c.success(result);\n});\n\n// POST /_auth/codes\napp.bind(sendVerificationCodeContract, async (c) =>\n{\n const body = await c.data();\n const result = await sendVerificationCodeService(body);\n return c.success(result);\n});\n\n// POST /_auth/codes/verify\napp.bind(verifyCodeContract, async (c) =>\n{\n const body = await c.data();\n const result = await verifyCodeService(body);\n return c.success(result);\n});\n\n// POST /api/auth/register\napp.bind(registerContract, async (c) =>\n{\n const body = await c.data();\n const result = await registerService(body);\n return c.success(result);\n});\n\n// POST /api/auth/login\napp.bind(loginContract, async (c) =>\n{\n const body = await c.data();\n const result = await loginService(body);\n return c.success(result);\n});\n\n// ===== Authenticated Routes Below =====\n// POST /api/auth/logout (Authenticated)\napp.bind(logoutContract, 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.success({ success: true });\n }\n\n const { keyId, userId } = auth;\n await logoutService({ userId: Number(userId), keyId });\n return c.success({ success: true });\n});\n\n// POST /api/auth/keys/rotate (Authenticated)\napp.bind(rotateKeyContract, async (c) =>\n{\n const body = await c.data();\n const { keyId: oldKeyId, userId } = getAuth(c);\n\n const result = 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 return c.success(result);\n});\n\n// PUT /_auth/password (Authenticated)\napp.bind(changePasswordContract, 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.success({ success: true });\n});\n\n// GET /_auth/me (Authenticated)\napp.bind(getMeContract, async (c) =>\n{\n const { userId } = getAuth(c);\n const result = await getMeService(userId);\n return c.success(result);\n});\n\nexport default app;","// --------------------------------------------------------------------------\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","// --------------------------------------------------------------------------\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","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","/** The base Error type thrown for all TypeBox exceptions */\nexport class TypeBoxError extends Error {\n constructor(message) {\n super(message);\n }\n}\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","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 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","/** 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","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","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","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","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","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","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","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","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","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","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 { 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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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 { 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","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","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","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 { 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","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","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","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","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","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","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","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","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","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","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 { 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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","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","// ------------------------------------------------------------------\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","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","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","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","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","// ------------------------------------------------------------------\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 * @spfn/auth - TypeBox Schemas\n *\n * Common response schemas for contract definitions\n */\n\nimport { Type, TObject } from '@sinclair/typebox';\n\n/**\n * Success response schema wrapper\n *\n * Wraps a data schema with success: true and optional message\n */\nexport const SuccessResponseSchema = <T extends TObject>(dataSchema: T) =>\n Type.Object(\n {\n success: Type.Literal(true),\n data: dataSchema,\n message: Type.Optional(Type.String()),\n }\n );\n\n/**\n * Error response schema\n *\n * Standard error format with code, message, and optional details\n */\nexport const ErrorResponseSchema = Type.Object(\n {\n success: Type.Literal(false),\n error: Type.Object(\n {\n code: Type.String(),\n message: Type.String(),\n details: Type.Optional(Type.Any()),\n }\n ),\n }\n);\n\n/**\n * API Response schema (union of success and error)\n *\n * Use this to define contract responses that can be either success or error\n */\nexport const ApiResponseSchema = <T extends TObject>(dataSchema: T) =>\n Type.Union([\n SuccessResponseSchema(dataSchema),\n ErrorResponseSchema,\n ]);","/**\n * @spfn/auth - Auth API Contracts\n *\n * Type-safe API contracts for authentication operations\n */\n\nimport { Type } from '@sinclair/typebox';\nimport type { RouteContract } from '@spfn/core/route';\nimport { ApiResponseSchema } from '@/lib/types/schemas';\n\n// Email regex pattern (RFC 5322 compliant)\n// Validates: local-part@domain.tld\n// - Local part: alphanumeric, dots, hyphens, underscores\n// - Domain: alphanumeric, hyphens, dots\n// - TLD: minimum 2 characters\nconst EMAIL_PATTERN = '^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\\\\.[a-zA-Z]{2,}$';\n\n// Phone regex pattern (E.164 format)\n// Format: +[country code][number] (1-15 digits total)\nconst PHONE_PATTERN = '^\\\\+[1-9]\\\\d{1,14}$';\n\n// SHA-256 fingerprint pattern (64 hex characters)\nconst FINGERPRINT_PATTERN = '^[a-f0-9]{64}$';\n\n// UUID v4 pattern (8-4-4-4-12 format)\nconst UUID_PATTERN = '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$';\n\n// Base64 pattern (DER encoded keys)\n// Matches standard Base64 with padding\nconst BASE64_PATTERN = '^[A-Za-z0-9+/]+=*$';\n\n/**\n * POST /codes - Send verification code\n *\n * Sends a 6-digit verification code to email or phone\n * Final path: /_auth/codes\n */\nexport const sendVerificationCodeContract = {\n method: 'POST' as const,\n path: '/_auth/codes',\n body: Type.Object({\n target: Type.String({\n description: 'Email address or phone number in E.164 format'\n }),\n targetType: Type.Union([\n Type.Literal('email'),\n Type.Literal('phone')\n ], {\n description: 'Type of target (email or phone)'\n }),\n purpose: Type.Union([\n Type.Literal('registration'),\n Type.Literal('login'),\n Type.Literal('password_reset')\n ], {\n description: 'Purpose of verification'\n }),\n }),\n response: ApiResponseSchema(\n Type.Object({\n success: Type.Boolean(),\n expiresAt: Type.String({ description: 'ISO 8601 expiry time' }),\n })\n ),\n} as const satisfies RouteContract;\n\n/**\n * POST /codes/verify - Verify code (without creating account)\n *\n * Validates verification code, returns a temporary token\n * Final path: /_auth/codes/verify\n */\nexport const verifyCodeContract = {\n method: 'POST' as const,\n path: '/_auth/codes/verify',\n body: Type.Object({\n target: Type.String({\n description: 'Email address or phone number'\n }),\n targetType: Type.Union([\n Type.Literal('email'),\n Type.Literal('phone')\n ]),\n code: Type.String({\n minLength: 6,\n maxLength: 6,\n pattern: '^[0-9]{6}$',\n description: '6-digit verification code'\n }),\n purpose: Type.Union([\n Type.Literal('registration'),\n Type.Literal('login'),\n Type.Literal('password_reset')\n ]),\n }),\n response: ApiResponseSchema(\n Type.Object({\n valid: Type.Boolean(),\n verificationToken: Type.Optional(Type.String({\n description: 'Temporary token for completing registration (15min validity)'\n })),\n })\n ),\n} as const satisfies RouteContract;\n\n/**\n * POST /exists - Check if account exists\n *\n * Checks if an email or phone number is already registered\n * Final path: /_auth/exists (prefix added from package.json)\n */\nexport const checkAccountExistsContract = {\n method: 'POST' as const,\n path: '/_auth/exists',\n body: Type.Object(\n {\n email: Type.Optional(Type.String({\n pattern: EMAIL_PATTERN,\n description: 'Email address to check'\n })),\n phone: Type.Optional(Type.String({\n pattern: PHONE_PATTERN,\n description: 'Phone number in E.164 format (e.g., +821012345678)'\n })),\n },\n {\n minProperties: 1,\n description: 'At least one of email or phone must be provided'\n }\n ),\n response: ApiResponseSchema(\n Type.Object(\n {\n exists: Type.Boolean({ description: 'Whether the account exists' }),\n identifier: Type.String({ description: 'The identifier that was checked' }),\n identifierType: Type.Union([\n Type.Literal('email'),\n Type.Literal('phone')\n ], { description: 'Type of identifier checked' }),\n }\n )\n ),\n} as const satisfies RouteContract;\n\n/**\n * POST /register - Register new user\n *\n * Register with email/phone and password, includes public key\n * Final path: /_auth/register (prefix added from package.json)\n */\nexport const registerContract = {\n method: 'POST' as const,\n path: '/_auth/register',\n body: Type.Object({\n email: Type.Optional(Type.String({\n pattern: EMAIL_PATTERN,\n description: 'Email address'\n })),\n phone: Type.Optional(Type.String({\n pattern: PHONE_PATTERN,\n description: 'Phone number in E.164 format'\n })),\n verificationToken: Type.String({\n description: 'Verification token obtained from /verify-code endpoint'\n }),\n password: Type.String({\n minLength: 8,\n description: 'User password (minimum 8 characters)'\n }),\n publicKey: Type.String({\n pattern: BASE64_PATTERN,\n description: 'Base64 encoded DER public key (SPKI format)'\n }),\n keyId: Type.String({\n pattern: UUID_PATTERN,\n description: 'Client-generated UUID v4 key identifier'\n }),\n fingerprint: Type.String({\n pattern: FINGERPRINT_PATTERN,\n description: 'SHA-256 fingerprint of public key (64 hex characters)'\n }),\n algorithm: Type.Union([\n Type.Literal('ES256'),\n Type.Literal('RS256')\n ], {\n description: 'Signing algorithm (ES256 recommended, RS256 for compatibility)'\n }),\n keySize: Type.Optional(Type.Number({\n description: 'Key size in bytes'\n })),\n }, {\n minProperties: 6, // email/phone + verificationToken + password + publicKey + keyId + fingerprint\n description: 'Email or phone must be provided with verification token'\n }),\n response: ApiResponseSchema(\n Type.Object({\n userId: Type.String(),\n email: Type.Optional(Type.String()),\n phone: Type.Optional(Type.String()),\n })\n ),\n} as const satisfies RouteContract;\n\n/**\n * POST /login - User login\n *\n * Authenticate user with email/phone and password\n * Replaces existing key with new one\n * Final path: /_auth/login (prefix added from package.json)\n */\nexport const loginContract = {\n method: 'POST' as const,\n path: '/_auth/login',\n body: Type.Object({\n email: Type.Optional(Type.String({\n pattern: EMAIL_PATTERN,\n description: 'Email address'\n })),\n phone: Type.Optional(Type.String({\n pattern: PHONE_PATTERN,\n description: 'Phone number in E.164 format'\n })),\n password: Type.String({\n minLength: 1,\n description: 'User password'\n }),\n publicKey: Type.String({\n pattern: BASE64_PATTERN,\n description: 'Base64 encoded DER public key (SPKI format)'\n }),\n keyId: Type.String({\n pattern: UUID_PATTERN,\n description: 'Client-generated UUID v4 key identifier'\n }),\n fingerprint: Type.String({\n pattern: FINGERPRINT_PATTERN,\n description: 'SHA-256 fingerprint of public key (64 hex characters)'\n }),\n oldKeyId: Type.Optional(Type.String({\n pattern: UUID_PATTERN,\n description: 'Previous key ID to revoke (server-side cleanup)'\n })),\n algorithm: Type.Union([\n Type.Literal('ES256'),\n Type.Literal('RS256')\n ], {\n description: 'Signing algorithm (ES256 recommended, RS256 for compatibility)'\n }),\n keySize: Type.Optional(Type.Number({\n description: 'Key size in bytes'\n })),\n }, {\n minProperties: 5, // email/phone + password + publicKey + keyId + fingerprint\n description: 'Email or phone must be provided along with key data'\n }),\n response: ApiResponseSchema(\n Type.Object({\n userId: Type.String(),\n email: Type.Optional(Type.String()),\n phone: Type.Optional(Type.String()),\n passwordChangeRequired: Type.Boolean({\n description: 'Whether user must change password before proceeding'\n }),\n })\n ),\n} as const satisfies RouteContract;\n\n/**\n * POST /logout - Logout user\n *\n * Revokes current key (requires authentication)\n * Final path: /_auth/logout (prefix added from package.json)\n */\nexport const logoutContract = {\n method: 'POST' as const,\n path: '/_auth/logout',\n body: Type.Object({}),\n response: ApiResponseSchema(\n Type.Object({\n success: Type.Boolean(),\n })\n ),\n} as const satisfies RouteContract;\n\n/**\n * POST /keys/rotate - Rotate key\n *\n * Replace current key with new one (requires authentication)\n * Final path: /_auth/keys/rotate (prefix added from package.json)\n */\nexport const rotateKeyContract = {\n method: 'POST' as const,\n path: '/_auth/keys/rotate',\n body: Type.Object({\n publicKey: Type.String({\n pattern: BASE64_PATTERN,\n description: 'Base64 encoded DER public key (SPKI format)'\n }),\n keyId: Type.String({\n pattern: UUID_PATTERN,\n description: 'Client-generated UUID v4 key identifier'\n }),\n fingerprint: Type.String({\n pattern: FINGERPRINT_PATTERN,\n description: 'SHA-256 fingerprint of public key (64 hex characters)'\n }),\n algorithm: Type.Union([\n Type.Literal('ES256'),\n Type.Literal('RS256')\n ], {\n description: 'Signing algorithm (ES256 recommended, RS256 for compatibility)'\n }),\n keySize: Type.Optional(Type.Number({\n description: 'Key size in bytes'\n })),\n }),\n response: ApiResponseSchema(\n Type.Object({\n success: Type.Boolean(),\n keyId: Type.String(),\n })\n ),\n} as const satisfies RouteContract;\n\n/**\n * PUT /password - Change user password\n *\n * Allows authenticated users to change their password\n * Requires current password for verification\n * Final path: /_auth/password (prefix added from package.json)\n */\nexport const changePasswordContract = {\n method: 'PUT' as const,\n path: '/_auth/password',\n body: Type.Object({\n currentPassword: Type.String({\n minLength: 1,\n description: 'Current password for verification'\n }),\n newPassword: Type.String({\n minLength: 8,\n description: 'New password (minimum 8 characters)'\n }),\n }),\n response: ApiResponseSchema(\n Type.Object({\n success: Type.Boolean({ description: 'Whether password was changed successfully' }),\n })\n ),\n} as const satisfies RouteContract;\n\n/**\n * GET /me - Get current user info\n *\n * Returns authenticated user's information including role and permissions\n * Requires authentication\n * Final path: /_auth/me (prefix added from package.json)\n */\nexport const getMeContract = {\n method: 'GET' as const,\n path: '/_auth/me',\n body: Type.Object({}),\n response: ApiResponseSchema(\n Type.Object({\n userId: Type.String({ description: 'User ID' }),\n email: Type.Optional(Type.String({ description: 'User email address' })),\n phone: Type.Optional(Type.String({ description: 'User phone number' })),\n role: Type.Object({\n id: Type.Number({ description: 'Role ID' }),\n name: Type.String({ description: 'Role name (e.g., user, admin)' }),\n displayName: Type.String({ description: 'Display name for UI' }),\n priority: Type.Number({ description: 'Role priority level' }),\n }, { description: 'User role information' }),\n permissions: Type.Array(\n Type.Object({\n id: Type.Number({ description: 'Permission ID' }),\n name: Type.String({ description: 'Permission name (e.g., user:delete)' }),\n displayName: Type.String({ description: 'Display name for UI' }),\n category: Type.Optional(Type.String({ description: 'Permission category' })),\n }),\n { description: 'List of permissions granted through role' }\n ),\n })\n ),\n} as const satisfies RouteContract;","/**\n * @spfn/auth - Invitation API Contracts\n *\n * Type-safe API contracts for user invitation operations\n */\n\nimport { Type } from '@sinclair/typebox';\nimport type { RouteContract } from '@spfn/core/route';\nimport { ApiResponseSchema } from '@/lib/types/schemas';\n\n// UUID v4 pattern\nconst UUID_PATTERN = '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$';\n\n// Email pattern\nconst EMAIL_PATTERN = '^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\\\\.[a-zA-Z]{2,}$';\n\n// Base64 pattern (DER encoded keys)\nconst BASE64_PATTERN = '^[A-Za-z0-9+/]+=*$';\n\n// SHA-256 fingerprint pattern (64 hex characters)\nconst FINGERPRINT_PATTERN = '^[a-f0-9]{64}$';\n\n/**\n * GET /_auth/invitations/:token - Get invitation details (public)\n *\n * Retrieves invitation information for acceptance page\n */\nexport const getInvitationContract = {\n method: 'GET' as const,\n path: '/_auth/invitations/:token',\n params: Type.Object({\n token: Type.String({\n pattern: UUID_PATTERN,\n description: 'Invitation token (UUID v4)'\n }),\n }),\n response: ApiResponseSchema(\n Type.Object({\n email: Type.String({\n format: 'email',\n description: 'Email address being invited'\n }),\n role: Type.String({\n description: 'Role name (e.g., \"admin\", \"user\")'\n }),\n roleDisplayName: Type.String({\n description: 'Role display name (e.g., \"Administrator\")'\n }),\n invitedBy: Type.String({\n format: 'email',\n description: 'Email of user who sent invitation'\n }),\n expiresAt: Type.String({\n format: 'date-time',\n description: 'ISO 8601 expiration timestamp'\n }),\n metadata: Type.Optional(Type.Any({\n description: 'Custom metadata (welcome message, etc.)'\n })),\n })\n ),\n} as const satisfies RouteContract;\n\n/**\n * POST /_auth/invitations/accept - Accept invitation (public)\n *\n * Accepts invitation and creates user account with provided credentials\n */\nexport const acceptInvitationContract = {\n method: 'POST' as const,\n path: '/_auth/invitations/accept',\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: 'Account password (minimum 8 characters)'\n }),\n publicKey: Type.String({\n pattern: BASE64_PATTERN,\n description: 'Base64 DER encoded public key (SPKI format)'\n }),\n keyId: Type.String({\n pattern: UUID_PATTERN,\n description: 'Unique key identifier (UUID v4)'\n }),\n fingerprint: Type.String({\n pattern: FINGERPRINT_PATTERN,\n description: 'SHA-256 fingerprint of public key (64 hex chars)'\n }),\n algorithm: Type.Union([\n Type.Literal('ES256'),\n Type.Literal('RS256')\n ], {\n description: 'Asymmetric signing algorithm'\n }),\n }),\n response: ApiResponseSchema(\n Type.Object({\n userId: Type.Number({\n description: 'Created user ID'\n }),\n email: Type.String({\n format: 'email',\n description: 'User email address'\n }),\n role: Type.String({\n description: 'Assigned role name'\n }),\n })\n ),\n} as const satisfies RouteContract;\n\n/**\n * POST /_auth/invitations - Create new invitation (admin)\n *\n * Creates and sends invitation to new user\n * Requires: admin role or user:invite permission\n */\nexport const createInvitationContract = {\n method: 'POST' as const,\n path: '/_auth/invitations',\n body: Type.Object({\n email: Type.String({\n pattern: EMAIL_PATTERN,\n description: 'Email address to invite'\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 response: ApiResponseSchema(\n Type.Object({\n id: Type.Number(),\n email: Type.String({ format: 'email' }),\n token: Type.String({\n description: 'Invitation token (send via email)'\n }),\n roleId: Type.Number(),\n expiresAt: Type.String({\n format: 'date-time',\n description: 'ISO 8601 expiration timestamp'\n }),\n invitationUrl: Type.String({\n description: 'Full invitation URL for email'\n }),\n })\n ),\n} as const satisfies RouteContract;\n\n/**\n * GET /_auth/invitations - List invitations (admin)\n *\n * Retrieves paginated list of invitations with filtering\n * Requires: admin role\n */\nexport const listInvitationsContract = {\n method: 'GET' as const,\n path: '/_auth/invitations',\n query: Type.Object({\n status: Type.Optional(Type.Union([\n Type.Literal('pending'),\n Type.Literal('accepted'),\n Type.Literal('expired'),\n Type.Literal('cancelled'),\n ], {\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 response: ApiResponseSchema(\n Type.Object({\n invitations: Type.Array(Type.Object({\n id: Type.Number(),\n email: Type.String({ format: 'email' }),\n status: Type.String(),\n role: Type.Object({\n id: Type.Number(),\n name: Type.String(),\n displayName: Type.String(),\n }),\n inviter: Type.Object({\n id: Type.Number(),\n email: Type.String({ format: 'email' }),\n }),\n createdAt: Type.String({ format: 'date-time' }),\n expiresAt: Type.String({ format: 'date-time' }),\n acceptedAt: Type.Optional(Type.String({ format: 'date-time' })),\n cancelledAt: Type.Optional(Type.String({ format: 'date-time' })),\n })),\n total: Type.Number({ description: 'Total invitation count' }),\n page: Type.Number({ description: 'Current page' }),\n limit: Type.Number({ description: 'Items per page' }),\n totalPages: Type.Number({ description: 'Total page count' }),\n })\n ),\n} as const satisfies RouteContract;\n\n/**\n * POST /_auth/invitations/cancel - Cancel invitation (admin)\n *\n * Cancels pending invitation\n * Requires: admin role or invitation owner\n */\nexport const cancelInvitationContract = {\n method: 'POST' as const,\n path: '/_auth/invitations/cancel',\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 response: ApiResponseSchema(\n Type.Object({\n success: Type.Boolean(),\n cancelledAt: Type.String({\n format: 'date-time',\n description: 'Cancellation timestamp'\n }),\n })\n ),\n} as const satisfies RouteContract;\n\n/**\n * POST /_auth/invitations/resend - Resend invitation (admin)\n *\n * Resends invitation email and extends expiration\n * Requires: admin role\n */\nexport const resendInvitationContract = {\n method: 'POST' as const,\n path: '/_auth/invitations/resend',\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 response: ApiResponseSchema(\n Type.Object({\n success: Type.Boolean(),\n expiresAt: Type.String({\n format: 'date-time',\n description: 'New expiration timestamp'\n }),\n })\n ),\n} as const satisfies RouteContract;\n\n/**\n * DELETE /_auth/invitations/delete - Delete invitation (superadmin)\n *\n * Permanently deletes invitation record\n * Requires: superadmin role\n */\nexport const deleteInvitationContract = {\n method: 'POST' as const,\n path: '/_auth/invitations/delete',\n body: Type.Object({\n id: Type.Number({\n description: 'Invitation ID'\n }),\n }),\n response: ApiResponseSchema(\n Type.Object({\n success: Type.Boolean(),\n })\n ),\n} as const satisfies RouteContract;","/**\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 'bcrypt';\n\n/**\n * Bcrypt salt rounds (cost factor)\n *\n * Determines computational cost: 2^rounds iterations\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 * Can be configured via SPFN_AUTH_BCRYPT_SALT_ROUNDS environment variable\n */\nconst SALT_ROUNDS = parseInt(\n process.env.SPFN_AUTH_BCRYPT_SALT_ROUNDS || // New prefixed version (recommended)\n process.env.BCRYPT_SALT_ROUNDS || // Legacy fallback\n '10',\n 10\n);\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 * @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, 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 * 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 const errors: string[] = [];\n\n if (password.length < 8)\n {\n errors.push('Password must be at least 8 characters');\n }\n\n if (!/[A-Z]/.test(password))\n {\n errors.push('Password must contain at least one uppercase letter');\n }\n\n if (!/[a-z]/.test(password))\n {\n errors.push('Password must contain at least one lowercase letter');\n }\n\n if (!/[0-9]/.test(password))\n {\n errors.push('Password must contain at least one number');\n }\n\n if (!/[^A-Za-z0-9]/.test(password))\n {\n errors.push('Password must contain at least one special character');\n }\n\n return {\n valid: errors.length === 0,\n errors,\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 type { SessionPayload } from '@/lib/types/api';\n\nconst JWT_SECRET =\n process.env.SPFN_AUTH_JWT_SECRET || // New prefixed version (recommended)\n process.env.JWT_SECRET || // Legacy fallback\n 'dev-secret-key-change-in-production';\n\nconst JWT_EXPIRES_IN =\n process.env.SPFN_AUTH_JWT_EXPIRES_IN || // New prefixed version (recommended)\n process.env.JWT_EXPIRES_IN || // Legacy fallback\n '7d';\n\nexport interface TokenPayload extends SessionPayload\n{\n exp?: number;\n iat?: number;\n iss?: string;\n keyId?: 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, JWT_SECRET, {\n expiresIn: 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, 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: 'ES256' | 'RS256'\n): TokenPayload\n{\n try\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 const decoded = jwt.verify(token, publicKeyObject, {\n algorithms: [algorithm], // Prevent algorithm confusion attacks\n issuer: 'spfn-client', // Validate token issuer\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 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\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 * @spfn/auth - Verification Code Helpers\n *\n * Helper functions for email/phone verification codes\n */\n\nimport jwt from 'jsonwebtoken';\nimport { getDatabase, create } from '@spfn/core/db';\nimport { verificationCodes } from '@/server/entities/verification-codes';\nimport { eq, and } from 'drizzle-orm';\n\n/**\n * JWT secret for verification tokens\n * Must be at least 32 characters long\n */\nfunction getVerificationTokenSecret(): string\n{\n const secret =\n process.env.SPFN_AUTH_VERIFICATION_TOKEN_SECRET || // New prefixed version (recommended)\n process.env.VERIFICATION_TOKEN_SECRET || // Legacy fallback\n process.env.SPFN_AUTH_JWT_SECRET || // New JWT secret fallback\n process.env.JWT_SECRET; // Legacy JWT secret fallback\n\n if (!secret || secret.length < 32)\n {\n throw new Error('SPFN_AUTH_VERIFICATION_TOKEN_SECRET must be at least 32 characters long');\n }\n\n return secret;\n}\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: 'email' | 'phone';\n purpose: 'registration' | 'login' | 'password_reset';\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 const code = Math.floor(Math.random() * 1000000)\n .toString()\n .padStart(6, '0');\n\n return code;\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 */\nexport async function storeVerificationCode(\n target: string,\n targetType: 'email' | 'phone',\n code: string,\n purpose: 'registration' | 'login' | 'password_reset'\n)\n{\n const db = getDatabase();\n if (!db)\n {\n throw new Error('Database not initialized');\n }\n\n // Calculate expiry time\n const expiresAt = new Date();\n expiresAt.setMinutes(expiresAt.getMinutes() + VERIFICATION_CODE_EXPIRY_MINUTES);\n\n // Create verification code record\n const record = await create(verificationCodes, {\n target,\n targetType,\n code,\n purpose,\n expiresAt,\n attempts: '0',\n });\n\n return record;\n}\n\n/**\n * Validate verification code\n *\n * @param target - Email or phone number\n * @param targetType - Type of target\n * @param code - 6-digit code to validate\n * @param purpose - Purpose of verification\n * @returns Validation result with code ID if valid\n */\nexport async function validateVerificationCode(\n target: string,\n targetType: 'email' | 'phone',\n code: string,\n purpose: 'registration' | 'login' | 'password_reset'\n): Promise<{ valid: boolean; codeId?: number; error?: string }>\n{\n const db = getDatabase();\n if (!db)\n {\n throw new Error('Database not initialized');\n }\n\n // Find the verification code\n const records = await db\n .select()\n .from(verificationCodes)\n .where(\n and(\n eq(verificationCodes.target, target),\n eq(verificationCodes.targetType, targetType),\n eq(verificationCodes.code, code),\n eq(verificationCodes.purpose, purpose)\n )\n )\n .limit(1);\n\n if (records.length === 0)\n {\n return { valid: false, error: 'Invalid verification code' };\n }\n\n const record = records[0];\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 const attempts = parseInt(record.attempts, 10);\n if (attempts >= MAX_VERIFICATION_ATTEMPTS)\n {\n return { valid: false, error: 'Too many attempts, please request a new code' };\n }\n\n // Increment attempt count\n await db\n .update(verificationCodes)\n .set({ attempts: (attempts + 1).toString() })\n .where(eq(verificationCodes.id, record.id));\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 */\nexport async function markCodeAsUsed(codeId: number): Promise<void>\n{\n const db = getDatabase();\n if (!db)\n {\n throw new Error('Database not initialized');\n }\n\n await db\n .update(verificationCodes)\n .set({ usedAt: new Date() })\n .where(eq(verificationCodes.id, 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 const secret = getVerificationTokenSecret();\n return jwt.sign(payload, 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 secret = getVerificationTokenSecret();\n const decoded = jwt.verify(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 console.error('[validateVerificationToken] Error:', 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 */\nexport async function sendVerificationEmail(\n email: string,\n code: string,\n purpose: string\n): Promise<void>\n{\n // TODO: Implement email sending with your email service\n // For now, just log to console (development only)\n console.log(`[VERIFICATION EMAIL] To: ${email}, Code: ${code}, Purpose: ${purpose}`);\n\n // Example implementation with nodemailer:\n // const transporter = nodemailer.createTransport({...});\n // await transporter.sendMail({\n // from: 'noreply@yourapp.com',\n // to: email,\n // subject: 'Your Verification Code',\n // text: `Your verification code is: ${code}`,\n // html: `<p>Your verification code is: <strong>${code}</strong></p>`,\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 */\nexport async function sendVerificationSMS(\n phone: string,\n code: string,\n purpose: string\n): Promise<void>\n{\n // TODO: Implement SMS sending with your SMS service (Twilio, AWS SNS, etc.)\n // For now, just log to console (development only)\n console.log(`[VERIFICATION SMS] To: ${phone}, Code: ${code}, Purpose: ${purpose}`);\n\n // Example implementation with Twilio:\n // const client = twilio(accountSid, authToken);\n // await client.messages.create({\n // body: `Your verification code is: ${code}`,\n // from: '+1234567890',\n // to: phone,\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/authenticate.js';\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 { findOne, create } from '@spfn/core/db';\nimport { ValidationError } from '@spfn/core/errors';\nimport { users, type User } from '@/server/entities';\nimport { hashPassword, verifyPassword } from '@/server/helpers';\nimport { validateVerificationToken } from '@/server/helpers/verification';\nimport {\n InvalidCredentialsError,\n AccountDisabledError,\n AccountAlreadyExistsError,\n InvalidVerificationTokenError,\n VerificationTokenPurposeMismatchError,\n VerificationTokenTargetMismatchError,\n} from '@/server/errors';\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?: 'ES256' | 'RS256';\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?: 'ES256' | 'RS256';\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 findOne(users, { email });\n }\n else if (phone)\n {\n identifier = phone;\n identifierType = 'phone';\n user = await findOne(users, { phone });\n }\n else\n {\n throw new ValidationError('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('registration', 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 let existingUser: User | null;\n if (email)\n {\n existingUser = await findOne(users, { email });\n }\n else if (phone)\n {\n existingUser = await findOne(users, { phone });\n }\n else\n {\n throw new ValidationError('Either email or phone must be provided');\n }\n\n if (existingUser)\n {\n const identifierType = email ? 'email' : 'phone';\n throw new AccountAlreadyExistsError(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 create(users, {\n email: email || null,\n phone: phone || null,\n passwordHash,\n passwordChangeRequired: false,\n roleId: userRole.id,\n status: 'active',\n createdAt: new Date(),\n updatedAt: new Date(),\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 let user: User | null;\n if (email)\n {\n user = await findOne(users, { email });\n }\n else if (phone)\n {\n user = await findOne(users, { phone });\n }\n else\n {\n throw new ValidationError('Either email or phone must be provided');\n }\n\n if (!user || !user.passwordHash)\n {\n throw new InvalidCredentialsError();\n }\n\n console.log('user', user);\n console.log('패스워드: ', password);\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(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 findOne(users, { id: userId });\n if (!user)\n {\n throw new ValidationError('User not found');\n }\n passwordHash = user.passwordHash;\n }\n\n // Verify current password\n if (!passwordHash)\n {\n throw new ValidationError('No password set for this account');\n }\n\n const isValid = await verifyPassword(currentPassword, passwordHash);\n if (!isValid)\n {\n throw new InvalidCredentialsError('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 const { updateOne } = await import('@spfn/core/db');\n await updateOne(users, { id: userId }, {\n passwordHash: newPasswordHash,\n passwordChangeRequired: false,\n updatedAt: new Date(),\n });\n}","/**\n * Authentication & Authorization Error Classes\n *\n * Custom error classes for auth-specific scenarios\n */\n\nimport {\n ValidationError,\n UnauthorizedError,\n ForbiddenError,\n ConflictError\n} from '@spfn/core/errors';\n\n/**\n * Invalid Credentials Error (401)\n *\n * Thrown when login credentials are incorrect\n */\nexport class InvalidCredentialsError extends UnauthorizedError\n{\n constructor(message: string = 'Invalid credentials')\n {\n super(message);\n this.name = 'InvalidCredentialsError';\n }\n}\n\n/**\n * Invalid Token Error (401)\n *\n * Thrown when authentication token is invalid or malformed\n */\nexport class InvalidTokenError extends UnauthorizedError\n{\n constructor(message: string = 'Invalid authentication token')\n {\n super(message);\n this.name = 'InvalidTokenError';\n }\n}\n\n/**\n * Token Expired Error (401)\n *\n * Thrown when authentication token has expired\n */\nexport class TokenExpiredError extends UnauthorizedError\n{\n constructor(message: string = 'Authentication token has expired')\n {\n super(message);\n this.name = 'TokenExpiredError';\n }\n}\n\n/**\n * Key Expired Error (401)\n *\n * Thrown when public key has expired\n */\nexport class KeyExpiredError extends UnauthorizedError\n{\n constructor(message: string = 'Public key has expired')\n {\n super(message);\n this.name = 'KeyExpiredError';\n }\n}\n\n/**\n * Account Disabled Error (403)\n *\n * Thrown when user account is disabled or inactive\n */\nexport class AccountDisabledError extends ForbiddenError\n{\n constructor(status: string = 'disabled')\n {\n super(`Account is ${status}`, { details: { status } });\n this.name = 'AccountDisabledError';\n }\n}\n\n/**\n * Account Already Exists Error (409)\n *\n * Thrown when trying to register with existing email/phone\n */\nexport class AccountAlreadyExistsError extends ConflictError\n{\n constructor(identifier: string, identifierType: 'email' | 'phone')\n {\n super('Account already exists', { details: { identifier, identifierType } });\n this.name = 'AccountAlreadyExistsError';\n }\n}\n\n/**\n * Invalid Verification Code Error (400)\n *\n * Thrown when verification code is invalid, expired, or already used\n */\nexport class InvalidVerificationCodeError extends ValidationError\n{\n constructor(reason: string = 'Invalid verification code')\n {\n super(reason);\n this.name = 'InvalidVerificationCodeError';\n }\n}\n\n/**\n * Invalid Verification Token Error (400)\n *\n * Thrown when verification token is invalid or expired\n */\nexport class InvalidVerificationTokenError extends ValidationError\n{\n constructor(message: string = 'Invalid or expired verification token')\n {\n super(message);\n this.name = 'InvalidVerificationTokenError';\n }\n}\n\n/**\n * Invalid Key Fingerprint Error (400)\n *\n * Thrown when public key fingerprint doesn't match the public key\n */\nexport class InvalidKeyFingerprintError extends ValidationError\n{\n constructor(message: string = 'Invalid key fingerprint')\n {\n super(message);\n this.name = 'InvalidKeyFingerprintError';\n }\n}\n\n/**\n * Verification Token Purpose Mismatch Error (400)\n *\n * Thrown when verification token purpose doesn't match expected purpose\n */\nexport class VerificationTokenPurposeMismatchError extends ValidationError\n{\n constructor(expected: string, actual: string)\n {\n super(`Verification token is for ${actual}, but ${expected} was expected`, { details: { expected, actual } });\n this.name = 'VerificationTokenPurposeMismatchError';\n }\n}\n\n/**\n * Verification Token Target Mismatch Error (400)\n *\n * Thrown when verification token target doesn't match provided email/phone\n */\nexport class VerificationTokenTargetMismatchError extends ValidationError\n{\n constructor()\n {\n super('Verification token does not match provided email/phone');\n this.name = 'VerificationTokenTargetMismatchError';\n }\n}","/**\n * @spfn/auth - Key Service\n *\n * Handles public key registration, rotation, and revocation\n */\n\nimport { create, getDatabase } from '@spfn/core/db';\nimport { userPublicKeys } from '@/server/entities';\nimport { verifyKeyFingerprint } from '@/server/helpers/jwt';\nimport { InvalidKeyFingerprintError } from '@/server/errors';\nimport { eq, and } from 'drizzle-orm';\n\nexport interface RegisterPublicKeyParams\n{\n userId: number;\n keyId: string;\n publicKey: string;\n fingerprint: string;\n algorithm?: 'ES256' | 'RS256';\n}\n\nexport interface RotateKeyParams\n{\n userId: number;\n oldKeyId: string;\n newKeyId: string;\n newPublicKey: string;\n fingerprint: string;\n algorithm?: 'ES256' | 'RS256';\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 create(userPublicKeys, {\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 const db = getDatabase()!;\n\n // Revoke old key\n await db\n .update(userPublicKeys)\n .set({\n isActive: false,\n revokedAt: new Date(),\n revokedReason: 'Replaced by key rotation',\n })\n .where(\n and(\n eq(userPublicKeys.keyId, oldKeyId),\n eq(userPublicKeys.userId, userId)\n )\n );\n\n // Store new public key (90 days expiry)\n await create(userPublicKeys, {\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 const db = getDatabase()!;\n\n await 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}","/**\n * @spfn/auth - User Service\n *\n * Handles user CRUD operations\n */\n\nimport { findOne, updateOne } from '@spfn/core/db';\nimport { users, type User } from '@/server/entities';\n\n/**\n * Get user by ID\n */\nexport async function getUserByIdService(userId: number): Promise<User | null>\n{\n return await findOne(users, { id: userId });\n}\n\n/**\n * Get user by email\n */\nexport async function getUserByEmailService(email: string): Promise<User | null>\n{\n return await findOne(users, { email });\n}\n\n/**\n * Get user by phone\n */\nexport async function getUserByPhoneService(phone: string): Promise<User | null>\n{\n return await findOne(users, { phone });\n}\n\n/**\n * Update user's last login timestamp\n */\nexport async function updateLastLoginService(userId: number): Promise<void>\n{\n await updateOne(users, { id: userId }, {\n lastLoginAt: new Date(),\n });\n}\n\n/**\n * Update user data\n */\nexport async function updateUserService(\n userId: number,\n updates: Partial<Omit<User, 'id' | 'createdAt'>>\n): Promise<void>\n{\n await updateOne(users, { id: userId }, {\n ...updates,\n updatedAt: new Date(),\n });\n}","/**\n * @spfn/auth - Verification Service\n *\n * Handles OTP code generation, validation, and delivery\n */\n\nimport {\n generateVerificationCode,\n storeVerificationCode,\n validateVerificationCode,\n markCodeAsUsed,\n createVerificationToken,\n sendVerificationEmail,\n sendVerificationSMS\n} from '@/server/helpers/verification';\nimport { InvalidVerificationCodeError } from '@/server/errors';\n\nexport interface SendVerificationCodeParams\n{\n target: string;\n targetType: 'email' | 'phone';\n purpose: 'registration' | 'login' | 'password_reset';\n}\n\nexport interface SendVerificationCodeResult\n{\n success: boolean;\n expiresAt: string;\n}\n\nexport interface VerifyCodeParams\n{\n target: string;\n targetType: 'email' | 'phone';\n code: string;\n purpose: 'registration' | 'login' | 'password_reset';\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(\n params: VerifyCodeParams\n): Promise<VerifyCodeResult>\n{\n const { target, targetType, code, purpose } = params;\n\n // Validate the verification code\n const validation = await validateVerificationCode(target, targetType, code, purpose);\n\n if (!validation.valid)\n {\n throw new InvalidVerificationCodeError(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 - Me Service\n *\n * Service for retrieving current user information\n */\n\nimport { getDatabase } from '@spfn/core/db';\nimport { users, roles, permissions, rolePermissions } from '@/server/entities';\nimport { eq, and } from 'drizzle-orm';\n\nexport interface GetMeResult\n{\n userId: string;\n email?: string;\n phone?: string;\n role: {\n id: number;\n name: string;\n displayName: string;\n priority: number;\n };\n permissions: Array<{\n id: number;\n name: string;\n displayName: string;\n category?: string;\n }>;\n}\n\n/**\n * Get current user information including role and permissions\n *\n * @param userId - User ID (string, number, or bigint)\n * @returns User info with role and permissions\n *\n * @example\n * ```typescript\n * const userInfo = await getMeService('123');\n * console.log(userInfo.role.name); // 'admin'\n * console.log(userInfo.permissions.length); // 15\n * ```\n */\nexport async function getMeService(userId: string | number | bigint): Promise<GetMeResult>\n{\n const db = getDatabase();\n\n if (!db)\n {\n throw new Error('[Auth] Database not initialized');\n }\n\n const userIdNum = typeof userId === 'string' ? Number(userId) : Number(userId);\n\n // 1. Get user with role information\n const [userWithRole] = await db\n .select({\n userId: users.id,\n email: users.email,\n phone: users.phone,\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, userIdNum))\n .limit(1);\n\n if (!userWithRole)\n {\n throw new Error('[Auth] User not found');\n }\n\n // 2. Get role permissions\n const rolePerms = await db\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 // 3. Build response\n return {\n userId: userWithRole.userId.toString(),\n email: userWithRole.email ?? undefined,\n phone: userWithRole.phone ?? undefined,\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 * @spfn/auth - RBAC Initialization Service\n *\n * Initialize roles, permissions, and their mappings\n */\n\nimport { getDatabase } from '@spfn/core/db';\nimport { logger } from '@spfn/core/logger';\nimport { roles, permissions, rolePermissions } from '@/server/entities';\nimport {\n BUILTIN_ROLES,\n BUILTIN_PERMISSIONS,\n BUILTIN_ROLE_PERMISSIONS,\n} from '@/server/rbac';\nimport type { AuthInitOptions, RoleConfig, PermissionConfig } from '@/server/rbac';\nimport { eq, and, inArray } from 'drizzle-orm';\nimport { configureAuth } from '@/lib/config';\n\nconst authLogger = logger.child('@spfn/auth');\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 const db = getDatabase();\n\n if (!db)\n {\n throw new Error('[Auth] Database not initialized. Call initDatabase() first.');\n }\n\n authLogger.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.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.info('✅ RBAC initialization complete');\n authLogger.info(`📊 Roles: ${allRoles.length}, Permissions: ${allPermissions.length}`);\n authLogger.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 db = getDatabase()!;\n\n const existing = await db\n .select()\n .from(roles)\n .where(eq(roles.name, config.name))\n .limit(1);\n\n if (existing.length === 0)\n {\n // Create new role\n await db.insert(roles).values({\n name: config.name,\n displayName: config.displayName,\n description: config.description,\n priority: config.priority ?? 10,\n isSystem: config.isSystem ?? false,\n isBuiltin: config.isBuiltin ?? false,\n });\n\n authLogger.info(` ✅ Created role: ${config.name}`);\n }\n else\n {\n // Update existing role (but preserve priority for built-in roles)\n const updateData: Record<string, any> = {\n displayName: config.displayName,\n description: config.description,\n };\n\n // Only update priority for non-builtin roles\n if (!existing[0].isBuiltin)\n {\n updateData.priority = config.priority ?? existing[0].priority;\n }\n\n await db\n .update(roles)\n .set(updateData)\n .where(eq(roles.id, existing[0].id));\n }\n}\n\n/**\n * Create or update a permission (idempotent)\n */\nasync function upsertPermission(config: PermissionConfig): Promise<void>\n{\n const db = getDatabase()!;\n\n const existing = await db\n .select()\n .from(permissions)\n .where(eq(permissions.name, config.name))\n .limit(1);\n\n if (existing.length === 0)\n {\n // Create new permission\n await db.insert(permissions).values({\n name: config.name,\n displayName: config.displayName,\n description: config.description,\n category: config.category,\n isSystem: config.isSystem ?? false,\n isBuiltin: config.isBuiltin ?? false,\n });\n\n authLogger.info(` ✅ Created permission: ${config.name}`);\n }\n else\n {\n // Update existing permission\n await db\n .update(permissions)\n .set({\n displayName: config.displayName,\n description: config.description,\n category: config.category,\n })\n .where(eq(permissions.id, existing[0].id));\n }\n}\n\n/**\n * Assign permissions to a role\n */\nasync function assignPermissionsToRole(roleName: string, permissionNames: string[]): Promise<void>\n{\n const db = getDatabase()!;\n\n // Get role\n const [role] = await db\n .select()\n .from(roles)\n .where(eq(roles.name, roleName))\n .limit(1);\n\n if (!role)\n {\n authLogger.warn(` ⚠️ Role not found: ${roleName}, skipping permission assignment`);\n return;\n }\n\n // Get permissions\n const perms = await db\n .select()\n .from(permissions)\n .where(inArray(permissions.name, permissionNames));\n\n if (perms.length === 0)\n {\n authLogger.warn(` ⚠️ No permissions found for role: ${roleName}`);\n return;\n }\n\n // Create mappings (skip duplicates)\n for (const perm of perms)\n {\n const existing = await db\n .select()\n .from(rolePermissions)\n .where(\n and(\n eq(rolePermissions.roleId, role.id),\n eq(rolePermissions.permissionId, perm.id)\n )\n )\n .limit(1);\n\n if (existing.length === 0)\n {\n await db.insert(rolePermissions).values({\n roleId: role.id,\n permissionId: perm.id,\n });\n }\n }\n}","/**\n * @spfn/auth - Permission Service\n *\n * Permission checking and validation logic\n */\n\nimport { getDatabase } from '@spfn/core/db';\nimport { users, roles, permissions, rolePermissions, userPermissions } from '@/server/entities';\nimport { eq, and } from 'drizzle-orm';\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 db = getDatabase();\n\n if (!db)\n {\n throw new Error('[Auth] Database not initialized');\n }\n\n const userIdNum = typeof userId === 'string' ? Number(userId) : Number(userId);\n\n // 1. Get user's role\n const [user] = await db\n .select({ roleId: users.roleId })\n .from(users)\n .where(eq(users.id, userIdNum))\n .limit(1);\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 rolePerms = await db\n .select({ name: permissions.name })\n .from(rolePermissions)\n .innerJoin(permissions, eq(rolePermissions.permissionId, permissions.id))\n .where(\n and(\n eq(rolePermissions.roleId, user.roleId),\n eq(permissions.isActive, true)\n )\n );\n\n for (const perm of rolePerms)\n {\n permSet.add(perm.name);\n }\n\n // 3. Apply user-specific permission overrides\n const userPerms = await db\n .select({\n name: permissions.name,\n granted: userPermissions.granted,\n expiresAt: userPermissions.expiresAt,\n })\n .from(userPermissions)\n .innerJoin(permissions, eq(userPermissions.permissionId, permissions.id))\n .where(eq(userPermissions.userId, userIdNum));\n\n const now = new Date();\n for (const userPerm of userPerms)\n {\n // Skip expired permissions\n if (userPerm.expiresAt && userPerm.expiresAt < now)\n {\n continue;\n }\n\n if (userPerm.granted)\n {\n // Grant permission (add even if not in role)\n permSet.add(userPerm.name);\n }\n else\n {\n // Revoke permission (remove even if in role)\n permSet.delete(userPerm.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 * 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 db = getDatabase();\n\n if (!db)\n {\n throw new Error('[Auth] Database not initialized');\n }\n\n const userIdNum = typeof userId === 'string' ? Number(userId) : Number(userId);\n\n const [user] = await db\n .select({ roleId: users.roleId })\n .from(users)\n .where(eq(users.id, userIdNum))\n .limit(1);\n\n if (!user || !user.roleId)\n {\n return false;\n }\n\n const [role] = await db\n .select({ name: roles.name })\n .from(roles)\n .where(eq(roles.id, user.roleId))\n .limit(1);\n\n return role?.name === 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// Me Service\nexport {\n getMeService,\n} from './me.service';\n\nexport type {\n GetMeResult,\n} from './me.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 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 * @spfn/auth - Invitation Service\n *\n * User invitation management for invite-only registration\n */\n\nimport { getDatabase } from '@spfn/core/db';\nimport { invitations, users, roles } from '@/server/entities';\nimport type { Invitation, InvitationStatus, InvitationWithDetails } from '@/server/entities/invitations';\nimport { eq, and, lt, desc, sql } from 'drizzle-orm';\nimport { hashPassword } from '@/server/helpers';\nimport crypto from 'crypto';\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 db = getDatabase();\n\n if (!db)\n {\n throw new Error('[Auth] Database not initialized');\n }\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 db\n .select()\n .from(users)\n .where(eq(users.email, email))\n .limit(1);\n\n if (existingUser.length > 0)\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 db\n .select()\n .from(invitations)\n .where(\n and(\n eq(invitations.email, email),\n eq(invitations.status, 'pending')\n )\n )\n .limit(1);\n\n if (existingInvitation.length > 0)\n {\n throw new Error('Pending invitation already exists for this email');\n }\n\n // Verify role exists\n const role = await db\n .select()\n .from(roles)\n .where(eq(roles.id, roleId))\n .limit(1);\n\n if (role.length === 0)\n {\n throw new Error(`Role with id ${roleId} not found`);\n }\n\n // Verify inviter exists\n const inviter = await db\n .select()\n .from(users)\n .where(eq(users.id, invitedBy))\n .limit(1);\n\n if (inviter.length === 0)\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 db\n .insert(invitations)\n .values({\n email,\n token,\n roleId,\n invitedBy,\n status: 'pending',\n expiresAt,\n metadata: metadata || null,\n })\n .returning();\n\n console.log(`[Auth] ✅ Created invitation: ${email} as ${role[0].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): Promise<Invitation | null>\n{\n const db = getDatabase();\n\n if (!db)\n {\n throw new Error('[Auth] Database not initialized');\n }\n\n const result = await db\n .select()\n .from(invitations)\n .where(eq(invitations.token, token))\n .limit(1);\n\n return result[0] || null;\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): Promise<InvitationWithDetails | null>\n{\n const db = getDatabase();\n\n if (!db)\n {\n throw new Error('[Auth] Database not initialized');\n }\n\n const result = await db\n .select({\n id: invitations.id,\n email: invitations.email,\n token: invitations.token,\n roleId: invitations.roleId,\n invitedBy: invitations.invitedBy,\n status: invitations.status,\n expiresAt: invitations.expiresAt,\n acceptedAt: invitations.acceptedAt,\n cancelledAt: invitations.cancelledAt,\n metadata: invitations.metadata,\n createdAt: invitations.createdAt,\n updatedAt: invitations.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(invitations)\n .innerJoin(roles, eq(invitations.roleId, roles.id))\n .innerJoin(users, eq(invitations.invitedBy, users.id))\n .where(eq(invitations.token, token))\n .limit(1);\n\n return result[0] || null;\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: 'ES256' | 'RS256';\n}): Promise<{\n userId: number;\n email: string;\n role: string;\n}>\n{\n const db = getDatabase();\n\n if (!db)\n {\n throw new Error('[Auth] Database not initialized');\n }\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 db\n .select()\n .from(roles)\n .where(eq(roles.id, invitation.roleId))\n .limit(1);\n\n if (role.length === 0)\n {\n throw new Error('Role not found');\n }\n\n // Hash password\n const passwordHash = await hashPassword(password);\n\n // Use transaction to create user and update invitation atomically\n const result = await db.transaction(async (tx) =>\n {\n // Create user\n const [newUser] = await tx\n .insert(users)\n .values({\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 .returning();\n\n // Create public key for asymmetric JWT\n const { userPublicKeys } = await import('@/server/entities');\n await tx\n .insert(userPublicKeys)\n .values({\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 tx\n .update(invitations)\n .set({\n status: 'accepted',\n acceptedAt: new Date(),\n updatedAt: new Date(),\n })\n .where(eq(invitations.id, invitation.id));\n\n return { newUser, role: role[0] };\n });\n\n console.log(`[Auth] ✅ Invitation accepted: ${invitation.email} as ${result.role.name}`);\n\n return {\n userId: result.newUser.id,\n email: result.newUser.email!,\n role: result.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}): Promise<{\n invitations: InvitationWithDetails[];\n total: number;\n page: number;\n limit: number;\n totalPages: number;\n}>\n{\n const db = getDatabase();\n\n if (!db)\n {\n throw new Error('[Auth] Database not initialized');\n }\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(invitations.status, status));\n }\n if (invitedBy)\n {\n conditions.push(eq(invitations.invitedBy, invitedBy));\n }\n\n const whereClause = conditions.length > 0 ? and(...conditions) : undefined;\n\n // Get total count\n const countResult = await db\n .select({ count: sql<number>`count(*)` })\n .from(invitations)\n .where(whereClause);\n\n const total = Number(countResult[0]?.count || 0);\n\n // Get paginated results with joins\n const results = await db\n .select({\n id: invitations.id,\n email: invitations.email,\n token: invitations.token,\n roleId: invitations.roleId,\n invitedBy: invitations.invitedBy,\n status: invitations.status,\n expiresAt: invitations.expiresAt,\n acceptedAt: invitations.acceptedAt,\n cancelledAt: invitations.cancelledAt,\n metadata: invitations.metadata,\n createdAt: invitations.createdAt,\n updatedAt: invitations.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(invitations)\n .innerJoin(roles, eq(invitations.roleId, roles.id))\n .innerJoin(users, eq(invitations.invitedBy, users.id))\n .where(whereClause)\n .orderBy(desc(invitations.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 * 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): Promise<void>\n{\n const db = getDatabase();\n\n if (!db)\n {\n throw new Error('[Auth] Database not initialized');\n }\n\n // Get invitation\n const invitation = await db\n .select()\n .from(invitations)\n .where(eq(invitations.id, id))\n .limit(1);\n\n if (invitation.length === 0)\n {\n throw new Error('Invitation not found');\n }\n\n if (invitation[0].status !== 'pending')\n {\n throw new Error(`Cannot cancel ${invitation[0].status} invitation`);\n }\n\n // Update status\n await db\n .update(invitations)\n .set({\n status: 'cancelled',\n cancelledAt: new Date(),\n updatedAt: new Date(),\n metadata: invitation[0].metadata\n ? { ...invitation[0].metadata, cancelReason: reason, cancelledBy }\n : { cancelReason: reason, cancelledBy },\n })\n .where(eq(invitations.id, id));\n\n console.log(`[Auth] ⚠️ Invitation cancelled: ${invitation[0].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): Promise<void>\n{\n const db = getDatabase();\n\n if (!db)\n {\n throw new Error('[Auth] Database not initialized');\n }\n\n await db\n .delete(invitations)\n .where(eq(invitations.id, 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(): Promise<number>\n{\n const db = getDatabase();\n\n if (!db)\n {\n throw new Error('[Auth] Database not initialized');\n }\n\n const now = new Date();\n\n // Find expired pending invitations\n const expiredInvitations = await db\n .select()\n .from(invitations)\n .where(\n and(\n eq(invitations.status, 'pending'),\n lt(invitations.expiresAt, now)\n )\n );\n\n if (expiredInvitations.length === 0)\n {\n return 0;\n }\n\n // Update to expired status\n await db\n .update(invitations)\n .set({\n status: 'expired',\n updatedAt: now,\n })\n .where(\n and(\n eq(invitations.status, 'pending'),\n lt(invitations.expiresAt, now)\n )\n );\n\n console.log(`[Auth] ⏰ Expired ${expiredInvitations.length} old invitations`);\n\n return expiredInvitations.length;\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): Promise<Invitation>\n{\n const db = getDatabase();\n\n if (!db)\n {\n throw new Error('[Auth] Database not initialized');\n }\n\n // Get invitation\n const invitation = await db\n .select()\n .from(invitations)\n .where(eq(invitations.id, id))\n .limit(1);\n\n if (invitation.length === 0)\n {\n throw new Error('Invitation not found');\n }\n\n // Can only resend pending or expired invitations\n if (!['pending', 'expired'].includes(invitation[0].status))\n {\n throw new Error(`Cannot resend ${invitation[0].status} invitation`);\n }\n\n // Update expiration and status\n const newExpiresAt = calculateExpiresAt(expiresInDays);\n\n const [updated] = await db\n .update(invitations)\n .set({\n status: 'pending',\n expiresAt: newExpiresAt,\n updatedAt: new Date(),\n })\n .where(eq(invitations.id, id))\n .returning();\n\n console.log(`[Auth] 📧 Invitation resent: ${invitation[0].email} (new expiry: ${newExpiresAt.toISOString()})`);\n\n return updated;\n}"],"mappings":"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","names":["text","index","id","timestamps","text","timestamp","boolean","index","id","timestamps","text","timestamp","id","timestamps","text","timestamp","boolean","index","id","foreignKey","text","timestamp","bigint","index","id","timestamps","text","boolean","index","id","timestamps","bigint","index","id","timestamps","bigint","boolean","text","timestamp","index","unique","id","timestamps","getDatabase","eq","and","value","IsObject","IsArray","IsUndefined","IsNumber","TypeSystemPolicy","IsObject","IsArray","IsNumber","IsUndefined","value","IsArray","IsAsyncIterator","IsBigInt","IsBoolean","IsDate","IsFunction","IsIterator","IsNull","IsNumber","IsObject","IsRegExp","IsString","IsSymbol","IsUndefined","IsUint8Array","IsArray","IsBoolean","IsBigInt","IsAsyncIterator","IsDate","IsFunction","IsIterator","IsNull","IsNumber","IsObject","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","IsSchema","IsReadonly","IsOptional","IsAny","IsKindOf","IsArgument","IsArray","IsAsyncIterator","IsBigInt","IsBoolean","IsComputed","IsConstructor","IsDate","IsFunction","IsInteger","IsIntersect","IsTransform","IsIterator","IsLiteral","IsLiteralValue","IsMappedKey","IsMappedResult","IsNever","IsNot","IsNull","IsNumber","IsObject","IsPromise","IsRecord","IsRef","IsRegExp","IsString","IsSymbol","IsTemplateLiteral","IsThis","IsTuple","IsUndefined","IsUnion","IsUint8Array","IsUnknown","IsUnsafe","IsVoid","IsKind","Array","index","index","range","pattern","Number","String","Number","String","Visit","schema","IsNumber","IsBigInt","IsString","IsBoolean","FromUnion","IsNumber","FromUnion","IsArray","IsObject","Object","Promise","FromProperties","FromMappedResult","FromMappedResult","FromRest","FromProperties","IsFunction","IsAsyncIterator","IsIterator","IsObject","Object","IsArray","Array","Promise","FromProperties","FromMappedResult","IsObject","RemoveOptionalFromType","RemoveOptionalFromRest","FromIntersect","FromRest","FromUnion","FromRest","FromIntersect","FromUnion","FromTuple","FromArray","FromProperties","IsArray","IsObject","FromComputed","FromRef","Number","FromProperties","FromMappedResult","Object","Date","Symbol","Uint8Array","FromArray","FromProperties","Uint8Array","Date","Object","Symbol","ExtendsResult","FromArray","Visit","index","FromIntersect","FromLiteral","Number","FromPromise","String","FromTemplateLiteral","FromTuple","FromUnion","FromProperties","FromMappedResult","FromMappedKey","FromProperties","FromMappedResult","FromProperties","FromMappedResult","Object","IsBoolean","IsNumber","IsRegExp","IsString","RecordKey","String","Number","RecordValue","FromConstructor","FromFunction","FromIntersect","FromUnion","FromTuple","FromArray","FromAsyncIterator","FromIterator","FromPromise","FromObject","FromProperties","Object","FromRecord","RecordKey","RecordValue","FromProperty","IsFunction","IsArray","IsAsyncIterator","IsIterator","IsObject","FromTemplateLiteral","FromRest","FromProperties","FromMappedResult","FromIntersect","FromUnion","FromProperty","FromProperties","FromObject","Object","result","IsObject","FromPropertyKey","FromPropertyKeys","FromMappedKey","FromProperties","FromMappedResult","FromIntersect","FromUnion","FromProperties","FromObject","Object","UnionFromPropertyKeys","result","IsObject","FromPropertyKey","FromPropertyKeys","FromMappedKey","FromComputed","FromRef","FromProperties","FromObject","Object","FromRest","IsObject","IsBigInt","IsBoolean","IsNull","IsNumber","IsString","IsSymbol","IsUndefined","FromProperties","FromMappedResult","FromComputed","FromRef","FromProperties","FromObject","Object","FromRest","IsObject","IsBigInt","IsBoolean","IsNull","IsNumber","IsString","IsSymbol","IsUndefined","FromProperties","FromMappedResult","FromType","FromComputed","FromArray","Array","FromAsyncIterator","FromConstructor","FromTypes","FromFunction","FromIntersect","FromIterator","FromObject","Object","FromRecord","RecordValue","FromTuple","FromUnion","IsArray","IsAsyncIterator","IsFunction","IsIterator","IsObject","IsFunction","RegExp","IsFunction","type_exports","Array","Date","Number","Object","Promise","RegExp","String","Symbol","Uint8Array","type_exports","UUID_PATTERN","EMAIL_PATTERN","BASE64_PATTERN","FINGERPRINT_PATTERN","jwt","findOne","create","ValidationError","create","getDatabase","eq","and","create","getDatabase","findOne","ValidationError","getRoleByName","create","updateOne","getDatabase","eq","and","getDatabase","eq","and","getDatabase","eq","and","getDatabase","eq","and","sql"]}