@opexa/portal-components 0.0.1 → 0.0.2

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/ui/AlertDialog/AlertDialog.tsx","../src/lib/utils/createRecipeContext.tsx","../src/lib/utils/createSplitProps.ts","../src/lib/ui/AlertDialog/alertDialog.recipe.ts","../src/lib/utils/anatomyToRecipeSlots.ts","../src/lib/ui/Avatar/Avatar.tsx","../src/lib/ui/Avatar/avatar.recipe.ts","../src/lib/ui/Badge/Badge.tsx","../src/lib/ui/Badge/badge.anatomy.ts","../src/lib/ui/Badge/badge.recipe.ts","../src/lib/ui/Button/Button.tsx","../src/lib/utils/dataAttr.ts","../src/lib/ui/Button/button.recipe.ts","../src/lib/ui/Checkbox/Checkbox.tsx","../src/lib/ui/Checkbox/checkbox.recipe.ts","../src/lib/ui/Combobox/Combobox.tsx","../src/lib/ui/DatePicker/DatePicker.tsx","../src/lib/ui/DatePicker/datePicker.recipe.ts","../src/lib/ui/Dialog/Dialog.tsx","../src/lib/ui/Dialog/dialog.recipe.ts","../src/lib/ui/Drawer/Drawer.tsx","../src/lib/ui/Drawer/drawer.recipe.ts","../src/lib/ui/Field/Field.tsx","../src/lib/ui/Field/field.recipe.ts","../src/lib/ui/IconButton/IconButton.tsx","../src/lib/ui/IconButton/iconButton.recipe.ts","../src/lib/ui/Menu/Menu.tsx","../src/lib/ui/NumberInput/NumberInput.tsx","../src/lib/ui/NumberInput/numberInput.recipe.ts","../src/lib/ui/PinInput/PinInput.tsx","../src/lib/ui/PinInput/pinInput.recipe.ts","../src/lib/ui/Popover/Popover.tsx","../src/lib/ui/Popover/popover.recipe.ts","../src/lib/ui/Progress/Progress.tsx","../src/lib/ui/SegmentGroup/SegmentGroup.tsx","../src/lib/ui/SegmentGroup/segmentGroup.recipe.ts","../src/lib/ui/Select/Select.tsx","../src/lib/ui/Select/select.recipe.ts","../src/lib/ui/Table/Table.tsx","../src/lib/ui/Table/table.recipe.ts","../src/lib/ui/Table/table.anatomy.ts","../src/lib/ui/Tabs/Tabs.tsx","../src/lib/ui/Tabs/tabs.recipe.ts","../src/lib/ui/Tooltip/Tooltip.tsx"],"sourcesContent":["'use client';\r\n\r\nimport { ark, Dialog } from '@ark-ui/react';\r\nimport { createRecipeContext } from '../../utils/createRecipeContext';\r\nimport { alertDialogRecipe } from './alertDialog.recipe';\r\n\r\nconst { withContext, withRootProvider } =\r\n createRecipeContext(alertDialogRecipe);\r\n\r\nexport const Root = withRootProvider(Dialog.Root);\r\nexport const Backdrop = withContext(Dialog.Backdrop, 'backdrop');\r\nexport const CloseTrigger = withContext(Dialog.CloseTrigger, 'closeTrigger');\r\nexport const Content = withContext(Dialog.Content, 'content');\r\nexport const Description = withContext(Dialog.Description, 'description');\r\nexport const Positioner = withContext(Dialog.Positioner, 'positioner');\r\nexport const Title = withContext(Dialog.Title, 'title');\r\nexport const Trigger = withContext(Dialog.Trigger, 'trigger');\r\nexport const Header = withContext(ark.section, 'header');\r\nexport const Body = withContext(ark.section, 'body');\r\nexport const Footer = withContext(ark.section, 'footer');\r\nexport const Context = Dialog.Context;\r\n","import type { Assign } from '@ark-ui/react';\r\nimport * as React from 'react';\r\nimport type { VariantProps } from 'tailwind-variants';\r\nimport { createSplitProps } from './createSplitProps';\r\n\r\n/* eslint-disable-next-line @typescript-eslint/no-explicit-any */\r\ntype GenericProps = Record<string, any>;\r\ntype GenericRecipeEntries = Record<string, (props: GenericProps) => string>;\r\ntype GenericRecipe = {\r\n (props: GenericProps): GenericRecipeEntries;\r\n variantKeys: (string | number | never)[];\r\n};\r\n\r\nexport function createRecipeContext<\r\n Recipe extends GenericRecipe = GenericRecipe,\r\n RecipeProps extends GenericProps = VariantProps<Recipe>,\r\n RecipeEntries extends GenericRecipeEntries = ReturnType<Recipe>,\r\n RecipeEntry = keyof RecipeEntries,\r\n>(recipe: Recipe) {\r\n const RecipeContext = React.createContext<GenericRecipeEntries | null>(null);\r\n\r\n function useContext() {\r\n const context = React.useContext(RecipeContext);\r\n return context;\r\n }\r\n\r\n function withRootProvider<Props extends GenericProps>(Component: React.ComponentType<Props>) {\r\n const StyledComponent = (props: Props) => {\r\n const [recipeProps, localProps] = createSplitProps(recipe.variantKeys)(props);\r\n const context = recipe(recipeProps);\r\n\r\n return (\r\n <RecipeContext.Provider value={context}>\r\n <Component {...(localProps as Props)} />\r\n </RecipeContext.Provider>\r\n );\r\n };\r\n\r\n return StyledComponent as React.ComponentType<Assign<Props, RecipeProps>>;\r\n }\r\n\r\n function withProvider<Props extends GenericProps>(\r\n Component: React.ComponentType<Props>,\r\n slot: RecipeEntry,\r\n ) {\r\n const StyledComponent = (props: GenericProps) => {\r\n const [recipeProps, localProps] = createSplitProps(recipe.variantKeys)(props);\r\n const context = recipe(recipeProps);\r\n const slotName = slot as string;\r\n const getStyle = context[slotName];\r\n const userDefinedClassName =\r\n 'className' in localProps && typeof localProps.className === 'string'\r\n ? localProps.className\r\n : undefined;\r\n const className = !getStyle\r\n ? userDefinedClassName\r\n : getStyle({\r\n ...recipeProps,\r\n className: userDefinedClassName,\r\n });\r\n\r\n return (\r\n <RecipeContext.Provider value={context}>\r\n <Component {...(localProps as Props)} className={className} />\r\n </RecipeContext.Provider>\r\n );\r\n };\r\n\r\n StyledComponent.displayName = Component.displayName || Component.name;\r\n\r\n return StyledComponent as React.ComponentType<Assign<Props, RecipeProps>>;\r\n }\r\n\r\n function withContext<Props extends GenericProps>(\r\n Component: React.ComponentType<Props>,\r\n slot: RecipeEntry,\r\n ) {\r\n const StyledComponent = (props: GenericProps) => {\r\n const context = useContext();\r\n const [recipeProps, localProps] = createSplitProps(recipe.variantKeys)(props);\r\n const slotName = slot as string;\r\n const getStyle = !context ? recipe(recipeProps)[slotName] : context[slotName];\r\n const userDefinedClassName =\r\n 'className' in localProps && typeof localProps.className === 'string'\r\n ? localProps.className\r\n : undefined;\r\n const className = !getStyle\r\n ? userDefinedClassName\r\n : getStyle({\r\n ...recipeProps,\r\n className: userDefinedClassName,\r\n });\r\n\r\n return <Component {...(localProps as Props)} className={className} />;\r\n };\r\n\r\n StyledComponent.displayName = Component.displayName || Component.name;\r\n\r\n return StyledComponent as React.ComponentType<Assign<Props, RecipeProps>>;\r\n }\r\n\r\n return {\r\n withRootProvider,\r\n withProvider,\r\n withContext,\r\n };\r\n}\r\n","/* eslint-disable-next-line @typescript-eslint/no-explicit-any */\r\ntype GenericProps = Record<string, any>;\r\n\r\nfunction splitProps<T extends GenericProps>(props: T, keys: (keyof T)[]) {\r\n const rest: GenericProps = {};\r\n const result: GenericProps = {};\r\n\r\n const keySet = new Set(keys);\r\n\r\n for (const key in props) {\r\n if (keySet.has(key)) {\r\n result[key] = props[key];\r\n } else {\r\n rest[key] = props[key];\r\n }\r\n }\r\n\r\n return [result, rest];\r\n}\r\n\r\nexport function createSplitProps<T extends GenericProps>(keys: (keyof T)[]) {\r\n return function split<Props extends T>(props: Props) {\r\n return splitProps(props, keys) as [T, Omit<Props, keyof T>];\r\n };\r\n}\r\n","import { dialogAnatomy } from '@ark-ui/react';\r\nimport { tv } from 'tailwind-variants';\r\nimport { anatomyToRecipeSlots } from '../../utils/anatomyToRecipeSlots';\r\n\r\nconst anatomy = dialogAnatomy.extendWith('header', 'body', 'footer');\r\n\r\nexport const alertDialogRecipe = tv({\r\n slots: anatomyToRecipeSlots(anatomy, {\r\n backdrop:\r\n 'z-backdrop ui-open:animate-backdrop-in ui-closed:animate-backdrop-out fixed inset-0 bg-black/50',\r\n positioner: 'z-dialog fixed inset-0 flex items-center justify-center',\r\n content:\r\n 'ui-open:animate-alertdialog-in ui-closed:animate-alertdialog-out relative w-[400px] max-w-[90vw] rounded-xl bg-white p-3xl shadow-xl',\r\n header: 'flex items-start justify-between',\r\n body: 'mt-xl',\r\n title: 'text-lg font-semibold',\r\n description: 'text-gray-600 mt-xs text-sm',\r\n closeTrigger: 'text-gray-400 icon:size-6',\r\n footer: 'mt-4xl flex items-center justify-center gap-lg',\r\n }),\r\n});\r\n","import type { AnatomyInstance } from '@ark-ui/anatomy';\r\n\r\n/**\r\n * Converts a component anatomy into a valid tailwind variant slot recipe\r\n * and optionally, accepts initial base styles.\r\n */\r\nexport function anatomyToRecipeSlots<T extends string>(\r\n anatomy: AnatomyInstance<T>,\r\n baseStyles: Partial<Record<T, string | string[]>> = {},\r\n) {\r\n const styles = anatomy.keys().reduce<Partial<Record<T, string | string[]>>>((acc, key) => {\r\n acc[key] = baseStyles[key] ?? '';\r\n return acc;\r\n }, {});\r\n\r\n return styles as Record<T, string | string[]>;\r\n}\r\n","'use client';\r\n\r\nimport { Avatar } from '@ark-ui/react';\r\nimport { createRecipeContext } from '../../utils/createRecipeContext';\r\nimport { avatarRecipe } from './avatar.recipe';\r\n\r\nconst { withContext, withProvider } = createRecipeContext(avatarRecipe);\r\n\r\nexport const Root = withProvider(Avatar.Root, 'root');\r\nexport const Image = withContext(Avatar.Image, 'image');\r\nexport const Fallback = withContext(Avatar.Fallback, 'fallback');\r\nexport const Context = Avatar.Context;\r\n","import { avatarAnatomy } from '@ark-ui/react';\r\nimport { tv } from 'tailwind-variants';\r\nimport { anatomyToRecipeSlots } from '../../utils/anatomyToRecipeSlots';\r\n\r\nexport const avatarRecipe = tv({\r\n slots: anatomyToRecipeSlots(avatarAnatomy, {\r\n root: 'border-gray-200 bg-gray-50 flex items-center justify-center overflow-hidden rounded-full border',\r\n fallback:\r\n 'text-gray-600 icon:text-gray-500 flex size-full items-center justify-center',\r\n image: 'size-full object-cover',\r\n }),\r\n variants: {\r\n size: {\r\n md: {\r\n root: 'size-10',\r\n fallback: 'icon:size-6 text-sm font-semibold',\r\n },\r\n },\r\n },\r\n defaultVariants: {\r\n size: 'md',\r\n },\r\n});\r\n","'use client';\r\n\r\nimport { ark } from '@ark-ui/react';\r\nimport type { ComponentPropsWithRef } from 'react';\r\nimport { createRecipeContext } from '../../utils/createRecipeContext';\r\nimport { badgeAnatomy } from './badge.anatomy';\r\nimport { badgeRecipe } from './badge.recipe';\r\n\r\nconst { withProvider, withContext } = createRecipeContext(badgeRecipe);\r\nconst parts = badgeAnatomy.build();\r\n\r\ninterface BadgeProps extends ComponentPropsWithRef<'div'> {\r\n asChild?: boolean;\r\n}\r\n\r\nexport const Root = withProvider(\r\n (props: BadgeProps) => <ark.div {...parts.root.attrs} {...props} />,\r\n 'root',\r\n);\r\n\r\ninterface BadgeLabelProps extends ComponentPropsWithRef<'span'> {\r\n asChild?: boolean;\r\n}\r\n\r\nexport const Label = withContext(\r\n (props: BadgeLabelProps) => <ark.span {...parts.label.attrs} {...props} />,\r\n 'label',\r\n);\r\n\r\ninterface BadgeIndicatorProps extends ComponentPropsWithRef<'svg'> {\r\n asChild?: boolean;\r\n}\r\n\r\nexport const Indicator = withContext(\r\n (props: BadgeIndicatorProps) => (\r\n <ark.svg {...parts.indicator.attrs} asChild {...props} />\r\n ),\r\n 'indicator',\r\n);\r\n","import { createAnatomy } from '@ark-ui/anatomy';\r\n\r\nexport const badgeAnatomy = createAnatomy('badge').parts(\r\n 'root',\r\n 'label',\r\n 'indicator',\r\n);\r\n","import { tv } from 'tailwind-variants';\r\nimport { anatomyToRecipeSlots } from '../../utils/anatomyToRecipeSlots';\r\nimport { badgeAnatomy } from './badge.anatomy';\r\n\r\nexport const badgeRecipe = tv({\r\n slots: anatomyToRecipeSlots(badgeAnatomy, {\r\n root: 'inline-flex items-center',\r\n label: '',\r\n indicator: '',\r\n }),\r\n variants: {\r\n size: {\r\n md: {\r\n root: 'gap-1 rounded-full px-2 py-0.5',\r\n label: 'text-xs font-medium leading-tight',\r\n },\r\n },\r\n variant: {\r\n subtle: {},\r\n },\r\n colorScheme: {\r\n gray: {},\r\n danger: {},\r\n success: {},\r\n warning: {},\r\n info: {},\r\n },\r\n },\r\n compoundVariants: [\r\n {\r\n variant: 'subtle',\r\n colorScheme: 'gray',\r\n className: {\r\n root: 'bg-gray-50 border-gray-200 border',\r\n label: 'text-gray-700',\r\n },\r\n },\r\n {\r\n variant: 'subtle',\r\n colorScheme: 'success',\r\n className: {\r\n root: 'bg-green-50 border-green-200 border',\r\n label: 'text-green-700',\r\n },\r\n },\r\n {\r\n variant: 'subtle',\r\n colorScheme: 'warning',\r\n className: {\r\n root: 'bg-amber-50 border-amber-200 border',\r\n label: 'text-amber-700',\r\n },\r\n },\r\n {\r\n variant: 'subtle',\r\n colorScheme: 'danger',\r\n className: {\r\n root: 'bg-red-50 border-red-200 border',\r\n label: 'text-red-700',\r\n },\r\n },\r\n ],\r\n defaultVariants: {\r\n size: 'md',\r\n variant: 'subtle',\r\n colorScheme: 'success',\r\n },\r\n});\r\n","'use client';\r\n\r\nimport { ark } from '@ark-ui/react';\r\nimport type { ComponentPropsWithRef } from 'react';\r\nimport type { Merge } from 'type-fest';\r\nimport { createSplitProps } from '../../utils/createSplitProps';\r\nimport { dataAttr } from '../../utils/dataAttr';\r\nimport { buttonRecipe, type ButtonRecipeProps } from './button.recipe';\r\n\r\nexport interface ButtonProps\r\n extends Merge<ComponentPropsWithRef<'button'>, ButtonRecipeProps> {\r\n asChild?: boolean;\r\n}\r\n\r\nexport function Button(props: ButtonProps) {\r\n const [recipeProps, localProps] = createSplitProps<ButtonRecipeProps>(\r\n buttonRecipe.variantKeys,\r\n )(props);\r\n\r\n return (\r\n <ark.button\r\n type=\"button\"\r\n {...localProps}\r\n className={buttonRecipe({\r\n ...recipeProps,\r\n className: localProps.className,\r\n })}\r\n data-disabled={dataAttr(localProps.disabled)}\r\n />\r\n );\r\n}\r\n","export function dataAttr(guard: boolean | undefined | null) {\n return guard ? '' : undefined;\n}\n","import { tv, type VariantProps } from 'tailwind-variants';\r\n\r\nexport const buttonRecipe = tv({\r\n base: 'shadow-xs inline-flex items-center justify-center rounded-md font-semibold disabled:shadow-none',\r\n variants: {\r\n size: {\r\n xs: 'h-9 gap-sm px-2.5 text-sm',\r\n sm: 'h-10 gap-md px-3',\r\n md: 'h-11 gap-lg px-3.5',\r\n },\r\n variant: {\r\n solid: '',\r\n outline: '',\r\n },\r\n colorScheme: {\r\n primary: '',\r\n danger: '',\r\n gray: '',\r\n },\r\n fullWidth: {\r\n true: 'flex w-full',\r\n },\r\n },\r\n compoundVariants: [\r\n {\r\n variant: 'solid',\r\n colorScheme: 'primary',\r\n class: 'bg-gray-900 text-white disabled:opacity-50',\r\n },\r\n {\r\n variant: 'solid',\r\n colorScheme: 'danger',\r\n class: 'bg-red-500 text-white disabled:opacity-50',\r\n },\r\n {\r\n variant: 'outline',\r\n colorScheme: 'gray',\r\n class: 'border-gray-200 border bg-transparent disabled:opacity-50',\r\n },\r\n ],\r\n defaultVariants: {\r\n size: 'md',\r\n variant: 'solid',\r\n colorScheme: 'primary',\r\n fullWidth: true,\r\n },\r\n});\r\n\r\nexport type ButtonRecipeProps = VariantProps<typeof buttonRecipe>;\r\n","'use client';\r\n\r\nimport { Checkbox } from '@ark-ui/react';\r\nimport { createRecipeContext } from '../../utils/createRecipeContext';\r\nimport { checkboxRecipe } from './checkbox.recipe';\r\n\r\nexport const { withContext, withProvider } =\r\n createRecipeContext(checkboxRecipe);\r\n\r\nexport const Root = withProvider(Checkbox.Root, 'root');\r\nexport const Control = withContext(Checkbox.Control, 'control');\r\nexport const Group = withContext(Checkbox.Group, 'group');\r\nexport const Indicator = withContext(Checkbox.Indicator, 'indicator');\r\nexport const Label = withContext(Checkbox.Label, 'label');\r\nexport const HiddenInput = Checkbox.HiddenInput;\r\nexport const Context = Checkbox.Context;\r\n","import { checkboxAnatomy } from '@ark-ui/react';\r\nimport { tv } from 'tailwind-variants';\r\nimport { anatomyToRecipeSlots } from '../../utils/anatomyToRecipeSlots';\r\n\r\nexport const checkboxRecipe = tv({\r\n slots: anatomyToRecipeSlots(checkboxAnatomy, {\r\n root: 'flex items-start gap-2',\r\n control: 'flex shrink-0 items-center justify-center rounded-md',\r\n label: 'text-checkbox-label-fg',\r\n }),\r\n variants: {\r\n size: {\r\n md: {\r\n control: 'size-4 rounded-[0.25rem]',\r\n indicator: 'size-3',\r\n },\r\n },\r\n variant: {\r\n outline: {},\r\n },\r\n colorScheme: {\r\n gray: {},\r\n },\r\n },\r\n compoundVariants: [\r\n {\r\n variant: 'outline',\r\n colorScheme: 'gray',\r\n className: {\r\n control: [\r\n 'border',\r\n 'shadow-xs',\r\n 'bg-transparent',\r\n 'border-gray-200',\r\n 'ui-invalid:border-red-400',\r\n 'ui-checked:bg-gray-900',\r\n 'ui-checked:border-gray-900',\r\n 'ui-readonly:opacity-50',\r\n 'ui-readonly:shadow-none',\r\n 'ui-disabled:opacity-50',\r\n 'ui-disabled:shadow-none',\r\n ],\r\n indicator: 'text-white',\r\n label: 'text-gray-600 text-xs leading-tight',\r\n },\r\n },\r\n ],\r\n defaultVariants: {\r\n size: 'md',\r\n variant: 'outline',\r\n colorScheme: 'gray',\r\n },\r\n});\r\n","'use client';\r\n\r\nimport { Combobox } from '@ark-ui/react';\r\n\r\nexport const Root = Combobox.Root;\r\n","'use client';\r\n\r\nimport { DatePicker } from '@ark-ui/react';\r\nimport { createRecipeContext } from '../../utils/createRecipeContext';\r\nimport { datePickerRecipe } from './datePicker.recipe';\r\n\r\nconst { withProvider, withContext } = createRecipeContext(datePickerRecipe);\r\n\r\nexport const Root = withProvider(DatePicker.Root, 'root');\r\nexport const ClearTrigger = withContext(\r\n DatePicker.ClearTrigger,\r\n 'clearTrigger',\r\n);\r\nexport const Content = withContext(DatePicker.Content, 'content');\r\nexport const Control = withContext(DatePicker.Control, 'control');\r\nexport const Input = withContext(DatePicker.Input, 'input');\r\nexport const Label = withContext(DatePicker.Label, 'label');\r\nexport const MonthSelect = withContext(DatePicker.MonthSelect, 'monthSelect');\r\nexport const NextTrigger = withContext(DatePicker.NextTrigger, 'nextTrigger');\r\nexport const Positioner = withContext(DatePicker.Positioner, 'positioner');\r\nexport const PresetTrigger = withContext(\r\n DatePicker.PresetTrigger,\r\n 'presetTrigger',\r\n);\r\nexport const PrevTrigger = withContext(DatePicker.PrevTrigger, 'prevTrigger');\r\nexport const RangeText = withContext(DatePicker.RangeText, 'rangeText');\r\nexport const Table = withContext(DatePicker.Table, 'table');\r\nexport const TableBody = withContext(DatePicker.TableBody, 'tableBody');\r\nexport const TableCell = withContext(DatePicker.TableCell, 'tableCell');\r\nexport const TableCellTrigger = withContext(\r\n DatePicker.TableCellTrigger,\r\n 'tableCellTrigger',\r\n);\r\nexport const TableHead = withContext(DatePicker.TableHead, 'tableHead');\r\nexport const TableHeader = withContext(DatePicker.TableHeader, 'tableHeader');\r\nexport const TableRow = withContext(DatePicker.TableRow, 'tableRow');\r\nexport const Trigger = withContext(DatePicker.Trigger, 'trigger');\r\nexport const View = withContext(DatePicker.View, 'view');\r\nexport const ViewControl = withContext(DatePicker.ViewControl, 'viewControl');\r\nexport const ViewTrigger = withContext(DatePicker.ViewTrigger, 'viewTrigger');\r\nexport const YearSelect = withContext(DatePicker.YearSelect, 'yearSelect');\r\nexport const Context = DatePicker.Context;\r\n","import { datePickerAnatomy } from '@ark-ui/react';\r\nimport { tv } from 'tailwind-variants';\r\nimport { anatomyToRecipeSlots } from '../../utils/anatomyToRecipeSlots';\r\n\r\nexport const datePickerRecipe = tv({\r\n slots: anatomyToRecipeSlots(datePickerAnatomy, {\r\n content:\r\n 'border-gray-200 text-gray-600 ui-placement-top:ui-open:animate-popover-in-top ui-placement-top-end:ui-open:animate-popover-in-top ui-placement-top-start:ui-open:animate-popover-in-top ui-placement-top:ui-closed:animate-popover-out-top ui-placement-top-end:ui-closed:animate-popover-out-top ui-placement-top-start:ui-closed:animate-popover-out-top ui-placement-bottom:ui-open:animate-popover-in-bottom ui-placement-bottom-start:ui-open:animate-popover-in-bottom ui-placement-bottom-end:ui-open:animate-popover-in-bottom ui-placement-bottom:ui-closed:animate-popover-out-bottom ui-placement-bottom-start:ui-closed:animate-popover-out-bottom ui-placement-bottom-end:ui-closed:animate-popover-out-bottom ui-placement-left:ui-open:animate-popover-in-left ui-placement-left-start:ui-open:animate-popover-in-left ui-placement-left-end:ui-open:animate-popover-in-left ui-placement-left:ui-closed:animate-popover-out-left ui-placement-left-start:ui-closed:animate-popover-out-left ui-placement-left-end:ui-closed:animate-popover-out-left ui-placement-right:ui-open:animate-popover-in-right ui-placement-right-start:ui-open:animate-popover-in-right ui-placement-right-end:ui-open:animate-popover-in-right ui-placement-right:ui-closed:animate-popover-out-right ui-placement-right-start:ui-closed:animate-popover-out-right ui-placement-right-end:ui-closed:animate-popover-out-right z-dropdown rounded-xl border bg-white p-4',\r\n table: 'mt-3 border-separate border-spacing-0.5',\r\n tableCellTrigger:\r\n 'text-gray-600 ui-disabled:text-gray-400 ui-selected:ui-not-disabled:bg-gray-900 ui-today:after:bg-gray-600 ui-in-range:ui-not-disabled:bg-gray-100 ui-in-range:ui-not-disabled:text-gray-900 ui-range-start:ui-not-disabled:bg-gray-900 ui-range-end:ui-not-disabled:bg-gray-900 relative flex size-10 cursor-pointer items-center justify-center text-sm ui-disabled:cursor-not-allowed ui-selected:ui-not-disabled:rounded-full ui-selected:ui-not-disabled:font-medium ui-selected:ui-not-disabled:text-white ui-today:after:absolute ui-today:after:bottom-0 ui-today:after:left-1/2 ui-today:after:mb-1 ui-today:after:size-1 ui-today:after:-translate-x-1/2 ui-today:after:rounded-full ui-in-range:ui-not-disabled:rounded-full ui-in-range:ui-not-disabled:font-medium ui-range-start:ui-not-disabled:rounded-full ui-range-start:ui-not-disabled:font-medium ui-range-start:ui-not-disabled:text-white ui-range-end:ui-not-disabled:rounded-full ui-range-end:ui-not-disabled:font-medium ui-range-end:ui-not-disabled:text-white',\r\n tableHeader: 'py-3 text-sm font-medium',\r\n viewControl: 'flex items-center justify-between',\r\n prevTrigger:\r\n 'bg-gray-50 icon:size-5 flex size-9 items-center justify-center rounded-full',\r\n nextTrigger:\r\n 'bg-gray-50 icon:size-5 flex size-9 items-center justify-center rounded-full',\r\n rangeText: 'text-gray-600 text-base font-semibold',\r\n }),\r\n});\r\n","'use client';\r\n\r\nimport { ark, Dialog } from '@ark-ui/react';\r\nimport { createRecipeContext } from '../../utils/createRecipeContext';\r\nimport { dialogRecipe } from './dialog.recipe';\r\n\r\nconst { withContext, withRootProvider } = createRecipeContext(dialogRecipe);\r\n\r\nexport const Root = withRootProvider(Dialog.Root);\r\nexport const Backdrop = withContext(Dialog.Backdrop, 'backdrop');\r\nexport const CloseTrigger = withContext(Dialog.CloseTrigger, 'closeTrigger');\r\nexport const Content = withContext(Dialog.Content, 'content');\r\nexport const Description = withContext(Dialog.Description, 'description');\r\nexport const Positioner = withContext(Dialog.Positioner, 'positioner');\r\nexport const Title = withContext(Dialog.Title, 'title');\r\nexport const Trigger = withContext(Dialog.Trigger, 'trigger');\r\nexport const Header = withContext(ark.section, 'header');\r\nexport const Body = withContext(ark.section, 'body');\r\nexport const Footer = withContext(ark.section, 'footer');\r\nexport const Context = Dialog.Context;\r\n","import { dialogAnatomy } from '@ark-ui/react';\r\nimport { tv } from 'tailwind-variants';\r\nimport { anatomyToRecipeSlots } from '../../utils/anatomyToRecipeSlots';\r\n\r\nconst anatomy = dialogAnatomy.extendWith('header', 'body', 'footer');\r\n\r\nexport const dialogRecipe = tv({\r\n slots: anatomyToRecipeSlots(anatomy, {\r\n backdrop:\r\n 'z-backdrop ui-open:animate-backdrop-in ui-closed:animate-backdrop-out fixed inset-0 bg-black/60',\r\n positioner: 'z-dialog fixed inset-0 overflow-y-auto lg:py-16',\r\n content: 'ui-open:animate-dialog-in ui-closed:animate-dialog-out relative',\r\n closeTrigger:\r\n 'icon:size-6 text-gray-400 absolute right-2.5 top-2.5 flex size-11 items-center justify-center',\r\n }),\r\n});\r\n","'use client';\r\n\r\nimport { ark, Dialog } from '@ark-ui/react';\r\nimport { createRecipeContext } from '../../utils/createRecipeContext';\r\nimport { drawerRecipe } from './drawer.recipe';\r\n\r\nconst { withContext, withRootProvider } = createRecipeContext(drawerRecipe);\r\n\r\nexport const Root = withRootProvider(Dialog.Root);\r\nexport const Backdrop = withContext(Dialog.Backdrop, 'backdrop');\r\nexport const CloseTrigger = withContext(Dialog.CloseTrigger, 'closeTrigger');\r\nexport const Content = withContext(Dialog.Content, 'content');\r\nexport const Description = withContext(Dialog.Description, 'description');\r\nexport const Positioner = withContext(Dialog.Positioner, 'positioner');\r\nexport const Title = withContext(Dialog.Title, 'title');\r\nexport const Trigger = withContext(Dialog.Trigger, 'trigger');\r\nexport const Header = withContext(ark.section, 'header');\r\nexport const Body = withContext(ark.section, 'body');\r\nexport const Footer = withContext(ark.section, 'footer');\r\nexport const Context = Dialog.Context;\r\n","import { dialogAnatomy } from '@ark-ui/react';\r\nimport { tv } from 'tailwind-variants';\r\nimport { anatomyToRecipeSlots } from '../../utils/anatomyToRecipeSlots';\r\n\r\nconst anatomy = dialogAnatomy.extendWith('header', 'body', 'footer');\r\n\r\nexport const drawerRecipe = tv({\r\n slots: anatomyToRecipeSlots(anatomy, {\r\n backdrop:\r\n 'z-backdrop ui-open:animate-backdrop-in ui-closed:animate-backdrop-out fixed inset-0 bg-black/60',\r\n positioner:\r\n 'z-drawer fixed inset-0 overflow-hidden overflow-y-auto lg:py-16',\r\n content: 'absolute top-0 h-full w-full bg-white lg:w-[400px]',\r\n }),\r\n variants: {\r\n placement: {\r\n left: {\r\n content:\r\n 'ui-open:animate-drawer-in-left ui-closed:animate-drawer-out-left left-0',\r\n },\r\n right: {\r\n content:\r\n 'ui-open:animate-drawer-in-right ui-closed:animate-drawer-out-right right-0',\r\n },\r\n },\r\n },\r\n defaultVariants: {\r\n placement: 'right',\r\n },\r\n});\r\n","'use client';\r\n\r\nimport { Field } from '@ark-ui/react';\r\nimport { createRecipeContext } from '../../utils/createRecipeContext';\r\nimport { fieldRecipe } from './field.recipe';\r\n\r\nconst { withContext, withProvider } = createRecipeContext(fieldRecipe);\r\n\r\nexport const Root = withProvider(Field.Root, 'root');\r\nexport const Label = withContext(Field.Label, 'label');\r\nexport const Input = withContext(Field.Input, 'input');\r\nexport const HelperText = withContext(Field.HelperText, 'helperText');\r\nexport const ErrorText = withContext(Field.ErrorText, 'errorText');\r\nexport const Select = withContext(Field.Select, 'select');\r\nexport const Textarea = withContext(Field.Textarea, 'textarea');\r\nexport const Context = Field.Context;\r\n","import { fieldAnatomy } from '@ark-ui/react';\r\nimport { twMerge } from 'tailwind-merge';\r\nimport { tv } from 'tailwind-variants';\r\nimport { anatomyToRecipeSlots } from '../../utils/anatomyToRecipeSlots';\r\n\r\nconst outlineGrayInputStyle = twMerge(\r\n 'border',\r\n 'shadow-xs',\r\n 'bg-input-outline-gray-bg',\r\n 'text-input-outline-gray-fg',\r\n 'border-gray-200',\r\n 'placeholder:text-gray-400',\r\n 'ui-invalid:border-red-400',\r\n 'disabled:opacity-50',\r\n 'disabled:shadow-none',\r\n 'read-only:opacity-50',\r\n 'read-only:shadow-none',\r\n);\r\n\r\nexport const fieldRecipe = tv({\r\n slots: anatomyToRecipeSlots(fieldAnatomy, {\r\n input:\r\n 'outer-spin:appearance-none inner-spin:appearance-none block w-full rounded-md outline-none',\r\n select: 'block w-full rounded-md outline-none',\r\n textarea: 'block w-full rounded-md outline-none',\r\n label: 'text-gray-600 mb-sm inline-block text-sm font-medium',\r\n errorText: 'text-red-600 mt-sm inline-block text-sm',\r\n helperText: 'text-gray-500',\r\n requiredIndicator: 'text-red-500 text-sm',\r\n }),\r\n variants: {\r\n size: {\r\n md: {\r\n input: 'h-11 px-3.5',\r\n select: 'h-11 px-3.5',\r\n textarea: 'px-3.5 py-2.5',\r\n },\r\n },\r\n variant: {\r\n outline: {},\r\n },\r\n colorScheme: {\r\n gray: {},\r\n },\r\n },\r\n compoundVariants: [\r\n {\r\n variant: 'outline',\r\n colorScheme: 'gray',\r\n className: {\r\n input: outlineGrayInputStyle,\r\n select: outlineGrayInputStyle,\r\n textarea: outlineGrayInputStyle,\r\n },\r\n },\r\n ],\r\n defaultVariants: {\r\n size: 'md',\r\n variant: 'outline',\r\n colorScheme: 'gray',\r\n },\r\n});\r\n","'use client';\r\n\r\nimport { ark } from '@ark-ui/react';\r\nimport type { ComponentPropsWithRef } from 'react';\r\nimport type { Merge } from 'type-fest';\r\nimport { createSplitProps } from '../../utils/createSplitProps';\r\nimport { dataAttr } from '../../utils/dataAttr';\r\nimport {\r\n iconButtonRecipe,\r\n type IconButtonRecipeProps,\r\n} from './iconButton.recipe';\r\n\r\nexport interface IconButtonProps\r\n extends Merge<ComponentPropsWithRef<'button'>, IconButtonRecipeProps> {\r\n asChild?: boolean;\r\n}\r\n\r\nexport function IconButton(props: IconButtonProps) {\r\n const [recipeProps, localProps] = createSplitProps<IconButtonRecipeProps>(\r\n iconButtonRecipe.variantKeys,\r\n )(props);\r\n\r\n return (\r\n <ark.button\r\n type=\"button\"\r\n {...localProps}\r\n className={iconButtonRecipe({\r\n ...recipeProps,\r\n className: localProps.className,\r\n })}\r\n data-disabled={dataAttr(localProps.disabled)}\r\n />\r\n );\r\n}\r\n","import { tv, type VariantProps } from 'tailwind-variants';\r\nimport { buttonRecipe } from '../Button/button.recipe';\r\n\r\nexport const iconButtonRecipe = tv({\r\n extend: buttonRecipe,\r\n variants: {\r\n size: {\r\n sm: 'h-10 min-w-10 px-0',\r\n md: 'h-11 min-w-11 px-0',\r\n },\r\n },\r\n defaultVariants: {\r\n size: 'md',\r\n variant: 'solid',\r\n colorScheme: 'primary',\r\n fullWidth: false,\r\n },\r\n});\r\n\r\nexport type IconButtonRecipeProps = VariantProps<typeof iconButtonRecipe>;\r\n","'use client';\r\n\r\nimport { Menu } from '@ark-ui/react';\r\n\r\nexport const Root = Menu.Root;\r\n","'use client';\r\n\r\nimport { NumberInput } from '@ark-ui/react';\r\nimport { createRecipeContext } from '../../utils/createRecipeContext';\r\nimport { numberInputRecipe } from './numberInput.recipe';\r\n\r\nconst { withContext, withProvider } = createRecipeContext(numberInputRecipe);\r\n\r\nexport const Root = withProvider(NumberInput.Root, 'root');\r\nexport const Control = withContext(NumberInput.Control, 'control');\r\nexport const DecrementTrigger = withContext(\r\n NumberInput.DecrementTrigger,\r\n 'decrementTrigger',\r\n);\r\nexport const IncrementTrigger = withContext(\r\n NumberInput.IncrementTrigger,\r\n 'incrementTrigger',\r\n);\r\nexport const Input = withContext(NumberInput.Input, 'input');\r\nexport const Label = withContext(NumberInput.Label, 'label');\r\nexport const Scrubber = withContext(NumberInput.Scrubber, 'scrubber');\r\nexport const ValueText = withContext(NumberInput.ValueText, 'valueText');\r\nexport const Context = NumberInput.Context;\r\n","import { numberInputAnatomy } from '@ark-ui/react';\r\nimport { tv } from 'tailwind-variants';\r\nimport { anatomyToRecipeSlots } from '../../utils/anatomyToRecipeSlots';\r\n\r\nexport const numberInputRecipe = tv({\r\n slots: anatomyToRecipeSlots(numberInputAnatomy, {\r\n control:\r\n 'border-gray-200 ui-invalid:border-red-400 grid grid-cols-[1fr_32px] grid-rows-[1fr_1fr] overflow-hidden rounded-lg border bg-transparent ui-disabled:opacity-50 ui-readonly:cursor-default ui-readonly:opacity-50',\r\n input:\r\n 'placeholder:text-gray-400 row-[span_2/span_2] w-full border-0 bg-transparent outline-none disabled:cursor-not-allowed',\r\n label: 'text-gray-600 mb-sm inline-block text-sm font-medium',\r\n decrementTrigger:\r\n 'border-gray-200 icon:text-gray-600 inline-flex cursor-pointer items-center justify-center border-l border-t ui-disabled:cursor-not-allowed',\r\n incrementTrigger:\r\n 'border-gray-200 icon:text-gray-600 inline-flex cursor-pointer items-center justify-center border-l ui-disabled:cursor-not-allowed',\r\n }),\r\n variants: {\r\n size: {\r\n md: {\r\n control: 'h-11 pl-3.5 text-base',\r\n incrementTrigger: 'icon:size-5',\r\n decrementTrigger: 'icon:size-5',\r\n },\r\n },\r\n },\r\n defaultVariants: {\r\n size: 'md',\r\n },\r\n});\r\n","'use client';\r\n\r\nimport { PinInput } from '@ark-ui/react';\r\nimport { createRecipeContext } from '../../utils/createRecipeContext';\r\nimport { pinInputRecipe } from './pinInput.recipe';\r\n\r\nconst { withContext, withProvider } = createRecipeContext(pinInputRecipe);\r\n\r\nexport const Root = withProvider(PinInput.Root, 'root');\r\nexport const Label = withContext(PinInput.Label, 'label');\r\nexport const Control = withContext(PinInput.Control, 'control');\r\nexport const Input = withContext(PinInput.Input, 'input');\r\nexport const HiddenInput = PinInput.HiddenInput;\r\nexport const Context = PinInput.Context;\r\n","import { pinInputAnatomy } from '@ark-ui/react';\r\nimport { tv } from 'tailwind-variants';\r\nimport { anatomyToRecipeSlots } from '../../utils/anatomyToRecipeSlots';\r\n\r\nexport const pinInputRecipe = tv({\r\n slots: anatomyToRecipeSlots(pinInputAnatomy, {\r\n control: 'grid grid-cols-6',\r\n input: 'aspect-[10/11] w-full rounded-md outline-none',\r\n label: 'text-input-label-fg mb-sm inline-block text-sm font-medium',\r\n }),\r\n variants: {\r\n size: {\r\n md: {\r\n input: 'text-center text-2xl font-medium',\r\n control: 'gap-2',\r\n },\r\n },\r\n variant: {\r\n outline: {},\r\n },\r\n colorScheme: {\r\n gray: {},\r\n },\r\n },\r\n compoundVariants: [\r\n {\r\n variant: 'outline',\r\n colorScheme: 'gray',\r\n className: {\r\n input:\r\n 'shadow-xs border-gray-200 placeholder:text-gray-400 ui-invalid:border-red-400 border read-only:opacity-50 read-only:shadow-none disabled:opacity-50 disabled:shadow-none',\r\n },\r\n },\r\n ],\r\n defaultVariants: {\r\n size: 'md',\r\n variant: 'outline',\r\n colorScheme: 'gray',\r\n },\r\n});\r\n","'use client';\r\n\r\nimport { Popover } from '@ark-ui/react';\r\nimport { createRecipeContext } from '../../utils/createRecipeContext';\r\nimport { popoverRecipe } from './popover.recipe';\r\n\r\nconst { withRootProvider, withContext } = createRecipeContext(popoverRecipe);\r\n\r\nexport const Root = withRootProvider(Popover.Root);\r\nexport const Anchor = withContext(Popover.Anchor, 'anchor');\r\nexport const Arrow = withContext(Popover.Arrow, 'arrow');\r\nexport const ArrowTip = withContext(Popover.ArrowTip, 'arrowTip');\r\nexport const CloseTrigger = withContext(Popover.CloseTrigger, 'closeTrigger');\r\nexport const Content = withContext(Popover.Content, 'content');\r\nexport const Description = withContext(Popover.Description, 'description');\r\nexport const Indicator = withContext(Popover.Indicator, 'indicator');\r\nexport const Positioner = withContext(Popover.Positioner, 'positioner');\r\nexport const Title = withContext(Popover.Title, 'title');\r\nexport const Trigger = withContext(Popover.Trigger, 'trigger');\r\nexport const Context = Popover.Context;\r\n","import { popoverAnatomy } from '@ark-ui/react';\r\nimport { tv } from 'tailwind-variants';\r\nimport { anatomyToRecipeSlots } from '../../utils/anatomyToRecipeSlots';\r\n\r\nexport const popoverRecipe = tv({\r\n slots: anatomyToRecipeSlots(popoverAnatomy, {\r\n content:\r\n 'ui-placement-top:ui-open:animate-popover-in-top ui-placement-top-end:ui-open:animate-popover-in-top ui-placement-top-start:ui-open:animate-popover-in-top ui-placement-top:ui-closed:animate-popover-out-top ui-placement-top-end:ui-closed:animate-popover-out-top ui-placement-top-start:ui-closed:animate-popover-out-top ui-placement-bottom:ui-open:animate-popover-in-bottom ui-placement-bottom-start:ui-open:animate-popover-in-bottom ui-placement-bottom-end:ui-open:animate-popover-in-bottom ui-placement-bottom:ui-closed:animate-popover-out-bottom ui-placement-bottom-start:ui-closed:animate-popover-out-bottom ui-placement-bottom-end:ui-closed:animate-popover-out-bottom ui-placement-left:ui-open:animate-popover-in-left ui-placement-left-start:ui-open:animate-popover-in-left ui-placement-left-end:ui-open:animate-popover-in-left ui-placement-left:ui-closed:animate-popover-out-left ui-placement-left-start:ui-closed:animate-popover-out-left ui-placement-left-end:ui-closed:animate-popover-out-left ui-placement-right:ui-open:animate-popover-in-right ui-placement-right-start:ui-open:animate-popover-in-right ui-placement-right-end:ui-open:animate-popover-in-right ui-placement-right:ui-closed:animate-popover-out-right ui-placement-right-start:ui-closed:animate-popover-out-right ui-placement-right-end:ui-closed:animate-popover-out-right',\r\n positioner: 'z-popover',\r\n }),\r\n});\r\n","'use client';\r\n\r\nimport { Progress } from '@ark-ui/react';\r\n\r\nexport const Root = Progress.Root;\r\n","'use client';\r\n\r\nimport { SegmentGroup } from '@ark-ui/react';\r\nimport { createRecipeContext } from '../../utils/createRecipeContext';\r\nimport { segmentGroupRecipe } from './segmentGroup.recipe';\r\n\r\nconst { withProvider, withContext } = createRecipeContext(segmentGroupRecipe);\r\n\r\nexport const Root = withProvider(SegmentGroup.Root, 'root');\r\nexport const Indicator = withContext(SegmentGroup.Indicator, 'indicator');\r\nexport const Item = withContext(SegmentGroup.Item, 'item');\r\nexport const ItemControl = withContext(SegmentGroup.ItemControl, 'itemControl');\r\nexport const ItemText = withContext(SegmentGroup.ItemText, 'itemText');\r\nexport const Label = withContext(SegmentGroup.Label, 'label');\r\nexport const Context = SegmentGroup.Context;\r\nexport const ItemContext = SegmentGroup.ItemContext;\r\nexport const ItemHiddenInput = SegmentGroup.ItemHiddenInput;\r\n","import { segmentGroupAnatomy } from '@ark-ui/react';\r\nimport { tv } from 'tailwind-variants';\r\nimport { anatomyToRecipeSlots } from '../../utils/anatomyToRecipeSlots';\r\n\r\nexport const segmentGroupRecipe = tv({\r\n slots: anatomyToRecipeSlots(segmentGroupAnatomy),\r\n variants: {\r\n size: {\r\n md: {},\r\n },\r\n variant: {\r\n unstyled: {},\r\n default: {\r\n root: 'bg-gray-50 border-gray-200 relative flex w-fit gap-md rounded-md border p-1',\r\n item: 'z-1 text-gray-600 ui-checked:text-gray-800 relative cursor-pointer transition-all duration-200',\r\n indicator:\r\n 'left-[var(--left)] top-[var(--top)] h-[var(--height)] w-[var(--width)] bg-white',\r\n },\r\n },\r\n },\r\n compoundVariants: [\r\n {\r\n size: 'md',\r\n variant: 'default',\r\n className: {\r\n item: 'px-lg py-md text-sm font-semibold',\r\n indicator: 'rounded-sm shadow-sm',\r\n },\r\n },\r\n ],\r\n defaultVariants: {\r\n size: 'md',\r\n variant: 'default',\r\n },\r\n});\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n'use client';\r\n\r\nimport { Select } from '@ark-ui/react';\r\nimport { createRecipeContext } from '../../utils/createRecipeContext';\r\nimport { selectRecipe } from './select.recipe';\r\n\r\nconst { withProvider, withContext } = createRecipeContext(selectRecipe);\r\n\r\nexport const Root = withProvider(Select.Root<any>, 'root');\r\nexport const ClearTrigger = withContext(Select.ClearTrigger, 'clearTrigger');\r\nexport const Content = withContext(Select.Content, 'content');\r\nexport const Control = withContext(Select.Control, 'control');\r\nexport const Indicator = withContext(Select.Indicator, 'indicator');\r\nexport const Item = withContext(Select.Item, 'item');\r\nexport const ItemGroup = withContext(Select.ItemGroup, 'itemGroup');\r\nexport const ItemGroupLabel = withContext(\r\n Select.ItemGroupLabel,\r\n 'itemGroupLabel',\r\n);\r\nexport const ItemIndicator = withContext(Select.ItemIndicator, 'itemIndicator');\r\nexport const ItemText = withContext(Select.ItemText, 'itemText');\r\nexport const Label = withContext(Select.Label, 'label');\r\nexport const List = withContext(Select.List, 'list');\r\nexport const Positioner = withContext(Select.Positioner, 'positioner');\r\nexport const Trigger = withContext(Select.Trigger, 'trigger');\r\nexport const ValueText = withContext(Select.ValueText, 'valueText');\r\nexport const Context = Select.Context;\r\nexport const HiddenSelect = Select.HiddenSelect;\r\nexport const ItemContext = Select.ItemContext;\r\n","import { selectAnatomy } from '@ark-ui/react';\r\nimport { tv } from 'tailwind-variants';\r\nimport { anatomyToRecipeSlots } from '../../utils/anatomyToRecipeSlots';\r\n\r\nexport const selectRecipe = tv({\r\n slots: anatomyToRecipeSlots(selectAnatomy, {\r\n indicator:\r\n 'text-gray-500 transition-transform duration-200 ui-open:rotate-180 ui-closed:rotate-0',\r\n positioner: 'z-dropdown',\r\n content:\r\n 'border-gray-200 ui-placement-top:ui-open:animate-popover-in-top ui-placement-top-end:ui-open:animate-popover-in-top ui-placement-top-start:ui-open:animate-popover-in-top ui-placement-top:ui-closed:animate-popover-out-top ui-placement-top-end:ui-closed:animate-popover-out-top ui-placement-top-start:ui-closed:animate-popover-out-top ui-placement-bottom:ui-open:animate-popover-in-bottom ui-placement-bottom-start:ui-open:animate-popover-in-bottom ui-placement-bottom-end:ui-open:animate-popover-in-bottom ui-placement-bottom:ui-closed:animate-popover-out-bottom ui-placement-bottom-start:ui-closed:animate-popover-out-bottom ui-placement-bottom-end:ui-closed:animate-popover-out-bottom ui-placement-left:ui-open:animate-popover-in-left ui-placement-left-start:ui-open:animate-popover-in-left ui-placement-left-end:ui-open:animate-popover-in-left ui-placement-left:ui-closed:animate-popover-out-left ui-placement-left-start:ui-closed:animate-popover-out-left ui-placement-left-end:ui-closed:animate-popover-out-left ui-placement-right:ui-open:animate-popover-in-right ui-placement-right-start:ui-open:animate-popover-in-right ui-placement-right-end:ui-open:animate-popover-in-right ui-placement-right:ui-closed:animate-popover-out-right ui-placement-right-start:ui-closed:animate-popover-out-right ui-placement-right-end:ui-closed:animate-popover-out-right z-dropdown rounded-md border bg-white p-1',\r\n item: 'ui-highlighted:bg-gray-50 flex cursor-pointer items-center gap-2 rounded-sm px-2.5 py-1',\r\n itemText: 'grow',\r\n itemIndicator: 'text-green-500 size-4',\r\n }),\r\n variants: {\r\n size: {\r\n sm: {\r\n trigger: 'h-10 gap-md px-3',\r\n indicator: 'size-5',\r\n },\r\n md: {\r\n trigger: 'h-11 gap-lg px-3.5',\r\n indicator: 'size-5',\r\n },\r\n },\r\n variant: {\r\n outline: {\r\n trigger:\r\n 'shadow-xs border-gray-200 ui-placeholder-shown:text-gray-500 flex items-center rounded-md border text-left',\r\n },\r\n },\r\n },\r\n defaultVariants: {\r\n size: 'md',\r\n variant: 'outline',\r\n },\r\n});\r\n","'use client';\r\n\r\nimport { ark } from '@ark-ui/react';\r\nimport { createRecipeContext } from '../../utils/createRecipeContext';\r\nimport { tableRecipe } from './table.recipe';\r\n\r\nconst { withProvider, withContext } = createRecipeContext(tableRecipe);\r\n\r\nexport const Root = withProvider(ark.table, 'root');\r\nexport const Header = withContext(ark.thead, 'header');\r\nexport const Body = withContext(ark.tbody, 'body');\r\nexport const Footer = withContext(ark.tfoot, 'footer');\r\nexport const Row = withContext(ark.tr, 'row');\r\nexport const Heading = withContext(ark.th, 'heading');\r\nexport const Cell = withContext(ark.td, 'cell');\r\n","import { tv } from 'tailwind-variants';\r\nimport { anatomyToRecipeSlots } from '../../utils/anatomyToRecipeSlots';\r\nimport { tableAnatomy } from './table.anatomy';\r\n\r\nexport const tableRecipe = tv({\r\n slots: anatomyToRecipeSlots(tableAnatomy, {\r\n root: 'w-full whitespace-nowrap',\r\n }),\r\n variants: {\r\n size: {\r\n md: {\r\n root: 'border-gray-200 border',\r\n heading: 'px-3xl py-lg text-left text-xs font-medium',\r\n cell: 'px-3xl py-xl text-sm',\r\n },\r\n },\r\n variant: {\r\n outline: {\r\n header: 'tr:bg-white tr:border-b tr:border-gray-200',\r\n body: 'tr:odd:bg-gray-50 tr:border-gray-200 tr:border-b tr:last:border-b-0 tr:even:bg-white',\r\n },\r\n },\r\n },\r\n defaultVariants: {\r\n size: 'md',\r\n variant: 'outline',\r\n },\r\n});\r\n","import { createAnatomy } from '@ark-ui/anatomy';\r\n\r\nexport const tableAnatomy = createAnatomy('table').parts(\r\n 'root',\r\n 'header',\r\n 'body',\r\n 'footer',\r\n 'row',\r\n 'cell',\r\n 'heading',\r\n);\r\n","'use client';\r\n\r\nimport { Tabs } from '@ark-ui/react';\r\nimport { createRecipeContext } from '../../utils/createRecipeContext';\r\nimport { tabsRecipe } from './tabs.recipe';\r\n\r\nconst { withContext, withProvider } = createRecipeContext(tabsRecipe);\r\n\r\nexport const Root = withProvider(Tabs.Root, 'root');\r\nexport const Content = withContext(Tabs.Content, 'content');\r\nexport const Indicator = withContext(Tabs.Indicator, 'indicator');\r\nexport const List = withContext(Tabs.List, 'list');\r\nexport const Trigger = withContext(Tabs.Trigger, 'trigger');\r\nexport const Context = Tabs.Context;\r\n","import { tabsAnatomy } from '@ark-ui/react';\r\nimport { tv } from 'tailwind-variants';\r\nimport { anatomyToRecipeSlots } from '../../utils/anatomyToRecipeSlots';\r\n\r\nexport const tabsRecipe = tv({\r\n slots: anatomyToRecipeSlots(tabsAnatomy),\r\n variants: {\r\n size: {\r\n md: {},\r\n },\r\n variant: {\r\n unstyled: {},\r\n default: {\r\n list: 'border-gray-200 bg-gray-50 relative flex w-fit gap-md rounded-md border p-1',\r\n indicator: 'h-[var(--height)] w-[var(--width)] bg-white',\r\n trigger:\r\n 'z-1 text-gray-600 ui-selected:text-gray-800 relative transition-all duration-200',\r\n },\r\n },\r\n },\r\n compoundVariants: [\r\n {\r\n size: 'md',\r\n variant: 'default',\r\n className: {\r\n indicator: 'rounded-sm shadow-sm',\r\n trigger: 'px-lg py-md text-sm font-semibold',\r\n },\r\n },\r\n ],\r\n defaultVariants: {\r\n size: 'md',\r\n variant: 'default',\r\n },\r\n});\r\n","'use client';\r\n\r\nimport { Tooltip } from '@ark-ui/react';\r\n\r\nexport const Root = Tooltip.Root;\r\n"],"mappings":"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","names":["React","useContext","withRootProvider","withProvider","withContext","anatomy","Context","Root","tv","tv","withContext","Root","Context","Root","ark","tv","tv","withProvider","withContext","Root","ark","ark","tv","ark","Context","Indicator","Label","Root","withContext","withProvider","tv","tv","withContext","withProvider","Root","Indicator","Label","Context","Root","Content","Context","Control","Label","Positioner","Root","Trigger","tv","tv","withProvider","withContext","Root","Content","Control","Label","Positioner","Trigger","Context","Backdrop","Body","CloseTrigger","Content","Context","Description","Footer","Header","Positioner","Root","Title","Trigger","ark","Dialog","dialogAnatomy","tv","anatomy","dialogAnatomy","tv","withContext","withRootProvider","Root","Dialog","Backdrop","CloseTrigger","Content","Description","Positioner","Title","Trigger","Header","ark","Body","Footer","Context","Backdrop","Body","CloseTrigger","Content","Context","Description","Footer","Header","Positioner","Root","Title","Trigger","ark","Dialog","dialogAnatomy","tv","anatomy","dialogAnatomy","tv","withContext","withRootProvider","Root","Dialog","Backdrop","CloseTrigger","Content","Description","Positioner","Title","Trigger","Header","ark","Body","Footer","Context","Context","Input","Label","Root","tv","tv","withContext","withProvider","Root","Label","Input","Context","ark","tv","tv","ark","Root","Context","Control","Input","Label","Root","tv","tv","withContext","withProvider","Root","Control","Input","Label","Context","Context","Control","HiddenInput","Input","Label","Root","tv","tv","withContext","withProvider","Root","Label","Control","Input","HiddenInput","Context","CloseTrigger","Content","Context","Description","Indicator","Positioner","Root","Title","Trigger","tv","tv","withRootProvider","withContext","Root","CloseTrigger","Content","Description","Indicator","Positioner","Title","Trigger","Context","Root","Context","Indicator","Label","Root","tv","tv","withProvider","withContext","Root","Indicator","Label","Context","ClearTrigger","Content","Context","Control","Indicator","Item","ItemContext","ItemText","Label","Positioner","Root","Trigger","ValueText","Select","tv","tv","withProvider","withContext","Root","Select","ClearTrigger","Content","Control","Indicator","Item","ItemText","Label","Positioner","Trigger","ValueText","Context","ItemContext","Body","Footer","Header","Root","ark","tv","createAnatomy","tv","withProvider","withContext","Root","ark","Header","Body","Footer","Content","Context","Indicator","List","Root","Trigger","tv","tv","withContext","withProvider","Root","Content","Indicator","List","Trigger","Context","Root"]}
Binary file
Binary file
package/dist/handlers.js CHANGED
@@ -26,68 +26,38 @@ __export(handlers_exports, {
26
26
  });
