@dragonmastery/dragoncore-shared 0.0.2 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +2 -2
- package/dist/index.d.mts +1107 -521
- package/dist/index.mjs +349 -64
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["RecordTypeEnum","RecordTypeEnum","RecordTypeEnum"],"sources":["../src/validation/app_settings/notification_emails_zod.ts","../src/validation/attachment/attachment_filters_zod.ts","../src/validation/attachment/attachment_folder_input_zod.ts","../src/validation/attachment/attachment_folder_read_zod.ts","../src/validation/attachment/attachment_input_zod.ts","../src/validation/attachment/attachment_read_zod.ts","../src/validation/attachment/attachment_page_zod.ts","../src/validation/login_zod.ts","../src/validation/change_password_zod.ts","../src/validation/common/filter_operators_zod.ts","../src/validation/common/pagination_zod.ts","../src/validation/common/regex_patterns.ts","../src/validation/user/user_enums_zod.ts","../src/validation/user/user_create_zod.ts","../src/validation/credit_transaction/credit_balance_schema.ts","../src/validation/credit_transaction/credit_transaction_read_zod.ts","../src/validation/credit_transaction/credit_transaction_filters_zod.ts","../src/validation/forgot_password_zod.ts","../src/types/record_types.ts","../src/validation/note/note_read_zod.ts","../src/validation/note/note_create_zod.ts","../src/validation/note/note_update_zod.ts","../src/validation/note/note_filters_zod.ts","../src/validation/record_version_zod.ts","../src/validation/reset_password_zod.ts","../src/validation/signup_zod.ts","../src/validation/support_ticket/support_ticket_shared/support_ticket_enums_zod.ts","../src/validation/support_ticket/support_ticket_customer/customer_input_zod.ts","../src/validation/support_ticket/support_ticket_customer/customer_read_zod.ts","../src/validation/support_ticket/support_ticket_customer/customer_support_ticket_filters_zod.ts","../src/validation/support_ticket/support_ticket_staff/staff_read_zod.ts","../src/validation/support_ticket/support_ticket_staff/staff_support_ticket_filters_zod.ts","../src/validation/support_ticket/support_ticket_staff/staff_update_zod.ts","../src/validation/support_ticket/support_ticket_staff/staff_workflow_zod.ts","../src/validation/support_ticket/support_ticket_enrichment.ts","../src/validation/team/team_enums_zod.ts","../src/validation/team/team_filters_zod.ts","../src/validation/team/team_input_zod.ts","../src/validation/team/team_read_zod.ts","../src/validation/team/team_page_zod.ts","../src/validation/team/team_user_teams_zod.ts","../src/validation/team_member/team_member_enums_zod.ts","../src/validation/team_member/team_member_filters_zod.ts","../src/validation/team_member/team_member_input_zod.ts","../src/validation/team_member/team_member_read_zod.ts","../src/validation/team_member/team_member_user_team_members_zod.ts","../src/validation/user/user_read_zod.ts","../src/validation/user/user_update_zod.ts","../src/validation/user_profile_zod.ts","../src/validation/user_session_zod.ts","../src/utils/enum_labels.ts","../src/utils/file.ts","../src/utils/money.ts"],"sourcesContent":["import { z } from 'zod';\n\n/**\n * Schema for individual email entry\n */\nexport const EmailEntrySchema = z.object({\n id: z\n .string()\n .default(() => `email-${Math.random().toString(36).substr(2, 9)}`)\n .optional(),\n email: z.string().email('Must be a valid email address'),\n});\n\nexport type EmailEntry = z.infer<typeof EmailEntrySchema>;\n\n/**\n * Schema for updating support ticket notification emails\n * Uses an array of email objects for proper validation and UX\n */\nexport const UpdateNotificationEmailsSchema = z.object({\n emails: z.array(EmailEntrySchema).max(10, 'Maximum 10 email addresses allowed'),\n});\n\n/**\n * Schema for reading support ticket notification emails\n */\nexport const ReadNotificationEmailsSchema = z.object({\n emails: z.array(\n z.object({\n email: z.string(),\n }),\n ),\n});\n\nexport type UpdateNotificationEmails = z.infer<typeof UpdateNotificationEmailsSchema>;\nexport type ReadNotificationEmails = z.infer<typeof ReadNotificationEmailsSchema>;\n\n/**\n * Helper function to create a new email entry\n */\nexport function createNewEmailEntry(): EmailEntry {\n return {\n id: `email-${Math.random().toString(36).substr(2, 9)}`,\n email: '',\n };\n}\n","import { z } from 'zod';\n\nexport const AttachmentFiltersSchema = z.object({\n record_id: z.string(),\n record_type: z.string(),\n filters: z\n .object({\n start_date: z.string().optional().nullable(),\n end_date: z.string().optional().nullable(),\n limit: z.number().optional().nullable(),\n cursor: z.string().optional().nullable(),\n folder_id: z.string().optional().nullable(), // null means root level\n include_folders: z.boolean().optional().default(true), // Whether to include folders in results\n })\n .optional()\n .nullable(),\n});\n\nexport type AttachmentFiltersDto = z.infer<typeof AttachmentFiltersSchema>;\n","import { z } from 'zod';\n\nconst AttachmentFolderBaseSchema = z.object({\n record_id: z.string(),\n record_type: z.string(),\n sanitized_name: z.string(),\n original_name: z.string(),\n description: z.string().optional().nullable(),\n metadata: z.string().optional().nullable(),\n parent_folder_id: z.string().optional().nullable(),\n file_count: z.number().optional(), // Cached count of files in folder\n});\n\nexport const AttachmentFolderCreateSchema = AttachmentFolderBaseSchema;\nexport type AttachmentFolderCreateDto = z.infer<typeof AttachmentFolderCreateSchema>;\n\nexport const AttachmentFolderUpdateSchema = AttachmentFolderBaseSchema.extend({\n id: z.string(),\n record_id: z.string().optional(),\n record_type: z.string().optional(),\n sanitized_name: z.string().optional(),\n original_name: z.string().optional(),\n parent_folder_id: z.string().optional().nullable(),\n});\nexport type AttachmentFolderUpdateDto = z.infer<typeof AttachmentFolderUpdateSchema>;\n","import { z } from 'zod';\nimport { AttachmentFolderCreateSchema } from './attachment_folder_input_zod';\n\nexport const AttachmentFolderReadSchema = AttachmentFolderCreateSchema.extend({\n id: z.string(),\n file_count: z.number().optional(), // Cached count of files in folder\n created_at: z.string(),\n created_by: z.string(),\n updated_at: z.string().optional().nullable(),\n updated_by: z.string().optional().nullable(),\n archived_at: z.string().optional().nullable(),\n archived_by: z.string().optional().nullable(),\n deleted_at: z.string().optional().nullable(),\n deleted_by: z.string().optional().nullable(),\n});\n\nexport type AttachmentFolderReadDto = z.infer<typeof AttachmentFolderReadSchema>;\n","import { z } from 'zod';\n\nconst AttachmentBaseSchema = z.object({\n record_id: z.string(),\n record_type: z.string(),\n sanitized_name: z.string(),\n original_name: z.string(),\n content_type: z.string(),\n file_size: z.string(),\n description: z.string().optional().nullable(),\n metadata: z.string().optional().nullable(),\n folder_id: z.string().optional().nullable(), // References attachment_folder.id\n});\n\nexport const AttachmentCreateSchema = AttachmentBaseSchema;\nexport type AttachmentCreateDto = z.infer<typeof AttachmentCreateSchema>;\n\nexport const AttachmentUpdateSchema = AttachmentBaseSchema.extend({\n id: z.string(),\n record_id: z.string().optional(),\n record_type: z.string().optional(),\n sanitized_name: z.string().optional(),\n original_name: z.string().optional(),\n content_type: z.string().optional(),\n file_size: z.string().optional(),\n folder_id: z.string().optional().nullable(),\n});\nexport type AttachmentUpdateDto = z.infer<typeof AttachmentUpdateSchema>;\n","import { z } from 'zod';\nimport { AttachmentCreateSchema } from './attachment_input_zod';\n\nexport const AttachmentReadSchema = AttachmentCreateSchema.extend({\n id: z.string(),\n created_at: z.string(),\n created_by: z.string(),\n updated_at: z.string().optional().nullable(),\n updated_by: z.string().optional().nullable(),\n archived_at: z.string().optional().nullable(),\n archived_by: z.string().optional().nullable(),\n deleted_at: z.string().optional().nullable(),\n deleted_by: z.string().optional().nullable(),\n});\n\nexport type AttachmentReadDto = z.infer<typeof AttachmentReadSchema>;\n","import { z } from 'zod';\nimport { AttachmentFolderReadSchema } from './attachment_folder_read_zod';\nimport { AttachmentReadSchema } from './attachment_read_zod';\n\n// Custom page schema with separate arrays for files and folders\n// This avoids union type issues with gqloom while still allowing combined pagination\nexport const AttachmentPageSchema = z.object({\n files: z.array(AttachmentReadSchema),\n folders: z.array(AttachmentFolderReadSchema),\n pageInfo: z.object({\n hasNextPage: z.boolean(),\n endCursor: z.string().optional().nullable(),\n }),\n});\n\nexport type AttachmentPageDto = z.infer<typeof AttachmentPageSchema>;\n","import { z } from 'zod';\n\n// Function to check if password is in common password list\n// This would need to be implemented with a real list in production\nexport const isCommonPassword = (password: string): boolean => {\n const commonPasswords = ['password', '12345678', 'qwerty123', 'admin1234'];\n return commonPasswords.includes(password.toLowerCase());\n};\n\nexport const passwordSchema = z\n .string()\n // Minimum length of 8 characters (NIST requirement)\n .min(8, { message: 'Password must be at least 8 characters long' })\n // Maximum length of at least 64 characters (NIST recommendation)\n .max(64, { message: 'Password must not exceed 64 characters' })\n // No leading or trailing whitespace (Cloudflare requirement)\n .refine((password) => !/^\\s|\\s$/.test(password), {\n message: 'Password must not have leading or trailing whitespace',\n })\n // Not in common password list (NIST recommendation)\n .refine((password) => !isCommonPassword(password), {\n message: 'Password is too common and easily guessed',\n });\n\nexport const loginSchema = z.object({\n email: z\n .string()\n .trim()\n .toLowerCase()\n .min(3, 'Please enter your email.')\n .email('The email address is badly formatted.'),\n password: passwordSchema,\n});\n\nexport type LoginInputDto = z.infer<typeof loginSchema>;\n\n// Re-export LoginResponse from user_session_zod for convenience\nexport type { LoginResponse } from './user_session_zod';\n","import { z } from 'zod';\nimport { passwordSchema } from './login_zod';\n\nexport const changePasswordSchema = z.object({\n passwords: z\n .object({\n current_password: z.string().min(8).max(64),\n new_password: passwordSchema,\n new_password_confirm: z.string(),\n })\n .refine((data) => data.new_password === data.new_password_confirm, {\n message: 'Passwords do not match',\n path: ['new_password_confirm'],\n })\n .refine((data) => data.new_password !== data.current_password, {\n message: 'New password must be different from current password',\n path: ['new_password'],\n }),\n});\n\nexport type ChangePasswordInputDto = z.infer<typeof changePasswordSchema>;\n","import { z } from 'zod';\n\n/**\n * Individual operator constants - use these instead of string literals\n * All operators use shorthand names for URL compatibility\n */\nexport const OPERATORS = {\n // Equality\n EQUALS: 'eq',\n NOT_EQUALS: 'ne',\n\n // Comparison\n GREATER_THAN: 'gt',\n GREATER_THAN_OR_EQUAL: 'gte',\n LESS_THAN: 'lt',\n LESS_THAN_OR_EQUAL: 'lte',\n BETWEEN: 'between',\n\n // String matching\n CONTAINS: 'contains',\n STARTS_WITH: 'sw',\n ENDS_WITH: 'ew',\n\n // Array operations\n IS_ONE_OF: 'in',\n IS_NOT_ONE_OF: 'notIn',\n\n // Null checks\n IS_EMPTY: 'isEmpty',\n IS_NOT_EMPTY: 'isNotEmpty',\n} as const;\n\n/**\n * String operators - shorthand names for URL compatibility\n * Only operators that make sense for string filtering\n */\nexport const StringOperatorSchema = z.enum([\n OPERATORS.EQUALS,\n OPERATORS.NOT_EQUALS,\n OPERATORS.CONTAINS,\n OPERATORS.STARTS_WITH,\n OPERATORS.ENDS_WITH,\n OPERATORS.IS_ONE_OF,\n OPERATORS.IS_NOT_ONE_OF,\n]);\nexport type StringOperator = z.infer<typeof StringOperatorSchema>;\n\n/**\n * Date operators - shorthand names for URL compatibility\n * Only operators that make sense for date filtering\n */\nexport const DateOperatorSchema = z.enum([\n OPERATORS.EQUALS,\n OPERATORS.NOT_EQUALS,\n OPERATORS.GREATER_THAN,\n OPERATORS.GREATER_THAN_OR_EQUAL,\n OPERATORS.LESS_THAN,\n OPERATORS.LESS_THAN_OR_EQUAL,\n OPERATORS.BETWEEN,\n OPERATORS.IS_EMPTY,\n OPERATORS.IS_NOT_EMPTY,\n]);\nexport type DateOperator = z.infer<typeof DateOperatorSchema>;\n\n/**\n * Number operators - shorthand names for URL compatibility\n * Only operators that make sense for number filtering\n */\nexport const NumberOperatorSchema = z.enum([\n OPERATORS.EQUALS,\n OPERATORS.NOT_EQUALS,\n OPERATORS.GREATER_THAN,\n OPERATORS.GREATER_THAN_OR_EQUAL,\n OPERATORS.LESS_THAN,\n OPERATORS.LESS_THAN_OR_EQUAL,\n OPERATORS.BETWEEN,\n OPERATORS.IS_ONE_OF,\n OPERATORS.IS_NOT_ONE_OF,\n]);\nexport type NumberOperator = z.infer<typeof NumberOperatorSchema>;\n\n/**\n * Shared operator enum for equality comparisons (used by boolean and enum filters)\n */\nexport const EqualityOperatorSchema = z.enum([OPERATORS.EQUALS, OPERATORS.NOT_EQUALS]);\nexport type EqualityOperator = z.infer<typeof EqualityOperatorSchema>;\n\n/**\n * Shared operator enum for equality and array operations (used by enum filters)\n */\nexport const EqualityArrayOperatorSchema = z.enum([\n OPERATORS.EQUALS,\n OPERATORS.NOT_EQUALS,\n OPERATORS.IS_ONE_OF,\n OPERATORS.IS_NOT_ONE_OF,\n]);\nexport type EqualityArrayOperator = z.infer<typeof EqualityArrayOperatorSchema>;\n\n/**\n * Union type of all valid filter operators\n * Backend uses this instead of a full FilterOperatorSchema to enforce restricted operators\n */\nexport type AnyFilterOperator =\n | StringOperator\n | DateOperator\n | NumberOperator\n | EqualityOperator\n | EqualityArrayOperator;\n\n/**\n * Data type enum for filters (spec-compliant)\n */\nexport const DataTypeSchema = z.enum([\n 'string',\n 'number',\n 'date',\n 'boolean',\n 'enum',\n 'money',\n 'percentage',\n]);\nexport type DataType = z.infer<typeof DataTypeSchema>;\n\n/**\n * Base filter schema - spec-compliant structure\n * Field name is the object key, not part of the filter object\n * All filters must include: operator\n * Optional: value, values, caseSensitive\n * Type is inferred from registry using the field name (object key)\n */\nexport const BaseFilterSchema = z.object({\n operator: z.string(),\n value: z.any().optional(),\n values: z.array(z.any()).optional(),\n caseSensitive: z.boolean().optional(),\n});\n\nexport type BaseFilter = z.infer<typeof BaseFilterSchema>;\n\n/**\n * String filter input - Spec-compliant structure\n * Restricted operators: only operators that make sense for string filtering\n * Field name is the object key, type is inferred from registry\n *\n * Examples:\n * - Equality: { operator: \"eq\", value: \"search\" }\n * - Contains: { operator: \"contains\", value: \"search\", caseSensitive: false }\n * - Starts with: { operator: \"sw\", value: \"prefix\" }\n * - In array: { operator: \"in\", values: [\"option1\", \"option2\"] }\n */\nexport const StringFilterSchema = BaseFilterSchema.extend({\n operator: StringOperatorSchema,\n value: z.string().optional(),\n values: z.array(z.string()).optional(),\n caseSensitive: z.boolean().optional(),\n}).refine(\n (data) => {\n // Array operators require values array\n if (data.operator === OPERATORS.IS_ONE_OF || data.operator === OPERATORS.IS_NOT_ONE_OF) {\n return data.values !== undefined && data.values.length > 0;\n }\n // Other operators require value\n return data.value !== undefined;\n },\n {\n message:\n 'value is required for non-array operators, values array is required for in/notIn',\n },\n);\nexport type StringFilter = z.infer<typeof StringFilterSchema>;\n\n/**\n * Boolean filter input - Spec-compliant structure\n * Field name is the object key, type is inferred from registry\n *\n * Examples:\n * - Equality: { operator: \"eq\", value: true }\n * - Not equals: { operator: \"ne\", value: false }\n */\nexport const BooleanFilterSchema = BaseFilterSchema.extend({\n operator: EqualityOperatorSchema,\n value: z.boolean(),\n});\nexport type BooleanFilter = z.infer<typeof BooleanFilterSchema>;\n\n/**\n * Number filter input - Spec-compliant structure\n * Restricted operators: only operators that make sense for number filtering\n * Useful for ranges (credits > 100, priority <= 3, etc.)\n *\n * Examples:\n * - Equality: { field: \"age\", operator: \"eq\", value: 100, type: \"number\" }\n * - Greater than: { field: \"price\", operator: \"gt\", value: 100, type: \"number\" }\n * - Range: { field: \"score\", operator: \"gte\", value: 50, type: \"number\" }\n * - In array: { field: \"priority\", operator: \"in\", values: [1, 2, 3], type: \"number\" }\n */\nexport const NumberFilterSchema = BaseFilterSchema.extend({\n operator: NumberOperatorSchema,\n value: z.number().optional(),\n values: z.array(z.number()).optional(),\n})\n .refine(\n (data) => {\n // between operator requires exactly 2 values\n if (data.operator === OPERATORS.BETWEEN) {\n return data.values !== undefined && data.values.length === 2;\n }\n // Array operators require values array\n if (data.operator === OPERATORS.IS_ONE_OF || data.operator === OPERATORS.IS_NOT_ONE_OF) {\n return data.values !== undefined && data.values.length > 0;\n }\n // Other operators require value\n return data.value !== undefined;\n },\n {\n message:\n 'value is required for non-array operators, values array is required for in/notIn, exactly 2 values required for between',\n },\n )\n .refine(\n (data) => {\n // For between operator, values[0] must be <= values[1]\n if (data.operator === OPERATORS.BETWEEN && data.values && data.values.length === 2) {\n const [min, max] = data.values;\n return min !== undefined && max !== undefined && min <= max;\n }\n return true;\n },\n {\n message: 'For between operator, values[0] must be less than or equal to values[1]',\n path: ['values'],\n },\n );\nexport type NumberFilter = z.infer<typeof NumberFilterSchema>;\n\n/**\n * Date/DateTime string filter - Spec-compliant structure\n * Restricted operators: only operators that make sense for date filtering\n * Dates should be in ISO 8601 format: YYYY-MM-DD or full datetime\n *\n * Examples:\n * - Exact match: { field: \"createdAt\", operator: \"eq\", value: \"2024-01-01\", type: \"date\" }\n * - After date: { field: \"expiresAt\", operator: \"gte\", value: \"2024-01-01\", type: \"date\" }\n * - Before date: { field: \"deadline\", operator: \"lt\", value: \"2024-12-31\", type: \"date\" }\n * - Is empty: { field: \"deletedAt\", operator: \"isEmpty\", type: \"date\" } // No value property\n * - Is not empty: { field: \"publishedAt\", operator: \"isNotEmpty\", type: \"date\" } // No value property\n */\nexport const DateFilterSchema = z.union([\n // Null-check operators - no value property allowed\n BaseFilterSchema.extend({\n operator: z.enum([OPERATORS.IS_EMPTY, OPERATORS.IS_NOT_EMPTY]),\n }).refine((data) => data.value === undefined && data.values === undefined, {\n message: 'isEmpty and isNotEmpty operators must not have value or values properties',\n }),\n // between operator - exactly 2 values required\n BaseFilterSchema.extend({\n operator: z.literal(OPERATORS.BETWEEN),\n values: z.array(z.string()).length(2),\n })\n .refine((data) => data.values !== undefined && data.values.length === 2, {\n message: 'between operator requires exactly 2 values',\n })\n .refine(\n (data) => {\n if (data.values && data.values.length === 2) {\n const [startDate, endDate] = data.values;\n if (startDate !== undefined && endDate !== undefined) {\n // Parse dates and compare chronologically\n const date1 = new Date(startDate);\n const date2 = new Date(endDate);\n return date1 <= date2;\n }\n }\n return true;\n },\n {\n message:\n 'For between operator, values[0] must represent an earlier or equal date/time compared to values[1]',\n path: ['values'],\n },\n ),\n // Other operators - value required\n BaseFilterSchema.extend({\n operator: z.enum([\n OPERATORS.EQUALS,\n OPERATORS.NOT_EQUALS,\n OPERATORS.GREATER_THAN,\n OPERATORS.GREATER_THAN_OR_EQUAL,\n OPERATORS.LESS_THAN,\n OPERATORS.LESS_THAN_OR_EQUAL,\n ]),\n value: z.string(),\n }).refine((data) => data.value !== undefined, {\n message: 'value is required for non-null operators',\n }),\n]);\nexport type DateFilter = z.infer<typeof DateFilterSchema>;\n\n/**\n * Enum filter input - Spec-compliant structure\n * Supports both single value (eq/ne) and multiple values (in/notIn)\n * Field name is the object key, type is inferred from registry\n *\n * Usage: createEnumFilter(MyEnumSchema)\n *\n * Examples:\n * - Equality: { operator: \"eq\", value: \"OPTION_A\" }\n * - Not equals: { operator: \"ne\", value: \"OPTION_B\" }\n * - In array: { operator: \"in\", values: [\"OPTION_A\", \"OPTION_B\"] }\n * - Not in array: { operator: \"notIn\", values: [\"OPTION_C\", \"OPTION_D\"] }\n */\nexport function createEnumFilter<T extends z.ZodEnum<any>>(enumSchema: T) {\n return BaseFilterSchema.extend({\n operator: EqualityArrayOperatorSchema,\n value: enumSchema.optional(),\n values: z.array(enumSchema).optional(),\n }).refine(\n (data) => {\n // Array operators require values array\n if (data.operator === OPERATORS.IS_ONE_OF || data.operator === OPERATORS.IS_NOT_ONE_OF) {\n return data.values !== undefined && data.values.length > 0;\n }\n // Other operators require value\n return data.value !== undefined;\n },\n {\n message:\n 'value is required for non-array operators, values array is required for in/notIn',\n },\n );\n}\n\n/**\n * Filter configuration - Spec-compliant structure\n * Uses a flat object mapping field names to filter value objects\n * Field name is the object key, type is inferred from registry\n * All filters are combined with implicit AND logic\n * OR logic within a single field is supported through isOneOf/isNotOneOf operators\n *\n * Examples:\n * {\n * \"status\": { operator: \"eq\", value: \"active\" },\n * \"age\": { operator: \"gt\", value: 18 }\n * }\n */\nexport const FilterConfigSchema = z.record(z.string(), BaseFilterSchema);\n\nexport type FilterConfig = z.infer<typeof FilterConfigSchema>;\n","import { z } from 'zod';\n\n/**\n * Sort direction enum\n */\nexport const SortDirectionSchema = z.enum(['asc', 'desc']);\n\nexport const PaginationFiltersSchema = z.object({\n // Forward pagination\n first: z.number().min(1).max(100).optional(),\n after: z.string().optional(),\n\n // Sorting\n sortBy: z.string().optional(),\n sortDirection: SortDirectionSchema.optional(),\n\n // Pagination state token\n paginationToken: z.string().optional(),\n});\n\nexport const PageInfoSchema = z.object({\n hasNextPage: z.boolean(),\n hasPreviousPage: z.boolean(),\n prevPageCursor: z.string().optional(),\n nextPageCursor: z.string().optional(),\n currentPageIndex: z.number().optional(),\n paginationToken: z.string().optional(),\n});\n\nexport function createPaginatedSchema<T extends z.ZodType>(itemSchema: T) {\n return z.object({\n items: z.array(itemSchema),\n pageInfo: PageInfoSchema,\n });\n}\n\nexport type PagedResult<T> = {\n items: T[];\n pageInfo: PageInfoDto;\n};\n\nexport type PaginationFiltersDto = z.infer<typeof PaginationFiltersSchema>;\nexport type PageInfoDto = z.infer<typeof PageInfoSchema>;\n","/**\n * Common regex patterns for validation\n */\n\n/**\n * Decimal amount regex - allows up to 2 decimal places\n * Matches: \"100\", \"100.00\", \"100.5\", \"0.99\", etc.\n * Also allows empty string for optional fields\n */\nexport const DECIMAL_AMOUNT_REGEX = /^((\\d*\\.?\\d{1,2}|\\d+)|)$/;\n\n/**\n * Decimal amount regex error message\n */\nexport const DECIMAL_AMOUNT_ERROR_MESSAGE =\n 'Must be a valid dollar amount with up to 2 decimal places or empty';\n\n/**\n * Decimal amount regex for 2 decimals or empty\n * Matches: \"100.00\", \"0.99\", \"1234.56\", etc. or empty string\n * Requires exactly 2 decimal places when not empty\n */\nexport const DECIMAL_AMOUNT_2_DECIMALS_OR_EMPTY_REGEX = /^((\\d*\\.?\\d{1,2}|\\d+)|)$/;\n\n/**\n * Decimal amount regex for 2 decimals or empty error message\n */\nexport const DECIMAL_AMOUNT_2_DECIMALS_OR_EMPTY_ERROR_MESSAGE =\n 'Must be a valid dollar amount with up to 2 decimal places or empty';\n","import { z } from 'zod';\n\nexport const USER_TYPES = ['consumer', 'lead', 'staff', 'super_admin'] as const;\n\nexport const UserTypeEnum = z.enum([...USER_TYPES]);\nexport type UserTypeValues = (typeof USER_TYPES)[number];\n","import { z } from 'zod';\nimport { UserTypeEnum } from './user_enums_zod';\n\nexport const createUserSchema = z.object({\n email: z\n .string()\n .trim()\n .toLowerCase()\n .min(3, 'Please enter your email.')\n .email('The email address is badly formatted.'),\n user_type: UserTypeEnum,\n password: z.string().optional().nullable(),\n});\n\nexport type CreateUserDto = z.infer<typeof createUserSchema>;\n\nexport const createUserSchemaOutput = z.object({\n id: z.string(),\n email: z.string(),\n});\n\nexport type CreateUserDtoOutput = z.infer<typeof createUserSchemaOutput>;\n","import { z } from 'zod';\nimport { DECIMAL_AMOUNT_ERROR_MESSAGE, DECIMAL_AMOUNT_REGEX } from '../common/regex_patterns';\n\nexport const CreditBalanceSchema = z.object({\n monthly: z.string(),\n rollover: z.string(),\n});\n\nexport const AddCreditsSchema = z.object({\n amount: z.string().regex(DECIMAL_AMOUNT_REGEX, DECIMAL_AMOUNT_ERROR_MESSAGE),\n reason: z.string().optional(),\n});\n\nexport const SetMonthlyAllocationSchema = z.object({\n amount: z.string().regex(DECIMAL_AMOUNT_REGEX, DECIMAL_AMOUNT_ERROR_MESSAGE),\n});\n\nexport const ResetMonthlyBalanceSchema = z.object({}).optional();\n\nexport type CreditBalanceDto = z.infer<typeof CreditBalanceSchema>;\nexport type AddCreditsDto = z.infer<typeof AddCreditsSchema>;\nexport type SetMonthlyAllocationDto = z.infer<typeof SetMonthlyAllocationSchema>;\nexport type ResetMonthlyBalanceDto = z.infer<typeof ResetMonthlyBalanceSchema>;\n","import { z } from 'zod';\nimport { createPaginatedSchema } from '../common/pagination_zod';\n\n/**\n * Transaction types for credit operations\n */\nexport const CreditTransactionTypeEnum = z.enum([\n 'DEDUCTION',\n 'REFUND',\n 'PURCHASE_ONETIME', // One-time purchase\n 'PURCHASE_RECURRING', // Recurring purchase\n 'ADJUSTMENT',\n]);\nexport type CreditTransactionType = z.infer<typeof CreditTransactionTypeEnum>;\n\n/**\n * Schema for a credit transaction record\n */\nexport const CreditTransactionReadSchema = z.object({\n id: z.string(),\n support_ticket_id: z.string().nullable().optional(),\n amount: z.string(), // Stored as text in database\n type: CreditTransactionTypeEnum,\n description: z.string().nullable().optional(), // Can be null in database\n balance_after: z.string(), // Stored as text in database\n created_at: z.string(),\n created_by: z.string(),\n});\nexport type CreditTransactionReadDto = z.infer<typeof CreditTransactionReadSchema>;\n\n/**\n * Paginated schema for credit transactions\n */\nexport const CreditTransactionPageSchema = createPaginatedSchema(CreditTransactionReadSchema);\nexport type CreditTransactionPageDto = z.infer<typeof CreditTransactionPageSchema>;\n","import { z } from 'zod';\nimport {\n createEnumFilter,\n DateFilterSchema,\n NumberFilterSchema,\n StringFilterSchema,\n} from '../common/filter_operators_zod';\nimport { PaginationFiltersSchema } from '../common/pagination_zod';\nimport { CreditTransactionTypeEnum } from './credit_transaction_read_zod';\n\n/**\n * Filters for querying credit transactions\n * Supports operator-based filtering for advanced queries\n *\n * All filters support operators for advanced filtering:\n * - Enums: eq, ne, in, notIn\n * - Strings: eq, ne, contains, startsWith, endsWith\n * - Numbers: eq, ne, gt, gte, lt, lte, between\n * - Dates: eq, ne, gt, gte, lt, lte, between\n *\n * Examples:\n * - { type: { operator: \"eq\", value: \"DEDUCTION\" } }\n * - { amount: { operator: \"gte\", value: 100 } }\n * - { created_at: { operator: \"gte\", value: \"2024-01-01\" } }\n */\nexport const CreditTransactionFiltersSchema = PaginationFiltersSchema.extend({\n type: createEnumFilter(CreditTransactionTypeEnum).optional(),\n support_ticket_id: StringFilterSchema.optional(),\n amount: NumberFilterSchema.optional(),\n balance_after: NumberFilterSchema.optional(),\n created_at: DateFilterSchema.optional(),\n created_by: StringFilterSchema.optional(),\n\n // Search object\n search: z\n .object({\n query: z.string(),\n searchableFields: z.array(z.string()),\n })\n .optional(),\n});\n\nexport type CreditTransactionFiltersDto = z.infer<typeof CreditTransactionFiltersSchema>;\n","import { z } from 'zod';\n\nexport const forgot_password_zod = z.object({\n email: z.string().email().trim().toLowerCase(),\n});\n\nexport type ForgotPasswordDto = z.infer<typeof forgot_password_zod>;\n","/**\n * Record type constants and types for the application\n * These define all the different types of records that can exist in the system\n */\n\n// Array of record type values for Zod enum creation\nexport const RecordTypeValues = [\n 'attachment_folder',\n 'attachment',\n 'user',\n 'user_session',\n 'user_profile',\n 'refresh_token',\n 'refresh_token_family',\n 'user_subscription',\n 'password_reset',\n 'record_version',\n 'support_ticket',\n 'credit_transaction',\n 'team_member',\n 'client_contact',\n 'client_location',\n 'client_profile',\n 'business_profile',\n 'tracker',\n 'team',\n 'quote',\n 'note',\n 'followup',\n] as const;\n\n// Object form for backward compatibility and easier access\nexport const RecordConst = {\n ATTACHMENT: 'attachment',\n ATTACHMENT_FOLDER: 'attachment_folder',\n USER: 'user',\n USER_SESSION: 'user_session',\n USER_PROFILE: 'user_profile',\n REFRESH_TOKEN: 'refresh_token',\n REFRESH_TOKEN_FAMILY: 'refresh_token_family',\n USER_SUBSCRIPTION: 'user_subscription',\n PASSWORD_RESET: 'password_reset',\n RECORD_VERSION: 'record_version',\n SUPPORT_TICKET: 'support_ticket',\n CREDIT_TRANSACTION: 'credit_transaction',\n TEAM_MEMBER: 'team_member',\n CLIENT_CONTACT: 'client_contact',\n CLIENT_LOCATION: 'client_location',\n CLIENT_PROFILE: 'client_profile',\n BUSINESS_PROFILE: 'business_profile',\n TRACKER: 'tracker',\n TEAM: 'team',\n NOTE: 'note',\n FOLLOWUP: 'followup',\n} as const;\n\nexport type RecordType = (typeof RecordTypeValues)[number];\n","import { z } from 'zod';\nimport { RecordTypeValues } from '../../types/record_types';\n\n// Create enum from RecordTypeValues array - fully type safe\nconst RecordTypeEnum = z.enum(RecordTypeValues);\n\nexport const NoteReadSchema = z.object({\n id: z.string(),\n record_id: z.string(),\n record_type: RecordTypeEnum,\n tag: z.string().optional().nullable(),\n title: z.string().optional().nullable(),\n body: z.string().optional().nullable(),\n original_id: z.number().optional().nullable(),\n is_internal: z.boolean(),\n created_by: z.string(),\n created_at: z.string(),\n updated_by: z.string().optional().nullable(),\n updated_at: z.string().optional().nullable(),\n archived_by: z.string().optional().nullable(),\n archived_at: z.string().optional().nullable(),\n deleted_by: z.string().optional().nullable(),\n deleted_at: z.string().optional().nullable(),\n});\n\nexport type NoteReadDto = z.infer<typeof NoteReadSchema>;\n","import { z } from 'zod';\nimport { RecordTypeValues } from '../../types/record_types';\n\n// Create enum from RecordTypeValues array - fully type safe\nconst RecordTypeEnum = z.enum(RecordTypeValues);\n\nexport const NoteCreateSchema = z.object({\n record_id: z.string(),\n record_type: RecordTypeEnum,\n tag: z.string().optional().nullable(),\n title: z.string().optional().nullable(),\n body: z.string().optional().nullable(),\n original_id: z.number().optional().nullable(),\n is_internal: z.boolean().optional().default(false),\n});\n\nexport type NoteCreateDto = z.infer<typeof NoteCreateSchema>;\n","import { z } from 'zod';\nimport { RecordTypeValues } from '../../types/record_types';\n\n// Create enum from RecordTypeValues array - fully type safe\nconst RecordTypeEnum = z.enum(RecordTypeValues);\n\nexport const NoteUpdateSchema = z.object({\n id: z.string(),\n record_id: z.string().optional(),\n record_type: RecordTypeEnum.optional(),\n tag: z.string().optional().nullable(),\n title: z.string().optional().nullable(),\n body: z.string().optional().nullable(),\n original_id: z.number().optional().nullable(),\n is_internal: z.boolean().optional(),\n});\n\nexport type NoteUpdateDto = z.infer<typeof NoteUpdateSchema>;\n","import { z } from 'zod';\nimport { RecordTypeValues } from '../../types/record_types';\nimport {\n BooleanFilterSchema,\n createEnumFilter,\n DateFilterSchema,\n StringFilterSchema,\n} from '../common/filter_operators_zod';\nimport { PaginationFiltersSchema } from '../common/pagination_zod';\n\n// Create enum from RecordTypeValues array for filtering - fully type safe\nconst RecordTypeFilterEnum = z.enum(RecordTypeValues);\n\n/**\n * Filters for note\n * Supports operator-based filtering for advanced queries\n *\n * All filters support operators for advanced filtering:\n * - Booleans: eq, ne\n * - Strings: eq, ne, contains, startsWith, endsWith\n * - Dates: eq, ne, gt, gte, lt, lte\n *\n * Examples:\n * - { record_type: { operator: \"eq\", value: \"SUPPORT_TICKET\" } }\n * - { title: { operator: \"contains\", value: \"search\" } }\n */\nexport const NoteFiltersSchema = PaginationFiltersSchema.extend({\n // String filters\n record_id: StringFilterSchema.optional(),\n record_type: createEnumFilter(RecordTypeFilterEnum).optional(),\n title: StringFilterSchema.optional(),\n body: StringFilterSchema.optional(),\n tag: StringFilterSchema.optional(),\n\n // Date filters\n created_at: DateFilterSchema.optional(),\n updated_at: DateFilterSchema.optional(),\n\n // Boolean filters\n is_internal: BooleanFilterSchema.optional(),\n\n // Zinia search object\n search: z\n .object({\n query: z.string(),\n searchableFields: z.array(z.string()),\n })\n .optional(),\n});\n\nexport type NoteFiltersDto = z.infer<typeof NoteFiltersSchema>;\n\n// Sort direction enum for GraphQL\nexport const NoteFiltersSortDirectionEnum = z.enum(['asc', 'desc']);\nexport type NoteFiltersSortDirectionEnum = z.infer<typeof NoteFiltersSortDirectionEnum>;\n","import { z } from 'zod';\nimport { createPaginatedSchema, SortDirectionSchema } from './common/pagination_zod';\n\nimport { RecordTypeValues } from '../types/record_types';\nconst RecordTypeEnum = z.enum(RecordTypeValues);\n\nexport const recordVersionSchema = z.object({\n id: z.string(),\n record_id: z.string(),\n operation: z.string(),\n recorded_at: z.string(),\n record_type: z.string(),\n record: z.string().optional().nullable(),\n old_record: z.string().optional().nullable(),\n auth_uid: z.string().optional().nullable(),\n auth_role: z.string().optional().nullable(),\n auth_username: z.string().optional().nullable(),\n});\n\nexport type RecordVersionReadDto = z.infer<typeof recordVersionSchema>;\n\n// ===== LEGACY SCHEMAS (Keep for backward compatibility) =====\nexport const recordVersionPageSchema = z.object({\n items: z.array(recordVersionSchema),\n pageInfo: z.object({\n hasNextPage: z.boolean(),\n endCursor: z.string().optional().nullable(),\n }),\n});\n\nexport const pageInfoSchema = z.object({\n hasNextPage: z.boolean(),\n endCursor: z.string().optional().nullable(),\n});\n\nexport const recordVersionFiltersSchema = z.object({\n start_date: z.string().optional().nullable(),\n end_date: z.string().optional().nullable(),\n limit: z.number().optional().nullable(),\n cursor: z.string().optional().nullable(),\n});\n\nexport const recordVersionFiltersInputSchema = z.object({\n record_id: z.string(),\n record_type: RecordTypeEnum,\n filters: recordVersionFiltersSchema.optional().nullable(),\n});\n\n// Export inferred legacy types\nexport type RecordVersionFiltersDto = z.infer<typeof recordVersionFiltersSchema>;\nexport type RecordVersionPageDto = z.infer<typeof recordVersionPageSchema>;\nexport type RecordVersionPageInfoDto = z.infer<typeof pageInfoSchema>;\n\n// ===== NEW BREADCRUMB PAGINATION SCHEMAS =====\n\n/**\n * NEW: Breadcrumb-paginated record version response\n * Use this for new implementations\n */\nexport const recordVersionPageBreadcrumbSchema = createPaginatedSchema(recordVersionSchema);\n\n/**\n * NEW: Filters with breadcrumb pagination support\n * Extends PaginationFiltersSchema for consistent pagination\n */\nexport const recordVersionFiltersBreadcrumbSchema = z.object({\n // Pagination fields\n first: z.number().min(1).max(100).optional(),\n after: z.string().optional(),\n last: z.number().min(1).max(100).optional(),\n before: z.string().optional(),\n sortBy: z.string().optional(),\n sortDirection: SortDirectionSchema.optional(),\n paginationToken: z.string().optional(),\n // Record version specific filters\n start_date: z.string().optional().nullable(),\n end_date: z.string().optional().nullable(),\n});\n\nexport const recordVersionFiltersInputBreadcrumbSchema = z.object({\n record_id: z.string(),\n record_type: RecordTypeEnum,\n filters: recordVersionFiltersBreadcrumbSchema.optional().nullable(),\n});\n\n// Export inferred types\nexport type RecordVersionFiltersBreadcrumbDto = z.infer<\n typeof recordVersionFiltersBreadcrumbSchema\n>;\nexport type RecordVersionPageBreadcrumbDto = z.infer<typeof recordVersionPageBreadcrumbSchema>;\n","import { z } from 'zod';\nimport { isCommonPassword } from './login_zod';\n\nexport const resetPasswordInputSchema = z.object({\n passwords: z\n .object({\n password: z\n .string()\n // Minimum length of 8 characters (NIST requirement)\n .min(8, { message: 'Password must be at least 8 characters long' })\n // Maximum length of at least 64 characters (NIST recommendation)\n .max(64, { message: 'Password must not exceed 64 characters' })\n // No leading or trailing whitespace (Cloudflare requirement)\n .refine((password) => !/^\\s|\\s$/.test(password), {\n message: 'Password must not have leading or trailing whitespace',\n })\n // Not in common password list (NIST recommendation)\n .refine((password) => !isCommonPassword(password), {\n message: 'Password is too common and easily guessed',\n }),\n password_confirm: z.string().min(8),\n })\n .refine((data) => data.password === data.password_confirm, {\n message: 'Passwords do not match',\n path: ['password_confirm'],\n }),\n});\n\nexport const resetPasswordSchema = resetPasswordInputSchema.extend({\n // token from jwt\n token: z.string().min(20),\n});\n\nexport type ResetPasswordDto = z.infer<typeof resetPasswordSchema>;\nexport type ResetPasswordInputDto = z.infer<typeof resetPasswordInputSchema>;\n","import { z } from 'zod';\nimport { passwordSchema } from './login_zod';\n\nexport const signupSchema = z.object({\n email: z\n .string()\n .trim()\n .toLowerCase()\n .min(3, 'Please enter your email.')\n .email('The email address is badly formatted.'),\n passwords: z\n .object({\n password: passwordSchema,\n password_confirm: z.string().min(1),\n })\n .refine((data) => data.password === data.password_confirm, {\n message: 'Passwords do not match',\n path: ['password_confirm'],\n }),\n});\n\nexport type SignupInputDto = z.infer<typeof signupSchema>;\n","import { z } from 'zod';\n\nexport const SupportTicketTypeEnum = [\n 'IMPROVEMENT',\n 'BUG',\n 'FEATURE_REQUEST',\n 'OPERATIONAL',\n] as const;\nexport const SupportTicketTypeSchema = z.enum(SupportTicketTypeEnum);\nexport type SupportTicketType = z.infer<typeof SupportTicketTypeSchema>;\n\nexport const SupportTicketPriorityEnum = ['LOW', 'MEDIUM', 'HIGH', 'CRITICAL'] as const;\n\n/**\n * Enum for feature request priority levels\n */\nexport const SupportTicketPrioritySchema = z.enum(SupportTicketPriorityEnum);\nexport type SupportTicketPriority = z.infer<typeof SupportTicketPrioritySchema>;\n\n/**\n * Enum for customer-facing support_ticket status (computed from approval_status + dev_lifecycle)\n * - PENDING: Awaiting admin review\n * - FOLLOWUP: Approved but not started\n * - IN_PROGRESS: Actively being worked on\n * - COMPLETED: Deployed to production\n * - CANCELLED: Rejected by admin\n */\nexport const SupportTicketStatusEnum = [\n 'PENDING',\n 'FOLLOWUP',\n 'IN_PROGRESS',\n 'COMPLETED',\n 'CANCELLED',\n] as const;\n\nexport const SupportTicketStatusSchema = z.enum(SupportTicketStatusEnum);\nexport type SupportTicketStatus = z.infer<typeof SupportTicketStatusSchema>;\n\n/**\n * Enum for feature request approval status\n * - PENDING: Awaiting staff decision (customer-submitted)\n * - APPROVED: Approved by staff (with customer credits)\n * - REJECTED: Rejected by staff\n * - INTERNAL: Internal staff support_ticket (no approval/credits needed)\n */\nexport const SupportTicketApprovalEnum = [\n 'PENDING',\n 'APPROVED',\n 'REJECTED',\n 'INTERNAL',\n] as const;\n\nexport const SupportTicketApprovalSchema = z.enum(SupportTicketApprovalEnum);\nexport type SupportTicketApproval = z.infer<typeof SupportTicketApprovalSchema>;\n\n/**\n * Enum for internal development lifecycle stages\n * - BACKLOG: Approved but not started\n * - PLANNING: Scoping/design phase\n * - DEVELOPMENT: Actively coding\n * - CODE_REVIEW: In review\n * - TESTING: QA testing\n * - STAGING: On staging environment\n * - PO_APPROVAL: Waiting for PO/customer sign-off\n * - DEPLOYED: Live in production\n * - CANCELLED: Internal task cancelled (only for INTERNAL approval status)\n */\nexport const SupportTicketDevLifecycleEnum = [\n 'PENDING',\n 'BACKLOG',\n 'PLANNING',\n 'DEVELOPMENT',\n 'CODE_REVIEW',\n 'TESTING',\n 'STAGING',\n 'PO_APPROVAL',\n 'DEPLOYED',\n 'CANCELLED',\n] as const;\n\nexport const SupportTicketDevLifecycleSchema = z.enum(SupportTicketDevLifecycleEnum);\nexport type SupportTicketDevLifecycle = z.infer<typeof SupportTicketDevLifecycleSchema>;\n\n/**\n * Dev lifecycle stages that can be manually set via update form\n * Excludes workflow-only stages:\n * - PENDING: Set by revert workflow\n * - DEPLOYED: Set by completeSupportTicket workflow\n * Staff can manually progress through: BACKLOG → PLANNING → DEVELOPMENT → CODE_REVIEW → TESTING → STAGING → PO_APPROVAL\n */\nexport const SupportTicketDevLifecycleUpdateEnum = [\n 'BACKLOG',\n 'PLANNING',\n 'DEVELOPMENT',\n 'CODE_REVIEW',\n 'TESTING',\n 'STAGING',\n 'PO_APPROVAL',\n] as const;\n\nexport const SupportTicketDevLifecycleUpdateSchema = z.enum(\n SupportTicketDevLifecycleUpdateEnum,\n);\nexport type SupportTicketDevLifecycleUpdate = z.infer<\n typeof SupportTicketDevLifecycleUpdateSchema\n>;\n\n/**\n * Filter-specific enum instances\n * These are separate Zod objects with the same values as above,\n * allowing GraphQL to generate distinct enum types for filters vs domain objects\n */\nexport const SupportTicketTypeFilterSchema = z.enum(SupportTicketTypeEnum);\nexport const SupportTicketPriorityFilterSchema = z.enum(SupportTicketPriorityEnum);\nexport const SupportTicketStatusFilterSchema = z.enum(SupportTicketStatusEnum);\nexport const SupportTicketApprovalFilterSchema = z.enum(SupportTicketApprovalEnum);\nexport const SupportTicketDevLifecycleFilterSchema = z.enum(SupportTicketDevLifecycleEnum);\n","import { z } from 'zod';\nimport {\n SupportTicketPrioritySchema,\n SupportTicketTypeSchema,\n} from '../support_ticket_shared/support_ticket_enums_zod';\n\n/**\n * Schema for creating new support_ticket (customer)\n */\nexport const CustomerSupportTicketCreateSchema = z.object({\n title: z\n .string()\n .min(5, 'Please add a more descriptive title (at least 5 characters)')\n .max(256, 'Title is too long - keep it brief (under 256 characters)'),\n description: z.string().optional().nullable(),\n type: SupportTicketTypeSchema.default('FEATURE_REQUEST'),\n priority: SupportTicketPrioritySchema.default('MEDIUM'),\n});\nexport type CustomerSupportTicketCreateDto = z.infer<typeof CustomerSupportTicketCreateSchema>;\n\n/**\n * Schema for updating support_ticket (customer - PENDING items only)\n */\nexport const CustomerSupportTicketUpdateSchema = CustomerSupportTicketCreateSchema.extend({\n id: z.string(),\n});\nexport type CustomerSupportTicketUpdateDto = z.infer<typeof CustomerSupportTicketUpdateSchema>;\n","import { z } from 'zod';\nimport { createPaginatedSchema } from '../../common/pagination_zod';\nimport {\n SupportTicketPrioritySchema,\n SupportTicketStatusSchema,\n SupportTicketTypeSchema,\n} from '../support_ticket_shared/support_ticket_enums_zod';\n\n/**\n * Customer-specific read schema - ONLY includes fields customers can see\n * Excludes all staff-only fields like internalNotes, devLifecycle, timeline tracking, etc.\n */\nexport const CustomerSupportTicketReadSchema = z.object({\n id: z.string(),\n display_id: z.string().optional().nullable(),\n display_id_prefix: z.string().optional().nullable(),\n\n // Basic fields\n title: z.string(),\n description: z.string(),\n type: SupportTicketTypeSchema,\n priority: SupportTicketPrioritySchema,\n\n // Status fields (customer-facing only)\n status: SupportTicketStatusSchema,\n is_locked: z.boolean(),\n\n // Requester info (their own info)\n requester_name: z.string().optional().nullable(),\n requester_email: z.string().email().optional().nullable(),\n\n // Financial info (what they're charged)\n credit_value: z.string().optional().nullable(),\n\n // Timeline tracking\n start_at: z.string().optional().nullable(),\n target_at: z.string().optional().nullable(),\n completed_at: z.string().optional().nullable(),\n locked_approval_at: z.string().optional().nullable(),\n\n created_by: z.string().optional().nullable(),\n created_at: z.string().optional().nullable(),\n updated_by: z.string().optional().nullable(),\n updated_at: z.string().optional().nullable(),\n});\nexport type CustomerSupportTicketReadDto = z.infer<typeof CustomerSupportTicketReadSchema>;\n\n/**\n * Paginated customer support_ticket response\n */\nexport const CustomerSupportTicketPageSchema = createPaginatedSchema(\n CustomerSupportTicketReadSchema,\n);\nexport type CustomerSupportTicketPageDto = z.infer<typeof CustomerSupportTicketPageSchema>;\n","import { z } from 'zod';\nimport {\n BooleanFilterSchema,\n createEnumFilter,\n DateFilterSchema,\n NumberFilterSchema,\n StringFilterSchema,\n} from '../../common/filter_operators_zod';\nimport { PaginationFiltersSchema } from '../../common/pagination_zod';\nimport {\n SupportTicketPriorityFilterSchema,\n SupportTicketStatusFilterSchema,\n SupportTicketTypeFilterSchema,\n} from '../support_ticket_shared/support_ticket_enums_zod';\n\n/**\n * Customer-facing filters for support_ticket\n * Includes all fields customers can see and filter on\n *\n * - Cannot filter by internal fields (isInternalOnly, approvalStatus, devLifecycle)\n * - Can filter on all visible fields including credits, requester info, etc.\n */\nexport const CustomerSupportTicketFiltersSchema = PaginationFiltersSchema.extend({\n // Enum filters\n type: createEnumFilter(SupportTicketTypeFilterSchema).optional(),\n status: createEnumFilter(SupportTicketStatusFilterSchema).optional(),\n priority: createEnumFilter(SupportTicketPriorityFilterSchema).optional(),\n\n // String filters\n title: StringFilterSchema.optional(),\n description: StringFilterSchema.optional(),\n requester_name: StringFilterSchema.optional(),\n requester_email: StringFilterSchema.optional(),\n\n // Boolean filters\n is_locked: BooleanFilterSchema.optional(),\n\n // Number filters (for credits)\n credit_value: NumberFilterSchema.optional(),\n\n // Date filters (audit)\n created_at: DateFilterSchema.optional(),\n updated_at: DateFilterSchema.optional(),\n\n // Date filters (timeline tracking)\n start_at: DateFilterSchema.optional(),\n target_at: DateFilterSchema.optional(),\n completed_at: DateFilterSchema.optional(),\n\n // Zinia search object\n search: z\n .object({\n query: z.string(),\n searchableFields: z.array(z.string()),\n })\n .optional(),\n});\n\nexport type CustomerSupportTicketFiltersDto = z.infer<\n typeof CustomerSupportTicketFiltersSchema\n>;\n","import { z } from 'zod';\nimport { createPaginatedSchema } from '../../common/pagination_zod';\nimport {\n SupportTicketApprovalSchema,\n SupportTicketDevLifecycleSchema,\n SupportTicketPrioritySchema,\n SupportTicketStatusSchema,\n SupportTicketTypeSchema,\n} from '../support_ticket_shared/support_ticket_enums_zod';\n\n/**\n * Staff-specific read schema - includes ALL fields including staff-only data\n * This is what staff see when they query support_ticket (includes internal notes, dev lifecycle, etc.)\n */\nexport const StaffSupportTicketReadSchema = z.object({\n id: z.string(),\n display_id: z.string().optional().nullable(),\n display_id_prefix: z.string().optional().nullable(),\n\n // Basic fields\n title: z.string(),\n description: z.string(),\n type: SupportTicketTypeSchema,\n priority: SupportTicketPrioritySchema,\n\n // Status fields\n status: SupportTicketStatusSchema,\n approval_status: SupportTicketApprovalSchema,\n is_locked: z.boolean(),\n can_delete: z.boolean(),\n // Note: isInternalOnly removed - use approvalStatus === 'INTERNAL' instead\n\n // Requester info\n requester_name: z.string().optional().nullable(),\n requester_email: z.string().email().optional().nullable(),\n\n // Note: customerNotes and internalNotes are stored in record_versions table\n // Query record_versions with record_type=SUPPORT_TICKET_CUSTOMER_NOTE or SUPPORT_TICKET_INTERNAL_NOTE\n\n // Staff-only fields\n dev_lifecycle: SupportTicketDevLifecycleSchema.optional().nullable(),\n\n // Workflow/financial fields\n credit_value: z.string().optional().nullable(),\n delivered_value: z.string().optional().nullable(),\n\n // Timeline tracking\n start_at: z.string().optional().nullable(),\n target_at: z.string().optional().nullable(),\n completed_at: z.string().optional().nullable(),\n locked_approval_at: z.string().optional().nullable(),\n\n // System metadata\n created_by: z.string().optional().nullable(),\n created_at: z.string().optional().nullable(),\n updated_by: z.string().optional().nullable(),\n updated_at: z.string().optional().nullable(),\n});\nexport type StaffSupportTicketReadDto = z.infer<typeof StaffSupportTicketReadSchema>;\n\n/**\n * Paginated staff support_ticket response\n */\nexport const StaffSupportTicketPageSchema = createPaginatedSchema(\n StaffSupportTicketReadSchema,\n);\nexport type StaffSupportTicketPageDto = z.infer<typeof StaffSupportTicketPageSchema>;\n","import { z } from 'zod';\nimport {\n BooleanFilterSchema,\n createEnumFilter,\n DateFilterSchema,\n NumberFilterSchema,\n StringFilterSchema,\n} from '../../common/filter_operators_zod';\nimport { PaginationFiltersSchema } from '../../common/pagination_zod';\nimport {\n SupportTicketApprovalFilterSchema,\n SupportTicketDevLifecycleFilterSchema,\n SupportTicketPriorityFilterSchema,\n SupportTicketStatusFilterSchema,\n SupportTicketTypeFilterSchema,\n} from '../support_ticket_shared/support_ticket_enums_zod';\n\n/**\n * Staff/Admin filters for support_ticket\n * Full access to all filtering capabilities including internal fields\n *\n * All filters support operators for advanced filtering:\n * - Enums: eq, ne\n * - Booleans: eq, ne\n * - Strings: eq, ne, contains, startsWith, endsWith\n * - Numbers: eq, ne, gt, gte, lt, lte\n * - Dates: eq, ne, gt, gte, lt, lte\n *\n * Examples:\n * - { type: { operator: \"eq\", value: \"BUG\" } }\n * - { approvalStatus: { operator: \"eq\", value: \"INTERNAL\" } } // Filter for internal tasks\n * - { title: { operator: \"contains\", value: \"search\" } }\n * - { creditValue: { operator: \"gte\", value: 100 } }\n * - { createdAt: { operator: \"gte\", value: \"2024-01-01\" } }\n */\nexport const StaffSupportTicketFiltersSchema = PaginationFiltersSchema.extend({\n // Enum filters (using dedicated filter enum instances)\n type: createEnumFilter(SupportTicketTypeFilterSchema).optional(),\n status: createEnumFilter(SupportTicketStatusFilterSchema).optional(),\n approval_status: createEnumFilter(SupportTicketApprovalFilterSchema).optional(),\n priority: createEnumFilter(SupportTicketPriorityFilterSchema).optional(),\n dev_lifecycle: createEnumFilter(SupportTicketDevLifecycleFilterSchema).optional(),\n\n // String filters\n title: StringFilterSchema.optional(),\n description: StringFilterSchema.optional(),\n requester_name: StringFilterSchema.optional(),\n requester_email: StringFilterSchema.optional(),\n\n // Boolean filters\n is_locked: BooleanFilterSchema.optional(),\n // Note: isInternalOnly removed - use approval_status filter with value 'INTERNAL' instead\n\n // Number filters (for credits)\n credit_value: NumberFilterSchema.optional(),\n delivered_value: NumberFilterSchema.optional(),\n\n // Date filters (audit)\n created_at: DateFilterSchema.optional(),\n updated_at: DateFilterSchema.optional(),\n\n // Date filters (timeline tracking)\n start_at: DateFilterSchema.optional(),\n target_at: DateFilterSchema.optional(),\n completed_at: DateFilterSchema.optional(),\n\n // Zinia search object\n search: z\n .object({\n query: z.string(),\n searchableFields: z.array(z.string()),\n })\n .optional(),\n});\n\nexport type StaffSupportTicketFiltersDto = z.infer<typeof StaffSupportTicketFiltersSchema>;\n","import { z } from 'zod';\nimport {\n DECIMAL_AMOUNT_2_DECIMALS_OR_EMPTY_ERROR_MESSAGE,\n DECIMAL_AMOUNT_2_DECIMALS_OR_EMPTY_REGEX,\n DECIMAL_AMOUNT_ERROR_MESSAGE,\n DECIMAL_AMOUNT_REGEX,\n} from '../../common/regex_patterns';\nimport {\n SupportTicketDevLifecycleUpdateSchema,\n SupportTicketPrioritySchema,\n SupportTicketTypeSchema,\n} from '../support_ticket_shared/support_ticket_enums_zod';\n\n/**\n * Base schema for staff support_ticket updates (general editing)\n *\n * Workflow-specific fields NOT included here:\n * - approvalStatus: Use approve/reject/revert workflows, or set to INTERNAL at creation\n *\n * Note: completeSupportTicket workflow sets deliveredValue + completedAt initially,\n * but they can be adjusted here afterwards for corrections.\n *\n * Business rules validated in backend:\n * - Can't edit creditValue unless PENDING (INTERNAL support_ticket can't have credits)\n * - Can't edit devLifecycle unless APPROVED or INTERNAL\n * - Can't edit deliveredValue unless DEPLOYED\n * - Can't edit completedAt unless DEPLOYED\n * - etc.\n */\nconst StaffSupportTicketInputBaseSchema = z.object({\n // Basic fields (editable in any state except REJECTED)\n title: z\n .string()\n .min(5, 'Please add a more descriptive title (at least 5 characters)')\n .max(256, 'Title is too long - keep it brief (under 256 characters)'),\n description: z.string().optional().nullable(),\n type: SupportTicketTypeSchema,\n priority: SupportTicketPrioritySchema,\n\n // Dev lifecycle (editable when APPROVED or INTERNAL)\n dev_lifecycle: SupportTicketDevLifecycleUpdateSchema.optional(),\n\n // Credit estimation (editable only when PENDING)\n credit_value: z\n .string()\n .regex(DECIMAL_AMOUNT_REGEX, DECIMAL_AMOUNT_ERROR_MESSAGE)\n .optional()\n .nullable(),\n\n // Delivered value (editable only when DEPLOYED, for corrections)\n delivered_value: z\n .string()\n .regex(\n DECIMAL_AMOUNT_2_DECIMALS_OR_EMPTY_REGEX,\n DECIMAL_AMOUNT_2_DECIMALS_OR_EMPTY_ERROR_MESSAGE,\n )\n .optional()\n .nullable(),\n\n // Timeline planning (editable before DEVELOPMENT starts)\n start_at: z\n .string()\n .regex(/\\d{4}-\\d{2}-\\d{2}/, 'Date must be in the format YYYY-MM-DD')\n .optional()\n .nullable(),\n target_at: z\n .string()\n .regex(/\\d{4}-\\d{2}-\\d{2}/, 'Date must be in the format YYYY-MM-DD')\n .optional()\n .nullable(),\n\n // Completion date (editable only when DEPLOYED, for corrections)\n completed_at: z\n .string()\n .regex(/\\d{4}-\\d{2}-\\d{2}/, 'Date must be in the format YYYY-MM-DD')\n .optional()\n .nullable(),\n});\n\n// Create schema allows is_internal flag (converted to approvalStatus in backend)\nexport const StaffSupportTicketCreateSchema = StaffSupportTicketInputBaseSchema.extend({\n is_internal: z.boolean().optional(), // If true, set approvalStatus='INTERNAL', else 'PENDING'\n});\nexport type StaffSupportTicketCreateDto = z.infer<typeof StaffSupportTicketCreateSchema>;\n\n// Update schema includes an ID\nexport const StaffSupportTicketUpdateSchema = StaffSupportTicketInputBaseSchema.extend({\n id: z.string(),\n});\nexport type StaffSupportTicketUpdateDto = z.infer<typeof StaffSupportTicketUpdateSchema>;\n\n// Legacy export for backwards compatibility (alias for update)\nexport const StaffSupportTicketInputSchema = StaffSupportTicketUpdateSchema;\nexport type StaffSupportTicketInputDto = StaffSupportTicketUpdateDto;\n","import { z } from 'zod';\n\n/**\n * Staff workflow schemas\n * These are for critical state transitions in the support_ticket lifecycle\n */\n\n/**\n * Approve support_ticket (PENDING → APPROVED)\n * Deducts credits and sets dev_lifecycle to BACKLOG\n */\nexport const ApproveSupportTicketSchema = z.object({\n id: z.string(),\n});\nexport type ApproveSupportTicketDto = z.infer<typeof ApproveSupportTicketSchema>;\n\n/**\n * Reject support_ticket (PENDING → REJECTED)\n * Locks the support_ticket without deducting credits\n */\nexport const RejectSupportTicketSchema = z.object({\n id: z.string(),\n});\nexport type RejectSupportTicketDto = z.infer<typeof RejectSupportTicketSchema>;\n\n/**\n * Revert support_ticket (APPROVED/REJECTED → PENDING)\n * Refunds credits if applicable and unlocks the support_ticket\n */\nexport const RevertSupportTicketSchema = z.object({\n id: z.string(),\n});\nexport type RevertSupportTicketDto = z.infer<typeof RevertSupportTicketSchema>;\n\n/**\n * Complete support_ticket (devLifecycle → DEPLOYED)\n * Marks support_ticket as deployed and captures actual delivered value\n * Auto-sets completedAt timestamp\n */\nexport const CompleteSupportTicketSchema = z.object({\n id: z.string(),\n delivered_value: z\n .string()\n .regex(\n /^(\\d*\\.?\\d{1,2}|\\d+)$/,\n 'Must be a valid dollar amount with up to 2 decimal places',\n ),\n});\nexport type CompleteSupportTicketDto = z.infer<typeof CompleteSupportTicketSchema>;\n\n/**\n * Delete support_ticket (soft delete)\n * Cannot delete APPROVED tickets (charged to customer)\n * Can delete PENDING, REJECTED, INTERNAL tickets\n */\nexport const DeleteSupportTicketSchema = z.object({\n id: z.string(),\n});\nexport type DeleteSupportTicketDto = z.infer<typeof DeleteSupportTicketSchema>;\n\n/**\n * Cancel internal task (devLifecycle → CANCELLED)\n * Only for INTERNAL approval_status tickets\n * Customer tickets use reject workflow instead\n */\nexport const CancelInternalTaskSchema = z.object({\n id: z.string(),\n});\nexport type CancelInternalTaskDto = z.infer<typeof CancelInternalTaskSchema>;\n\n/**\n * Reactivate terminal internal task (CANCELLED or DEPLOYED → BACKLOG)\n * Only for INTERNAL approval_status tickets with dev_lifecycle = CANCELLED or DEPLOYED\n * Clears completed_at timestamp and reopens task for more work\n */\nexport const ReactivateInternalTaskSchema = z.object({\n id: z.string(),\n});\nexport type ReactivateInternalTaskDto = z.infer<typeof ReactivateInternalTaskSchema>;\n","import { z } from 'zod';\n\n/**\n * Schema for support ticket record data in enriched contexts\n * This defines the minimal fields needed for display/enrichment\n * Includes id for mapping purposes, even though it's also in record_id\n */\nexport const SupportTicketRecordDataSchema = z.object({\n id: z.string(),\n display_id: z.string().optional().nullable(),\n title: z.string(),\n});\n\n/**\n * Type for support ticket enrichment data (non-nullable version for enrichment)\n */\nexport type SupportTicketEnrichmentData = z.infer<typeof SupportTicketRecordDataSchema>;\n","import { z } from 'zod';\n\n// No specific enums needed for Team based on the C# model\n// This file is created for consistency with the pattern\nexport const TeamStatusSchema = z.enum(['active', 'inactive']).describe('TeamStatus');\n\nexport type TeamStatus = z.infer<typeof TeamStatusSchema>;\n","import { z } from 'zod';\nimport {\n BooleanFilterSchema,\n DateFilterSchema,\n StringFilterSchema,\n} from '../common/filter_operators_zod';\nimport { PaginationFiltersSchema } from '../common/pagination_zod';\n\n/**\n * Filters for teams\n *\n * All filters support operators for advanced filtering:\n * - Booleans: eq, ne\n * - Strings: eq, ne, contains, startsWith, endsWith\n * - Dates: eq, ne, gt, gte, lt, lte\n *\n * Examples:\n * - { display_name: { operator: \"contains\", value: \"search\" } }\n * - { contact_email: { operator: \"eq\", value: \"test@example.com\" } }\n * - { created_at: { operator: \"gte\", value: \"2024-01-01\" } }\n */\nexport const TeamFiltersSchema = PaginationFiltersSchema.extend({\n // String filters\n unique_name: StringFilterSchema.optional(),\n display_name: StringFilterSchema.optional(),\n legal_name: StringFilterSchema.optional(),\n contact_email: StringFilterSchema.optional(),\n address_city: StringFilterSchema.optional(),\n address_zip: StringFilterSchema.optional(),\n\n // Boolean filters\n includeArchived: BooleanFilterSchema.optional(),\n\n // Date filters\n created_at: DateFilterSchema.optional(),\n updated_at: DateFilterSchema.optional(),\n archived_at: DateFilterSchema.optional(),\n\n // Zinia search object\n search: z\n .object({\n query: z.string(),\n searchableFields: z.array(z.string()),\n })\n .optional(),\n});\n\nexport type TeamFiltersDto = z.infer<typeof TeamFiltersSchema>;\n","import { z } from 'zod';\n\nexport const TeamInputBaseSchema = z.object({\n // Basic team information\n unique_name: z\n .string()\n .min(3, 'Unique name must be between 3 and 64 characters')\n .max(64)\n .optional()\n .nullable(),\n display_name: z.string().min(3, 'Display name must be between 3 and 64 characters').max(64),\n legal_name: z.string().optional().nullable(),\n description: z.string().optional().nullable(),\n\n // Contact information\n contact_name: z.string().optional().nullable(),\n contact_email: z.string().email().optional().nullable(),\n contact_business_phone: z.string().optional().nullable(),\n contact_mobile_phone: z.string().optional().nullable(),\n contact_time_zone: z.string().optional().nullable(),\n\n // Address information\n address_full: z.string().optional().nullable(),\n address_city: z.string().optional().nullable(),\n address_zip: z.string().optional().nullable(),\n\n // Web presence\n twitter_username: z.string().optional().nullable(),\n url: z.string().url().optional().nullable(),\n\n // Branding\n logo: z.string().optional().nullable(),\n\n // Email settings\n email_sent_from: z.string().email().optional().nullable(),\n email_reply_to: z.string().email().optional().nullable(),\n});\n\n// Create schema - same as base for teams\nexport const TeamCreateSchema = TeamInputBaseSchema;\nexport type TeamCreateDto = z.infer<typeof TeamCreateSchema>;\n\n// Update schema includes an ID\nexport const TeamUpdateSchema = TeamInputBaseSchema.extend({\n id: z.string(),\n});\nexport type TeamUpdateDto = z.infer<typeof TeamUpdateSchema>;\n","import { z } from 'zod';\nimport { TeamCreateSchema } from './team_input_zod';\n\nexport const TeamReadSchema = TeamCreateSchema.extend({\n // Required fields\n id: z.string(),\n original_id: z.string().optional().nullable(),\n\n // Computed fields\n path: z.string().optional().nullable(),\n\n // Audit fields\n created_at: z.string(),\n updated_at: z.string().optional().nullable(),\n created_by: z.string(),\n updated_by: z.string().optional().nullable(),\n\n // Soft delete\n archived_at: z.string().optional().nullable(),\n archived_by: z.string().optional().nullable(),\n});\n\nexport type TeamReadDto = z.infer<typeof TeamReadSchema>;\n","import { z } from 'zod';\nimport { createPaginatedSchema } from '../common/pagination_zod';\nimport { TeamReadSchema } from './team_read_zod';\n\nexport const TeamPageSchema = createPaginatedSchema(TeamReadSchema);\n\nexport type TeamPageDto = z.infer<typeof TeamPageSchema>;\n","import { z } from 'zod';\nimport { TeamReadSchema } from './team_read_zod';\n\n/**\n * Schema for a team option in user teams list\n * Includes all team fields to match the GraphQL query\n */\nexport const TeamOptionSchema = TeamReadSchema;\n\nexport type TeamOptionDto = z.infer<typeof TeamOptionSchema>;\n\n/**\n * Schema for the list of teams that a user is part of\n */\nexport const UserTeamsSchema = z.object({\n items: z.array(TeamOptionSchema),\n});\n\nexport type UserTeamsDto = z.infer<typeof UserTeamsSchema>;\n","import { z } from 'zod';\n\n/**\n * Team Member Role Enum\n * - owner: Full permissions (create, read, update, delete)\n * - manager: Can create and read (cannot update or delete)\n * - member: Can create and read (cannot update or delete)\n * - client: Client role (permissions TBD)\n */\nexport const TeamMemberRoleEnum = ['owner', 'manager', 'member', 'client'] as const;\n\nexport const TeamMemberRoleSchema = z.enum(TeamMemberRoleEnum);\nexport type TeamMemberRole = z.infer<typeof TeamMemberRoleSchema>;\n\n/**\n * Filter-specific enum instance\n * This is a separate Zod object with the same values as above,\n * allowing GraphQL to generate distinct enum types for filters vs domain objects\n */\nexport const TeamMemberRoleFilterSchema = z.enum(TeamMemberRoleEnum);\n","import { z } from 'zod';\nimport {\n createEnumFilter,\n DateFilterSchema,\n NumberFilterSchema,\n StringFilterSchema,\n} from '../common/filter_operators_zod';\nimport { PaginationFiltersSchema } from '../common/pagination_zod';\nimport { TeamMemberRoleFilterSchema } from './team_member_enums_zod';\n\n/**\n * Filters for team_member\n * Supports operator-based filtering for advanced queries\n *\n * All filters support operators for advanced filtering:\n * - Numbers: eq, ne, gt, gte, lt, lte\n * - Strings: eq, ne, contains, startsWith, endsWith\n * - Dates: eq, ne, gt, gte, lt, lte\n *\n * Examples:\n * - { original_id: { operator: \"eq\", value: 123 } }\n * - { team_id: { operator: \"eq\", value: \"team_123\" } }\n * - { display_name: { operator: \"contains\", value: \"John\" } }\n * - { created_at: { operator: \"gte\", value: \"2024-01-01\" } }\n */\nexport const TeamMemberFiltersSchema = PaginationFiltersSchema.extend({\n // Number filters\n original_id: NumberFilterSchema.optional(),\n\n // String filters\n team_id: StringFilterSchema.optional(),\n original_team_id: StringFilterSchema.optional(),\n user_id: StringFilterSchema.optional(),\n original_user_id: StringFilterSchema.optional(),\n role: createEnumFilter(TeamMemberRoleFilterSchema).optional(),\n display_name: StringFilterSchema.optional(),\n business_phone: StringFilterSchema.optional(),\n mobile_phone: StringFilterSchema.optional(),\n email_address: StringFilterSchema.optional(),\n website_address: StringFilterSchema.optional(),\n time_zone: StringFilterSchema.optional(),\n\n // Date filters\n created_at: DateFilterSchema.optional(),\n updated_at: DateFilterSchema.optional(),\n deleted_at: DateFilterSchema.optional(),\n\n // Zinia search object\n search: z\n .object({\n query: z.string(),\n searchableFields: z.array(z.string()),\n })\n .optional(),\n});\n\nexport type TeamMemberFiltersDto = z.infer<typeof TeamMemberFiltersSchema>;\n","import { z } from 'zod';\nimport { TeamMemberRoleSchema } from './team_member_enums_zod';\n\nconst TeamMemberBaseSchema = z.object({\n team_id: z.string(),\n user_id: z.string(),\n role: TeamMemberRoleSchema,\n display_name: z\n .string()\n .min(3, 'Display name must be at least 3 characters')\n .max(64, 'Display name must be at most 64 characters'),\n business_phone: z.string().optional().nullable(),\n mobile_phone: z.string().optional().nullable(),\n email_address: z.string().email(),\n website_address: z.string().url().optional().nullable(),\n time_zone: z.string().optional().nullable(),\n});\n\nexport const TeamMemberCreateSchema = TeamMemberBaseSchema;\nexport type TeamMemberCreateDto = z.infer<typeof TeamMemberCreateSchema>;\n\nexport const TeamMemberUpdateSchema = TeamMemberBaseSchema.extend({\n id: z.string(),\n});\nexport type TeamMemberUpdateDto = z.infer<typeof TeamMemberUpdateSchema>;\n","import { z } from 'zod';\nimport { TeamMemberRoleSchema } from './team_member_enums_zod';\n\nexport const TeamMemberReadSchema = z.object({\n id: z.string(),\n original_id: z.number().optional().nullable(),\n team_id: z.string(),\n original_team_id: z.string().optional().nullable(),\n user_id: z.string(),\n original_user_id: z.string().optional().nullable(),\n role: TeamMemberRoleSchema,\n display_name: z.string().optional().nullable(),\n business_phone: z.string().optional().nullable(),\n mobile_phone: z.string().optional().nullable(),\n email_address: z.string().email(),\n website_address: z.string().optional().nullable(),\n time_zone: z.string().optional().nullable(),\n created_at: z.string(),\n created_by: z.string(),\n updated_at: z.string().optional().nullable(),\n updated_by: z.string().optional().nullable(),\n deleted_at: z.string().optional().nullable(),\n deleted_by: z.string().optional().nullable(),\n});\n\nexport type TeamMemberReadDto = z.infer<typeof TeamMemberReadSchema>;\n","import { z } from 'zod';\nimport { TeamMemberReadSchema } from './team_member_read_zod';\n\n/**\n * Schema for a team member option in user team members list\n * Includes all team member fields to match the query\n */\nexport const TeamMemberOptionSchema = TeamMemberReadSchema;\n\nexport type TeamMemberOptionDto = z.infer<typeof TeamMemberOptionSchema>;\n\n/**\n * Schema for the list of team members that a user can see (from their teams)\n */\nexport const UserTeamMembersSchema = z.object({\n items: z.array(TeamMemberOptionSchema),\n});\n\nexport type UserTeamMembersDto = z.infer<typeof UserTeamMembersSchema>;\n","import { z } from 'zod';\nimport { UserTypeEnum } from './user_enums_zod';\n\nexport const UserReadSchema = z.object({\n id: z.string(),\n username: z.string(),\n email: z.string(),\n email_verified: z.boolean(),\n user_type: UserTypeEnum,\n created_at: z.string(),\n updated_at: z.string().nullable(),\n});\n\nexport type UserReadDto = z.infer<typeof UserReadSchema>;\n","import { z } from 'zod';\nimport { UserTypeEnum } from './user_enums_zod';\n\nexport const UserUpdateSchema = z.object({\n id: z.string(),\n user_type: UserTypeEnum,\n});\n\nexport type UserUpdateDto = z.infer<typeof UserUpdateSchema>;\n","import { z } from 'zod';\n\n/**\n * Base schema for user profile\n */\nexport const UserProfileBaseSchema = z.object({\n first_name: z.string().max(255, 'First name is too long').nullable().optional(),\n last_name: z.string().max(255, 'Last name is too long').nullable().optional(),\n bio: z.string().max(1000, 'Bio is too long').nullable().optional(),\n});\n\n/**\n * Schema for updating a user profile\n */\nexport const UserProfileUpdateSchema = UserProfileBaseSchema.extend({\n user_id: z.string().min(1, 'User ID is required'),\n});\n\nexport type UserProfileUpdateDto = z.infer<typeof UserProfileUpdateSchema>;\n\n/**\n * Schema for reading a user profile\n */\nexport const UserProfileReadSchema = UserProfileBaseSchema.extend({\n id: z.string().min(1, 'ID is required'),\n user_id: z.string().min(1, 'User ID is required'),\n created_at: z.string().datetime(),\n created_by: z.string().min(1, 'Created by is required'),\n updated_at: z.string().datetime().nullable(),\n updated_by: z.string().nullable(),\n});\nexport type UserProfileReadDto = z.infer<typeof UserProfileReadSchema>;\n","import { z } from 'zod';\n\nexport const userSessionSchema = z.object({\n created_at: z.string(),\n expires_at: z.string(),\n status: z.string(),\n user_agent: z.string().optional().nullable(),\n ip_address: z.string().optional().nullable(),\n user: z.object({\n userId: z.string(),\n email: z.string(),\n username: z.string(),\n email_verified: z.boolean(),\n user_type: z.string(),\n first_name: z.string().optional().nullable(),\n last_name: z.string().optional().nullable(),\n avatar_url: z.string().optional().nullable(),\n subscriptions: z\n .array(\n z.object({\n subscription_id: z.string(),\n subscription_status: z.string().optional().nullable(),\n subscription_created: z.string(),\n subscription_current_period_start: z.string(),\n subscription_current_period_end: z.string(),\n subscription_cancel_at: z.string().optional().nullable(),\n subscription_canceled_at: z.string().optional().nullable(),\n product_name: z.string().optional().nullable(),\n price_amount: z.number().nullable(),\n price_currency: z.string().optional().nullable(),\n }),\n )\n .optional()\n .nullable(),\n }),\n});\n\nexport const loginResponseSchema = z.object({\n frontend_session: userSessionSchema,\n access_token: z.string(),\n refresh_token: z.string(),\n user_details_token: z.string(),\n});\n\nexport type LoginResponse = z.infer<typeof loginResponseSchema>;\nexport type UserSessionReadDto = z.infer<typeof userSessionSchema>;\n","/**\n * Utility functions for converting enum values to human-readable display labels\n */\n\n/**\n * Normalizes and validates input\n */\nfunction normalizeInput(value: string): string {\n if (typeof value !== 'string') return String(value);\n return value.trim().toLowerCase();\n}\n\n/**\n * Converts a snake_case string to Title Case\n * Handles edge cases like empty strings, single characters, numbers, etc.\n *\n * Examples:\n * - \"order_signed\" -> \"Order Signed\"\n * - \"active_mtm\" -> \"Active Mtm\"\n * - \"create_a_quote\" -> \"Create A Quote\"\n */\nfunction snakeCaseToTitleCase(value: string): string {\n const normalized = normalizeInput(value);\n if (!normalized) return value;\n\n // Split by underscores and filter out empty parts\n const parts = normalized.split('_').filter((part) => part.length > 0);\n\n if (parts.length === 0) return value;\n\n // Convert each part - strict capitalization\n const formatted = parts.map((part) => {\n if (part.length === 0) return part;\n // Capitalize first letter, rest lowercase\n return part.charAt(0).toUpperCase() + part.slice(1);\n });\n\n // Join with spaces\n return formatted.join(' ');\n}\n\n/**\n * Determines if a value should use dash formatting based on structure\n * Uses heuristics: length of first part, total parts, etc.\n */\nfunction shouldUseDashes(parts: string[]): boolean {\n if (parts.length < 2) return false;\n\n const firstPart = parts[0];\n if (!firstPart) return false;\n\n // Use dashes if:\n // 1. First part is reasonably sized (not too short, not too long)\n // 2. There are multiple parts\n // 3. The structure suggests a \"category - detail\" pattern\n\n // If first part is very short (1-2 chars), it's likely a prefix - use dashes\n if (firstPart.length <= 2) return true;\n\n // If first part is moderate length (3-8 chars) and we have 2+ parts, use dashes\n if (firstPart.length >= 3 && firstPart.length <= 8 && parts.length >= 2) {\n return true;\n }\n\n // If we have 3+ parts, use dashes for better readability\n if (parts.length >= 3) return true;\n\n // Default: use dashes for 2+ parts\n return parts.length >= 2;\n}\n\n/**\n * Formats a value with dashes - intelligently splits based on structure\n *\n * Examples:\n * - \"order_signed\" -> \"Order - Signed\"\n * - \"closed_lost\" -> \"Closed - Lost\"\n * - \"active_in_term\" -> \"Active - In Term\"\n * - \"on_hold_broker\" -> \"On Hold - Broker\"\n */\nfunction formatWithDashes(value: string): string {\n const normalized = normalizeInput(value);\n const parts = normalized.split('_').filter((part) => part.length > 0);\n\n if (parts.length < 2) return snakeCaseToTitleCase(value);\n\n const firstPart = parts[0];\n const secondPart = parts[1];\n\n if (!firstPart) return snakeCaseToTitleCase(value);\n\n // For 2 parts: split after first\n if (parts.length === 2) {\n if (!secondPart) return snakeCaseToTitleCase(value);\n const firstFormatted = snakeCaseToTitleCase(firstPart);\n const secondFormatted = snakeCaseToTitleCase(secondPart);\n return `${firstFormatted} - ${secondFormatted}`;\n }\n\n // For 3+ parts: try to find a natural split point\n // If first part is short (1-3 chars), it might be a prefix - split after it\n if (firstPart.length <= 3) {\n const firstFormatted = snakeCaseToTitleCase(firstPart);\n const restFormatted = snakeCaseToTitleCase(parts.slice(1).join('_'));\n return `${firstFormatted} - ${restFormatted}`;\n }\n\n // Otherwise, try splitting after first or second part based on lengths\n // If first part is longer, split after it; otherwise split after second\n if (secondPart && firstPart.length > secondPart.length) {\n const firstFormatted = snakeCaseToTitleCase(firstPart);\n const restFormatted = snakeCaseToTitleCase(parts.slice(1).join('_'));\n return `${firstFormatted} - ${restFormatted}`;\n } else {\n const firstTwoFormatted = snakeCaseToTitleCase(parts.slice(0, 2).join('_'));\n const restFormatted = snakeCaseToTitleCase(parts.slice(2).join('_'));\n return `${firstTwoFormatted} - ${restFormatted}`;\n }\n}\n\n/**\n * Converts an enum value to a display label\n * Uses intelligent formatting based on structure\n *\n * @param value - The enum value in snake_case (or any case)\n * @param customOverrides - Optional map of custom overrides for specific values\n * @returns The formatted display label\n */\nexport function enumToDisplayLabel(\n value: string,\n customOverrides?: Record<string, string>,\n): string {\n if (!value || typeof value !== 'string') return String(value || '');\n\n // Normalize for lookup (but preserve original for output if needed)\n const normalized = normalizeInput(value);\n\n // Check for custom override first (try both normalized and original)\n if (customOverrides) {\n if (customOverrides[value]) return customOverrides[value];\n if (customOverrides[normalized]) return customOverrides[normalized];\n }\n\n // Parse the value\n const parts = normalized.split('_').filter((part) => part.length > 0);\n\n if (parts.length === 0) return value;\n\n // Use intelligent formatting\n if (shouldUseDashes(parts)) {\n return formatWithDashes(value);\n }\n\n return snakeCaseToTitleCase(value);\n}\n\n/**\n * Creates a label map for an array of enum values\n *\n * @param enumValues - Array of enum values\n * @param customOverrides - Optional map of custom overrides for specific values\n * @returns Record mapping enum values to display labels\n */\nexport function createEnumLabelMap<T extends string>(\n enumValues: readonly T[],\n customOverrides?: Partial<Record<T, string>>,\n): Record<T, string> {\n const labelMap = {} as Record<T, string>;\n\n for (const value of enumValues) {\n labelMap[value] = enumToDisplayLabel(value, customOverrides as Record<string, string>);\n }\n\n return labelMap;\n}\n\n/**\n * Select option type for dropdowns\n */\nexport interface SelectOption {\n value: string;\n label: string;\n}\n\n/**\n * Converts an enum label map to select options for dropdowns\n *\n * @param labelMap - Record mapping enum values to display labels\n * @returns Array of select options\n */\nexport function createSelectOptionsFromLabelMap<T extends string>(\n labelMap: Record<T, string>,\n): SelectOption[] {\n return Object.entries(labelMap).map(([value, label]) => ({\n value,\n label: label as string,\n }));\n}\n","/**\n * File utility functions for sanitizing and processing file names.\n */\n\n/**\n * Sanitizes a file name by replacing non-alphanumeric characters with underscores.\n * Provides several improvements over basic sanitization:\n * - Converts dashes to underscores first (to avoid mixed dash/underscore patterns)\n * - Collapses multiple consecutive underscores\n * - Trims leading/trailing underscores\n * - Handles files without extensions properly\n * - Sanitizes the extension too\n * - Enforces 800-byte limit for R2 compatibility\n * - Provides fallback for completely invalid names\n *\n * This function enforces an 800-byte limit to comply with Cloudflare R2's 1,024 byte\n * object key limit (leaving room for path overhead).\n *\n * @param fileName - The original file name to sanitize\n * @returns The sanitized file name with underscores replacing non-alphanumeric characters\n *\n * @example\n * ```typescript\n * sanitizeFileName('Sun Life Sheet 2021-10-13.xls')\n * // Returns: 'Sun_Life_Sheet_2021_10_13.xls'\n *\n * sanitizeFileName('my-file@2023.pdf')\n * // Returns: 'my_file_2023.pdf'\n *\n * sanitizeFileName('document.txt')\n * // Returns: 'document.txt'\n *\n * sanitizeFileName('file---name.txt')\n * // Returns: 'file_name.txt' (collapsed underscores)\n *\n * sanitizeFileName('file-name_test.txt')\n * // Returns: 'file_name_test.txt' (dashes converted first, no mixed patterns)\n *\n * sanitizeFileName('!!!file.txt')\n * // Returns: 'file.txt' (trimmed underscores)\n *\n * sanitizeFileName('')\n * // Returns: 'unnamed_file' (fallback)\n * ```\n */\nexport function sanitizeFileName(fileName: string): string {\n // Handle empty or invalid input\n if (!fileName || fileName.trim() === '') {\n return 'unnamed_file';\n }\n\n // Split filename and extension using lastIndexOf for better handling\n const lastDotIndex = fileName.lastIndexOf('.');\n const hasExtension = lastDotIndex > 0; // Must have at least 1 char before dot\n\n let name = hasExtension ? fileName.substring(0, lastDotIndex) : fileName;\n let extension = hasExtension ? fileName.substring(lastDotIndex + 1) : '';\n\n // Sanitize both name and extension\n // First convert dashes to underscores to avoid mixed dash/underscore patterns\n // Then replace remaining non-alphanumeric with underscores\n // Finally collapse consecutive underscores and trim\n const sanitize = (str: string) =>\n str\n .replace(/-/g, '_') // Convert dashes to underscores first\n .replace(/[^a-zA-Z0-9]/g, '_') // Replace remaining non-alphanumeric with underscores\n .replace(/_+/g, '_') // Collapse consecutive underscores\n .replace(/^_+|_+$/g, ''); // Trim leading/trailing underscores\n\n name = sanitize(name);\n extension = sanitize(extension);\n\n // Fallback if name is completely invalid\n if (!name) {\n name = 'file';\n }\n\n // Construct final filename\n const sanitized = extension ? `${name}.${extension}` : name;\n\n // Enforce 800-byte limit for R2 compatibility (R2 has 1,024 byte limit for full path)\n const encoder = new TextEncoder();\n const byteLength = encoder.encode(sanitized).length;\n\n if (byteLength > 800) {\n // Calculate available bytes for name (reserve space for extension)\n const extensionBytes = extension ? encoder.encode(`.${extension}`).length : 0;\n const maxNameBytes = 800 - extensionBytes;\n\n // Truncate by iterating through characters until we reach byte limit\n let truncatedName = '';\n let currentBytes = 0;\n\n for (const char of name) {\n const charBytes = encoder.encode(char).length;\n if (currentBytes + charBytes > maxNameBytes) {\n break;\n }\n truncatedName += char;\n currentBytes += charBytes;\n }\n\n return extension ? `${truncatedName}.${extension}` : truncatedName;\n }\n\n return sanitized;\n}\n","/**\n * Money calculation utilities using strings for storage and numbers for calculations.\n * All monetary values are stored as strings.\n */\n\n/**\n * Adds two or more monetary values\n * @param values Monetary values as strings\n * @returns Sum as string\n */\nexport const addMoney = (...values: string[]): string =>\n values.reduce((sum, value) => sum + Number(value), 0).toString();\n\n/**\n * Subtracts monetary values from the first value\n * @param minuend Value to subtract from\n * @param subtrahends Values to subtract\n * @returns Difference as string\n */\nexport const subtractMoney = (minuend: string, ...subtrahends: string[]): string =>\n subtrahends.reduce((diff, value) => diff - Number(value), Number(minuend)).toString();\n\n/**\n * Multiplies a monetary value by a number\n * @param amount Amount as string\n * @param multiplier Number to multiply by\n * @returns Product as string\n */\nexport const multiplyMoney = (amount: string, multiplier: number): string =>\n (Number(amount) * multiplier).toString();\n\n/**\n * Divides a monetary value by a number\n * @param amount Amount as string\n * @param divisor Number to divide by\n * @returns Quotient as string\n */\nexport const divideMoney = (amount: string, divisor: number): string =>\n (Number(amount) / divisor).toString();\n\n/**\n * Applies a percentage to a monetary value\n * @param amount Amount as string\n * @param percentage Percentage as decimal (e.g., 0.15 for 15%)\n * @returns Result as string\n */\nexport const applyPercentage = (amount: string, percentage: number): string =>\n multiplyMoney(amount, 1 + percentage);\n\n/**\n * Rounds a monetary value\n * @param amount Amount to round\n * @returns Rounded amount as string\n */\nexport const roundMoney = (amount: string): string =>\n (Math.round(Number(amount) * 100) / 100).toString();\n\n/**\n * Formats a number as currency\n * @param value Number to format\n * @returns Formatted currency string\n */\nexport const formatCurrency = (value: number): string => {\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n }).format(value);\n};\n\n/**\n * Formats a dollar amount as currency\n * @param amount Amount as string\n * @returns Formatted currency string\n */\nexport const formatDollar = (amount: string | null | undefined): string => {\n if (amount === null || amount === undefined) return '$0.00';\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n }).format(Number(amount));\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["RecordTypeEnum","RecordTypeEnum","RecordTypeEnum","RecordTypeEnum","RecordTypeEnum","SUPPORT_TICKET_PRIORITY_TO_NUMBER: Record<\n SupportTicketPriority,\n SupportTicketPriorityNumberType\n>","SUPPORT_TICKET_NUMBER_TO_PRIORITY: Record<number, SupportTicketPriority>","SUPPORT_TICKET_PRIORITY_NUMBER_TO_LABEL: Record<number, string>","SUPPORT_TICKET_TYPE_FILTER_OPTIONS: Array<{\n label: string;\n value: (typeof SupportTicketTypeEnum)[number];\n}>","SUPPORT_TICKET_APPROVAL_FILTER_OPTIONS: Array<{\n label: string;\n value: (typeof SupportTicketApprovalEnum)[number];\n}>","SUPPORT_TICKET_DEV_LIFECYCLE_FILTER_OPTIONS: Array<{\n label: string;\n value: (typeof SupportTicketDevLifecycleEnum)[number];\n}>","SUPPORT_TICKET_STATUS_FILTER_OPTIONS: Array<{\n label: string;\n value: (typeof SupportTicketStatusEnum)[number];\n}>"],"sources":["../src/validation/attachment/attachment_filters_zod.ts","../src/validation/attachment/attachment_folder_input_zod.ts","../src/validation/attachment/attachment_folder_read_zod.ts","../src/validation/attachment/attachment_input_zod.ts","../src/validation/attachment/attachment_read_zod.ts","../src/validation/attachment/attachment_page_zod.ts","../src/validation/login_zod.ts","../src/validation/change_password_zod.ts","../src/validation/common/filter_operators_zod.ts","../src/validation/common/pagination_zod.ts","../src/validation/common/regex_patterns.ts","../src/validation/user/user_enums_zod.ts","../src/validation/user/user_create_zod.ts","../src/validation/credit_transaction/credit_balance_schema.ts","../src/validation/credit_transaction/credit_transaction_read_zod.ts","../src/validation/credit_transaction/credit_transaction_filters_zod.ts","../src/validation/forgot_password_zod.ts","../src/types/record_types.ts","../src/validation/note/note_read_zod.ts","../src/validation/note/note_create_zod.ts","../src/validation/note/note_update_zod.ts","../src/validation/note/note_filters_zod.ts","../src/validation/record_version_zod.ts","../src/validation/saved_filter/saved_filter_create_zod.ts","../src/validation/saved_filter/saved_filter_read_zod.ts","../src/validation/saved_filter/saved_filter_update_zod.ts","../src/validation/reset_password_zod.ts","../src/validation/signup_zod.ts","../src/validation/record_subscriber/record_subscriber_create_zod.ts","../src/validation/record_subscriber/record_subscriber_read_zod.ts","../src/validation/record_subscriber/record_subscriber_update_zod.ts","../src/validation/support_ticket/support_ticket_shared/support_ticket_enums_zod.ts","../src/validation/support_ticket/support_ticket_customer/customer_input_zod.ts","../src/validation/support_ticket/support_ticket_customer/customer_read_zod.ts","../src/validation/support_ticket/support_ticket_customer/customer_support_ticket_filters_zod.ts","../src/validation/support_ticket/support_ticket_staff/staff_read_zod.ts","../src/validation/support_ticket/support_ticket_staff/staff_support_ticket_filters_zod.ts","../src/validation/support_ticket/support_ticket_staff/staff_update_zod.ts","../src/validation/support_ticket/support_ticket_staff/staff_workflow_zod.ts","../src/validation/support_ticket/support_ticket_staff/support_ticket_event_types_zod.ts","../src/validation/support_ticket/support_ticket_staff/support_ticket_subscriber_zod.ts","../src/validation/support_ticket/support_ticket_enrichment.ts","../src/validation/team/team_enums_zod.ts","../src/validation/team/team_filters_zod.ts","../src/validation/team/team_input_zod.ts","../src/validation/team/team_read_zod.ts","../src/validation/team/team_page_zod.ts","../src/validation/team/team_user_teams_zod.ts","../src/validation/team_member/team_member_enums_zod.ts","../src/validation/team_member/team_member_filters_zod.ts","../src/validation/team_member/team_member_input_zod.ts","../src/validation/team_member/team_member_read_zod.ts","../src/validation/team_member/team_member_user_team_members_zod.ts","../src/validation/user/user_read_zod.ts","../src/validation/user/user_update_zod.ts","../src/validation/user_profile_zod.ts","../src/validation/user_session_zod.ts","../src/api/saved-filter-api.ts","../src/utils/enum_labels.ts","../src/utils/file.ts","../src/utils/money.ts"],"sourcesContent":["import { z } from 'zod';\n\nexport const AttachmentFiltersSchema = z.object({\n record_id: z.string(),\n record_type: z.string(),\n filters: z\n .object({\n start_date: z.string().optional().nullable(),\n end_date: z.string().optional().nullable(),\n limit: z.number().optional().nullable(),\n cursor: z.string().optional().nullable(),\n folder_id: z.string().optional().nullable(), // null means root level\n include_folders: z.boolean().optional().default(true), // Whether to include folders in results\n })\n .optional()\n .nullable(),\n});\n\nexport type AttachmentFiltersDto = z.infer<typeof AttachmentFiltersSchema>;\n","import { z } from 'zod';\n\nconst AttachmentFolderBaseSchema = z.object({\n record_id: z.string(),\n record_type: z.string(),\n sanitized_name: z.string(),\n original_name: z.string(),\n description: z.string().optional().nullable(),\n metadata: z.string().optional().nullable(),\n parent_folder_id: z.string().optional().nullable(),\n file_count: z.number().optional(), // Cached count of files in folder\n});\n\nexport const AttachmentFolderCreateSchema = AttachmentFolderBaseSchema;\nexport type AttachmentFolderCreateDto = z.infer<typeof AttachmentFolderCreateSchema>;\n\nexport const AttachmentFolderUpdateSchema = AttachmentFolderBaseSchema.extend({\n id: z.string(),\n record_id: z.string().optional(),\n record_type: z.string().optional(),\n sanitized_name: z.string().optional(),\n original_name: z.string().optional(),\n parent_folder_id: z.string().optional().nullable(),\n});\nexport type AttachmentFolderUpdateDto = z.infer<typeof AttachmentFolderUpdateSchema>;\n","import { z } from 'zod';\nimport { AttachmentFolderCreateSchema } from './attachment_folder_input_zod';\n\nexport const AttachmentFolderReadSchema = AttachmentFolderCreateSchema.extend({\n id: z.string(),\n file_count: z.number().optional(), // Cached count of files in folder\n created_at: z.string(),\n created_by: z.string(),\n updated_at: z.string().optional().nullable(),\n updated_by: z.string().optional().nullable(),\n archived_at: z.string().optional().nullable(),\n archived_by: z.string().optional().nullable(),\n deleted_at: z.string().optional().nullable(),\n deleted_by: z.string().optional().nullable(),\n});\n\nexport type AttachmentFolderReadDto = z.infer<typeof AttachmentFolderReadSchema>;\n","import { z } from 'zod';\n\nconst AttachmentBaseSchema = z.object({\n record_id: z.string(),\n record_type: z.string(),\n sanitized_name: z.string(),\n original_name: z.string(),\n content_type: z.string(),\n file_size: z.string(),\n description: z.string().optional().nullable(),\n metadata: z.string().optional().nullable(),\n folder_id: z.string().optional().nullable(), // References attachment_folder.id\n});\n\nexport const AttachmentCreateSchema = AttachmentBaseSchema;\nexport type AttachmentCreateDto = z.infer<typeof AttachmentCreateSchema>;\n\nexport const AttachmentUpdateSchema = AttachmentBaseSchema.extend({\n id: z.string(),\n record_id: z.string().optional(),\n record_type: z.string().optional(),\n sanitized_name: z.string().optional(),\n original_name: z.string().optional(),\n content_type: z.string().optional(),\n file_size: z.string().optional(),\n folder_id: z.string().optional().nullable(),\n});\nexport type AttachmentUpdateDto = z.infer<typeof AttachmentUpdateSchema>;\n","import { z } from 'zod';\nimport { AttachmentCreateSchema } from './attachment_input_zod';\n\nexport const AttachmentReadSchema = AttachmentCreateSchema.extend({\n id: z.string(),\n created_at: z.string(),\n created_by: z.string(),\n updated_at: z.string().optional().nullable(),\n updated_by: z.string().optional().nullable(),\n archived_at: z.string().optional().nullable(),\n archived_by: z.string().optional().nullable(),\n deleted_at: z.string().optional().nullable(),\n deleted_by: z.string().optional().nullable(),\n});\n\nexport type AttachmentReadDto = z.infer<typeof AttachmentReadSchema>;\n","import { z } from 'zod';\nimport { AttachmentFolderReadSchema } from './attachment_folder_read_zod';\nimport { AttachmentReadSchema } from './attachment_read_zod';\n\n// Custom page schema with separate arrays for files and folders\n// This avoids union type issues with gqloom while still allowing combined pagination\nexport const AttachmentPageSchema = z.object({\n files: z.array(AttachmentReadSchema),\n folders: z.array(AttachmentFolderReadSchema),\n pageInfo: z.object({\n hasNextPage: z.boolean(),\n endCursor: z.string().optional().nullable(),\n }),\n});\n\nexport type AttachmentPageDto = z.infer<typeof AttachmentPageSchema>;\n","import { z } from 'zod';\n\n// Function to check if password is in common password list\n// This would need to be implemented with a real list in production\nexport const isCommonPassword = (password: string): boolean => {\n const commonPasswords = ['password', '12345678', 'qwerty123', 'admin1234'];\n return commonPasswords.includes(password.toLowerCase());\n};\n\nexport const passwordSchema = z\n .string()\n // Minimum length of 8 characters (NIST requirement)\n .min(8, { message: 'Password must be at least 8 characters long' })\n // Maximum length of at least 64 characters (NIST recommendation)\n .max(64, { message: 'Password must not exceed 64 characters' })\n // No leading or trailing whitespace (Cloudflare requirement)\n .refine((password) => !/^\\s|\\s$/.test(password), {\n message: 'Password must not have leading or trailing whitespace',\n })\n // Not in common password list (NIST recommendation)\n .refine((password) => !isCommonPassword(password), {\n message: 'Password is too common and easily guessed',\n });\n\nexport const loginSchema = z.object({\n email: z\n .string()\n .trim()\n .toLowerCase()\n .min(3, 'Please enter your email.')\n .email('The email address is badly formatted.'),\n password: passwordSchema,\n});\n\nexport type LoginInputDto = z.infer<typeof loginSchema>;\n\n// Re-export LoginResponse from user_session_zod for convenience\nexport type { LoginResponse } from './user_session_zod';\n","import { z } from 'zod';\nimport { passwordSchema } from './login_zod';\n\nexport const changePasswordSchema = z.object({\n passwords: z\n .object({\n current_password: z.string().min(8).max(64),\n new_password: passwordSchema,\n new_password_confirm: z.string(),\n })\n .refine((data) => data.new_password === data.new_password_confirm, {\n message: 'Passwords do not match',\n path: ['new_password_confirm'],\n })\n .refine((data) => data.new_password !== data.current_password, {\n message: 'New password must be different from current password',\n path: ['new_password'],\n }),\n});\n\nexport type ChangePasswordInputDto = z.infer<typeof changePasswordSchema>;\n","import { z } from 'zod';\n\n/**\n * Individual operator constants - use these instead of string literals\n * All operators use shorthand names for URL compatibility\n */\nexport const OPERATORS = {\n // Equality\n EQUALS: 'eq',\n NOT_EQUALS: 'ne',\n\n // Comparison\n GREATER_THAN: 'gt',\n GREATER_THAN_OR_EQUAL: 'gte',\n LESS_THAN: 'lt',\n LESS_THAN_OR_EQUAL: 'lte',\n BETWEEN: 'between',\n\n // String matching\n CONTAINS: 'contains',\n STARTS_WITH: 'sw',\n ENDS_WITH: 'ew',\n\n // Array operations\n IS_ONE_OF: 'in',\n IS_NOT_ONE_OF: 'notIn',\n\n // Null checks\n IS_EMPTY: 'isEmpty',\n IS_NOT_EMPTY: 'isNotEmpty',\n} as const;\n\n/**\n * String operators - shorthand names for URL compatibility\n * Only operators that make sense for string filtering\n */\nexport const StringOperatorSchema = z.enum([\n OPERATORS.EQUALS,\n OPERATORS.NOT_EQUALS,\n OPERATORS.CONTAINS,\n OPERATORS.STARTS_WITH,\n OPERATORS.ENDS_WITH,\n OPERATORS.IS_ONE_OF,\n OPERATORS.IS_NOT_ONE_OF,\n]);\nexport type StringOperator = z.infer<typeof StringOperatorSchema>;\n\n/**\n * Date operators - shorthand names for URL compatibility\n * Only operators that make sense for date filtering\n */\nexport const DateOperatorSchema = z.enum([\n OPERATORS.EQUALS,\n OPERATORS.NOT_EQUALS,\n OPERATORS.GREATER_THAN,\n OPERATORS.GREATER_THAN_OR_EQUAL,\n OPERATORS.LESS_THAN,\n OPERATORS.LESS_THAN_OR_EQUAL,\n OPERATORS.BETWEEN,\n OPERATORS.IS_EMPTY,\n OPERATORS.IS_NOT_EMPTY,\n]);\nexport type DateOperator = z.infer<typeof DateOperatorSchema>;\n\n/**\n * Number operators - shorthand names for URL compatibility\n * Only operators that make sense for number filtering\n */\nexport const NumberOperatorSchema = z.enum([\n OPERATORS.EQUALS,\n OPERATORS.NOT_EQUALS,\n OPERATORS.GREATER_THAN,\n OPERATORS.GREATER_THAN_OR_EQUAL,\n OPERATORS.LESS_THAN,\n OPERATORS.LESS_THAN_OR_EQUAL,\n OPERATORS.BETWEEN,\n OPERATORS.IS_ONE_OF,\n OPERATORS.IS_NOT_ONE_OF,\n]);\nexport type NumberOperator = z.infer<typeof NumberOperatorSchema>;\n\n/**\n * Shared operator enum for equality comparisons (used by boolean and enum filters)\n */\nexport const EqualityOperatorSchema = z.enum([OPERATORS.EQUALS, OPERATORS.NOT_EQUALS]);\nexport type EqualityOperator = z.infer<typeof EqualityOperatorSchema>;\n\n/**\n * Shared operator enum for equality and array operations (used by enum filters)\n */\nexport const EqualityArrayOperatorSchema = z.enum([\n OPERATORS.EQUALS,\n OPERATORS.NOT_EQUALS,\n OPERATORS.IS_ONE_OF,\n OPERATORS.IS_NOT_ONE_OF,\n]);\nexport type EqualityArrayOperator = z.infer<typeof EqualityArrayOperatorSchema>;\n\n/**\n * Union type of all valid filter operators\n * Backend uses this instead of a full FilterOperatorSchema to enforce restricted operators\n */\nexport type AnyFilterOperator =\n | StringOperator\n | DateOperator\n | NumberOperator\n | EqualityOperator\n | EqualityArrayOperator;\n\n/**\n * Data type enum for filters (spec-compliant)\n */\nexport const DataTypeSchema = z.enum([\n 'string',\n 'number',\n 'date',\n 'boolean',\n 'enum',\n 'money',\n 'percentage',\n]);\nexport type DataType = z.infer<typeof DataTypeSchema>;\n\n/**\n * Base filter schema - spec-compliant structure\n * Field name is the object key, not part of the filter object\n * All filters must include: operator\n * Optional: value, values, caseSensitive\n * Type is inferred from registry using the field name (object key)\n */\nexport const BaseFilterSchema = z.object({\n operator: z.string(),\n value: z.any().optional(),\n values: z.array(z.any()).optional(),\n caseSensitive: z.boolean().optional(),\n});\n\nexport type BaseFilter = z.infer<typeof BaseFilterSchema>;\n\n/**\n * String filter input - Spec-compliant structure\n * Restricted operators: only operators that make sense for string filtering\n * Field name is the object key, type is inferred from registry\n *\n * Examples:\n * - Equality: { operator: \"eq\", value: \"search\" }\n * - Contains: { operator: \"contains\", value: \"search\", caseSensitive: false }\n * - Starts with: { operator: \"sw\", value: \"prefix\" }\n * - In array: { operator: \"in\", values: [\"option1\", \"option2\"] }\n */\nexport const StringFilterSchema = BaseFilterSchema.extend({\n operator: StringOperatorSchema,\n value: z.string().optional(),\n values: z.array(z.string()).optional(),\n caseSensitive: z.boolean().optional(),\n}).refine(\n (data) => {\n // Array operators require values array\n if (data.operator === OPERATORS.IS_ONE_OF || data.operator === OPERATORS.IS_NOT_ONE_OF) {\n return data.values !== undefined && data.values.length > 0;\n }\n // Other operators require value\n return data.value !== undefined;\n },\n {\n message:\n 'value is required for non-array operators, values array is required for in/notIn',\n },\n);\nexport type StringFilter = z.infer<typeof StringFilterSchema>;\n\n/**\n * Boolean filter input - Spec-compliant structure\n * Field name is the object key, type is inferred from registry\n *\n * Examples:\n * - Equality: { operator: \"eq\", value: true }\n * - Not equals: { operator: \"ne\", value: false }\n */\nexport const BooleanFilterSchema = BaseFilterSchema.extend({\n operator: EqualityOperatorSchema,\n value: z.boolean(),\n});\nexport type BooleanFilter = z.infer<typeof BooleanFilterSchema>;\n\n/**\n * Number filter input - Spec-compliant structure\n * Restricted operators: only operators that make sense for number filtering\n * Useful for ranges (credits > 100, priority <= 3, etc.)\n *\n * Examples:\n * - Equality: { field: \"age\", operator: \"eq\", value: 100, type: \"number\" }\n * - Greater than: { field: \"price\", operator: \"gt\", value: 100, type: \"number\" }\n * - Range: { field: \"score\", operator: \"gte\", value: 50, type: \"number\" }\n * - In array: { field: \"priority\", operator: \"in\", values: [1, 2, 3], type: \"number\" }\n */\nexport const NumberFilterSchema = BaseFilterSchema.extend({\n operator: NumberOperatorSchema,\n value: z.number().optional(),\n values: z.array(z.number()).optional(),\n})\n .refine(\n (data) => {\n // between operator requires exactly 2 values\n if (data.operator === OPERATORS.BETWEEN) {\n return data.values !== undefined && data.values.length === 2;\n }\n // Array operators require values array\n if (data.operator === OPERATORS.IS_ONE_OF || data.operator === OPERATORS.IS_NOT_ONE_OF) {\n return data.values !== undefined && data.values.length > 0;\n }\n // Other operators require value\n return data.value !== undefined;\n },\n {\n message:\n 'value is required for non-array operators, values array is required for in/notIn, exactly 2 values required for between',\n },\n )\n .refine(\n (data) => {\n // For between operator, values[0] must be <= values[1]\n if (data.operator === OPERATORS.BETWEEN && data.values && data.values.length === 2) {\n const [min, max] = data.values;\n return min !== undefined && max !== undefined && min <= max;\n }\n return true;\n },\n {\n message: 'For between operator, values[0] must be less than or equal to values[1]',\n path: ['values'],\n },\n );\nexport type NumberFilter = z.infer<typeof NumberFilterSchema>;\n\n/**\n * Date/DateTime string filter - Spec-compliant structure\n * Restricted operators: only operators that make sense for date filtering\n * Dates should be in ISO 8601 format: YYYY-MM-DD or full datetime\n *\n * Examples:\n * - Exact match: { field: \"createdAt\", operator: \"eq\", value: \"2024-01-01\", type: \"date\" }\n * - After date: { field: \"expiresAt\", operator: \"gte\", value: \"2024-01-01\", type: \"date\" }\n * - Before date: { field: \"deadline\", operator: \"lt\", value: \"2024-12-31\", type: \"date\" }\n * - Is empty: { field: \"deletedAt\", operator: \"isEmpty\", type: \"date\" } // No value property\n * - Is not empty: { field: \"publishedAt\", operator: \"isNotEmpty\", type: \"date\" } // No value property\n */\nexport const DateFilterSchema = z.union([\n // Null-check operators - no value property allowed\n BaseFilterSchema.extend({\n operator: z.enum([OPERATORS.IS_EMPTY, OPERATORS.IS_NOT_EMPTY]),\n }).refine((data) => data.value === undefined && data.values === undefined, {\n message: 'isEmpty and isNotEmpty operators must not have value or values properties',\n }),\n // between operator - exactly 2 values required\n BaseFilterSchema.extend({\n operator: z.literal(OPERATORS.BETWEEN),\n values: z.array(z.string()).length(2),\n })\n .refine((data) => data.values !== undefined && data.values.length === 2, {\n message: 'between operator requires exactly 2 values',\n })\n .refine(\n (data) => {\n if (data.values && data.values.length === 2) {\n const [startDate, endDate] = data.values;\n if (startDate !== undefined && endDate !== undefined) {\n // Parse dates and compare chronologically\n const date1 = new Date(startDate);\n const date2 = new Date(endDate);\n return date1 <= date2;\n }\n }\n return true;\n },\n {\n message:\n 'For between operator, values[0] must represent an earlier or equal date/time compared to values[1]',\n path: ['values'],\n },\n ),\n // Other operators - value required\n BaseFilterSchema.extend({\n operator: z.enum([\n OPERATORS.EQUALS,\n OPERATORS.NOT_EQUALS,\n OPERATORS.GREATER_THAN,\n OPERATORS.GREATER_THAN_OR_EQUAL,\n OPERATORS.LESS_THAN,\n OPERATORS.LESS_THAN_OR_EQUAL,\n ]),\n value: z.string(),\n }).refine((data) => data.value !== undefined, {\n message: 'value is required for non-null operators',\n }),\n]);\nexport type DateFilter = z.infer<typeof DateFilterSchema>;\n\n/**\n * Enum filter input - Spec-compliant structure\n * Supports both single value (eq/ne) and multiple values (in/notIn)\n * Field name is the object key, type is inferred from registry\n *\n * Usage: createEnumFilter(MyEnumSchema)\n *\n * Examples:\n * - Equality: { operator: \"eq\", value: \"OPTION_A\" }\n * - Not equals: { operator: \"ne\", value: \"OPTION_B\" }\n * - In array: { operator: \"in\", values: [\"OPTION_A\", \"OPTION_B\"] }\n * - Not in array: { operator: \"notIn\", values: [\"OPTION_C\", \"OPTION_D\"] }\n */\nexport function createEnumFilter<T extends z.ZodEnum<any>>(enumSchema: T) {\n return BaseFilterSchema.extend({\n operator: EqualityArrayOperatorSchema,\n value: enumSchema.optional(),\n values: z.array(enumSchema).optional(),\n }).refine(\n (data) => {\n // Array operators require values array\n if (data.operator === OPERATORS.IS_ONE_OF || data.operator === OPERATORS.IS_NOT_ONE_OF) {\n return data.values !== undefined && data.values.length > 0;\n }\n // Other operators require value\n return data.value !== undefined;\n },\n {\n message:\n 'value is required for non-array operators, values array is required for in/notIn',\n },\n );\n}\n\n/**\n * Filter configuration - Spec-compliant structure\n * Uses a flat object mapping field names to filter value objects\n * Field name is the object key, type is inferred from registry\n * All filters are combined with implicit AND logic\n * OR logic within a single field is supported through isOneOf/isNotOneOf operators\n *\n * Examples:\n * {\n * \"status\": { operator: \"eq\", value: \"active\" },\n * \"age\": { operator: \"gt\", value: 18 }\n * }\n */\nexport const FilterConfigSchema = z.record(z.string(), BaseFilterSchema);\n\nexport type FilterConfig = z.infer<typeof FilterConfigSchema>;\n","import { z } from 'zod';\n\n/**\n * Sort direction enum\n */\nexport const SortDirectionSchema = z.enum(['asc', 'desc']);\n\nexport const PaginationFiltersSchema = z.object({\n // Forward pagination\n first: z.number().min(1).max(100).optional(),\n after: z.string().optional(),\n\n // Sorting\n sortBy: z.string().optional(),\n sortDirection: SortDirectionSchema.optional(),\n\n // Pagination state token\n paginationToken: z.string().optional(),\n});\n\nexport const PageInfoSchema = z.object({\n hasNextPage: z.boolean(),\n hasPreviousPage: z.boolean(),\n prevPageCursor: z.string().nullish(),\n nextPageCursor: z.string().optional(),\n currentPageIndex: z.number().optional(),\n paginationToken: z.string().optional(),\n});\n\nexport function createPaginatedSchema<T extends z.ZodType>(itemSchema: T) {\n return z.object({\n items: z.array(itemSchema),\n pageInfo: PageInfoSchema,\n });\n}\n\nexport type PagedResult<T> = {\n items: T[];\n pageInfo: PageInfoDto;\n};\n\nexport type PaginationFiltersDto = z.infer<typeof PaginationFiltersSchema>;\nexport type PageInfoDto = z.infer<typeof PageInfoSchema>;\n","/**\n * Common regex patterns for validation\n */\n\n/**\n * Decimal amount regex - allows up to 2 decimal places\n * Matches: \"100\", \"100.00\", \"100.5\", \"0.99\", etc.\n * Also allows empty string for optional fields\n */\nexport const DECIMAL_AMOUNT_REGEX = /^((\\d*\\.?\\d{1,2}|\\d+)|)$/;\n\n/**\n * Decimal amount regex error message\n */\nexport const DECIMAL_AMOUNT_ERROR_MESSAGE =\n 'Must be a valid dollar amount with up to 2 decimal places or empty';\n\n/**\n * Decimal amount regex for 2 decimals or empty\n * Matches: \"100.00\", \"0.99\", \"1234.56\", etc. or empty string\n * Requires exactly 2 decimal places when not empty\n */\nexport const DECIMAL_AMOUNT_2_DECIMALS_OR_EMPTY_REGEX = /^((\\d*\\.?\\d{1,2}|\\d+)|)$/;\n\n/**\n * Decimal amount regex for 2 decimals or empty error message\n */\nexport const DECIMAL_AMOUNT_2_DECIMALS_OR_EMPTY_ERROR_MESSAGE =\n 'Must be a valid dollar amount with up to 2 decimal places or empty';\n","import { z } from 'zod';\n\nexport const USER_TYPES = ['consumer', 'lead', 'staff', 'super_admin'] as const;\n\nexport const DEFAULT_USER_TYPE = USER_TYPES[0];\n\nexport const UserTypeEnum = z.enum([...USER_TYPES]);\nexport type UserTypeValues = (typeof USER_TYPES)[number];\n","import { z } from 'zod';\nimport { UserTypeEnum } from './user_enums_zod';\n\nexport const createUserSchema = z.object({\n email: z\n .string()\n .trim()\n .toLowerCase()\n .min(3, 'Please enter your email.')\n .email('The email address is badly formatted.'),\n user_type: UserTypeEnum,\n password: z.string().optional().nullable(),\n});\n\nexport type CreateUserDto = z.infer<typeof createUserSchema>;\n\nexport const createUserSchemaOutput = z.object({\n id: z.string(),\n email: z.string(),\n});\n\nexport type CreateUserDtoOutput = z.infer<typeof createUserSchemaOutput>;\n","import { z } from 'zod';\nimport { DECIMAL_AMOUNT_ERROR_MESSAGE, DECIMAL_AMOUNT_REGEX } from '../common/regex_patterns';\n\nexport const CreditBalanceSchema = z.object({\n monthly: z.string(),\n rollover: z.string(),\n});\n\nexport const AddCreditsSchema = z.object({\n amount: z.string().regex(DECIMAL_AMOUNT_REGEX, DECIMAL_AMOUNT_ERROR_MESSAGE),\n reason: z.string().optional(),\n});\n\nexport const SetMonthlyAllocationSchema = z.object({\n amount: z.string().regex(DECIMAL_AMOUNT_REGEX, DECIMAL_AMOUNT_ERROR_MESSAGE),\n});\n\nexport const ResetMonthlyBalanceSchema = z.object({}).optional();\n\nexport type CreditBalanceDto = z.infer<typeof CreditBalanceSchema>;\nexport type AddCreditsDto = z.infer<typeof AddCreditsSchema>;\nexport type SetMonthlyAllocationDto = z.infer<typeof SetMonthlyAllocationSchema>;\nexport type ResetMonthlyBalanceDto = z.infer<typeof ResetMonthlyBalanceSchema>;\n","import { z } from 'zod';\nimport { createPaginatedSchema } from '../common/pagination_zod';\n\n/**\n * Transaction types for credit operations\n */\nexport const CreditTransactionTypeEnum = z.enum([\n 'DEDUCTION',\n 'REFUND',\n 'PURCHASE_ONETIME', // One-time purchase\n 'PURCHASE_RECURRING', // Recurring purchase\n 'ADJUSTMENT',\n]);\nexport type CreditTransactionType = z.infer<typeof CreditTransactionTypeEnum>;\n\n/**\n * Schema for a credit transaction record\n */\nexport const CreditTransactionReadSchema = z.object({\n id: z.string(),\n support_ticket_id: z.string().nullable().optional(),\n amount: z.string(), // Stored as text in database\n type: CreditTransactionTypeEnum,\n description: z.string().nullable().optional(), // Can be null in database\n balance_after: z.string(), // Stored as text in database\n created_at: z.string(),\n created_by: z.string(),\n});\nexport type CreditTransactionReadDto = z.infer<typeof CreditTransactionReadSchema>;\n\n/**\n * Paginated schema for credit transactions\n */\nexport const CreditTransactionPageSchema = createPaginatedSchema(CreditTransactionReadSchema);\nexport type CreditTransactionPageDto = z.infer<typeof CreditTransactionPageSchema>;\n","import { z } from 'zod';\nimport {\n createEnumFilter,\n DateFilterSchema,\n NumberFilterSchema,\n StringFilterSchema,\n} from '../common/filter_operators_zod';\nimport { PaginationFiltersSchema } from '../common/pagination_zod';\nimport { CreditTransactionTypeEnum } from './credit_transaction_read_zod';\n\n/**\n * Filters for querying credit transactions\n * Supports operator-based filtering for advanced queries\n *\n * All filters support operators for advanced filtering:\n * - Enums: eq, ne, in, notIn\n * - Strings: eq, ne, contains, startsWith, endsWith\n * - Numbers: eq, ne, gt, gte, lt, lte, between\n * - Dates: eq, ne, gt, gte, lt, lte, between\n *\n * Examples:\n * - { type: { operator: \"eq\", value: \"DEDUCTION\" } }\n * - { amount: { operator: \"gte\", value: 100 } }\n * - { created_at: { operator: \"gte\", value: \"2024-01-01\" } }\n */\nexport const CreditTransactionFiltersSchema = PaginationFiltersSchema.extend({\n type: createEnumFilter(CreditTransactionTypeEnum).optional(),\n support_ticket_id: StringFilterSchema.optional(),\n amount: NumberFilterSchema.optional(),\n balance_after: NumberFilterSchema.optional(),\n created_at: DateFilterSchema.optional(),\n created_by: StringFilterSchema.optional(),\n\n // Search object\n search: z\n .object({\n query: z.string(),\n searchableFields: z.array(z.string()),\n })\n .optional(),\n});\n\nexport type CreditTransactionFiltersDto = z.infer<typeof CreditTransactionFiltersSchema>;\n","import { z } from 'zod';\n\nexport const forgot_password_zod = z.object({\n email: z.string().email().trim().toLowerCase(),\n});\n\nexport type ForgotPasswordDto = z.infer<typeof forgot_password_zod>;\n","/**\n * Record type constants and types for the application\n * These define all the different types of records that can exist in the system\n */\n\n// Array of record type values for Zod enum creation\nexport const RecordTypeValues = [\n 'attachment_folder',\n 'attachment',\n 'user',\n 'user_session',\n 'user_profile',\n 'refresh_token',\n 'refresh_token_family',\n 'user_subscription',\n 'password_reset',\n 'record_version',\n 'support_ticket',\n 'support_ticket_activity',\n 'credit_transaction',\n 'team_member',\n 'client_contact',\n 'client_location',\n 'client_profile',\n 'business_profile',\n 'tracker',\n 'tracker_activity',\n 'team',\n 'quote',\n 'note',\n 'followup',\n 'saved_filter',\n 'user_pinned_preset',\n 'record_subscriber',\n 'support_staff',\n] as const;\n\n// Object form for backward compatibility and easier access\nexport const RecordConst = {\n ATTACHMENT: 'attachment',\n ATTACHMENT_FOLDER: 'attachment_folder',\n USER: 'user',\n USER_SESSION: 'user_session',\n USER_PROFILE: 'user_profile',\n REFRESH_TOKEN: 'refresh_token',\n REFRESH_TOKEN_FAMILY: 'refresh_token_family',\n USER_SUBSCRIPTION: 'user_subscription',\n PASSWORD_RESET: 'password_reset',\n RECORD_VERSION: 'record_version',\n SUPPORT_TICKET: 'support_ticket',\n SUPPORT_TICKET_ACTIVITY: 'support_ticket_activity',\n CREDIT_TRANSACTION: 'credit_transaction',\n TEAM_MEMBER: 'team_member',\n CLIENT_CONTACT: 'client_contact',\n CLIENT_LOCATION: 'client_location',\n CLIENT_PROFILE: 'client_profile',\n BUSINESS_PROFILE: 'business_profile',\n TRACKER: 'tracker',\n TRACKER_ACTIVITY: 'tracker_activity',\n TEAM: 'team',\n NOTE: 'note',\n FOLLOWUP: 'followup',\n SAVED_FILTER: 'saved_filter',\n USER_PINNED_PRESET: 'user_pinned_preset',\n RECORD_SUBSCRIBER: 'record_subscriber',\n SUPPORT_STAFF: 'support_staff',\n} as const;\n\nexport type RecordType = (typeof RecordTypeValues)[number];\n","import { z } from 'zod';\nimport { RecordTypeValues } from '../../types/record_types';\n\n// Create enum from RecordTypeValues array - fully type safe\nconst RecordTypeEnum = z.enum(RecordTypeValues);\n\nexport const NoteReadSchema = z.object({\n id: z.string(),\n record_id: z.string(),\n record_type: RecordTypeEnum,\n tag: z.string().optional().nullable(),\n title: z.string().optional().nullable(),\n body: z.string().optional().nullable(),\n original_id: z.number().optional().nullable(),\n is_internal: z.boolean(),\n created_by: z.string(),\n created_by_display_name: z.string().optional().nullable(),\n created_at: z.string(),\n updated_by: z.string().optional().nullable(),\n updated_by_display_name: z.string().optional().nullable(),\n updated_at: z.string().optional().nullable(),\n archived_by: z.string().optional().nullable(),\n archived_at: z.string().optional().nullable(),\n deleted_by: z.string().optional().nullable(),\n deleted_at: z.string().optional().nullable(),\n});\n\nexport type NoteReadDto = z.infer<typeof NoteReadSchema>;\n","import { z } from 'zod';\nimport { RecordTypeValues } from '../../types/record_types';\n\n// Create enum from RecordTypeValues array - fully type safe\nconst RecordTypeEnum = z.enum(RecordTypeValues);\n\nexport const NoteCreateSchema = z.object({\n record_id: z.string(),\n record_type: RecordTypeEnum,\n tag: z.string().optional().nullable(),\n title: z.string().optional().nullable(),\n body: z.string().optional().nullable(),\n original_id: z.number().optional().nullable(),\n is_internal: z.boolean().optional().default(false),\n});\n\nexport type NoteCreateDto = z.infer<typeof NoteCreateSchema>;\n","import { z } from 'zod';\nimport { RecordTypeValues } from '../../types/record_types';\n\n// Create enum from RecordTypeValues array - fully type safe\nconst RecordTypeEnum = z.enum(RecordTypeValues);\n\nexport const NoteUpdateSchema = z.object({\n id: z.string(),\n record_id: z.string().optional(),\n record_type: RecordTypeEnum.optional(),\n tag: z.string().optional().nullable(),\n title: z.string().optional().nullable(),\n body: z.string().optional().nullable(),\n original_id: z.number().optional().nullable(),\n is_internal: z.boolean().optional(),\n});\n\nexport type NoteUpdateDto = z.infer<typeof NoteUpdateSchema>;\n","import { z } from 'zod';\nimport { RecordTypeValues } from '../../types/record_types';\nimport {\n BooleanFilterSchema,\n createEnumFilter,\n DateFilterSchema,\n StringFilterSchema,\n} from '../common/filter_operators_zod';\nimport { PaginationFiltersSchema } from '../common/pagination_zod';\n\n// Create enum from RecordTypeValues array for filtering - fully type safe\nconst RecordTypeFilterEnum = z.enum(RecordTypeValues);\n\n/**\n * Filters for note\n * Supports operator-based filtering for advanced queries\n *\n * All filters support operators for advanced filtering:\n * - Booleans: eq, ne\n * - Strings: eq, ne, contains, startsWith, endsWith\n * - Dates: eq, ne, gt, gte, lt, lte\n *\n * Examples:\n * - { record_type: { operator: \"eq\", value: \"SUPPORT_TICKET\" } }\n * - { title: { operator: \"contains\", value: \"search\" } }\n */\nexport const NoteFiltersSchema = PaginationFiltersSchema.extend({\n // String filters\n record_id: StringFilterSchema.optional(),\n record_type: createEnumFilter(RecordTypeFilterEnum).optional(),\n title: StringFilterSchema.optional(),\n body: StringFilterSchema.optional(),\n tag: StringFilterSchema.optional(),\n\n // Date filters\n created_at: DateFilterSchema.optional(),\n updated_at: DateFilterSchema.optional(),\n\n // Boolean filters\n is_internal: BooleanFilterSchema.optional(),\n\n // Zinia search object\n search: z\n .object({\n query: z.string(),\n searchableFields: z.array(z.string()),\n })\n .optional(),\n});\n\nexport type NoteFiltersDto = z.infer<typeof NoteFiltersSchema>;\n\n// Sort direction enum for GraphQL\nexport const NoteFiltersSortDirectionEnum = z.enum(['asc', 'desc']);\nexport type NoteFiltersSortDirectionEnum = z.infer<typeof NoteFiltersSortDirectionEnum>;\n","import { z } from 'zod';\nimport { createPaginatedSchema, SortDirectionSchema } from './common/pagination_zod';\n\nimport { RecordTypeValues } from '../types/record_types';\nconst RecordTypeEnum = z.enum(RecordTypeValues);\n\nexport const recordVersionSchema = z.object({\n id: z.string(),\n record_id: z.string(),\n operation: z.string(),\n recorded_at: z.string(),\n record_type: z.string(),\n record: z.string().optional().nullable(),\n old_record: z.string().optional().nullable(),\n auth_uid: z.string().optional().nullable(),\n auth_role: z.string().optional().nullable(),\n auth_username: z.string().optional().nullable(),\n});\n\nexport type RecordVersionReadDto = z.infer<typeof recordVersionSchema>;\n\n// ===== LEGACY SCHEMAS (Keep for backward compatibility) =====\nexport const recordVersionPageSchema = z.object({\n items: z.array(recordVersionSchema),\n pageInfo: z.object({\n hasNextPage: z.boolean(),\n endCursor: z.string().optional().nullable(),\n }),\n});\n\nexport const pageInfoSchema = z.object({\n hasNextPage: z.boolean(),\n endCursor: z.string().optional().nullable(),\n});\n\nexport const recordVersionFiltersSchema = z.object({\n start_date: z.string().optional().nullable(),\n end_date: z.string().optional().nullable(),\n limit: z.number().optional().nullable(),\n cursor: z.string().optional().nullable(),\n});\n\nexport const recordVersionFiltersInputSchema = z.object({\n record_id: z.string(),\n /** @deprecated Use record_types in filters instead. record_types takes priority when both are provided. */\n record_type: RecordTypeEnum,\n filters: recordVersionFiltersSchema.optional().nullable(),\n});\n\n// Export inferred legacy types\nexport type RecordVersionFiltersDto = z.infer<typeof recordVersionFiltersSchema>;\nexport type RecordVersionPageDto = z.infer<typeof recordVersionPageSchema>;\nexport type RecordVersionPageInfoDto = z.infer<typeof pageInfoSchema>;\n\n// ===== NEW BREADCRUMB PAGINATION SCHEMAS =====\n\n/**\n * NEW: Breadcrumb-paginated record version response\n * Use this for new implementations\n * user_display_map: optional map of user_id -> display_name for timeline display (assigned_to, created_by, etc.)\n */\nexport const recordVersionPageBreadcrumbSchema = createPaginatedSchema(\n recordVersionSchema,\n).extend({\n user_display_map: z.record(z.string(), z.string()).optional(),\n});\n\n/**\n * NEW: Filters with breadcrumb pagination support\n * Extends PaginationFiltersSchema for consistent pagination\n */\nexport const recordVersionFiltersBreadcrumbSchema = z.object({\n // Pagination fields\n first: z.number().min(1).max(100).optional(),\n after: z.string().optional(),\n last: z.number().min(1).max(100).optional(),\n before: z.string().optional(),\n sortBy: z.string().optional(),\n sortDirection: SortDirectionSchema.optional(),\n paginationToken: z.string().optional(),\n // Record version specific filters\n start_date: z.string().optional().nullable(),\n end_date: z.string().optional().nullable(),\n /** When provided, fetches versions for these record types and merges. Takes priority over record_type. */\n record_types: z.array(RecordTypeEnum).min(1).optional(),\n /** When provided, fetches versions for these record IDs (e.g. tracker + followup IDs). Used for activity views. */\n record_ids: z.array(z.string()).min(1).optional(),\n});\n\nexport const recordVersionFiltersInputBreadcrumbSchema = z.object({\n record_id: z.string(),\n /** @deprecated Use record_types in filters instead. record_types takes priority when both are provided. */\n record_type: RecordTypeEnum,\n filters: recordVersionFiltersBreadcrumbSchema.optional().nullable(),\n});\n\n/** Input for listTrackerActivityVersions - tracker ID + optional filters */\nexport const recordVersionTrackerActivityInputSchema = z.object({\n tracker_id: z.string(),\n filters: recordVersionFiltersBreadcrumbSchema.optional().nullable(),\n});\n\n// Export inferred types\nexport type RecordVersionFiltersBreadcrumbDto = z.infer<\n typeof recordVersionFiltersBreadcrumbSchema\n>;\nexport type RecordVersionPageBreadcrumbDto = z.infer<typeof recordVersionPageBreadcrumbSchema>;\n","import { z } from 'zod';\n\n/**\n * Schema for creating a saved filter preset\n */\nexport const SavedFilterCreateSchema = z.object({\n name: z.string().min(1, 'Name is required').max(100),\n context: z.string().min(1, 'Context is required'),\n route_path: z.string().min(1, 'Route path is required'),\n filters: z.record(z.union([z.string(), z.array(z.string())])),\n sort_by: z.string().optional(),\n sort_direction: z.enum(['asc', 'desc']).optional(),\n});\n\nexport type SavedFilterCreateDto = z.infer<typeof SavedFilterCreateSchema>;\n","import { z } from 'zod';\nimport { SavedFilterCreateSchema } from './saved_filter_create_zod';\n\nexport const SavedFilterReadSchema = SavedFilterCreateSchema.extend({\n id: z.string(),\n user_id: z.string(),\n created_at: z.string(),\n updated_at: z.string().optional(),\n});\n\nexport type SavedFilterReadDto = z.infer<typeof SavedFilterReadSchema>;\n","import { z } from 'zod';\nimport { SavedFilterCreateSchema } from './saved_filter_create_zod';\n\nexport const SavedFilterUpdateSchema = SavedFilterCreateSchema.partial().extend({\n id: z.string(),\n});\n\nexport type SavedFilterUpdateDto = z.infer<typeof SavedFilterUpdateSchema>;\n","import { z } from 'zod';\nimport { isCommonPassword } from './login_zod';\n\nexport const resetPasswordInputSchema = z.object({\n passwords: z\n .object({\n password: z\n .string()\n // Minimum length of 8 characters (NIST requirement)\n .min(8, { message: 'Password must be at least 8 characters long' })\n // Maximum length of at least 64 characters (NIST recommendation)\n .max(64, { message: 'Password must not exceed 64 characters' })\n // No leading or trailing whitespace (Cloudflare requirement)\n .refine((password) => !/^\\s|\\s$/.test(password), {\n message: 'Password must not have leading or trailing whitespace',\n })\n // Not in common password list (NIST recommendation)\n .refine((password) => !isCommonPassword(password), {\n message: 'Password is too common and easily guessed',\n }),\n password_confirm: z.string().min(8),\n })\n .refine((data) => data.password === data.password_confirm, {\n message: 'Passwords do not match',\n path: ['password_confirm'],\n }),\n});\n\nexport const resetPasswordSchema = resetPasswordInputSchema.extend({\n // token from jwt\n token: z.string().min(20),\n});\n\nexport type ResetPasswordDto = z.infer<typeof resetPasswordSchema>;\nexport type ResetPasswordInputDto = z.infer<typeof resetPasswordInputSchema>;\n","import { z } from 'zod';\nimport { passwordSchema } from './login_zod';\n\nexport const signupSchema = z.object({\n email: z\n .string()\n .trim()\n .toLowerCase()\n .min(3, 'Please enter your email.')\n .email('The email address is badly formatted.'),\n passwords: z\n .object({\n password: passwordSchema,\n password_confirm: z.string().min(1),\n })\n .refine((data) => data.password === data.password_confirm, {\n message: 'Passwords do not match',\n path: ['password_confirm'],\n }),\n});\n\nexport type SignupInputDto = z.infer<typeof signupSchema>;\n","import { z } from 'zod';\nimport { RecordTypeValues } from '../../types/record_types';\n\nconst RecordTypeEnum = z.enum(RecordTypeValues);\n\nexport const RecordSubscriberCreateSchema = z.object({\n record_type: RecordTypeEnum,\n record_id: z.string().min(1, 'Record ID is required'),\n user_id: z.string().min(1, 'User ID is required'),\n subscribed_events: z.array(z.string()).optional().nullable(),\n});\n\nexport type RecordSubscriberCreateDto = z.infer<typeof RecordSubscriberCreateSchema>;\n","import { z } from 'zod';\nimport { RecordTypeValues } from '../../types/record_types';\n\nconst RecordTypeEnum = z.enum(RecordTypeValues);\n\nexport const RecordSubscriberReadSchema = z.object({\n id: z.string().min(1, 'ID is required'),\n record_type: RecordTypeEnum,\n record_id: z.string().min(1, 'Record ID is required'),\n user_id: z.string().min(1, 'User ID is required'),\n user_id_display_name: z.string().optional().nullable(),\n subscribed_events: z.array(z.string()).optional().nullable(),\n created_at: z.string(),\n created_by: z.string(),\n created_by_display_name: z.string().optional().nullable(),\n});\n\nexport type RecordSubscriberReadDto = z.infer<typeof RecordSubscriberReadSchema>;\n","import { z } from 'zod';\n\nexport const RecordSubscriberUpdateSchema = z.object({\n id: z.string().min(1, 'ID is required'),\n subscribed_events: z.array(z.string()).optional().nullable(),\n});\n\nexport type RecordSubscriberUpdateDto = z.infer<typeof RecordSubscriberUpdateSchema>;\n","import { z } from 'zod';\n\nexport const SupportTicketTypeEnum = [\n 'IMPROVEMENT',\n 'BUG',\n 'FEATURE_REQUEST',\n 'OPERATIONAL',\n] as const;\nexport const SupportTicketTypeSchema = z.enum(SupportTicketTypeEnum);\nexport type SupportTicketType = z.infer<typeof SupportTicketTypeSchema>;\n\nexport const SupportTicketPriorityEnum = ['LOW', 'MEDIUM', 'HIGH', 'CRITICAL'] as const;\nexport const SupportTicketPriorityNumberEnum = [1, 2, 3, 4] as const;\n\n// number type\nexport type SupportTicketPriorityNumberType = (typeof SupportTicketPriorityNumberEnum)[number];\n\n/**\n * Enum for feature request priority levels\n */\nexport const SupportTicketPrioritySchema = z.enum(SupportTicketPriorityEnum);\nexport type SupportTicketPriority = z.infer<typeof SupportTicketPrioritySchema>;\n\n/**\n * Numeric priority for create/update DTOs (1–4).\n * Used in forms and API input; read DTOs still return string for display.\n */\nexport const SupportTicketPriorityNumberSchema = z\n .number()\n .int()\n .min(1, 'Priority must be between 1 and 4')\n .max(4, 'Priority must be between 1 and 4');\nexport type SupportTicketPriorityNumber = z.infer<typeof SupportTicketPriorityNumberSchema>;\n\n/**\n * Numeric mapping for DB storage and proper sorting.\n * Higher number = higher priority.\n */\nexport const SUPPORT_TICKET_PRIORITY_TO_NUMBER: Record<\n SupportTicketPriority,\n SupportTicketPriorityNumberType\n> = {\n LOW: 1,\n MEDIUM: 2,\n HIGH: 3,\n CRITICAL: 4,\n};\n\nexport const SUPPORT_TICKET_NUMBER_TO_PRIORITY: Record<number, SupportTicketPriority> = {\n 1: 'LOW',\n 2: 'MEDIUM',\n 3: 'HIGH',\n 4: 'CRITICAL',\n};\n\nexport function supportTicketPriorityToNumber(priority: SupportTicketPriority): number {\n return SUPPORT_TICKET_PRIORITY_TO_NUMBER[priority];\n}\n\nexport function supportTicketNumberToPriority(num: number): SupportTicketPriority {\n const p = SUPPORT_TICKET_NUMBER_TO_PRIORITY[num];\n if (!p) return 'MEDIUM'; // fallback for invalid values\n return p;\n}\n\n/**\n * Label/value options for priority filter dropdowns (Zinia columns)\n */\nexport const SUPPORT_TICKET_PRIORITY_FILTER_OPTIONS = [\n { label: 'Low', value: 1 },\n { label: 'Medium', value: 2 },\n { label: 'High', value: 3 },\n { label: 'Critical', value: 4 },\n] as const;\n\n/**\n * Maps numeric priority (1–4) to display label for Zinia SelectField.\n * Use with valueToLabel + valueType: 'number' for number-backed select fields.\n */\nexport const SUPPORT_TICKET_PRIORITY_NUMBER_TO_LABEL: Record<number, string> = {\n 1: 'Low',\n 2: 'Medium',\n 3: 'High',\n 4: 'Critical',\n};\n\n/**\n * Enum for customer-facing support_ticket status (computed from approval_status + dev_lifecycle)\n * - PENDING: Awaiting admin review\n * - FOLLOWUP: Approved but not started\n * - IN_PROGRESS: Actively being worked on\n * - VERIFICATION: Work deployed; consumer should verify and leave a comment\n * - COMPLETED: Deployed to production and verified\n * - CANCELLED: Rejected by admin\n */\nexport const SupportTicketStatusEnum = [\n 'PENDING',\n 'FOLLOWUP',\n 'IN_PROGRESS',\n 'VERIFICATION',\n 'COMPLETED',\n 'CANCELLED',\n] as const;\n\nexport const SupportTicketStatusSchema = z.enum(SupportTicketStatusEnum);\nexport type SupportTicketStatus = z.infer<typeof SupportTicketStatusSchema>;\n\n/**\n * Enum for feature request approval status\n * - PENDING: Awaiting staff decision (customer-submitted)\n * - APPROVED: Approved by staff (with customer credits)\n * - REJECTED: Rejected by staff\n * - INTERNAL: Internal staff support_ticket (no approval/credits needed)\n */\nexport const SupportTicketApprovalEnum = [\n 'PENDING',\n 'APPROVED',\n 'REJECTED',\n 'INTERNAL',\n] as const;\n\nexport const SupportTicketApprovalSchema = z.enum(SupportTicketApprovalEnum);\nexport type SupportTicketApproval = z.infer<typeof SupportTicketApprovalSchema>;\n\n/**\n * Enum for internal development lifecycle stages\n * - BACKLOG: Approved but not started\n * - PLANNING: Scoping/design phase\n * - DEVELOPMENT: Actively coding\n * - CODE_REVIEW: In review\n * - TESTING: QA testing\n * - STAGING: On staging environment\n * - PO_APPROVAL: Waiting for PO/customer sign-off\n * - VERIFICATION: Deployed; waiting for consumer to verify and leave a comment\n * - DEPLOYED: Live in production and verified\n * - CANCELLED: Internal task cancelled (only for INTERNAL approval status)\n */\nexport const SupportTicketDevLifecycleEnum = [\n 'PENDING',\n 'BACKLOG',\n 'PLANNING',\n 'DEVELOPMENT',\n 'CODE_REVIEW',\n 'TESTING',\n 'STAGING',\n 'PO_APPROVAL',\n 'VERIFICATION',\n 'DEPLOYED',\n 'CANCELLED',\n] as const;\n\nexport const SupportTicketDevLifecycleSchema = z.enum(SupportTicketDevLifecycleEnum);\nexport type SupportTicketDevLifecycle = z.infer<typeof SupportTicketDevLifecycleSchema>;\n\n/**\n * Dev lifecycle stages that can be manually set via update form\n * Excludes workflow-only stages:\n * - PENDING: Set by revert workflow\n * - DEPLOYED: Set by completeSupportTicket workflow\n * Staff can manually progress through: BACKLOG → PLANNING → DEVELOPMENT → CODE_REVIEW → TESTING → STAGING → PO_APPROVAL → VERIFICATION\n */\nexport const SupportTicketDevLifecycleUpdateEnum = [\n 'BACKLOG',\n 'PLANNING',\n 'DEVELOPMENT',\n 'CODE_REVIEW',\n 'TESTING',\n 'STAGING',\n 'PO_APPROVAL',\n 'VERIFICATION',\n] as const;\n\nexport const SupportTicketDevLifecycleUpdateSchema = z.enum(\n SupportTicketDevLifecycleUpdateEnum,\n);\nexport type SupportTicketDevLifecycleUpdate = z.infer<\n typeof SupportTicketDevLifecycleUpdateSchema\n>;\n\n/**\n * Label/value options for type, approval, dev lifecycle, and status filter dropdowns\n */\nexport const SUPPORT_TICKET_TYPE_FILTER_OPTIONS: Array<{\n label: string;\n value: (typeof SupportTicketTypeEnum)[number];\n}> = [\n { label: 'Bug', value: 'BUG' },\n { label: 'Feature', value: 'FEATURE_REQUEST' },\n { label: 'Improvement', value: 'IMPROVEMENT' },\n { label: 'Operational', value: 'OPERATIONAL' },\n];\n\nexport const SUPPORT_TICKET_APPROVAL_FILTER_OPTIONS: Array<{\n label: string;\n value: (typeof SupportTicketApprovalEnum)[number];\n}> = [\n { label: 'Pending', value: 'PENDING' },\n { label: 'Approved', value: 'APPROVED' },\n { label: 'Rejected', value: 'REJECTED' },\n { label: 'Internal', value: 'INTERNAL' },\n];\n\nexport const SUPPORT_TICKET_DEV_LIFECYCLE_FILTER_OPTIONS: Array<{\n label: string;\n value: (typeof SupportTicketDevLifecycleEnum)[number];\n}> = [\n { label: 'Pending', value: 'PENDING' },\n { label: 'Backlog', value: 'BACKLOG' },\n { label: 'Planning', value: 'PLANNING' },\n { label: 'Dev', value: 'DEVELOPMENT' },\n { label: 'Review', value: 'CODE_REVIEW' },\n { label: 'Testing', value: 'TESTING' },\n { label: 'Staging', value: 'STAGING' },\n { label: 'PO Approval', value: 'PO_APPROVAL' },\n { label: 'Verification', value: 'VERIFICATION' },\n { label: 'Live', value: 'DEPLOYED' },\n { label: 'Cancelled', value: 'CANCELLED' },\n];\n\nexport const SUPPORT_TICKET_STATUS_FILTER_OPTIONS: Array<{\n label: string;\n value: (typeof SupportTicketStatusEnum)[number];\n}> = [\n { label: 'Pending', value: 'PENDING' },\n { label: 'Todo', value: 'FOLLOWUP' },\n { label: 'Active', value: 'IN_PROGRESS' },\n { label: 'Verification', value: 'VERIFICATION' },\n { label: 'Done', value: 'COMPLETED' },\n { label: 'Cancelled', value: 'CANCELLED' },\n];\n\n/**\n * Filter-specific enum instances\n * These are separate Zod objects with the same values as above,\n * allowing GraphQL to generate distinct enum types for filters vs domain objects\n */\nexport const SupportTicketTypeFilterSchema = z.enum(SupportTicketTypeEnum);\nexport const SupportTicketPriorityFilterSchema = z.enum(SupportTicketPriorityEnum);\nexport const SupportTicketStatusFilterSchema = z.enum(SupportTicketStatusEnum);\nexport const SupportTicketApprovalFilterSchema = z.enum(SupportTicketApprovalEnum);\nexport const SupportTicketDevLifecycleFilterSchema = z.enum(SupportTicketDevLifecycleEnum);\n","import { z } from 'zod';\nimport {\n SUPPORT_TICKET_PRIORITY_TO_NUMBER,\n SupportTicketPriorityNumberSchema,\n SupportTicketTypeSchema,\n} from '../support_ticket_shared/support_ticket_enums_zod';\n\n/**\n * Schema for creating new support_ticket (customer)\n */\nexport const CustomerSupportTicketCreateSchema = z.object({\n title: z\n .string()\n .min(5, 'Please add a more descriptive title (at least 5 characters)')\n .max(256, 'Title is too long - keep it brief (under 256 characters)'),\n description: z.string().optional().nullable(),\n type: SupportTicketTypeSchema.default('FEATURE_REQUEST'),\n priority: SupportTicketPriorityNumberSchema.default(SUPPORT_TICKET_PRIORITY_TO_NUMBER.MEDIUM),\n});\nexport type CustomerSupportTicketCreateDto = z.infer<typeof CustomerSupportTicketCreateSchema>;\n\n/**\n * Schema for updating support_ticket (customer - PENDING items only)\n */\nexport const CustomerSupportTicketUpdateSchema = CustomerSupportTicketCreateSchema.extend({\n id: z.string(),\n});\nexport type CustomerSupportTicketUpdateDto = z.infer<typeof CustomerSupportTicketUpdateSchema>;\n","import { z } from 'zod';\nimport { createPaginatedSchema } from '../../common/pagination_zod';\nimport { RecordSubscriberReadSchema } from '../../record_subscriber';\nimport {\n SupportTicketPrioritySchema,\n SupportTicketStatusSchema,\n SupportTicketTypeSchema,\n} from '../support_ticket_shared/support_ticket_enums_zod';\n\n/**\n * Customer-specific read schema - ONLY includes fields customers can see\n * Excludes all staff-only fields like internalNotes, devLifecycle, timeline tracking, etc.\n */\nexport const CustomerSupportTicketReadSchema = z.object({\n id: z.string(),\n display_id: z.string().optional().nullable(),\n display_id_prefix: z.string().optional().nullable(),\n\n // Basic fields\n title: z.string(),\n description: z.string(),\n type: SupportTicketTypeSchema,\n priority: SupportTicketPrioritySchema,\n\n // Status fields (customer-facing only)\n status: SupportTicketStatusSchema,\n is_locked: z.boolean(),\n\n // Requester info (derived from created_by lookup)\n created_by_display_name: z.string().optional().nullable(),\n\n // Financial info (what they're charged)\n credit_value: z.string().optional().nullable(),\n\n // Timeline tracking\n start_at: z.string().optional().nullable(),\n target_at: z.string().optional().nullable(),\n completed_at: z.string().optional().nullable(),\n locked_approval_at: z.string().optional().nullable(),\n\n created_by: z.string().optional().nullable(),\n created_at: z.string().optional().nullable(),\n updated_by: z.string().optional().nullable(),\n updated_at: z.string().optional().nullable(),\n archived_at: z.string().optional().nullable(),\n\n // Current user's subscription (null if not subscribed). Only populated for single-ticket fetch.\n my_subscription: RecordSubscriberReadSchema.nullable().optional(),\n});\nexport type CustomerSupportTicketReadDto = z.infer<typeof CustomerSupportTicketReadSchema>;\n\n/**\n * Paginated customer support_ticket response\n */\nexport const CustomerSupportTicketPageSchema = createPaginatedSchema(\n CustomerSupportTicketReadSchema,\n);\nexport type CustomerSupportTicketPageDto = z.infer<typeof CustomerSupportTicketPageSchema>;\n","import { z } from 'zod';\nimport {\n BooleanFilterSchema,\n createEnumFilter,\n DateFilterSchema,\n NumberFilterSchema,\n StringFilterSchema,\n} from '../../common/filter_operators_zod';\nimport { PaginationFiltersSchema } from '../../common/pagination_zod';\nimport {\n SupportTicketStatusFilterSchema,\n SupportTicketTypeFilterSchema,\n} from '../support_ticket_shared/support_ticket_enums_zod';\n\n/**\n * Customer-facing filters for support_ticket\n * Includes all fields customers can see and filter on\n *\n * - Cannot filter by internal fields (isInternalOnly, approvalStatus, devLifecycle)\n * - Can filter on all visible fields including credits, requester info, etc.\n */\nexport const CustomerSupportTicketFiltersSchema = PaginationFiltersSchema.extend({\n // Enum filters\n type: createEnumFilter(SupportTicketTypeFilterSchema).optional(),\n status: createEnumFilter(SupportTicketStatusFilterSchema).optional(),\n priority: NumberFilterSchema.optional(),\n\n // String filters\n title: StringFilterSchema.optional(),\n description: StringFilterSchema.optional(),\n created_by: StringFilterSchema.optional(),\n\n // Boolean filters\n is_locked: BooleanFilterSchema.optional(),\n\n // Number filters (for credits)\n credit_value: NumberFilterSchema.optional(),\n\n // Date filters (audit)\n created_at: DateFilterSchema.optional(),\n updated_at: DateFilterSchema.optional(),\n\n // Date filters (timeline tracking)\n start_at: DateFilterSchema.optional(),\n target_at: DateFilterSchema.optional(),\n completed_at: DateFilterSchema.optional(),\n\n // Zinia search object\n search: z\n .object({\n query: z.string(),\n searchableFields: z.array(z.string()),\n })\n .optional(),\n});\n\nexport type CustomerSupportTicketFiltersDto = z.infer<\n typeof CustomerSupportTicketFiltersSchema\n>;\n","import { z } from 'zod';\nimport { createPaginatedSchema } from '../../common/pagination_zod';\nimport {\n SupportTicketApprovalSchema,\n SupportTicketDevLifecycleSchema,\n SupportTicketPrioritySchema,\n SupportTicketStatusSchema,\n SupportTicketTypeSchema,\n} from '../support_ticket_shared/support_ticket_enums_zod';\n\n/**\n * Staff-specific read schema - includes ALL fields including staff-only data\n * This is what staff see when they query support_ticket (includes internal notes, dev lifecycle, etc.)\n */\nexport const StaffSupportTicketReadSchema = z.object({\n id: z.string(),\n display_id: z.string().optional().nullable(),\n display_id_prefix: z.string().optional().nullable(),\n\n // Basic fields\n title: z.string(),\n description: z.string(),\n type: SupportTicketTypeSchema,\n priority: SupportTicketPrioritySchema,\n\n // Status fields\n status: SupportTicketStatusSchema,\n approval_status: SupportTicketApprovalSchema,\n is_locked: z.boolean(),\n can_delete: z.boolean(),\n // Note: isInternalOnly removed - use approvalStatus === 'INTERNAL' instead\n\n // Requester (derived from created_by lookup)\n created_by_display_name: z.string().optional().nullable(),\n\n // Assigned triage person (user_id)\n assigned_to: z.string().optional().nullable(),\n assigned_to_display_name: z.string().optional().nullable(),\n\n // Note: customerNotes and internalNotes are stored in record_versions table\n // Query record_versions with record_type=SUPPORT_TICKET_CUSTOMER_NOTE or SUPPORT_TICKET_INTERNAL_NOTE\n\n // Staff-only fields\n dev_lifecycle: SupportTicketDevLifecycleSchema.optional().nullable(),\n\n // Workflow/financial fields\n credit_value: z.string().optional().nullable(),\n delivered_value: z.string().optional().nullable(),\n\n // Timeline tracking\n start_at: z.string().optional().nullable(),\n target_at: z.string().optional().nullable(),\n completed_at: z.string().optional().nullable(),\n locked_approval_at: z.string().optional().nullable(),\n\n // System metadata\n created_by: z.string().optional().nullable(),\n created_at: z.string().optional().nullable(),\n updated_by: z.string().optional().nullable(),\n updated_by_display_name: z.string().optional().nullable(),\n updated_at: z.string().optional().nullable(),\n archived_at: z.string().optional().nullable(),\n archived_by: z.string().optional().nullable(),\n});\nexport type StaffSupportTicketReadDto = z.infer<typeof StaffSupportTicketReadSchema>;\n\n/**\n * Paginated staff support_ticket response\n */\nexport const StaffSupportTicketPageSchema = createPaginatedSchema(\n StaffSupportTicketReadSchema,\n);\nexport type StaffSupportTicketPageDto = z.infer<typeof StaffSupportTicketPageSchema>;\n","import { z } from 'zod';\nimport {\n BooleanFilterSchema,\n createEnumFilter,\n DateFilterSchema,\n NumberFilterSchema,\n StringFilterSchema,\n} from '../../common/filter_operators_zod';\nimport { PaginationFiltersSchema } from '../../common/pagination_zod';\nimport {\n SupportTicketApprovalFilterSchema,\n SupportTicketDevLifecycleFilterSchema,\n SupportTicketStatusFilterSchema,\n SupportTicketTypeFilterSchema,\n} from '../support_ticket_shared/support_ticket_enums_zod';\n\n/**\n * Staff/Admin filters for support_ticket\n * Full access to all filtering capabilities including internal fields\n *\n * All filters support operators for advanced filtering:\n * - Enums: eq, ne\n * - Booleans: eq, ne\n * - Strings: eq, ne, contains, startsWith, endsWith\n * - Numbers: eq, ne, gt, gte, lt, lte\n * - Dates: eq, ne, gt, gte, lt, lte\n *\n * Examples:\n * - { type: { operator: \"eq\", value: \"BUG\" } }\n * - { approvalStatus: { operator: \"eq\", value: \"INTERNAL\" } } // Filter for internal tasks\n * - { title: { operator: \"contains\", value: \"search\" } }\n * - { creditValue: { operator: \"gte\", value: 100 } }\n * - { createdAt: { operator: \"gte\", value: \"2024-01-01\" } }\n */\nexport const StaffSupportTicketFiltersSchema = PaginationFiltersSchema.extend({\n // Enum filters (using dedicated filter enum instances)\n type: createEnumFilter(SupportTicketTypeFilterSchema).optional(),\n status: createEnumFilter(SupportTicketStatusFilterSchema).optional(),\n approval_status: createEnumFilter(SupportTicketApprovalFilterSchema).optional(),\n priority: NumberFilterSchema.optional(),\n dev_lifecycle: createEnumFilter(SupportTicketDevLifecycleFilterSchema).optional(),\n\n // String filters\n created_by: StringFilterSchema.optional(),\n title: StringFilterSchema.optional(),\n description: StringFilterSchema.optional(),\n\n // Boolean filters\n is_locked: BooleanFilterSchema.optional(),\n // Note: isInternalOnly removed - use approval_status filter with value 'INTERNAL' instead\n\n // Number filters (for credits)\n credit_value: NumberFilterSchema.optional(),\n delivered_value: NumberFilterSchema.optional(),\n\n // Date filters (audit)\n created_at: DateFilterSchema.optional(),\n updated_at: DateFilterSchema.optional(),\n\n // Date filters (timeline tracking)\n start_at: DateFilterSchema.optional(),\n target_at: DateFilterSchema.optional(),\n completed_at: DateFilterSchema.optional(),\n\n // Zinia search object\n search: z\n .object({\n query: z.string(),\n searchableFields: z.array(z.string()),\n })\n .optional(),\n});\n\nexport type StaffSupportTicketFiltersDto = z.infer<typeof StaffSupportTicketFiltersSchema>;\n","import { z } from 'zod';\nimport {\n DECIMAL_AMOUNT_2_DECIMALS_OR_EMPTY_ERROR_MESSAGE,\n DECIMAL_AMOUNT_2_DECIMALS_OR_EMPTY_REGEX,\n DECIMAL_AMOUNT_ERROR_MESSAGE,\n DECIMAL_AMOUNT_REGEX,\n} from '../../common/regex_patterns';\nimport {\n SupportTicketDevLifecycleUpdateSchema,\n SupportTicketPriorityNumberSchema,\n SupportTicketTypeSchema,\n} from '../support_ticket_shared/support_ticket_enums_zod';\n\n/**\n * Base schema for staff support_ticket updates (general editing)\n *\n * Workflow-specific fields NOT included here:\n * - approvalStatus: Use approve/reject/revert workflows, or set to INTERNAL at creation\n *\n * Note: completeSupportTicket workflow sets deliveredValue + completedAt initially,\n * but they can be adjusted here afterwards for corrections.\n *\n * Business rules validated in backend:\n * - Can't edit creditValue unless PENDING (INTERNAL support_ticket can't have credits)\n * - Can't edit devLifecycle unless APPROVED or INTERNAL\n * - Can't edit deliveredValue unless DEPLOYED\n * - Can't edit completedAt unless DEPLOYED\n * - etc.\n */\nconst StaffSupportTicketInputBaseSchema = z.object({\n // Basic fields (editable in any state except REJECTED)\n title: z\n .string()\n .min(5, 'Please add a more descriptive title (at least 5 characters)')\n .max(256, 'Title is too long - keep it brief (under 256 characters)'),\n description: z.string().optional().nullable(),\n type: SupportTicketTypeSchema,\n priority: SupportTicketPriorityNumberSchema,\n\n // Dev lifecycle (editable when APPROVED or INTERNAL)\n dev_lifecycle: SupportTicketDevLifecycleUpdateSchema.optional(),\n\n // Credit estimation (editable only when PENDING)\n credit_value: z\n .string()\n .regex(DECIMAL_AMOUNT_REGEX, DECIMAL_AMOUNT_ERROR_MESSAGE)\n .optional()\n .nullable(),\n\n // Delivered value (editable only when DEPLOYED, for corrections)\n delivered_value: z\n .string()\n .regex(\n DECIMAL_AMOUNT_2_DECIMALS_OR_EMPTY_REGEX,\n DECIMAL_AMOUNT_2_DECIMALS_OR_EMPTY_ERROR_MESSAGE,\n )\n .optional()\n .nullable(),\n\n // Timeline planning (editable before DEVELOPMENT starts)\n start_at: z\n .string()\n .regex(/\\d{4}-\\d{2}-\\d{2}/, 'Date must be in the format YYYY-MM-DD')\n .optional()\n .nullable(),\n target_at: z\n .string()\n .regex(/\\d{4}-\\d{2}-\\d{2}/, 'Date must be in the format YYYY-MM-DD')\n .optional()\n .nullable(),\n\n // Completion date (editable only when DEPLOYED, for corrections)\n completed_at: z\n .string()\n .regex(/\\d{4}-\\d{2}-\\d{2}/, 'Date must be in the format YYYY-MM-DD')\n .optional()\n .nullable(),\n\n // Assigned triage person (user_id)\n assigned_to: z.string().optional().nullable(),\n});\n\n// Create schema allows is_internal flag (converted to approvalStatus in backend)\nexport const StaffSupportTicketCreateSchema = StaffSupportTicketInputBaseSchema.extend({\n is_internal: z.boolean().optional(), // If true, set approvalStatus='INTERNAL', else 'PENDING'\n});\nexport type StaffSupportTicketCreateDto = z.infer<typeof StaffSupportTicketCreateSchema>;\n\n// Update schema includes an ID\nexport const StaffSupportTicketUpdateSchema = StaffSupportTicketInputBaseSchema.extend({\n id: z.string(),\n});\nexport type StaffSupportTicketUpdateDto = z.infer<typeof StaffSupportTicketUpdateSchema>;\n\n// Legacy export for backwards compatibility (alias for update)\nexport const StaffSupportTicketInputSchema = StaffSupportTicketUpdateSchema;\nexport type StaffSupportTicketInputDto = StaffSupportTicketUpdateDto;\n","import { z } from 'zod';\nimport {\n DECIMAL_AMOUNT_ERROR_MESSAGE,\n DECIMAL_AMOUNT_REGEX,\n} from '../../common/regex_patterns';\n\n/**\n * Staff workflow schemas\n * These are for critical state transitions in the support_ticket lifecycle\n */\n\n/**\n * Approve support_ticket (PENDING → APPROVED)\n * Deducts credits and sets dev_lifecycle to BACKLOG\n * credit_value is required - can be set/updated in the approve flow\n */\nexport const ApproveSupportTicketSchema = z.object({\n id: z.string(),\n credit_value: z\n .string()\n .min(0, 'Credit value is required to approve')\n .regex(DECIMAL_AMOUNT_REGEX, DECIMAL_AMOUNT_ERROR_MESSAGE)\n .refine((val) => parseFloat(val) >= 0, 'Must be 0 or greater'),\n});\nexport type ApproveSupportTicketDto = z.infer<typeof ApproveSupportTicketSchema>;\n\n/**\n * Reject support_ticket (PENDING → REJECTED)\n * Locks the support_ticket without deducting credits\n */\nexport const RejectSupportTicketSchema = z.object({\n id: z.string(),\n});\nexport type RejectSupportTicketDto = z.infer<typeof RejectSupportTicketSchema>;\n\n/**\n * Revert support_ticket (APPROVED/REJECTED → PENDING)\n * Refunds credits if applicable and unlocks the support_ticket\n */\nexport const RevertSupportTicketSchema = z.object({\n id: z.string(),\n});\nexport type RevertSupportTicketDto = z.infer<typeof RevertSupportTicketSchema>;\n\n/**\n * Complete support_ticket (devLifecycle → DEPLOYED)\n * Marks support_ticket as deployed and captures actual delivered value\n * Auto-sets completedAt timestamp\n */\nexport const CompleteSupportTicketSchema = z.object({\n id: z.string(),\n delivered_value: z\n .string()\n .regex(\n /^(\\d*\\.?\\d{1,2}|\\d+)$/,\n 'Must be a valid dollar amount with up to 2 decimal places',\n ),\n});\nexport type CompleteSupportTicketDto = z.infer<typeof CompleteSupportTicketSchema>;\n\n/**\n * Delete support_ticket (soft delete)\n * Cannot delete APPROVED tickets (charged to customer)\n * Can delete PENDING, REJECTED, INTERNAL tickets\n */\nexport const DeleteSupportTicketSchema = z.object({\n id: z.string(),\n});\nexport type DeleteSupportTicketDto = z.infer<typeof DeleteSupportTicketSchema>;\n\n/**\n * Cancel internal task (devLifecycle → CANCELLED)\n * Only for INTERNAL approval_status tickets\n * Customer tickets use reject workflow instead\n */\nexport const CancelInternalTaskSchema = z.object({\n id: z.string(),\n});\nexport type CancelInternalTaskDto = z.infer<typeof CancelInternalTaskSchema>;\n\n/**\n * Reactivate terminal internal task (CANCELLED or DEPLOYED → BACKLOG)\n * Only for INTERNAL approval_status tickets with dev_lifecycle = CANCELLED or DEPLOYED\n * Clears completed_at timestamp and reopens task for more work\n */\nexport const ReactivateInternalTaskSchema = z.object({\n id: z.string(),\n});\nexport type ReactivateInternalTaskDto = z.infer<typeof ReactivateInternalTaskSchema>;\n\n/**\n * Archive support ticket (COMPLETED only)\n * Only completed tickets (dev_lifecycle = DEPLOYED) can be archived.\n * Archiving locks comments for both customer and staff.\n */\nexport const ArchiveSupportTicketSchema = z.object({\n id: z.string(),\n});\nexport type ArchiveSupportTicketDto = z.infer<typeof ArchiveSupportTicketSchema>;\n","import { z } from 'zod';\n\nexport const SupportTicketEventTypeValues = [\n 'TICKET_CREATED',\n 'TICKET_ASSIGNED',\n 'TICKET_UPDATED',\n 'APPROVAL_STATUS_CHANGED',\n 'DEV_LIFECYCLE_CHANGED',\n 'PRIORITY_CHANGED',\n 'NEW_CUSTOMER_NOTE',\n 'NEW_INTERNAL_NOTE',\n 'NEW_FOLLOWUP',\n 'FOLLOWUP_COMPLETED',\n] as const;\n\nexport const SupportTicketEventTypeEnum = z.enum(SupportTicketEventTypeValues);\nexport type SupportTicketEventType =\n (typeof SupportTicketEventTypeValues)[number];\n","import { z } from 'zod';\nimport { SupportTicketEventTypeEnum } from './support_ticket_event_types_zod';\n\n/** Support-ticket-specific create input: uses support_ticket_id instead of generic record_type/record_id */\nexport const SupportTicketSubscriberCreateSchema = z.object({\n support_ticket_id: z.string().min(1, 'Support ticket ID is required'),\n user_id: z.string().min(1, 'User ID is required'),\n subscribed_events: z\n .array(SupportTicketEventTypeEnum)\n .optional()\n .nullable(),\n});\n\nexport type SupportTicketSubscriberCreateDto = z.infer<\n typeof SupportTicketSubscriberCreateSchema\n>;\n","import { z } from 'zod';\n\n/**\n * Schema for support ticket record data in enriched contexts\n * This defines the minimal fields needed for display/enrichment\n * Includes id for mapping purposes, even though it's also in record_id\n */\nexport const SupportTicketRecordDataSchema = z.object({\n id: z.string(),\n display_id: z.string().optional().nullable(),\n title: z.string(),\n});\n\n/**\n * Type for support ticket enrichment data (non-nullable version for enrichment)\n */\nexport type SupportTicketEnrichmentData = z.infer<typeof SupportTicketRecordDataSchema>;\n","import { z } from 'zod';\n\n// No specific enums needed for Team based on the C# model\n// This file is created for consistency with the pattern\nexport const TeamStatusSchema = z.enum(['active', 'inactive']).describe('TeamStatus');\n\nexport type TeamStatus = z.infer<typeof TeamStatusSchema>;\n","import { z } from 'zod';\nimport {\n BooleanFilterSchema,\n DateFilterSchema,\n StringFilterSchema,\n} from '../common/filter_operators_zod';\nimport { PaginationFiltersSchema } from '../common/pagination_zod';\n\n/**\n * Filters for teams\n *\n * All filters support operators for advanced filtering:\n * - Booleans: eq, ne\n * - Strings: eq, ne, contains, startsWith, endsWith\n * - Dates: eq, ne, gt, gte, lt, lte\n *\n * Examples:\n * - { display_name: { operator: \"contains\", value: \"search\" } }\n * - { contact_email: { operator: \"eq\", value: \"test@example.com\" } }\n * - { created_at: { operator: \"gte\", value: \"2024-01-01\" } }\n */\nexport const TeamFiltersSchema = PaginationFiltersSchema.extend({\n // String filters\n unique_name: StringFilterSchema.optional(),\n display_name: StringFilterSchema.optional(),\n legal_name: StringFilterSchema.optional(),\n contact_email: StringFilterSchema.optional(),\n address_city: StringFilterSchema.optional(),\n address_zip: StringFilterSchema.optional(),\n\n // Boolean filters\n includeArchived: BooleanFilterSchema.optional(),\n\n // Date filters\n created_at: DateFilterSchema.optional(),\n updated_at: DateFilterSchema.optional(),\n archived_at: DateFilterSchema.optional(),\n\n // Zinia search object\n search: z\n .object({\n query: z.string(),\n searchableFields: z.array(z.string()),\n })\n .optional(),\n});\n\nexport type TeamFiltersDto = z.infer<typeof TeamFiltersSchema>;\n","import { z } from 'zod';\n\nexport const TeamInputBaseSchema = z.object({\n // Basic team information\n unique_name: z\n .string()\n .min(3, 'Unique name must be between 3 and 64 characters')\n .max(64)\n .optional()\n .nullable(),\n display_name: z.string().min(3, 'Display name must be between 3 and 64 characters').max(64),\n legal_name: z.string().optional().nullable(),\n description: z.string().optional().nullable(),\n\n // Contact information\n contact_name: z.string().optional().nullable(),\n contact_email: z.string().email().optional().nullable(),\n contact_business_phone: z.string().optional().nullable(),\n contact_mobile_phone: z.string().optional().nullable(),\n contact_time_zone: z.string().optional().nullable(),\n\n // Address information\n address_full: z.string().optional().nullable(),\n address_city: z.string().optional().nullable(),\n address_zip: z.string().optional().nullable(),\n\n // Web presence\n twitter_username: z.string().optional().nullable(),\n url: z.string().url().optional().nullable(),\n\n // Branding\n logo: z.string().optional().nullable(),\n\n // Email settings\n email_sent_from: z.string().email().optional().nullable(),\n email_reply_to: z.string().email().optional().nullable(),\n});\n\n// Create schema - same as base for teams\nexport const TeamCreateSchema = TeamInputBaseSchema;\nexport type TeamCreateDto = z.infer<typeof TeamCreateSchema>;\n\n// Update schema includes an ID\nexport const TeamUpdateSchema = TeamInputBaseSchema.extend({\n id: z.string(),\n});\nexport type TeamUpdateDto = z.infer<typeof TeamUpdateSchema>;\n","import { z } from 'zod';\nimport { TeamCreateSchema } from './team_input_zod';\n\nexport const TeamReadSchema = TeamCreateSchema.extend({\n // Required fields\n id: z.string(),\n original_id: z.string().optional().nullable(),\n\n // Computed fields\n path: z.string().optional().nullable(),\n\n // Audit fields\n created_at: z.string(),\n updated_at: z.string().optional().nullable(),\n created_by: z.string(),\n created_by_display_name: z.string().optional().nullable(),\n updated_by: z.string().optional().nullable(),\n updated_by_display_name: z.string().optional().nullable(),\n\n // Soft delete\n archived_at: z.string().optional().nullable(),\n archived_by: z.string().optional().nullable(),\n});\n\nexport type TeamReadDto = z.infer<typeof TeamReadSchema>;\n","import { z } from 'zod';\nimport { createPaginatedSchema } from '../common/pagination_zod';\nimport { TeamReadSchema } from './team_read_zod';\n\nexport const TeamPageSchema = createPaginatedSchema(TeamReadSchema);\n\nexport type TeamPageDto = z.infer<typeof TeamPageSchema>;\n","import { z } from 'zod';\nimport { TeamReadSchema } from './team_read_zod';\n\n/**\n * Schema for a team option in user teams list\n * Includes all team fields to match the GraphQL query\n */\nexport const TeamOptionSchema = TeamReadSchema;\n\nexport type TeamOptionDto = z.infer<typeof TeamOptionSchema>;\n\n/**\n * Schema for the list of teams that a user is part of\n */\nexport const UserTeamsSchema = z.object({\n items: z.array(TeamOptionSchema),\n});\n\nexport type UserTeamsDto = z.infer<typeof UserTeamsSchema>;\n","import { z } from 'zod';\n\n/**\n * Team Member Role Enum\n * - owner: Full permissions (create, read, update, delete)\n * - manager: Can create and read (cannot update or delete)\n * - member: Can create and read (cannot update or delete)\n * - client: Client role (permissions TBD)\n */\nexport const TeamMemberRoleEnum = ['owner', 'manager', 'member', 'client'] as const;\n\nexport const TeamMemberRoleSchema = z.enum(TeamMemberRoleEnum);\nexport type TeamMemberRole = z.infer<typeof TeamMemberRoleSchema>;\n\n/**\n * Filter-specific enum instance\n * This is a separate Zod object with the same values as above,\n * allowing GraphQL to generate distinct enum types for filters vs domain objects\n */\nexport const TeamMemberRoleFilterSchema = z.enum(TeamMemberRoleEnum);\n","import { z } from 'zod';\nimport {\n createEnumFilter,\n DateFilterSchema,\n NumberFilterSchema,\n StringFilterSchema,\n} from '../common/filter_operators_zod';\nimport { PaginationFiltersSchema } from '../common/pagination_zod';\nimport { TeamMemberRoleFilterSchema } from './team_member_enums_zod';\n\n/**\n * Filters for team_member\n * Supports operator-based filtering for advanced queries\n *\n * All filters support operators for advanced filtering:\n * - Numbers: eq, ne, gt, gte, lt, lte\n * - Strings: eq, ne, contains, startsWith, endsWith\n * - Dates: eq, ne, gt, gte, lt, lte\n *\n * Examples:\n * - { original_id: { operator: \"eq\", value: 123 } }\n * - { team_id: { operator: \"eq\", value: \"team_123\" } }\n * - { display_name: { operator: \"contains\", value: \"John\" } }\n * - { created_at: { operator: \"gte\", value: \"2024-01-01\" } }\n */\nexport const TeamMemberFiltersSchema = PaginationFiltersSchema.extend({\n // Number filters\n original_id: NumberFilterSchema.optional(),\n\n // String filters\n team_id: StringFilterSchema.optional(),\n original_team_id: StringFilterSchema.optional(),\n user_id: StringFilterSchema.optional(),\n original_user_id: StringFilterSchema.optional(),\n role: createEnumFilter(TeamMemberRoleFilterSchema).optional(),\n display_name: StringFilterSchema.optional(),\n business_phone: StringFilterSchema.optional(),\n mobile_phone: StringFilterSchema.optional(),\n email_address: StringFilterSchema.optional(),\n website_address: StringFilterSchema.optional(),\n time_zone: StringFilterSchema.optional(),\n\n // Date filters\n created_at: DateFilterSchema.optional(),\n updated_at: DateFilterSchema.optional(),\n deleted_at: DateFilterSchema.optional(),\n\n // Zinia search object\n search: z\n .object({\n query: z.string(),\n searchableFields: z.array(z.string()),\n })\n .optional(),\n});\n\nexport type TeamMemberFiltersDto = z.infer<typeof TeamMemberFiltersSchema>;\n","import { z } from 'zod';\nimport { TeamMemberRoleSchema } from './team_member_enums_zod';\n\nconst TeamMemberBaseSchema = z.object({\n team_id: z.string(),\n user_id: z.string(),\n role: TeamMemberRoleSchema,\n display_name: z\n .string()\n .min(3, 'Display name must be at least 3 characters')\n .max(64, 'Display name must be at most 64 characters'),\n business_phone: z.string().optional().nullable(),\n mobile_phone: z.string().optional().nullable(),\n email_address: z.string().email(),\n website_address: z.string().url().optional().nullable(),\n time_zone: z.string().optional().nullable(),\n});\n\nexport const TeamMemberCreateSchema = TeamMemberBaseSchema;\nexport type TeamMemberCreateDto = z.infer<typeof TeamMemberCreateSchema>;\n\nexport const TeamMemberUpdateSchema = TeamMemberBaseSchema.extend({\n id: z.string(),\n});\nexport type TeamMemberUpdateDto = z.infer<typeof TeamMemberUpdateSchema>;\n","import { z } from 'zod';\nimport { TeamMemberRoleSchema } from './team_member_enums_zod';\n\nexport const TeamMemberReadSchema = z.object({\n id: z.string(),\n original_id: z.number().optional().nullable(),\n team_id: z.string(),\n original_team_id: z.string().optional().nullable(),\n user_id: z.string(),\n original_user_id: z.string().optional().nullable(),\n role: TeamMemberRoleSchema,\n display_name: z.string().optional().nullable(),\n business_phone: z.string().optional().nullable(),\n mobile_phone: z.string().optional().nullable(),\n email_address: z.string().email(),\n website_address: z.string().optional().nullable(),\n time_zone: z.string().optional().nullable(),\n created_at: z.string(),\n created_by: z.string(),\n created_by_display_name: z.string().optional().nullable(),\n updated_at: z.string().optional().nullable(),\n updated_by: z.string().optional().nullable(),\n updated_by_display_name: z.string().optional().nullable(),\n deleted_at: z.string().optional().nullable(),\n deleted_by: z.string().optional().nullable(),\n});\n\nexport type TeamMemberReadDto = z.infer<typeof TeamMemberReadSchema>;\n","import { z } from 'zod';\nimport { TeamMemberReadSchema } from './team_member_read_zod';\n\n/**\n * Schema for a team member option in user team members list\n * Includes all team member fields to match the query\n */\nexport const TeamMemberOptionSchema = TeamMemberReadSchema;\n\nexport type TeamMemberOptionDto = z.infer<typeof TeamMemberOptionSchema>;\n\n/**\n * Schema for the list of team members that a user can see (from their teams)\n */\nexport const UserTeamMembersSchema = z.object({\n items: z.array(TeamMemberOptionSchema),\n});\n\nexport type UserTeamMembersDto = z.infer<typeof UserTeamMembersSchema>;\n","import { z } from 'zod';\nimport { UserTypeEnum } from './user_enums_zod';\n\nexport const UserReadSchema = z.object({\n id: z.string(),\n username: z.string(),\n email: z.string(),\n email_verified: z.boolean(),\n user_type: UserTypeEnum,\n created_at: z.string(),\n updated_at: z.string().nullable(),\n});\n\nexport type UserReadDto = z.infer<typeof UserReadSchema>;\n","import { z } from 'zod';\nimport { UserTypeEnum } from './user_enums_zod';\n\nexport const UserUpdateSchema = z.object({\n id: z.string(),\n user_type: UserTypeEnum,\n});\n\nexport type UserUpdateDto = z.infer<typeof UserUpdateSchema>;\n","import { z } from 'zod';\n\n/**\n * Base schema for user profile\n */\nexport const UserProfileBaseSchema = z.object({\n first_name: z.string().max(255, 'First name is too long').nullable().optional(),\n last_name: z.string().max(255, 'Last name is too long').nullable().optional(),\n bio: z.string().max(1000, 'Bio is too long').nullable().optional(),\n notification_email: z.string().email('Invalid notification email').nullable().optional(),\n});\n\n/**\n * Schema for updating a user profile\n */\nexport const UserProfileUpdateSchema = UserProfileBaseSchema.extend({\n user_id: z.string().min(1, 'User ID is required'),\n});\n\nexport type UserProfileUpdateDto = z.infer<typeof UserProfileUpdateSchema>;\n\n/**\n * Schema for reading a user profile\n */\nexport const UserProfileReadSchema = UserProfileBaseSchema.extend({\n id: z.string().min(1, 'ID is required'),\n user_id: z.string().min(1, 'User ID is required'),\n created_at: z.string().datetime(),\n created_by: z.string().min(1, 'Created by is required'),\n updated_at: z.string().datetime().nullable(),\n updated_by: z.string().nullable(),\n});\nexport type UserProfileReadDto = z.infer<typeof UserProfileReadSchema>;\n","import { z } from 'zod';\n\nexport const userSessionSchema = z.object({\n created_at: z.string(),\n expires_at: z.string(),\n status: z.string(),\n user_agent: z.string().optional().nullable(),\n ip_address: z.string().optional().nullable(),\n user: z.object({\n userId: z.string(),\n email: z.string(),\n username: z.string(),\n email_verified: z.boolean(),\n user_type: z.string(),\n first_name: z.string().optional().nullable(),\n last_name: z.string().optional().nullable(),\n avatar_url: z.string().optional().nullable(),\n subscriptions: z\n .array(\n z.object({\n subscription_id: z.string(),\n subscription_status: z.string().optional().nullable(),\n subscription_created: z.string(),\n subscription_current_period_start: z.string(),\n subscription_current_period_end: z.string(),\n subscription_cancel_at: z.string().optional().nullable(),\n subscription_canceled_at: z.string().optional().nullable(),\n product_name: z.string().optional().nullable(),\n price_amount: z.number().nullable(),\n price_currency: z.string().optional().nullable(),\n }),\n )\n .optional()\n .nullable(),\n }),\n});\n\nexport const loginResponseSchema = z.object({\n frontend_session: userSessionSchema,\n access_token: z.string(),\n refresh_token: z.string(),\n user_details_token: z.string(),\n});\n\nexport type LoginResponse = z.infer<typeof loginResponseSchema>;\nexport type UserSessionReadDto = z.infer<typeof userSessionSchema>;\n","import type {\n SavedFilterCreateDto,\n SavedFilterReadDto,\n SavedFilterUpdateDto,\n} from '../validation/saved_filter';\n\n/** Maximum presets per context (e.g. per page like trackers, followups) */\nexport const MAX_PRESETS_PER_CONTEXT = 10;\n\n/**\n * Saved Filter API - CRUD for custom filter presets\n */\nexport interface SavedFilterApi {\n listSavedFilters(context: string): Promise<SavedFilterReadDto[]>;\n\n listAllSavedFilters(): Promise<SavedFilterReadDto[]>;\n\n createSavedFilter(input: SavedFilterCreateDto): Promise<SavedFilterReadDto>;\n\n updateSavedFilter(input: SavedFilterUpdateDto): Promise<SavedFilterReadDto | null>;\n\n deleteSavedFilter(id: string): Promise<boolean>;\n\n listPinnedPresets(): Promise<SavedFilterReadDto[]>;\n\n addPinnedPreset(presetId: string): Promise<SavedFilterReadDto | null>;\n\n removePinnedPreset(presetId: string): Promise<boolean>;\n\n reorderPinnedPresets(presetIds: string[]): Promise<void>;\n}\n","/**\n * Utility functions for converting enum values to human-readable display labels\n */\n\n/**\n * Normalizes and validates input\n */\nfunction normalizeInput(value: string): string {\n if (typeof value !== 'string') return String(value);\n return value.trim().toLowerCase();\n}\n\n/**\n * Converts a snake_case string to Title Case\n * Handles edge cases like empty strings, single characters, numbers, etc.\n *\n * Examples:\n * - \"order_signed\" -> \"Order Signed\"\n * - \"active_mtm\" -> \"Active Mtm\"\n * - \"create_a_quote\" -> \"Create A Quote\"\n */\nfunction snakeCaseToTitleCase(value: string): string {\n const normalized = normalizeInput(value);\n if (!normalized) return value;\n\n // Split by underscores and filter out empty parts\n const parts = normalized.split('_').filter((part) => part.length > 0);\n\n if (parts.length === 0) return value;\n\n // Convert each part - strict capitalization\n const formatted = parts.map((part) => {\n if (part.length === 0) return part;\n // Capitalize first letter, rest lowercase\n return part.charAt(0).toUpperCase() + part.slice(1);\n });\n\n // Join with spaces\n return formatted.join(' ');\n}\n\n/**\n * Determines if a value should use dash formatting based on structure\n * Uses heuristics: length of first part, total parts, etc.\n */\nfunction shouldUseDashes(parts: string[]): boolean {\n if (parts.length < 2) return false;\n\n const firstPart = parts[0];\n if (!firstPart) return false;\n\n // Use dashes if:\n // 1. First part is reasonably sized (not too short, not too long)\n // 2. There are multiple parts\n // 3. The structure suggests a \"category - detail\" pattern\n\n // If first part is very short (1-2 chars), it's likely a prefix - use dashes\n if (firstPart.length <= 2) return true;\n\n // If first part is moderate length (3-8 chars) and we have 2+ parts, use dashes\n if (firstPart.length >= 3 && firstPart.length <= 8 && parts.length >= 2) {\n return true;\n }\n\n // If we have 3+ parts, use dashes for better readability\n if (parts.length >= 3) return true;\n\n // Default: use dashes for 2+ parts\n return parts.length >= 2;\n}\n\n/**\n * Formats a value with dashes - intelligently splits based on structure\n *\n * Examples:\n * - \"order_signed\" -> \"Order - Signed\"\n * - \"closed_lost\" -> \"Closed - Lost\"\n * - \"active_in_term\" -> \"Active - In Term\"\n * - \"on_hold_broker\" -> \"On Hold - Broker\"\n */\nfunction formatWithDashes(value: string): string {\n const normalized = normalizeInput(value);\n const parts = normalized.split('_').filter((part) => part.length > 0);\n\n if (parts.length < 2) return snakeCaseToTitleCase(value);\n\n const firstPart = parts[0];\n const secondPart = parts[1];\n\n if (!firstPart) return snakeCaseToTitleCase(value);\n\n // For 2 parts: split after first\n if (parts.length === 2) {\n if (!secondPart) return snakeCaseToTitleCase(value);\n const firstFormatted = snakeCaseToTitleCase(firstPart);\n const secondFormatted = snakeCaseToTitleCase(secondPart);\n return `${firstFormatted} - ${secondFormatted}`;\n }\n\n // For 3+ parts: try to find a natural split point\n // If first part is short (1-3 chars), it might be a prefix - split after it\n if (firstPart.length <= 3) {\n const firstFormatted = snakeCaseToTitleCase(firstPart);\n const restFormatted = snakeCaseToTitleCase(parts.slice(1).join('_'));\n return `${firstFormatted} - ${restFormatted}`;\n }\n\n // Otherwise, try splitting after first or second part based on lengths\n // If first part is longer, split after it; otherwise split after second\n if (secondPart && firstPart.length > secondPart.length) {\n const firstFormatted = snakeCaseToTitleCase(firstPart);\n const restFormatted = snakeCaseToTitleCase(parts.slice(1).join('_'));\n return `${firstFormatted} - ${restFormatted}`;\n } else {\n const firstTwoFormatted = snakeCaseToTitleCase(parts.slice(0, 2).join('_'));\n const restFormatted = snakeCaseToTitleCase(parts.slice(2).join('_'));\n return `${firstTwoFormatted} - ${restFormatted}`;\n }\n}\n\n/**\n * Converts an enum value to a display label\n * Uses intelligent formatting based on structure\n *\n * @param value - The enum value in snake_case (or any case)\n * @param customOverrides - Optional map of custom overrides for specific values\n * @returns The formatted display label\n */\nexport function enumToDisplayLabel(\n value: string,\n customOverrides?: Record<string, string>,\n): string {\n if (!value || typeof value !== 'string') return String(value || '');\n\n // Normalize for lookup (but preserve original for output if needed)\n const normalized = normalizeInput(value);\n\n // Check for custom override first (try both normalized and original)\n if (customOverrides) {\n if (customOverrides[value]) return customOverrides[value];\n if (customOverrides[normalized]) return customOverrides[normalized];\n }\n\n // Parse the value\n const parts = normalized.split('_').filter((part) => part.length > 0);\n\n if (parts.length === 0) return value;\n\n // Use intelligent formatting\n if (shouldUseDashes(parts)) {\n return formatWithDashes(value);\n }\n\n return snakeCaseToTitleCase(value);\n}\n\n/**\n * Creates a label map for an array of enum values\n *\n * @param enumValues - Array of enum values\n * @param customOverrides - Optional map of custom overrides for specific values\n * @returns Record mapping enum values to display labels\n */\nexport function createEnumLabelMap<T extends string>(\n enumValues: readonly T[],\n customOverrides?: Partial<Record<T, string>>,\n): Record<T, string> {\n const labelMap = {} as Record<T, string>;\n\n for (const value of enumValues) {\n labelMap[value] = enumToDisplayLabel(value, customOverrides as Record<string, string>);\n }\n\n return labelMap;\n}\n\n/**\n * Select option type for dropdowns\n */\nexport interface SelectOption {\n value: string;\n label: string;\n}\n\n/**\n * Converts an enum label map to select options for dropdowns\n *\n * @param labelMap - Record mapping enum values to display labels\n * @returns Array of select options\n */\nexport function createSelectOptionsFromLabelMap<T extends string>(\n labelMap: Record<T, string>,\n): SelectOption[] {\n return Object.entries(labelMap).map(([value, label]) => ({\n value,\n label: label as string,\n }));\n}\n","/**\n * File utility functions for sanitizing and processing file names.\n */\n\n/**\n * Sanitizes a file name by replacing non-alphanumeric characters with underscores.\n * Provides several improvements over basic sanitization:\n * - Converts dashes to underscores first (to avoid mixed dash/underscore patterns)\n * - Collapses multiple consecutive underscores\n * - Trims leading/trailing underscores\n * - Handles files without extensions properly\n * - Sanitizes the extension too\n * - Enforces 800-byte limit for R2 compatibility\n * - Provides fallback for completely invalid names\n *\n * This function enforces an 800-byte limit to comply with Cloudflare R2's 1,024 byte\n * object key limit (leaving room for path overhead).\n *\n * @param fileName - The original file name to sanitize\n * @returns The sanitized file name with underscores replacing non-alphanumeric characters\n *\n * @example\n * ```typescript\n * sanitizeFileName('Sun Life Sheet 2021-10-13.xls')\n * // Returns: 'Sun_Life_Sheet_2021_10_13.xls'\n *\n * sanitizeFileName('my-file@2023.pdf')\n * // Returns: 'my_file_2023.pdf'\n *\n * sanitizeFileName('document.txt')\n * // Returns: 'document.txt'\n *\n * sanitizeFileName('file---name.txt')\n * // Returns: 'file_name.txt' (collapsed underscores)\n *\n * sanitizeFileName('file-name_test.txt')\n * // Returns: 'file_name_test.txt' (dashes converted first, no mixed patterns)\n *\n * sanitizeFileName('!!!file.txt')\n * // Returns: 'file.txt' (trimmed underscores)\n *\n * sanitizeFileName('')\n * // Returns: 'unnamed_file' (fallback)\n * ```\n */\nexport function sanitizeFileName(fileName: string): string {\n // Handle empty or invalid input\n if (!fileName || fileName.trim() === '') {\n return 'unnamed_file';\n }\n\n // Split filename and extension using lastIndexOf for better handling\n const lastDotIndex = fileName.lastIndexOf('.');\n const hasExtension = lastDotIndex > 0; // Must have at least 1 char before dot\n\n let name = hasExtension ? fileName.substring(0, lastDotIndex) : fileName;\n let extension = hasExtension ? fileName.substring(lastDotIndex + 1) : '';\n\n // Sanitize both name and extension\n // First convert dashes to underscores to avoid mixed dash/underscore patterns\n // Then replace remaining non-alphanumeric with underscores\n // Finally collapse consecutive underscores and trim\n const sanitize = (str: string) =>\n str\n .replace(/-/g, '_') // Convert dashes to underscores first\n .replace(/[^a-zA-Z0-9]/g, '_') // Replace remaining non-alphanumeric with underscores\n .replace(/_+/g, '_') // Collapse consecutive underscores\n .replace(/^_+|_+$/g, ''); // Trim leading/trailing underscores\n\n name = sanitize(name);\n extension = sanitize(extension);\n\n // Fallback if name is completely invalid\n if (!name) {\n name = 'file';\n }\n\n // Construct final filename\n const sanitized = extension ? `${name}.${extension}` : name;\n\n // Enforce 800-byte limit for R2 compatibility (R2 has 1,024 byte limit for full path)\n const encoder = new TextEncoder();\n const byteLength = encoder.encode(sanitized).length;\n\n if (byteLength > 800) {\n // Calculate available bytes for name (reserve space for extension)\n const extensionBytes = extension ? encoder.encode(`.${extension}`).length : 0;\n const maxNameBytes = 800 - extensionBytes;\n\n // Truncate by iterating through characters until we reach byte limit\n let truncatedName = '';\n let currentBytes = 0;\n\n for (const char of name) {\n const charBytes = encoder.encode(char).length;\n if (currentBytes + charBytes > maxNameBytes) {\n break;\n }\n truncatedName += char;\n currentBytes += charBytes;\n }\n\n return extension ? `${truncatedName}.${extension}` : truncatedName;\n }\n\n return sanitized;\n}\n","/**\n * Money calculation utilities using strings for storage and numbers for calculations.\n * All monetary values are stored as strings.\n */\n\n/**\n * Adds two or more monetary values\n * @param values Monetary values as strings\n * @returns Sum as string\n */\nexport const addMoney = (...values: string[]): string =>\n values.reduce((sum, value) => sum + Number(value), 0).toString();\n\n/**\n * Subtracts monetary values from the first value\n * @param minuend Value to subtract from\n * @param subtrahends Values to subtract\n * @returns Difference as string\n */\nexport const subtractMoney = (minuend: string, ...subtrahends: string[]): string =>\n subtrahends.reduce((diff, value) => diff - Number(value), Number(minuend)).toString();\n\n/**\n * Multiplies a monetary value by a number\n * @param amount Amount as string\n * @param multiplier Number to multiply by\n * @returns Product as string\n */\nexport const multiplyMoney = (amount: string, multiplier: number): string =>\n (Number(amount) * multiplier).toString();\n\n/**\n * Divides a monetary value by a number\n * @param amount Amount as string\n * @param divisor Number to divide by\n * @returns Quotient as string\n */\nexport const divideMoney = (amount: string, divisor: number): string =>\n (Number(amount) / divisor).toString();\n\n/**\n * Applies a percentage to a monetary value\n * @param amount Amount as string\n * @param percentage Percentage as decimal (e.g., 0.15 for 15%)\n * @returns Result as string\n */\nexport const applyPercentage = (amount: string, percentage: number): string =>\n multiplyMoney(amount, 1 + percentage);\n\n/**\n * Rounds a monetary value\n * @param amount Amount to round\n * @returns Rounded amount as string\n */\nexport const roundMoney = (amount: string): string =>\n (Math.round(Number(amount) * 100) / 100).toString();\n\n/**\n * Formats a number as currency\n * @param value Number to format\n * @returns Formatted currency string\n */\nexport const formatCurrency = (value: number): string => {\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n }).format(value);\n};\n\n/**\n * Formats a dollar amount as currency\n * @param amount Amount as string\n * @returns Formatted currency string\n */\nexport const formatDollar = (amount: string | null | undefined): string => {\n if (amount === null || amount === undefined) return '$0.00';\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n }).format(Number(amount));\n};\n"],"mappings":"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"}
|