@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.
- package/dist/JackpotCounter.module-5D2TMSET.module.css +46 -0
- package/dist/QRPh-LURVHEVK.png +0 -0
- package/dist/ball-TSKR3KCL.png +0 -0
- package/dist/card-DTJVRZI7.png +0 -0
- package/dist/chunk-CA3CKIFK.mjs +74 -0
- package/dist/chunk-CA3CKIFK.mjs.map +1 -0
- package/dist/chunk-J5LGTIGS.mjs +10 -0
- package/dist/chunk-J5LGTIGS.mjs.map +1 -0
- package/dist/chunk-WGWFJYET.mjs +1229 -0
- package/dist/chunk-WGWFJYET.mjs.map +1 -0
- package/dist/close-chest-T4YK5KYS.png +0 -0
- package/dist/gcash-3TV2ZD5Z.png +0 -0
- package/dist/handlers.js +53 -62
- package/dist/handlers.js.map +1 -1
- package/dist/handlers.mjs +31 -25
- package/dist/handlers.mjs.map +1 -1
- package/dist/index.d.mts +116 -5
- package/dist/index.d.ts +116 -5
- package/dist/index.js +6715 -7321
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +5540 -7305
- package/dist/index.mjs.map +1 -1
- package/dist/maya-2LESMCYJ.png +0 -0
- package/dist/middleware.js +26 -41
- package/dist/middleware.js.map +1 -1
- package/dist/middleware.mjs +7 -4
- package/dist/middleware.mjs.map +1 -1
- package/dist/online-bank-ZRRABICE.png +0 -0
- package/dist/open-chest-XMGW5QZE.png +0 -0
- package/dist/theme.css +231 -50
- package/dist/trophy-QC26LEAT.png +0 -0
- package/dist/ui.d.mts +6904 -0
- package/dist/ui.d.ts +6904 -0
- package/dist/ui.js +1280 -0
- package/dist/ui.js.map +1 -0
- package/dist/ui.mjs +48 -0
- package/dist/ui.mjs.map +1 -0
- package/package.json +109 -95
- package/dist/chunk-HP26SZP3.mjs +0 -84
- package/dist/chunk-HP26SZP3.mjs.map +0 -1
|
@@ -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(
|
|
85
|
-
|
|
86
|
-
|
|
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([
|
|
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(
|
|
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;
|
package/dist/handlers.js.map
CHANGED
|
@@ -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
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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([
|
|
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(
|
|
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
|