27
27
  module.exports = __toCommonJS(handlers_exports);
28
28
  var import_portal_sdk_core = require("@opexa/portal-sdk-core");
29
-
30
- // ../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/constants.js
31
- var daysInYear = 365.2425;
32
- var maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1e3;
33
- var minTime = -maxTime;
34
- var millisecondsInMinute = 6e4;
35
- var secondsInHour = 3600;
36
- var secondsInDay = secondsInHour * 24;
37
- var secondsInWeek = secondsInDay * 7;
38
- var secondsInYear = secondsInDay * daysInYear;
39
- var secondsInMonth = secondsInYear / 12;
40
- var secondsInQuarter = secondsInMonth * 3;
41
- var constructFromSymbol = Symbol.for("constructDateFrom");
42
-
43
- // ../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/constructFrom.js
44
- function constructFrom(date, value) {
45
- if (typeof date === "function") return date(value);
46
- if (date && typeof date === "object" && constructFromSymbol in date)
47
- return date[constructFromSymbol](value);
48
- if (date instanceof Date) return new date.constructor(value);
49
- return new Date(value);
50
- }
51
-
52
- // ../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/toDate.js
53
- function toDate(argument, context) {
54
- return constructFrom(context || argument, argument);
55
- }
56
-
57
- // ../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/addDays.js
58
- function addDays(date, amount, options) {
59
- const _date = toDate(date, options == null ? void 0 : options.in);
60
- if (isNaN(amount)) return constructFrom((options == null ? void 0 : options.in) || date, NaN);
61
- if (!amount) return _date;
62
- _date.setDate(_date.getDate() + amount);
63
- return _date;
64
- }
65
-
66
- // ../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/addMinutes.js
67
- function addMinutes(date, amount, options) {
68
- const _date = toDate(date, options == null ? void 0 : options.in);
69
- _date.setTime(_date.getTime() + amount * millisecondsInMinute);
70
- return _date;
71
- }
72
-
73
- // ../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/subMinutes.js
74
- function subMinutes(date, amount, options) {
75
- return addMinutes(date, -amount, options);
76
- }
77
-
78
- // src/lib/handlers.ts
29
+ var import_date_fns = require("date-fns");
79
30
  var import_server = require("next/server");
80
31
  var import_zod2 = require("zod");
81
32
 
82
33
  // src/lib/constants/index.ts
83
34
  var import_zod = require("zod");
84
- var SITE_ID = import_zod.z.string().min(1, 'Environment variable "NEXT_PUBLIC_SITE_ID" must be 1 or more characters').max(32, 'Environment variable "NEXT_PUBLIC_SITE_ID" must not be more than 32 characters').trim().parse(process.env.NEXT_PUBLIC_SITE_ID);
85
- var PLATFORM_ID = import_zod.z.string().min(1, 'Environment variable "NEXT_PUBLIC_PLATFORM_ID" must be 1 or more characters').max(32, 'Environment variable "NEXT_PUBLIC_PLATFORM_ID" must not be more than 32 characters').trim().parse(process.env.NEXT_PUBLIC_PLATFORM_ID);
86
- var PLATFORM_CODE = import_zod.z.string().min(4, 'Environment variable "NEXT_PUBLIC_PLATFORM_CODE" must be at least 4 characters').max(8, 'Environment variable "NEXT_PUBLIC_PLATFORM_CODE" must not be more than 8 characters').trim().parse(process.env.NEXT_PUBLIC_PLATFORM_CODE);
35
+ var SITE_ID = import_zod.z.string().min(
36
+ 1,
37
+ 'Environment variable "NEXT_PUBLIC_SITE_ID" must be 1 or more characters'
38
+ ).max(
39
+ 32,
40
+ 'Environment variable "NEXT_PUBLIC_SITE_ID" must not be more than 32 characters'
41
+ ).trim().parse(process.env.NEXT_PUBLIC_SITE_ID);
42
+ var PLATFORM_ID = import_zod.z.string().min(
43
+ 1,
44
+ 'Environment variable "NEXT_PUBLIC_PLATFORM_ID" must be 1 or more characters'
45
+ ).max(
46
+ 32,
47
+ 'Environment variable "NEXT_PUBLIC_PLATFORM_ID" must not be more than 32 characters'
48
+ ).trim().parse(process.env.NEXT_PUBLIC_PLATFORM_ID);
49
+ var PLATFORM_CODE = import_zod.z.string().min(
50
+ 4,
51
+ 'Environment variable "NEXT_PUBLIC_PLATFORM_CODE" must be at least 4 characters'
52
+ ).max(
53
+ 8,
54
+ 'Environment variable "NEXT_PUBLIC_PLATFORM_CODE" must not be more than 8 characters'
55
+ ).trim().parse(process.env.NEXT_PUBLIC_PLATFORM_CODE);
87
56
  var ENVIRONMENT = import_zod.z.enum(["production", "development"]).catch("development").parse(process.env.NEXT_PUBLIC_ENVIRONMENT);
88
57
  var BYPASS_RECAPTCHA = import_zod.z.any().transform(Boolean).catch(false).parse(process.env.NEXT_PUBLIC_BYPASS_RECAPTCHA);
89
58
  var ACCESS_TOKEN_COOKIE_NAME = "WebPortalAuthAccessToken";
90
59
  var REFRESH_TOKEN_COOKIE_NAME = "WebPortalAuthRefreshToken";
60
+ var RECAPTCHA_HEADER_KEY = "Google-Recaptcha-Response";
91
61
 
92
62
  // src/lib/handlers.ts
93
63
  var CreateSessionDefinition = import_zod2.z.union([
@@ -106,7 +76,11 @@ var CreateSessionDefinition = import_zod2.z.union([
106
76
  session: import_zod2.z.string()
107
77
  }),
108
78
  import_zod2.z.object({
109
- type: import_zod2.z.union([import_zod2.z.literal("SOCIALS"), import_zod2.z.literal("CABINET"), import_zod2.z.literal("SINGLE_USE_TOKEN")]),
79
+ type: import_zod2.z.union([
80
+ import_zod2.z.literal("SOCIALS"),
81
+ import_zod2.z.literal("CABINET"),
82
+ import_zod2.z.literal("SINGLE_USE_TOKEN")
83
+ ]),
110
84
  token: import_zod2.z.string()
111
85
  })
112
86
  ]);
@@ -149,7 +123,7 @@ var GET = async (request, { params }) => {
149
123
  }
150
124
  });
151
125
  response.cookies.set(ACCESS_TOKEN_COOKIE_NAME, data.accessToken, {
152
- expires: addMinutes(/* @__PURE__ */ new Date(), 9),
126
+ expires: (0, import_date_fns.addMinutes)(/* @__PURE__ */ new Date(), 9),
153
127
  httpOnly: true,
154
128
  sameSite: "strict"
155
129
  });
@@ -216,6 +190,7 @@ var POST = async (request, { params }) => {
216
190
  if (path === "sessions") {
217
191
  const body = await request.json();
218
192
  const parsed = CreateSessionDefinition.safeParse(body);
193
+ const recaptcha = request.headers.get(RECAPTCHA_HEADER_KEY);
219
194
  if (!parsed.success) {
220
195
  return import_server.NextResponse.json(
221
196
  {
@@ -228,7 +203,13 @@ var POST = async (request, { params }) => {
228
203
  try {
229
204
  const res = await (0, import_portal_sdk_core.createSession)(parsed.data, {
230
205
  headers: {
231
- "Platform-Code": PLATFORM_CODE
206
+ "Platform-Code": PLATFORM_CODE,
207
+ ...recaptcha && {
208
+ [RECAPTCHA_HEADER_KEY]: recaptcha
209
+ },
210
+ ...BYPASS_RECAPTCHA && {
211
+ "Test-Pass": ""
212
+ }
232
213
  },
233
214
  environment: ENVIRONMENT
234
215
  });
@@ -243,12 +224,12 @@ var POST = async (request, { params }) => {
243
224
  { status: 201 }
244
225
  );
245
226
  response.cookies.set(ACCESS_TOKEN_COOKIE_NAME, res.accessToken, {
246
- expires: addMinutes(/* @__PURE__ */ new Date(), 9),
227
+ expires: (0, import_date_fns.addMinutes)(/* @__PURE__ */ new Date(), 9),
247
228
  httpOnly: true,
248
229
  sameSite: "strict"
249
230
  });
250
231
  response.cookies.set(REFRESH_TOKEN_COOKIE_NAME, res.refreshToken, {
251
- expires: subMinutes(addDays(/* @__PURE__ */ new Date(), 30), 1),
232
+ expires: (0, import_date_fns.subMinutes)((0, import_date_fns.addDays)(/* @__PURE__ */ new Date(), 30), 1),
252
233
  httpOnly: true,
253
234
  sameSite: "strict"
254
235
  });
@@ -266,6 +247,7 @@ var POST = async (request, { params }) => {
266
247
  if (path === "authenticate") {
267
248
  const body = await request.json();
268
249
  const parsed = AuthenticateDefinition.safeParse(body);
250
+ const recaptcha = request.headers.get(RECAPTCHA_HEADER_KEY);
269
251
  if (!parsed.success) {
270
252
  return import_server.NextResponse.json(
271
253
  {
@@ -278,17 +260,26 @@ var POST = async (request, { params }) => {
278
260
  try {
279
261
  const res = await (0, import_portal_sdk_core.authenticate)(parsed.data, {
280
262
  headers: {
281
- "Platform-Code": PLATFORM_CODE
263
+ "Platform-Code": PLATFORM_CODE,
264
+ ...recaptcha && {
265
+ [RECAPTCHA_HEADER_KEY]: recaptcha
266
+ },
267
+ ...BYPASS_RECAPTCHA && {
268
+ "Test-Pass": ""
269
+ }
282
270
  },
283
271
  environment: ENVIRONMENT
284
272
  });
285
- const response = import_server.NextResponse.json({ ok: true }, { status: 201 });
273
+ const response = import_server.NextResponse.json(
274
+ { ok: true },
275
+ { status: 201 }
276
+ );
286
277
  response.cookies.set(ACCESS_TOKEN_COOKIE_NAME, res.accessToken, {
287
- expires: addMinutes(/* @__PURE__ */ new Date(), 9),
278
+ expires: (0, import_date_fns.addMinutes)(/* @__PURE__ */ new Date(), 9),
288
279
  httpOnly: true
289
280
  });
290
281
  response.cookies.set(REFRESH_TOKEN_COOKIE_NAME, res.refreshToken, {
291
- expires: subMinutes(addDays(/* @__PURE__ */ new Date(), 30), 1),
282
+ expires: (0, import_date_fns.subMinutes)((0, import_date_fns.addDays)(/* @__PURE__ */ new Date(), 30), 1),
292
283
  httpOnly: true
293
284
  });
294
285
  return response;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/handlers.ts","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/constants.js","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/constructFrom.js","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/toDate.js","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/addDays.js","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/addMinutes.js","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/subMinutes.js","../src/lib/constants/index.ts"],"sourcesContent":["import {\r\n authenticate,\r\n createSession,\r\n destroySession,\r\n refreshSession,\r\n type Authenticator,\r\n} from '@opexa/portal-sdk-core';\r\nimport { addDays, addMinutes, subMinutes } from 'date-fns';\r\nimport { NextRequest, NextResponse } from 'next/server';\r\nimport { z } from 'zod';\r\nimport {\r\n ACCESS_TOKEN_COOKIE_NAME,\r\n ENVIRONMENT,\r\n PLATFORM_CODE,\r\n REFRESH_TOKEN_COOKIE_NAME,\r\n} from './constants';\r\nimport type { ApiResponse } from './types';\r\n\r\nconst CreateSessionDefinition = z.union([\r\n z.object({\r\n type: z.literal('NAME_AND_PASSWORD'),\r\n name: z.string(),\r\n password: z.string(),\r\n }),\r\n z.object({\r\n type: z.literal('MOBILE_NUMBER'),\r\n mobileNumber: z.string(),\r\n verificationCode: z.string(),\r\n }),\r\n z.object({\r\n type: z.literal('MAYA'),\r\n session: z.string(),\r\n }),\r\n z.object({\r\n type: z.union([z.literal('SOCIALS'), z.literal('CABINET'), z.literal('SINGLE_USE_TOKEN')]),\r\n token: z.string(),\r\n }),\r\n]);\r\n\r\nconst AuthenticateDefinition = z.object({\r\n type: z.literal('SECURITY_QUESTION'),\r\n token: z.string(),\r\n secretAnswer: z.string(),\r\n});\r\n\r\ntype GetSessionResponse =\r\n | {\r\n status: 'authenticated';\r\n token: string;\r\n }\r\n | {\r\n status: 'unauthenticated';\r\n };\r\n\r\nexport const GET = async (\r\n request: NextRequest,\r\n { params }: { params: Promise<{ auth: string[] }> },\r\n) => {\r\n const { auth } = await params;\r\n const path = auth[0];\r\n\r\n /*\r\n *\r\n * GET -> /api/sessions\r\n *\r\n */\r\n\r\n if (path === 'sessions') {\r\n const accessToken = request.cookies.get(ACCESS_TOKEN_COOKIE_NAME)?.value;\r\n const refreshToken = request.cookies.get(REFRESH_TOKEN_COOKIE_NAME)?.value;\r\n\r\n if (!refreshToken) {\r\n const response = NextResponse.json<ApiResponse<GetSessionResponse>>({\r\n ok: true,\r\n data: {\r\n status: 'unauthenticated',\r\n },\r\n });\r\n\r\n response.cookies.delete(ACCESS_TOKEN_COOKIE_NAME);\r\n response.cookies.delete(REFRESH_TOKEN_COOKIE_NAME);\r\n\r\n return response;\r\n }\r\n\r\n if (!accessToken) {\r\n try {\r\n const data = await refreshSession({\r\n headers: {\r\n Authorization: `Bearer ${refreshToken}`,\r\n },\r\n environment: ENVIRONMENT,\r\n });\r\n\r\n const response = NextResponse.json<ApiResponse<GetSessionResponse>>({\r\n ok: true,\r\n data: {\r\n status: 'authenticated',\r\n token: data.accessToken,\r\n },\r\n });\r\n\r\n response.cookies.set(ACCESS_TOKEN_COOKIE_NAME, data.accessToken, {\r\n expires: addMinutes(new Date(), 9),\r\n httpOnly: true,\r\n sameSite: 'strict',\r\n });\r\n\r\n return response;\r\n } catch {\r\n const response = NextResponse.json<ApiResponse<GetSessionResponse>>({\r\n ok: true,\r\n data: {\r\n status: 'unauthenticated',\r\n },\r\n });\r\n\r\n response.cookies.delete(REFRESH_TOKEN_COOKIE_NAME);\r\n\r\n return response;\r\n }\r\n }\r\n\r\n return NextResponse.json<ApiResponse<GetSessionResponse>>({\r\n ok: true,\r\n data: {\r\n status: 'authenticated',\r\n token: accessToken,\r\n },\r\n });\r\n }\r\n\r\n return NextResponse.json<ApiResponse>(\r\n {\r\n ok: false,\r\n message: 'Not found',\r\n },\r\n { status: 404 },\r\n );\r\n};\r\n\r\nexport const DELETE = async (\r\n request: NextRequest,\r\n { params }: { params: Promise<{ auth: string[] }> },\r\n) => {\r\n const { auth } = await params;\r\n const path = auth[0];\r\n\r\n /*\r\n *\r\n * DELETE -> /api/sessions\r\n *\r\n */\r\n\r\n if (path === 'sessions') {\r\n const accessToken = request.cookies.get(ACCESS_TOKEN_COOKIE_NAME)?.value;\r\n\r\n if (accessToken) {\r\n await destroySession({\r\n headers: {\r\n Authorization: `Bearer ${accessToken}`,\r\n },\r\n environment: ENVIRONMENT,\r\n });\r\n }\r\n\r\n const response = NextResponse.json<ApiResponse>({\r\n ok: true,\r\n });\r\n\r\n response.cookies.delete(ACCESS_TOKEN_COOKIE_NAME);\r\n response.cookies.delete(REFRESH_TOKEN_COOKIE_NAME);\r\n\r\n return response;\r\n }\r\n\r\n return NextResponse.json<ApiResponse>(\r\n {\r\n ok: false,\r\n message: 'Not found',\r\n },\r\n { status: 404 },\r\n );\r\n};\r\n\r\nexport const POST = async (\r\n request: NextRequest,\r\n { params }: { params: Promise<{ auth: string[] }> },\r\n): Promise<NextResponse> => {\r\n const { auth } = await params;\r\n const path = auth[0];\r\n\r\n /*\r\n *\r\n * POST -> /api/sessions\r\n *\r\n */\r\n\r\n if (path === 'sessions') {\r\n const body = await request.json();\r\n const parsed = CreateSessionDefinition.safeParse(body);\r\n\r\n if (!parsed.success) {\r\n return NextResponse.json<ApiResponse>(\r\n {\r\n ok: false,\r\n message: parsed.error.issues[0].message,\r\n },\r\n { status: 400 },\r\n );\r\n }\r\n\r\n try {\r\n const res = await createSession(parsed.data, {\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n },\r\n environment: ENVIRONMENT,\r\n });\r\n\r\n if (res.authenticator) {\r\n return NextResponse.json<ApiResponse<Authenticator | null>>({\r\n ok: true,\r\n data: res.authenticator,\r\n });\r\n }\r\n\r\n const response = NextResponse.json<ApiResponse<Authenticator | null>>(\r\n { ok: true, data: null },\r\n { status: 201 },\r\n );\r\n\r\n response.cookies.set(ACCESS_TOKEN_COOKIE_NAME, res.accessToken, {\r\n expires: addMinutes(new Date(), 9),\r\n httpOnly: true,\r\n sameSite: 'strict',\r\n });\r\n\r\n response.cookies.set(REFRESH_TOKEN_COOKIE_NAME, res.refreshToken, {\r\n expires: subMinutes(addDays(new Date(), 30), 1),\r\n httpOnly: true,\r\n sameSite: 'strict',\r\n });\r\n\r\n return response;\r\n } catch {\r\n return NextResponse.json<ApiResponse>(\r\n {\r\n ok: false,\r\n message: 'Unauthorized',\r\n },\r\n { status: 401 },\r\n );\r\n }\r\n }\r\n\r\n /*\r\n *\r\n * POST -> /api/authenticate\r\n *\r\n */\r\n\r\n if (path === 'authenticate') {\r\n const body = await request.json();\r\n const parsed = AuthenticateDefinition.safeParse(body);\r\n\r\n if (!parsed.success) {\r\n return NextResponse.json<ApiResponse>(\r\n {\r\n ok: false,\r\n message: parsed.error.issues[0].message,\r\n },\r\n { status: 400 },\r\n );\r\n }\r\n\r\n try {\r\n const res = await authenticate(parsed.data, {\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n },\r\n environment: ENVIRONMENT,\r\n });\r\n\r\n const response = NextResponse.json<ApiResponse>({ ok: true }, { status: 201 });\r\n\r\n response.cookies.set(ACCESS_TOKEN_COOKIE_NAME, res.accessToken, {\r\n expires: addMinutes(new Date(), 9),\r\n httpOnly: true,\r\n });\r\n\r\n response.cookies.set(REFRESH_TOKEN_COOKIE_NAME, res.refreshToken, {\r\n expires: subMinutes(addDays(new Date(), 30), 1),\r\n httpOnly: true,\r\n });\r\n\r\n return response;\r\n } catch {\r\n return NextResponse.json<ApiResponse>(\r\n {\r\n ok: false,\r\n message: 'Unauthorized',\r\n },\r\n { status: 401 },\r\n );\r\n }\r\n }\r\n\r\n return NextResponse.json<ApiResponse>(\r\n {\r\n ok: false,\r\n message: 'Not found',\r\n },\r\n { status: 404 },\r\n );\r\n};\r\n","/**\n * @module constants\n * @summary Useful constants\n * @description\n * Collection of useful date constants.\n *\n * The constants could be imported from `date-fns/constants`:\n *\n * ```ts\n * import { maxTime, minTime } from \"./constants/date-fns/constants\";\n *\n * function isAllowedTime(time) {\n * return time <= maxTime && time >= minTime;\n * }\n * ```\n */\n\n/**\n * @constant\n * @name daysInWeek\n * @summary Days in 1 week.\n */\nexport const daysInWeek = 7;\n\n/**\n * @constant\n * @name daysInYear\n * @summary Days in 1 year.\n *\n * @description\n * How many days in a year.\n *\n * One years equals 365.2425 days according to the formula:\n *\n * > Leap year occurs every 4 years, except for years that are divisible by 100 and not divisible by 400.\n * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days\n */\nexport const daysInYear = 365.2425;\n\n/**\n * @constant\n * @name maxTime\n * @summary Maximum allowed time.\n *\n * @example\n * import { maxTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = 8640000000000001 <= maxTime;\n * //=> false\n *\n * new Date(8640000000000001);\n * //=> Invalid Date\n */\nexport const maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;\n\n/**\n * @constant\n * @name minTime\n * @summary Minimum allowed time.\n *\n * @example\n * import { minTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = -8640000000000001 >= minTime;\n * //=> false\n *\n * new Date(-8640000000000001)\n * //=> Invalid Date\n */\nexport const minTime = -maxTime;\n\n/**\n * @constant\n * @name millisecondsInWeek\n * @summary Milliseconds in 1 week.\n */\nexport const millisecondsInWeek = 604800000;\n\n/**\n * @constant\n * @name millisecondsInDay\n * @summary Milliseconds in 1 day.\n */\nexport const millisecondsInDay = 86400000;\n\n/**\n * @constant\n * @name millisecondsInMinute\n * @summary Milliseconds in 1 minute\n */\nexport const millisecondsInMinute = 60000;\n\n/**\n * @constant\n * @name millisecondsInHour\n * @summary Milliseconds in 1 hour\n */\nexport const millisecondsInHour = 3600000;\n\n/**\n * @constant\n * @name millisecondsInSecond\n * @summary Milliseconds in 1 second\n */\nexport const millisecondsInSecond = 1000;\n\n/**\n * @constant\n * @name minutesInYear\n * @summary Minutes in 1 year.\n */\nexport const minutesInYear = 525600;\n\n/**\n * @constant\n * @name minutesInMonth\n * @summary Minutes in 1 month.\n */\nexport const minutesInMonth = 43200;\n\n/**\n * @constant\n * @name minutesInDay\n * @summary Minutes in 1 day.\n */\nexport const minutesInDay = 1440;\n\n/**\n * @constant\n * @name minutesInHour\n * @summary Minutes in 1 hour.\n */\nexport const minutesInHour = 60;\n\n/**\n * @constant\n * @name monthsInQuarter\n * @summary Months in 1 quarter.\n */\nexport const monthsInQuarter = 3;\n\n/**\n * @constant\n * @name monthsInYear\n * @summary Months in 1 year.\n */\nexport const monthsInYear = 12;\n\n/**\n * @constant\n * @name quartersInYear\n * @summary Quarters in 1 year\n */\nexport const quartersInYear = 4;\n\n/**\n * @constant\n * @name secondsInHour\n * @summary Seconds in 1 hour.\n */\nexport const secondsInHour = 3600;\n\n/**\n * @constant\n * @name secondsInMinute\n * @summary Seconds in 1 minute.\n */\nexport const secondsInMinute = 60;\n\n/**\n * @constant\n * @name secondsInDay\n * @summary Seconds in 1 day.\n */\nexport const secondsInDay = secondsInHour * 24;\n\n/**\n * @constant\n * @name secondsInWeek\n * @summary Seconds in 1 week.\n */\nexport const secondsInWeek = secondsInDay * 7;\n\n/**\n * @constant\n * @name secondsInYear\n * @summary Seconds in 1 year.\n */\nexport const secondsInYear = secondsInDay * daysInYear;\n\n/**\n * @constant\n * @name secondsInMonth\n * @summary Seconds in 1 month\n */\nexport const secondsInMonth = secondsInYear / 12;\n\n/**\n * @constant\n * @name secondsInQuarter\n * @summary Seconds in 1 quarter.\n */\nexport const secondsInQuarter = secondsInMonth * 3;\n\n/**\n * @constant\n * @name constructFromSymbol\n * @summary Symbol enabling Date extensions to inherit properties from the reference date.\n *\n * The symbol is used to enable the `constructFrom` function to construct a date\n * using a reference date and a value. It allows to transfer extra properties\n * from the reference date to the new date. It's useful for extensions like\n * [`TZDate`](https://github.com/date-fns/tz) that accept a time zone as\n * a constructor argument.\n */\nexport const constructFromSymbol = Symbol.for(\"constructDateFrom\");\n","import { constructFromSymbol } from \"./constants.js\";\n\n/**\n * @name constructFrom\n * @category Generic Helpers\n * @summary Constructs a date using the reference date and the value\n *\n * @description\n * The function constructs a new date using the constructor from the reference\n * date and the given value. It helps to build generic functions that accept\n * date extensions.\n *\n * It defaults to `Date` if the passed reference date is a number or a string.\n *\n * Starting from v3.7.0, it allows to construct a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The reference date to take constructor from\n * @param value - The value to create the date\n *\n * @returns Date initialized using the given date and value\n *\n * @example\n * import { constructFrom } from \"./constructFrom/date-fns\";\n *\n * // A function that clones a date preserving the original type\n * function cloneDate<DateType extends Date>(date: DateType): DateType {\n * return constructFrom(\n * date, // Use constructor from the given date\n * date.getTime() // Use the date value to create a new date\n * );\n * }\n */\nexport function constructFrom(date, value) {\n if (typeof date === \"function\") return date(value);\n\n if (date && typeof date === \"object\" && constructFromSymbol in date)\n return date[constructFromSymbol](value);\n\n if (date instanceof Date) return new date.constructor(value);\n\n return new Date(value);\n}\n\n// Fallback for modularized imports:\nexport default constructFrom;\n","import { constructFrom } from \"./constructFrom.js\";\n\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * Starting from v3.7.0, it clones a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param argument - The value to convert\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nexport function toDate(argument, context) {\n // [TODO] Get rid of `toDate` or `constructFrom`?\n return constructFrom(context || argument, argument);\n}\n\n// Fallback for modularized imports:\nexport default toDate;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link addDays} function options.\n */\n\n/**\n * @name addDays\n * @category Day Helpers\n * @summary Add the specified number of days to the given date.\n *\n * @description\n * Add the specified number of days to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of days to be added.\n * @param options - An object with options\n *\n * @returns The new date with the days added\n *\n * @example\n * // Add 10 days to 1 September 2014:\n * const result = addDays(new Date(2014, 8, 1), 10)\n * //=> Thu Sep 11 2014 00:00:00\n */\nexport function addDays(date, amount, options) {\n const _date = toDate(date, options?.in);\n if (isNaN(amount)) return constructFrom(options?.in || date, NaN);\n\n // If 0 days, no-op to avoid changing times in the hour before end of DST\n if (!amount) return _date;\n\n _date.setDate(_date.getDate() + amount);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default addDays;\n","import { millisecondsInMinute } from \"./constants.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link addMinutes} function options.\n */\n\n/**\n * @name addMinutes\n * @category Minute Helpers\n * @summary Add the specified number of minutes to the given date.\n *\n * @description\n * Add the specified number of minutes to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of minutes to be added.\n * @param options - An object with options\n *\n * @returns The new date with the minutes added\n *\n * @example\n * // Add 30 minutes to 10 July 2014 12:00:00:\n * const result = addMinutes(new Date(2014, 6, 10, 12, 0), 30)\n * //=> Thu Jul 10 2014 12:30:00\n */\nexport function addMinutes(date, amount, options) {\n const _date = toDate(date, options?.in);\n _date.setTime(_date.getTime() + amount * millisecondsInMinute);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default addMinutes;\n","import { addMinutes } from \"./addMinutes.js\";\n\n/**\n * The {@link subMinutes} function options.\n */\n\n/**\n * @name subMinutes\n * @category Minute Helpers\n * @summary Subtract the specified number of minutes from the given date.\n *\n * @description\n * Subtract the specified number of minutes from the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of minutes to be subtracted.\n * @param options - An object with options\n *\n * @returns The new date with the minutes subtracted\n *\n * @example\n * // Subtract 30 minutes from 10 July 2014 12:00:00:\n * const result = subMinutes(new Date(2014, 6, 10, 12, 0), 30)\n * //=> Thu Jul 10 2014 11:30:00\n */\nexport function subMinutes(date, amount, options) {\n return addMinutes(date, -amount, options);\n}\n\n// Fallback for modularized imports:\nexport default subMinutes;\n","import { z } from 'zod';\r\n\r\nexport const SITE_ID = z\r\n .string()\r\n .min(1, 'Environment variable \"NEXT_PUBLIC_SITE_ID\" must be 1 or more characters')\r\n .max(32, 'Environment variable \"NEXT_PUBLIC_SITE_ID\" must not be more than 32 characters')\r\n .trim()\r\n .parse(process.env.NEXT_PUBLIC_SITE_ID);\r\n\r\nexport const PLATFORM_ID = z\r\n .string()\r\n .min(1, 'Environment variable \"NEXT_PUBLIC_PLATFORM_ID\" must be 1 or more characters')\r\n .max(32, 'Environment variable \"NEXT_PUBLIC_PLATFORM_ID\" must not be more than 32 characters')\r\n .trim()\r\n .parse(process.env.NEXT_PUBLIC_PLATFORM_ID);\r\n\r\nexport const PLATFORM_CODE = z\r\n .string()\r\n .min(4, 'Environment variable \"NEXT_PUBLIC_PLATFORM_CODE\" must be at least 4 characters')\r\n .max(8, 'Environment variable \"NEXT_PUBLIC_PLATFORM_CODE\" must not be more than 8 characters')\r\n .trim()\r\n .parse(process.env.NEXT_PUBLIC_PLATFORM_CODE);\r\n\r\nexport const ENVIRONMENT = z\r\n .enum(['production', 'development'])\r\n .catch('development')\r\n .parse(process.env.NEXT_PUBLIC_ENVIRONMENT);\r\n\r\nexport const BYPASS_RECAPTCHA = z\r\n .any()\r\n .transform(Boolean)\r\n .catch(false)\r\n .parse(process.env.NEXT_PUBLIC_BYPASS_RECAPTCHA);\r\n\r\nexport const ACCESS_TOKEN_COOKIE_NAME: string = 'WebPortalAuthAccessToken';\r\nexport const REFRESH_TOKEN_COOKIE_NAME: string = 'WebPortalAuthRefreshToken';\r\n"],"mappings":"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","names":["import_zod"]}
1
+ {"version":3,"sources":["../src/lib/handlers.ts","../src/lib/constants/index.ts"],"sourcesContent":["import {\r\n authenticate,\r\n createSession,\r\n destroySession,\r\n refreshSession,\r\n type Authenticator,\r\n} from '@opexa/portal-sdk-core';\r\nimport { addDays, addMinutes, subMinutes } from 'date-fns';\r\nimport { NextRequest, NextResponse } from 'next/server';\r\nimport { z } from 'zod';\r\nimport {\r\n ACCESS_TOKEN_COOKIE_NAME,\r\n BYPASS_RECAPTCHA,\r\n ENVIRONMENT,\r\n PLATFORM_CODE,\r\n RECAPTCHA_HEADER_KEY,\r\n REFRESH_TOKEN_COOKIE_NAME,\r\n} from './constants';\r\nimport type { ApiResponse } from './types';\r\n\r\nconst CreateSessionDefinition = z.union([\r\n z.object({\r\n type: z.literal('NAME_AND_PASSWORD'),\r\n name: z.string(),\r\n password: z.string(),\r\n }),\r\n z.object({\r\n type: z.literal('MOBILE_NUMBER'),\r\n mobileNumber: z.string(),\r\n verificationCode: z.string(),\r\n }),\r\n z.object({\r\n type: z.literal('MAYA'),\r\n session: z.string(),\r\n }),\r\n z.object({\r\n type: z.union([\r\n z.literal('SOCIALS'),\r\n z.literal('CABINET'),\r\n z.literal('SINGLE_USE_TOKEN'),\r\n ]),\r\n token: z.string(),\r\n }),\r\n]);\r\n\r\nconst AuthenticateDefinition = z.object({\r\n type: z.literal('SECURITY_QUESTION'),\r\n token: z.string(),\r\n secretAnswer: z.string(),\r\n});\r\n\r\ntype GetSessionResponse =\r\n | {\r\n status: 'authenticated';\r\n token: string;\r\n }\r\n | {\r\n status: 'unauthenticated';\r\n };\r\n\r\nexport const GET = async (\r\n request: NextRequest,\r\n { params }: { params: Promise<{ auth: string[] }> },\r\n) => {\r\n const { auth } = await params;\r\n const path = auth[0];\r\n\r\n /*\r\n *\r\n * GET -> /api/sessions\r\n *\r\n */\r\n\r\n if (path === 'sessions') {\r\n const accessToken = request.cookies.get(ACCESS_TOKEN_COOKIE_NAME)?.value;\r\n const refreshToken = request.cookies.get(REFRESH_TOKEN_COOKIE_NAME)?.value;\r\n\r\n if (!refreshToken) {\r\n const response = NextResponse.json<ApiResponse<GetSessionResponse>>({\r\n ok: true,\r\n data: {\r\n status: 'unauthenticated',\r\n },\r\n });\r\n\r\n response.cookies.delete(ACCESS_TOKEN_COOKIE_NAME);\r\n response.cookies.delete(REFRESH_TOKEN_COOKIE_NAME);\r\n\r\n return response;\r\n }\r\n\r\n if (!accessToken) {\r\n try {\r\n const data = await refreshSession({\r\n headers: {\r\n Authorization: `Bearer ${refreshToken}`,\r\n },\r\n environment: ENVIRONMENT,\r\n });\r\n\r\n const response = NextResponse.json<ApiResponse<GetSessionResponse>>({\r\n ok: true,\r\n data: {\r\n status: 'authenticated',\r\n token: data.accessToken,\r\n },\r\n });\r\n\r\n response.cookies.set(ACCESS_TOKEN_COOKIE_NAME, data.accessToken, {\r\n expires: addMinutes(new Date(), 9),\r\n httpOnly: true,\r\n sameSite: 'strict',\r\n });\r\n\r\n return response;\r\n } catch {\r\n const response = NextResponse.json<ApiResponse<GetSessionResponse>>({\r\n ok: true,\r\n data: {\r\n status: 'unauthenticated',\r\n },\r\n });\r\n\r\n response.cookies.delete(REFRESH_TOKEN_COOKIE_NAME);\r\n\r\n return response;\r\n }\r\n }\r\n\r\n return NextResponse.json<ApiResponse<GetSessionResponse>>({\r\n ok: true,\r\n data: {\r\n status: 'authenticated',\r\n token: accessToken,\r\n },\r\n });\r\n }\r\n\r\n return NextResponse.json<ApiResponse>(\r\n {\r\n ok: false,\r\n message: 'Not found',\r\n },\r\n { status: 404 },\r\n );\r\n};\r\n\r\nexport const DELETE = async (\r\n request: NextRequest,\r\n { params }: { params: Promise<{ auth: string[] }> },\r\n) => {\r\n const { auth } = await params;\r\n const path = auth[0];\r\n\r\n /*\r\n *\r\n * DELETE -> /api/sessions\r\n *\r\n */\r\n\r\n if (path === 'sessions') {\r\n const accessToken = request.cookies.get(ACCESS_TOKEN_COOKIE_NAME)?.value;\r\n\r\n if (accessToken) {\r\n await destroySession({\r\n headers: {\r\n Authorization: `Bearer ${accessToken}`,\r\n },\r\n environment: ENVIRONMENT,\r\n });\r\n }\r\n\r\n const response = NextResponse.json<ApiResponse>({\r\n ok: true,\r\n });\r\n\r\n response.cookies.delete(ACCESS_TOKEN_COOKIE_NAME);\r\n response.cookies.delete(REFRESH_TOKEN_COOKIE_NAME);\r\n\r\n return response;\r\n }\r\n\r\n return NextResponse.json<ApiResponse>(\r\n {\r\n ok: false,\r\n message: 'Not found',\r\n },\r\n { status: 404 },\r\n );\r\n};\r\n\r\nexport const POST = async (\r\n request: NextRequest,\r\n { params }: { params: Promise<{ auth: string[] }> },\r\n): Promise<NextResponse> => {\r\n const { auth } = await params;\r\n const path = auth[0];\r\n\r\n /*\r\n *\r\n * POST -> /api/sessions\r\n *\r\n */\r\n\r\n if (path === 'sessions') {\r\n const body = await request.json();\r\n const parsed = CreateSessionDefinition.safeParse(body);\r\n const recaptcha = request.headers.get(RECAPTCHA_HEADER_KEY);\r\n\r\n if (!parsed.success) {\r\n return NextResponse.json<ApiResponse>(\r\n {\r\n ok: false,\r\n message: parsed.error.issues[0].message,\r\n },\r\n { status: 400 },\r\n );\r\n }\r\n\r\n try {\r\n const res = await createSession(parsed.data, {\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n ...(recaptcha && {\r\n [RECAPTCHA_HEADER_KEY]: recaptcha,\r\n }),\r\n ...(BYPASS_RECAPTCHA && {\r\n 'Test-Pass': '',\r\n }),\r\n },\r\n environment: ENVIRONMENT,\r\n });\r\n\r\n if (res.authenticator) {\r\n return NextResponse.json<ApiResponse<Authenticator | null>>({\r\n ok: true,\r\n data: res.authenticator,\r\n });\r\n }\r\n\r\n const response = NextResponse.json<ApiResponse<Authenticator | null>>(\r\n { ok: true, data: null },\r\n { status: 201 },\r\n );\r\n\r\n response.cookies.set(ACCESS_TOKEN_COOKIE_NAME, res.accessToken, {\r\n expires: addMinutes(new Date(), 9),\r\n httpOnly: true,\r\n sameSite: 'strict',\r\n });\r\n\r\n response.cookies.set(REFRESH_TOKEN_COOKIE_NAME, res.refreshToken, {\r\n expires: subMinutes(addDays(new Date(), 30), 1),\r\n httpOnly: true,\r\n sameSite: 'strict',\r\n });\r\n\r\n return response;\r\n } catch {\r\n return NextResponse.json<ApiResponse>(\r\n {\r\n ok: false,\r\n message: 'Unauthorized',\r\n },\r\n { status: 401 },\r\n );\r\n }\r\n }\r\n\r\n /*\r\n *\r\n * POST -> /api/authenticate\r\n *\r\n */\r\n\r\n if (path === 'authenticate') {\r\n const body = await request.json();\r\n const parsed = AuthenticateDefinition.safeParse(body);\r\n const recaptcha = request.headers.get(RECAPTCHA_HEADER_KEY);\r\n\r\n if (!parsed.success) {\r\n return NextResponse.json<ApiResponse>(\r\n {\r\n ok: false,\r\n message: parsed.error.issues[0].message,\r\n },\r\n { status: 400 },\r\n );\r\n }\r\n\r\n try {\r\n const res = await authenticate(parsed.data, {\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n ...(recaptcha && {\r\n [RECAPTCHA_HEADER_KEY]: recaptcha,\r\n }),\r\n ...(BYPASS_RECAPTCHA && {\r\n 'Test-Pass': '',\r\n }),\r\n },\r\n environment: ENVIRONMENT,\r\n });\r\n\r\n const response = NextResponse.json<ApiResponse>(\r\n { ok: true },\r\n { status: 201 },\r\n );\r\n\r\n response.cookies.set(ACCESS_TOKEN_COOKIE_NAME, res.accessToken, {\r\n expires: addMinutes(new Date(), 9),\r\n httpOnly: true,\r\n });\r\n\r\n response.cookies.set(REFRESH_TOKEN_COOKIE_NAME, res.refreshToken, {\r\n expires: subMinutes(addDays(new Date(), 30), 1),\r\n httpOnly: true,\r\n });\r\n\r\n return response;\r\n } catch {\r\n return NextResponse.json<ApiResponse>(\r\n {\r\n ok: false,\r\n message: 'Unauthorized',\r\n },\r\n { status: 401 },\r\n );\r\n }\r\n }\r\n\r\n return NextResponse.json<ApiResponse>(\r\n {\r\n ok: false,\r\n message: 'Not found',\r\n },\r\n { status: 404 },\r\n );\r\n};\r\n","import type { GameProvider } from '@opexa/portal-sdk-core';\r\nimport { z } from 'zod';\r\n\r\nexport const SITE_ID = z\r\n .string()\r\n .min(\r\n 1,\r\n 'Environment variable \"NEXT_PUBLIC_SITE_ID\" must be 1 or more characters',\r\n )\r\n .max(\r\n 32,\r\n 'Environment variable \"NEXT_PUBLIC_SITE_ID\" must not be more than 32 characters',\r\n )\r\n .trim()\r\n .parse(process.env.NEXT_PUBLIC_SITE_ID);\r\n\r\nexport const PLATFORM_ID = z\r\n .string()\r\n .min(\r\n 1,\r\n 'Environment variable \"NEXT_PUBLIC_PLATFORM_ID\" must be 1 or more characters',\r\n )\r\n .max(\r\n 32,\r\n 'Environment variable \"NEXT_PUBLIC_PLATFORM_ID\" must not be more than 32 characters',\r\n )\r\n .trim()\r\n .parse(process.env.NEXT_PUBLIC_PLATFORM_ID);\r\n\r\nexport const PLATFORM_CODE = z\r\n .string()\r\n .min(\r\n 4,\r\n 'Environment variable \"NEXT_PUBLIC_PLATFORM_CODE\" must be at least 4 characters',\r\n )\r\n .max(\r\n 8,\r\n 'Environment variable \"NEXT_PUBLIC_PLATFORM_CODE\" must not be more than 8 characters',\r\n )\r\n .trim()\r\n .parse(process.env.NEXT_PUBLIC_PLATFORM_CODE);\r\n\r\nexport const ENVIRONMENT = z\r\n .enum(['production', 'development'])\r\n .catch('development')\r\n .parse(process.env.NEXT_PUBLIC_ENVIRONMENT);\r\n\r\nexport const BYPASS_RECAPTCHA = z\r\n .any()\r\n .transform(Boolean)\r\n .catch(false)\r\n .parse(process.env.NEXT_PUBLIC_BYPASS_RECAPTCHA);\r\n\r\nexport const ACCESS_TOKEN_COOKIE_NAME: string = 'WebPortalAuthAccessToken';\r\nexport const REFRESH_TOKEN_COOKIE_NAME: string = 'WebPortalAuthRefreshToken';\r\n\r\nexport const LEGACY_GAME_PROVIDERS: GameProvider[] = [\r\n 'JILI',\r\n 'PGSOFT',\r\n 'FACHAI',\r\n 'BTI',\r\n 'DG',\r\n 'PLAYTECH',\r\n 'E2E',\r\n 'ONEAPI_EVOLUTION',\r\n 'CQ9',\r\n 'JDB',\r\n 'HABANERO',\r\n 'SPINIX',\r\n 'JOKER',\r\n 'HACKSAW',\r\n 'EVOLUTIONNETENT',\r\n 'JDBGTF',\r\n 'JDBSPRIBE',\r\n 'MICROGAMING',\r\n 'RELAXGAMING',\r\n 'EVOPLAY',\r\n 'BOOONGO',\r\n 'BGAMING',\r\n 'KINGMAKER',\r\n 'KINGMIDAS',\r\n 'YELLOWBAT',\r\n 'ETENGJUE',\r\n 'SABA',\r\n 'PRAGMATICPLAY',\r\n 'SPRIBE',\r\n 'EZUGI',\r\n 'ALIZE',\r\n];\r\n\r\nexport const RECAPTCHA_HEADER_KEY: string = 'Google-Recaptcha-Response';\r\n"],"mappings":"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","names":["import_zod"]}
package/dist/handlers.mjs CHANGED
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  ACCESS_TOKEN_COOKIE_NAME,
3
+ BYPASS_RECAPTCHA,
3
4
  ENVIRONMENT,
4
5
  PLATFORM_CODE,
5
- REFRESH_TOKEN_COOKIE_NAME,
6
- addMinutes,
7
- constructFrom,
8
- toDate
9
- } from "./chunk-HP26SZP3.mjs";
6
+ RECAPTCHA_HEADER_KEY,
7
+ REFRESH_TOKEN_COOKIE_NAME
8
+ } from "./chunk-CA3CKIFK.mjs";
9
+ import "./chunk-J5LGTIGS.mjs";
10
10
 
11
11
  // src/lib/handlers.ts
12
12
  import {
@@ -15,22 +15,7 @@ import {
15
15
  destroySession,
16
16
  refreshSession
17
17
  } from "@opexa/portal-sdk-core";
18
-
19
- // ../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/addDays.js
20
- function addDays(date, amount, options) {
21
- const _date = toDate(date, options == null ? void 0 : options.in);
22
- if (isNaN(amount)) return constructFrom((options == null ? void 0 : options.in) || date, NaN);
23
- if (!amount) return _date;
24
- _date.setDate(_date.getDate() + amount);
25
- return _date;
26
- }
27
-
28
- // ../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/subMinutes.js
29
- function subMinutes(date, amount, options) {
30
- return addMinutes(date, -amount, options);
31
- }
32
-
33
- // src/lib/handlers.ts
18
+ import { addDays, addMinutes, subMinutes } from "date-fns";
34
19
  import { NextResponse } from "next/server";
35
20
  import { z } from "zod";
36
21
  var CreateSessionDefinition = z.union([
@@ -49,7 +34,11 @@ var CreateSessionDefinition = z.union([
49
34
  session: z.string()
50
35
  }),
51
36
  z.object({
52
- type: z.union([z.literal("SOCIALS"), z.literal("CABINET"), z.literal("SINGLE_USE_TOKEN")]),
37
+ type: z.union([
38
+ z.literal("SOCIALS"),
39
+ z.literal("CABINET"),
40
+ z.literal("SINGLE_USE_TOKEN")
41
+ ]),
53
42
  token: z.string()
54
43
  })
55
44
  ]);
@@ -159,6 +148,7 @@ var POST = async (request, { params }) => {
159
148
  if (path === "sessions") {
160
149
  const body = await request.json();
161
150
  const parsed = CreateSessionDefinition.safeParse(body);
151
+ const recaptcha = request.headers.get(RECAPTCHA_HEADER_KEY);
162
152
  if (!parsed.success) {
163
153
  return NextResponse.json(
164
154
  {
@@ -171,7 +161,13 @@ var POST = async (request, { params }) => {
171
161
  try {
172
162
  const res = await createSession(parsed.data, {
173
163
  headers: {
174
- "Platform-Code": PLATFORM_CODE
164
+ "Platform-Code": PLATFORM_CODE,
165
+ ...recaptcha && {
166
+ [RECAPTCHA_HEADER_KEY]: recaptcha
167
+ },
168
+ ...BYPASS_RECAPTCHA && {
169
+ "Test-Pass": ""
170
+ }
175
171
  },
176
172
  environment: ENVIRONMENT
177
173
  });
@@ -209,6 +205,7 @@ var POST = async (request, { params }) => {
209
205
  if (path === "authenticate") {
210
206
  const body = await request.json();
211
207
  const parsed = AuthenticateDefinition.safeParse(body);
208
+ const recaptcha = request.headers.get(RECAPTCHA_HEADER_KEY);
212
209
  if (!parsed.success) {
213
210
  return NextResponse.json(
214
211
  {
@@ -221,11 +218,20 @@ var POST = async (request, { params }) => {
221
218
  try {
222
219
  const res = await authenticate(parsed.data, {
223
220
  headers: {
224
- "Platform-Code": PLATFORM_CODE
221
+ "Platform-Code": PLATFORM_CODE,
222
+ ...recaptcha && {
223
+ [RECAPTCHA_HEADER_KEY]: recaptcha
224
+ },
225
+ ...BYPASS_RECAPTCHA && {
226
+ "Test-Pass": ""
227
+ }
225
228
  },
226
229
  environment: ENVIRONMENT
227
230
  });
228
- const response = NextResponse.json({ ok: true }, { status: 201 });
231
+ const response = NextResponse.json(
232
+ { ok: true },
233
+ { status: 201 }
234
+ );
229
235
  response.cookies.set(ACCESS_TOKEN_COOKIE_NAME, res.accessToken, {
230
236
  expires: addMinutes(/* @__PURE__ */ new Date(), 9),
231
237
  httpOnly: true